Gestion erreurs création/modification défi

This commit is contained in:
Emmy D'Anello 2024-12-14 13:10:32 +01:00
parent 8878a13f4f
commit 9dfb2ba15d
Signed by: ynerant
GPG Key ID: 3A75C55819C8CF85
2 changed files with 12 additions and 4 deletions

View File

@ -33,10 +33,12 @@ export default function ChallengesList() {
onPostSuccess: () => { onPostSuccess: () => {
setSuccessMessage("Le défi a bien été ajouté !") setSuccessMessage("Le défi a bien été ajouté !")
setSuccessSnackbarVisible(true) setSuccessSnackbarVisible(true)
setEditChallengeVisible(false)
queryClient.invalidateQueries({ predicate: (query) => query.queryKey[0] === 'get-challenges' }) queryClient.invalidateQueries({ predicate: (query) => query.queryKey[0] === 'get-challenges' })
}, },
onError: ({ response, error }) => { onError: ({ response, error }) => {
setErrorVisible(true) setErrorVisible(true)
setEditChallengeVisible(false)
if (response) if (response)
setError([response.statusCode, response.message]) setError([response.statusCode, response.message])
else if (error) else if (error)
@ -54,6 +56,8 @@ export default function ChallengesList() {
}, },
onError: ({ response, error }) => { onError: ({ response, error }) => {
setErrorVisible(true) setErrorVisible(true)
setEditChallengeVisible(false)
setDisplayedChallenge(null)
if (response) if (response)
setError([response.statusCode, response.message]) setError([response.statusCode, response.message])
else if (error) else if (error)
@ -64,12 +68,12 @@ export default function ChallengesList() {
auth, auth,
onPostSuccess: () => { onPostSuccess: () => {
setSuccessMessage("Le défi a bien été supprimé !") setSuccessMessage("Le défi a bien été supprimé !")
setSuccessSnackbarVisible(true) setDisplayedChallenge(null)
setEditChallengeVisible(false)
queryClient.invalidateQueries({ predicate: (query) => query.queryKey[0] === 'get-challenges' }) queryClient.invalidateQueries({ predicate: (query) => query.queryKey[0] === 'get-challenges' })
}, },
onError: ({ response, error }) => { onError: ({ response, error }) => {
setErrorVisible(true) setErrorVisible(true)
setDisplayedChallenge(null)
if (response) if (response)
setError([response.statusCode, response.message]) setError([response.statusCode, response.message])
else if (error) else if (error)
@ -132,7 +136,7 @@ export default function ChallengesList() {
</Snackbar> </Snackbar>
<FAB <FAB
icon='plus' icon='plus'
style={styles.addButton} style={{ ...styles.addButton, bottom: errorVisible || successSnackbarVisible ? 80 : styles.addButton.bottom }}
onPress={() => { onPress={() => {
if (editChallengeId) { if (editChallengeId) {
setEditChallengeTitle("") setEditChallengeTitle("")

View File

@ -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 { CreateChallengeDto } from './dto/create-challenge.dto'
import { UpdateChallengeDto } from './dto/update-challenge.dto' import { UpdateChallengeDto } from './dto/update-challenge.dto'
import { Challenge, Player } from '@prisma/client' import { Challenge, Player } from '@prisma/client'
@ -13,6 +13,8 @@ export class ChallengesService {
async create(createChallengeDto: CreateChallengeDto): Promise<Challenge> { async create(createChallengeDto: CreateChallengeDto): Promise<Challenge> {
const data = { ...createChallengeDto } 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 }) return await this.prisma.challenge.create({ data: data })
} }
@ -40,6 +42,8 @@ export class ChallengesService {
async update(id: number, updateChallengeDto: UpdateChallengeDto): Promise<Challenge> { async update(id: number, updateChallengeDto: UpdateChallengeDto): Promise<Challenge> {
if (!await this.findOne(id)) if (!await this.findOne(id))
throw new NotFoundException(`Aucun défi n'existe avec l'identifiant ${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({ return await this.prisma.challenge.update({
where: { id }, where: { id },
data: updateChallengeDto, data: updateChallengeDto,