diff --git a/client/app/challenges-list.tsx b/client/app/challenges-list.tsx index 13a08fc..e4c96cd 100644 --- a/client/app/challenges-list.tsx +++ b/client/app/challenges-list.tsx @@ -33,10 +33,12 @@ export default function ChallengesList() { onPostSuccess: () => { setSuccessMessage("Le défi a bien été ajouté !") setSuccessSnackbarVisible(true) + setEditChallengeVisible(false) queryClient.invalidateQueries({ predicate: (query) => query.queryKey[0] === 'get-challenges' }) }, onError: ({ response, error }) => { setErrorVisible(true) + setEditChallengeVisible(false) if (response) setError([response.statusCode, response.message]) else if (error) @@ -54,6 +56,8 @@ export default function ChallengesList() { }, onError: ({ response, error }) => { setErrorVisible(true) + setEditChallengeVisible(false) + setDisplayedChallenge(null) if (response) setError([response.statusCode, response.message]) else if (error) @@ -64,12 +68,12 @@ export default function ChallengesList() { auth, onPostSuccess: () => { setSuccessMessage("Le défi a bien été supprimé !") - setSuccessSnackbarVisible(true) - setEditChallengeVisible(false) + setDisplayedChallenge(null) queryClient.invalidateQueries({ predicate: (query) => query.queryKey[0] === 'get-challenges' }) }, onError: ({ response, error }) => { setErrorVisible(true) + setDisplayedChallenge(null) if (response) setError([response.statusCode, response.message]) else if (error) @@ -132,7 +136,7 @@ export default function ChallengesList() { { if (editChallengeId) { setEditChallengeTitle("") diff --git a/server/src/challenges/challenges.service.ts b/server/src/challenges/challenges.service.ts index 125e59c..8bae7bf 100644 --- a/server/src/challenges/challenges.service.ts +++ b/server/src/challenges/challenges.service.ts @@ -1,4 +1,4 @@ -import { ConflictException, Injectable, NotFoundException } from '@nestjs/common' +import { BadRequestException, ConflictException, Injectable, NotFoundException } from '@nestjs/common' import { CreateChallengeDto } from './dto/create-challenge.dto' import { UpdateChallengeDto } from './dto/update-challenge.dto' import { Challenge, Player } from '@prisma/client' @@ -13,6 +13,8 @@ export class ChallengesService { async create(createChallengeDto: CreateChallengeDto): Promise { const data = { ...createChallengeDto } + if (await this.prisma.challenge.findFirst({ where: { title: createChallengeDto.title } })) + throw new BadRequestException(`Un défi existe déjà avec pour titre « ${createChallengeDto.title} ».`) return await this.prisma.challenge.create({ data: data }) } @@ -40,6 +42,8 @@ export class ChallengesService { async update(id: number, updateChallengeDto: UpdateChallengeDto): Promise { if (!await this.findOne(id)) throw new NotFoundException(`Aucun défi n'existe avec l'identifiant ${id}`) + if (await this.prisma.challenge.findFirst({ where: { title: updateChallengeDto.title, id: { not: id } } })) + throw new BadRequestException(`Un défi existe déjà avec pour titre « ${updateChallengeDto.title} ».`) return await this.prisma.challenge.update({ where: { id }, data: updateChallengeDto,