diff --git a/backend/src/place/entities/place.entity.ts b/backend/src/place/entities/place.entity.ts index ea48f3f012775d3fd1e67c6f067ac3c681db1795..6f5a3d38749417c483af3a22ba04760a1812e107 100644 --- a/backend/src/place/entities/place.entity.ts +++ b/backend/src/place/entities/place.entity.ts @@ -64,4 +64,7 @@ export class Place { @Column({ nullable: false }) closeAt: number; + + @Column({ nullable: false, default: true }) + active: boolean; } diff --git a/backend/src/place/place.controller.ts b/backend/src/place/place.controller.ts index 4af704793dae0195e75f9617ab00e0d0660995de..77b242213b27a2aee5240d613b769381bd54e9de 100644 --- a/backend/src/place/place.controller.ts +++ b/backend/src/place/place.controller.ts @@ -11,6 +11,7 @@ import { Req, Patch, UseGuards, + Delete, } from '@nestjs/common'; import { PlaceService } from './place.service'; import { CreatePlaceDateTradDto } from './dto/create-place-date.dto'; @@ -107,4 +108,18 @@ export class PlaceController { async findOpenPlaces(@Param('idTown') idTown: number, @Param('lang') lang: string, @Req() req: CustomUserRequest) { return await this.placeService.findPlacesNotVisitedByUserAndOpenResponse(req.user.email, lang as LANGUAGES, idTown); } + + @Delete(':idPlace') + @UseGuards(AuthAdminGuard) + @Roles([ALL_ROLES.ADMIN]) + @ApiBearerAuth('jwt') + @ApiParam({ name: 'idPlace', type: Number }) + async remove(@Param('idPlace') idPlace: number) { + try { + await this.placeService.remove(idPlace); + return { message: 'Place removed successfully' }; + } catch (e) { + throw e; + } + } } diff --git a/backend/src/place/place.service.ts b/backend/src/place/place.service.ts index a480ddd3d4c0818c026184f0bac074bd5c599504..0880244face9369019776590a59a2e9bf1d15734 100644 --- a/backend/src/place/place.service.ts +++ b/backend/src/place/place.service.ts @@ -96,6 +96,7 @@ export class PlaceService { .where('place.idTown = :idTown', { idTown: idTown }) .andWhere('placeTrad.language = :language', { language: lang }) .andWhere('category.language = :language', { language: lang }) + .andWhere('place.active = :active', { active: true }) .getMany(); const places: GetPlaceDto[] = res.map((place): GetPlaceDto => { return { @@ -226,6 +227,7 @@ export class PlaceService { .createQueryBuilder('visited') .leftJoinAndSelect('visited.place', 'place') .where('visited.user = :email', { email }) + .andWhere('place.active = :active', { active: true }) .getMany(); const visitedIds: number[] = visited.map((visit) => visit.place.idPlace); // podemos hacerlo en la query @@ -261,6 +263,7 @@ export class PlaceService { .leftJoinAndSelect('visited.place', 'place') .where('visited.user = :email', { email }) .andWhere('place.idPlace = :idPlace', { idPlace: place.idPlace }) + .andWhere('place.active = :active', { active: true }) .getOne(); placesResponse.push({ @@ -270,4 +273,10 @@ export class PlaceService { } return placesResponse; } + + async remove(id: number) { + const place = await this.placeRepository.findOneByOrFail({ idPlace: id }); + place.active = false; + await this.placeRepository.save(place); + } }