Skip to content

Commit 6cdf296

Browse files
committed
added GET dancers endpoint
1 parent 5bc580a commit 6cdf296

File tree

11 files changed

+111
-30
lines changed

11 files changed

+111
-30
lines changed

src/main/java/net/dancier/dancer/core/DancerRepository.java

Lines changed: 0 additions & 15 deletions
This file was deleted.

src/main/java/net/dancier/dancer/core/ProfileService.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import net.dancier.dancer.core.model.DanceProfile;
1616
import net.dancier.dancer.core.model.Dancer;
1717
import net.dancier.dancer.core.util.ModelMapper;
18+
import net.dancier.dancer.dancers.DancerRepository;
1819
import net.dancier.dancer.location.ZipCode;
1920
import net.dancier.dancer.location.ZipCodeRepository;
2021
import org.slf4j.Logger;

src/main/java/net/dancier/dancer/chat/DancerController.java renamed to src/main/java/net/dancier/dancer/dancers/DancerController.java

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
1-
package net.dancier.dancer.chat;
1+
package net.dancier.dancer.dancers;
22

33
import lombok.RequiredArgsConstructor;
44
import net.dancier.dancer.chat.dto.DancerDto;
55
import net.dancier.dancer.chat.dto.DancerIdsDto;
6-
import net.dancier.dancer.core.DancerService;
6+
import net.dancier.dancer.core.dto.PublicProfileDto;
7+
import net.dancier.dancer.core.model.Gender;
78
import net.dancier.dancer.security.AuthenticatedUser;
89
import net.dancier.dancer.security.CurrentUser;
910
import org.slf4j.Logger;
@@ -12,8 +13,7 @@
1213
import org.springframework.security.access.annotation.Secured;
1314
import org.springframework.web.bind.annotation.*;
1415

15-
import java.util.HashMap;
16-
import java.util.UUID;
16+
import java.util.*;
1717

1818
import static net.dancier.dancer.authentication.Constants.ROLE_USER;
1919

@@ -25,6 +25,17 @@ public class DancerController {
2525

2626
private final DancerService dancerService;
2727

28+
@GetMapping("")
29+
@Secured(ROLE_USER)
30+
public ResponseEntity<List<PublicProfileDto>> get(
31+
@CurrentUser AuthenticatedUser authenticatedUser,
32+
@RequestParam Gender gender,
33+
@RequestParam int range
34+
) {
35+
log.info("Fetching list of dancers in {} km range with gender {} for user {}", range, gender, authenticatedUser.getUserId());
36+
return ResponseEntity.ok(dancerService.getDancersList(authenticatedUser, gender, range));
37+
}
38+
2839
@PostMapping("")
2940
@Secured(ROLE_USER)
3041
public ResponseEntity<HashMap<UUID, DancerDto>> post(
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package net.dancier.dancer.dancers;
2+
3+
import net.dancier.dancer.core.model.Dancer;
4+
import net.dancier.dancer.core.model.Gender;
5+
import org.springframework.data.jpa.repository.JpaRepository;
6+
7+
import java.util.List;
8+
import java.util.Optional;
9+
import java.util.UUID;
10+
11+
public interface DancerRepository extends JpaRepository<Dancer, UUID> {
12+
13+
Optional<Dancer> findByUserId(UUID userid);
14+
15+
Boolean existsByDancerName(String dancerName);
16+
17+
List<Dancer> findFirst500ByGenderAndLongitudeBetweenAndLatitudeBetween(
18+
Gender gender,
19+
double lowerLongitude,
20+
double upperLongitude,
21+
double lowerLatitude,
22+
double upperLatitude
23+
);
24+
25+
List<Dancer> findFirst500ByLongitudeBetween(
26+
double lowerLongitude,
27+
double upperLongitude
28+
);
29+
30+
List<Dancer> findFirst500ByGender(
31+
Gender gender
32+
);
33+
34+
}

src/main/java/net/dancier/dancer/core/DancerService.java renamed to src/main/java/net/dancier/dancer/dancers/DancerService.java

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
1-
package net.dancier.dancer.core;
1+
package net.dancier.dancer.dancers;
22

33
import net.dancier.dancer.chat.dto.DancerDto;
44
import net.dancier.dancer.chat.dto.DancerIdsDto;
5+
import net.dancier.dancer.core.dto.PublicProfileDto;
56
import net.dancier.dancer.core.exception.NotFoundException;
67
import net.dancier.dancer.core.model.Dancer;
8+
import net.dancier.dancer.core.model.Gender;
9+
import net.dancier.dancer.security.AuthenticatedUser;
710
import org.springframework.beans.factory.annotation.Autowired;
811
import org.springframework.stereotype.Service;
912

@@ -36,4 +39,23 @@ public HashMap<UUID, DancerDto> getDancerMap(DancerIdsDto dancerIdsDto) {
3639

3740
return dancers;
3841
}
42+
43+
public List<PublicProfileDto> getDancersList(AuthenticatedUser authenticatedUser, Gender gender, int range) {
44+
45+
Dancer dancer = loadByUserId(authenticatedUser.getUserId());
46+
Double longitudeRange = (double)range/112;
47+
Double latitudeRange = range/75.78;
48+
double upperLatitude = dancer.getLatitude() + latitudeRange;
49+
double lowerLatitude = dancer.getLatitude() - latitudeRange;
50+
double upperLongitude = dancer.getLongitude() + longitudeRange;
51+
double lowerLongitude = dancer.getLongitude() - longitudeRange;
52+
53+
List<Dancer> resultList = dancerRepository.findFirst500ByGenderAndLongitudeBetweenAndLatitudeBetween(
54+
gender, lowerLongitude, upperLongitude, lowerLatitude, upperLatitude);
55+
56+
return resultList.stream()
57+
.map(PublicProfileDto::of)
58+
.filter(d -> d.getId() != dancer.getId())
59+
.toList();
60+
}
3961
}

src/main/java/net/dancier/dancer/recommendation/RecommendationService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package net.dancier.dancer.recommendation;
22

33
import lombok.RequiredArgsConstructor;
4-
import net.dancier.dancer.core.DancerRepository;
4+
import net.dancier.dancer.dancers.DancerRepository;
55
import net.dancier.dancer.core.model.Dancer;
66
import net.dancier.dancer.recommendation.model.BaseRecommendation;
77
import net.dancier.dancer.recommendation.model.RecommendationWrapper;

src/main/java/net/dancier/dancer/security/CustomUserDetailsServiceImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import lombok.RequiredArgsConstructor;
55
import net.dancier.dancer.authentication.model.User;
66
import net.dancier.dancer.authentication.repository.UserRepository;
7-
import net.dancier.dancer.core.DancerRepository;
7+
import net.dancier.dancer.dancers.DancerRepository;
88
import net.dancier.dancer.core.model.Dancer;
99
import org.springframework.security.core.userdetails.UsernameNotFoundException;
1010
import org.springframework.stereotype.Service;

src/test/java/net/dancier/dancer/chat/ChatControllerTest.java

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,21 +4,17 @@
44
import net.dancier.dancer.AbstractPostgreSQLEnabledTest;
55
import net.dancier.dancer.chat.client.ChatServiceClient;
66
import net.dancier.dancer.chat.dto.*;
7-
import net.dancier.dancer.core.DancerRepository;
7+
import net.dancier.dancer.dancers.DancerRepository;
88
import org.junit.jupiter.api.BeforeEach;
99
import org.junit.jupiter.api.DisplayName;
1010
import org.junit.jupiter.api.Nested;
1111
import org.junit.jupiter.api.Test;
1212
import org.springframework.beans.factory.annotation.Autowired;
1313
import org.springframework.boot.test.mock.mockito.MockBean;
14-
import org.springframework.http.HttpHeaders;
15-
import org.springframework.http.HttpStatus;
1614
import org.springframework.http.MediaType;
17-
import org.springframework.http.ResponseEntity;
1815
import org.springframework.security.test.context.support.WithUserDetails;
1916
import org.springframework.test.web.servlet.ResultActions;
2017

21-
import java.util.Arrays;
2218
import java.util.List;
2319
import java.util.Optional;
2420
import java.util.UUID;
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package net.dancier.dancer.dancers;
2+
3+
import net.dancier.dancer.AbstractPostgreSQLEnabledTest;
4+
import org.junit.jupiter.api.Test;
5+
import org.springframework.security.test.context.support.WithUserDetails;
6+
import org.springframework.test.context.jdbc.Sql;
7+
import org.springframework.test.web.servlet.ResultActions;
8+
import org.springframework.util.MultiValueMap;
9+
10+
import java.util.UUID;
11+
12+
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
13+
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
14+
15+
public class DancerControllerTest extends AbstractPostgreSQLEnabledTest {
16+
17+
18+
UUID userId = UUID.fromString("55bbf334-6649-11ed-8f65-5b299f0e161f");
19+
20+
@Test
21+
@WithUserDetails("user-with-a-profile@dancier.net")
22+
void getDancersShouldNotReturnOwnProfile() throws Exception {
23+
24+
ResultActions result = mockMvc
25+
.perform(get("/dancers")
26+
.param("range", "20")
27+
.param("gender", "MALE")
28+
)
29+
.andExpect(status().isOk());
30+
31+
}
32+
}

src/test/java/net/dancier/dancer/recommendation/EndToEndRecommendationTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package net.dancier.dancer.recommendation;
22

33
import net.dancier.dancer.AbstractPostgreSQLEnabledTest;
4-
import net.dancier.dancer.core.DancerRepository;
4+
import net.dancier.dancer.dancers.DancerRepository;
55
import net.dancier.dancer.core.model.Dancer;
66
import net.dancier.dancer.recommendation.dto.RecommendationDto;
77
import org.junit.jupiter.api.BeforeEach;

0 commit comments

Comments
 (0)