rentease-backend/controllers/apartmentController.js

175 lines
4.2 KiB
JavaScript
Raw Normal View History

2026-03-08 16:28:33 +00:00
const { Apartment } = require('../models');
2026-03-02 12:36:41 +00:00
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) => {
2026-03-08 16:28:33 +00:00
return {
2026-03-02 12:36:41 +00:00
...apartment.toJSON(),
2026-03-03 15:36:48 +00:00
createTime: formatDate(apartment.createTime),
updateTime: formatDate(apartment.updateTime)
2026-03-02 12:36:41 +00:00
};
};
// 获取所有公寓(支持搜索和分页)
const getAllApartments = async (req, res) => {
try {
const { regionId, name, page = 1, pageSize = 10 } = req.query;
// 构建查询条件
2026-03-03 15:36:48 +00:00
const where = { isDeleted: 0 };
2026-03-02 12:36:41 +00:00
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;
2026-03-03 15:36:48 +00:00
const apartment = await Apartment.findOne({
2026-03-08 16:28:33 +00:00
where: { id, isDeleted: 0 }
2026-03-02 12:36:41 +00:00
});
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 {
2026-03-08 16:28:33 +00:00
const { name, address } = req.body;
const apartment = await Apartment.create({
name,
address,
createBy: req.user.id,
updateBy: req.user.id
});
2026-03-02 12:36:41 +00:00
res.status(201).json(apartment);
} catch (error) {
res.status(500).json({ error: error.message });
}
};
// 更新公寓
const updateApartment = async (req, res) => {
try {
const { id } = req.params;
2026-03-08 16:28:33 +00:00
const { name, address } = req.body;
2026-03-03 15:36:48 +00:00
const apartment = await Apartment.findOne({
where: { id, isDeleted: 0 }
});
2026-03-02 12:36:41 +00:00
if (!apartment) {
return res.status(404).json({ error: '公寓不存在' });
}
2026-03-08 16:28:33 +00:00
await apartment.update({
name,
address,
updateBy: req.user.id
});
2026-03-02 12:36:41 +00:00
res.status(200).json(apartment);
} catch (error) {
res.status(500).json({ error: error.message });
}
};
2026-03-03 15:36:48 +00:00
// 删除公寓(软删除)
2026-03-02 12:36:41 +00:00
const deleteApartment = async (req, res) => {
try {
const { id } = req.params;
2026-03-03 15:36:48 +00:00
const apartment = await Apartment.findOne({
where: { id, isDeleted: 0 }
});
2026-03-02 12:36:41 +00:00
if (!apartment) {
return res.status(404).json({ error: '公寓不存在' });
}
2026-03-08 16:28:33 +00:00
await apartment.update({
isDeleted: 1,
updateBy: req.user.id
});
2026-03-02 12:36:41 +00:00
res.status(200).json({ message: '公寓删除成功' });
} catch (error) {
res.status(500).json({ error: error.message });
}
};
2026-03-04 07:39:06 +00:00
// 获取所有公寓(不分页)
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({
2026-03-08 16:28:33 +00:00
where
2026-03-04 07:39:06 +00:00
});
// 格式化数据
const formattedApartments = apartments.map(formatApartmentData);
// 返回结果
res.status(200).json(formattedApartments);
} catch (error) {
res.status(500).json({ error: error.message });
}
};
2026-03-02 12:36:41 +00:00
module.exports = {
getAllApartments,
2026-03-04 07:39:06 +00:00
listApartments,
2026-03-02 12:36:41 +00:00
getApartmentById,
createApartment,
updateApartment,
deleteApartment
};