Compare commits
	
		
			2 Commits
		
	
	
		
			572a04130f
			...
			d902e05fdd
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| d902e05fdd | |||
| c82d39c009 | 
| @@ -8,6 +8,7 @@ import { ApiOkResponsePaginated, paginateOutput } from 'src/common/utils/paginat | ||||
| import { QueryPaginationDto } from 'src/common/dto/pagination-query.dto' | ||||
| import { PaginateOutputDto } from 'src/common/dto/pagination-output.dto' | ||||
| import { UpdateChallengeActionDto } from './dto/update-challenge-action.dto' | ||||
| import { FilterChallengeActionsDto } from './dto/filter-challenge-action.dto' | ||||
|  | ||||
| @Controller('challenge-actions') | ||||
| export class ChallengeActionsController { | ||||
| @@ -32,8 +33,8 @@ export class ChallengeActionsController { | ||||
|   @ApiOkResponsePaginated(ChallengeActionEntity) | ||||
|   @ApiUnauthorizedResponse({ description: "Non authentifié⋅e" }) | ||||
|   @ApiForbiddenResponse({ description: "Permission refusée" }) | ||||
|   async findAll(@Query() queryPagination?: QueryPaginationDto): Promise<PaginateOutputDto<ChallengeActionEntity>> { | ||||
|     const [challengeActions, total] = await this.challengeActionsService.findAll(queryPagination) | ||||
|   async findAll(@Query() queryPagination: QueryPaginationDto, @Query() filterChallengeActions: FilterChallengeActionsDto): Promise<PaginateOutputDto<ChallengeActionEntity>> { | ||||
|     const [challengeActions, total] = await this.challengeActionsService.findAll(queryPagination, filterChallengeActions) | ||||
|     return paginateOutput<ChallengeActionEntity>(challengeActions.map(challengeAction => new ChallengeActionEntity(challengeAction)), total, queryPagination) | ||||
|   } | ||||
|  | ||||
|   | ||||
| @@ -5,6 +5,7 @@ import { ChallengeAction, User } from '@prisma/client' | ||||
| import { PrismaService } from 'src/prisma/prisma.service' | ||||
| import { QueryPaginationDto } from 'src/common/dto/pagination-query.dto' | ||||
| import { paginate } from 'src/common/utils/pagination.utils' | ||||
| import { FilterChallengeActionsDto } from './dto/filter-challenge-action.dto' | ||||
|  | ||||
| @Injectable() | ||||
| export class ChallengeActionsService { | ||||
| @@ -12,20 +13,33 @@ export class ChallengeActionsService { | ||||
|  | ||||
|   async create(authenticatedUser: User, createChallengeActionDto: CreateChallengeActionDto): Promise<ChallengeAction> { | ||||
|     const data = { ...createChallengeActionDto, userId: authenticatedUser.id } | ||||
|     return await this.prisma.challengeAction.create({ data: data }) | ||||
|     return await this.prisma.challengeAction.create({ | ||||
|       data: data, | ||||
|       include: { challenge: true }, | ||||
|     }) | ||||
|   } | ||||
|  | ||||
|   async findAll(queryPagination?: QueryPaginationDto): Promise<[ChallengeAction[], number]> { | ||||
|   async findAll(queryPagination: QueryPaginationDto, filterChallengeActions: FilterChallengeActionsDto): Promise<[ChallengeAction[], number]> { | ||||
|     console.log(filterChallengeActions) | ||||
|     return [ | ||||
|       await this.prisma.challengeAction.findMany({ | ||||
|         ...paginate(queryPagination), | ||||
|         where: filterChallengeActions, | ||||
|         include: { | ||||
|           challenge: true, | ||||
|         }, | ||||
|       }), | ||||
|       await this.prisma.challenge.count(), | ||||
|     ] | ||||
|   } | ||||
|  | ||||
|   async findOne(id: number): Promise<ChallengeAction> { | ||||
|     return await this.prisma.challengeAction.findUnique({ where: { id } }) | ||||
|     return await this.prisma.challengeAction.findUnique({ | ||||
|       where: { id }, | ||||
|       include: { | ||||
|         challenge: true, | ||||
|       }, | ||||
|     }) | ||||
|   } | ||||
|  | ||||
|   async update(id: number, updateChallengeActionDto: UpdateChallengeActionDto): Promise<ChallengeAction> { | ||||
| @@ -36,6 +50,8 @@ export class ChallengeActionsService { | ||||
|   } | ||||
|  | ||||
|   async remove(id: number): Promise<ChallengeAction> { | ||||
|     return await this.prisma.challengeAction.delete({ where: { id } }) | ||||
|     return await this.prisma.challengeAction.delete({ | ||||
|       where: { id }, | ||||
|     }) | ||||
|   } | ||||
| } | ||||
|   | ||||
| @@ -1,6 +1,7 @@ | ||||
| import { ApiProperty } from "@nestjs/swagger" | ||||
| import { Type } from "class-transformer" | ||||
| import { IsBoolean, IsInt } from "class-validator" | ||||
| import { IsBoolean, IsInt, IsOptional } from "class-validator" | ||||
| import { BooleanTransform } from "src/common/utils/transform.utils" | ||||
|  | ||||
| export class CreateChallengeActionDto { | ||||
|   @IsInt() | ||||
| @@ -8,13 +9,15 @@ export class CreateChallengeActionDto { | ||||
|   @ApiProperty({ description: "Identifiant du défi rattaché à l'action" }) | ||||
|   challengeId: number | ||||
|  | ||||
|   @IsOptional() | ||||
|   @IsBoolean() | ||||
|   @Type(() => Boolean) | ||||
|   @ApiProperty({ description: "Est-ce que le défi est actuellement en train d'être réalisé" }) | ||||
|   active: boolean | ||||
|   @BooleanTransform() | ||||
|   @ApiProperty({ description: "Est-ce que le défi est actuellement en train d'être réalisé", default: true }) | ||||
|   active: boolean = true | ||||
|  | ||||
|   @IsOptional() | ||||
|   @IsBoolean() | ||||
|   @Type(() => Boolean) | ||||
|   @ApiProperty({ description: "Est-ce que le défi a été réussi" }) | ||||
|   success: boolean | ||||
|   @BooleanTransform() | ||||
|   @ApiProperty({ description: "Est-ce que le défi a été réussi", default: false }) | ||||
|   success: boolean = false | ||||
| } | ||||
|   | ||||
| @@ -0,0 +1,24 @@ | ||||
| import { ApiProperty } from "@nestjs/swagger" | ||||
| import { Type } from "class-transformer" | ||||
| import { IsBoolean, IsInt, IsOptional } from "class-validator" | ||||
| import { BooleanTransform } from "src/common/utils/transform.utils" | ||||
|  | ||||
| export class FilterChallengeActionsDto { | ||||
|   @IsOptional() | ||||
|   @IsInt() | ||||
|   @Type(() => Number) | ||||
|   @ApiProperty({ description: "Identifiant de l'utilisateur⋅rice qui effectue le défi" }) | ||||
|   userId?: number | ||||
|  | ||||
|   @IsOptional() | ||||
|   @IsBoolean() | ||||
|   @BooleanTransform() | ||||
|   @ApiProperty({ description: "Défi en train d'être accompli" }) | ||||
|   active?: boolean | ||||
|  | ||||
|   @IsOptional() | ||||
|   @IsBoolean() | ||||
|   @BooleanTransform() | ||||
|   @ApiProperty({ description: "Défi réussi" }) | ||||
|   success?: boolean | ||||
| } | ||||
| @@ -1,9 +1,13 @@ | ||||
| import { ApiProperty } from "@nestjs/swagger" | ||||
| import { ChallengeAction } from "@prisma/client" | ||||
| import { ChallengeEntity } from "src/challenges/entities/challenge.entity" | ||||
|  | ||||
| export class ChallengeActionEntity implements ChallengeAction { | ||||
|   constructor(partial: Partial<ChallengeActionEntity>) { | ||||
|     Object.assign(this, partial) | ||||
|     if (this.challenge) { | ||||
|       this.challenge = new ChallengeEntity(this.challenge) | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   @ApiProperty({ description: "Identifiant unique" }) | ||||
| @@ -15,6 +19,9 @@ export class ChallengeActionEntity implements ChallengeAction { | ||||
|   @ApiProperty({ description: "Identifiant du défi rattaché à l'action" }) | ||||
|   challengeId: number | ||||
|  | ||||
|   @ApiProperty({ type: ChallengeEntity, description: "Défi rattaché à l'action", nullable: true }) | ||||
|   challenge?: ChallengeEntity | null | ||||
|  | ||||
|   @ApiProperty({ description: "Est-ce que le défi est actuellement en train d'être réalisé" }) | ||||
|   active: boolean | ||||
|  | ||||
|   | ||||
							
								
								
									
										9
									
								
								server/src/common/utils/transform.utils.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								server/src/common/utils/transform.utils.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,9 @@ | ||||
| import { Transform, TransformOptions } from "class-transformer" | ||||
|  | ||||
| export function BooleanTransform (options?: TransformOptions): PropertyDecorator { | ||||
|   return Transform(({ value }) => { | ||||
|     if (value.toString().toLowerCase() === "false") | ||||
|       return false | ||||
|     return Boolean(value) | ||||
|   }, options) | ||||
| } | ||||
		Reference in New Issue
	
	Block a user