Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@

import com.example.cp_main_be.domain.avatar.avatar.domain.Avatar;
import com.example.cp_main_be.domain.garden.garden.domain.Garden;
import com.example.cp_main_be.domain.mission.diary.domain.Diary;
import com.example.cp_main_be.domain.social.bookmark.domain.Bookmark;
import com.example.cp_main_be.domain.social.diary.domain.Diary;
import com.fasterxml.jackson.annotation.JsonManagedReference;
import jakarta.persistence.*;
import java.time.LocalDateTime;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package com.example.cp_main_be.domain.social.diary.domain;
package com.example.cp_main_be.domain.mission.diary.domain;

import com.example.cp_main_be.domain.member.user.domain.User;
import com.example.cp_main_be.domain.mission.diaryimage.domain.DiaryImage;
import com.example.cp_main_be.domain.social.comment.domain.Comment;
import com.example.cp_main_be.domain.social.diaryimage.domain.DiaryImage;
import com.fasterxml.jackson.annotation.JsonBackReference;
import com.fasterxml.jackson.annotation.JsonManagedReference;
import jakarta.persistence.*;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package com.example.cp_main_be.domain.social.diary.domain.repository;
package com.example.cp_main_be.domain.mission.diary.domain.repository;

import com.example.cp_main_be.domain.member.user.domain.User;
import com.example.cp_main_be.domain.social.diary.domain.Diary;
import com.example.cp_main_be.domain.mission.diary.domain.Diary;
import java.util.List;
import java.util.Optional;
import org.springframework.data.domain.Pageable;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.example.cp_main_be.domain.social.diary.dto.request;
package com.example.cp_main_be.domain.mission.diary.dto.request;

import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.example.cp_main_be.domain.social.diary.dto.request;
package com.example.cp_main_be.domain.mission.diary.dto.request;

import lombok.Builder;
import lombok.Getter;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.example.cp_main_be.domain.social.diary.dto.request;
package com.example.cp_main_be.domain.mission.diary.dto.request;

import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,22 +1,22 @@
package com.example.cp_main_be.domain.social.diary.dto.response;
package com.example.cp_main_be.domain.mission.diary.dto.response;

import com.example.cp_main_be.domain.social.diary.domain.Diary;
import com.example.cp_main_be.domain.mission.diary.domain.Diary;
import com.example.cp_main_be.global.dto.AuthorResponse;
import com.example.cp_main_be.global.dto.FeedItemResponse;
import java.time.LocalDateTime;
import lombok.Getter;

@Getter
public class DiaryFeedItemResponse implements FeedItemResponse {
private Long postId;
private final String postType = "DIARY";
private AuthorResponse author;
private String title;
private String content;
private String imageUrl;
private int likeCount;
private final Long postId;
private final AuthorResponse author;
private final String title;
private final String content;
private final String imageUrl;
private final int likeCount;
private int commentCount; // Diary에 Comment 리스트가 있다고 가정
private LocalDateTime createdAt;
private final LocalDateTime createdAt;

public DiaryFeedItemResponse(Diary diary) {
this.postId = diary.getId();
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.example.cp_main_be.domain.social.diary.dto.response;
package com.example.cp_main_be.domain.mission.diary.dto.response;

import lombok.Builder;
import lombok.Getter;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package com.example.cp_main_be.domain.social.diary.dto.response;
package com.example.cp_main_be.domain.mission.diary.dto.response;

import com.example.cp_main_be.domain.mission.diary.domain.Diary;
import com.example.cp_main_be.domain.social.comment.domain.Comment;
import com.example.cp_main_be.domain.social.diary.domain.Diary;
import com.fasterxml.jackson.annotation.JsonProperty;
import java.time.LocalDateTime;
import java.util.List;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,46 +1,33 @@
package com.example.cp_main_be.domain.social.diary.dto.response;
package com.example.cp_main_be.domain.mission.diary.dto.response;

import com.example.cp_main_be.domain.social.diary.domain.Diary;
import com.example.cp_main_be.domain.mission.diary.domain.Diary;
import java.time.LocalDateTime;
import lombok.Getter;

@Getter
public class DiaryResponse {
private Long id;
private String title;
private String content;
private String imageUrl;
private boolean isPublic;
private int likeCount;
private LocalDateTime createdAt;
private LocalDateTime updatedAt;
private final Long diaryId;
private final String title;
private final String content;
private final String imageUrl;
private final boolean isPublic;
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

JSON 키 호환성: isPublic 직렬화 키가 public로 내려갈 수 있습니다.

Lombok @Getter의 boolean 접근자(isPublic()) 때문에 Jackson이 속성명을 public으로 해석할 수 있습니다. DiaryInfoResponse에서는 이미 @JsonProperty("isPublic")로 고정하셨으니, 본 DTO도 동일하게 맞춰야 프런트 계약이 깨지지 않습니다.

-  private final boolean isPublic;
+  @com.fasterxml.jackson.annotation.JsonProperty("isPublic")
+  private final boolean isPublic;
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
private final boolean isPublic;
@com.fasterxml.jackson.annotation.JsonProperty("isPublic")
private final boolean isPublic;
🤖 Prompt for AI Agents
In
src/main/java/com/example/cp_main_be/domain/mission/diary/dto/response/DiaryResponse.java
around line 13, the boolean field declaration private final boolean isPublic may
be serialized by Jackson as "public" due to Lombok-generated isPublic()
accessor; add an explicit @JsonProperty("isPublic") annotation on the field (or
its getter) and import com.fasterxml.jackson.annotation.JsonProperty so Jackson
uses the "isPublic" key to match DiaryInfoResponse and preserve the frontend
contract.

private final int likeCount;
private final LocalDateTime createdAt;
private final LocalDateTime updatedAt;

// private AuthorDto author; // 작성자 정보가 필요하면 추가

public static DiaryResponse from(Diary diary) {
String imageUrl = diary.getDiaryImage() != null ? diary.getDiaryImage().getImageUrl() : null;
return new DiaryResponse(
diary.getId(),
diary.getTitle(),
diary.getContent(),
imageUrl,
diary.isPublic(),
diary.getLikeCount(),
diary.getCreatedAt(),
diary.getUpdatedAt());
}

// Lombok Builder나 생성자를 통해 더 유연하게 만들 수 있습니다.
private DiaryResponse(
Long id,
Long diaryId,
String title,
String content,
String imageUrl,
boolean isPublic,
int likeCount,
LocalDateTime createdAt,
LocalDateTime updatedAt) {
this.id = id;
this.diaryId = diaryId;
this.title = title;
this.content = content;
this.imageUrl = imageUrl;
Expand All @@ -49,4 +36,17 @@ private DiaryResponse(
this.createdAt = createdAt;
this.updatedAt = updatedAt;
}

public static DiaryResponse from(Diary diary) {
String imageUrl = diary.getDiaryImage() != null ? diary.getDiaryImage().getImageUrl() : null;
return new DiaryResponse(
diary.getId(),
diary.getTitle(),
diary.getContent(),
imageUrl,
diary.isPublic(),
diary.getLikeCount(),
diary.getCreatedAt(),
diary.getUpdatedAt());
}
}
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
package com.example.cp_main_be.domain.social.diary.presentation;
package com.example.cp_main_be.domain.mission.diary.presentation;

import com.example.cp_main_be.domain.member.user.domain.User;
import com.example.cp_main_be.domain.social.diary.domain.Diary;
import com.example.cp_main_be.domain.social.diary.dto.request.CreateDiaryRequest;
import com.example.cp_main_be.domain.social.diary.dto.request.UpdateDiaryRequest;
import com.example.cp_main_be.domain.social.diary.dto.response.DiaryInfoResponse;
import com.example.cp_main_be.domain.social.diary.dto.response.DiaryResponse;
import com.example.cp_main_be.domain.social.diary.service.DiaryService;
import com.example.cp_main_be.domain.mission.diary.domain.Diary;
import com.example.cp_main_be.domain.mission.diary.dto.request.CreateDiaryRequest;
import com.example.cp_main_be.domain.mission.diary.dto.request.UpdateDiaryRequest;
import com.example.cp_main_be.domain.mission.diary.dto.response.DiaryInfoResponse;
import com.example.cp_main_be.domain.mission.diary.dto.response.DiaryResponse;
import com.example.cp_main_be.domain.mission.diary.service.DiaryService;
import com.example.cp_main_be.global.common.ApiResponse;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
package com.example.cp_main_be.domain.social.diary.service;
package com.example.cp_main_be.domain.mission.diary.service;

import com.example.cp_main_be.domain.avatar.image.ImageUploader;
import com.example.cp_main_be.domain.member.user.domain.User;
import com.example.cp_main_be.domain.member.user.domain.repository.UserRepository;
import com.example.cp_main_be.domain.social.diary.domain.Diary;
import com.example.cp_main_be.domain.social.diary.domain.repository.DiaryRepository;
import com.example.cp_main_be.domain.social.diary.dto.request.CreateDiaryRequest;
import com.example.cp_main_be.domain.social.diary.dto.request.UpdateDiaryRequest;
import com.example.cp_main_be.domain.social.diary.dto.response.DiaryInfoResponse;
import com.example.cp_main_be.domain.social.diary.dto.response.DiaryResponse;
import com.example.cp_main_be.domain.social.diaryimage.domain.DiaryImage;
import com.example.cp_main_be.domain.social.diaryimage.domain.DiaryImageRepository;
import com.example.cp_main_be.domain.mission.diary.domain.Diary;
import com.example.cp_main_be.domain.mission.diary.domain.repository.DiaryRepository;
import com.example.cp_main_be.domain.mission.diary.dto.request.CreateDiaryRequest;
import com.example.cp_main_be.domain.mission.diary.dto.request.UpdateDiaryRequest;
import com.example.cp_main_be.domain.mission.diary.dto.response.DiaryInfoResponse;
import com.example.cp_main_be.domain.mission.diary.dto.response.DiaryResponse;
import com.example.cp_main_be.domain.mission.diaryimage.domain.DiaryImage;
import com.example.cp_main_be.domain.mission.diaryimage.domain.DiaryImageRepository;
import com.example.cp_main_be.domain.social.like.domain.repository.LikeRepository;
import java.util.List;
import java.util.Objects;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.example.cp_main_be.domain.social.diaryimage.domain;
package com.example.cp_main_be.domain.mission.diaryimage.domain;

import com.example.cp_main_be.domain.social.diary.domain.Diary;
import com.example.cp_main_be.domain.mission.diary.domain.Diary;
import jakarta.persistence.*;
import java.time.LocalDateTime;
import lombok.*;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.example.cp_main_be.domain.social.diaryimage.domain;
package com.example.cp_main_be.domain.mission.diaryimage.domain;

import org.springframework.data.jpa.repository.JpaRepository;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.example.cp_main_be.domain.social.diaryimage.presentation;
package com.example.cp_main_be.domain.mission.diaryimage.presentation;

import com.example.cp_main_be.domain.social.diary.service.DiaryService;
import com.example.cp_main_be.domain.mission.diary.service.DiaryService;
import com.example.cp_main_be.global.common.ApiResponse;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
Expand All @@ -12,7 +12,7 @@

@RestController
@RequiredArgsConstructor
@RequestMapping("api/v1/diaries")
@RequestMapping("api/v1")
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

매핑 경로 슬래시 누락 및 경로 불일치로 인한 오동작 가능성

클래스 레벨 @RequestMapping("api/v1")와 메서드 레벨 @PostMapping("{diaryId}/images")는 선행 슬래시가 없어 조합 경로가 의도와 달라질 수 있습니다. 또한 Delete는 /diaries/...를 포함하는 반면, Post는 diaries 세그먼트가 빠져 불일치합니다. 아래와 같이 정정 제안드립니다.

-@RequestMapping("api/v1")
+@RequestMapping("/api/v1")
...
-  @PostMapping(value = "{diaryId}/images", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
+  @PostMapping(value = "/diaries/{diaryId}/images", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)

Also applies to: 21-23

🤖 Prompt for AI Agents
In
src/main/java/com/example/cp_main_be/domain/mission/diaryimage/presentation/DiaryImageController.java
around line 15 (and also affecting lines 21-23), the class-level @RequestMapping
is missing a leading slash and the method-level paths are inconsistent (POST
lacks the "diaries" segment while DELETE includes it), causing incorrect
combined routes; fix by using consistent, leading-slash paths — for example set
the class-level mapping to "/api/v1" and change the POST mapping to
"/diaries/{diaryId}/images" (or alternatively change class-level to
"/api/v1/diaries" and make method mappings "/{diaryId}/images"), and ensure all
mappings include the leading slash and the same "diaries" segment so POST and
DELETE routes align.

@Tag(name = "일기 이미지 API", description = "일기의 이미지 관련 기능을 제공합니다")
public class DiaryImageController {

Expand All @@ -31,7 +31,7 @@ public ResponseEntity<ApiResponse<Void>> saveDiaryImage(
}

@Operation(summary = "일기 이미지 삭제", description = "일기 이미지를 삭제합니다")
@DeleteMapping("{diaryId}/images/{imageId}")
@DeleteMapping("/diaries/{diaryId}/images/{imageId}")
public ResponseEntity<ApiResponse<Void>> deleteDiaryImage(
@PathVariable Long diaryId, @PathVariable Long imageId) {
diaryService.deleteDiaryImage(diaryId, imageId);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

import com.example.cp_main_be.domain.member.user.domain.User;
import com.example.cp_main_be.domain.member.user.domain.repository.UserRepository;
import com.example.cp_main_be.domain.mission.diary.domain.Diary;
import com.example.cp_main_be.domain.mission.diary.domain.repository.DiaryRepository;
import com.example.cp_main_be.domain.reports.domain.ReportReason;
import com.example.cp_main_be.domain.reports.domain.Reports;
import com.example.cp_main_be.domain.reports.domain.repository.ReportReasonRepository;
Expand All @@ -10,8 +12,6 @@
import com.example.cp_main_be.domain.reports.enums.ReportStatus;
import com.example.cp_main_be.domain.social.comment.domain.Comment;
import com.example.cp_main_be.domain.social.comment.domain.repository.CommentRepository;
import com.example.cp_main_be.domain.social.diary.domain.Diary;
import com.example.cp_main_be.domain.social.diary.domain.repository.DiaryRepository;
import com.example.cp_main_be.global.exception.UserNotFoundException;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,12 @@
package com.example.cp_main_be.domain.social.comment.domain;

import com.example.cp_main_be.domain.member.user.domain.User;
import com.example.cp_main_be.domain.mission.diary.domain.Diary;
import com.example.cp_main_be.domain.social.avatarpost.domain.AvatarPost;
import com.example.cp_main_be.domain.social.diary.domain.Diary;
import com.fasterxml.jackson.annotation.JsonBackReference;
import jakarta.persistence.*;
import java.time.LocalDateTime;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.*;

@Entity
@Table(name = "comments")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,15 @@

import com.example.cp_main_be.domain.member.user.domain.User;
import com.example.cp_main_be.domain.member.user.domain.repository.UserRepository;
import com.example.cp_main_be.domain.mission.diary.domain.Diary;
import com.example.cp_main_be.domain.mission.diary.domain.repository.DiaryRepository;
import com.example.cp_main_be.domain.social.avatarpost.domain.AvatarPost;
import com.example.cp_main_be.domain.social.avatarpost.domain.repository.AvatarPostRepository;
import com.example.cp_main_be.domain.social.comment.domain.Comment;
import com.example.cp_main_be.domain.social.comment.domain.repository.CommentRepository;
import com.example.cp_main_be.domain.social.comment.dto.request.CommentRequest;
import com.example.cp_main_be.domain.social.comment.dto.request.UpdateCommentRequest;
import com.example.cp_main_be.domain.social.comment.dto.response.CommentResponse;
import com.example.cp_main_be.domain.social.diary.domain.Diary;
import com.example.cp_main_be.domain.social.diary.domain.repository.DiaryRepository;
import com.example.cp_main_be.global.event.CommentCreatedEvent;
import com.example.cp_main_be.global.exception.UserNotFoundException;
import lombok.RequiredArgsConstructor;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package com.example.cp_main_be.domain.social.feed.dto.response;

import com.example.cp_main_be.domain.mission.diary.domain.Diary;
import com.example.cp_main_be.domain.social.avatarpost.domain.AvatarPost;
import com.example.cp_main_be.domain.social.diary.domain.Diary;
import com.fasterxml.jackson.annotation.JsonIgnore;
import java.time.LocalDateTime;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
import com.example.cp_main_be.domain.member.user.domain.User;
import com.example.cp_main_be.domain.member.user.domain.repository.UserRepository;
import com.example.cp_main_be.domain.member.userblock.UserBlockRepository;
import com.example.cp_main_be.domain.mission.diary.domain.repository.DiaryRepository;
import com.example.cp_main_be.domain.social.avatarpost.domain.repository.AvatarPostRepository;
import com.example.cp_main_be.domain.social.diary.domain.repository.DiaryRepository;
import com.example.cp_main_be.domain.social.feed.dto.response.FeedResponse;
import com.example.cp_main_be.domain.social.follow.domain.Follow;
import com.example.cp_main_be.domain.social.follow.domain.repository.FollowRepository;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@
import com.example.cp_main_be.domain.member.notification.service.NotificationService;
import com.example.cp_main_be.domain.member.user.domain.User;
import com.example.cp_main_be.domain.member.user.domain.repository.UserRepository;
import com.example.cp_main_be.domain.mission.diary.domain.Diary;
import com.example.cp_main_be.domain.mission.diary.domain.repository.DiaryRepository;
import com.example.cp_main_be.domain.social.avatarpost.domain.AvatarPost;
import com.example.cp_main_be.domain.social.avatarpost.domain.repository.AvatarPostRepository;
import com.example.cp_main_be.domain.social.diary.domain.Diary;
import com.example.cp_main_be.domain.social.diary.domain.repository.DiaryRepository;
import com.example.cp_main_be.domain.social.feed.domain.Feed;
import com.example.cp_main_be.domain.social.feed.domain.repository.FeedRepository;
import com.example.cp_main_be.domain.social.like.domain.Like;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,11 @@
import com.example.cp_main_be.domain.member.notification.domain.NotificationType;
import com.example.cp_main_be.domain.member.notification.service.NotificationService;
import com.example.cp_main_be.domain.member.user.domain.User;
import com.example.cp_main_be.domain.mission.diary.domain.Diary;
import com.example.cp_main_be.domain.mission.diary.domain.repository.DiaryRepository;
import com.example.cp_main_be.domain.social.avatarpost.domain.AvatarPost;
import com.example.cp_main_be.domain.social.avatarpost.domain.repository.AvatarPostRepository;
import com.example.cp_main_be.domain.social.comment.domain.Comment;
import com.example.cp_main_be.domain.social.diary.domain.Diary;
import com.example.cp_main_be.domain.social.diary.domain.repository.DiaryRepository;
import com.example.cp_main_be.domain.social.feed.domain.repository.FeedRepository;
import com.example.cp_main_be.domain.social.follow.domain.Follow;
import com.example.cp_main_be.domain.social.guestbook.domain.Guestbook;
Expand Down
Loading