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
45 changes: 45 additions & 0 deletions server/src/docs/asciidoc/index.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -1113,4 +1113,49 @@ include::{snippets}/api/greenroom/diary/post/3/http-response.adoc[]
실패 3.
include::{snippets}/api/greenroom/diary/post/4/http-response.adoc[]

=== **16. 연도-월 별 작성된 일기 조회**

특정 연도-월에 작성된 모든 일기 목록을 조회함.

==== Request
include::{snippets}/api/greenroom/diaries/1/http-request.adoc[]

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

==== Request Query Parameter Fields
include::{snippets}/api/greenroom/diaries/1/query-parameters.adoc[]

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

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


=== **17. 일기 상세 조회**

특정 일기에 대한 상세 정보를 조회함.

==== Request
include::{snippets}/api/greenroom/diaries/specific/1/http-request.adoc[]

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

==== Request Path Parameter Fields
include::{snippets}/api/greenroom/diaries/specific/1/path-parameters.adoc[]

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

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

==== 실패 Response

실패1.
include::{snippets}/api/greenroom/diaries/specific/2/http-response.adoc[]

실패2.
include::{snippets}/api/greenroom/diaries/specific/3/http-response.adoc[]
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

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.DiaryService;
import com.greenroom.server.api.domain.greenroom.service.GreenroomService;
import com.greenroom.server.api.global.response.enums.ResponseCodeEnum;
import com.greenroom.server.api.global.response.ApiResponse;
Expand All @@ -16,6 +17,7 @@
import org.springframework.web.multipart.MultipartFile;

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

@RestController
Expand All @@ -24,6 +26,7 @@
public class GreenroomController {

private final GreenroomService greenroomService;
private final DiaryService diaryService;

@GetMapping("/info")
public ResponseEntity<ApiResponse> getUserGreenroomInfo(@AuthenticationPrincipal User user){
Expand Down Expand Up @@ -108,4 +111,14 @@ public ResponseEntity<ApiResponse> getCalender(@AuthenticationPrincipal User use
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)));
}

@GetMapping("/diaries")
public ResponseEntity<ApiResponse> getAllDiaries(@AuthenticationPrincipal User user, @RequestParam(value = "date")YearMonth date){
return ResponseEntity.ok(ApiResponse.success(ResponseCodeEnum.SUCCESS,greenroomService.getAllDiaries(user.getUsername(),date)));
}

@GetMapping("/diaries/{diary_id}")
public ResponseEntity<ApiResponse> getDiaryById(@AuthenticationPrincipal User user ,@PathVariable(value = "diary_id") Long diaryId){
return ResponseEntity.ok(ApiResponse.success(ResponseCodeEnum.SUCCESS,diaryService.getSpecificDiary(diaryId, user.getUsername())));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
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 java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.TextStyle;
import java.util.List;
import java.util.Locale;

public record DiaryListResponseDto(List<DateAndDiaryList> diaryList) {
public static DiaryListResponseDto of(List<DateAndDiaryList> diaryList){
return new DiaryListResponseDto(diaryList);
}

public record DateAndDiaryList(DateInfo dateInfo, List<DiaryInfo> diaryInfo){
public static DateAndDiaryList of(DateInfo dateInfo, List<DiaryInfo> diaryInfo){
return new DateAndDiaryList(dateInfo,diaryInfo);
}
}

public record DateInfo(Integer year, Integer month, Integer date, String day){
public static DateInfo from(LocalDate date){
return new DateInfo(date.getYear(),date.getMonthValue(),date.getDayOfMonth(),date.getDayOfWeek().getDisplayName(TextStyle.SHORT, Locale.KOREAN));
}
}

public record DiaryInfo(Long diaryId, Long greenroomId, String greenroomName, String title, String content, String imageUrl, LocalDateTime dateTime){
public static DiaryInfo from(Diary diary){

String imageUrl = null;
if(diary.getDiaryPictureUrl()!=null){imageUrl= PropertiesHolder.CDN_PATH+"/"+ diary.getDiaryPictureUrl();}


LocalTime time = LocalTime.of(diary.getCreateDate().getHour(),diary.getCreateDate().getMinute());
LocalDateTime diaryDateTime = LocalDateTime.of(diary.getDate(),time);

return new DiaryInfo(diary.getDiaryId(),diary.getGreenRoom().getGreenroomId(),diary.getGreenRoom().getName(), diary.getTitle(), diary.getContent(),imageUrl,diaryDateTime);
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@
import lombok.Data;

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

@Data
public class DiaryResponseDto {
Expand All @@ -14,12 +16,17 @@ public class DiaryResponseDto {
private final String title;
private final String content;
private final String imageUrl;
private final String date;
private final LocalDateTime dateTime;

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());

if(diary.getDiaryPictureUrl()!=null){imageUrl = PropertiesHolder.CDN_PATH+"/"+diary.getDiaryPictureUrl();}

LocalDateTime createTime = diary.getCreateDate()==null?LocalDateTime.now():diary.getCreateDate();
LocalTime time = LocalTime.of(createTime.getHour(),createTime.getMinute());
LocalDateTime diaryDateTime = LocalDateTime.of(diary.getDate(),time);

return new DiaryResponseDto(diary.getGreenRoom().getGreenroomId(),diary.getGreenRoom().getName(), diary.getDiaryId(), diary.getTitle(), diary.getContent(), imageUrl, diaryDateTime);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
import com.greenroom.server.api.global.config.PropertiesHolder;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.TextStyle;
import java.util.List;
import java.util.Locale;
Expand Down Expand Up @@ -40,10 +42,12 @@ public static TodoInfo from(TodoLog todoLog){
return new TodoInfo(activity.getActivityId(),activity.getActivityName(),null,true);
}
}
public record DiaryInfo(Long diaryId, String title, String body, String imageUrl){
public record DiaryInfo(Long diaryId, Long greenroomId, String greenroomName, String title, String body, String imageUrl, LocalDateTime dateTime){
public static DiaryInfo from(Diary diary){
String imageUrl = diary.getDiaryPictureUrl()==null?null:PropertiesHolder.CDN_PATH+"/"+diary.getDiaryPictureUrl();
return new DiaryInfo(diary.getDiaryId(),diary.getTitle(),diary.getContent(),imageUrl);
LocalTime time = LocalTime.of(diary.getCreateDate().getHour(),diary.getCreateDate().getMinute());
LocalDateTime diaryDateTime = LocalDateTime.of(diary.getDate(),time);
return new DiaryInfo(diary.getDiaryId(),diary.getGreenRoom().getGreenroomId(),diary.getGreenRoom().getName(),diary.getTitle(),diary.getContent(),imageUrl,diaryDateTime);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,8 @@ public static Diary createDiary(String title, String content, GreenRoom greenRoo
return Diary.builder().title(title).content(content).greenRoom(greenRoom).diaryPictureUrl(diaryPictureUrl).date(date).build();
}


public void updateCreateDate(LocalDateTime createDate){
this.createDate = createDate;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
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.entity.TodoLog;
import com.greenroom.server.api.domain.user.entity.User;
import org.springframework.data.jpa.repository.EntityGraph;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
Expand All @@ -13,6 +15,7 @@
import java.time.LocalDate;
import java.util.Collection;
import java.util.List;
import java.util.Optional;

@Repository
public interface DiaryRepository extends JpaRepository<Diary,Long> {
Expand All @@ -28,7 +31,13 @@ public interface DiaryRepository extends JpaRepository<Diary,Long> {

void deleteAllByGreenRoom(GreenRoom greenRoom);

@Query("select d from Diary d where FUNCTION('DATE', d.createDate)=:date And d.greenRoom.greenroomId in :greenRooms ")
List<Diary> findByCreateDateAndGreenRoomIn(@Param("date")LocalDate date, @Param("greenRooms") List<Long> greenRoom);
@Query("select d from Diary d where FUNCTION('DATE', d.date)=:date And d.greenRoom.greenroomId in :greenRooms ")
List<Diary> findByDateAndGreenRoomIn(@Param("date")LocalDate date, @Param("greenRooms") List<Long> greenRoom);

@EntityGraph(attributePaths = {"greenRoom"})
@Query("select d from Diary d where d.greenRoom.user =:user and FUNCTION('YEAR', d.date) = :year AND FUNCTION('MONTH', d.date) = :month")
List<Diary> findByUserAndDate(@Param(value = "user") User user,@Param(value = "year")Integer year, @Param(value ="month")Integer month);

@EntityGraph(attributePaths = {"greenRoom", "greenRoom.user"})
Optional<Diary> findByDiaryId(Long id);
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,19 @@

import com.amazonaws.util.StringUtils;
import com.greenroom.server.api.domain.greenroom.dto.in.DiaryCreationRequestDto;
import com.greenroom.server.api.domain.greenroom.dto.out.DiaryResponseDto;
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.domain.user.entity.User;
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.YearMonth;
import java.time.format.DateTimeParseException;
import java.util.ArrayList;
import java.util.List;
Expand All @@ -37,7 +40,7 @@ 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());
return diaryRepository.findByDateAndGreenRoomIn(date,greenRoomList.stream().map(GreenRoom::getGreenroomId).toList());
}

public Diary createDiary(GreenRoom greenRoom, DiaryCreationRequestDto request, String imageUrl){
Expand All @@ -50,7 +53,18 @@ public Diary createDiary(GreenRoom greenRoom, DiaryCreationRequestDto request, S
}

Diary diary = Diary.createDiary(request.getTitle(),request.getContent(),greenRoom,imageUrl,date);
diaryRepository.save(diary);
return diary;
return diaryRepository.save(diary);
}

public List<Diary> getAllDiariesByUser(User user, YearMonth date){
return diaryRepository.findByUserAndDate(user, date.getYear(),date.getMonthValue());
}

public DiaryResponseDto getSpecificDiary(Long diaryId,String userEmail){
Diary diary = diaryRepository.findByDiaryId(diaryId).orElseThrow(()-> new CustomException(ResponseCodeEnum.DIARY_NOT_FOUND));

if(!diary.getGreenRoom().getUser().getEmail().equals(userEmail)){throw new CustomException(ResponseCodeEnum.NOT_AUTHORIZATION);}

return DiaryResponseDto.from(diary);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
import org.springframework.web.multipart.MultipartFile;

import java.time.LocalDate;
import java.time.YearMonth;
import java.time.format.DateTimeParseException;
import java.util.*;
import java.util.stream.Collectors;
Expand Down Expand Up @@ -449,5 +450,23 @@ public DiaryResponseDto createDiary(String email, DiaryCreationRequestDto reques
return DiaryResponseDto.from(createdDiary);

}

public DiaryListResponseDto getAllDiaries(String email, YearMonth date){
User user = customUserDetailService.findUserByEmail(email);

Map<LocalDate, List<Diary>> diaryList = diaryService.getAllDiariesByUser(user,date).stream().collect(Collectors.groupingBy(Diary::getDate));
List<DiaryListResponseDto.DateAndDiaryList> result = new ArrayList<>();

List<LocalDate> dateList = diaryList.keySet().stream().sorted((a,b)->b.getDayOfYear()-a.getDayOfYear()).toList();

for(LocalDate diaryDate : dateList){
DiaryListResponseDto.DateInfo dateInfo = DiaryListResponseDto.DateInfo.from(diaryDate);
List<DiaryListResponseDto.DiaryInfo> diaryInfoList = diaryList.get(diaryDate).stream().map(DiaryListResponseDto.DiaryInfo::from).toList();

result.add(DiaryListResponseDto.DateAndDiaryList.of(dateInfo,diaryInfoList));
}

return DiaryListResponseDto.of(result);
}
}

Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ public enum ResponseCodeEnum {
CHECKED_IN_NOT_ALLOWED(HttpStatus.CONFLICT,"C028","출석 체크가 불가능함.",""),
GREENROOM_NOT_FOUND(HttpStatus.NOT_FOUND,"C029","서버에 등록된 그린룸을 찾을 수 없음.",""),
TOO_LONG_STRING(HttpStatus.BAD_REQUEST,"C030","제한된 길이를 초과하는 문자열이 전달되었음.",""),
DIARY_NOT_FOUND(HttpStatus.NOT_FOUND,"C031","요청된 id에 해당하는 일기를 서버에서 찾을 수 없음.",""),

//500~
UNKNOWN_SERVER_ERROR(HttpStatus.INTERNAL_SERVER_ERROR,"D000","정의되지 않은 알 수 없는 서버 에러가 발생함.","서버에 문의"),
Expand Down
Loading
Loading