Skip to content

Commit

Permalink
Release 3.0 (#191)
Browse files Browse the repository at this point in the history
  • Loading branch information
BeomSeogKim committed Nov 30, 2023
2 parents 9f525f8 + 4102ef0 commit 5194322
Show file tree
Hide file tree
Showing 34 changed files with 854 additions and 755 deletions.
5 changes: 4 additions & 1 deletion api/src/docs/asciidoc/api/diary/diary-edit.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,14 @@
=== 다이어리 수정

다이어리 수정에 사용되는 값들은 다음과 같습니다.

다이어리 텍스트 수정은 본인의 텍스트만 수정할 수 있습니다.

include::{snippets}/diary-edit/request-part-texts-fields.adoc[]


==== HTTP Request
include::{snippets}/diary-create/http-request.adoc[]
include::{snippets}/diary-edit/http-request.adoc[]
include::{snippets}/diary-edit/path-parameters.adoc[]

==== HTTP Response
Expand Down
20 changes: 20 additions & 0 deletions api/src/docs/asciidoc/api/login/token.adoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
[[token]]
== 리프레시 토큰

리프레시 토큰은 다음과 같은 과정으로 발급받을 수 있습니다.:

=== 엑세스 토큰 재발급 요청

/v1/members 엔드포인트는 예시 엔드포인트이며, 아무 엔드포인트에 리프레시 토큰을 헤더에 담아서 요청하면 응답 바디에 엑세스 토큰이 담깁니다.

[source,https]
----
GET https://love-back.kro.kr/v1/members(아무 엔드포인트에 요청을 보내도 됨)
----

응답
----
{
accessToken: 엑세스토큰값
}
----
3 changes: 3 additions & 0 deletions api/src/docs/asciidoc/index.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,9 @@ include::api/common/http-status-code.adoc[]
== Login
include::api/login/login.adoc[]

== Token
include::api/login/token.adoc[]

[[Member]]
== Member

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,14 @@
import com.lovely4k.backend.common.sessionuser.LoginUser;
import com.lovely4k.backend.common.sessionuser.SessionUser;
import com.lovely4k.backend.diary.controller.request.DiaryDeleteRequest;
import com.lovely4k.backend.diary.controller.request.WebDiaryEditRequest;
import com.lovely4k.backend.diary.controller.request.WebDiaryCreateRequest;
import com.lovely4k.backend.diary.controller.request.WebDiaryEditRequest;
import com.lovely4k.backend.diary.service.DiaryQueryService;
import com.lovely4k.backend.diary.service.DiaryService;
import com.lovely4k.backend.diary.service.response.DiaryDetailResponse;
import com.lovely4k.backend.diary.service.response.DiaryListByMarkerResponse;
import com.lovely4k.backend.diary.service.response.WebDiaryListByMarkerResponse;
import com.lovely4k.backend.diary.service.response.DiaryListInGridResponse;
import com.lovely4k.backend.diary.service.response.DiaryListResponse;
import com.lovely4k.backend.diary.service.response.WebDiaryDetailResponse;
import com.lovely4k.backend.diary.service.response.WebDiaryListResponse;
import com.lovely4k.backend.location.Category;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
Expand All @@ -37,6 +38,7 @@
public class DiaryController {

private final DiaryService diaryService;
private final DiaryQueryService diaryQueryService;

private static final String DETAIL = "get detail information of diary";
private static final String EDIT = "edit diary";
Expand All @@ -63,25 +65,25 @@ public ResponseEntity<ApiResponse<Void>> createDiary(

@SneakyThrows
@GetMapping("/{id}")
public ResponseEntity<ApiResponse<DiaryDetailResponse>> getDiaryDetail(
public ResponseEntity<ApiResponse<WebDiaryDetailResponse>> getDiaryDetail(
@PathVariable Long id,
@LoginUser SessionUser sessionUser
) {

return ApiResponse.ok(diaryService.findDiaryDetail(id, sessionUser.coupleId(), sessionUser.memberId()),
return ApiResponse.ok(diaryQueryService.findDiaryDetail(id, sessionUser.coupleId(), sessionUser.memberId()),
linkTo(methodOn(DiaryController.class).getDiaryDetail(id, sessionUser)).withSelfRel(),
linkTo(DiaryController.class.getMethod("editDiary", Long.class, List.class, WebDiaryEditRequest.class, SessionUser.class)).withRel(EDIT),
linkTo(DiaryController.class).slash(id).withRel(DELETE)
);
}
@SneakyThrows
@GetMapping
public ResponseEntity<ApiResponse<Page<DiaryListResponse>>> getDiaryList(
public ResponseEntity<ApiResponse<Page<WebDiaryListResponse>>> getDiaryList(
@LoginUser SessionUser sessionUser,
@RequestParam(required = false) Category category,
@PageableDefault(size = 10, sort = "createdDate", direction = Sort.Direction.DESC) Pageable pageable
) {
return ApiResponse.ok(diaryService.findDiaryList(sessionUser.coupleId(), category, pageable),
return ApiResponse.ok(diaryQueryService.findDiaryList(sessionUser.coupleId(), category, pageable),
linkTo(DiaryController.class.getMethod("getDiaryDetail", Long.class, SessionUser.class)).withRel(DETAIL),
linkTo(DiaryController.class.getMethod("editDiary", Long.class, List.class, WebDiaryEditRequest.class, SessionUser.class)).withRel(EDIT),
linkTo(DiaryController.class.getMethod("deleteDiary", Long.class, SessionUser.class)).withRel(DELETE)
Expand All @@ -90,11 +92,11 @@ public ResponseEntity<ApiResponse<Page<DiaryListResponse>>> getDiaryList(

@SneakyThrows
@GetMapping("/marker/{kakaoMapId}")
public ResponseEntity<ApiResponse<DiaryListByMarkerResponse>> getDiaryListByMarker(
public ResponseEntity<ApiResponse<WebDiaryListByMarkerResponse>> getDiaryListByMarker(
@PathVariable Long kakaoMapId,
@LoginUser SessionUser sessionUser
) {
return ApiResponse.ok(diaryService.findDiaryListByMarker(kakaoMapId, sessionUser.coupleId()),
return ApiResponse.ok(diaryQueryService.findDiaryListByMarker(kakaoMapId, sessionUser.coupleId()),
linkTo(DiaryController.class.getMethod("getDiaryDetail", Long.class, SessionUser.class)).withRel(DETAIL) // NOSONAR
);
}
Expand Down Expand Up @@ -122,7 +124,7 @@ public ResponseEntity<ApiResponse<DiaryListInGridResponse>> getDiaryListInGrid(
@LoginUser SessionUser sessionUser
) {

return ApiResponse.ok(diaryService.findDiaryListInGrid(rLatitude, rLongitude, lLatitude, lLongitude, sessionUser.coupleId()));
return ApiResponse.ok(diaryQueryService.findDiaryListInGrid(rLatitude, rLongitude, lLatitude, lLongitude, sessionUser.coupleId()));
}

@DeleteMapping("/{id}")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,12 +25,10 @@ public record WebDiaryEditRequest(
@EnumValue(enumClass = Category.class, message = "invalid category", ignoreCase = true)
String category,
@NotBlank(message = "text of diary must not be null and empty")
String myText,
@NotBlank(message = "text of diary must not be null and empty")
String opponentText,
String text,
List<String> images
) {
public DiaryEditRequest toServiceRequest() {
return new DiaryEditRequest(score, datingDay, category, myText, opponentText, images);
return new DiaryEditRequest(score, datingDay, category, text, images);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package com.lovely4k.backend.diary.service;

import com.lovely4k.backend.diary.DiaryQueryRepository;
import com.lovely4k.backend.diary.service.response.*;
import com.lovely4k.backend.location.Category;
import lombok.RequiredArgsConstructor;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.math.BigDecimal;

@RequiredArgsConstructor
@Transactional(readOnly = true)
@Service
public class DiaryQueryService {

private final DiaryQueryRepository repository;

public WebDiaryDetailResponse findDiaryDetail(Long diaryId, Long coupleId, Long memberId) {

return WebDiaryDetailResponse.from(repository.findDiaryDetail(diaryId, coupleId, memberId));
}

public Page<WebDiaryListResponse> findDiaryList(Long coupleId, Category category, Pageable pageable) {

return WebDiaryListResponse.from(repository.findDiaryList(coupleId, category, pageable));
}

public WebDiaryListByMarkerResponse findDiaryListByMarker(Long kakaoMapId, Long coupleId) {

return WebDiaryListByMarkerResponse.from(repository.findByMarker(kakaoMapId, coupleId));
}

public DiaryListInGridResponse findDiaryListInGrid(BigDecimal rLatitude, BigDecimal rLongitude, BigDecimal lLatitude, BigDecimal lLongitude, Long coupleId) {

return new DiaryListInGridResponse(repository.findDiaryListInGrid(rLatitude, rLongitude, lLatitude, lLongitude, coupleId)
.stream().map(DiaryGridResponse::from).toList());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,26 +6,21 @@
import com.lovely4k.backend.couple.IncreaseTemperatureEvent;
import com.lovely4k.backend.couple.repository.CoupleRepository;
import com.lovely4k.backend.diary.Diary;
import com.lovely4k.backend.diary.DiaryRepositoryAdapter;
import com.lovely4k.backend.diary.DiaryRepository;
import com.lovely4k.backend.diary.Photos;
import com.lovely4k.backend.diary.controller.request.DiaryDeleteRequest;
import com.lovely4k.backend.diary.service.request.DiaryCreateRequest;
import com.lovely4k.backend.diary.service.request.DiaryEditRequest;
import com.lovely4k.backend.diary.service.response.*;
import com.lovely4k.backend.location.Category;
import com.lovely4k.backend.member.Member;
import com.lovely4k.backend.member.Sex;
import com.lovely4k.backend.member.repository.MemberRepository;
import jakarta.persistence.EntityNotFoundException;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

Expand All @@ -36,7 +31,7 @@
public class DiaryService {

private final MemberRepository memberRepository;
private final DiaryRepositoryAdapter diaryRepositoryAdapter;
private final DiaryRepository diaryRepository;
private final CoupleRepository coupleRepository;
private final ImageUploader imageUploader;

Expand All @@ -48,14 +43,15 @@ public Long createDiary(List<MultipartFile> multipartFileList, DiaryCreateReques
List<String> uploadedImageUrls = uploadImages(multipartFileList);
Diary diary = diaryCreateRequest.toEntity(member);
diary.addPhoto(Photos.create(uploadedImageUrls));
Diary savedDiary = diaryRepositoryAdapter.save(diary);
Diary savedDiary = diaryRepository.save(diary);

Events.raise(new IncreaseTemperatureEvent(member.getCoupleId()));
return savedDiary.getId();
}

private Member validateMemberId(Long memberId) {
return memberRepository.findById(memberId).orElseThrow(
() -> new EntityNotFoundException("invalid member id")
() -> new EntityNotFoundException("invalid member id")
);
}

Expand All @@ -68,50 +64,11 @@ private void checkCountOfImage(List<MultipartFile> multipartFileList) {
}
}



public DiaryDetailResponse findDiaryDetail(Long diaryId, Long coupleId, Long memberId) {
Diary diary = validateDiaryId(diaryId);
diary.checkAuthority(coupleId);
Couple couple = validateCoupleId(coupleId);
Sex sex = getCoupleRole(memberId, couple);
return DiaryDetailResponse.of(diary, sex);
}

private Diary validateDiaryId(Long diaryId) {
return diaryRepositoryAdapter.findById(diaryId).orElseThrow(
() -> new EntityNotFoundException("invalid diary id")
return diaryRepository.findById(diaryId).orElseThrow(
() -> new EntityNotFoundException("invalid diary id")
);
}
public Page<DiaryListResponse> findDiaryList(Long coupleId, Category category, Pageable pageable) {
Page<Diary> pageDiary = diaryRepositoryAdapter.findDiaryList(coupleId, category, pageable);

if (pageDiary.getContent().isEmpty()) {
return Page.empty();
}
return pageDiary.map(DiaryListResponse::from);
}

public DiaryListByMarkerResponse findDiaryListByMarker(Long kakaoMapId, Long coupleId) {
List<Diary> diaries = diaryRepositoryAdapter.findByMarker(kakaoMapId, coupleId);
if (diaries.isEmpty()) {
return DiaryListByMarkerResponse.emptyValue();
} else {
return DiaryListByMarkerResponse.from(
diaries.get(0),
diaries.stream().map(
DiaryMarkerResponse::from
).toList());
}
}

public DiaryListInGridResponse findDiaryListInGrid(BigDecimal rLatitude, BigDecimal rLongitude, BigDecimal lLatitude, BigDecimal lLongitude, Long coupleId) {
List<Diary> diaryList = diaryRepositoryAdapter.findDiaryList(rLatitude, rLongitude, lLatitude, lLongitude, coupleId);

return new DiaryListInGridResponse(diaryList.stream().map(
DiaryGridResponse::from
).toList());
}

@Transactional
public void editDiary(Long diaryId, List<MultipartFile> multipartFileList, DiaryEditRequest request, Long coupleId, Long memberId) {
Expand All @@ -125,7 +82,7 @@ public void editDiary(Long diaryId, List<MultipartFile> multipartFileList, Diary
deleteImageFromS3(request, diary);
Sex sex = getCoupleRole(memberId, validateCoupleId(coupleId));

diary.update(sex, request.score(), request.datingDay(), request.category(), request.myText(), request.opponentText(), editedImageUrls);
diary.update(sex, request.score(), request.datingDay(), request.category(), request.text(), editedImageUrls);
}

private void addRemainImages(DiaryEditRequest request, List<String> editedImageUrls) {
Expand All @@ -138,7 +95,11 @@ private void addUploadedImages(List<MultipartFile> multipartFileList, List<Strin
editedImageUrls.addAll(uploadImages(multipartFileList));
}

private void checkImages(List<String> editedImageUrls, List<MultipartFile> multipartFiles) {
private void checkImages(List<String> editedImageUrls, List<MultipartFile> multipartFiles) {
if (multipartFiles == null) {
return;
}

if (editedImageUrls.size() + multipartFiles.size() > 5) {
throw new IllegalArgumentException("이미지는 최대 5개를 넘길 수 없습니다.");
}
Expand Down Expand Up @@ -167,7 +128,7 @@ private Couple validateCoupleId(Long coupleId) {
);
}

private Sex getCoupleRole(Long memberId, Couple couple) {
private Sex getCoupleRole(Long memberId, Couple couple) {
if (couple.getBoyId().equals(memberId)) {
return Sex.MALE;
} else {
Expand All @@ -179,7 +140,7 @@ private Sex getCoupleRole(Long memberId, Couple couple) {
public void deleteDiary(Long diaryId, Long coupleId) {
Diary diary = validateDiaryId(diaryId);
diary.checkAuthority(coupleId);
diaryRepositoryAdapter.delete(diary);
diaryRepository.delete(diary);
}

@Transactional
Expand All @@ -192,7 +153,7 @@ public void deleteDiaries(DiaryDeleteRequest request, Long coupleId) {
}
).toList();

diaryRepositoryAdapter.deleteAll(diaries);
diaryRepository.deleteAll(diaries);
}

private List<String> uploadImages(List<MultipartFile> multipartFileList) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,7 @@ public record DiaryEditRequest(
Integer score,
LocalDate datingDay,
String category,
String myText,
String opponentText,
String text,
List<String> images
) {
}

This file was deleted.

Loading

0 comments on commit 5194322

Please sign in to comment.