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
14 changes: 14 additions & 0 deletions src/main/java/com/petlog/diary/controller/DiaryController.java
Original file line number Diff line number Diff line change
@@ -1,10 +1,13 @@
package com.petlog.diary.controller;

import com.petlog.auth.resolver.Authenticated;
import com.petlog.common.response.ApiResponse;
import com.petlog.diary.controller.dto.request.CreateDiaryRequestDto;
import com.petlog.diary.controller.dto.request.UpdateDiaryRequestDto;
import com.petlog.diary.controller.dto.response.GetAllDiaryResponseDto;
import com.petlog.diary.controller.dto.response.GetDiaryResponseDto;
import com.petlog.diary.service.DiaryService;
import com.petlog.diary.service.dto.CreateDiaryDto;
import com.petlog.diary.service.dto.GetDailyDiaryDto;
import com.petlog.diary.service.dto.GetDiaryInfoDto;
import com.petlog.docs.DiaryControllerDocs;
Expand Down Expand Up @@ -33,11 +36,22 @@
@RestController
public class DiaryController implements DiaryControllerDocs {

private final DiaryService diaryService;

@PostMapping
public ResponseEntity<ApiResponse<Void>> createDiary(
@Authenticated final Long memberId,
@PathVariable final Long groupId,
@RequestBody final CreateDiaryRequestDto request
) {
final CreateDiaryDto dto = new CreateDiaryDto(
request.title(),
request.content(),
request.images(),
request.writtenAt()
);
diaryService.createDiary(memberId, groupId, dto);

return ResponseEntity.ok(
ApiResponse.success(CREATE_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 CreateDiaryRequestDto(
@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
65 changes: 65 additions & 0 deletions src/main/java/com/petlog/diary/service/DiaryService.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
package com.petlog.diary.service;

import com.petlog.diary.entity.Diary;
import com.petlog.diary.entity.DiaryImage;
import com.petlog.diary.repository.DiaryImageRepository;
import com.petlog.diary.repository.DiaryRepository;
import com.petlog.diary.service.dto.CreateDiaryDto;
import com.petlog.member.entity.Member;
import com.petlog.member.repository.MemberRepository;
import com.petlog.petgroup.entity.PetGroup;
import com.petlog.petgroup.entity.PetGroupMember;
import com.petlog.petgroup.repository.PetGroupMemberRepository;
import com.petlog.petgroup.repository.PetGroupRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

@RequiredArgsConstructor
@Service
public class DiaryService {

private final DiaryRepository diaryRepository;
private final DiaryImageRepository diaryImageRepository;
private final MemberRepository memberRepository;
private final PetGroupRepository petGroupRepository;
private final PetGroupMemberRepository petGroupMemberRepository;

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

final Diary diary = new Diary(
petGroup,
member,
dto.title(),
dto.content(),
dto.writtenAt()
);
diaryRepository.save(diary);

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

private Member getMember(final Long memberId) {
return memberRepository.findById(memberId)
.orElseThrow(() -> new IllegalArgumentException("존재하지 않는 회원입니다."));
}

private PetGroup getPetGroup(final Long groupId) {
return petGroupRepository.findById(groupId)
.orElseThrow(() -> new IllegalArgumentException("존재하지 않는 그룹입니다."));
}

private PetGroupMember getPetGroupMember(final Member member, final PetGroup petGroup) {
return petGroupMemberRepository.findByMemberAndPetGroup(member, petGroup)
.orElseThrow(() -> new IllegalArgumentException("그룹에 존재하지 않는 회원입니다."));
}
}
14 changes: 14 additions & 0 deletions src/main/java/com/petlog/diary/service/dto/CreateDiaryDto.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 CreateDiaryDto(

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

) {
}
3 changes: 2 additions & 1 deletion src/main/java/com/petlog/docs/DiaryControllerDocs.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.petlog.docs;

import com.petlog.auth.resolver.Authenticated;
import com.petlog.common.response.ApiResponse;
import com.petlog.diary.controller.dto.request.CreateDiaryRequestDto;
import com.petlog.diary.controller.dto.request.UpdateDiaryRequestDto;
Expand All @@ -16,7 +17,7 @@ public interface DiaryControllerDocs {

@io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "200", description = "일기 생성에 성공하였습니다.")
@Operation(summary = "일기 생성 API")
ResponseEntity<ApiResponse<Void>> createDiary(@PathVariable final Long groupId, @RequestBody final CreateDiaryRequestDto request);
ResponseEntity<ApiResponse<Void>> createDiary(@Authenticated final Long memberId, @PathVariable final Long groupId, @RequestBody final CreateDiaryRequestDto request);

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