rentease-backend/controllers/apartmentController.js

175 lines
4.2 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

const { Apartment } = require('../models');
const { Op } = require('sequelize');
// 格式化时间(考虑时区,转换为北京时间)
const formatDate = (date) => {
if (!date) return null;
// 创建一个新的Date对象加上8小时的时区偏移
const beijingDate = new Date(date.getTime() + 8 * 60 * 60 * 1000);
return beijingDate.toISOString().split('T')[0];
};
// 格式化公寓数据
const formatApartmentData = (apartment) => {
return {
...apartment.toJSON(),
createTime: formatDate(apartment.createTime),
updateTime: formatDate(apartment.updateTime)
};
};
// 获取所有公寓(支持搜索和分页)
const getAllApartments = async (req, res) => {
try {
const { regionId, name, page = 1, pageSize = 10 } = req.query;
// 构建查询条件
const where = { isDeleted: 0 };
if (regionId) {
where.regionId = regionId;
}
if (name) {
where.name = {
[Op.like]: `%${name}%`
};
}
// 计算偏移量
const offset = (page - 1) * pageSize;
// 查询公寓数据
const { count, rows } = await Apartment.findAndCountAll({
where,
limit: parseInt(pageSize),
offset: parseInt(offset)
});
// 格式化数据
const formattedApartments = rows.map(formatApartmentData);
// 返回结果
res.status(200).json({
data: formattedApartments,
total: count,
page: parseInt(page),
pageSize: parseInt(pageSize)
});
} catch (error) {
res.status(500).json({ error: error.message });
}
};
// 获取单个公寓
const getApartmentById = async (req, res) => {
try {
const { id } = req.params;
const apartment = await Apartment.findOne({
where: { id, isDeleted: 0 }
});
if (!apartment) {
return res.status(404).json({ error: '公寓不存在' });
}
const formattedApartment = formatApartmentData(apartment);
res.status(200).json(formattedApartment);
} catch (error) {
res.status(500).json({ error: error.message });
}
};
// 创建公寓
const createApartment = async (req, res) => {
try {
const { name, address } = req.body;
const apartment = await Apartment.create({
name,
address,
createBy: req.user.id,
updateBy: req.user.id
});
res.status(201).json(apartment);
} catch (error) {
res.status(500).json({ error: error.message });
}
};
// 更新公寓
const updateApartment = async (req, res) => {
try {
const { id } = req.params;
const { name, address } = req.body;
const apartment = await Apartment.findOne({
where: { id, isDeleted: 0 }
});
if (!apartment) {
return res.status(404).json({ error: '公寓不存在' });
}
await apartment.update({
name,
address,
updateBy: req.user.id
});
res.status(200).json(apartment);
} catch (error) {
res.status(500).json({ error: error.message });
}
};
// 删除公寓(软删除)
const deleteApartment = async (req, res) => {
try {
const { id } = req.params;
const apartment = await Apartment.findOne({
where: { id, isDeleted: 0 }
});
if (!apartment) {
return res.status(404).json({ error: '公寓不存在' });
}
await apartment.update({
isDeleted: 1,
updateBy: req.user.id
});
res.status(200).json({ message: '公寓删除成功' });
} catch (error) {
res.status(500).json({ error: error.message });
}
};
// 获取所有公寓(不分页)
const listApartments = async (req, res) => {
try {
const { regionId, name } = req.query;
// 构建查询条件
const where = { isDeleted: 0 };
if (regionId) {
where.regionId = regionId;
}
if (name) {
where.name = {
[Op.like]: `%${name}%`
};
}
// 查询公寓数据
const apartments = await Apartment.findAll({
where
});
// 格式化数据
const formattedApartments = apartments.map(formatApartmentData);
// 返回结果
res.status(200).json(formattedApartments);
} catch (error) {
res.status(500).json({ error: error.message });
}
};
module.exports = {
getAllApartments,
listApartments,
getApartmentById,
createApartment,
updateApartment,
deleteApartment
};