Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,12 @@ Activity save(String name, String description, String image, String timeRate, In
String categoryID);

List<Activity> getPagination(int page, int perPage);
List<Activity> getPaginationNotSubscribed(int page, int perPage, String userID, String activityName);

List<Activity> getSubscribedActivities(String userID);

public List<Activity> getSubscribedActivitiesWithStreak(String userID);
List<Activity> getSubscribedActivitiesWithStreak(String userID);
List<Activity> getSubscribedActivitiesWithStreak(String userID, String activityName);


}
Original file line number Diff line number Diff line change
Expand Up @@ -17,4 +17,7 @@ public interface IActivityRepository {
List<Activity> getSubscribedActivities(String userID);

public List<Activity> getSubscribedActivitiesWithStreak(String userID);

List<Activity> getPaginationNotSubscribed(int page, int perPage, String userID, String activityName);
List<Activity> getSubscribedActivities(String userID, String activityName);
}
Original file line number Diff line number Diff line change
Expand Up @@ -60,4 +60,15 @@ public List<Activity> getSubscribedActivitiesWithStreak(String userID) {
return activityRepository.getSubscribedActivitiesWithStreak(userID);
}

@Override
public List<Activity> getPaginationNotSubscribed(int page, int perPage, String userID, String activityName) {
return activityRepository.getPaginationNotSubscribed(page, perPage, userID, activityName);
}

@Override
public List<Activity> getSubscribedActivitiesWithStreak(String userID, String activityName) {
return activityRepository.getSubscribedActivities(userID, activityName);
}


}
Original file line number Diff line number Diff line change
Expand Up @@ -72,4 +72,20 @@ public List<ActivityOutputV2Streak> getSubscribedActivitiesWithStreaks() {
return activityOutputV2StreakMapper.toDTO(activities);
}

@Secured({ "ROLE_USER", "ROLE_ADMIN" })
@QueryMapping("paginationActivitiesNotSubscribed")
public List<ActivityOutputV2> paginationActivitiesNotSubscribed(@Argument int page, @Argument int perPage,
@Argument String activityName) {
User user = userService.findByEmailOnlyBase(SecurityContextHolder.getContext().getAuthentication().getName());
List<Activity> activities = activityService.getPaginationNotSubscribed(page, perPage, user.getId(), activityName);
return activityOutputV2Mapper.toDTO(activities);
}
@Secured({ "ROLE_USER", "ROLE_ADMIN" })
@QueryMapping("getSubscribedActivitiesWithStreakByName")
public List<ActivityOutputV2Streak> getSubscribedActivitiesWithStreak(@Argument String activityName) {
User user = userService.findByEmailOnlyBase(SecurityContextHolder.getContext().getAuthentication().getName());
List<Activity> activities = activityService.getSubscribedActivitiesWithStreak(user.getId(), activityName);
return activityOutputV2StreakMapper.toDTO(activities);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -28,21 +28,43 @@ RETURN COUNT(*) > 0
RETURN a,c,u
SKIP $offset LIMIT $limit
""")
List<ActivityEntity> getPagination(int offset, int limit);
List<ActivityEntity> getPagination(@Param("offset") int offset, @Param("limit") int limit);

@Query("""
MATCH (cc:User)-[c:Created]->(a:Activity)<-[r:Participated]-(u:User)
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<ActivityEntity> getPaginationNotSubscribed(@Param("offset") int offset, @Param("limit")int limit,@Param("userID") String userID, @Param("activityName") String activityName);

@Query("""
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<ActivityEntity> 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<ActivityEntity> getSubscribedActivitiesWithStreak(@Param("userID") String userID);

@Query("""
MATCH (u:User)-[:Participated]->(a:Activity)<-[:`Related-To`]-(p:Post)
WHERE elementId(u) = $userID
AND lower(a.name) CONTAINS lower($activityName)
SET a.streak = p.streak
RETURN a;
""")
List<ActivityEntity> getSubscribedActivitiesWithStreak(@Param("userID") String userID,
@Param("activityName") String activityName);

}
Original file line number Diff line number Diff line change
Expand Up @@ -60,4 +60,19 @@ public List<Activity> getSubscribedActivitiesWithStreak(String userID) {
return activityEntityMapper.toDomain(activityEntityRepository.getSubscribedActivitiesWithStreak(userID));
}


@Override
public List<Activity> getPaginationNotSubscribed(int page, int perPage, String userID, String activityName) {
int offset = (page-1) * perPage;
Copy link

Copilot AI Apr 22, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The pagination calculation subtracts 1 from 'page', which can yield a negative offset if a value of 0 is passed. Consider either validating that 'page' is at least 1 or adjusting the calculation to be consistent with zero-based page numbering.

Suggested change
int offset = (page-1) * perPage;
int offset = (Math.max(1, page) - 1) * perPage;

Copilot uses AI. Check for mistakes.

return activityEntityMapper.toDomain(activityEntityRepository.getPaginationNotSubscribed(offset, perPage, userID, activityName));
}

@Override
public List<Activity> getSubscribedActivities(String userID, String activityName) {
return activityEntityMapper.toDomain(activityEntityRepository.getSubscribedActivitiesWithStreak(userID, activityName));
}



}
2 changes: 2 additions & 0 deletions API/src/main/resources/graphql/schema.graphqls
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,10 @@ type Query {
postsSubscribedActivitiesV2(lastDate: String!, limit: Int): [PostOutputV2]

paginationActivitiesV2(page: Int!, perPage: Int): [ActivityOutputV2]
paginationActivitiesNotSubscribed(page: Int!, perPage: Int,activityName:String): [ActivityOutputV2]
getOwnUser: UserOutputV2
getSubscribedActivities: [ActivityOutputV2]
getSubscribedActivitiesWithStreakByName(activityName:String!): [ActivityOutputV2Streak]
getSubscribedActivitiesWithStreaks: [ActivityOutputV2Streak]
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -177,4 +177,45 @@ void getSubscribedActivitiesWithStreakTest() {
List<ActivityOutputV2Streak> 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;
Comment thread
JonayKB marked this conversation as resolved.
int perPage = 10;
List<Activity> activityList = Arrays.asList(testActivity);
List<ActivityOutputV2> 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<ActivityOutputV2> 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<Activity> activityList = Arrays.asList(testActivity);
List<ActivityOutputV2Streak> 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<ActivityOutputV2Streak> result = activityControllerV2.getSubscribedActivitiesWithStreak(activityName);
assertEquals(outputList, result);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -97,5 +97,36 @@ void getSubscribedActivities() {

assertNotNull(list);
}

@Test
void getSubscribedActivitiesWithStreak() {
String userId = "1L";
when(activityEntityRepository.getSubscribedActivitiesWithStreak(userId)).thenReturn(new ArrayList<>());

List<Activity> 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<Activity> 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<Activity> list = activityEntityService.getSubscribedActivities(userId, activityName);

assertNotNull(list);
}

}