175 lines
4.2 KiB
JavaScript
175 lines
4.2 KiB
JavaScript
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
|
||
}; |