API/src/service/area.service.ts

91 lines
2.2 KiB
TypeScript

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<Area>;
/**
* 创建区域
* @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 });
}
}