diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e43b0f9 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.DS_Store diff --git a/server/gradlew b/server/gradlew old mode 100644 new mode 100755 diff --git a/server/src/main/java/com/usatiuk/tjv/y/server/controller/PersonController.java b/server/src/main/java/com/usatiuk/tjv/y/server/controller/PersonController.java index 0621393..4d8de4c 100644 --- a/server/src/main/java/com/usatiuk/tjv/y/server/controller/PersonController.java +++ b/server/src/main/java/com/usatiuk/tjv/y/server/controller/PersonController.java @@ -12,7 +12,9 @@ import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.*; import org.springframework.web.server.ResponseStatusException; +import java.security.Principal; import java.util.Optional; +import java.util.stream.Stream; @RestController @RequestMapping(value = "/person", produces = MediaType.APPLICATION_JSON_VALUE) @@ -44,4 +46,14 @@ public class PersonController { return PersonMapper.makeDto(found.get()); } + @GetMapping(path = "/followers") + public Stream getFollowers(Principal principal) throws UserNotFoundException { + return personService.getFollowers(principal.getName()).stream().map(PersonMapper::makeDto); + } + + @GetMapping(path = "/following") + public Stream getFollowing(Principal principal) throws UserNotFoundException { + return personService.getFollowing(principal.getName()).stream().map(PersonMapper::makeDto); + } + } diff --git a/server/src/main/java/com/usatiuk/tjv/y/server/service/PersonService.java b/server/src/main/java/com/usatiuk/tjv/y/server/service/PersonService.java index 73ed610..78a0abe 100644 --- a/server/src/main/java/com/usatiuk/tjv/y/server/service/PersonService.java +++ b/server/src/main/java/com/usatiuk/tjv/y/server/service/PersonService.java @@ -2,7 +2,9 @@ package com.usatiuk.tjv.y.server.service; import com.usatiuk.tjv.y.server.entity.Person; import com.usatiuk.tjv.y.server.service.exceptions.UserAlreadyExistsException; +import com.usatiuk.tjv.y.server.service.exceptions.UserNotFoundException; +import java.util.Collection; import java.util.Optional; public interface PersonService extends CrudService { @@ -11,4 +13,8 @@ public interface PersonService extends CrudService { Optional login(String username, String password); Optional readByUsername(String username); + + Collection getFollowers(String uuid) throws UserNotFoundException; + + Collection getFollowing(String uuid) throws UserNotFoundException; } diff --git a/server/src/main/java/com/usatiuk/tjv/y/server/service/PersonServiceImpl.java b/server/src/main/java/com/usatiuk/tjv/y/server/service/PersonServiceImpl.java index 254bc6d..297b693 100644 --- a/server/src/main/java/com/usatiuk/tjv/y/server/service/PersonServiceImpl.java +++ b/server/src/main/java/com/usatiuk/tjv/y/server/service/PersonServiceImpl.java @@ -8,6 +8,7 @@ import org.springframework.data.repository.CrudRepository; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Service; +import java.util.Collection; import java.util.Optional; @Service @@ -48,4 +49,14 @@ public class PersonServiceImpl extends CrudServiceImpl implement public Optional readByUsername(String username) { return personRepository.findByUsername(username); } + + @Override + public Collection getFollowers(String uuid) throws UserNotFoundException { + return personRepository.findById(uuid).orElseThrow(UserNotFoundException::new).getFollowers(); + } + + @Override + public Collection getFollowing(String uuid) throws UserNotFoundException { + return personRepository.findById(uuid).orElseThrow(UserNotFoundException::new).getFollowing(); + } } diff --git a/server/src/test/java/com/usatiuk/tjv/y/server/controller/DemoDataDbTest.java b/server/src/test/java/com/usatiuk/tjv/y/server/controller/DemoDataDbTest.java index c86c678..22fd717 100644 --- a/server/src/test/java/com/usatiuk/tjv/y/server/controller/DemoDataDbTest.java +++ b/server/src/test/java/com/usatiuk/tjv/y/server/controller/DemoDataDbTest.java @@ -20,6 +20,7 @@ import org.springframework.test.context.transaction.TestTransaction; import org.springframework.test.jdbc.JdbcTestUtils; import java.util.Collections; +import java.util.List; @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) public abstract class DemoDataDbTest { @@ -77,7 +78,8 @@ public abstract class DemoDataDbTest { new Person() .setUsername("person3") .setFullName("Person 3") - .setPassword(passwordEncoder.encode(person3Password))); + .setPassword(passwordEncoder.encode(person3Password)) + .setFollowing(List.of(person2))); person3Auth = new TokenResponse(tokenService.generateToken(person3.getUuid())); post1 = postRepository.save(new Post().setAuthor(person1).setText("post 1")); @@ -87,7 +89,7 @@ public abstract class DemoDataDbTest { @AfterEach void erase() { assert !TestTransaction.isActive(); - JdbcTestUtils.deleteFromTables(jdbcTemplate, "post", "person"); + JdbcTestUtils.deleteFromTables(jdbcTemplate, "user_follows", "post", "person"); } } diff --git a/server/src/test/java/com/usatiuk/tjv/y/server/controller/PersonControllerTest.java b/server/src/test/java/com/usatiuk/tjv/y/server/controller/PersonControllerTest.java index 91470c3..85bd54a 100644 --- a/server/src/test/java/com/usatiuk/tjv/y/server/controller/PersonControllerTest.java +++ b/server/src/test/java/com/usatiuk/tjv/y/server/controller/PersonControllerTest.java @@ -46,4 +46,35 @@ public class PersonControllerTest extends DemoDataDbTest { Assertions.assertEquals(personToResponse.fullName(), person1.getFullName()); } + @Test + void shouldGetFollowers() { + var response = restTemplate.exchange(addr + "/person/followers", + HttpMethod.GET, new HttpEntity<>(createAuthHeaders(person2Auth)), PersonTo[].class); + + Assertions.assertNotNull(response); + Assertions.assertEquals(HttpStatus.OK, response.getStatusCode()); + + PersonTo[] personToResponse = response.getBody(); + Assertions.assertNotNull(personToResponse); + + Assertions.assertEquals(1, personToResponse.length); + Assertions.assertEquals(personToResponse[0].fullName(), person3.getFullName()); + } + + @Test + void shouldGetFollowees() { + var response = restTemplate.exchange(addr + "/person/following", + HttpMethod.GET, new HttpEntity<>(createAuthHeaders(person3Auth)), PersonTo[].class); + + Assertions.assertNotNull(response); + Assertions.assertEquals(HttpStatus.OK, response.getStatusCode()); + + PersonTo[] personToResponse = response.getBody(); + Assertions.assertNotNull(personToResponse); + + Assertions.assertEquals(1, personToResponse.length); + Assertions.assertEquals(personToResponse[0].fullName(), person2.getFullName()); + + } + }