import { Provide } from '@midwayjs/core'; import { InjectEntityModel } from '@midwayjs/typeorm'; import { Repository } from 'typeorm'; import { Area } from '../entity/area.entity'; import { CreateAreaDTO, QueryAreaDTO, UpdateAreaDTO } from '../dto/area.dto'; @Provide() export class AreaService { @InjectEntityModel(Area) areaModel: Repository; /** * 创建区域 * @param params 创建参数 */ async createArea(params: CreateAreaDTO) { // 检查区域名称是否已存在 const existing = await this.areaModel.findOne({ where: { name: params.name } }); if (existing) { throw new Error('区域名称已存在'); } const area = new Area(); area.name = params.name; return await this.areaModel.save(area); } /** * 更新区域 * @param id 区域ID * @param params 更新参数 */ async updateArea(id: number, params: UpdateAreaDTO) { const area = await this.areaModel.findOneBy({ id }); if (!area) { throw new Error('区域不存在'); } if (params.name) { // 检查新的区域名称是否已存在 const existing = await this.areaModel.findOne({ where: { name: params.name } }); if (existing && existing.id !== id) { throw new Error('区域名称已存在'); } area.name = params.name; } return await this.areaModel.save(area); } /** * 删除区域 * @param id 区域ID */ async deleteArea(id: number) { const result = await this.areaModel.delete(id); return result.affected > 0; } /** * 获取区域列表(分页) * @param query 查询参数 */ async getAreaList(query: QueryAreaDTO) { const { currentPage, pageSize, name } = query; const [list, total] = await this.areaModel.findAndCount({ where: name ? { name } : {}, skip: (currentPage - 1) * pageSize, take: pageSize, order: { id: 'DESC', }, }); return { list, total }; } /** * 获取所有区域 */ async getAllAreas() { return await this.areaModel.find(); } /** * 根据ID获取区域详情 * @param id 区域ID */ async getAreaById(id: number) { return await this.areaModel.findOneBy({ id }); } }