-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Create functionality for user reviews
- Loading branch information
Showing
17 changed files
with
372 additions
and
43 deletions.
There are no files selected for viewing
34 changes: 34 additions & 0 deletions
34
src/main/java/ru/nsu/fit/directors/userservice/controller/ReviewController.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
package ru.nsu.fit.directors.userservice.controller; | ||
|
||
import java.util.List; | ||
|
||
import javax.annotation.ParametersAreNonnullByDefault; | ||
|
||
import jakarta.validation.Valid; | ||
import lombok.RequiredArgsConstructor; | ||
import org.springframework.web.bind.annotation.GetMapping; | ||
import org.springframework.web.bind.annotation.PostMapping; | ||
import org.springframework.web.bind.annotation.RequestBody; | ||
import org.springframework.web.bind.annotation.RequestMapping; | ||
import org.springframework.web.bind.annotation.RestController; | ||
import ru.nsu.fit.directors.userservice.dto.request.ReviewCreationDto; | ||
import ru.nsu.fit.directors.userservice.dto.response.ResponseReviewDto; | ||
import ru.nsu.fit.directors.userservice.facade.ReviewFacade; | ||
|
||
@RestController | ||
@RequestMapping(value = "/review") | ||
@RequiredArgsConstructor | ||
@ParametersAreNonnullByDefault | ||
public class ReviewController { | ||
private final ReviewFacade reviewFacade; | ||
|
||
@PostMapping | ||
public void create(@RequestBody @Valid ReviewCreationDto reviewCreationDto) { | ||
reviewFacade.createReview(reviewCreationDto); | ||
} | ||
|
||
@GetMapping | ||
public List<ResponseReviewDto> get() { | ||
return reviewFacade.getReviews(); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
4 changes: 4 additions & 0 deletions
4
src/main/java/ru/nsu/fit/directors/userservice/dto/request/ReviewCreationDto.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
package ru.nsu.fit.directors.userservice.dto.request; | ||
|
||
public record ReviewCreationDto() { | ||
} |
11 changes: 11 additions & 0 deletions
11
src/main/java/ru/nsu/fit/directors/userservice/dto/response/ResponseReviewDto.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
package ru.nsu.fit.directors.userservice.dto.response; | ||
|
||
import java.time.LocalDate; | ||
|
||
public record ResponseReviewDto( | ||
String username, | ||
String text, | ||
Integer score, | ||
LocalDate date | ||
) { | ||
} |
27 changes: 27 additions & 0 deletions
27
src/main/java/ru/nsu/fit/directors/userservice/facade/ReviewFacade.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
package ru.nsu.fit.directors.userservice.facade; | ||
|
||
import java.util.List; | ||
|
||
import javax.annotation.Nonnull; | ||
import javax.annotation.ParametersAreNonnullByDefault; | ||
|
||
import ru.nsu.fit.directors.userservice.dto.request.ReviewCreationDto; | ||
import ru.nsu.fit.directors.userservice.dto.response.ResponseReviewDto; | ||
|
||
@ParametersAreNonnullByDefault | ||
public interface ReviewFacade { | ||
/** | ||
* Создать отзыв на заведение. | ||
* | ||
* @param reviewCreationDto данные об отзыве | ||
*/ | ||
void createReview(ReviewCreationDto reviewCreationDto); | ||
|
||
/** | ||
* Получить отзывы активного пользователя. | ||
* | ||
* @return список отзывов активного пользователя | ||
*/ | ||
@Nonnull | ||
List<ResponseReviewDto> getReviews(); | ||
} |
39 changes: 39 additions & 0 deletions
39
src/main/java/ru/nsu/fit/directors/userservice/facade/ReviewFacadeImpl.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,39 @@ | ||
package ru.nsu.fit.directors.userservice.facade; | ||
|
||
import java.util.List; | ||
|
||
import javax.annotation.Nonnull; | ||
import javax.annotation.ParametersAreNonnullByDefault; | ||
|
||
import lombok.RequiredArgsConstructor; | ||
import org.springframework.stereotype.Service; | ||
import ru.nsu.fit.directors.userservice.dto.request.ReviewCreationDto; | ||
import ru.nsu.fit.directors.userservice.dto.response.ResponseReviewDto; | ||
import ru.nsu.fit.directors.userservice.model.UserReview; | ||
import ru.nsu.fit.directors.userservice.service.EstablishmentService; | ||
import ru.nsu.fit.directors.userservice.service.ReviewService; | ||
import ru.nsu.fit.directors.userservice.service.UserService; | ||
|
||
@Service | ||
@RequiredArgsConstructor | ||
@ParametersAreNonnullByDefault | ||
public class ReviewFacadeImpl implements ReviewFacade { | ||
private final ReviewService reviewService; | ||
private final UserService userService; | ||
private final EstablishmentService establishmentService; | ||
|
||
@Override | ||
public void createReview(ReviewCreationDto reviewCreationDto) { | ||
reviewService.save(new UserReview().setUser(userService.getLoggedInUser())); | ||
} | ||
|
||
@Nonnull | ||
@Override | ||
public List<ResponseReviewDto> getReviews() { | ||
List<Long> reviewExternalIds = reviewService.getUserReviews(userService.getLoggedInUser()).stream() | ||
.map(UserReview::getExternalId) | ||
.toList(); | ||
return establishmentService.getReviewsByExternalIds(reviewExternalIds); | ||
} | ||
|
||
} |
25 changes: 25 additions & 0 deletions
25
src/main/java/ru/nsu/fit/directors/userservice/facade/UserFacade.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
package ru.nsu.fit.directors.userservice.facade; | ||
|
||
import javax.annotation.Nonnull; | ||
import javax.annotation.ParametersAreNonnullByDefault; | ||
|
||
import ru.nsu.fit.directors.userservice.dto.request.RequestUserDto; | ||
import ru.nsu.fit.directors.userservice.dto.response.ResponseUserDto; | ||
|
||
@ParametersAreNonnullByDefault | ||
public interface UserFacade { | ||
/** | ||
* Получить активного пользователя. | ||
* | ||
* @return данные об активном пользователе. | ||
*/ | ||
@Nonnull | ||
ResponseUserDto getLoggedInUser(); | ||
|
||
/** | ||
* Зарегестрировать пользователя. | ||
* | ||
* @param requestUserDto данные о пользователе | ||
*/ | ||
void registerUser(RequestUserDto requestUserDto); | ||
} |
43 changes: 43 additions & 0 deletions
43
src/main/java/ru/nsu/fit/directors/userservice/facade/UserFacadeImpl.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
package ru.nsu.fit.directors.userservice.facade; | ||
|
||
import javax.annotation.Nonnull; | ||
import javax.annotation.ParametersAreNonnullByDefault; | ||
|
||
import lombok.RequiredArgsConstructor; | ||
import lombok.extern.slf4j.Slf4j; | ||
import org.springframework.security.crypto.password.PasswordEncoder; | ||
import org.springframework.stereotype.Service; | ||
import ru.nsu.fit.directors.userservice.dto.request.RequestUserDto; | ||
import ru.nsu.fit.directors.userservice.dto.response.ResponseUserDto; | ||
import ru.nsu.fit.directors.userservice.mapper.UserMapper; | ||
import ru.nsu.fit.directors.userservice.model.User; | ||
import ru.nsu.fit.directors.userservice.service.UserService; | ||
|
||
@Slf4j | ||
@Service | ||
@RequiredArgsConstructor | ||
@ParametersAreNonnullByDefault | ||
public class UserFacadeImpl implements UserFacade { | ||
private final UserService userService; | ||
private final UserMapper userMapper; | ||
private final PasswordEncoder passwordEncoder; | ||
|
||
@Nonnull | ||
@Override | ||
public ResponseUserDto getLoggedInUser() { | ||
User user = userService.getLoggedInUser(); | ||
return ResponseUserDto.builder() | ||
.id(user.getId()) | ||
.phoneNumber(user.getPhoneNumber()) | ||
.username(user.getUsername()) | ||
.build(); | ||
} | ||
|
||
@Override | ||
public void registerUser(RequestUserDto requestUserDto) { | ||
log.info("Registering user with"); | ||
User user = userMapper.dtoToModel(requestUserDto); | ||
user.setPassword(passwordEncoder.encode(user.getPassword())); | ||
userService.save(user); | ||
} | ||
} |
30 changes: 30 additions & 0 deletions
30
src/main/java/ru/nsu/fit/directors/userservice/model/UserReview.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
package ru.nsu.fit.directors.userservice.model; | ||
|
||
import jakarta.persistence.Entity; | ||
import jakarta.persistence.FetchType; | ||
import jakarta.persistence.GeneratedValue; | ||
import jakarta.persistence.GenerationType; | ||
import jakarta.persistence.Id; | ||
import jakarta.persistence.JoinColumn; | ||
import jakarta.persistence.ManyToOne; | ||
import jakarta.persistence.Table; | ||
import lombok.Getter; | ||
import lombok.Setter; | ||
import lombok.ToString; | ||
import lombok.experimental.Accessors; | ||
|
||
@Table("user_review") | ||
@Entity | ||
@Getter | ||
@Setter | ||
@Accessors(chain = true) | ||
@ToString | ||
public class UserReview { | ||
@Id | ||
@GeneratedValue(strategy = GenerationType.IDENTITY) | ||
private Long id; | ||
private Long externalId; | ||
@ManyToOne(fetch = FetchType.LAZY) | ||
@JoinColumn(name = "user_id") | ||
private User user; | ||
} |
14 changes: 14 additions & 0 deletions
14
src/main/java/ru/nsu/fit/directors/userservice/repository/ReviewRepository.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
package ru.nsu.fit.directors.userservice.repository; | ||
|
||
import java.util.List; | ||
|
||
import javax.annotation.Nonnull; | ||
|
||
import org.springframework.data.jpa.repository.JpaRepository; | ||
import ru.nsu.fit.directors.userservice.model.User; | ||
import ru.nsu.fit.directors.userservice.model.UserReview; | ||
|
||
public interface ReviewRepository extends JpaRepository<UserReview, Long> { | ||
@Nonnull | ||
List<UserReview> findAllByUser(User user); | ||
} |
23 changes: 23 additions & 0 deletions
23
src/main/java/ru/nsu/fit/directors/userservice/service/EstablishmentService.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,8 +1,31 @@ | ||
package ru.nsu.fit.directors.userservice.service; | ||
|
||
import java.util.List; | ||
|
||
import javax.annotation.Nonnull; | ||
import javax.annotation.ParametersAreNonnullByDefault; | ||
|
||
import ru.nsu.fit.directors.userservice.dto.request.RequestGetEstablishmentParameters; | ||
import ru.nsu.fit.directors.userservice.dto.response.EstablishmentListDto; | ||
import ru.nsu.fit.directors.userservice.dto.response.ResponseReviewDto; | ||
|
||
@ParametersAreNonnullByDefault | ||
public interface EstablishmentService { | ||
/** | ||
* Получить заведение исходя из параметров. | ||
* | ||
* @param parameters параметры и фильтры | ||
* @return список заведений, удовлетворяющих фильтрам | ||
*/ | ||
@Nonnull | ||
EstablishmentListDto getEstablishmentByParams(RequestGetEstablishmentParameters parameters); | ||
|
||
/** | ||
* Получить отзывы по внешним идентфикаторам. | ||
* | ||
* @param externalIds внешние идентификаторы отзывов | ||
* @return список отзывов | ||
*/ | ||
@Nonnull | ||
List<ResponseReviewDto> getReviewsByExternalIds(List<Long> externalIds); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
28 changes: 28 additions & 0 deletions
28
src/main/java/ru/nsu/fit/directors/userservice/service/ReviewService.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
package ru.nsu.fit.directors.userservice.service; | ||
|
||
import java.util.List; | ||
|
||
import javax.annotation.Nonnull; | ||
import javax.annotation.ParametersAreNonnullByDefault; | ||
|
||
import ru.nsu.fit.directors.userservice.model.User; | ||
import ru.nsu.fit.directors.userservice.model.UserReview; | ||
|
||
@ParametersAreNonnullByDefault | ||
public interface ReviewService { | ||
/** | ||
* Сохранить отзыв. | ||
* | ||
* @param userReview пользовательский отзыв | ||
*/ | ||
void save(UserReview userReview); | ||
|
||
/** | ||
* Получить пользовательские отзывы. | ||
* | ||
* @param user пользователь | ||
* @return список отзывов | ||
*/ | ||
@Nonnull | ||
List<UserReview> getUserReviews(User user); | ||
} |
Oops, something went wrong.