From a50bc69855ce5800f96e25917ee9c2744516e674 Mon Sep 17 00:00:00 2001 From: JonayKB Date: Tue, 22 Apr 2025 15:30:50 +0200 Subject: [PATCH 1/2] feat(Activity): Added find by name and not subscribed --- .../ports/primary/IActivityService.java | 6 ++++- .../ports/secondary/IActivityRepository.java | 3 +++ .../domain/services/ActivityService.java | 11 ++++++++++ .../v2/controllers/ActivityControllerV2.java | 15 +++++++++++++ .../IActivityEntityRepository.java | 22 +++++++++++++++++-- .../services/ActivityEntityService.java | 15 +++++++++++++ .../main/resources/graphql/schema.graphqls | 2 ++ 7 files changed, 71 insertions(+), 3 deletions(-) diff --git a/API/src/main/java/es/iespuertodelacruz/routinefights/activity/domain/ports/primary/IActivityService.java b/API/src/main/java/es/iespuertodelacruz/routinefights/activity/domain/ports/primary/IActivityService.java index e95b1158d..acfa31cbf 100644 --- a/API/src/main/java/es/iespuertodelacruz/routinefights/activity/domain/ports/primary/IActivityService.java +++ b/API/src/main/java/es/iespuertodelacruz/routinefights/activity/domain/ports/primary/IActivityService.java @@ -10,8 +10,12 @@ Activity save(String name, String description, String image, String timeRate, In String categoryID); List getPagination(int page, int perPage); + List getPaginationNotSubscribed(int page, int perPage, String userID); List getSubscribedActivities(String userID); - public List getSubscribedActivitiesWithStreak(String userID); + List getSubscribedActivitiesWithStreak(String userID); + List getSubscribedActivities(String userID, String activityName); + + } diff --git a/API/src/main/java/es/iespuertodelacruz/routinefights/activity/domain/ports/secondary/IActivityRepository.java b/API/src/main/java/es/iespuertodelacruz/routinefights/activity/domain/ports/secondary/IActivityRepository.java index 44c49021f..713965ce0 100644 --- a/API/src/main/java/es/iespuertodelacruz/routinefights/activity/domain/ports/secondary/IActivityRepository.java +++ b/API/src/main/java/es/iespuertodelacruz/routinefights/activity/domain/ports/secondary/IActivityRepository.java @@ -17,4 +17,7 @@ public interface IActivityRepository { List getSubscribedActivities(String userID); public List getSubscribedActivitiesWithStreak(String userID); + + List getPaginationNotSubscribed(int page, int perPage, String userID); + List getSubscribedActivities(String userID, String activityName); } diff --git a/API/src/main/java/es/iespuertodelacruz/routinefights/activity/domain/services/ActivityService.java b/API/src/main/java/es/iespuertodelacruz/routinefights/activity/domain/services/ActivityService.java index d291d5d3a..068944f76 100644 --- a/API/src/main/java/es/iespuertodelacruz/routinefights/activity/domain/services/ActivityService.java +++ b/API/src/main/java/es/iespuertodelacruz/routinefights/activity/domain/services/ActivityService.java @@ -60,4 +60,15 @@ public List getSubscribedActivitiesWithStreak(String userID) { return activityRepository.getSubscribedActivitiesWithStreak(userID); } + @Override + public List getPaginationNotSubscribed(int page, int perPage, String userID) { + return activityRepository.getPaginationNotSubscribed(page, perPage, userID); + } + + @Override + public List getSubscribedActivities(String userID, String activityName) { + return activityRepository.getSubscribedActivities(userID, activityName); + } + + } diff --git a/API/src/main/java/es/iespuertodelacruz/routinefights/activity/infrastructure/adapters/primary/v2/controllers/ActivityControllerV2.java b/API/src/main/java/es/iespuertodelacruz/routinefights/activity/infrastructure/adapters/primary/v2/controllers/ActivityControllerV2.java index 38d95cd88..eb82067af 100644 --- a/API/src/main/java/es/iespuertodelacruz/routinefights/activity/infrastructure/adapters/primary/v2/controllers/ActivityControllerV2.java +++ b/API/src/main/java/es/iespuertodelacruz/routinefights/activity/infrastructure/adapters/primary/v2/controllers/ActivityControllerV2.java @@ -72,4 +72,19 @@ public List getSubscribedActivitiesWithStreaks() { return activityOutputV2StreakMapper.toDTO(activities); } + @Secured({ "ROLE_USER", "ROLE_ADMIN" }) + @QueryMapping("paginationActivitiesNotSubscribed") + public List paginationActivitiesNotSubscribed(@Argument int page, @Argument int perPage) { + User user = userService.findByEmailOnlyBase(SecurityContextHolder.getContext().getAuthentication().getName()); + List activities = activityService.getPaginationNotSubscribed(page, perPage, user.getId()); + return activityOutputV2Mapper.toDTO(activities); + } + @Secured({ "ROLE_USER", "ROLE_ADMIN" }) + @QueryMapping("getSubscribedActivitiesByName") + public List getSubscribedActivities(@Argument String activityName) { + User user = userService.findByEmailOnlyBase(SecurityContextHolder.getContext().getAuthentication().getName()); + List activities = activityService.getSubscribedActivities(user.getId(), activityName); + return activityOutputV2Mapper.toDTO(activities); + } + } diff --git a/API/src/main/java/es/iespuertodelacruz/routinefights/activity/infrastructure/adapters/secondary/repositories/IActivityEntityRepository.java b/API/src/main/java/es/iespuertodelacruz/routinefights/activity/infrastructure/adapters/secondary/repositories/IActivityEntityRepository.java index 3f6bc32f6..3bfcc6340 100644 --- a/API/src/main/java/es/iespuertodelacruz/routinefights/activity/infrastructure/adapters/secondary/repositories/IActivityEntityRepository.java +++ b/API/src/main/java/es/iespuertodelacruz/routinefights/activity/infrastructure/adapters/secondary/repositories/IActivityEntityRepository.java @@ -29,6 +29,15 @@ RETURN COUNT(*) > 0 SKIP $offset LIMIT $limit """) List getPagination(int offset, int limit); + + @Query(""" + MATCH (a:Activity)<-[c:Created]-(u:User) + WHERE NOT (u)-[:Participated]->(a) + RETURN a,c,u + SKIP $offset LIMIT $limit + """) + List getPaginationNotSubscribed(int offset, int limit, String userID); + @Query(""" MATCH (cc:User)-[c:Created]->(a:Activity)<-[r:Participated]-(u:User) @@ -38,11 +47,20 @@ WHERE elementId(u) = $userID List getSubscribedActivities(@Param("userID") String userID); @Query(""" - MATCH (u:User)-[:Participated]->(a:Activity)<-[:`Related-To`]-(p:Post) + MATCH (u:User)-[:Participated]->(a:Activity)<-[:`Related-To`]-(p:Post) WHERE elementId(u)=$userID - SET a.streak=p.streak + SET a.streak=p.streak RETURN a; """) List getSubscribedActivitiesWithStreak(@Param("userID") String userID); + @Query(""" + MATCH (u:User)-[:Participated]->(a:Activity)<-[:`Related-To`]-(p:Post) + WHERE elementId(u)=$userID AND a.name=$activityName + SET a.streak=p.streak + RETURN a; + """) + List getSubscribedActivitiesWithStreak(@Param("userID") String userID, + @Param("activityName") String activityName); + } diff --git a/API/src/main/java/es/iespuertodelacruz/routinefights/activity/infrastructure/adapters/secondary/services/ActivityEntityService.java b/API/src/main/java/es/iespuertodelacruz/routinefights/activity/infrastructure/adapters/secondary/services/ActivityEntityService.java index 271036891..8850e40ba 100644 --- a/API/src/main/java/es/iespuertodelacruz/routinefights/activity/infrastructure/adapters/secondary/services/ActivityEntityService.java +++ b/API/src/main/java/es/iespuertodelacruz/routinefights/activity/infrastructure/adapters/secondary/services/ActivityEntityService.java @@ -60,4 +60,19 @@ public List getSubscribedActivitiesWithStreak(String userID) { return activityEntityMapper.toDomain(activityEntityRepository.getSubscribedActivitiesWithStreak(userID)); } + + @Override + public List getPaginationNotSubscribed(int page, int perPage, String userID) { + int offset = (page-1) * perPage; + + return activityEntityMapper.toDomain(activityEntityRepository.getPaginationNotSubscribed(offset, perPage, userID)); + } + + @Override + public List getSubscribedActivities(String userID, String activityName) { + return activityEntityMapper.toDomain(activityEntityRepository.getSubscribedActivitiesWithStreak(userID, activityName)); + } + + + } diff --git a/API/src/main/resources/graphql/schema.graphqls b/API/src/main/resources/graphql/schema.graphqls index 8f06b9ce9..06ea9c0f8 100644 --- a/API/src/main/resources/graphql/schema.graphqls +++ b/API/src/main/resources/graphql/schema.graphqls @@ -20,8 +20,10 @@ type Query { postsSubscribedActivitiesV2(lastDate: String!, limit: Int): [PostOutputV2] paginationActivitiesV2(page: Int!, perPage: Int): [ActivityOutputV2] + paginationActivitiesNotSubscribed(page: Int!, perPage: Int): [ActivityOutputV2] getOwnUser: UserOutputV2 getSubscribedActivities: [ActivityOutputV2] + getSubscribedActivitiesByName(name:String!): [ActivityOutputV2] getSubscribedActivitiesWithStreaks: [ActivityOutputV2Streak] } From d093c5a5be37bc420ffbf0dd79eed0ecf5ffb276 Mon Sep 17 00:00:00 2001 From: JonayKB Date: Tue, 22 Apr 2025 16:51:25 +0200 Subject: [PATCH 2/2] fix(Activity): Fixed querry and added caseinsensitvie --- .../ports/primary/IActivityService.java | 4 +- .../ports/secondary/IActivityRepository.java | 2 +- .../domain/services/ActivityService.java | 6 +-- .../v2/controllers/ActivityControllerV2.java | 13 +++--- .../IActivityEntityRepository.java | 30 ++++++++------ .../services/ActivityEntityService.java | 4 +- .../main/resources/graphql/schema.graphqls | 4 +- .../controllers/ActivityV2ControllerTest.java | 41 +++++++++++++++++++ .../service/ActivityEntityServiceTest.java | 31 ++++++++++++++ 9 files changed, 106 insertions(+), 29 deletions(-) diff --git a/API/src/main/java/es/iespuertodelacruz/routinefights/activity/domain/ports/primary/IActivityService.java b/API/src/main/java/es/iespuertodelacruz/routinefights/activity/domain/ports/primary/IActivityService.java index acfa31cbf..1e0b470ce 100644 --- a/API/src/main/java/es/iespuertodelacruz/routinefights/activity/domain/ports/primary/IActivityService.java +++ b/API/src/main/java/es/iespuertodelacruz/routinefights/activity/domain/ports/primary/IActivityService.java @@ -10,12 +10,12 @@ Activity save(String name, String description, String image, String timeRate, In String categoryID); List getPagination(int page, int perPage); - List getPaginationNotSubscribed(int page, int perPage, String userID); + List getPaginationNotSubscribed(int page, int perPage, String userID, String activityName); List getSubscribedActivities(String userID); List getSubscribedActivitiesWithStreak(String userID); - List getSubscribedActivities(String userID, String activityName); + List getSubscribedActivitiesWithStreak(String userID, String activityName); } diff --git a/API/src/main/java/es/iespuertodelacruz/routinefights/activity/domain/ports/secondary/IActivityRepository.java b/API/src/main/java/es/iespuertodelacruz/routinefights/activity/domain/ports/secondary/IActivityRepository.java index 713965ce0..b97e1e4a3 100644 --- a/API/src/main/java/es/iespuertodelacruz/routinefights/activity/domain/ports/secondary/IActivityRepository.java +++ b/API/src/main/java/es/iespuertodelacruz/routinefights/activity/domain/ports/secondary/IActivityRepository.java @@ -18,6 +18,6 @@ public interface IActivityRepository { public List getSubscribedActivitiesWithStreak(String userID); - List getPaginationNotSubscribed(int page, int perPage, String userID); + List getPaginationNotSubscribed(int page, int perPage, String userID, String activityName); List getSubscribedActivities(String userID, String activityName); } diff --git a/API/src/main/java/es/iespuertodelacruz/routinefights/activity/domain/services/ActivityService.java b/API/src/main/java/es/iespuertodelacruz/routinefights/activity/domain/services/ActivityService.java index 068944f76..144d24e47 100644 --- a/API/src/main/java/es/iespuertodelacruz/routinefights/activity/domain/services/ActivityService.java +++ b/API/src/main/java/es/iespuertodelacruz/routinefights/activity/domain/services/ActivityService.java @@ -61,12 +61,12 @@ public List getSubscribedActivitiesWithStreak(String userID) { } @Override - public List getPaginationNotSubscribed(int page, int perPage, String userID) { - return activityRepository.getPaginationNotSubscribed(page, perPage, userID); + public List getPaginationNotSubscribed(int page, int perPage, String userID, String activityName) { + return activityRepository.getPaginationNotSubscribed(page, perPage, userID, activityName); } @Override - public List getSubscribedActivities(String userID, String activityName) { + public List getSubscribedActivitiesWithStreak(String userID, String activityName) { return activityRepository.getSubscribedActivities(userID, activityName); } diff --git a/API/src/main/java/es/iespuertodelacruz/routinefights/activity/infrastructure/adapters/primary/v2/controllers/ActivityControllerV2.java b/API/src/main/java/es/iespuertodelacruz/routinefights/activity/infrastructure/adapters/primary/v2/controllers/ActivityControllerV2.java index eb82067af..eeabb768e 100644 --- a/API/src/main/java/es/iespuertodelacruz/routinefights/activity/infrastructure/adapters/primary/v2/controllers/ActivityControllerV2.java +++ b/API/src/main/java/es/iespuertodelacruz/routinefights/activity/infrastructure/adapters/primary/v2/controllers/ActivityControllerV2.java @@ -74,17 +74,18 @@ public List getSubscribedActivitiesWithStreaks() { @Secured({ "ROLE_USER", "ROLE_ADMIN" }) @QueryMapping("paginationActivitiesNotSubscribed") - public List paginationActivitiesNotSubscribed(@Argument int page, @Argument int perPage) { + public List paginationActivitiesNotSubscribed(@Argument int page, @Argument int perPage, + @Argument String activityName) { User user = userService.findByEmailOnlyBase(SecurityContextHolder.getContext().getAuthentication().getName()); - List activities = activityService.getPaginationNotSubscribed(page, perPage, user.getId()); + List activities = activityService.getPaginationNotSubscribed(page, perPage, user.getId(), activityName); return activityOutputV2Mapper.toDTO(activities); } @Secured({ "ROLE_USER", "ROLE_ADMIN" }) - @QueryMapping("getSubscribedActivitiesByName") - public List getSubscribedActivities(@Argument String activityName) { + @QueryMapping("getSubscribedActivitiesWithStreakByName") + public List getSubscribedActivitiesWithStreak(@Argument String activityName) { User user = userService.findByEmailOnlyBase(SecurityContextHolder.getContext().getAuthentication().getName()); - List activities = activityService.getSubscribedActivities(user.getId(), activityName); - return activityOutputV2Mapper.toDTO(activities); + List activities = activityService.getSubscribedActivitiesWithStreak(user.getId(), activityName); + return activityOutputV2StreakMapper.toDTO(activities); } } diff --git a/API/src/main/java/es/iespuertodelacruz/routinefights/activity/infrastructure/adapters/secondary/repositories/IActivityEntityRepository.java b/API/src/main/java/es/iespuertodelacruz/routinefights/activity/infrastructure/adapters/secondary/repositories/IActivityEntityRepository.java index 3bfcc6340..53d6e7d55 100644 --- a/API/src/main/java/es/iespuertodelacruz/routinefights/activity/infrastructure/adapters/secondary/repositories/IActivityEntityRepository.java +++ b/API/src/main/java/es/iespuertodelacruz/routinefights/activity/infrastructure/adapters/secondary/repositories/IActivityEntityRepository.java @@ -28,21 +28,24 @@ RETURN COUNT(*) > 0 RETURN a,c,u SKIP $offset LIMIT $limit """) - List getPagination(int offset, int limit); - + List getPagination(@Param("offset") int offset, @Param("limit") int limit); + @Query(""" - MATCH (a:Activity)<-[c:Created]-(u:User) - WHERE NOT (u)-[:Participated]->(a) - RETURN a,c,u - SKIP $offset LIMIT $limit - """) - List getPaginationNotSubscribed(int offset, int limit, String userID); - + MATCH (x:User) + WHERE elementId(x) = $userID + MATCH (a:Activity)<-[c:Created]-(u:User) + WHERE NOT (x)-[:Participated]->(a) AND lower(a.name) CONTAINS lower($activityName) + RETURN a,c,u + SKIP $offset LIMIT $limit + """) + List getPaginationNotSubscribed(@Param("offset") int offset, @Param("limit")int limit,@Param("userID") String userID, @Param("activityName") String activityName); @Query(""" - MATCH (cc:User)-[c:Created]->(a:Activity)<-[r:Participated]-(u:User) + MATCH (u:User) WHERE elementId(u) = $userID - RETURN a,r,u,cc,c + MATCH (cc:User)-[c:Created]->(a:Activity) + WHERE NOT EXISTS { (u)-[:Participated]->(a) } + RETURN a, cc, c """) List getSubscribedActivities(@Param("userID") String userID); @@ -56,8 +59,9 @@ WHERE elementId(u)=$userID @Query(""" MATCH (u:User)-[:Participated]->(a:Activity)<-[:`Related-To`]-(p:Post) - WHERE elementId(u)=$userID AND a.name=$activityName - SET a.streak=p.streak + WHERE elementId(u) = $userID + AND lower(a.name) CONTAINS lower($activityName) + SET a.streak = p.streak RETURN a; """) List getSubscribedActivitiesWithStreak(@Param("userID") String userID, diff --git a/API/src/main/java/es/iespuertodelacruz/routinefights/activity/infrastructure/adapters/secondary/services/ActivityEntityService.java b/API/src/main/java/es/iespuertodelacruz/routinefights/activity/infrastructure/adapters/secondary/services/ActivityEntityService.java index 8850e40ba..84fb8c89d 100644 --- a/API/src/main/java/es/iespuertodelacruz/routinefights/activity/infrastructure/adapters/secondary/services/ActivityEntityService.java +++ b/API/src/main/java/es/iespuertodelacruz/routinefights/activity/infrastructure/adapters/secondary/services/ActivityEntityService.java @@ -62,10 +62,10 @@ public List getSubscribedActivitiesWithStreak(String userID) { @Override - public List getPaginationNotSubscribed(int page, int perPage, String userID) { + public List getPaginationNotSubscribed(int page, int perPage, String userID, String activityName) { int offset = (page-1) * perPage; - return activityEntityMapper.toDomain(activityEntityRepository.getPaginationNotSubscribed(offset, perPage, userID)); + return activityEntityMapper.toDomain(activityEntityRepository.getPaginationNotSubscribed(offset, perPage, userID, activityName)); } @Override diff --git a/API/src/main/resources/graphql/schema.graphqls b/API/src/main/resources/graphql/schema.graphqls index 06ea9c0f8..dfe2d2d13 100644 --- a/API/src/main/resources/graphql/schema.graphqls +++ b/API/src/main/resources/graphql/schema.graphqls @@ -20,10 +20,10 @@ type Query { postsSubscribedActivitiesV2(lastDate: String!, limit: Int): [PostOutputV2] paginationActivitiesV2(page: Int!, perPage: Int): [ActivityOutputV2] - paginationActivitiesNotSubscribed(page: Int!, perPage: Int): [ActivityOutputV2] + paginationActivitiesNotSubscribed(page: Int!, perPage: Int,activityName:String): [ActivityOutputV2] getOwnUser: UserOutputV2 getSubscribedActivities: [ActivityOutputV2] - getSubscribedActivitiesByName(name:String!): [ActivityOutputV2] + getSubscribedActivitiesWithStreakByName(activityName:String!): [ActivityOutputV2Streak] getSubscribedActivitiesWithStreaks: [ActivityOutputV2Streak] } diff --git a/API/src/test/java/es/iespuertodelacruz/routinefights/activity/infrastructure/adapters/primary/v2/controllers/ActivityV2ControllerTest.java b/API/src/test/java/es/iespuertodelacruz/routinefights/activity/infrastructure/adapters/primary/v2/controllers/ActivityV2ControllerTest.java index 83c5aa98f..729b615a4 100644 --- a/API/src/test/java/es/iespuertodelacruz/routinefights/activity/infrastructure/adapters/primary/v2/controllers/ActivityV2ControllerTest.java +++ b/API/src/test/java/es/iespuertodelacruz/routinefights/activity/infrastructure/adapters/primary/v2/controllers/ActivityV2ControllerTest.java @@ -177,4 +177,45 @@ void getSubscribedActivitiesWithStreakTest() { List result = activityControllerV2.getSubscribedActivitiesWithStreaks(); assertEquals(outputList, result); } + + @Test + void paginationActivitiesNotSubscribedTest() { + SecurityContext securityContext = mock(SecurityContext.class); + Authentication authentication = mock(Authentication.class); + when(authentication.getName()).thenReturn("testUser"); + when(securityContext.getAuthentication()).thenReturn(authentication); + SecurityContextHolder.setContext(securityContext); + + int page = 0; + int perPage = 10; + List activityList = Arrays.asList(testActivity); + List outputList = Arrays.asList(activityOutputV2); + + when(userService.findByEmailOnlyBase("testUser")).thenReturn(testUser); + when(activityService.getPaginationNotSubscribed(page, perPage, testUser.getId(),"")).thenReturn(activityList); + when(activityOutputV2Mapper.toDTO(activityList)).thenReturn(outputList); + + List result = activityControllerV2.paginationActivitiesNotSubscribed(page, perPage,""); + assertEquals(outputList, result); + } + @Test + void getSubscribedActivitiesWithStreakByNameTest() { + SecurityContext securityContext = mock(SecurityContext.class); + Authentication authentication = mock(Authentication.class); + when(authentication.getName()).thenReturn("testUser"); + when(securityContext.getAuthentication()).thenReturn(authentication); + SecurityContextHolder.setContext(securityContext); + + String activityName = "Test Activity"; + List activityList = Arrays.asList(testActivity); + List outputList = Arrays + .asList(new ActivityOutputV2Streak(null, null, null, null, null, null, null, null)); + + when(userService.findByEmailOnlyBase("testUser")).thenReturn(testUser); + when(activityService.getSubscribedActivitiesWithStreak(testUser.getId(), activityName)).thenReturn(activityList); + when(activityOutputV2StreakMapper.toDTO(activityList)).thenReturn(outputList); + + List result = activityControllerV2.getSubscribedActivitiesWithStreak(activityName); + assertEquals(outputList, result); + } } diff --git a/API/src/test/java/es/iespuertodelacruz/routinefights/activity/infrastructure/adapters/secondary/service/ActivityEntityServiceTest.java b/API/src/test/java/es/iespuertodelacruz/routinefights/activity/infrastructure/adapters/secondary/service/ActivityEntityServiceTest.java index 9f196d7a7..022877319 100644 --- a/API/src/test/java/es/iespuertodelacruz/routinefights/activity/infrastructure/adapters/secondary/service/ActivityEntityServiceTest.java +++ b/API/src/test/java/es/iespuertodelacruz/routinefights/activity/infrastructure/adapters/secondary/service/ActivityEntityServiceTest.java @@ -97,5 +97,36 @@ void getSubscribedActivities() { assertNotNull(list); } + + @Test + void getSubscribedActivitiesWithStreak() { + String userId = "1L"; + when(activityEntityRepository.getSubscribedActivitiesWithStreak(userId)).thenReturn(new ArrayList<>()); + + List list = activityEntityService.getSubscribedActivitiesWithStreak(userId); + + assertNotNull(list); + } + @Test + void getPaginationNotSubscribed() { + int page = 1; + int perPage = 10; + String userId = "1L"; + when(activityEntityRepository.getPaginationNotSubscribed(0, perPage, userId,"")).thenReturn(new ArrayList<>()); + + List list = activityEntityService.getPaginationNotSubscribed(page, perPage, userId,""); + + assertNotNull(list); + } + @Test + void getSubscribedActivitiesWithStreakByName() { + String userId = "1L"; + String activityName = "activityName"; + when(activityEntityRepository.getSubscribedActivitiesWithStreak(userId, activityName)).thenReturn(new ArrayList<>()); + + List list = activityEntityService.getSubscribedActivities(userId, activityName); + + assertNotNull(list); + } }