91 lines
2.2 KiB
TypeScript
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 });
|
|
}
|
|
}
|