list接口
This commit is contained in:
parent
95063cad70
commit
6195a34212
|
|
@ -7,9 +7,6 @@ const syncDatabase = async () => {
|
||||||
console.log('正在同步数据库表结构...');
|
console.log('正在同步数据库表结构...');
|
||||||
await sequelize.sync({ force: true });
|
await sequelize.sync({ force: true });
|
||||||
console.log('数据库表结构同步成功');
|
console.log('数据库表结构同步成功');
|
||||||
|
|
||||||
// 插入初始数据
|
|
||||||
await insertInitialData();
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('数据库表结构同步失败:', error);
|
console.error('数据库表结构同步失败:', error);
|
||||||
} finally {
|
} finally {
|
||||||
|
|
@ -17,72 +14,4 @@ const syncDatabase = async () => {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// 插入初始数据
|
|
||||||
const insertInitialData = async () => {
|
|
||||||
try {
|
|
||||||
// 插入区域数据
|
|
||||||
const regions = await Region.bulkCreate([
|
|
||||||
{ id: 1, name: '大商汇', description: '大商汇区域', createTime: '2023-01-06' },
|
|
||||||
{ id: 2, name: '丰源市场', description: '丰源市场区域', createTime: '2023-01-07' }
|
|
||||||
]);
|
|
||||||
|
|
||||||
// 插入公寓数据
|
|
||||||
const apartments = await Apartment.bulkCreate([
|
|
||||||
{ id: 1, regionId: 1, name: '爱奇艺公寓', address: '大商汇区域', createTime: '2023-01-18' },
|
|
||||||
{ id: 2, regionId: 2, name: '碧云公寓', address: '丰源市场区域', createTime: '2023-01-19' }
|
|
||||||
]);
|
|
||||||
|
|
||||||
// 插入房间数据
|
|
||||||
const rooms = await Room.bulkCreate([
|
|
||||||
// 大商汇 - 爱奇艺公寓
|
|
||||||
{ id: 1, apartmentId: 1, roomNumber: '401', area: 40, price: 2500, status: 'empty', createTime: '2023-01-18' },
|
|
||||||
{ id: 2, apartmentId: 1, roomNumber: '402', area: 40, price: 2500, status: 'empty', createTime: '2023-01-18' },
|
|
||||||
{ id: 3, apartmentId: 1, roomNumber: '403', area: 45, price: 2800, status: 'rented', createTime: '2023-01-18' },
|
|
||||||
{ id: 4, apartmentId: 1, roomNumber: '404', area: 45, price: 2800, status: 'soon_expire', createTime: '2023-01-18' },
|
|
||||||
{ id: 5, apartmentId: 1, roomNumber: '405', area: 50, price: 3000, status: 'empty', createTime: '2023-01-18' },
|
|
||||||
{ id: 6, apartmentId: 1, roomNumber: '406', area: 50, price: 3000, status: 'expired', createTime: '2023-01-18' },
|
|
||||||
{ id: 7, apartmentId: 1, roomNumber: '407', area: 55, price: 3200, status: 'cleaning', createTime: '2023-01-18' },
|
|
||||||
// 丰源市场 - 碧云公寓
|
|
||||||
{ id: 8, apartmentId: 2, roomNumber: '201', area: 35, price: 2200, status: 'empty', createTime: '2023-01-19' },
|
|
||||||
{ id: 9, apartmentId: 2, roomNumber: '202', area: 35, price: 2200, status: 'rented', createTime: '2023-01-19' },
|
|
||||||
{ id: 10, apartmentId: 2, roomNumber: '203', area: 40, price: 2400, status: 'empty', createTime: '2023-01-19' },
|
|
||||||
{ id: 11, apartmentId: 2, roomNumber: '205', area: 40, price: 2400, status: 'maintenance', createTime: '2023-01-19' },
|
|
||||||
{ id: 12, apartmentId: 2, roomNumber: '206', area: 45, price: 2600, status: 'rented', createTime: '2023-01-19' },
|
|
||||||
{ id: 13, apartmentId: 2, roomNumber: '208', area: 45, price: 2600, status: 'empty', createTime: '2023-01-19' },
|
|
||||||
{ id: 14, apartmentId: 2, roomNumber: '209', area: 50, price: 2800, status: 'soon_expire', createTime: '2023-01-19' }
|
|
||||||
]);
|
|
||||||
|
|
||||||
// 插入租客数据
|
|
||||||
const tenants = await Tenant.bulkCreate([
|
|
||||||
{ id: 1, name: '张三', phone: '13800138001', idCard: '110101199001011234', createTime: '2023-02-01' },
|
|
||||||
{ id: 2, name: '李四', phone: '13800138002', idCard: '110101199001011235', createTime: '2023-02-02' },
|
|
||||||
{ id: 3, name: '王五', phone: '13800138003', idCard: '110101199001011236', createTime: '2023-02-03' },
|
|
||||||
{ id: 4, name: '赵六', phone: '13800138004', idCard: '110101199001011237', createTime: '2023-02-04' },
|
|
||||||
{ id: 5, name: '钱七', phone: '13800138005', idCard: '110101199001011238', createTime: '2023-02-05' }
|
|
||||||
]);
|
|
||||||
|
|
||||||
// 插入合同数据
|
|
||||||
const contracts = await Contract.bulkCreate([
|
|
||||||
{ id: 1, roomId: 3, tenantId: 1, startDate: '2023-03-01', endDate: '2024-03-01', rent: 2800, deposit: 5600, status: 'active', createTime: '2023-02-28' },
|
|
||||||
{ id: 2, roomId: 9, tenantId: 2, startDate: '2023-04-01', endDate: '2024-04-01', rent: 2200, deposit: 4400, status: 'active', createTime: '2023-03-31' },
|
|
||||||
{ id: 3, roomId: 12, tenantId: 3, startDate: '2023-05-01', endDate: '2024-05-01', rent: 2600, deposit: 5200, status: 'active', createTime: '2023-04-30' },
|
|
||||||
{ id: 4, roomId: 4, tenantId: 4, startDate: '2022-03-01', endDate: '2023-03-01', rent: 2800, deposit: 5600, status: 'expired', createTime: '2022-02-28' },
|
|
||||||
{ id: 5, roomId: 6, tenantId: 5, startDate: '2022-04-01', endDate: '2023-04-01', rent: 3000, deposit: 6000, status: 'expired', createTime: '2022-03-31' }
|
|
||||||
]);
|
|
||||||
|
|
||||||
// 插入租房数据
|
|
||||||
const rentals = await Rental.bulkCreate([
|
|
||||||
{ id: 1, roomId: 3, tenantId: 1, contractId: 1, startDate: '2023-03-01', endDate: '2024-03-01', rent: 2800, deposit: 5600, status: 'active', createTime: '2023-02-28' },
|
|
||||||
{ id: 2, roomId: 9, tenantId: 2, contractId: 2, startDate: '2023-04-01', endDate: '2024-04-01', rent: 2200, deposit: 4400, status: 'active', createTime: '2023-03-31' },
|
|
||||||
{ id: 3, roomId: 12, tenantId: 3, contractId: 3, startDate: '2023-05-01', endDate: '2024-05-01', rent: 2600, deposit: 5200, status: 'active', createTime: '2023-04-30' },
|
|
||||||
{ id: 4, roomId: 4, tenantId: 4, contractId: 4, startDate: '2022-03-01', endDate: '2023-03-01', rent: 2800, deposit: 5600, status: 'expired', createTime: '2022-02-28' },
|
|
||||||
{ id: 5, roomId: 6, tenantId: 5, contractId: 5, startDate: '2022-04-01', endDate: '2023-04-01', rent: 3000, deposit: 6000, status: 'expired', createTime: '2022-03-31' }
|
|
||||||
]);
|
|
||||||
|
|
||||||
console.log('初始数据插入成功');
|
|
||||||
} catch (error) {
|
|
||||||
console.error('初始数据插入失败:', error);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
syncDatabase();
|
syncDatabase();
|
||||||
|
|
@ -135,8 +135,41 @@ const deleteApartment = async (req, res) => {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// 获取所有公寓(不分页)
|
||||||
|
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,
|
||||||
|
include: [Region]
|
||||||
|
});
|
||||||
|
|
||||||
|
// 格式化数据
|
||||||
|
const formattedApartments = apartments.map(formatApartmentData);
|
||||||
|
|
||||||
|
// 返回结果
|
||||||
|
res.status(200).json(formattedApartments);
|
||||||
|
} catch (error) {
|
||||||
|
res.status(500).json({ error: error.message });
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
getAllApartments,
|
getAllApartments,
|
||||||
|
listApartments,
|
||||||
getApartmentById,
|
getApartmentById,
|
||||||
createApartment,
|
createApartment,
|
||||||
updateApartment,
|
updateApartment,
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
const { Region } = require('../models');
|
const { Region } = require('../models');
|
||||||
|
const { Op } = require('sequelize');
|
||||||
|
|
||||||
// 格式化时间(考虑时区,转换为北京时间)
|
// 格式化时间(考虑时区,转换为北京时间)
|
||||||
const formatDate = (date) => {
|
const formatDate = (date) => {
|
||||||
|
|
@ -93,8 +94,30 @@ const deleteRegion = async (req, res) => {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// 获取所有区域(不分页)
|
||||||
|
const listRegions = async (req, res) => {
|
||||||
|
try {
|
||||||
|
const { name } = req.query;
|
||||||
|
|
||||||
|
// 构建查询条件
|
||||||
|
const where = { isDeleted: 0 };
|
||||||
|
if (name) {
|
||||||
|
where.name = {
|
||||||
|
[Op.like]: `%${name}%`
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
const regions = await Region.findAll({ where });
|
||||||
|
const formattedRegions = regions.map(formatRegionData);
|
||||||
|
res.status(200).json(formattedRegions);
|
||||||
|
} catch (error) {
|
||||||
|
res.status(500).json({ error: error.message });
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
getAllRegions,
|
getAllRegions,
|
||||||
|
listRegions,
|
||||||
getRegionById,
|
getRegionById,
|
||||||
createRegion,
|
createRegion,
|
||||||
updateRegion,
|
updateRegion,
|
||||||
|
|
|
||||||
|
|
@ -342,8 +342,55 @@ const deleteRental = async (req, res) => {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// 获取所有租房(不分页)
|
||||||
|
const listRentals = async (req, res) => {
|
||||||
|
try {
|
||||||
|
// 先检查并更新租房状态
|
||||||
|
await checkAndUpdateRentalStatus();
|
||||||
|
|
||||||
|
const { roomId, tenantName, status } = req.query;
|
||||||
|
|
||||||
|
// 构建查询条件
|
||||||
|
const where = { isDeleted: 0 };
|
||||||
|
if (status) {
|
||||||
|
where.status = status;
|
||||||
|
}
|
||||||
|
if (roomId) {
|
||||||
|
where.roomId = roomId;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 构建包含关系 - 关联租客信息和合同信息
|
||||||
|
const include = [
|
||||||
|
{
|
||||||
|
model: Tenant,
|
||||||
|
where: tenantName ? { name: { [Op.like]: `%${tenantName}%` }, isDeleted: 0 } : { isDeleted: 0 }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
model: Contract,
|
||||||
|
where: { isDeleted: 0 }
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
// 查询租房数据
|
||||||
|
const rentals = await Rental.findAll({
|
||||||
|
where,
|
||||||
|
include,
|
||||||
|
order: [['createTime', 'DESC']] // 按创建时间倒序排序
|
||||||
|
});
|
||||||
|
|
||||||
|
// 格式化数据
|
||||||
|
const formattedRentals = rentals.map(formatRentalData);
|
||||||
|
|
||||||
|
// 返回结果
|
||||||
|
res.status(200).json(formattedRentals);
|
||||||
|
} catch (error) {
|
||||||
|
res.status(500).json({ error: error.message });
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
getAllRentals,
|
getAllRentals,
|
||||||
|
listRentals,
|
||||||
getRentalById,
|
getRentalById,
|
||||||
createRental,
|
createRental,
|
||||||
updateRental,
|
updateRental,
|
||||||
|
|
|
||||||
|
|
@ -296,8 +296,55 @@ const deleteRoom = async (req, res) => {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// 获取所有房间(不分页)
|
||||||
|
const listRooms = async (req, res) => {
|
||||||
|
try {
|
||||||
|
// 先检查并更新租房状态
|
||||||
|
await checkAndUpdateRentalStatus();
|
||||||
|
|
||||||
|
const { apartmentId, roomNumber, status, otherStatus, subStatus } = req.query;
|
||||||
|
|
||||||
|
// 构建查询条件
|
||||||
|
const where = { isDeleted: 0 };
|
||||||
|
if (apartmentId) {
|
||||||
|
where.apartmentId = apartmentId;
|
||||||
|
}
|
||||||
|
if (roomNumber) {
|
||||||
|
where.roomNumber = {
|
||||||
|
[Op.like]: `%${roomNumber}%`
|
||||||
|
};
|
||||||
|
}
|
||||||
|
if (status) {
|
||||||
|
where.status = status;
|
||||||
|
}
|
||||||
|
if (otherStatus) {
|
||||||
|
where.otherStatus = otherStatus;
|
||||||
|
}
|
||||||
|
if (subStatus) {
|
||||||
|
where.subStatus = subStatus;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询房间数据
|
||||||
|
const rooms = await Room.findAll({
|
||||||
|
where,
|
||||||
|
include: [
|
||||||
|
Apartment
|
||||||
|
]
|
||||||
|
});
|
||||||
|
|
||||||
|
// 格式化房间数据
|
||||||
|
const formattedRooms = rooms.map(formatRoomData);
|
||||||
|
|
||||||
|
// 返回结果
|
||||||
|
res.status(200).json(formattedRooms);
|
||||||
|
} catch (error) {
|
||||||
|
res.status(500).json({ error: error.message });
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
getAllRooms,
|
getAllRooms,
|
||||||
|
listRooms,
|
||||||
getRoomById,
|
getRoomById,
|
||||||
createRoom,
|
createRoom,
|
||||||
updateRoom,
|
updateRoom,
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
const { Tenant } = require('../models');
|
const { Tenant } = require('../models');
|
||||||
|
const { Op } = require('sequelize');
|
||||||
|
|
||||||
// 格式化时间(考虑时区,转换为北京时间)
|
// 格式化时间(考虑时区,转换为北京时间)
|
||||||
const formatDate = (date) => {
|
const formatDate = (date) => {
|
||||||
|
|
@ -93,8 +94,40 @@ const deleteTenant = async (req, res) => {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// 获取所有租客(不分页)
|
||||||
|
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 = {
|
module.exports = {
|
||||||
getAllTenants,
|
getAllTenants,
|
||||||
|
listTenants,
|
||||||
getTenantById,
|
getTenantById,
|
||||||
createTenant,
|
createTenant,
|
||||||
updateTenant,
|
updateTenant,
|
||||||
|
|
|
||||||
|
|
@ -189,8 +189,51 @@ const deleteWaterBill = async (req, res) => {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// 获取所有水费记录(不分页)
|
||||||
|
const listWaterBills = async (req, res) => {
|
||||||
|
try {
|
||||||
|
const { roomId, status, startDate, endDate } = req.query;
|
||||||
|
|
||||||
|
// 构建查询条件
|
||||||
|
const where = { isDeleted: 0 };
|
||||||
|
if (roomId) {
|
||||||
|
where.roomId = roomId;
|
||||||
|
}
|
||||||
|
if (status) {
|
||||||
|
where.status = status;
|
||||||
|
}
|
||||||
|
if (startDate) {
|
||||||
|
where.startDate = { [Op.gte]: new Date(startDate) };
|
||||||
|
}
|
||||||
|
if (endDate) {
|
||||||
|
where.endDate = { [Op.lte]: new Date(endDate) };
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询水费数据
|
||||||
|
const bills = await WaterBill.findAll({
|
||||||
|
where,
|
||||||
|
include: [
|
||||||
|
{
|
||||||
|
model: Room,
|
||||||
|
where: { isDeleted: 0 }
|
||||||
|
}
|
||||||
|
],
|
||||||
|
order: [['createTime', 'DESC']] // 按创建时间倒序排序
|
||||||
|
});
|
||||||
|
|
||||||
|
// 格式化数据
|
||||||
|
const formattedBills = bills.map(formatWaterBillData);
|
||||||
|
|
||||||
|
// 返回结果
|
||||||
|
res.status(200).json(formattedBills);
|
||||||
|
} catch (error) {
|
||||||
|
res.status(500).json({ error: error.message });
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
getAllWaterBills,
|
getAllWaterBills,
|
||||||
|
listWaterBills,
|
||||||
getWaterBillById,
|
getWaterBillById,
|
||||||
createWaterBill,
|
createWaterBill,
|
||||||
updateWaterBill,
|
updateWaterBill,
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@ const apartmentController = require('../controllers/apartmentController');
|
||||||
|
|
||||||
// 路由
|
// 路由
|
||||||
router.get('/', apartmentController.getAllApartments);
|
router.get('/', apartmentController.getAllApartments);
|
||||||
|
router.get('/list', apartmentController.listApartments);
|
||||||
router.get('/:id', apartmentController.getApartmentById);
|
router.get('/:id', apartmentController.getApartmentById);
|
||||||
router.post('/', apartmentController.createApartment);
|
router.post('/', apartmentController.createApartment);
|
||||||
router.put('/:id', apartmentController.updateApartment);
|
router.put('/:id', apartmentController.updateApartment);
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@ const regionController = require('../controllers/regionController');
|
||||||
|
|
||||||
// 路由
|
// 路由
|
||||||
router.get('/', regionController.getAllRegions);
|
router.get('/', regionController.getAllRegions);
|
||||||
|
router.get('/list', regionController.listRegions);
|
||||||
router.get('/:id', regionController.getRegionById);
|
router.get('/:id', regionController.getRegionById);
|
||||||
router.post('/', regionController.createRegion);
|
router.post('/', regionController.createRegion);
|
||||||
router.put('/:id', regionController.updateRegion);
|
router.put('/:id', regionController.updateRegion);
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@ const rentalController = require('../controllers/rentalController');
|
||||||
|
|
||||||
// 路由
|
// 路由
|
||||||
router.get('/', rentalController.getAllRentals);
|
router.get('/', rentalController.getAllRentals);
|
||||||
|
router.get('/list', rentalController.listRentals);
|
||||||
router.get('/:id', rentalController.getRentalById);
|
router.get('/:id', rentalController.getRentalById);
|
||||||
router.post('/', rentalController.createRental);
|
router.post('/', rentalController.createRental);
|
||||||
router.put('/:id', rentalController.updateRental);
|
router.put('/:id', rentalController.updateRental);
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@ const roomController = require('../controllers/roomController');
|
||||||
|
|
||||||
// 路由
|
// 路由
|
||||||
router.get('/', roomController.getAllRooms);
|
router.get('/', roomController.getAllRooms);
|
||||||
|
router.get('/list', roomController.listRooms);
|
||||||
router.get('/:id', roomController.getRoomById);
|
router.get('/:id', roomController.getRoomById);
|
||||||
router.post('/', roomController.createRoom);
|
router.post('/', roomController.createRoom);
|
||||||
router.put('/:id', roomController.updateRoom);
|
router.put('/:id', roomController.updateRoom);
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@ const tenantController = require('../controllers/tenantController');
|
||||||
|
|
||||||
// 路由
|
// 路由
|
||||||
router.get('/', tenantController.getAllTenants);
|
router.get('/', tenantController.getAllTenants);
|
||||||
|
router.get('/list', tenantController.listTenants);
|
||||||
router.get('/:id', tenantController.getTenantById);
|
router.get('/:id', tenantController.getTenantById);
|
||||||
router.post('/', tenantController.createTenant);
|
router.post('/', tenantController.createTenant);
|
||||||
router.put('/:id', tenantController.updateTenant);
|
router.put('/:id', tenantController.updateTenant);
|
||||||
|
|
|
||||||
|
|
@ -2,9 +2,12 @@ const express = require('express');
|
||||||
const router = express.Router();
|
const router = express.Router();
|
||||||
const waterBillController = require('../controllers/waterBillController');
|
const waterBillController = require('../controllers/waterBillController');
|
||||||
|
|
||||||
// 获取所有水费记录
|
// 获取所有水费记录(分页)
|
||||||
router.get('/', waterBillController.getAllWaterBills);
|
router.get('/', waterBillController.getAllWaterBills);
|
||||||
|
|
||||||
|
// 获取所有水费记录(不分页)
|
||||||
|
router.get('/list', waterBillController.listWaterBills);
|
||||||
|
|
||||||
// 获取单个水费记录
|
// 获取单个水费记录
|
||||||
router.get('/:id', waterBillController.getWaterBillById);
|
router.get('/:id', waterBillController.getWaterBillById);
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue