Skip to content

Commit

Permalink
[merge] 불필요한 API 제거, 서비스 계층 올리기 (#112)
Browse files Browse the repository at this point in the history
불필요한 API 제거, 서비스 계층 올리기
  • Loading branch information
jinkonu authored Oct 7, 2024
2 parents bf4bd37 + 957d2d0 commit a3d5e49
Show file tree
Hide file tree
Showing 54 changed files with 456 additions and 1,519 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import org.recordy.server.common.domain.JpaMetaInfoEntity;
import org.recordy.server.record.domain.Record;
import org.recordy.server.record.domain.RecordEntity;
import org.recordy.server.user.domain.User;
import org.recordy.server.user.domain.UserEntity;

@NoArgsConstructor(access = AccessLevel.PROTECTED)
Expand Down Expand Up @@ -52,7 +53,7 @@ public Bookmark toDomain() {
return Bookmark.builder()
.id(id)
.record(Record.from(record))
.user(user.toDomain())
.user(User.from(user))
.createdAt(createdAt)
.build();
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,17 +1,10 @@
package org.recordy.server.bookmark.service;

import java.util.List;
import org.recordy.server.bookmark.domain.Bookmark;
import org.recordy.server.record.domain.Record;
import org.springframework.data.domain.Slice;

public interface BookmarkService {

// command
boolean bookmark(long userId, long recordId);

// query
List<Boolean> findBookmarks(long userId, List<Record> records);
Long countBookmarks(long userId);
Slice<Bookmark> getBookmarks(long userId, Long cursorId, int size);
}
Original file line number Diff line number Diff line change
@@ -1,19 +1,13 @@
package org.recordy.server.bookmark.service.impl;

import java.util.List;
import java.util.stream.Collectors;
import lombok.RequiredArgsConstructor;
import org.recordy.server.bookmark.domain.Bookmark;
import org.recordy.server.bookmark.repository.BookmarkRepository;
import org.recordy.server.bookmark.service.BookmarkService;
import org.recordy.server.common.message.ErrorMessage;
import org.recordy.server.record.domain.Record;
import org.recordy.server.record.exception.RecordException;
import org.recordy.server.record.repository.RecordRepository;
import org.recordy.server.user.domain.User;
import org.recordy.server.user.repository.UserRepository;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Slice;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

Expand Down Expand Up @@ -45,21 +39,9 @@ public boolean bookmark(long userId, long recordId) {
return true;
}

@Override
public List<Boolean> findBookmarks(long userId, List<Record> records) {
return records.stream()
.map(record -> bookmarkRepository.existsByUserIdAndRecordId(userId, record.getId()))
.collect(Collectors.toList());
}

@Override
public Long countBookmarks(long userId) {
return bookmarkRepository.countByUserId(userId);
}

@Override
public Slice<Bookmark> getBookmarks(long userId, Long cursorId, int size) {
return bookmarkRepository.findAllByBookmarksOrderByIdDesc(userId, cursorId, PageRequest.ofSize(size));
}
}

Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package org.recordy.server.common.dto.response;

import java.util.List;
import java.util.function.Function;
import org.springframework.data.domain.Slice;

public record CursorBasePaginatedResponse<T>(
Expand All @@ -10,18 +9,11 @@ public record CursorBasePaginatedResponse<T>(
List<T> content
) {

public static <T> CursorBasePaginatedResponse<T> of(Slice<T> slice, Function<T, Long> idExtractor) {
Long nextCursor = null;
List<T> content = slice.getContent();

if (!content.isEmpty()) {
nextCursor = idExtractor.apply(content.get(content.size() - 1));
}

public static <T extends CursorResponse> CursorBasePaginatedResponse<T> of(Slice<T> slice) {
return new CursorBasePaginatedResponse<>(
nextCursor,
slice.getContent().isEmpty() ? null : slice.getContent().get(slice.getSize() - 1).getId(),
slice.hasNext(),
content
slice.getContent()
);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package org.recordy.server.common.dto.response;

public interface CursorResponse {

long getId();
}
138 changes: 7 additions & 131 deletions src/main/java/org/recordy/server/record/controller/RecordApi.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,10 @@
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.recordy.server.common.dto.response.CursorBasePaginatedResponse;
import org.recordy.server.common.dto.response.PaginatedResponse;
import org.recordy.server.auth.security.resolver.UserId;
import org.recordy.server.common.message.ErrorMessage;
import org.recordy.server.record.controller.dto.request.RecordCreateRequest;
import org.recordy.server.record.controller.dto.response.BookmarkedRecord;
import org.recordy.server.record.controller.dto.response.RecordGetResponse;
import org.recordy.server.record.controller.dto.response.RecordInfoWithBookmark;
import org.springframework.data.domain.Slice;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
Expand Down Expand Up @@ -76,7 +73,7 @@ public interface RecordApi {
)
}
)
public ResponseEntity<Void> createRecord(
public ResponseEntity<Void> create(
@UserId Long uploaderId,
@RequestBody RecordCreateRequest request);

Expand Down Expand Up @@ -121,7 +118,7 @@ public ResponseEntity<Void> createRecord(
)
}
)
ResponseEntity<Void> deleteRecord(
ResponseEntity<Void> delete(
@UserId Long uploaderId,
@PathVariable Long recordId
);
Expand Down Expand Up @@ -162,7 +159,7 @@ ResponseEntity<Void> deleteRecord(
)
}
)
ResponseEntity<CursorBasePaginatedResponse<RecordGetResponse>> getRecordsByPlaceId(
ResponseEntity<CursorBasePaginatedResponse<RecordGetResponse>> getAllByPlace(
@UserId Long userId,
@RequestParam Long placeId,
@RequestParam(required = false) Long cursorId,
Expand Down Expand Up @@ -205,133 +202,13 @@ ResponseEntity<CursorBasePaginatedResponse<RecordGetResponse>> getRecordsByPlace
)
}
)
ResponseEntity<CursorBasePaginatedResponse<RecordInfoWithBookmark>> getRecentRecordInfosWithBookmarksByUser(
ResponseEntity<CursorBasePaginatedResponse<RecordGetResponse>> getAllByUser(
@UserId Long userId,
@PathVariable Long otherUserId,
@RequestParam(required = false) Long cursorId,
@RequestParam(required = false, defaultValue = "10") int size
);

@Operation(
summary = "레코드 시청 API",
description = "사용자가 특정 레코드를 시청했음을 기록합니다.",
responses = {
@ApiResponse(
responseCode = "200",
description = "요청이 성공적으로 처리되었습니다.",
content = @Content
),
@ApiResponse(
responseCode = "404",
description = "Not Found - 존재하지 않는 사용자 또는 기록입니다.",
content = @Content(
mediaType = MediaType.APPLICATION_JSON_VALUE,
schema = @Schema(
implementation = ErrorMessage.class
)
)
),
@ApiResponse(
responseCode = "500",
description = "Internal Server Error - 서버 내부 오류입니다.",
content = @Content(
mediaType = MediaType.APPLICATION_JSON_VALUE,
schema = @Schema(
implementation = ErrorMessage.class
)
)
)
}
)
ResponseEntity<Void> watch(
@UserId Long userId,
@PathVariable Long recordId
);

@Operation(
summary = "인기 레코드 리스트 조회 API",
description = "사용자가 인기 레코드를 키워드와 함께 조회합니다. 키워드가 없으면 전체 인기 레코드를 조회합니다.",
responses = {
@ApiResponse(
responseCode = "200",
description = "요청이 성공적으로 처리되었습니다.",
content = @Content(
mediaType = MediaType.APPLICATION_JSON_VALUE,
schema = @Schema(
implementation = Slice.class
)
)
),
@ApiResponse(
responseCode = "401",
description = "Unauthorized - 인증이 필요합니다.",
content = @Content(
mediaType = MediaType.APPLICATION_JSON_VALUE,
schema = @Schema(
implementation = ErrorMessage.class
)
)
),
@ApiResponse(
responseCode = "500",
description = "Internal Server Error - 서버 내부 오류입니다.",
content = @Content(
mediaType = MediaType.APPLICATION_JSON_VALUE,
schema = @Schema(
implementation = ErrorMessage.class
)
)
)
}
)
ResponseEntity<PaginatedResponse<RecordInfoWithBookmark>> getFamousRecordInfoWithBookmarks(
@UserId Long userId,
@RequestParam(required = false, defaultValue = "0") int pageNumber,
@RequestParam(required = false, defaultValue = "10") int pageSize
) ;

@Operation(
summary = "최근 레코드 리스트 조회 API",
description = "사용자가 최근 레코드를 키워드와 함께 조회합니다. 키워드가 없으면 전체 최근 레코드를 조회합니다.",
responses = {
@ApiResponse(
responseCode = "200",
description = "요청이 성공적으로 처리되었습니다.",
content = @Content(
mediaType = MediaType.APPLICATION_JSON_VALUE,
schema = @Schema(
implementation = Slice.class
)
)
),
@ApiResponse(
responseCode = "401",
description = "Unauthorized - 인증이 필요합니다.",
content = @Content(
mediaType = MediaType.APPLICATION_JSON_VALUE,
schema = @Schema(
implementation = ErrorMessage.class
)
)
),
@ApiResponse(
responseCode = "500",
description = "Internal Server Error - 서버 내부 오류입니다.",
content = @Content(
mediaType = MediaType.APPLICATION_JSON_VALUE,
schema = @Schema(
implementation = ErrorMessage.class
)
)
)
}
)
ResponseEntity<CursorBasePaginatedResponse<RecordInfoWithBookmark>> getRecentRecordInfosWithBookmarks(
@UserId Long userId,
@RequestParam(required = false) Long cursorId,
@RequestParam(required = false, defaultValue = "10") int size
);

@Operation(
summary = "구독 레코드 리스트 조회 API",
description = "구독 중인 유저의 레코드 리스트를 최신순으로 반환합니다.",
Expand Down Expand Up @@ -368,9 +245,8 @@ ResponseEntity<CursorBasePaginatedResponse<RecordInfoWithBookmark>> getRecentRec
)
}
)
ResponseEntity<CursorBasePaginatedResponse<RecordInfoWithBookmark>> getSubscribingRecordInfosWithBookmarks(
ResponseEntity<List<RecordGetResponse>> getRandomBySubscription(
@UserId Long userId,
@RequestParam(required = false) Long cursorId,
@RequestParam(required = false, defaultValue = "10") int size
);

Expand Down Expand Up @@ -410,7 +286,7 @@ ResponseEntity<CursorBasePaginatedResponse<RecordInfoWithBookmark>> getSubscribi
)
}
)
ResponseEntity<List<RecordInfoWithBookmark>> getTotalRecordInfosWithBookmarks(
ResponseEntity<List<RecordGetResponse>> getRandom(
@UserId Long userId,
@RequestParam(required = false, defaultValue = "10") int size
);
Expand Down Expand Up @@ -451,7 +327,7 @@ ResponseEntity<List<RecordInfoWithBookmark>> getTotalRecordInfosWithBookmarks(
)
}
)
public ResponseEntity<CursorBasePaginatedResponse<BookmarkedRecord>> getBookmarkedRecords(
public ResponseEntity<CursorBasePaginatedResponse<RecordGetResponse>> getAllBookmarked(
@UserId Long userId,
@RequestParam(required = false) Long cursorId,
@RequestParam(required = false, defaultValue = "10") int size
Expand Down
Loading

0 comments on commit a3d5e49

Please sign in to comment.