Skip to content

Commit 93c19e6

Browse files
authored
feat : 다이어리 필드 추가 및 유튜브 api 응답 정렬 기준 추가 (#8)
# 변경점 👍 close: #7 1. DiaryEntity에 duration, start, end 추가 2. 유튜브 api 응답 정렬기준 추가 (Official Audio, Lyrics, 가사, Official MV, 나머지) 순으로 정렬 3. BaseTimeEntity 추가 # 비고 ✏ 테스트에서 응답값 검증할 때 `SoftAssertions.assertSoftly` 사용했으면 좋겠습니다. 참고 : https://zzang9ha.tistory.com/418
1 parent c2d1adb commit 93c19e6

File tree

15 files changed

+158
-30
lines changed

15 files changed

+158
-30
lines changed

src/main/java/apptive/team5/diary/controller/DiaryController.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package apptive.team5.diary.controller;
22

3+
import apptive.team5.diary.domain.DiaryEntity;
34
import apptive.team5.diary.dto.DiaryCreateRequest;
45
import apptive.team5.diary.dto.DiaryResponse;
56
import apptive.team5.diary.dto.DiaryUpdateRequest;
@@ -21,6 +22,8 @@
2122
import org.springframework.web.bind.annotation.RequestParam;
2223
import org.springframework.web.bind.annotation.RestController;
2324

25+
import java.net.URI;
26+
2427
@RestController
2528
@RequiredArgsConstructor
2629
@RequestMapping("/api/diaries")
@@ -45,9 +48,9 @@ public ResponseEntity<Page<DiaryResponse>> getMyMusicDiary(
4548

4649
@PostMapping
4750
public ResponseEntity<Void> createDiary(@AuthenticationPrincipal String identifier, @Valid @RequestBody DiaryCreateRequest diaryRequest) {
48-
diaryService.createDiary(identifier, diaryRequest);
51+
DiaryEntity diary = diaryService.createDiary(identifier, diaryRequest);
4952

50-
return ResponseEntity.status(HttpStatus.CREATED).build();
53+
return ResponseEntity.status(HttpStatus.CREATED).location(URI.create("/api/diaries/" + diary.getId())).build();
5154
}
5255

5356
@PutMapping("/{diaryId}")

src/main/java/apptive/team5/diary/domain/DiaryEntity.java

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package apptive.team5.diary.domain;
22

3+
import apptive.team5.global.entity.BaseTimeEntity;
34
import apptive.team5.user.domain.UserEntity;
45
import jakarta.persistence.Column;
56
import jakarta.persistence.Entity;
@@ -22,7 +23,7 @@
2223
@Getter
2324
@AllArgsConstructor
2425
@NoArgsConstructor(access = AccessLevel.PROTECTED)
25-
public class DiaryEntity {
26+
public class DiaryEntity extends BaseTimeEntity {
2627

2728
@Id
2829
@GeneratedValue(strategy = GenerationType.IDENTITY)
@@ -33,16 +34,23 @@ public class DiaryEntity {
3334
private String musicTitle;
3435
@Column(nullable = false, length = 255)
3536
private String artist;
36-
@Column(columnDefinition = "TEXT")
37+
@Column(columnDefinition = "TEXT", nullable = false)
3738
private String albumImageUrl;
38-
@Column(columnDefinition = "TEXT")
39+
@Column(columnDefinition = "TEXT", nullable = false)
3940
private String videoUrl;
40-
@Column(columnDefinition = "TEXT")
41+
@Column(columnDefinition = "TEXT", nullable = false)
4142
private String content;
4243
@Enumerated(EnumType.STRING)
4344
@Column(nullable = false)
4445
private DiaryScope scope;
4546

47+
@Column(nullable = false)
48+
private String duration;
49+
@Column(nullable = false)
50+
private String start;
51+
@Column(nullable = false)
52+
private String end;
53+
4654
@ManyToOne(fetch = FetchType.LAZY, optional = false)
4755
@JoinColumn(
4856
name = "user_id",
@@ -58,6 +66,9 @@ public DiaryEntity(
5866
String videoUrl,
5967
String content,
6068
DiaryScope scope,
69+
String duration,
70+
String start,
71+
String end,
6172
UserEntity user
6273
) {
6374
this(
@@ -68,6 +79,9 @@ public DiaryEntity(
6879
videoUrl,
6980
content,
7081
scope,
82+
duration,
83+
start,
84+
end,
7185
user
7286
);
7387
}

src/main/java/apptive/team5/diary/dto/DiaryCreateRequest.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,13 @@ public record DiaryCreateRequest(
1818
@NotBlank(message = "내용을 입력해주세요")
1919
String content,
2020
@NotNull(message = "공개 범위는 필수 입력입니다.")
21-
DiaryScope scope
21+
DiaryScope scope,
22+
@NotBlank(message = "영상 길이는 필수 입력입니다.")
23+
String duration,
24+
@NotBlank(message = "킬링파트 시작 시간은 필수 입력입니다.")
25+
String start,
26+
@NotBlank(message = "킬링파트 종료 시간은 필수 입력입니다.")
27+
String end
2228
) {
2329
public static DiaryEntity toEntity(DiaryCreateRequest diaryRequest, UserEntity user) {
2430
return new DiaryEntity(
@@ -28,6 +34,9 @@ public static DiaryEntity toEntity(DiaryCreateRequest diaryRequest, UserEntity u
2834
diaryRequest.videoUrl,
2935
diaryRequest.content,
3036
diaryRequest.scope,
37+
diaryRequest.duration,
38+
diaryRequest.start(),
39+
diaryRequest.end,
3140
user
3241
);
3342
}

src/main/java/apptive/team5/diary/dto/DiaryResponse.java

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,20 @@
33

44
import apptive.team5.diary.domain.DiaryEntity;
55
import apptive.team5.diary.domain.DiaryScope;
6+
import java.time.LocalDateTime;
67

78
public record DiaryResponse(
89
String artist,
910
String musicTitle,
1011
String albumImageUrl,
1112
String content,
1213
String videoUrl,
13-
DiaryScope scope
14+
DiaryScope scope,
15+
String duration,
16+
String start,
17+
String end,
18+
LocalDateTime createDate,
19+
LocalDateTime updateDate
1420
) {
1521
public static DiaryResponse from(DiaryEntity diary) {
1622
return new DiaryResponse(
@@ -19,7 +25,12 @@ public static DiaryResponse from(DiaryEntity diary) {
1925
diary.getAlbumImageUrl(),
2026
diary.getContent(),
2127
diary.getVideoUrl(),
22-
diary.getScope()
28+
diary.getScope(),
29+
diary.getDuration(),
30+
diary.getStart(),
31+
diary.getEnd(),
32+
diary.getCreateDateTime(),
33+
diary.getUpdateDateTime()
2334
);
2435
}
2536
}

src/main/java/apptive/team5/diary/dto/DiaryUpdateDto.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@ public record DiaryUpdateDto(
88
String albumImageUrl,
99
String videoUrl,
1010
String content,
11-
DiaryScope scope
11+
DiaryScope scope,
12+
String duration,
13+
String start,
14+
String end
1215
) {
1316
}

src/main/java/apptive/team5/diary/dto/DiaryUpdateRequest.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,10 @@ public record DiaryUpdateRequest(
88
String albumImageUrl,
99
String videoUrl,
1010
String content,
11-
DiaryScope scope
11+
DiaryScope scope,
12+
String duration,
13+
String start,
14+
String end
1215
) {
1316
public static DiaryUpdateDto toUpdateDto(DiaryUpdateRequest updateRequest) {
1417
return new DiaryUpdateDto(
@@ -17,7 +20,10 @@ public static DiaryUpdateDto toUpdateDto(DiaryUpdateRequest updateRequest) {
1720
updateRequest.albumImageUrl,
1821
updateRequest.videoUrl,
1922
updateRequest.content,
20-
updateRequest.scope
23+
updateRequest.scope,
24+
updateRequest.duration,
25+
updateRequest.start,
26+
updateRequest.end
2127
);
2228
}
2329
}

src/main/java/apptive/team5/diary/service/DiaryLowService.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@ public class DiaryLowService {
1717
private final DiaryRepository diaryRepository;
1818

1919
@Transactional
20-
public void saveDiary(DiaryEntity diary) {
21-
diaryRepository.save(diary);
20+
public DiaryEntity saveDiary(DiaryEntity diary) {
21+
return diaryRepository.save(diary);
2222
}
2323

2424
@Transactional(readOnly = true)

src/main/java/apptive/team5/diary/service/DiaryService.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,12 @@ public Page<DiaryResponse> getMyDiaries(String identifier, Pageable pageable) {
2828
}
2929

3030
@Transactional
31-
public void createDiary(String identifier, DiaryCreateRequest diaryRequest) {
31+
public DiaryEntity createDiary(String identifier, DiaryCreateRequest diaryRequest) {
3232
UserEntity foundUser = findUserByIdentifier(identifier);
3333

3434
DiaryEntity diary = DiaryCreateRequest.toEntity(diaryRequest, foundUser);
3535

36-
diaryLowService.saveDiary(diary);
36+
return diaryLowService.saveDiary(diary);
3737
}
3838

3939
@Transactional
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package apptive.team5.global.entity;
2+
3+
import jakarta.persistence.Column;
4+
import jakarta.persistence.EntityListeners;
5+
import jakarta.persistence.MappedSuperclass;
6+
import lombok.Getter;
7+
import org.springframework.data.annotation.CreatedDate;
8+
import org.springframework.data.annotation.LastModifiedDate;
9+
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
10+
11+
import java.time.LocalDateTime;
12+
13+
@Getter
14+
@MappedSuperclass
15+
@EntityListeners(AuditingEntityListener.class)
16+
public class BaseTimeEntity {
17+
18+
@CreatedDate
19+
@Column(updatable = false, nullable = false)
20+
private LocalDateTime createDateTime;
21+
22+
@LastModifiedDate
23+
@Column(nullable = false)
24+
private LocalDateTime updateDateTime;
25+
}
26+

src/main/java/apptive/team5/jwt/domain/RefreshToken.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package apptive.team5.jwt.domain;
22

3+
import apptive.team5.global.entity.BaseTimeEntity;
34
import apptive.team5.user.domain.UserEntity;
45
import jakarta.persistence.*;
56
import lombok.AccessLevel;
@@ -16,7 +17,7 @@
1617
@EntityListeners(AuditingEntityListener.class)
1718
@AllArgsConstructor
1819
@NoArgsConstructor(access = AccessLevel.PROTECTED)
19-
public class RefreshToken {
20+
public class RefreshToken extends BaseTimeEntity {
2021

2122
@Id
2223
@GeneratedValue(strategy = GenerationType.IDENTITY)

0 commit comments

Comments
 (0)