Ajout filtres actions de défi
This commit is contained in:
		@@ -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 {
 | 
			
		||||
@@ -18,10 +19,12 @@ export class ChallengeActionsService {
 | 
			
		||||
    })
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  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,
 | 
			
		||||
        },
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,7 @@
 | 
			
		||||
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 CreateChallengeActionDto {
 | 
			
		||||
  @IsInt()
 | 
			
		||||
@@ -10,13 +11,13 @@ export class CreateChallengeActionDto {
 | 
			
		||||
 | 
			
		||||
  @IsOptional()
 | 
			
		||||
  @IsBoolean()
 | 
			
		||||
  @Type(() => 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)
 | 
			
		||||
  @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
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										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