Skip to content

Commit 8bdb57c

Browse files
authored
merge: Pull request #18 from feat/user/1
Feat/user/1 Pull Request
2 parents 97e40ea + 1d6baca commit 8bdb57c

File tree

14 files changed

+237
-70
lines changed

14 files changed

+237
-70
lines changed

build.gradle.kts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,12 @@ dependencies {
6060
annotationProcessor("org.projectlombok:lombok:1.18.30")
6161

6262
// Test (Junit5)
63-
testImplementation("org.jetbrains.kotlin:kotlin-test-junit5")
64-
testRuntimeOnly("org.junit.platform:junit-platform-launcher")
63+
testImplementation("org.springframework.boot:spring-boot-starter-test")
64+
testImplementation("org.mockito:mockito-core:4.0.0")
65+
testImplementation("org.mockito:mockito-junit-jupiter:4.0.0")
66+
testImplementation("org.mockito:mockito-inline:4.7.0")
67+
testImplementation("org.junit.jupiter:junit-jupiter-api")
68+
testImplementation("org.junit.jupiter:junit-jupiter-engine")
6569

6670
// Json (Jackson)
6771
implementation("com.fasterxml.jackson.module:jackson-module-kotlin")

src/main/java/org/dfbf/soundlink/domain/blocklist/entity/Blocklist.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,11 @@ public class Blocklist {
3030
private User blockedUser;
3131

3232
@CreationTimestamp
33+
@Column(name = "created_at")
3334
private Timestamp createdAt;
3435

3536
@UpdateTimestamp
37+
@Column(name = "updated_at")
3638
private Timestamp updatedAt;
3739

3840
@Builder

src/main/java/org/dfbf/soundlink/domain/emotionRecord/entity/EmotionRecord.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,25 +16,30 @@
1616
public class EmotionRecord {
1717
@Id
1818
@GeneratedValue(strategy = GenerationType.IDENTITY)
19+
@Column(name = "record_id")
1920
private Long recordId;
2021

2122
@ManyToOne
2223
@JoinColumn(name = "user_id")
2324
private User user;
2425

2526
@Enumerated(EnumType.STRING)
27+
@Column(name = "emotion")
2628
private Emotions emotion;
2729

2830
@ManyToOne
2931
@JoinColumn(name = "spotify_music_id")
3032
private SpotifyMusic spotifyMusic;
3133

34+
@Column(name = "comment")
3235
private String comment;
3336

3437
@CreationTimestamp
38+
@Column(name = "created_at")
3539
private Timestamp createdAt;
3640

3741
@UpdateTimestamp
42+
@Column(name = "updated_at")
3843
private Timestamp updatedAt;
3944

4045
@Builder

src/main/java/org/dfbf/soundlink/domain/emotionRecord/entity/SpotifyMusic.java

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import lombok.Builder;
66
import lombok.Getter;
77
import lombok.NoArgsConstructor;
8+
import org.dfbf.soundlink.domain.user.dto.request.UserUpdateDto;
89
import org.hibernate.annotations.CreationTimestamp;
910
import org.hibernate.annotations.UpdateTimestamp;
1011

@@ -17,14 +18,22 @@ public class SpotifyMusic {
1718
@Id
1819
private Long spotifyId;
1920

21+
@Column(name = "title")
2022
private String title;
23+
24+
@Column(name = "artist")
2125
private String artist;
26+
27+
@Column(name = "album_image")
2228
private String albumImage;
2329

2430
@CreationTimestamp
31+
@Column(name = "created_at")
2532
private Timestamp createdAt;
33+
2634
@UpdateTimestamp
27-
private Timestamp updateAt;
35+
@Column(name = "updated_at")
36+
private Timestamp updatedAt;
2837

2938
@Builder
3039
public SpotifyMusic (Long spotifyId, String title, String artist, String albumImage) {
@@ -33,4 +42,11 @@ public SpotifyMusic (Long spotifyId, String title, String artist, String albumIm
3342
this.artist = artist;
3443
this.albumImage = albumImage;
3544
}
45+
46+
public SpotifyMusic (UserUpdateDto userUpdateDto) {
47+
this.spotifyId = userUpdateDto.spotifyId();
48+
this.title = userUpdateDto.title();
49+
this.artist = userUpdateDto.artist();
50+
this.albumImage = userUpdateDto.albumImage();
51+
}
3652
}

src/main/java/org/dfbf/soundlink/domain/user/controller/UserController.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,12 @@ public ResponseResult checkNickName(@RequestParam String nickName){
3232
return userService.checkNickName(nickName);
3333
}
3434

35+
@GetMapping("/checkLoginId")
36+
@Operation(summary = "LoginId 중복 확인", description = "LoginId가 이미 사용중인지 확인.")
37+
public ResponseResult checkLoginiId(@RequestParam String loginiId){
38+
return userService.checkLoginiId(loginiId);
39+
}
40+
3541
@GetMapping
3642
@Operation(summary = "유저 조회", description = "유저 조회 API")
3743
public ResponseResult getUser(@AuthenticationPrincipal Long id) { return userService.getUser(id); }
@@ -50,5 +56,13 @@ public ResponseResult updateUser(@AuthenticationPrincipal Long id,@RequestBody U
5056
@Operation(summary = "마이 페이지", description = "마이 페이지 조회 API")
5157
public ResponseResult getMyPage(@AuthenticationPrincipal Long id) { return userService.getMyPage(id); }
5258

59+
@GetMapping("/profile")
60+
@Operation(summary = "타 유저 프로필 조회", description = "타 유저 프로필 조회 API")
61+
public ResponseResult getProfile(@RequestParam("tag") String tag) { return userService.getProfile(tag); }
5362

63+
@PostMapping("/login")
64+
@Operation(summary = "로그인", description = "로그인 API")
65+
public ResponseResult login(@RequestBody LoginReqDto loginReqDto, HttpServletResponse response) {
66+
return userService.login(loginReqDto, response);
67+
}
5468
}

src/main/java/org/dfbf/soundlink/domain/user/dto/response/UserGetDto.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ public record UserGetDto(
1212
) {
1313
public UserGetDto(User user) {
1414
this(
15-
user.getNickName(),
15+
user.getNickname(),
1616
user.getEmail(),
1717
user.getLoginId(),
1818
formatTimestamp(user.getCreatedAt())

src/main/java/org/dfbf/soundlink/domain/user/dto/response/UserMyPageDto.java

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,11 @@
88

99
@Getter
1010
public class UserMyPageDto {
11-
private final String email;
1211
private final String loginId;
1312
private final String nickname;
1413
private final ProfileMusic profileMusic;
15-
private List<EmotionRecordDto> emotionRecords;
1614

17-
public void setEmotionRecords(List<EmotionRecordDto> emotionRecords) { this.emotionRecords = emotionRecords; }
18-
19-
public UserMyPageDto(String email, String loginId, String nickname, ProfileMusic profileMusic) {
20-
this.email = email;
15+
public UserMyPageDto(String loginId, String nickname, ProfileMusic profileMusic) {
2116
this.loginId = loginId;
2217
this.nickname = nickname;
2318
this.profileMusic = profileMusic;

src/main/java/org/dfbf/soundlink/domain/user/entity/ProfileMusic.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
public class ProfileMusic {
1818
@Id
1919
@GeneratedValue(strategy = GenerationType.IDENTITY)
20+
@JoinColumn(name = "profile_music_id")
2021
private Long profileMusicId;
2122

2223
@OneToOne(cascade = CascadeType.REMOVE)
@@ -28,9 +29,12 @@ public class ProfileMusic {
2829
private SpotifyMusic spotifyMusic;
2930

3031
@CreationTimestamp
31-
private Timestamp createAt;
32+
@Column(name = "created_at")
33+
private Timestamp createdAt;
34+
3235
@UpdateTimestamp
33-
private Timestamp updateAt;
36+
@Column(name = "updated_at")
37+
private Timestamp updatedAt;
3438

3539
@Builder
3640
public ProfileMusic(User user, SpotifyMusic spotifyMusic) {

src/main/java/org/dfbf/soundlink/domain/user/entity/User.java

Lines changed: 14 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -22,38 +22,36 @@ public class User {
2222
@Column(name = "user_id")
2323
private Long userId;
2424

25-
@Column(unique = true)
26-
private String nickName;
25+
@Column(name = "nickname", unique = true)
26+
private String nickname;
2727

2828
@Enumerated(EnumType.STRING)
29+
@Column(name = "social_type")
2930
private SocialType socialType;
3031

31-
@Column(nullable = true)
32+
@Column(name = "social_id", nullable = true)
3233
private Long socialId;
3334

3435
@Column(name="login_id")
3536
private String loginId;
3637

38+
@Column(name="password")
3739
private String password;
38-
private String email;
39-
40-
@OneToMany(mappedBy = "user", cascade = CascadeType.REMOVE)
41-
private List<Blocklist> blocklist;
42-
43-
@OneToMany(mappedBy = "user", cascade = CascadeType.REMOVE)
44-
private List<EmotionRecord> emotionRecord;
4540

46-
@OneToOne(mappedBy = "user", cascade = CascadeType.REMOVE)
47-
private ProfileMusic profileMusic;
41+
@Column(name="email")
42+
private String email;
4843

4944
@CreationTimestamp
45+
@Column(name = "created_at")
5046
private Timestamp createdAt;
47+
5148
@UpdateTimestamp
52-
private Timestamp updateAt;
49+
@Column(name = "updated_at")
50+
private Timestamp updatedAt;
5351

5452
@Builder
5553
User(String nickName, Long socialId, SocialType socialType, String loginId, String password, String email) {
56-
this.nickName = nickName;
54+
this.nickname = nickName;
5755
this.socialId = socialId;
5856
this.socialType = socialType;
5957
this.loginId = loginId;
@@ -62,7 +60,7 @@ public class User {
6260
}
6361

6462
public void update(UserUpdateDto userUpdateDto, BCryptPasswordEncoder passwordEncoder) {
65-
this.nickName = userUpdateDto.nickName();
63+
this.nickname = userUpdateDto.nickName();
6664
this.loginId = userUpdateDto.loginId();
6765
this.password = passwordEncoder.encode(userUpdateDto.password());
6866
this.email = userUpdateDto.email();
@@ -82,6 +80,6 @@ public void update(UserUpdateDto userUpdateDto, BCryptPasswordEncoder passwordEn
8280
* CascadeType.REMOVE -> 부모 엔티티가 삭제될 때 자식 엔티티는 삭제
8381
* orphanRemoval = true -> 자식 엔티티가 부모와의 관계에서 제거될 때 삭제
8482
* 가끔 사용하지 않는 데이터가 DB에 남아있는 경우가 있는데, 이를 방지하기 위해 사용
85-
* 혹은 User쪽에 있는 리스트에서 제거할 경우, 양방향 매핑이기 떄문에 자식이 고아가 댐 -> 이를 위헤서 orphanRemoval를 사용
83+
* 혹은 User쪽에 있는 리스트에서 제거할 경우, 양방향 매핑이기 떄문에 자식이 고아가 댐 -> 이를 위헤서 orphanRemoval를 사용
8684
* 근데 우린 사용 안하니까 사실 빼도 무방할 듯....
8785
*/

src/main/java/org/dfbf/soundlink/domain/user/repository/UserRepository.java

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,16 @@
1111
public interface UserRepository extends JpaRepository<User, Long> {
1212
boolean existsByEmail(String email);
1313

14-
boolean existsByNickName(String nickName);
14+
boolean existsByNickname(String nickName);
15+
16+
boolean existsByLoginId(String loginId);
1517

1618
Optional<User> findById(Long id);
1719

1820
// JPQL에서는 Inner Class에 직접 값을 넣을 수 있도록 하는 기능은 지원하지 않는다.
1921
@Query(
2022
"SELECT new org.dfbf.soundlink.domain.user.dto.response.UserMyPageDto(" +
21-
"u.email, u.loginId, u.nickName," +
23+
"u.loginId, u.nickname," +
2224
"new org.dfbf.soundlink.domain.user.dto.response.ProfileMusic(" +
2325
"pm.spotifyMusic.spotifyId, pm.spotifyMusic.title, pm.spotifyMusic.artist, pm.spotifyMusic.albumImage)) " +
2426
"FROM User u " +
@@ -27,12 +29,22 @@ public interface UserRepository extends JpaRepository<User, Long> {
2729
)
2830
UserMyPageDto findMyPageDtoByUserId(@Param("user") User user);
2931

30-
//로그인관련
31-
boolean existsByLoginId(String loginId);
32+
// JPQL에서는 Inner Class에 직접 값을 넣을 수 있도록 하는 기능은 지원하지 않는다.
33+
@Query(
34+
"SELECT new org.dfbf.soundlink.domain.user.dto.response.UserMyPageDto(" +
35+
"u.loginId, u.nickname," +
36+
"new org.dfbf.soundlink.domain.user.dto.response.ProfileMusic(" +
37+
"pm.spotifyMusic.spotifyId, pm.spotifyMusic.title, pm.spotifyMusic.artist, pm.spotifyMusic.albumImage)) " +
38+
"FROM User u " +
39+
"JOIN FETCH ProfileMusic pm ON pm.user = u " +
40+
"WHERE u.loginId = :loginId"
41+
)
42+
Optional<UserMyPageDto> findMyPageDtoByLoginId(@Param("loginId") String loginId);
3243

44+
// 로그인관련
3345
Optional<User> findByLoginId(String loginId);
34-
46+
47+
// 비밀번호만 조회
3548
@Query("Select u.password from User u where u.loginId =:loginId ")
36-
String findPasswordByLoginId(@Param("loginId")String loginId); //비밀번호만 조회
37-
49+
String findPasswordByLoginId(@Param("loginId")String loginId);
3850
}

0 commit comments

Comments
 (0)