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
10 changes: 10 additions & 0 deletions src/main/java/com/petlog/diary/controller/DiaryController.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import com.petlog.diary.service.dto.CreateDiaryDto;
import com.petlog.diary.service.dto.GetDiaryDto;
import com.petlog.diary.service.dto.GetDiaryInfoDto;
import com.petlog.diary.service.dto.UpdateDiaryDto;
import com.petlog.docs.DiaryControllerDocs;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
Expand Down Expand Up @@ -91,10 +92,19 @@ public ResponseEntity<ApiResponse<GetDiaryResponseDto>> getDiary(

@PatchMapping("/{diaryId}")
public ResponseEntity<ApiResponse<Void>> updateDiary(
@Authenticated final Long memberId,
@PathVariable final Long groupId,
@PathVariable final Long diaryId,
@RequestBody final UpdateDiaryRequestDto request
) {
final UpdateDiaryDto dto = new UpdateDiaryDto(
request.title(),
request.content(),
request.images(),
request.writtenAt()
);
diaryService.updateDiary(memberId, groupId, diaryId, dto);

return ResponseEntity.ok(
ApiResponse.success(UPDATE_DIARY)
);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package com.petlog.diary.controller.dto.request;

import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import org.springframework.format.annotation.DateTimeFormat;

import java.time.LocalDate;
import java.util.List;
Expand All @@ -16,6 +18,8 @@ public record UpdateDiaryRequestDto(
@Schema(description = "0~6장")
List<String> images,

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy.MM.dd")
@DateTimeFormat(pattern = "yyyy.MM.dd")
LocalDate writtenAt

) {
Expand Down
10 changes: 10 additions & 0 deletions src/main/java/com/petlog/diary/entity/Diary.java
Original file line number Diff line number Diff line change
Expand Up @@ -64,4 +64,14 @@ public Diary(
this.content = content;
this.writtenAt = writtenAt;
}

public void update(
final String title,
final String content,
final LocalDate writtenAt
) {
this.title = title;
this.content = content;
this.writtenAt = writtenAt;
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
package com.petlog.diary.repository;

import com.petlog.diary.entity.Diary;
import com.petlog.diary.entity.DiaryImage;
import org.springframework.data.jpa.repository.JpaRepository;

public interface DiaryImageRepository extends JpaRepository<DiaryImage, Long> {

void deleteAllByDiary(final Diary diary);
}
31 changes: 31 additions & 0 deletions src/main/java/com/petlog/diary/service/DiaryService.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import com.petlog.diary.service.dto.CreateDiaryDto;
import com.petlog.diary.service.dto.GetDiaryDto;
import com.petlog.diary.service.dto.GetDiaryInfoDto;
import com.petlog.diary.service.dto.UpdateDiaryDto;
import com.petlog.member.entity.Member;
import com.petlog.member.repository.MemberRepository;
import com.petlog.petgroup.entity.PetGroup;
Expand Down Expand Up @@ -86,6 +87,7 @@ public List<GetDiaryInfoDto> getAllDiaries(final Long memberId, final Long group
.toList();
}

@Transactional(readOnly = true)
public GetDiaryDto getDiary(final Long memberId, final Long groupId, final Long diaryId) {
final Member member = getMember(memberId);
final PetGroup petGroup = getPetGroup(groupId);
Expand All @@ -108,4 +110,33 @@ private Diary getDiaryDetail(final Long diaryId) {
return diaryRepository.findById(diaryId)
.orElseThrow(() -> new IllegalArgumentException("존재하지 않는 일기입니다."));
}

@Transactional
public void updateDiary(final Long memberId, final Long groupId, final Long diaryId, final UpdateDiaryDto dto) {
final Member member = getMember(memberId);
final PetGroup petGroup = getPetGroup(groupId);
getPetGroupMember(member, petGroup);

final Diary diary = getDiaryDetail(diaryId);
validateIsDairyWriter(member, diary);

diary.update(
dto.title(),
dto.content(),
dto.writtenAt()
);

diaryImageRepository.deleteAllByDiary(diary);

final List<DiaryImage> images = dto.images().stream()
.map(img -> new DiaryImage(diary, img))
.toList();
diaryImageRepository.saveAll(images);
}

private void validateIsDairyWriter(final Member member, final Diary diary) {
if(!diary.getMember().equals(member)) {
throw new IllegalArgumentException("일기 작성자만 수정할 수 있습니다.");
}
}
}
14 changes: 14 additions & 0 deletions src/main/java/com/petlog/diary/service/dto/UpdateDiaryDto.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.petlog.diary.service.dto;

import java.time.LocalDate;
import java.util.List;

public record UpdateDiaryDto(

String title,
String content,
List<String> images,
LocalDate writtenAt

) {
}
2 changes: 1 addition & 1 deletion src/main/java/com/petlog/docs/DiaryControllerDocs.java
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ public interface DiaryControllerDocs {

@io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "200", description = "일기 상세 내용 수정에 성공하였습니다.")
@Operation(summary = "일기 상세 내용 수정 API")
ResponseEntity<ApiResponse<Void>> updateDiary(@PathVariable final Long groupId, @PathVariable final Long diaryId, @RequestBody final UpdateDiaryRequestDto request);
ResponseEntity<ApiResponse<Void>> updateDiary(@Authenticated final Long memberId, @PathVariable final Long groupId, @PathVariable final Long diaryId, @RequestBody final UpdateDiaryRequestDto request);

@io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "200", description = "일기 삭제가 성공하였습니다.")
@Operation(summary = "일기 삭제 API")
Expand Down
Loading