初始化参股
This commit is contained in:
117
后端/src/service/service.service.ts
Normal file
117
后端/src/service/service.service.ts
Normal file
@@ -0,0 +1,117 @@
|
||||
import { Injectable, NotFoundException, ConflictException } from '@nestjs/common';
|
||||
import { InjectRepository } from '@nestjs/typeorm';
|
||||
import { Repository } from 'typeorm';
|
||||
import { Service } from '../entities/service.entity';
|
||||
import { CreateServiceDto, UpdateServiceDto, QueryServiceDto } from './dto/service.dto';
|
||||
|
||||
@Injectable()
|
||||
export class ServiceService {
|
||||
constructor(
|
||||
@InjectRepository(Service)
|
||||
private serviceRepository: Repository<Service>,
|
||||
) {}
|
||||
|
||||
async create(createServiceDto: CreateServiceDto): Promise<Service> {
|
||||
// 检查服务类型是否已存在
|
||||
const existingService = await this.serviceRepository.findOne({
|
||||
where: { type: createServiceDto.type }
|
||||
});
|
||||
|
||||
if (existingService) {
|
||||
throw new ConflictException('该服务类型已存在');
|
||||
}
|
||||
|
||||
const service = this.serviceRepository.create({
|
||||
...createServiceDto,
|
||||
status: 'active',
|
||||
});
|
||||
|
||||
return this.serviceRepository.save(service);
|
||||
}
|
||||
|
||||
async findAll(query: QueryServiceDto): Promise<Service[]> {
|
||||
const { type, status } = query;
|
||||
const queryBuilder = this.serviceRepository.createQueryBuilder('service');
|
||||
|
||||
if (type) {
|
||||
queryBuilder.andWhere('service.type = :type', { type });
|
||||
}
|
||||
|
||||
if (status) {
|
||||
queryBuilder.andWhere('service.status = :status', { status });
|
||||
}
|
||||
|
||||
queryBuilder.orderBy('service.sortOrder', 'ASC');
|
||||
queryBuilder.addOrderBy('service.createdAt', 'DESC');
|
||||
|
||||
return queryBuilder.getMany();
|
||||
}
|
||||
|
||||
async findOne(id: number): Promise<Service> {
|
||||
const service = await this.serviceRepository.findOne({
|
||||
where: { id }
|
||||
});
|
||||
|
||||
if (!service) {
|
||||
throw new NotFoundException('服务不存在');
|
||||
}
|
||||
|
||||
return service;
|
||||
}
|
||||
|
||||
async findByType(type: string): Promise<Service> {
|
||||
const service = await this.serviceRepository.findOne({
|
||||
where: { type }
|
||||
});
|
||||
|
||||
if (!service) {
|
||||
throw new NotFoundException('服务类型不存在');
|
||||
}
|
||||
|
||||
return service;
|
||||
}
|
||||
|
||||
async update(id: number, updateServiceDto: UpdateServiceDto): Promise<Service> {
|
||||
const service = await this.findOne(id);
|
||||
|
||||
// 如果要更新服务类型,检查新类型是否已被其他服务使用
|
||||
if (updateServiceDto.type && updateServiceDto.type !== service.type) {
|
||||
const existingService = await this.serviceRepository.findOne({
|
||||
where: { type: updateServiceDto.type }
|
||||
});
|
||||
|
||||
if (existingService) {
|
||||
throw new ConflictException('该服务类型已存在');
|
||||
}
|
||||
}
|
||||
|
||||
await this.serviceRepository.update(id, updateServiceDto);
|
||||
return this.findOne(id);
|
||||
}
|
||||
|
||||
async remove(id: number): Promise<void> {
|
||||
const service = await this.findOne(id);
|
||||
await this.serviceRepository.remove(service);
|
||||
}
|
||||
|
||||
async getActiveServices(): Promise<Service[]> {
|
||||
return this.serviceRepository.find({
|
||||
where: { status: 'active' },
|
||||
order: { sortOrder: 'ASC', createdAt: 'DESC' }
|
||||
});
|
||||
}
|
||||
|
||||
async updateSortOrder(serviceOrders: { id: number; sortOrder: number }[]): Promise<void> {
|
||||
for (const { id, sortOrder } of serviceOrders) {
|
||||
await this.serviceRepository.update(id, { sortOrder });
|
||||
}
|
||||
}
|
||||
|
||||
async toggleStatus(id: number): Promise<Service> {
|
||||
const service = await this.findOne(id);
|
||||
const newStatus = service.status === 'active' ? 'inactive' : 'active';
|
||||
|
||||
await this.serviceRepository.update(id, { status: newStatus });
|
||||
return this.findOne(id);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user