Skip to content

Commit adb0836

Browse files
authored
Merge pull request #8 from prgrms-web-devcourse-final-project/feature/like-create
좋아요 추가/취소 기능 구현
2 parents f14f65a + 2dbfe75 commit adb0836

File tree

26 files changed

+693
-1
lines changed

26 files changed

+693
-1
lines changed

build.gradle.kts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,11 @@ dependencies {
3333
implementation("org.springframework.boot:spring-boot-starter-validation")
3434
implementation("org.springframework.boot:spring-boot-starter-web")
3535
implementation("org.springframework.boot:spring-boot-starter-data-redis")
36+
implementation("mysql:mysql-connector-java:8.0.33")
3637

3738
compileOnly("org.projectlombok:lombok")
39+
testCompileOnly("org.projectlombok:lombok")
40+
testAnnotationProcessor("org.projectlombok:lombok")
3841
runtimeOnly("com.h2database:h2")
3942
annotationProcessor("org.projectlombok:lombok")
4043
testImplementation("org.springframework.boot:spring-boot-starter-test")

src/main/java/com/example/log4u/Log4UApplication.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@
22

33
import org.springframework.boot.SpringApplication;
44
import org.springframework.boot.autoconfigure.SpringBootApplication;
5+
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
56

7+
@EnableJpaAuditing
68
@SpringBootApplication
79
public class Log4UApplication {
810

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package com.example.log4u.common.entity;
2+
3+
import java.time.LocalDateTime;
4+
5+
import org.springframework.data.annotation.CreatedDate;
6+
import org.springframework.data.annotation.LastModifiedDate;
7+
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
8+
9+
import jakarta.persistence.Column;
10+
import jakarta.persistence.EntityListeners;
11+
import jakarta.persistence.MappedSuperclass;
12+
import lombok.Getter;
13+
14+
@Getter
15+
@MappedSuperclass
16+
@EntityListeners(AuditingEntityListener.class)
17+
abstract public class BaseEntity {
18+
19+
@CreatedDate
20+
@Column(nullable = false, updatable = false)
21+
private LocalDateTime createdAt;
22+
23+
@LastModifiedDate
24+
@Column(nullable = false)
25+
private LocalDateTime updatedAt;
26+
27+
private String deleteYn = "N";
28+
}

src/main/java/com/example/log4u/domain/comment/testController/TestController.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,5 +30,4 @@ public String testIllegalArgument() {
3030
public String testLog4uException() {
3131
throw new NotFoundCommentException(); // 또는 임의의 ServiceException
3232
}
33-
3433
}
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
package com.example.log4u.domain.diary.entity;
2+
3+
import com.example.log4u.common.entity.BaseEntity;
4+
5+
import jakarta.persistence.Column;
6+
import jakarta.persistence.Entity;
7+
import jakarta.persistence.GeneratedValue;
8+
import jakarta.persistence.GenerationType;
9+
import jakarta.persistence.Id;
10+
import lombok.AccessLevel;
11+
import lombok.AllArgsConstructor;
12+
import lombok.Builder;
13+
import lombok.Getter;
14+
import lombok.NoArgsConstructor;
15+
16+
@Entity
17+
@Getter
18+
@NoArgsConstructor(access = AccessLevel.PROTECTED)
19+
@AllArgsConstructor
20+
@Builder
21+
public class Diary extends BaseEntity {
22+
23+
@Id
24+
@GeneratedValue(strategy = GenerationType.IDENTITY)
25+
private Long diaryId;
26+
27+
//JPA 연관관계 사용 X
28+
// 외래키 방식을 사용 O
29+
@Column(nullable = false)
30+
private Long userId;
31+
32+
@Column(nullable = false)
33+
private String title;
34+
35+
private String thumbnailUrl;
36+
37+
@Column(nullable = false)
38+
private String content;
39+
40+
@Column(nullable = false)
41+
private Double latitude;
42+
43+
@Column(nullable = false)
44+
private Double longitude;
45+
46+
@Column(nullable = false)
47+
private Long likeCount;
48+
49+
public Long incrementLikeCount() {
50+
this.likeCount++;
51+
return this.likeCount;
52+
}
53+
54+
public Long decreaseLikeCount() {
55+
this.likeCount--;
56+
return this.likeCount;
57+
}
58+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package com.example.log4u.domain.diary.exception;
2+
3+
import org.springframework.http.HttpStatus;
4+
5+
import com.example.log4u.common.exception.base.ErrorCode;
6+
7+
import lombok.Getter;
8+
import lombok.RequiredArgsConstructor;
9+
10+
@Getter
11+
@RequiredArgsConstructor
12+
public enum DiaryErrorCode implements ErrorCode {
13+
14+
NOT_FOUND_DIARY(HttpStatus.NOT_FOUND, "다이어리를 찾을 수 없습니다.");
15+
16+
private final HttpStatus httpStatus;
17+
private final String message;
18+
19+
@Override
20+
public HttpStatus getHttpStatus() {
21+
return httpStatus;
22+
}
23+
24+
@Override
25+
public String getErrorMessage() {
26+
return message;
27+
}
28+
}
29+
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package com.example.log4u.domain.diary.exception;
2+
3+
import com.example.log4u.common.exception.base.ErrorCode;
4+
import com.example.log4u.common.exception.base.ServiceException;
5+
6+
public class DiaryException extends ServiceException {
7+
public DiaryException(ErrorCode errorCode) {
8+
super(errorCode);
9+
}
10+
}
11+
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.example.log4u.domain.diary.exception;
2+
3+
public class NotFoundDiaryException extends DiaryException {
4+
public NotFoundDiaryException() {
5+
super(DiaryErrorCode.NOT_FOUND_DIARY);
6+
}
7+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package com.example.log4u.domain.diary.repository;
2+
3+
import org.springframework.data.jpa.repository.JpaRepository;
4+
5+
import com.example.log4u.domain.diary.entity.Diary;
6+
7+
public interface DiaryRepository extends JpaRepository<Diary, Long>
8+
{
9+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package com.example.log4u.domain.diary.service;
2+
3+
import org.springframework.stereotype.Service;
4+
5+
import com.example.log4u.domain.diary.entity.Diary;
6+
import com.example.log4u.domain.diary.exception.NotFoundDiaryException;
7+
import com.example.log4u.domain.diary.repository.DiaryRepository;
8+
9+
import lombok.RequiredArgsConstructor;
10+
11+
12+
@Service
13+
@RequiredArgsConstructor
14+
public class DiaryService {
15+
16+
private final DiaryRepository diaryRepository;
17+
18+
public Diary getDiary(Long diaryId) {
19+
return diaryRepository.findById(diaryId)
20+
.orElseThrow(NotFoundDiaryException::new);
21+
}
22+
23+
public Long incrementLikeCount(Long diaryId) {
24+
Diary diary = getDiary(diaryId);
25+
return diary.incrementLikeCount();
26+
}
27+
28+
public Long decreaseLikeCount(Long diaryId) {
29+
Diary diary = getDiary(diaryId);
30+
return diary.decreaseLikeCount();
31+
}
32+
33+
public Long getLikeCount(Long diaryId) {
34+
Diary diary = getDiary(diaryId);
35+
return diary.getLikeCount();
36+
}
37+
}

0 commit comments

Comments
 (0)