rentease-backend/controllers/tenantController.js

135 lines
3.4 KiB
JavaScript
Raw 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 { Tenant } = 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 formatTenantData = (tenant) => {
return {
...tenant.toJSON(),
createTime: formatDate(tenant.createTime),
updateTime: formatDate(tenant.updateTime)
};
};
// 获取所有租客
const getAllTenants = async (req, res) => {
try {
const tenants = await Tenant.findAll({
where: { isDeleted: 0 }
});
const formattedTenants = tenants.map(formatTenantData);
res.status(200).json(formattedTenants);
} catch (error) {
res.status(500).json({ error: error.message });
}
};
// 获取单个租客
const getTenantById = async (req, res) => {
try {
const { id } = req.params;
const tenant = await Tenant.findOne({
where: { id, isDeleted: 0 }
});
if (!tenant) {
return res.status(404).json({ error: '租客不存在' });
}
const formattedTenant = formatTenantData(tenant);
res.status(200).json(formattedTenant);
} catch (error) {
res.status(500).json({ error: error.message });
}
};
// 创建租客
const createTenant = async (req, res) => {
try {
const { name, phone, idCard } = req.body;
const tenant = await Tenant.create({ name, phone, idCard });
res.status(201).json(tenant);
} catch (error) {
res.status(500).json({ error: error.message });
}
};
// 更新租客
const updateTenant = async (req, res) => {
try {
const { id } = req.params;
const { name, phone, idCard } = req.body;
const tenant = await Tenant.findOne({
where: { id, isDeleted: 0 }
});
if (!tenant) {
return res.status(404).json({ error: '租客不存在' });
}
await tenant.update({ name, phone, idCard });
res.status(200).json(tenant);
} catch (error) {
res.status(500).json({ error: error.message });
}
};
// 删除租客(软删除)
const deleteTenant = async (req, res) => {
try {
const { id } = req.params;
const tenant = await Tenant.findOne({
where: { id, isDeleted: 0 }
});
if (!tenant) {
return res.status(404).json({ error: '租客不存在' });
}
await tenant.update({ isDeleted: 1 });
res.status(200).json({ message: '租客删除成功' });
} catch (error) {
res.status(500).json({ error: error.message });
}
};
// 获取所有租客(不分页)
const listTenants = async (req, res) => {
try {
const { name, phone, idCard } = req.query;
// 构建查询条件
const where = { isDeleted: 0 };
if (name) {
where.name = {
[Op.like]: `%${name}%`
};
}
if (phone) {
where.phone = {
[Op.like]: `%${phone}%`
};
}
if (idCard) {
where.idCard = {
[Op.like]: `%${idCard}%`
};
}
const tenants = await Tenant.findAll({ where });
const formattedTenants = tenants.map(formatTenantData);
res.status(200).json(formattedTenants);
} catch (error) {
res.status(500).json({ error: error.message });
}
};
module.exports = {
getAllTenants,
listTenants,
getTenantById,
createTenant,
updateTenant,
deleteTenant
};