feat: 修改项目后自动删除项目工作区相关目录

This commit is contained in:
Ivan Li
2021-06-27 19:35:49 +08:00
parent 7e17de0f15
commit a231a02c28
14 changed files with 201 additions and 24 deletions

View 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';

View File

@@ -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],
})

View File

@@ -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();

View File

@@ -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) {