-
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.
[feat] redis 의존성 추가 및 유저의 대학교 설정 정보 저장 및 조회 api 생성 (#40)
* [dependency] add redis dependency * [feat] create redis hash * [feat] create errorcode for user's university update * [feat] create redis repository for UserUniversity * [feat] create helper class for UserUniversity * [feat] create post user's university api * [feat] create get user's university api
- Loading branch information
Showing
13 changed files
with
234 additions
and
0 deletions.
There are no files selected for viewing
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
34 changes: 34 additions & 0 deletions
34
src/main/java/org/hankki/hankkiserver/api/user/controller/UserController.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 org.hankki.hankkiserver.api.user.controller; | ||
|
||
import jakarta.validation.Valid; | ||
import lombok.RequiredArgsConstructor; | ||
import org.hankki.hankkiserver.api.dto.HankkiResponse; | ||
import org.hankki.hankkiserver.api.user.controller.request.UserUniversityPostRequest; | ||
import org.hankki.hankkiserver.api.user.service.UserCommandService; | ||
import org.hankki.hankkiserver.api.user.service.UserQueryService; | ||
import org.hankki.hankkiserver.api.user.service.command.UserUniversityPostCommand; | ||
import org.hankki.hankkiserver.api.user.service.response.UserUniversityFindResponse; | ||
import org.hankki.hankkiserver.auth.UserId; | ||
import org.hankki.hankkiserver.common.code.CommonSuccessCode; | ||
import org.springframework.web.bind.annotation.*; | ||
|
||
@RestController | ||
@RequestMapping("/api/v1") | ||
@RequiredArgsConstructor | ||
public class UserController { | ||
|
||
private final UserCommandService userCommandService; | ||
private final UserQueryService userQueryService; | ||
|
||
@PostMapping("/users/me/university") | ||
public HankkiResponse<Void> postUserUniversity(@UserId final Long userId, | ||
@Valid @RequestBody final UserUniversityPostRequest request) { | ||
userCommandService.saveUserUniversity(new UserUniversityPostCommand(userId, request)); | ||
return HankkiResponse.success(CommonSuccessCode.CREATED); | ||
} | ||
|
||
@GetMapping("/users/me/university") | ||
public HankkiResponse<UserUniversityFindResponse> findUserUniversity(@UserId final Long userId) { | ||
return HankkiResponse.success(CommonSuccessCode.OK, userQueryService.findUserUniversity(userId)); | ||
} | ||
} |
7 changes: 7 additions & 0 deletions
7
...n/java/org/hankki/hankkiserver/api/user/controller/request/UserUniversityPostRequest.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,7 @@ | ||
package org.hankki.hankkiserver.api.user.controller.request; | ||
|
||
import jakarta.validation.constraints.NotBlank; | ||
import jakarta.validation.constraints.Size; | ||
|
||
public record UserUniversityPostRequest(long universityId, @NotBlank @Size(max = 5) String name, double longitude, double latitude) { | ||
} |
22 changes: 22 additions & 0 deletions
22
src/main/java/org/hankki/hankkiserver/api/user/service/UserCommandService.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,22 @@ | ||
package org.hankki.hankkiserver.api.user.service; | ||
|
||
import lombok.RequiredArgsConstructor; | ||
import org.hankki.hankkiserver.api.user.service.command.UserUniversityPostCommand; | ||
import org.springframework.stereotype.Service; | ||
import org.springframework.transaction.annotation.Transactional; | ||
|
||
@Service | ||
@RequiredArgsConstructor | ||
public class UserCommandService { | ||
|
||
private final UserUniversityUpdater userUniversityUpdater; | ||
private final UserUniversityDeleter userUniversityDeleter; | ||
private final UserUniversityFinder userUniversityFinder; | ||
|
||
@Transactional | ||
public void saveUserUniversity(UserUniversityPostCommand userUniversityPostCommand) { | ||
userUniversityFinder.findByUserId(userUniversityPostCommand.userId()) | ||
.ifPresent(userUniversity -> userUniversityDeleter.deleteById(userUniversity.getId())); | ||
userUniversityUpdater.save(userUniversityPostCommand.toEntity()); | ||
} | ||
} |
21 changes: 21 additions & 0 deletions
21
src/main/java/org/hankki/hankkiserver/api/user/service/UserQueryService.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,21 @@ | ||
package org.hankki.hankkiserver.api.user.service; | ||
|
||
import lombok.RequiredArgsConstructor; | ||
import org.hankki.hankkiserver.api.user.service.response.UserUniversityFindResponse; | ||
import org.hankki.hankkiserver.common.code.UserUniversityErrorCode; | ||
import org.hankki.hankkiserver.common.exception.NotFoundException; | ||
import org.springframework.stereotype.Service; | ||
import org.springframework.transaction.annotation.Transactional; | ||
|
||
@Service | ||
@RequiredArgsConstructor | ||
public class UserQueryService { | ||
|
||
private final UserUniversityFinder userUniversityFinder; | ||
|
||
@Transactional(readOnly = true) | ||
public UserUniversityFindResponse findUserUniversity(Long userId) { | ||
return UserUniversityFindResponse.of(userUniversityFinder.findByUserId(userId) | ||
.orElseThrow(() -> new NotFoundException(UserUniversityErrorCode.USER_UNIVERSITY_NOT_FOUND))); | ||
} | ||
} |
20 changes: 20 additions & 0 deletions
20
src/main/java/org/hankki/hankkiserver/api/user/service/UserUniversityDeleter.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,20 @@ | ||
package org.hankki.hankkiserver.api.user.service; | ||
|
||
import lombok.RequiredArgsConstructor; | ||
import org.hankki.hankkiserver.domain.user.repository.UserUniversityRepository; | ||
import org.springframework.stereotype.Component; | ||
|
||
@Component | ||
@RequiredArgsConstructor | ||
public class UserUniversityDeleter { | ||
|
||
private final UserUniversityRepository userUniversityRepository; | ||
|
||
protected void deleteById(Long id) { | ||
userUniversityRepository.deleteById(id); | ||
} | ||
|
||
protected void deleteByUserId(Long userId) { | ||
userUniversityRepository.deleteByUserId(userId); | ||
} | ||
} |
19 changes: 19 additions & 0 deletions
19
src/main/java/org/hankki/hankkiserver/api/user/service/UserUniversityFinder.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,19 @@ | ||
package org.hankki.hankkiserver.api.user.service; | ||
|
||
import lombok.RequiredArgsConstructor; | ||
import org.hankki.hankkiserver.domain.user.model.UserUniversity; | ||
import org.hankki.hankkiserver.domain.user.repository.UserUniversityRepository; | ||
import org.springframework.stereotype.Component; | ||
|
||
import java.util.Optional; | ||
|
||
@Component | ||
@RequiredArgsConstructor | ||
public class UserUniversityFinder { | ||
|
||
private final UserUniversityRepository userUniversityRepository; | ||
|
||
public Optional<UserUniversity> findByUserId(Long userId) { | ||
return userUniversityRepository.findByUserId(userId); | ||
} | ||
} |
17 changes: 17 additions & 0 deletions
17
src/main/java/org/hankki/hankkiserver/api/user/service/UserUniversityUpdater.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,17 @@ | ||
package org.hankki.hankkiserver.api.user.service; | ||
|
||
import lombok.RequiredArgsConstructor; | ||
import org.hankki.hankkiserver.domain.user.model.UserUniversity; | ||
import org.hankki.hankkiserver.domain.user.repository.UserUniversityRepository; | ||
import org.springframework.stereotype.Component; | ||
|
||
@Component | ||
@RequiredArgsConstructor | ||
public class UserUniversityUpdater { | ||
|
||
private final UserUniversityRepository userUniversityRepository; | ||
|
||
protected void save(UserUniversity userUniversity) { | ||
userUniversityRepository.save(userUniversity).getUserId(); | ||
} | ||
} |
22 changes: 22 additions & 0 deletions
22
...main/java/org/hankki/hankkiserver/api/user/service/command/UserUniversityPostCommand.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,22 @@ | ||
package org.hankki.hankkiserver.api.user.service.command; | ||
|
||
import org.hankki.hankkiserver.api.user.controller.request.UserUniversityPostRequest; | ||
import org.hankki.hankkiserver.domain.user.model.UserUniversity; | ||
|
||
public record UserUniversityPostCommand(Long userId, Long universityId, String universityName, | ||
double longitude, double latitude) { | ||
public UserUniversityPostCommand(Long userId, UserUniversityPostRequest request) { | ||
this(userId, request.universityId(), request.name(), request.longitude(), request.latitude()); | ||
} | ||
|
||
public UserUniversity toEntity() { | ||
return UserUniversity.builder() | ||
.userId(userId) | ||
.universityId(universityId) | ||
.universityName(universityName) | ||
.longitude(longitude) | ||
.latitude(latitude) | ||
.build(); | ||
} | ||
} | ||
|
13 changes: 13 additions & 0 deletions
13
...in/java/org/hankki/hankkiserver/api/user/service/response/UserUniversityFindResponse.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,13 @@ | ||
package org.hankki.hankkiserver.api.user.service.response; | ||
|
||
import org.hankki.hankkiserver.domain.user.model.UserUniversity; | ||
|
||
public record UserUniversityFindResponse(long id, | ||
String name, | ||
double longitude, | ||
double latitude) { | ||
public static UserUniversityFindResponse of (UserUniversity userUniversity) { | ||
return new UserUniversityFindResponse(userUniversity.getUniversityId(), userUniversity.getUniversityName(), | ||
userUniversity.getLongitude(), userUniversity.getLatitude()); | ||
} | ||
} |
14 changes: 14 additions & 0 deletions
14
src/main/java/org/hankki/hankkiserver/common/code/UserUniversityErrorCode.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 org.hankki.hankkiserver.common.code; | ||
|
||
import lombok.Getter; | ||
import lombok.RequiredArgsConstructor; | ||
import org.springframework.http.HttpStatus; | ||
|
||
@Getter | ||
@RequiredArgsConstructor | ||
public enum UserUniversityErrorCode implements ErrorCode { | ||
USER_UNIVERSITY_NOT_FOUND(HttpStatus.NOT_FOUND, "대학 정보를 찾을 수 없습니다."); | ||
|
||
private final HttpStatus httpStatus; | ||
private final String message; | ||
} |
30 changes: 30 additions & 0 deletions
30
src/main/java/org/hankki/hankkiserver/domain/user/model/UserUniversity.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 org.hankki.hankkiserver.domain.user.model; | ||
|
||
import jakarta.persistence.Id; | ||
import lombok.AllArgsConstructor; | ||
import lombok.Builder; | ||
import lombok.Getter; | ||
import org.springframework.data.redis.core.RedisHash; | ||
import org.springframework.data.redis.core.index.Indexed; | ||
|
||
@RedisHash(value = "UserUniversity", timeToLive = 60 * 60 * 24 * 1000L * 30) | ||
@Builder | ||
@AllArgsConstructor | ||
@Getter | ||
public class UserUniversity { | ||
|
||
@Id | ||
private Long id; | ||
|
||
@Indexed | ||
private Long userId; | ||
|
||
private Long universityId; | ||
|
||
private String universityName; | ||
|
||
private Double longitude; | ||
|
||
private Double latitude; | ||
|
||
} |
12 changes: 12 additions & 0 deletions
12
src/main/java/org/hankki/hankkiserver/domain/user/repository/UserUniversityRepository.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,12 @@ | ||
package org.hankki.hankkiserver.domain.user.repository; | ||
|
||
import org.hankki.hankkiserver.domain.user.model.UserUniversity; | ||
import org.springframework.data.repository.CrudRepository; | ||
|
||
import java.util.Optional; | ||
|
||
public interface UserUniversityRepository extends CrudRepository<UserUniversity, Long> { | ||
Optional<UserUniversity> findByUserId(Long userId); | ||
void deleteById(Long id); | ||
void deleteByUserId(Long userId); | ||
} |