Ajout filtres actions de défi

This commit is contained in:
Emmy D'Anello 2024-12-07 20:17:45 +01:00
parent c82d39c009
commit d902e05fdd
Signed by: ynerant
GPG Key ID: 3A75C55819C8CF85
5 changed files with 43 additions and 5 deletions

View File

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

View File

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

View File

@ -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
}

View File

@ -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
}

View 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)
}