feat: 修改项目后自动删除项目工作区相关目录
This commit is contained in:
3
src/projects/projects.constants.ts
Normal file
3
src/projects/projects.constants.ts
Normal file
@@ -0,0 +1,3 @@
|
||||
export const EXCHANGE_PROJECT_TOPIC = 'project.topic';
|
||||
export const EXCHANGE_PROJECT_FANOUT = 'project.fanout';
|
||||
export const ROUTE_PROJECT_CHANGE = 'project-change';
|
||||
@@ -3,9 +3,31 @@ import { ProjectsService } from './projects.service';
|
||||
import { ProjectsResolver } from './projects.resolver';
|
||||
import { TypeOrmModule } from '@nestjs/typeorm';
|
||||
import { Project } from './project.entity';
|
||||
import { RabbitMQModule } from '@golevelup/nestjs-rabbitmq';
|
||||
import { ConfigModule, ConfigService } from '@nestjs/config';
|
||||
import { EXCHANGE_PROJECT_FANOUT } from './projects.constants';
|
||||
|
||||
@Module({
|
||||
imports: [TypeOrmModule.forFeature([Project])],
|
||||
imports: [
|
||||
TypeOrmModule.forFeature([Project]),
|
||||
RabbitMQModule.forRootAsync(RabbitMQModule, {
|
||||
imports: [ConfigModule],
|
||||
useFactory: (configService: ConfigService) => ({
|
||||
uri: configService.get<string>('db.rabbitmq.uri'),
|
||||
exchanges: [
|
||||
{
|
||||
name: EXCHANGE_PROJECT_FANOUT,
|
||||
type: 'fanout',
|
||||
options: {
|
||||
durable: false,
|
||||
autoDelete: true,
|
||||
},
|
||||
},
|
||||
],
|
||||
}),
|
||||
inject: [ConfigService],
|
||||
}),
|
||||
],
|
||||
providers: [ProjectsService, ProjectsResolver],
|
||||
exports: [ProjectsService],
|
||||
})
|
||||
|
||||
@@ -2,6 +2,7 @@ import { Test, TestingModule } from '@nestjs/testing';
|
||||
import { ProjectsService } from './projects.service';
|
||||
import { getRepositoryToken } from '@nestjs/typeorm';
|
||||
import { Project } from './project.entity';
|
||||
import { AmqpConnection } from '@golevelup/nestjs-rabbitmq';
|
||||
|
||||
describe('ProjectsService', () => {
|
||||
let service: ProjectsService;
|
||||
@@ -14,6 +15,10 @@ describe('ProjectsService', () => {
|
||||
provide: getRepositoryToken(Project),
|
||||
useValue: {},
|
||||
},
|
||||
{
|
||||
provide: AmqpConnection,
|
||||
useValue: {},
|
||||
},
|
||||
],
|
||||
}).compile();
|
||||
|
||||
|
||||
@@ -5,6 +5,11 @@ import { Repository } from 'typeorm';
|
||||
import { CreateProjectInput } from './dtos/create-project.input';
|
||||
import { Project } from './project.entity';
|
||||
import { UpdateProjectInput } from './dtos/update-project.input';
|
||||
import { AmqpConnection } from '@golevelup/nestjs-rabbitmq';
|
||||
import {
|
||||
EXCHANGE_PROJECT_FANOUT,
|
||||
ROUTE_PROJECT_CHANGE,
|
||||
} from './projects.constants';
|
||||
|
||||
@Injectable()
|
||||
export class ProjectsService extends BaseDbService<Project> {
|
||||
@@ -12,6 +17,7 @@ export class ProjectsService extends BaseDbService<Project> {
|
||||
constructor(
|
||||
@InjectRepository(Project)
|
||||
readonly repository: Repository<Project>,
|
||||
private readonly amqpConnection: AmqpConnection,
|
||||
) {
|
||||
super(repository);
|
||||
}
|
||||
@@ -28,7 +34,12 @@ export class ProjectsService extends BaseDbService<Project> {
|
||||
async update(dto: UpdateProjectInput) {
|
||||
await this.isDuplicateEntityForUpdate(dto.id, dto);
|
||||
const old = await this.findOne(dto.id);
|
||||
return await this.repository.save(this.repository.merge(old, dto));
|
||||
const project = await this.repository.save(this.repository.merge(old, dto));
|
||||
this.amqpConnection.publish(EXCHANGE_PROJECT_FANOUT, ROUTE_PROJECT_CHANGE, [
|
||||
project,
|
||||
old,
|
||||
]);
|
||||
return project;
|
||||
}
|
||||
|
||||
async remove(id: string) {
|
||||
|
||||
Reference in New Issue
Block a user