diff --git a/libs/server/repository/api-rest/src/lib/controllers/repository.controller.ts b/libs/server/repository/api-rest/src/lib/controllers/repository.controller.ts index 078d8a32..767f4e9f 100644 --- a/libs/server/repository/api-rest/src/lib/controllers/repository.controller.ts +++ b/libs/server/repository/api-rest/src/lib/controllers/repository.controller.ts @@ -1,4 +1,4 @@ -import { Body, Controller, Delete, Get, Param, Post, UseGuards } from '@nestjs/common'; +import { Body, Controller, Delete, Get, Param, Post, Put, UseGuards } from '@nestjs/common'; import { ApiBearerAuth, ApiTags } from '@nestjs/swagger'; import { AuthGuard, @@ -10,12 +10,14 @@ import { import { AddRepositoryCommand, DeleteRepositoryCommand, + EditRepositoryCommand, RepositoryFacade } from '@pimp-my-pr/server/repository/core/application-services'; import { RepositoryEntity } from '@pimp-my-pr/server/repository/core/domain'; import { extractFullName } from '@pimp-my-pr/server/shared/util-repository'; import { AddRepositoryDto } from '../dtos/add-repository.dto'; import { UserRepositoryGuard } from '../guards/user-repository.guard'; +import { EditRepositoryDto } from '../dtos/edit-repository.dto'; @ApiTags('repository') @ApiBearerAuth() @@ -52,4 +54,19 @@ export class RepositoryController { delete(@Param('repositoryId') repositoryId: string): Promise { return this.repositoryFacade.deleteRepository(new DeleteRepositoryCommand(repositoryId)); } + + @UseGuards(UserRepositoryGuard) + @Put(':repositoryId') + edit( + @Param('repositoryId') repositoryId: string, + @Body() editRepositoryDto: EditRepositoryDto + ): Promise { + return this.repositoryFacade.editRepository( + new EditRepositoryCommand( + repositoryId, + editRepositoryDto.maxLines, + editRepositoryDto.maxWaitingTime + ) + ); + } } diff --git a/libs/server/repository/api-rest/src/lib/dtos/edit-repository.dto.ts b/libs/server/repository/api-rest/src/lib/dtos/edit-repository.dto.ts new file mode 100644 index 00000000..ea4b948a --- /dev/null +++ b/libs/server/repository/api-rest/src/lib/dtos/edit-repository.dto.ts @@ -0,0 +1,9 @@ +import { ApiProperty } from '@nestjs/swagger'; + +export class EditRepositoryDto { + @ApiProperty() + maxLines?: number; + + @ApiProperty() + maxWaitingTime?: number; +} diff --git a/libs/server/repository/core/application-services/src/index.ts b/libs/server/repository/core/application-services/src/index.ts index b36f2308..cde4344a 100644 --- a/libs/server/repository/core/application-services/src/index.ts +++ b/libs/server/repository/core/application-services/src/index.ts @@ -8,3 +8,4 @@ export * from './lib/queries/list-repositories-statistics/repositories-statistic export * from './lib/read-models/reviewer-model-with-pr.interface'; export * from './lib/commands/add-repository/add-repository.command'; export * from './lib/commands/delete-repository/delete-repository.command'; +export * from './lib/commands/edit-repository/edit-repository.command'; diff --git a/libs/server/repository/core/application-services/src/lib/commands/edit-repository/edit-repository.command.ts b/libs/server/repository/core/application-services/src/lib/commands/edit-repository/edit-repository.command.ts new file mode 100644 index 00000000..02d0f852 --- /dev/null +++ b/libs/server/repository/core/application-services/src/lib/commands/edit-repository/edit-repository.command.ts @@ -0,0 +1,7 @@ +export class EditRepositoryCommand { + constructor( + public repositoryId: string, + public maxLines?: number, + public maxWaitingTime?: number + ) {} +} diff --git a/libs/server/repository/core/application-services/src/lib/commands/edit-repository/edit-repository.handler.ts b/libs/server/repository/core/application-services/src/lib/commands/edit-repository/edit-repository.handler.ts new file mode 100644 index 00000000..1f9fdf05 --- /dev/null +++ b/libs/server/repository/core/application-services/src/lib/commands/edit-repository/edit-repository.handler.ts @@ -0,0 +1,19 @@ +import { CommandHandler, ICommandHandler } from '@nestjs/cqrs'; +import { RepositoryRepository } from '@pimp-my-pr/server/repository/core/domain-services'; +import { EditRepositoryCommand } from './edit-repository.command'; +import { RepositoryEntity } from '@pimp-my-pr/server/repository/core/domain'; + +@CommandHandler(EditRepositoryCommand) +export class EditRepositoryHandler implements ICommandHandler { + constructor(private repositoryRepository: RepositoryRepository) {} + + async execute(command: EditRepositoryCommand): Promise { + const { repositoryId, maxLines, maxWaitingTime } = command; + + const repositoryData = await this.repositoryRepository.getById(repositoryId); + + const updatedRepository = { ...repositoryData, maxLines, maxWaitingTime } as RepositoryEntity; + + return this.repositoryRepository.save(updatedRepository); + } +} diff --git a/libs/server/repository/core/application-services/src/lib/repository.facade.ts b/libs/server/repository/core/application-services/src/lib/repository.facade.ts index f2333331..8cb88ff4 100644 --- a/libs/server/repository/core/application-services/src/lib/repository.facade.ts +++ b/libs/server/repository/core/application-services/src/lib/repository.facade.ts @@ -3,6 +3,7 @@ import { CommandBus, QueryBus } from '@nestjs/cqrs'; import { DeleteRepositoryCommand, + EditRepositoryCommand, RepositoriesStatisticsItemReadModel, ReviewersStatisticsItemReadModel, ReviewerStatisticsReadModel @@ -28,6 +29,10 @@ export class RepositoryFacade { return this.commandBus.execute(command); } + editRepository(command: EditRepositoryCommand): Promise { + return this.commandBus.execute(command); + } + getRepositoryStatistics( repositoryId: string, token: string, diff --git a/libs/server/repository/core/application-services/src/lib/server-repository-core-application-services.module.ts b/libs/server/repository/core/application-services/src/lib/server-repository-core-application-services.module.ts index 0569e894..d0424a32 100644 --- a/libs/server/repository/core/application-services/src/lib/server-repository-core-application-services.module.ts +++ b/libs/server/repository/core/application-services/src/lib/server-repository-core-application-services.module.ts @@ -8,10 +8,12 @@ import { ListRepositoriesHandler } from './queries/list-repositories/list-reposi import { ListReviewersStatisticsHandler } from './queries/list-reviewers-statistics/list-reviewers-statistics.handler'; import { RepositoryFacade } from './repository.facade'; import { DeleteRepositoryHandler } from './commands/delete-repository/delete-repository.handler'; +import { EditRepositoryHandler } from './commands/edit-repository/edit-repository.handler'; const QueryHandlers = [ AddRepositoryHandler, DeleteRepositoryHandler, + EditRepositoryHandler, GetRepositoryStatisticsHandler, GetReviewerStatisticsHandler, ListRepositoriesStatisticsHandler,