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
37 changes: 37 additions & 0 deletions server/src/docs/asciidoc/index.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -1077,3 +1077,40 @@ include::{snippets}/api/greenroom/calendar/1/http-response.adoc[]

==== Response Body Fields
include::{snippets}/api/greenroom/calendar/1/response-fields.adoc[]


=== **15. 일기 등록**

사용자가 현재 가지고 있는 활성화된 그린룸에 대해서 일기를 작성함

==== Request
include::{snippets}/api/greenroom/diary/post/1/curl-request.adoc[]

==== Request Headers
include::{snippets}/api/greenroom/diary/post/1/request-headers.adoc[]

==== Request Parts
이미지 파일은 선택 요소입니다.(필수x)
include::{snippets}/api/greenroom/diary/post/1/request-parts.adoc[]

==== Request Parts : **data** - Detail Fields
include::{snippets}/api/greenroom/diary/post/1/request-part-data-fields.adoc[]

==== 성공 Response
include::{snippets}/api/greenroom/diary/post/1/http-response.adoc[]

==== Response Body Fields
include::{snippets}/api/greenroom/diary/post/1/response-fields.adoc[]


==== 실패 Response
실패 1.
include::{snippets}/api/greenroom/diary/post/2/http-response.adoc[]

실패 2.
include::{snippets}/api/greenroom/diary/post/3/http-response.adoc[]

실패 3.
include::{snippets}/api/greenroom/diary/post/4/http-response.adoc[]


Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package com.greenroom.server.api.domain.greenroom.controller;

import com.google.protobuf.Api;
import com.greenroom.server.api.domain.greenroom.dto.in.*;
import com.greenroom.server.api.domain.greenroom.dto.out.PointAndLevelUpResponseDto;
import com.greenroom.server.api.domain.greenroom.service.GreenroomService;
Expand All @@ -9,7 +8,6 @@
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;

import org.checkerframework.checker.units.qual.A;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
Expand Down Expand Up @@ -106,6 +104,8 @@ public ResponseEntity<ApiResponse> getCalender(@AuthenticationPrincipal User use
return ResponseEntity.ok(ApiResponse.success(ResponseCodeEnum.SUCCESS,greenroomService.getGreenroomInfoFromCalendar(user.getUsername(),date,activityId)));
}



@PostMapping("/diary")
public ResponseEntity<ApiResponse> createDiary(@AuthenticationPrincipal User user, @Valid @RequestPart(value = "data") DiaryCreationRequestDto request, @RequestPart(value = "imageFile",required = false) MultipartFile imageFile){
return ResponseEntity.status(HttpStatus.CREATED).body(ApiResponse.success(ResponseCodeEnum.CREATED,greenroomService.createDiary(user.getUsername(),request,imageFile)));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package com.greenroom.server.api.domain.greenroom.dto.in;

import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Size;
import lombok.Data;

@Data
public class DiaryCreationRequestDto {
@NotBlank
@Size(min = 1,max = 85,message = "제목은 최소 1자 이상, 65자 이하로 입력해주세요.")
private final String title;

@NotBlank
@Size(min = 1,max = 85,message = "본문은 최소 1자 이상, 500자 이하로 입력해주세요.")
private final String content;

@NotBlank
private final String date;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package com.greenroom.server.api.domain.greenroom.dto.out;

import com.greenroom.server.api.domain.greenroom.entity.Diary;
import com.greenroom.server.api.global.config.PropertiesHolder;
import lombok.Data;

import java.time.LocalDate;

@Data
public class DiaryResponseDto {
private final Long greenroomId;
private final String greenroomName;
private final Long diaryId;
private final String title;
private final String content;
private final String imageUrl;
private final String date;

public static DiaryResponseDto from(Diary diary){
String imageUrl =null;
if(diary.getDiaryPictureUrl()!=null){imageUrl = PropertiesHolder.CDN_PATH+"/"+diary.getDiaryPictureUrl();
}
return new DiaryResponseDto(diary.getGreenRoom().getGreenroomId(),diary.getGreenRoom().getName(), diary.getDiaryId(), diary.getTitle(), diary.getContent(), imageUrl, diary.getDate().toString());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@
import lombok.Getter;
import lombok.NoArgsConstructor;

import java.time.LocalDate;
import java.time.LocalDateTime;

@Table(name = "diary")
@Entity
@Getter
Expand All @@ -16,21 +19,31 @@ public class Diary extends BaseTime {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long diaryId;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "greenroom_id")
private GreenRoom greenRoom;

private String diaryPictureUrl;

private String title;

private String content;

private LocalDate date;

@Builder
public Diary(String diaryPictureUrl, String title, String content, GreenRoom greenRoom) {
public Diary(String diaryPictureUrl, String title, String content, GreenRoom greenRoom, LocalDate date) {
this.diaryPictureUrl = diaryPictureUrl;
this.title = title;
this.content = content;
this.greenRoom = greenRoom;
this.date = date;
}

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "greenroom_id")
private GreenRoom greenRoom;
public static Diary createDiary(String title, String content, GreenRoom greenRoom, String diaryPictureUrl,LocalDate date){
return Diary.builder().title(title).content(content).greenRoom(greenRoom).diaryPictureUrl(diaryPictureUrl).date(date).build();
}



}
Original file line number Diff line number Diff line change
@@ -1,15 +1,18 @@
package com.greenroom.server.api.domain.greenroom.service;

import com.amazonaws.util.StringUtils;
import com.greenroom.server.api.domain.greenroom.dto.in.DiaryCreationRequestDto;
import com.greenroom.server.api.domain.greenroom.entity.Diary;
import com.greenroom.server.api.domain.greenroom.entity.GreenRoom;
import com.greenroom.server.api.domain.greenroom.repository.DiaryRepository;
import com.greenroom.server.api.global.exception.CustomException;
import com.greenroom.server.api.global.response.enums.ResponseCodeEnum;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeParseException;
import java.util.ArrayList;
import java.util.List;

Expand All @@ -36,4 +39,18 @@ public List<String> deleteAllByGreenRoom(List<Long> greenroomIdList){
public List<Diary> getAllDiariesByGreenroomAndDate(List<GreenRoom>greenRoomList, LocalDate date){
return diaryRepository.findByCreateDateAndGreenRoomIn(date,greenRoomList.stream().map(GreenRoom::getGreenroomId).toList());
}

public Diary createDiary(GreenRoom greenRoom, DiaryCreationRequestDto request, String imageUrl){
LocalDate date;
try{
date = LocalDate.parse(request.getDate());
}
catch (DateTimeParseException e){
throw new CustomException(ResponseCodeEnum.INVALID_REQUEST_ARGUMENT);
}

Diary diary = Diary.createDiary(request.getTitle(),request.getContent(),greenRoom,imageUrl,date);
diaryRepository.save(diary);
return diary;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -318,6 +318,7 @@ public GreenroomTodoCycleResponseDto updateActivity(ActivityInfoUpdateRequestDto
return getGreenroomTodoInfo(greenroomId);
}


public void updateTodo(Todo todo, ActivityInfoUpdateRequestDto.ActivityInfoUpdateDto updateDto){
LocalDate baseDate ;

Expand Down Expand Up @@ -433,5 +434,20 @@ public List<GreenroomCalendarResponseDto.CalendarInfo> getGreenroomInfoFuture(Us
.map(greenroom -> buildCalendarInfo(greenroom, null, todoList.getOrDefault(greenroom, null), null))
.toList();
}

@Transactional
public DiaryResponseDto createDiary(String email, DiaryCreationRequestDto request, MultipartFile imageFile){
User user = customUserDetailService.findUserByEmail(email);
List<GreenRoom> greenRoomList = greenRoomRepository.findGreenRoomByUserAndGreenroomStatus(user,GreenRoomStatus.ENABLED);
if(greenRoomList.isEmpty()){throw new CustomException(ResponseCodeEnum.GREENROOM_NOT_FOUND);} //일기 작성이 가능한 그린룸이 없는 경우

String imageUrl = null;
if(imageFile!=null) imageUrl = s3ImageUploader.uploadGreenroomImage(imageFile);

Diary createdDiary = diaryService.createDiary(greenRoomList.get(0),request,imageUrl);

return DiaryResponseDto.from(createdDiary);

}
}

Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,9 @@ public class S3ImageUploader {
@Value("${cloud.image.path.greenroom}")
private String greenroomImageDir;

@Value("${cloud.image.path.greenroom}")
private String diaryImageDir;

@Value("${cloud.image.path.plant}")
private String plantImageDir;

Expand All @@ -52,6 +55,10 @@ public String uploadGreenroomImage(MultipartFile multipartFile){
return uploadImage(multipartFile,greenroomImageDir);
}

public String uploadDiaryImage(MultipartFile multipartFile){
return uploadImage(multipartFile,diaryImageDir);
}

public String uploadImage(MultipartFile multipartFile, String dir) {

String contentType = multipartFile.getContentType();
Expand Down
1 change: 1 addition & 0 deletions server/src/main/resources/application-dev.yml
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ cloud:
user: dev/user
plant : plant
greenroom : dev/greenroom
diary : dev/diary
temp:
filePath: src/main/resources/
logging.level:
Expand Down
1 change: 1 addition & 0 deletions server/src/main/resources/application-local.yml
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@ cloud:
user: local/user
plant : plant
greenroom: local/greenroom
diary : local/diary
temp:
filePath: src/main/resources/
logging.level:
Expand Down
Loading
Loading