feat(backend): Séparer les demandes d'amitié envoyées et reçues
- Ajout de méthodes dans FriendshipRepository pour récupérer séparément les demandes envoyées (findSentRequestsByUser) et reçues (findReceivedRequestsByUser)
- Ajout de méthodes dans FriendshipService pour lister les demandes envoyées (listSentFriendRequests) et reçues (listReceivedFriendRequests)
- Ajout de deux nouveaux endpoints REST:
- GET /friends/sent/{userId} : récupère les demandes envoyées par un utilisateur
- GET /friends/received/{userId} : récupère les demandes reçues par un utilisateur
- Permet une meilleure séparation logique entre les demandes que l'utilisateur a envoyées et celles qu'il a reçues
This commit is contained in:
@@ -1,33 +1,26 @@
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
# Service pour la base de données PostgreSQL
|
||||
db:
|
||||
image: postgres:13
|
||||
container_name: afterwork_db
|
||||
environment:
|
||||
POSTGRES_USER: ${DB_USERNAME}
|
||||
POSTGRES_PASSWORD: ${DB_PASSWORD}
|
||||
POSTGRES_DB: ${DB_NAME}
|
||||
ports:
|
||||
- "5432:5432"
|
||||
POSTGRES_USER: "${DB_USERNAME}"
|
||||
POSTGRES_PASSWORD: "${DB_PASSWORD}"
|
||||
POSTGRES_DB: "${DB_NAME}"
|
||||
networks:
|
||||
- afterwork-network
|
||||
volumes:
|
||||
- db_data:/var/lib/postgresql/data
|
||||
restart: unless-stopped
|
||||
|
||||
# Service pour l'application Quarkus
|
||||
app:
|
||||
build:
|
||||
context: .
|
||||
dockerfile: src/main/docker/Dockerfile.jvm
|
||||
image: dahoudg/gbane/afterwork-quarkus:latest
|
||||
container_name: afterwork-quarkus
|
||||
environment:
|
||||
DB_USERNAME: ${DB_USERNAME}
|
||||
DB_PASSWORD: ${DB_PASSWORD}
|
||||
DB_HOST: db
|
||||
DB_PORT: 5432
|
||||
DB_NAME: ${DB_NAME}
|
||||
DB_USERNAME: "${DB_USERNAME}"
|
||||
DB_PASSWORD: "${DB_PASSWORD}"
|
||||
DB_HOST: "${DB_HOST}"
|
||||
DB_PORT: "${DB_PORT}"
|
||||
DB_NAME: "${DB_NAME}"
|
||||
JAVA_OPTS_APPEND: "-Dquarkus.http.host=0.0.0.0"
|
||||
ports:
|
||||
- "8080:8080"
|
||||
@@ -35,8 +28,8 @@ services:
|
||||
- db
|
||||
networks:
|
||||
- afterwork-network
|
||||
restart: unless-stopped
|
||||
|
||||
# Service pour Swagger UI
|
||||
swagger-ui:
|
||||
image: swaggerapi/swagger-ui
|
||||
container_name: afterwork-swagger-ui
|
||||
@@ -48,6 +41,7 @@ services:
|
||||
- app
|
||||
networks:
|
||||
- afterwork-network
|
||||
restart: unless-stopped
|
||||
|
||||
networks:
|
||||
afterwork-network:
|
||||
@@ -95,4 +95,44 @@ public class FriendshipRepository implements PanacheRepositoryBase<Friendship, U
|
||||
logger.infof("Nombre de relations récupérées pour l'utilisateur %s avec le statut %s : %d", user.getId(), status, friendships.size());
|
||||
return friendships;
|
||||
}
|
||||
|
||||
/**
|
||||
* Récupérer les demandes d'amitié envoyées par un utilisateur (où l'utilisateur est l'expéditeur).
|
||||
*
|
||||
* @param user L'utilisateur qui a envoyé les demandes.
|
||||
* @param status Le statut des relations d'amitié à filtrer (PENDING, etc.).
|
||||
* @param page Le numéro de la page à récupérer.
|
||||
* @param size La taille de la page (nombre d'éléments).
|
||||
* @return Une liste paginée de relations d'amitié envoyées.
|
||||
*/
|
||||
public List<Friendship> findSentRequestsByUser(Users user, FriendshipStatus status, int page, int size) {
|
||||
logger.infof("Récupération des demandes d'amitié envoyées par l'utilisateur %s avec le statut %s, page %d, taille %d", user.getId(), status, page, size);
|
||||
|
||||
List<Friendship> friendships = find("user = ?1 AND status = ?2", user, status)
|
||||
.page(page, size)
|
||||
.list();
|
||||
|
||||
logger.infof("Nombre de demandes envoyées récupérées pour l'utilisateur %s : %d", user.getId(), friendships.size());
|
||||
return friendships;
|
||||
}
|
||||
|
||||
/**
|
||||
* Récupérer les demandes d'amitié reçues par un utilisateur (où l'utilisateur est le destinataire).
|
||||
*
|
||||
* @param user L'utilisateur qui a reçu les demandes.
|
||||
* @param status Le statut des relations d'amitié à filtrer (PENDING, etc.).
|
||||
* @param page Le numéro de la page à récupérer.
|
||||
* @param size La taille de la page (nombre d'éléments).
|
||||
* @return Une liste paginée de relations d'amitié reçues.
|
||||
*/
|
||||
public List<Friendship> findReceivedRequestsByUser(Users user, FriendshipStatus status, int page, int size) {
|
||||
logger.infof("Récupération des demandes d'amitié reçues par l'utilisateur %s avec le statut %s, page %d, taille %d", user.getId(), status, page, size);
|
||||
|
||||
List<Friendship> friendships = find("friend = ?1 AND status = ?2", user, status)
|
||||
.page(page, size)
|
||||
.list();
|
||||
|
||||
logger.infof("Nombre de demandes reçues récupérées pour l'utilisateur %s : %d", user.getId(), friendships.size());
|
||||
return friendships;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,6 +6,7 @@ import com.lions.dev.dto.request.friends.FriendshipReadStatusRequestDTO;
|
||||
import com.lions.dev.dto.response.friends.FriendshipCreateOneResponseDTO;
|
||||
import com.lions.dev.dto.response.friends.FriendshipReadFriendDetailsResponseDTO;
|
||||
import com.lions.dev.dto.response.friends.FriendshipReadStatusResponseDTO;
|
||||
import com.lions.dev.entity.friends.FriendshipStatus;
|
||||
import com.lions.dev.exception.UserNotFoundException;
|
||||
import com.lions.dev.service.FriendshipService;
|
||||
import jakarta.inject.Inject;
|
||||
@@ -252,6 +253,54 @@ public class FriendshipResource {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Récupérer les demandes d'amitié en attente pour un utilisateur.
|
||||
*
|
||||
* @param userId L'ID de l'utilisateur
|
||||
* @param page Numéro de la page pour la pagination
|
||||
* @param size Nombre d'éléments par page
|
||||
* @return Liste des demandes d'amitié en attente
|
||||
*/
|
||||
@GET
|
||||
@Path("/pending/{userId}")
|
||||
@Operation(
|
||||
summary = "Récupérer les demandes d'amitié en attente",
|
||||
description = "Retourne la liste des demandes d'amitié en attente pour un utilisateur")
|
||||
@APIResponses({
|
||||
@APIResponse(
|
||||
responseCode = "200",
|
||||
description = "Demandes d'amitié récupérées",
|
||||
content =
|
||||
@Content(
|
||||
mediaType = MediaType.APPLICATION_JSON,
|
||||
schema = @Schema(implementation = FriendshipReadStatusResponseDTO.class))),
|
||||
@APIResponse(responseCode = "404", description = "Utilisateur non trouvé"),
|
||||
@APIResponse(
|
||||
responseCode = "500",
|
||||
description = "Erreur lors de la récupération des demandes d'amitié")
|
||||
})
|
||||
public Response getPendingFriendRequests(
|
||||
@PathParam("userId") UUID userId,
|
||||
@QueryParam("page") @DefaultValue("0") int page,
|
||||
@QueryParam("size") @DefaultValue("10") int size) {
|
||||
logger.info("[LOG] Récupération des demandes d'amitié en attente pour l'utilisateur : " + userId);
|
||||
|
||||
try {
|
||||
FriendshipReadStatusRequestDTO request = new FriendshipReadStatusRequestDTO(
|
||||
userId, FriendshipStatus.PENDING, page + 1, size);
|
||||
List<FriendshipReadStatusResponseDTO> friendships =
|
||||
friendshipService.listFriendRequestsByStatus(request);
|
||||
logger.info("[LOG] " + friendships.size() + " demandes d'amitié en attente récupérées avec succès.");
|
||||
return Response.ok(friendships).build();
|
||||
} catch (Exception e) {
|
||||
logger.error(
|
||||
"[ERROR] Erreur lors de la récupération des demandes d'amitié : " + e.getMessage(), e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR)
|
||||
.entity("{\"message\": \"Erreur lors de la récupération des demandes d'amitié.\"}")
|
||||
.build();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Récupérer les demandes d'amitié avec un statut spécifique.
|
||||
*
|
||||
@@ -294,6 +343,98 @@ public class FriendshipResource {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Récupérer les demandes d'amitié envoyées par un utilisateur.
|
||||
*
|
||||
* @param userId ID de l'utilisateur.
|
||||
* @param page Numéro de la page pour la pagination.
|
||||
* @param size Nombre d'éléments par page.
|
||||
* @return Liste des demandes d'amitié envoyées.
|
||||
*/
|
||||
@GET
|
||||
@Path("/sent/{userId}")
|
||||
@Operation(
|
||||
summary = "Récupérer les demandes d'amitié envoyées",
|
||||
description = "Retourne la liste des demandes d'amitié envoyées par un utilisateur")
|
||||
@APIResponses({
|
||||
@APIResponse(
|
||||
responseCode = "200",
|
||||
description = "Demandes d'amitié envoyées récupérées",
|
||||
content =
|
||||
@Content(
|
||||
mediaType = MediaType.APPLICATION_JSON,
|
||||
schema = @Schema(implementation = FriendshipReadStatusResponseDTO.class))),
|
||||
@APIResponse(responseCode = "404", description = "Utilisateur non trouvé"),
|
||||
@APIResponse(
|
||||
responseCode = "500",
|
||||
description = "Erreur lors de la récupération des demandes d'amitié envoyées")
|
||||
})
|
||||
public Response getSentFriendRequests(
|
||||
@PathParam("userId") UUID userId,
|
||||
@QueryParam("page") @DefaultValue("0") int page,
|
||||
@QueryParam("size") @DefaultValue("10") int size) {
|
||||
logger.info("[LOG] Récupération des demandes d'amitié envoyées pour l'utilisateur : " + userId);
|
||||
|
||||
try {
|
||||
List<FriendshipReadStatusResponseDTO> friendships =
|
||||
friendshipService.listSentFriendRequests(userId, page + 1, size);
|
||||
logger.info("[LOG] " + friendships.size() + " demandes d'amitié envoyées récupérées avec succès.");
|
||||
return Response.ok(friendships).build();
|
||||
} catch (Exception e) {
|
||||
logger.error(
|
||||
"[ERROR] Erreur lors de la récupération des demandes d'amitié envoyées : " + e.getMessage(), e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR)
|
||||
.entity("{\"message\": \"Erreur lors de la récupération des demandes d'amitié envoyées.\"}")
|
||||
.build();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Récupérer les demandes d'amitié reçues par un utilisateur.
|
||||
*
|
||||
* @param userId ID de l'utilisateur.
|
||||
* @param page Numéro de la page pour la pagination.
|
||||
* @param size Nombre d'éléments par page.
|
||||
* @return Liste des demandes d'amitié reçues.
|
||||
*/
|
||||
@GET
|
||||
@Path("/received/{userId}")
|
||||
@Operation(
|
||||
summary = "Récupérer les demandes d'amitié reçues",
|
||||
description = "Retourne la liste des demandes d'amitié reçues par un utilisateur")
|
||||
@APIResponses({
|
||||
@APIResponse(
|
||||
responseCode = "200",
|
||||
description = "Demandes d'amitié reçues récupérées",
|
||||
content =
|
||||
@Content(
|
||||
mediaType = MediaType.APPLICATION_JSON,
|
||||
schema = @Schema(implementation = FriendshipReadStatusResponseDTO.class))),
|
||||
@APIResponse(responseCode = "404", description = "Utilisateur non trouvé"),
|
||||
@APIResponse(
|
||||
responseCode = "500",
|
||||
description = "Erreur lors de la récupération des demandes d'amitié reçues")
|
||||
})
|
||||
public Response getReceivedFriendRequests(
|
||||
@PathParam("userId") UUID userId,
|
||||
@QueryParam("page") @DefaultValue("0") int page,
|
||||
@QueryParam("size") @DefaultValue("10") int size) {
|
||||
logger.info("[LOG] Récupération des demandes d'amitié reçues pour l'utilisateur : " + userId);
|
||||
|
||||
try {
|
||||
List<FriendshipReadStatusResponseDTO> friendships =
|
||||
friendshipService.listReceivedFriendRequests(userId, page + 1, size);
|
||||
logger.info("[LOG] " + friendships.size() + " demandes d'amitié reçues récupérées avec succès.");
|
||||
return Response.ok(friendships).build();
|
||||
} catch (Exception e) {
|
||||
logger.error(
|
||||
"[ERROR] Erreur lors de la récupération des demandes d'amitié reçues : " + e.getMessage(), e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR)
|
||||
.entity("{\"message\": \"Erreur lors de la récupération des demandes d'amitié reçues.\"}")
|
||||
.build();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Récupère les détails complets d'un ami.
|
||||
*
|
||||
|
||||
@@ -255,4 +255,46 @@ public class FriendshipService {
|
||||
|
||||
return friendships.stream().map(FriendshipReadStatusResponseDTO::new).toList();
|
||||
}
|
||||
|
||||
/**
|
||||
* Récupérer les demandes d'amitié envoyées par un utilisateur.
|
||||
*
|
||||
* @param userId ID de l'utilisateur.
|
||||
* @param page Numéro de la page.
|
||||
* @param size Taille de la page.
|
||||
* @return Liste des demandes d'amitié envoyées.
|
||||
*/
|
||||
public List<FriendshipReadStatusResponseDTO> listSentFriendRequests(UUID userId, int page, int size) {
|
||||
Users user = usersRepository.findById(userId);
|
||||
if (user == null) {
|
||||
logger.error("[ERROR] Utilisateur non trouvé.");
|
||||
throw new UserNotFoundException("Utilisateur introuvable.");
|
||||
}
|
||||
|
||||
List<Friendship> friendships = friendshipRepository.findSentRequestsByUser(user, FriendshipStatus.PENDING, page - 1, size);
|
||||
logger.info("[LOG] " + friendships.size() + " demandes d'amitié envoyées récupérées.");
|
||||
|
||||
return friendships.stream().map(FriendshipReadStatusResponseDTO::new).toList();
|
||||
}
|
||||
|
||||
/**
|
||||
* Récupérer les demandes d'amitié reçues par un utilisateur.
|
||||
*
|
||||
* @param userId ID de l'utilisateur.
|
||||
* @param page Numéro de la page.
|
||||
* @param size Taille de la page.
|
||||
* @return Liste des demandes d'amitié reçues.
|
||||
*/
|
||||
public List<FriendshipReadStatusResponseDTO> listReceivedFriendRequests(UUID userId, int page, int size) {
|
||||
Users user = usersRepository.findById(userId);
|
||||
if (user == null) {
|
||||
logger.error("[ERROR] Utilisateur non trouvé.");
|
||||
throw new UserNotFoundException("Utilisateur introuvable.");
|
||||
}
|
||||
|
||||
List<Friendship> friendships = friendshipRepository.findReceivedRequestsByUser(user, FriendshipStatus.PENDING, page - 1, size);
|
||||
logger.info("[LOG] " + friendships.size() + " demandes d'amitié reçues récupérées.");
|
||||
|
||||
return friendships.stream().map(FriendshipReadStatusResponseDTO::new).toList();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user