diff --git a/src/main/java/com/example/demo/domain/board/api/AdminBoardApi.java b/src/main/java/com/example/demo/application/board/api/AdminBoardApi.java similarity index 95% rename from src/main/java/com/example/demo/domain/board/api/AdminBoardApi.java rename to src/main/java/com/example/demo/application/board/api/AdminBoardApi.java index b4e309fe..b0caab30 100644 --- a/src/main/java/com/example/demo/domain/board/api/AdminBoardApi.java +++ b/src/main/java/com/example/demo/application/board/api/AdminBoardApi.java @@ -1,4 +1,4 @@ -package com.example.demo.domain.board.api; +package com.example.demo.application.board.api; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.PathVariable; diff --git a/src/main/java/com/example/demo/domain/board/api/BoardApi.java b/src/main/java/com/example/demo/application/board/api/BoardApi.java similarity index 92% rename from src/main/java/com/example/demo/domain/board/api/BoardApi.java rename to src/main/java/com/example/demo/application/board/api/BoardApi.java index 54bc65f7..1ddf2342 100644 --- a/src/main/java/com/example/demo/domain/board/api/BoardApi.java +++ b/src/main/java/com/example/demo/application/board/api/BoardApi.java @@ -1,4 +1,4 @@ -package com.example.demo.domain.board.api; +package com.example.demo.application.board.api; @@ -10,14 +10,13 @@ import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestParam; - -import com.example.demo.domain.board.domain.dto.request.BoardCreateRequest; -import com.example.demo.domain.board.domain.dto.request.BoardUpdateRequest; -import com.example.demo.domain.board.domain.dto.response.BoardInfoResponse; -import com.example.demo.domain.board.domain.dto.response.BoardTitleInfoResponse; -import com.example.demo.domain.board.domain.dto.response.DraftBoardTitleResponse; -import com.example.demo.domain.board.domain.dto.vo.BoardType; + +import com.example.demo.application.board.dto.request.BoardCreateRequest; +import com.example.demo.application.board.dto.request.BoardUpdateRequest; +import com.example.demo.application.board.dto.response.BoardInfoResponse; +import com.example.demo.application.board.dto.response.BoardTitleInfoResponse; +import com.example.demo.application.board.dto.response.DraftBoardTitleResponse; +import com.example.demo.application.board.dto.vo.BoardType; import com.example.demo.global.base.dto.ResponseBody; import com.example.demo.global.base.dto.page.GlobalPageResponse; import com.example.demo.global.base.exception.ErrorCode; diff --git a/src/main/java/com/example/demo/domain/board/api/BoardFileApi.java b/src/main/java/com/example/demo/application/board/api/BoardFileApi.java similarity index 95% rename from src/main/java/com/example/demo/domain/board/api/BoardFileApi.java rename to src/main/java/com/example/demo/application/board/api/BoardFileApi.java index 059bf348..7df6c2f1 100644 --- a/src/main/java/com/example/demo/domain/board/api/BoardFileApi.java +++ b/src/main/java/com/example/demo/application/board/api/BoardFileApi.java @@ -1,12 +1,12 @@ -package com.example.demo.domain.board.api; +package com.example.demo.application.board.api; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; -import com.example.demo.domain.board.domain.dto.request.FileRequest; -import com.example.demo.domain.board.domain.dto.request.PresignedUrlRequest; +import com.example.demo.application.board.dto.request.FileRequest; +import com.example.demo.application.board.dto.request.PresignedUrlRequest; import com.example.demo.global.base.dto.ResponseBody; import com.example.demo.global.base.exception.ErrorCode; import com.example.demo.global.config.swagger.ApiErrorResponseExplanation; diff --git a/src/main/java/com/example/demo/domain/board/api/CategoryApi.java b/src/main/java/com/example/demo/application/board/api/CategoryApi.java similarity index 85% rename from src/main/java/com/example/demo/domain/board/api/CategoryApi.java rename to src/main/java/com/example/demo/application/board/api/CategoryApi.java index dec02136..fcc7f031 100644 --- a/src/main/java/com/example/demo/domain/board/api/CategoryApi.java +++ b/src/main/java/com/example/demo/application/board/api/CategoryApi.java @@ -1,6 +1,4 @@ -package com.example.demo.domain.board.api; - -import static com.example.demo.global.base.dto.ResponseUtil.*; +package com.example.demo.application.board.api; import java.util.List; @@ -9,14 +7,11 @@ import org.springframework.data.domain.Sort; import org.springframework.data.web.PageableDefault; import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; -import com.example.demo.domain.board.domain.dto.response.BoardTitleInfoResponse; +import com.example.demo.application.board.dto.response.BoardTitleInfoResponse; import com.example.demo.global.base.dto.ResponseBody; import com.example.demo.global.base.dto.page.GlobalPageResponse; -import com.example.demo.global.base.exception.ErrorCode; -import com.example.demo.global.config.swagger.ApiErrorResponseExplanation; import com.example.demo.global.config.swagger.ApiResponseExplanations; import com.example.demo.global.config.swagger.ApiSuccessResponseExplanation; diff --git a/src/main/java/com/example/demo/domain/board/api/LikeApi.java b/src/main/java/com/example/demo/application/board/api/LikeApi.java similarity index 82% rename from src/main/java/com/example/demo/domain/board/api/LikeApi.java rename to src/main/java/com/example/demo/application/board/api/LikeApi.java index 0531b412..7e5ee762 100644 --- a/src/main/java/com/example/demo/domain/board/api/LikeApi.java +++ b/src/main/java/com/example/demo/application/board/api/LikeApi.java @@ -1,21 +1,14 @@ -package com.example.demo.domain.board.api; +package com.example.demo.application.board.api; -import static com.example.demo.global.base.dto.ResponseUtil.*; - import org.springdoc.core.annotations.ParameterObject; -import org.springdoc.core.converters.models.PageableAsQueryParam; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; import org.springframework.data.web.PageableDefault; import org.springframework.http.ResponseEntity; -import org.springframework.security.access.prepost.PreAuthorize; -import org.springframework.security.core.parameters.P; -import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; -import com.example.demo.domain.board.domain.dto.response.BoardTitleInfoResponse; -import com.example.demo.global.aop.AssignUserId; +import com.example.demo.application.board.dto.response.BoardTitleInfoResponse; import com.example.demo.global.base.dto.ResponseBody; import com.example.demo.global.base.dto.page.GlobalPageResponse; import com.example.demo.global.base.exception.ErrorCode; @@ -25,7 +18,6 @@ import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; -import io.swagger.v3.oas.annotations.media.Schema; public interface LikeApi { diff --git a/src/main/java/com/example/demo/domain/board/controller/AdminBoardController.java b/src/main/java/com/example/demo/application/board/controller/AdminBoardController.java similarity index 90% rename from src/main/java/com/example/demo/domain/board/controller/AdminBoardController.java rename to src/main/java/com/example/demo/application/board/controller/AdminBoardController.java index 152501ff..54e554ca 100644 --- a/src/main/java/com/example/demo/domain/board/controller/AdminBoardController.java +++ b/src/main/java/com/example/demo/application/board/controller/AdminBoardController.java @@ -1,4 +1,4 @@ -package com.example.demo.domain.board.controller; +package com.example.demo.application.board.controller; import static com.example.demo.global.base.dto.ResponseUtil.*; @@ -9,7 +9,7 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; -import com.example.demo.domain.board.api.AdminBoardApi; +import com.example.demo.application.board.api.AdminBoardApi; import com.example.demo.domain.board.service.usecase.BoardAdminUseCase; import com.example.demo.global.base.dto.ResponseBody; diff --git a/src/main/java/com/example/demo/domain/board/controller/BoardController.java b/src/main/java/com/example/demo/application/board/controller/BoardController.java similarity index 76% rename from src/main/java/com/example/demo/domain/board/controller/BoardController.java rename to src/main/java/com/example/demo/application/board/controller/BoardController.java index bd437b31..06f0a4af 100644 --- a/src/main/java/com/example/demo/domain/board/controller/BoardController.java +++ b/src/main/java/com/example/demo/application/board/controller/BoardController.java @@ -1,16 +1,17 @@ -package com.example.demo.domain.board.controller; +package com.example.demo.application.board.controller; import static com.example.demo.global.base.dto.ResponseUtil.*; -import com.example.demo.domain.board.api.BoardApi; -import com.example.demo.domain.board.domain.dto.request.BoardCreateRequest; -import com.example.demo.domain.board.domain.dto.request.BoardUpdateRequest; -import com.example.demo.domain.board.domain.dto.response.BoardInfoResponse; -import com.example.demo.domain.board.domain.dto.response.BoardTitleInfoResponse; -import com.example.demo.domain.board.domain.dto.response.DraftBoardTitleResponse; -import com.example.demo.domain.board.domain.dto.vo.BoardType; -import com.example.demo.domain.board.service.usecase.BoardUseCase; +import com.example.demo.application.board.api.BoardApi; +import com.example.demo.application.board.dto.request.BoardCreateRequest; +import com.example.demo.application.board.dto.request.BoardUpdateRequest; +import com.example.demo.application.board.dto.response.BoardInfoResponse; +import com.example.demo.application.board.dto.response.BoardTitleInfoResponse; +import com.example.demo.application.board.dto.response.DraftBoardTitleResponse; +import com.example.demo.application.board.dto.vo.BoardType; +import com.example.demo.domain.board.service.entity.BoardInfo; +import com.example.demo.domain.board.service.usecase.BoardService; import com.example.demo.global.aop.AssignUserId; import com.example.demo.global.base.dto.ResponseBody; import com.example.demo.global.base.dto.page.GlobalPageResponse; @@ -29,14 +30,20 @@ @RequestMapping("/api") @RequiredArgsConstructor public class BoardController implements BoardApi { - private final BoardUseCase boardUsecase; + private final BoardService boardUsecase; @AssignUserId @PreAuthorize("hasRole('ROLE_SEMINAR_WRITER') and isAuthenticated()") @PostMapping("/v1/boards") public ResponseEntity> saveDraftSeminar(Long userId, - @RequestBody @Valid BoardCreateRequest boardCreateRequest) { - return ResponseEntity.ok(createSuccessResponse(boardUsecase.saveDraftBoard(userId, boardCreateRequest))); + @RequestBody @Valid BoardCreateRequest boardCreateRequest) { + + return ResponseEntity.ok(createSuccessResponse( + BoardInfoResponse.of( + boardUsecase.saveDraftBoard( + userId, + boardCreateRequest.toBoardCore(), + boardCreateRequest.toBoardCategoryNames())))); } @GetMapping("/v1/boards/{boardId}") diff --git a/src/main/java/com/example/demo/domain/board/controller/BoardFileController.java b/src/main/java/com/example/demo/application/board/controller/BoardFileController.java similarity index 91% rename from src/main/java/com/example/demo/domain/board/controller/BoardFileController.java rename to src/main/java/com/example/demo/application/board/controller/BoardFileController.java index 2b42dd5c..d5a4095d 100644 --- a/src/main/java/com/example/demo/domain/board/controller/BoardFileController.java +++ b/src/main/java/com/example/demo/application/board/controller/BoardFileController.java @@ -1,4 +1,4 @@ -package com.example.demo.domain.board.controller; +package com.example.demo.application.board.controller; import static com.example.demo.global.base.dto.ResponseUtil.*; @@ -13,9 +13,9 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; -import com.example.demo.domain.board.api.BoardFileApi; -import com.example.demo.domain.board.domain.dto.request.FileRequest; -import com.example.demo.domain.board.domain.dto.request.PresignedUrlRequest; +import com.example.demo.application.board.api.BoardFileApi; +import com.example.demo.application.board.dto.request.FileRequest; +import com.example.demo.application.board.dto.request.PresignedUrlRequest; import com.example.demo.domain.board.service.usecase.BoardFileUseCase; import com.example.demo.global.aop.AssignUserId; import com.example.demo.global.base.dto.ResponseBody; diff --git a/src/main/java/com/example/demo/domain/board/controller/CategoryController.java b/src/main/java/com/example/demo/application/board/controller/CategoryController.java similarity index 88% rename from src/main/java/com/example/demo/domain/board/controller/CategoryController.java rename to src/main/java/com/example/demo/application/board/controller/CategoryController.java index d026778a..46184b8c 100644 --- a/src/main/java/com/example/demo/domain/board/controller/CategoryController.java +++ b/src/main/java/com/example/demo/application/board/controller/CategoryController.java @@ -1,4 +1,4 @@ -package com.example.demo.domain.board.controller; +package com.example.demo.application.board.controller; import static com.example.demo.global.base.dto.ResponseUtil.*; @@ -13,8 +13,8 @@ import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; -import com.example.demo.domain.board.api.CategoryApi; -import com.example.demo.domain.board.domain.dto.response.BoardTitleInfoResponse; +import com.example.demo.application.board.api.CategoryApi; +import com.example.demo.application.board.dto.response.BoardTitleInfoResponse; import com.example.demo.domain.board.service.usecase.CategoryUseCase; import com.example.demo.global.base.dto.ResponseBody; import com.example.demo.global.base.dto.page.GlobalPageResponse; diff --git a/src/main/java/com/example/demo/domain/board/controller/LikeController.java b/src/main/java/com/example/demo/application/board/controller/LikeController.java similarity index 91% rename from src/main/java/com/example/demo/domain/board/controller/LikeController.java rename to src/main/java/com/example/demo/application/board/controller/LikeController.java index 7d1319c1..4a053ace 100644 --- a/src/main/java/com/example/demo/domain/board/controller/LikeController.java +++ b/src/main/java/com/example/demo/application/board/controller/LikeController.java @@ -1,4 +1,4 @@ -package com.example.demo.domain.board.controller; +package com.example.demo.application.board.controller; import static com.example.demo.global.base.dto.ResponseUtil.*; @@ -14,8 +14,8 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; -import com.example.demo.domain.board.api.LikeApi; -import com.example.demo.domain.board.domain.dto.response.BoardTitleInfoResponse; +import com.example.demo.application.board.api.LikeApi; +import com.example.demo.application.board.dto.response.BoardTitleInfoResponse; import com.example.demo.domain.board.service.usecase.LikeUseCase; import com.example.demo.global.aop.AssignUserId; import com.example.demo.global.base.dto.ResponseBody; diff --git a/src/main/java/com/example/demo/domain/board/domain/dto/request/BoardCreateRequest.java b/src/main/java/com/example/demo/application/board/dto/request/BoardCreateRequest.java similarity index 66% rename from src/main/java/com/example/demo/domain/board/domain/dto/request/BoardCreateRequest.java rename to src/main/java/com/example/demo/application/board/dto/request/BoardCreateRequest.java index 857e5bd1..58b4086f 100644 --- a/src/main/java/com/example/demo/domain/board/domain/dto/request/BoardCreateRequest.java +++ b/src/main/java/com/example/demo/application/board/dto/request/BoardCreateRequest.java @@ -1,32 +1,30 @@ -package com.example.demo.domain.board.domain.dto.request; +package com.example.demo.application.board.dto.request; import static com.example.demo.global.regex.S3UrlRegex.*; -import com.example.demo.domain.board.domain.dto.vo.BoardType; +import com.example.demo.application.board.dto.vo.BoardType; +import com.example.demo.domain.board.service.entity.BoardCategoryNames; +import com.example.demo.domain.board.service.entity.BoardCore; import com.example.demo.global.aop.valid.ValidEnum; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.annotation.Nullable; import jakarta.validation.constraints.*; -import lombok.Getter; -import lombok.NoArgsConstructor; import java.util.List; -@Getter -@NoArgsConstructor @Schema(description = "게시물 생성 요청") -public class BoardCreateRequest { +public record BoardCreateRequest ( @Schema(description = "게시물 제목", example = "게시물 제목") @NotBlank(message = "제목은 필수 항목입니다.") @Size(max = 50,message = "최대 제한 45글자 입니다.") - private String title; + String title, @Schema(description = "게시물 내용", example = "게시물 내용") @NotBlank(message = "게시물 내용은 필수 항목입니다.") - private String contents; + String contents, @Schema( description = "게시물 카테고리 이름 리스트", @@ -34,15 +32,30 @@ public class BoardCreateRequest { ) @Nullable @Size(max = 5,message = "카테고리는 최대 5개까지 가능합니다.") - private List categoryName; + List categoryName, @Schema(description = "게시물 태그", example = "SEMINAR") @ValidEnum(enumClass = BoardType.class,message = "태그는 'SEMINAR', 'NOTICE' 중 하나여야 합니다.") @NotNull(message = "태그는 필수 항목입니다.") - private BoardType boardType; + BoardType boardType, @Schema(description = "게시물 대표 이미지 URL", example = "https://kumoh-talk-bucket.s3.ap-northeast-2.amazonaws.com/board/15/image/54599f59-1d5b-4167-b9f7-96f84d3c452d/example.jpg") @NotBlank(message = "게시물 대표 이미지는 필수 항목입니다.") @Pattern(regexp = S3_BOARD_FILE_URL) - private String boardHeadImageUrl; + String boardHeadImageUrl +){ + public BoardCore toBoardCore(){ + return new BoardCore( + this.title, + this.contents, + this.boardType, + this.boardHeadImageUrl + ); + } + + public BoardCategoryNames toBoardCategoryNames() { + return new BoardCategoryNames( + this.categoryName + ); + } } diff --git a/src/main/java/com/example/demo/domain/board/domain/dto/request/BoardUpdateRequest.java b/src/main/java/com/example/demo/application/board/dto/request/BoardUpdateRequest.java similarity index 96% rename from src/main/java/com/example/demo/domain/board/domain/dto/request/BoardUpdateRequest.java rename to src/main/java/com/example/demo/application/board/dto/request/BoardUpdateRequest.java index ac9f29dd..1668ca45 100644 --- a/src/main/java/com/example/demo/domain/board/domain/dto/request/BoardUpdateRequest.java +++ b/src/main/java/com/example/demo/application/board/dto/request/BoardUpdateRequest.java @@ -1,4 +1,4 @@ -package com.example.demo.domain.board.domain.dto.request; +package com.example.demo.application.board.dto.request; import static com.example.demo.global.regex.S3UrlRegex.*; @@ -46,4 +46,5 @@ public class BoardUpdateRequest { @NotBlank(message = "게시물 대표 이미지는 필수 항목입니다.") @Pattern(regexp = S3_BOARD_FILE_URL) private String boardHeadImageUrl; + } diff --git a/src/main/java/com/example/demo/domain/board/domain/dto/request/FileRequest.java b/src/main/java/com/example/demo/application/board/dto/request/FileRequest.java similarity index 92% rename from src/main/java/com/example/demo/domain/board/domain/dto/request/FileRequest.java rename to src/main/java/com/example/demo/application/board/dto/request/FileRequest.java index 7ef57b59..11f7afd5 100644 --- a/src/main/java/com/example/demo/domain/board/domain/dto/request/FileRequest.java +++ b/src/main/java/com/example/demo/application/board/dto/request/FileRequest.java @@ -1,4 +1,4 @@ -package com.example.demo.domain.board.domain.dto.request; +package com.example.demo.application.board.dto.request; import static com.example.demo.global.regex.S3UrlRegex.*; diff --git a/src/main/java/com/example/demo/domain/board/domain/dto/request/PresignedUrlRequest.java b/src/main/java/com/example/demo/application/board/dto/request/PresignedUrlRequest.java similarity index 87% rename from src/main/java/com/example/demo/domain/board/domain/dto/request/PresignedUrlRequest.java rename to src/main/java/com/example/demo/application/board/dto/request/PresignedUrlRequest.java index b8994be4..301eb4d7 100644 --- a/src/main/java/com/example/demo/domain/board/domain/dto/request/PresignedUrlRequest.java +++ b/src/main/java/com/example/demo/application/board/dto/request/PresignedUrlRequest.java @@ -1,6 +1,6 @@ -package com.example.demo.domain.board.domain.dto.request; +package com.example.demo.application.board.dto.request; -import com.example.demo.domain.board.domain.dto.vo.FileType; +import com.example.demo.application.board.dto.vo.FileType; import com.example.demo.global.aop.valid.ValidEnum; import io.swagger.v3.oas.annotations.media.Schema; diff --git a/src/main/java/com/example/demo/domain/board/domain/dto/response/BoardInfoResponse.java b/src/main/java/com/example/demo/application/board/dto/response/BoardInfoResponse.java similarity index 68% rename from src/main/java/com/example/demo/domain/board/domain/dto/response/BoardInfoResponse.java rename to src/main/java/com/example/demo/application/board/dto/response/BoardInfoResponse.java index 94cae57a..99e3f2c1 100644 --- a/src/main/java/com/example/demo/domain/board/domain/dto/response/BoardInfoResponse.java +++ b/src/main/java/com/example/demo/application/board/dto/response/BoardInfoResponse.java @@ -1,6 +1,7 @@ -package com.example.demo.domain.board.domain.dto.response; +package com.example.demo.application.board.dto.response; -import com.example.demo.domain.board.domain.entity.Board; +import com.example.demo.domain.board.service.entity.BoardInfo; +import com.example.demo.infra.board.entity.Board; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Builder; @@ -42,12 +43,12 @@ public class BoardInfoResponse { private final LocalDateTime createdAt; @Builder - public BoardInfoResponse(Long boardId, String username, String title, String contents, String tag, String status, Long view, Long like, List categoryNames,String boardHeadImageUrl, LocalDateTime updatedAt, LocalDateTime createdAt) { + public BoardInfoResponse(Long boardId, String username, String title, String contents, String boardType, String status, Long view, Long like, List categoryNames,String boardHeadImageUrl, LocalDateTime updatedAt, LocalDateTime createdAt) { this.boardId = boardId; this.username = username; this.title = title; this.contents = contents; - this.boardType = tag; + this.boardType = boardType; this.status = status; this.view = view; this.like = like; @@ -63,7 +64,7 @@ public static BoardInfoResponse from(Board board, String username, Long like, L .username(username) .title(board.getTitle()) .contents(board.getContent()) - .tag(board.getBoardType().name()) + .boardType(board.getBoardType().name()) .status(board.getStatus().name()) .view(board.getViewCount()) .like(like) @@ -74,4 +75,20 @@ public static BoardInfoResponse from(Board board, String username, Long like, L .build(); } + public static BoardInfoResponse of(BoardInfo boardInfo) { + return BoardInfoResponse.builder() + .boardId(boardInfo.getBoardId()) + .username(boardInfo.getUserTarget().getNickName()) + .title(boardInfo.getBoardCore().getTitle()) + .contents(boardInfo.getBoardCore().getContents()) + .boardType(boardInfo.getBoardCore().getBoardType().toString()) + .status(boardInfo.getBoardCore().getBoardStatus().toString()) + .view(boardInfo.getViewCount()) + .like(boardInfo.getLikeCount()) + .categoryNames(boardInfo.getBoardCategoryNames().getCategories()) + .boardHeadImageUrl(boardInfo.getBoardCore().getBoardHeadImageUrl()) + .createdAt(boardInfo.getCreatedAt()) + .updatedAt(boardInfo.getUpdatedAt()) + .build(); + } } diff --git a/src/main/java/com/example/demo/domain/board/domain/dto/response/BoardTitleInfoResponse.java b/src/main/java/com/example/demo/application/board/dto/response/BoardTitleInfoResponse.java similarity index 92% rename from src/main/java/com/example/demo/domain/board/domain/dto/response/BoardTitleInfoResponse.java rename to src/main/java/com/example/demo/application/board/dto/response/BoardTitleInfoResponse.java index 04f68750..11b664b3 100644 --- a/src/main/java/com/example/demo/domain/board/domain/dto/response/BoardTitleInfoResponse.java +++ b/src/main/java/com/example/demo/application/board/dto/response/BoardTitleInfoResponse.java @@ -1,8 +1,8 @@ -package com.example.demo.domain.board.domain.dto.response; +package com.example.demo.application.board.dto.response; import java.time.LocalDateTime; -import com.example.demo.domain.board.domain.dto.vo.BoardType; +import com.example.demo.application.board.dto.vo.BoardType; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Getter; diff --git a/src/main/java/com/example/demo/domain/board/domain/dto/response/DraftBoardTitleResponse.java b/src/main/java/com/example/demo/application/board/dto/response/DraftBoardTitleResponse.java similarity index 88% rename from src/main/java/com/example/demo/domain/board/domain/dto/response/DraftBoardTitleResponse.java rename to src/main/java/com/example/demo/application/board/dto/response/DraftBoardTitleResponse.java index ad4e1975..f7e2c989 100644 --- a/src/main/java/com/example/demo/domain/board/domain/dto/response/DraftBoardTitleResponse.java +++ b/src/main/java/com/example/demo/application/board/dto/response/DraftBoardTitleResponse.java @@ -1,4 +1,4 @@ -package com.example.demo.domain.board.domain.dto.response; +package com.example.demo.application.board.dto.response; import java.time.LocalDateTime; diff --git a/src/main/java/com/example/demo/domain/board/domain/dto/vo/BoardType.java b/src/main/java/com/example/demo/application/board/dto/vo/BoardType.java similarity index 90% rename from src/main/java/com/example/demo/domain/board/domain/dto/vo/BoardType.java rename to src/main/java/com/example/demo/application/board/dto/vo/BoardType.java index e5348977..ef7efa60 100644 --- a/src/main/java/com/example/demo/domain/board/domain/dto/vo/BoardType.java +++ b/src/main/java/com/example/demo/application/board/dto/vo/BoardType.java @@ -1,4 +1,4 @@ -package com.example.demo.domain.board.domain.dto.vo; +package com.example.demo.application.board.dto.vo; import com.fasterxml.jackson.annotation.JsonCreator; diff --git a/src/main/java/com/example/demo/domain/board/domain/dto/vo/FileType.java b/src/main/java/com/example/demo/application/board/dto/vo/FileType.java similarity index 85% rename from src/main/java/com/example/demo/domain/board/domain/dto/vo/FileType.java rename to src/main/java/com/example/demo/application/board/dto/vo/FileType.java index b192b028..3c097403 100644 --- a/src/main/java/com/example/demo/domain/board/domain/dto/vo/FileType.java +++ b/src/main/java/com/example/demo/application/board/dto/vo/FileType.java @@ -1,4 +1,4 @@ -package com.example.demo.domain.board.domain.dto.vo; +package com.example.demo.application.board.dto.vo; import com.fasterxml.jackson.annotation.JsonCreator; diff --git a/src/main/java/com/example/demo/domain/board/domain/dto/vo/Status.java b/src/main/java/com/example/demo/application/board/dto/vo/Status.java similarity index 89% rename from src/main/java/com/example/demo/domain/board/domain/dto/vo/Status.java rename to src/main/java/com/example/demo/application/board/dto/vo/Status.java index c07e8f0d..7f6af0c6 100644 --- a/src/main/java/com/example/demo/domain/board/domain/dto/vo/Status.java +++ b/src/main/java/com/example/demo/application/board/dto/vo/Status.java @@ -1,4 +1,4 @@ -package com.example.demo.domain.board.domain.dto.vo; +package com.example.demo.application.board.dto.vo; import com.fasterxml.jackson.annotation.JsonCreator; diff --git a/src/main/java/com/example/demo/domain/board/service/entity/BoardCategoryNames.java b/src/main/java/com/example/demo/domain/board/service/entity/BoardCategoryNames.java new file mode 100644 index 00000000..68dcfc56 --- /dev/null +++ b/src/main/java/com/example/demo/domain/board/service/entity/BoardCategoryNames.java @@ -0,0 +1,14 @@ +package com.example.demo.domain.board.service.entity; + +import java.util.List; + +import lombok.Getter; + +@Getter +public class BoardCategoryNames { + private final List categories; + + public BoardCategoryNames(List categories) { + this.categories = categories; + } +} diff --git a/src/main/java/com/example/demo/domain/board/service/entity/BoardCore.java b/src/main/java/com/example/demo/domain/board/service/entity/BoardCore.java new file mode 100644 index 00000000..0674e8af --- /dev/null +++ b/src/main/java/com/example/demo/domain/board/service/entity/BoardCore.java @@ -0,0 +1,37 @@ +package com.example.demo.domain.board.service.entity; + +import com.example.demo.application.board.dto.vo.BoardType; +import com.example.demo.application.board.dto.vo.Status; + +import lombok.Getter; + +@Getter +public class BoardCore { + private final String title; + + private final String contents; + + private final BoardType boardType; + + private final String boardHeadImageUrl; + + private Status boardStatus; + + public BoardCore(String title, String contents, BoardType boardType, String boardHeadImageUrl) { + this.title = title; + this.contents = contents; + this.boardType = boardType; + this.boardHeadImageUrl = boardHeadImageUrl; + this.boardStatus = Status.DRAFT; + } + + public BoardCore publishBoard() { + this.boardStatus = Status.PUBLISHED; + return this; + } + + public BoardCore draftBoard() { + this.boardStatus = Status.DRAFT; + return this; + } +} diff --git a/src/main/java/com/example/demo/domain/board/service/entity/BoardInfo.java b/src/main/java/com/example/demo/domain/board/service/entity/BoardInfo.java new file mode 100644 index 00000000..73ca668d --- /dev/null +++ b/src/main/java/com/example/demo/domain/board/service/entity/BoardInfo.java @@ -0,0 +1,37 @@ +package com.example.demo.domain.board.service.entity; + +import java.time.LocalDateTime; + +import com.example.demo.domain.user.domain.UserTarget; + +import lombok.Builder; +import lombok.Getter; + +@Getter +public class BoardInfo { + private final Long boardId; + private final BoardCore boardCore; + private final Long viewCount; + private final Long LikeCount; + private final LocalDateTime createdAt; + private final LocalDateTime updatedAt; + private final UserTarget userTarget; + private BoardCategoryNames boardCategoryNames; + + @Builder + private BoardInfo(Long boardId, BoardCore boardCore, Long viewCount, Long likeCount, LocalDateTime createdAt, LocalDateTime updatedAt, UserTarget userTarget, + BoardCategoryNames boardCategoryNames) { + this.boardId = boardId; + this.boardCore = boardCore; + this.viewCount = viewCount; + this.LikeCount = likeCount; + this.createdAt = createdAt; + this.updatedAt = updatedAt; + this.userTarget = userTarget; + this.boardCategoryNames = boardCategoryNames; + } + + public void setBoardCategoryNames(BoardCategoryNames boardCategoryNames) { + this.boardCategoryNames = boardCategoryNames; + } +} diff --git a/src/main/java/com/example/demo/domain/board/service/implement/BoardCategoryWriter.java b/src/main/java/com/example/demo/domain/board/service/implement/BoardCategoryWriter.java new file mode 100644 index 00000000..5be41614 --- /dev/null +++ b/src/main/java/com/example/demo/domain/board/service/implement/BoardCategoryWriter.java @@ -0,0 +1,19 @@ +package com.example.demo.domain.board.service.implement; + +import org.springframework.stereotype.Component; + +import com.example.demo.domain.board.service.entity.BoardCategoryNames; +import com.example.demo.domain.board.service.entity.BoardInfo; +import com.example.demo.domain.board.service.repository.BoardCategoryRepository; + +import lombok.RequiredArgsConstructor; + +@Component +@RequiredArgsConstructor +public class BoardCategoryWriter { + private final BoardCategoryRepository boardCategoryRepository; + + public void saveCategoryNames(BoardInfo draftBoard, BoardCategoryNames boardCategoryNames) { + boardCategoryRepository.saveBoardCategories(draftBoard, boardCategoryNames); + } +} diff --git a/src/main/java/com/example/demo/domain/board/service/service/BoardCommandService.java b/src/main/java/com/example/demo/domain/board/service/implement/BoardWriter.java similarity index 57% rename from src/main/java/com/example/demo/domain/board/service/service/BoardCommandService.java rename to src/main/java/com/example/demo/domain/board/service/implement/BoardWriter.java index c74088d0..acdae180 100644 --- a/src/main/java/com/example/demo/domain/board/service/service/BoardCommandService.java +++ b/src/main/java/com/example/demo/domain/board/service/implement/BoardWriter.java @@ -1,15 +1,20 @@ -package com.example.demo.domain.board.service.service; - -import com.example.demo.domain.board.Repository.*; -import com.example.demo.domain.board.domain.entity.Board; -import com.example.demo.domain.board.domain.entity.BoardCategory; -import com.example.demo.domain.board.domain.entity.Category; -import com.example.demo.domain.board.domain.dto.request.BoardCreateRequest; -import com.example.demo.domain.board.domain.dto.request.BoardUpdateRequest; -import com.example.demo.domain.board.domain.dto.response.BoardInfoResponse; -import com.example.demo.domain.user.domain.User; +package com.example.demo.domain.board.service.implement; + +import com.example.demo.domain.board.service.entity.BoardCore; +import com.example.demo.domain.board.service.entity.BoardInfo; +import com.example.demo.domain.board.service.repository.BoardRepository; +import com.example.demo.domain.user.domain.UserTarget; +import com.example.demo.infra.board.entity.Board; +import com.example.demo.infra.board.entity.BoardCategory; +import com.example.demo.infra.board.entity.Category; +import com.example.demo.application.board.dto.request.BoardUpdateRequest; +import com.example.demo.application.board.dto.response.BoardInfoResponse; import com.example.demo.global.base.exception.ErrorCode; import com.example.demo.global.base.exception.ServiceException; +import com.example.demo.infra.board.Repository.BoardCategoryJpaRepository; +import com.example.demo.infra.board.Repository.BoardJpaRepository; +import com.example.demo.infra.board.Repository.CategoryJpaRepository; + import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component; @@ -20,33 +25,22 @@ @Component @RequiredArgsConstructor -public class BoardCommandService { +public class BoardWriter { + private final BoardJpaRepository boardJpaRepository; + private final CategoryJpaRepository categoryJpaRepository; + private final BoardCategoryJpaRepository boardCategoryJpaRepository; private final BoardRepository boardRepository; - private final CategoryRepository categoryRepository; - private final BoardCategoryRepository boardCategoryRepository; @Transactional - public BoardInfoResponse createDraftBoard(User user, BoardCreateRequest boardCreateRequest) { //TODO : [Board] 대표이미지 미 설정시 첫 번째 이미지로 선정 및 그것 마저도 없으면 기본 이미지로 저장하게 하는데 프론트에서 처리할건지 물어봐야함 - Board board = Board.fromBoardRequest(user,boardCreateRequest); - - Board savedBoard = boardRepository.save(board); - - boardCreateRequest.getCategoryName().forEach(categoryName -> { - saveCategoryAndBoardCategory(board, categoryName); - }); - - return BoardInfoResponse.from( - savedBoard, - user.getNickname(), - 0L, - boardCreateRequest.getCategoryName()); + public BoardInfo createDraftBoard(UserTarget userTarget, BoardCore draftBoardCore) { + return boardRepository.saveBoard(userTarget, draftBoardCore); } private void saveCategoryAndBoardCategory(Board board, String categoryName) { - Category category = categoryRepository.findByName(categoryName) - .orElseGet(() -> categoryRepository.save(new Category(categoryName))); + Category category = categoryJpaRepository.findByName(categoryName) + .orElseGet(() -> categoryJpaRepository.save(new Category(categoryName))); BoardCategory boardCategory = new BoardCategory(board, category); - boardCategoryRepository.save(boardCategory); + boardCategoryJpaRepository.save(boardCategory); } @Transactional @@ -64,7 +58,7 @@ public BoardInfoResponse updateBoard(BoardUpdateRequest boardUpdateRequest,Board return BoardInfoResponse.from(board, board.getUser().getNickname(), - boardRepository.countLikesByBoardId(boardUpdateRequest.getId()), + boardJpaRepository.countLikesByBoardId(boardUpdateRequest.getId()), categoryNames); } @@ -78,15 +72,15 @@ private void changeBoardCategories(Board board, List newCategoryNames) { existingCategoryNames.stream() .filter(categoryName -> !newCategoryNames.contains(categoryName)) .forEach(categoryName -> { - Category category = categoryRepository.findByName(categoryName).get(); - BoardCategory boardCategory = boardCategoryRepository.findByNameAndBoardId(categoryName,board.getId()).get(); - if (boardCategoryRepository.countBoardCategoryByCategoryId(category.getId()) == 1) { + Category category = categoryJpaRepository.findByName(categoryName).get(); + BoardCategory boardCategory = boardCategoryJpaRepository.findByNameAndBoardId(categoryName,board.getId()).get(); + if (boardCategoryJpaRepository.countBoardCategoryByCategoryId(category.getId()) == 1) { board.getBoardCategories().remove(boardCategory); - categoryRepository.delete(category); + categoryJpaRepository.delete(category); } board.getBoardCategories().remove(boardCategory); category.getBoardCategories().remove(boardCategory); - boardCategoryRepository.delete(boardCategory); + boardCategoryJpaRepository.delete(boardCategory); }); // 추가할 카테고리 처리 @@ -107,17 +101,17 @@ public void removeBoard(Board board) { // 삭제할 카테고리 처리 existingCategoryNames.stream() .forEach(categoryName -> { - Category category = categoryRepository.findByName(categoryName).get(); - BoardCategory boardCategory = boardCategoryRepository.findByNameAndBoardId(categoryName,board.getId()).get(); - if (boardCategoryRepository.countBoardCategoryByCategoryId(category.getId()) == 1) { + Category category = categoryJpaRepository.findByName(categoryName).get(); + BoardCategory boardCategory = boardCategoryJpaRepository.findByNameAndBoardId(categoryName,board.getId()).get(); + if (boardCategoryJpaRepository.countBoardCategoryByCategoryId(category.getId()) == 1) { board.getBoardCategories().remove(boardCategory); - categoryRepository.delete(category); + categoryJpaRepository.delete(category); } board.getBoardCategories().remove(boardCategory); category.getBoardCategories().remove(boardCategory); - boardCategoryRepository.delete(boardCategory); + boardCategoryJpaRepository.delete(boardCategory); }); - boardRepository.delete(board); + boardJpaRepository.delete(board); } public Board validateBoardForDelete(Long userId, Long boardId) { @@ -127,7 +121,7 @@ public Board validateBoardForDelete(Long userId, Long boardId) { } private Board validateBoard(Long boardId) { - return boardRepository.findById(boardId) + return boardJpaRepository.findById(boardId) .orElseThrow(() -> new ServiceException(ErrorCode.BOARD_NOT_FOUND)); } diff --git a/src/main/java/com/example/demo/domain/board/service/repository/BoardCategoryRepository.java b/src/main/java/com/example/demo/domain/board/service/repository/BoardCategoryRepository.java new file mode 100644 index 00000000..b836cf73 --- /dev/null +++ b/src/main/java/com/example/demo/domain/board/service/repository/BoardCategoryRepository.java @@ -0,0 +1,9 @@ +package com.example.demo.domain.board.service.repository; + +import com.example.demo.domain.board.service.entity.BoardCategoryNames; +import com.example.demo.domain.board.service.entity.BoardInfo; + +public interface BoardCategoryRepository { + + void saveBoardCategories(BoardInfo draftBoard, BoardCategoryNames boardCategoryNames); +} diff --git a/src/main/java/com/example/demo/domain/board/service/repository/BoardRepository.java b/src/main/java/com/example/demo/domain/board/service/repository/BoardRepository.java new file mode 100644 index 00000000..29ff2aee --- /dev/null +++ b/src/main/java/com/example/demo/domain/board/service/repository/BoardRepository.java @@ -0,0 +1,9 @@ +package com.example.demo.domain.board.service.repository; + +import com.example.demo.domain.board.service.entity.BoardCore; +import com.example.demo.domain.board.service.entity.BoardInfo; +import com.example.demo.domain.user.domain.UserTarget; + +public interface BoardRepository { + BoardInfo saveBoard(UserTarget userTarget, BoardCore boardCore); +} diff --git a/src/main/java/com/example/demo/domain/board/service/service/BoardQueryService.java b/src/main/java/com/example/demo/domain/board/service/service/BoardQueryService.java index 5185a3c2..3a336f53 100644 --- a/src/main/java/com/example/demo/domain/board/service/service/BoardQueryService.java +++ b/src/main/java/com/example/demo/domain/board/service/service/BoardQueryService.java @@ -1,14 +1,14 @@ package com.example.demo.domain.board.service.service; -import com.example.demo.domain.board.Repository.BoardRepository; -import com.example.demo.domain.board.domain.dto.request.BoardUpdateRequest; -import com.example.demo.domain.board.domain.dto.response.BoardTitleInfoResponse; -import com.example.demo.domain.board.domain.dto.response.DraftBoardTitleResponse; -import com.example.demo.domain.board.domain.dto.vo.BoardType; +import com.example.demo.infra.board.Repository.BoardJpaRepository; +import com.example.demo.application.board.dto.request.BoardUpdateRequest; +import com.example.demo.application.board.dto.response.BoardTitleInfoResponse; +import com.example.demo.application.board.dto.response.DraftBoardTitleResponse; +import com.example.demo.application.board.dto.vo.BoardType; import com.example.demo.global.base.dto.page.GlobalPageResponse; -import com.example.demo.domain.board.domain.entity.Board; -import com.example.demo.domain.board.domain.dto.response.BoardInfoResponse; -import com.example.demo.domain.board.domain.dto.vo.Status; +import com.example.demo.infra.board.entity.Board; +import com.example.demo.application.board.dto.response.BoardInfoResponse; +import com.example.demo.application.board.dto.vo.Status; import com.example.demo.global.base.exception.ErrorCode; import com.example.demo.global.base.exception.ServiceException; import com.example.demo.global.jwt.JwtAuthentication; @@ -26,11 +26,11 @@ @RequiredArgsConstructor @Transactional(readOnly = true) public class BoardQueryService { - private final BoardRepository boardRepository; + private final BoardJpaRepository boardJpaRepository; @Transactional(readOnly = true) public BoardInfoResponse searchSingleBoard(Long boardId) { - Board board = boardRepository.findById(boardId) + Board board = boardJpaRepository.findById(boardId) .orElseThrow(() -> new ServiceException(ErrorCode.BOARD_NOT_FOUND)); validateBoardStatus(board); // 임시저장 게시물은 작성자만 조회 가능하기 때문에 작성자인지 확인 validateReportedBoard(board); //TODO : [Board]report 기능 추가 시 로직 변경 @@ -39,13 +39,13 @@ public BoardInfoResponse searchSingleBoard(Long boardId) { return BoardInfoResponse.from( board, board.getUser().getNickname(), - boardRepository.countLikesByBoardId(boardId), - boardRepository.findCategoryNameByBoardId(boardId)); + boardJpaRepository.countLikesByBoardId(boardId), + boardJpaRepository.findCategoryNameByBoardId(boardId)); } @Transactional(readOnly = true) public GlobalPageResponse findBoardPageList(BoardType boardType, Pageable pageable) { - Page boardByPage = boardRepository.findBoardByPage(boardType,pageable); + Page boardByPage = boardJpaRepository.findBoardByPage(boardType,pageable); return GlobalPageResponse.create(boardByPage); } @@ -71,7 +71,7 @@ private void validateBoardStatus(Board board) { @Transactional(readOnly = true) public Board validateBoard(Long boardId) { - return boardRepository.findById(boardId) + return boardJpaRepository.findById(boardId) .orElseThrow(() -> new ServiceException(ErrorCode.BOARD_NOT_FOUND)); } @@ -89,13 +89,13 @@ private void validateUserEqualBoardUser(Long userId, Board board) { } public GlobalPageResponse findDraftBoardPageList(Long userId,Pageable pageable) { - return GlobalPageResponse.create(boardRepository.findDraftBoardByPage(userId,pageable)); + return GlobalPageResponse.create(boardJpaRepository.findDraftBoardByPage(userId,pageable)); } @Transactional(readOnly = true) public GlobalPageResponse findPublishedBoardListByUser(Long userId, BoardType boardType, Pageable pageable) { - return GlobalPageResponse.create(boardRepository.findPublishedBoardListByUser(userId,boardType,pageable)); + return GlobalPageResponse.create(boardJpaRepository.findPublishedBoardListByUser(userId,boardType,pageable)); } } diff --git a/src/main/java/com/example/demo/domain/board/service/service/CategoryQueryService.java b/src/main/java/com/example/demo/domain/board/service/service/CategoryQueryService.java index e681a718..8ce49cec 100644 --- a/src/main/java/com/example/demo/domain/board/service/service/CategoryQueryService.java +++ b/src/main/java/com/example/demo/domain/board/service/service/CategoryQueryService.java @@ -7,8 +7,8 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import com.example.demo.domain.board.Repository.CategoryRepository; -import com.example.demo.domain.board.domain.dto.response.BoardTitleInfoResponse; +import com.example.demo.infra.board.Repository.CategoryJpaRepository; +import com.example.demo.application.board.dto.response.BoardTitleInfoResponse; import com.example.demo.global.base.dto.page.GlobalPageResponse; import lombok.RequiredArgsConstructor; @@ -17,17 +17,17 @@ @RequiredArgsConstructor @Transactional(readOnly = true) public class CategoryQueryService { - private final CategoryRepository categoryRepository; + private final CategoryJpaRepository categoryJpaRepository; @Transactional(readOnly = true) public List getCategories() { - return categoryRepository.findAll().stream() + return categoryJpaRepository.findAll().stream() .map(category -> category.getName()) .collect(Collectors.toList()); } @Transactional(readOnly = true) public GlobalPageResponse getBoardPageByCategoryName(String categoryName, Pageable pageable) { - return GlobalPageResponse.create(categoryRepository.findBoardByPage(categoryName,pageable)); + return GlobalPageResponse.create(categoryJpaRepository.findBoardByPage(categoryName,pageable)); } } diff --git a/src/main/java/com/example/demo/domain/board/service/service/FileUploadService.java b/src/main/java/com/example/demo/domain/board/service/service/FileUploadService.java index abea3e40..9590fd7f 100644 --- a/src/main/java/com/example/demo/domain/board/service/service/FileUploadService.java +++ b/src/main/java/com/example/demo/domain/board/service/service/FileUploadService.java @@ -1,22 +1,13 @@ package com.example.demo.domain.board.service.service; -import java.net.URL; -import java.util.Date; - -import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import com.amazonaws.HttpMethod; -import com.amazonaws.services.s3.AmazonS3Client; -import com.amazonaws.services.s3.Headers; -import com.amazonaws.services.s3.model.CannedAccessControlList; -import com.amazonaws.services.s3.model.GeneratePresignedUrlRequest; -import com.example.demo.domain.board.Repository.BoardRepository; -import com.example.demo.domain.board.Repository.ImageFileRepository; -import com.example.demo.domain.board.domain.dto.request.FileRequest; -import com.example.demo.domain.board.domain.entity.Board; -import com.example.demo.domain.board.domain.entity.ImageFile; +import com.example.demo.infra.board.Repository.BoardJpaRepository; +import com.example.demo.infra.board.Repository.ImageFileRepository; +import com.example.demo.application.board.dto.request.FileRequest; +import com.example.demo.infra.board.entity.Board; +import com.example.demo.infra.board.entity.ImageFile; import com.example.demo.global.base.exception.ErrorCode; import com.example.demo.global.base.exception.ServiceException; @@ -26,19 +17,19 @@ @RequiredArgsConstructor public class FileUploadService { private final ImageFileRepository imageFileRepository; - private final BoardRepository boardRepository; + private final BoardJpaRepository boardJpaRepository; @Transactional public void changeAttachFileUrl(String url, Board board) { board.changeAttachFileUrl(url); - boardRepository.save(board); + boardJpaRepository.save(board); } @Transactional public void saveImageFileUrl(String url, Board board) { ImageFile imageFile = ImageFile.of(url, board); - boardRepository.save(board); + boardJpaRepository.save(board); imageFileRepository.save(imageFile); } diff --git a/src/main/java/com/example/demo/domain/board/service/service/LikeNotificationService.java b/src/main/java/com/example/demo/domain/board/service/service/LikeNotificationService.java index 09be4b4d..3aa9612f 100644 --- a/src/main/java/com/example/demo/domain/board/service/service/LikeNotificationService.java +++ b/src/main/java/com/example/demo/domain/board/service/service/LikeNotificationService.java @@ -1,6 +1,6 @@ package com.example.demo.domain.board.service.service; -import com.example.demo.domain.board.domain.entity.Like; +import com.example.demo.infra.board.entity.Like; import com.example.demo.domain.notification.domain.entity.Notification; import com.example.demo.domain.notification.domain.entity.NotificationUser; import com.example.demo.domain.notification.domain.vo.NotificationType; diff --git a/src/main/java/com/example/demo/domain/board/service/service/LikeService.java b/src/main/java/com/example/demo/domain/board/service/service/LikeService.java index d2d533cc..6abfd878 100644 --- a/src/main/java/com/example/demo/domain/board/service/service/LikeService.java +++ b/src/main/java/com/example/demo/domain/board/service/service/LikeService.java @@ -1,12 +1,12 @@ package com.example.demo.domain.board.service.service; -import com.example.demo.domain.board.Repository.BoardRepository; -import com.example.demo.domain.board.Repository.LikeRepository; -import com.example.demo.domain.board.domain.dto.response.BoardTitleInfoResponse; -import com.example.demo.domain.board.domain.entity.Board; -import com.example.demo.domain.board.domain.entity.Like; +import com.example.demo.infra.board.Repository.BoardJpaRepository; +import com.example.demo.infra.board.Repository.LikeRepository; +import com.example.demo.application.board.dto.response.BoardTitleInfoResponse; +import com.example.demo.infra.board.entity.Board; +import com.example.demo.infra.board.entity.Like; import com.example.demo.domain.user.domain.User; -import com.example.demo.domain.user.repository.UserRepository; +import com.example.demo.domain.user.repository.UserJpaRepository; import com.example.demo.global.base.dto.page.GlobalPageResponse; import com.example.demo.global.base.exception.ErrorCode; import com.example.demo.global.base.exception.ServiceException; @@ -19,13 +19,13 @@ @RequiredArgsConstructor public class LikeService { private final LikeRepository likeRepository; - private final BoardRepository boardRepository; - private final UserRepository userRepository; + private final BoardJpaRepository boardJpaRepository; + private final UserJpaRepository userJpaRepository; private final LikeNotificationService likeNotificationService; @Transactional public void increaseLike(Long userId, Long boardId) { - Board board = (Board) boardRepository.findByIdWithUser(boardId).orElseThrow + Board board = (Board) boardJpaRepository.findByIdWithUser(boardId).orElseThrow (() -> new ServiceException(ErrorCode.BOARD_NOT_FOUND)); User user = validateUser(userId); if (likeRepository.existsByBoardIdAndUserId(boardId, userId)) { @@ -43,12 +43,12 @@ public GlobalPageResponse getLikes(Long userId, Pageable } private User validateUser(Long userId) { - return userRepository.findById(userId) + return userJpaRepository.findById(userId) .orElseThrow(() -> new ServiceException(ErrorCode.LIKE_USER_NOT_FOUND)); } private Board validateBoard(Long boardId) { - return boardRepository.findById(boardId) + return boardJpaRepository.findById(boardId) .orElseThrow(() -> new ServiceException(ErrorCode.BOARD_NOT_FOUND)); } diff --git a/src/main/java/com/example/demo/domain/board/service/service/view/ViewIncreaseUpdateService.java b/src/main/java/com/example/demo/domain/board/service/service/view/ViewIncreaseUpdateService.java index 5746b19c..0c692f25 100644 --- a/src/main/java/com/example/demo/domain/board/service/service/view/ViewIncreaseUpdateService.java +++ b/src/main/java/com/example/demo/domain/board/service/service/view/ViewIncreaseUpdateService.java @@ -3,18 +3,18 @@ import org.springframework.stereotype.Service; -import com.example.demo.domain.board.Repository.BoardRepository; +import com.example.demo.infra.board.Repository.BoardJpaRepository; import lombok.RequiredArgsConstructor; @Service @RequiredArgsConstructor public class ViewIncreaseUpdateService implements ViewIncreaseService { - private final BoardRepository boardRepository; + private final BoardJpaRepository boardJpaRepository; @Override public void increaseView(Long boardId) { - boardRepository.increaseViewCount(boardId); + boardJpaRepository.increaseViewCount(boardId); } } diff --git a/src/main/java/com/example/demo/domain/board/service/usecase/BoardAdminUseCase.java b/src/main/java/com/example/demo/domain/board/service/usecase/BoardAdminUseCase.java index 29c25997..4fbeb958 100644 --- a/src/main/java/com/example/demo/domain/board/service/usecase/BoardAdminUseCase.java +++ b/src/main/java/com/example/demo/domain/board/service/usecase/BoardAdminUseCase.java @@ -1,27 +1,25 @@ package com.example.demo.domain.board.service.usecase; -import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import com.example.demo.domain.board.domain.entity.Board; -import com.example.demo.domain.board.service.service.BoardCommandService; +import com.example.demo.infra.board.entity.Board; +import com.example.demo.domain.board.service.implement.BoardWriter; import com.example.demo.domain.board.service.service.BoardQueryService; -import com.example.demo.global.base.dto.ResponseBody; import lombok.RequiredArgsConstructor; @Service @RequiredArgsConstructor public class BoardAdminUseCase { - private final BoardCommandService boardCommandService; + private final BoardWriter boardWriter; private final BoardQueryService boardQueryService; @Transactional public Void deleteBoard(Long boardId) { Board board = boardQueryService.validateBoard(boardId); - boardCommandService.removeBoard(board); + boardWriter.removeBoard(board); return null; } } diff --git a/src/main/java/com/example/demo/domain/board/service/usecase/BoardFileUseCase.java b/src/main/java/com/example/demo/domain/board/service/usecase/BoardFileUseCase.java index e755aee4..d91e5cb0 100644 --- a/src/main/java/com/example/demo/domain/board/service/usecase/BoardFileUseCase.java +++ b/src/main/java/com/example/demo/domain/board/service/usecase/BoardFileUseCase.java @@ -3,9 +3,9 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import com.example.demo.domain.board.domain.dto.request.FileRequest; -import com.example.demo.domain.board.domain.dto.request.PresignedUrlRequest; -import com.example.demo.domain.board.domain.entity.Board; +import com.example.demo.application.board.dto.request.FileRequest; +import com.example.demo.application.board.dto.request.PresignedUrlRequest; +import com.example.demo.infra.board.entity.Board; import com.example.demo.domain.board.service.service.BoardQueryService; import com.example.demo.domain.board.service.service.FileUploadService; import com.example.demo.domain.user.domain.User; diff --git a/src/main/java/com/example/demo/domain/board/service/usecase/BoardUseCase.java b/src/main/java/com/example/demo/domain/board/service/usecase/BoardService.java similarity index 56% rename from src/main/java/com/example/demo/domain/board/service/usecase/BoardUseCase.java rename to src/main/java/com/example/demo/domain/board/service/usecase/BoardService.java index 009aa6ab..63498d77 100644 --- a/src/main/java/com/example/demo/domain/board/service/usecase/BoardUseCase.java +++ b/src/main/java/com/example/demo/domain/board/service/usecase/BoardService.java @@ -1,22 +1,25 @@ package com.example.demo.domain.board.service.usecase; -import com.example.demo.domain.board.domain.dto.request.BoardCreateRequest; -import com.example.demo.domain.board.domain.dto.request.BoardUpdateRequest; -import com.example.demo.domain.board.domain.dto.response.BoardInfoResponse; -import com.example.demo.domain.board.domain.dto.response.BoardTitleInfoResponse; -import com.example.demo.domain.board.domain.dto.response.DraftBoardTitleResponse; -import com.example.demo.domain.board.domain.dto.vo.BoardType; -import com.example.demo.domain.board.domain.dto.vo.Status; -import com.example.demo.domain.board.domain.entity.Board; -import com.example.demo.domain.board.service.service.BoardCommandService; +import com.example.demo.application.board.dto.request.BoardUpdateRequest; +import com.example.demo.application.board.dto.response.BoardInfoResponse; +import com.example.demo.application.board.dto.response.BoardTitleInfoResponse; +import com.example.demo.application.board.dto.response.DraftBoardTitleResponse; +import com.example.demo.application.board.dto.vo.BoardType; +import com.example.demo.application.board.dto.vo.Status; +import com.example.demo.domain.board.service.entity.BoardCategoryNames; +import com.example.demo.domain.board.service.entity.BoardCore; +import com.example.demo.domain.board.service.entity.BoardInfo; +import com.example.demo.domain.board.service.implement.BoardCategoryWriter; +import com.example.demo.domain.user.domain.UserTarget; +import com.example.demo.domain.user.implement.UserReader; +import com.example.demo.infra.board.entity.Board; +import com.example.demo.domain.board.service.implement.BoardWriter; import com.example.demo.domain.board.service.service.BoardQueryService; import com.example.demo.domain.board.service.service.view.ViewIncreaseService; import com.example.demo.domain.newsletter.event.EmailNotificationEvent; import com.example.demo.domain.newsletter.strategy.SeminarSummaryEmailDeliveryStrategy; import com.example.demo.domain.recruitment_board.domain.vo.EntireBoardType; -import com.example.demo.domain.user.domain.User; import com.example.demo.domain.user.domain.vo.Role; -import com.example.demo.domain.user.service.UserService; import com.example.demo.global.base.dto.page.GlobalPageResponse; import com.example.demo.global.base.exception.ErrorCode; import com.example.demo.global.base.exception.ServiceException; @@ -28,35 +31,48 @@ import org.springframework.transaction.annotation.Transactional; @Service -public class BoardUseCase { - private final BoardCommandService boardCommandService; +public class BoardService { + private final BoardWriter boardWriter; private final BoardQueryService boardQueryService; private final ViewIncreaseService viewIncreaseService; - private final UserService userService; private final ApplicationEventPublisher eventPublisher; + private final UserReader userReader; + private final BoardCategoryWriter boardCategoryWriter; - public BoardUseCase(BoardCommandService boardCommandService, + public BoardService(BoardWriter boardWriter, BoardQueryService boardQueryService, @Qualifier("viewBulkUpdateService") ViewIncreaseService viewIncreaseService, - UserService userService, - ApplicationEventPublisher eventPublisher) { - this.boardCommandService = boardCommandService; + UserReader userReader, + ApplicationEventPublisher eventPublisher, BoardCategoryWriter boardCategoryWriter) { + this.boardWriter = boardWriter; this.boardQueryService = boardQueryService; this.viewIncreaseService = viewIncreaseService; - this.userService = userService; + this.userReader = userReader; this.eventPublisher = eventPublisher; - } + this.boardCategoryWriter = boardCategoryWriter; + } @Transactional - public BoardInfoResponse saveDraftBoard(Long userId, BoardCreateRequest boardCreateRequest) { - User user = userService.validateUser(userId); + public BoardInfo saveDraftBoard(Long userId, BoardCore boardCore , BoardCategoryNames boardCategoryNames) { + UserTarget userTarget = userReader.findUser(userId) + .orElseThrow(()-> new ServiceException(ErrorCode.USER_NOT_FOUND)); + // 공지사항은 관리자만 작성 가능 - if (boardCreateRequest.getBoardType().equals(BoardType.NOTICE) && !user.getRole().equals(Role.ROLE_ADMIN)) { + if (isAdminAndNotice(boardCore, userTarget)) { throw new ServiceException(ErrorCode.NOT_AUTHORIZED_WRITE_NOTICE); } - return boardCommandService.createDraftBoard(user, boardCreateRequest); + BoardInfo draftBoard = boardWriter.createDraftBoard(userTarget, boardCore.draftBoard()); + + boardCategoryWriter.saveCategoryNames(draftBoard, boardCategoryNames); + draftBoard.setBoardCategoryNames(boardCategoryNames); + + return draftBoard; + } + private boolean isAdminAndNotice(BoardCore boardCore, UserTarget userTarget) { + return boardCore.getBoardType().equals(BoardType.NOTICE) && !userTarget.getUserRole().equals(Role.ROLE_ADMIN); + } public BoardInfoResponse searchSingleBoard(Long boardId) { BoardInfoResponse returnResponse = boardQueryService.searchSingleBoard(boardId); @@ -67,7 +83,7 @@ public BoardInfoResponse searchSingleBoard(Long boardId) { @Transactional public BoardInfoResponse updateBoard(Long userId, BoardUpdateRequest boardUpdateRequest) { Board board = boardQueryService.validateBoardForUpdate(boardUpdateRequest, userId); - BoardInfoResponse boardInfoResponse = boardCommandService.updateBoard(boardUpdateRequest, board); + BoardInfoResponse boardInfoResponse = boardWriter.updateBoard(boardUpdateRequest, board); // 게시 상태로 변경이면 뉴스레터 전송 if (boardUpdateRequest.getIsPublished() && board.getBoardType().equals(BoardType.SEMINAR) && board.getStatus().equals(Status.DRAFT)) { @@ -82,8 +98,8 @@ public BoardInfoResponse updateBoard(Long userId, BoardUpdateRequest boardUpdate @Transactional public void deleteBoard(Long userId, Long boardId) { - Board board = boardCommandService.validateBoardForDelete(userId, boardId); - boardCommandService.removeBoard(board); + Board board = boardWriter.validateBoardForDelete(userId, boardId); + boardWriter.removeBoard(board); } @Transactional(readOnly = true) @@ -97,7 +113,8 @@ public GlobalPageResponse findDraftBoardList(Long userI @Transactional(readOnly = true) public GlobalPageResponse findMyBoardPageList(Long userId,BoardType boardType, Pageable pageable) { - userService.validateUser(userId); + userReader.findUser(userId) + .orElseThrow(()-> new ServiceException(ErrorCode.USER_NOT_FOUND)); return boardQueryService.findPublishedBoardListByUser(userId,boardType, pageable); } } diff --git a/src/main/java/com/example/demo/domain/board/service/usecase/CategoryUseCase.java b/src/main/java/com/example/demo/domain/board/service/usecase/CategoryUseCase.java index 4df6b255..fd7cecda 100644 --- a/src/main/java/com/example/demo/domain/board/service/usecase/CategoryUseCase.java +++ b/src/main/java/com/example/demo/domain/board/service/usecase/CategoryUseCase.java @@ -5,7 +5,7 @@ import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; -import com.example.demo.domain.board.domain.dto.response.BoardTitleInfoResponse; +import com.example.demo.application.board.dto.response.BoardTitleInfoResponse; import com.example.demo.global.base.dto.page.GlobalPageResponse; import com.example.demo.domain.board.service.service.CategoryQueryService; diff --git a/src/main/java/com/example/demo/domain/board/service/usecase/LikeUseCase.java b/src/main/java/com/example/demo/domain/board/service/usecase/LikeUseCase.java index 130afb51..2725eef9 100644 --- a/src/main/java/com/example/demo/domain/board/service/usecase/LikeUseCase.java +++ b/src/main/java/com/example/demo/domain/board/service/usecase/LikeUseCase.java @@ -3,7 +3,7 @@ import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; -import com.example.demo.domain.board.domain.dto.response.BoardTitleInfoResponse; +import com.example.demo.application.board.dto.response.BoardTitleInfoResponse; import com.example.demo.global.base.dto.page.GlobalPageResponse; import com.example.demo.domain.board.service.service.LikeService; diff --git a/src/main/java/com/example/demo/domain/comment/controller/BoardCommentController.java b/src/main/java/com/example/demo/domain/comment/controller/BoardCommentController.java index 432426ba..2d725768 100644 --- a/src/main/java/com/example/demo/domain/comment/controller/BoardCommentController.java +++ b/src/main/java/com/example/demo/domain/comment/controller/BoardCommentController.java @@ -1,7 +1,7 @@ package com.example.demo.domain.comment.controller; -import com.example.demo.domain.board.domain.dto.vo.BoardType; +import com.example.demo.application.board.dto.vo.BoardType; import com.example.demo.domain.comment.controller.swagger.AbstractBoardCommentApi; import com.example.demo.domain.comment.domain.dto.request.CommentRequest; import com.example.demo.domain.comment.domain.dto.response.CommentInfoResponse; diff --git a/src/main/java/com/example/demo/domain/comment/controller/swagger/AbstractBoardCommentApi.java b/src/main/java/com/example/demo/domain/comment/controller/swagger/AbstractBoardCommentApi.java index 3ffa10e6..a343bb4d 100644 --- a/src/main/java/com/example/demo/domain/comment/controller/swagger/AbstractBoardCommentApi.java +++ b/src/main/java/com/example/demo/domain/comment/controller/swagger/AbstractBoardCommentApi.java @@ -1,6 +1,6 @@ package com.example.demo.domain.comment.controller.swagger; -import com.example.demo.domain.board.domain.dto.vo.BoardType; +import com.example.demo.application.board.dto.vo.BoardType; import com.example.demo.domain.comment.domain.dto.request.CommentRequest; import com.example.demo.domain.comment.domain.dto.response.CommentInfoResponse; import com.example.demo.domain.comment.domain.dto.response.CommentResponse; diff --git a/src/main/java/com/example/demo/domain/comment/domain/entity/BoardComment.java b/src/main/java/com/example/demo/domain/comment/domain/entity/BoardComment.java index 186d5817..89fb0cee 100644 --- a/src/main/java/com/example/demo/domain/comment/domain/entity/BoardComment.java +++ b/src/main/java/com/example/demo/domain/comment/domain/entity/BoardComment.java @@ -1,6 +1,6 @@ package com.example.demo.domain.comment.domain.entity; -import com.example.demo.domain.board.domain.entity.Board; +import com.example.demo.infra.board.entity.Board; import com.example.demo.domain.comment.domain.dto.request.CommentRequest; import com.example.demo.domain.report.domain.Report; import com.example.demo.domain.user.domain.User; diff --git a/src/main/java/com/example/demo/domain/comment/repository/BoardCommentRepository.java b/src/main/java/com/example/demo/domain/comment/repository/BoardCommentRepository.java index 9cc69e5a..22b710b6 100644 --- a/src/main/java/com/example/demo/domain/comment/repository/BoardCommentRepository.java +++ b/src/main/java/com/example/demo/domain/comment/repository/BoardCommentRepository.java @@ -1,7 +1,7 @@ package com.example.demo.domain.comment.repository; -import com.example.demo.domain.board.domain.dto.vo.BoardType; -import com.example.demo.domain.board.domain.entity.Board; +import com.example.demo.application.board.dto.vo.BoardType; +import com.example.demo.infra.board.entity.Board; import com.example.demo.domain.comment.domain.dto.request.CommentRequest; import com.example.demo.domain.comment.domain.dto.response.MyCommentResponse; import com.example.demo.domain.comment.domain.entity.BoardComment; diff --git a/src/main/java/com/example/demo/domain/comment/service/BoardCommentService.java b/src/main/java/com/example/demo/domain/comment/service/BoardCommentService.java index 381d190b..52dfcc14 100644 --- a/src/main/java/com/example/demo/domain/comment/service/BoardCommentService.java +++ b/src/main/java/com/example/demo/domain/comment/service/BoardCommentService.java @@ -1,6 +1,6 @@ package com.example.demo.domain.comment.service; -import com.example.demo.domain.board.domain.dto.vo.BoardType; +import com.example.demo.application.board.dto.vo.BoardType; import com.example.demo.domain.comment.repository.CommonCommentRepository; import com.example.demo.domain.recruitment_board.repository.CommonBoardRepository; import com.example.demo.domain.user.service.UserService; @@ -13,7 +13,7 @@ protected BoardCommentService( UserService userService, CommentNotificationService commentNotificationService, @Qualifier("boardCommentRepository") CommonCommentRepository commentRepository, - @Qualifier("boardRepository") CommonBoardRepository boardRepository) { + @Qualifier("boardJpaRepository") CommonBoardRepository boardRepository) { super(userService, commentNotificationService, commentRepository, boardRepository); } } diff --git a/src/main/java/com/example/demo/domain/fake/FakeAuthController.java b/src/main/java/com/example/demo/domain/fake/FakeAuthController.java index 0fd2a84c..330c522c 100644 --- a/src/main/java/com/example/demo/domain/fake/FakeAuthController.java +++ b/src/main/java/com/example/demo/domain/fake/FakeAuthController.java @@ -3,7 +3,7 @@ import com.example.demo.domain.token.domain.dto.TokenResponse; import com.example.demo.domain.user.domain.User; import com.example.demo.domain.user.domain.vo.Role; -import com.example.demo.domain.user.repository.UserRepository; +import com.example.demo.domain.user.repository.UserJpaRepository; import com.example.demo.domain.user_addtional_info.domain.UserAdditionalInfo; import com.example.demo.domain.user_addtional_info.domain.vo.StudentStatus; import com.example.demo.global.base.dto.ResponseBody; @@ -28,7 +28,7 @@ @RequiredArgsConstructor public class FakeAuthController implements FakeAuthApi { private final JwtHandler jwtHandler; - private final UserRepository userRepository; + private final UserJpaRepository userJpaRepository; private volatile Long fakeUserId = null; private final Role fakeUserRole = Role.ROLE_ADMIN; @@ -43,7 +43,7 @@ public ResponseEntity> fakeLogin() { if (fakeUserId == null) { String fakeProviderId = "fake-provider-id"; - userRepository.findByProviderAndProviderId(OAuth2Provider.GOOGLE, fakeProviderId).ifPresent(user -> { + userJpaRepository.findByProviderAndProviderId(OAuth2Provider.GOOGLE, fakeProviderId).ifPresent(user -> { fakeUserId = user.getId(); }); if (fakeUserId == null) { @@ -62,7 +62,7 @@ public ResponseEntity> fakeLogin() { .phoneNumber("01000000000") .isUpdated(true).build(); fakeUser.mapAdditionalInfo(fakeUserAdditionalInfo); - User saveFakeUser = userRepository.save(fakeUser); + User saveFakeUser = userJpaRepository.save(fakeUser); fakeUserId = saveFakeUser.getId(); } } diff --git a/src/main/java/com/example/demo/domain/newsletter/strategy/SeminarSummaryEmailDeliveryStrategy.java b/src/main/java/com/example/demo/domain/newsletter/strategy/SeminarSummaryEmailDeliveryStrategy.java index 5a9053c7..0c1c77f6 100644 --- a/src/main/java/com/example/demo/domain/newsletter/strategy/SeminarSummaryEmailDeliveryStrategy.java +++ b/src/main/java/com/example/demo/domain/newsletter/strategy/SeminarSummaryEmailDeliveryStrategy.java @@ -1,7 +1,7 @@ package com.example.demo.domain.newsletter.strategy; -import com.example.demo.domain.board.domain.dto.vo.BoardType; -import com.example.demo.domain.board.domain.entity.Board; +import com.example.demo.application.board.dto.vo.BoardType; +import com.example.demo.infra.board.entity.Board; import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.NoArgsConstructor; diff --git a/src/main/java/com/example/demo/domain/notification/domain/entity/Notification.java b/src/main/java/com/example/demo/domain/notification/domain/entity/Notification.java index adcba72a..365ce58c 100644 --- a/src/main/java/com/example/demo/domain/notification/domain/entity/Notification.java +++ b/src/main/java/com/example/demo/domain/notification/domain/entity/Notification.java @@ -1,6 +1,6 @@ package com.example.demo.domain.notification.domain.entity; -import com.example.demo.domain.board.domain.entity.Like; +import com.example.demo.infra.board.entity.Like; import com.example.demo.domain.comment.domain.entity.Comment; import com.example.demo.domain.notification.domain.vo.NotificationType; import com.example.demo.global.base.domain.BaseEntity; diff --git a/src/main/java/com/example/demo/domain/recruitment_board/controller/RecruitmentBoardController.java b/src/main/java/com/example/demo/domain/recruitment_board/controller/RecruitmentBoardController.java index 8bd6380f..e20d2e02 100644 --- a/src/main/java/com/example/demo/domain/recruitment_board/controller/RecruitmentBoardController.java +++ b/src/main/java/com/example/demo/domain/recruitment_board/controller/RecruitmentBoardController.java @@ -1,6 +1,6 @@ package com.example.demo.domain.recruitment_board.controller; -import com.example.demo.domain.board.domain.dto.vo.Status; +import com.example.demo.application.board.dto.vo.Status; import com.example.demo.domain.recruitment_board.controller.swagger.RecruitmentBoardApi; import com.example.demo.domain.recruitment_board.domain.dto.request.RecruitmentBoardInfoAndFormRequest; import com.example.demo.domain.recruitment_board.domain.dto.response.*; diff --git a/src/main/java/com/example/demo/domain/recruitment_board/controller/swagger/RecruitmentBoardApi.java b/src/main/java/com/example/demo/domain/recruitment_board/controller/swagger/RecruitmentBoardApi.java index d90a4d65..09fceced 100644 --- a/src/main/java/com/example/demo/domain/recruitment_board/controller/swagger/RecruitmentBoardApi.java +++ b/src/main/java/com/example/demo/domain/recruitment_board/controller/swagger/RecruitmentBoardApi.java @@ -1,6 +1,6 @@ package com.example.demo.domain.recruitment_board.controller.swagger; -import com.example.demo.domain.board.domain.dto.vo.Status; +import com.example.demo.application.board.dto.vo.Status; import com.example.demo.domain.recruitment_board.domain.dto.request.RecruitmentBoardInfoAndFormRequest; import com.example.demo.domain.recruitment_board.domain.dto.response.*; import com.example.demo.domain.recruitment_board.domain.vo.RecruitmentBoardType; diff --git a/src/main/java/com/example/demo/domain/recruitment_board/domain/dto/response/RecruitmentBoardInfoResponse.java b/src/main/java/com/example/demo/domain/recruitment_board/domain/dto/response/RecruitmentBoardInfoResponse.java index b3aa68e1..07c0071b 100644 --- a/src/main/java/com/example/demo/domain/recruitment_board/domain/dto/response/RecruitmentBoardInfoResponse.java +++ b/src/main/java/com/example/demo/domain/recruitment_board/domain/dto/response/RecruitmentBoardInfoResponse.java @@ -1,6 +1,6 @@ package com.example.demo.domain.recruitment_board.domain.dto.response; -import com.example.demo.domain.board.domain.dto.vo.Status; +import com.example.demo.application.board.dto.vo.Status; import com.example.demo.domain.recruitment_board.domain.entity.RecruitmentBoard; import com.example.demo.domain.recruitment_board.domain.vo.RecruitmentBoardTag; import com.example.demo.domain.recruitment_board.domain.vo.RecruitmentBoardType; diff --git a/src/main/java/com/example/demo/domain/recruitment_board/domain/entity/RecruitmentBoard.java b/src/main/java/com/example/demo/domain/recruitment_board/domain/entity/RecruitmentBoard.java index 3f717b99..389866d3 100644 --- a/src/main/java/com/example/demo/domain/recruitment_board/domain/entity/RecruitmentBoard.java +++ b/src/main/java/com/example/demo/domain/recruitment_board/domain/entity/RecruitmentBoard.java @@ -1,6 +1,6 @@ package com.example.demo.domain.recruitment_board.domain.entity; -import com.example.demo.domain.board.domain.dto.vo.Status; +import com.example.demo.application.board.dto.vo.Status; import com.example.demo.domain.comment.domain.entity.RecruitmentBoardComment; import com.example.demo.domain.recruitment_application.domain.entity.RecruitmentApplicant; import com.example.demo.domain.recruitment_board.domain.dto.request.RecruitmentBoardInfoAndFormRequest; diff --git a/src/main/java/com/example/demo/domain/recruitment_board/domain/vo/EntireBoardType.java b/src/main/java/com/example/demo/domain/recruitment_board/domain/vo/EntireBoardType.java index b3e30660..f01001b0 100644 --- a/src/main/java/com/example/demo/domain/recruitment_board/domain/vo/EntireBoardType.java +++ b/src/main/java/com/example/demo/domain/recruitment_board/domain/vo/EntireBoardType.java @@ -1,6 +1,6 @@ package com.example.demo.domain.recruitment_board.domain.vo; -import com.example.demo.domain.board.domain.dto.vo.BoardType; +import com.example.demo.application.board.dto.vo.BoardType; import com.example.demo.global.base.exception.ErrorCode; import com.example.demo.global.base.exception.ServiceException; import com.fasterxml.jackson.annotation.JsonCreator; diff --git a/src/main/java/com/example/demo/domain/recruitment_board/repository/QueryDslRecruitmentBoardRepositoryImpl.java b/src/main/java/com/example/demo/domain/recruitment_board/repository/QueryDslRecruitmentBoardRepositoryImpl.java index 43e6a257..9dbf08d4 100644 --- a/src/main/java/com/example/demo/domain/recruitment_board/repository/QueryDslRecruitmentBoardRepositoryImpl.java +++ b/src/main/java/com/example/demo/domain/recruitment_board/repository/QueryDslRecruitmentBoardRepositoryImpl.java @@ -1,6 +1,6 @@ package com.example.demo.domain.recruitment_board.repository; -import com.example.demo.domain.board.domain.dto.vo.Status; +import com.example.demo.application.board.dto.vo.Status; import com.example.demo.domain.recruitment_board.domain.dto.response.RecruitmentBoardNoOffsetResponse; import com.example.demo.domain.recruitment_board.domain.entity.RecruitmentBoard; import com.example.demo.domain.recruitment_board.domain.vo.RecruitmentBoardType; diff --git a/src/main/java/com/example/demo/domain/recruitment_board/repository/RecruitmentBoardRepository.java b/src/main/java/com/example/demo/domain/recruitment_board/repository/RecruitmentBoardRepository.java index 6d0264dd..b66fdf14 100644 --- a/src/main/java/com/example/demo/domain/recruitment_board/repository/RecruitmentBoardRepository.java +++ b/src/main/java/com/example/demo/domain/recruitment_board/repository/RecruitmentBoardRepository.java @@ -13,13 +13,13 @@ public interface RecruitmentBoardRepository extends JpaRepository, CommonBoardRepository, QueryDslRecruitmentBoardRepository { @Query("Select sb.id From RecruitmentBoard sb " + "where sb.recruitmentDeadline >= CURRENT_TIMESTAMP " + - "and sb.status = com.example.demo.domain.board.domain.dto.vo.Status.PUBLISHED " + + "and sb.status = com.example.demo.application.board.dto.vo.Status.PUBLISHED " + "and sb.type = :boardType " + "order by sb.recruitmentDeadline asc, sb.id asc") List findPublishedId(RecruitmentBoardType boardType); @Query("Select Max(id) From RecruitmentBoard " + - "where status = com.example.demo.domain.board.domain.dto.vo.Status.DRAFT " + + "where status = com.example.demo.application.board.dto.vo.Status.DRAFT " + "and user.id = :userId") Optional findFirstDraftIdByUserId(Long userId); diff --git a/src/main/java/com/example/demo/domain/recruitment_board/service/RecruitmentBoardService.java b/src/main/java/com/example/demo/domain/recruitment_board/service/RecruitmentBoardService.java index 610d7835..738c8a31 100644 --- a/src/main/java/com/example/demo/domain/recruitment_board/service/RecruitmentBoardService.java +++ b/src/main/java/com/example/demo/domain/recruitment_board/service/RecruitmentBoardService.java @@ -1,6 +1,6 @@ package com.example.demo.domain.recruitment_board.service; -import com.example.demo.domain.board.domain.dto.vo.Status; +import com.example.demo.application.board.dto.vo.Status; import com.example.demo.domain.newsletter.event.EmailNotificationEvent; import com.example.demo.domain.newsletter.strategy.MentoringNoticeEmailDeliveryStrategy; import com.example.demo.domain.newsletter.strategy.ProjectNoticeEmailDeliveryStrategy; diff --git a/src/main/java/com/example/demo/domain/report/service/ReportService.java b/src/main/java/com/example/demo/domain/report/service/ReportService.java index 721a8263..da2cfb22 100644 --- a/src/main/java/com/example/demo/domain/report/service/ReportService.java +++ b/src/main/java/com/example/demo/domain/report/service/ReportService.java @@ -9,7 +9,7 @@ import com.example.demo.domain.report.domain.dto.ReportResponse; import com.example.demo.domain.report.repository.ReportRepository; import com.example.demo.domain.user.domain.User; -import com.example.demo.domain.user.repository.UserRepository; +import com.example.demo.domain.user.repository.UserJpaRepository; import com.example.demo.global.base.dto.page.GlobalPageResponse; import com.example.demo.global.base.exception.ErrorCode; import com.example.demo.global.base.exception.ServiceException; @@ -25,7 +25,7 @@ public class ReportService { private final ReportRepository reportRepository; - private final UserRepository userRepository; + private final UserJpaRepository userJpaRepository; private final BoardCommentRepository boardCommentRepository; private final RecruitmentBoardCommentRepository recruitmentBoardCommentRepository; private final DiscordReportClient discordReportClient; @@ -45,7 +45,7 @@ public void reportRecruitmentBoardComment(Long commentId, Long userId) { } private void saveCommentReport(Long userId, Comment comment) { - User user = userRepository.findById(userId).orElseThrow(() -> new ServiceException(ErrorCode.USER_NOT_FOUND)); + User user = userJpaRepository.findById(userId).orElseThrow(() -> new ServiceException(ErrorCode.USER_NOT_FOUND)); Report report = comment.toReport(user); reportRepository.save(report); diff --git a/src/main/java/com/example/demo/domain/user/api/UserApi.java b/src/main/java/com/example/demo/domain/user/api/UserApi.java index 2d8a0500..836fa0d3 100644 --- a/src/main/java/com/example/demo/domain/user/api/UserApi.java +++ b/src/main/java/com/example/demo/domain/user/api/UserApi.java @@ -1,6 +1,5 @@ package com.example.demo.domain.user.api; -import com.example.demo.domain.board.domain.dto.request.BoardCreateRequest; import com.example.demo.domain.token.domain.dto.TokenResponse; import com.example.demo.domain.user.domain.dto.request.CompleteRegistrationRequest; import com.example.demo.domain.user.domain.dto.request.UpdateNicknameRequest; diff --git a/src/main/java/com/example/demo/domain/user/controller/UserController.java b/src/main/java/com/example/demo/domain/user/controller/UserController.java index c2daba29..068d58f0 100644 --- a/src/main/java/com/example/demo/domain/user/controller/UserController.java +++ b/src/main/java/com/example/demo/domain/user/controller/UserController.java @@ -4,7 +4,6 @@ import static com.example.demo.global.base.dto.ResponseUtil.*; import static com.example.demo.global.regex.UserRegex.NICKNAME_REGEXP; -import com.example.demo.domain.board.api.BoardFileApi; import com.example.demo.domain.token.domain.dto.TokenResponse; import com.example.demo.domain.user.api.UserApi; import com.example.demo.domain.user.domain.dto.request.UpdateNicknameRequest; @@ -15,7 +14,6 @@ import com.example.demo.global.aop.AssignUserId; import com.example.demo.global.base.dto.ResponseBody; -import io.lettuce.core.dynamic.annotation.Param; import jakarta.validation.Valid; import jakarta.validation.constraints.Pattern; import lombok.RequiredArgsConstructor; diff --git a/src/main/java/com/example/demo/domain/user/controller/UserFileController.java b/src/main/java/com/example/demo/domain/user/controller/UserFileController.java index 59fc1a54..a19927b0 100644 --- a/src/main/java/com/example/demo/domain/user/controller/UserFileController.java +++ b/src/main/java/com/example/demo/domain/user/controller/UserFileController.java @@ -1,6 +1,5 @@ package com.example.demo.domain.user.controller; -import com.example.demo.domain.board.domain.dto.request.FileRequest; import com.example.demo.domain.user.api.UserFileApi; import com.example.demo.domain.user.domain.dto.request.ChangeProfileUrlRequest; import com.example.demo.domain.user.domain.dto.request.ProfilePresignedUrlRequest; diff --git a/src/main/java/com/example/demo/domain/user/domain/User.java b/src/main/java/com/example/demo/domain/user/domain/User.java index 2549ee92..338abb0a 100644 --- a/src/main/java/com/example/demo/domain/user/domain/User.java +++ b/src/main/java/com/example/demo/domain/user/domain/User.java @@ -1,7 +1,7 @@ package com.example.demo.domain.user.domain; -import com.example.demo.domain.board.domain.entity.Board; -import com.example.demo.domain.board.domain.entity.Like; +import com.example.demo.infra.board.entity.Board; +import com.example.demo.infra.board.entity.Like; import com.example.demo.domain.comment.domain.entity.BoardComment; import com.example.demo.domain.comment.domain.entity.RecruitmentBoardComment; import com.example.demo.domain.notification.domain.entity.NotificationUser; diff --git a/src/main/java/com/example/demo/domain/user/domain/UserTarget.java b/src/main/java/com/example/demo/domain/user/domain/UserTarget.java new file mode 100644 index 00000000..43dcd18e --- /dev/null +++ b/src/main/java/com/example/demo/domain/user/domain/UserTarget.java @@ -0,0 +1,20 @@ +package com.example.demo.domain.user.domain; + +import com.example.demo.domain.user.domain.vo.Role; + +import lombok.Builder; +import lombok.Getter; + +@Getter +public class UserTarget { + private final Long userId; + private final String nickName; + private final Role userRole; + + @Builder + private UserTarget(Long userId, String nickName, Role userRole) { + this.userId = userId; + this.nickName = nickName; + this.userRole = userRole; + } +} diff --git a/src/main/java/com/example/demo/domain/user/domain/dto/request/ProfilePresignedUrlRequest.java b/src/main/java/com/example/demo/domain/user/domain/dto/request/ProfilePresignedUrlRequest.java index da195d4e..f443599d 100644 --- a/src/main/java/com/example/demo/domain/user/domain/dto/request/ProfilePresignedUrlRequest.java +++ b/src/main/java/com/example/demo/domain/user/domain/dto/request/ProfilePresignedUrlRequest.java @@ -1,6 +1,6 @@ package com.example.demo.domain.user.domain.dto.request; -import com.example.demo.domain.board.domain.dto.vo.FileType; +import com.example.demo.application.board.dto.vo.FileType; import com.example.demo.global.aop.valid.ValidEnum; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; diff --git a/src/main/java/com/example/demo/domain/user/implement/UserReader.java b/src/main/java/com/example/demo/domain/user/implement/UserReader.java new file mode 100644 index 00000000..0f0a34a2 --- /dev/null +++ b/src/main/java/com/example/demo/domain/user/implement/UserReader.java @@ -0,0 +1,23 @@ +package com.example.demo.domain.user.implement; + +import java.util.Optional; + +import org.springframework.stereotype.Component; + +import com.example.demo.domain.user.domain.UserTarget; +import com.example.demo.domain.user.repository.UserJpaRepository; +import com.example.demo.domain.user.repository.UserRepository; + +import lombok.RequiredArgsConstructor; + +@Component +@RequiredArgsConstructor +public class UserReader { + private final UserRepository userRepository; + + + public Optional findUser(Long userId) { + return userRepository.findUser(userId); + } + +} diff --git a/src/main/java/com/example/demo/domain/user/repository/UserJpaRepository.java b/src/main/java/com/example/demo/domain/user/repository/UserJpaRepository.java new file mode 100644 index 00000000..19ca3432 --- /dev/null +++ b/src/main/java/com/example/demo/domain/user/repository/UserJpaRepository.java @@ -0,0 +1,13 @@ +package com.example.demo.domain.user.repository; + +import com.example.demo.domain.user.domain.User; +import com.example.demo.global.oauth.user.OAuth2Provider; +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.Optional; + +public interface UserJpaRepository extends JpaRepository { + Optional findByProviderAndProviderId(OAuth2Provider provider, String providerId); + + boolean existsByNickname(String nickname); +} diff --git a/src/main/java/com/example/demo/domain/user/repository/UserRepository.java b/src/main/java/com/example/demo/domain/user/repository/UserRepository.java index 891c7fbd..76ef0370 100644 --- a/src/main/java/com/example/demo/domain/user/repository/UserRepository.java +++ b/src/main/java/com/example/demo/domain/user/repository/UserRepository.java @@ -1,14 +1,13 @@ package com.example.demo.domain.user.repository; -import com.example.demo.domain.user.domain.User; -import com.example.demo.global.oauth.user.OAuth2Provider; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.security.core.userdetails.UserDetails; - import java.util.Optional; -public interface UserRepository extends JpaRepository { - Optional findByProviderAndProviderId(OAuth2Provider provider, String providerId); +import org.springframework.security.config.annotation.web.PortMapperDsl; + +import com.example.demo.domain.user.domain.User; +import com.example.demo.domain.user.domain.UserTarget; + +public interface UserRepository { - boolean existsByNickname(String nickname); + Optional findUser(Long userId); } diff --git a/src/main/java/com/example/demo/domain/user/repository/UserRepositoryImpl.java b/src/main/java/com/example/demo/domain/user/repository/UserRepositoryImpl.java new file mode 100644 index 00000000..b25c1f97 --- /dev/null +++ b/src/main/java/com/example/demo/domain/user/repository/UserRepositoryImpl.java @@ -0,0 +1,26 @@ +package com.example.demo.domain.user.repository; + +import java.util.Optional; + +import org.springframework.stereotype.Repository; + +import com.example.demo.domain.user.domain.User; +import com.example.demo.domain.user.domain.UserTarget; + +import lombok.RequiredArgsConstructor; + +@Repository +@RequiredArgsConstructor +public class UserRepositoryImpl implements UserRepository { + private final UserJpaRepository userJpaRepository; + + @Override + public Optional findUser(Long userId) { + return userJpaRepository.findById(userId) + .map(user -> UserTarget.builder() + .userId(userId) + .nickName(user.getNickname()) + .userRole(user.getRole()) + .build()); + } +} diff --git a/src/main/java/com/example/demo/domain/user/service/UserAdminService.java b/src/main/java/com/example/demo/domain/user/service/UserAdminService.java index 4efa9fcd..e55e28eb 100644 --- a/src/main/java/com/example/demo/domain/user/service/UserAdminService.java +++ b/src/main/java/com/example/demo/domain/user/service/UserAdminService.java @@ -3,9 +3,9 @@ import com.example.demo.domain.user.domain.User; import com.example.demo.domain.user.domain.dto.request.UpdateUserInfoRequest; import com.example.demo.domain.user.domain.dto.response.UserInfo; -import com.example.demo.domain.user.repository.UserRepository; +import com.example.demo.domain.user.repository.UserJpaRepository; import com.example.demo.global.base.dto.page.GlobalPageResponse; -import jakarta.validation.Valid; + import lombok.RequiredArgsConstructor; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; @@ -19,11 +19,11 @@ @Service public class UserAdminService { - private final UserRepository userRepository; + private final UserJpaRepository userJpaRepository; private final UserService userService; public Boolean isAdmin(Long userId) { - Optional userOptional = userRepository.findById(userId); + Optional userOptional = userJpaRepository.findById(userId); if (userOptional.isPresent()) { User user = userOptional.get(); @@ -34,7 +34,7 @@ public Boolean isAdmin(Long userId) { } public GlobalPageResponse getAllUsers(Pageable pageable) { - Page userInfoPage = userRepository.findAll(pageable).map(UserInfo::from); + Page userInfoPage = userJpaRepository.findAll(pageable).map(UserInfo::from); return GlobalPageResponse.create(userInfoPage); } @@ -47,6 +47,6 @@ public void updateUserInfo(Long userId, UpdateUserInfoRequest request) { @Transactional public void deleteUser(Long userId) { - userRepository.deleteById(userId); + userJpaRepository.deleteById(userId); } } diff --git a/src/main/java/com/example/demo/domain/user/service/UserService.java b/src/main/java/com/example/demo/domain/user/service/UserService.java index 7496e4c9..a067a912 100644 --- a/src/main/java/com/example/demo/domain/user/service/UserService.java +++ b/src/main/java/com/example/demo/domain/user/service/UserService.java @@ -7,7 +7,7 @@ import com.example.demo.domain.user.domain.dto.request.UpdateNicknameRequest; import com.example.demo.domain.user.domain.dto.response.UserInfo; import com.example.demo.domain.user.domain.dto.response.UserProfile; -import com.example.demo.domain.user.repository.UserRepository; +import com.example.demo.domain.user.repository.UserJpaRepository; import com.example.demo.global.base.exception.ErrorCode; import com.example.demo.global.base.exception.ServiceException; import com.example.demo.global.jwt.JwtHandler; @@ -23,13 +23,13 @@ @Service public class UserService { - private final UserRepository userRepository; + private final UserJpaRepository userJpaRepository; private final RefreshTokenRepository refreshTokenRepository; private final JwtHandler jwtHandler; private final S3UrlUtil s3UrlUtil; public void checkNicknameDuplicate(String nickname) { - if(userRepository.existsByNickname(nickname)){ + if(userJpaRepository.existsByNickname(nickname)){ throw new ServiceException(ErrorCode.EXIST_SAME_NICKNAME); } } @@ -37,7 +37,7 @@ public void checkNicknameDuplicate(String nickname) { @Transactional public TokenResponse completeRegistration(Long userId, CompleteRegistrationRequest request) { User user = this.validateUser(userId); - if(userRepository.existsByNickname(request.nickname())){ + if(userJpaRepository.existsByNickname(request.nickname())){ throw new ServiceException(ErrorCode.EXIST_SAME_NICKNAME); } user.setInitialInfo(request.nickname(), request.name(), s3UrlUtil.getDefaultImageUrl()); @@ -50,7 +50,7 @@ public void logout(Long userId) { } public User validateUser(Long userId) { - return userRepository.findById(userId).orElseThrow(() -> new ServiceException(ErrorCode.USER_NOT_FOUND)); + return userJpaRepository.findById(userId).orElseThrow(() -> new ServiceException(ErrorCode.USER_NOT_FOUND)); } @Transactional diff --git a/src/main/java/com/example/demo/global/base/dto/page/GlobalPageResponse.java b/src/main/java/com/example/demo/global/base/dto/page/GlobalPageResponse.java index 40c47cc1..31f8493f 100644 --- a/src/main/java/com/example/demo/global/base/dto/page/GlobalPageResponse.java +++ b/src/main/java/com/example/demo/global/base/dto/page/GlobalPageResponse.java @@ -4,8 +4,6 @@ import org.springframework.data.domain.Page; -import com.example.demo.domain.board.domain.dto.response.BoardTitleInfoResponse; - import io.swagger.v3.oas.annotations.media.Schema; import lombok.Getter; diff --git a/src/main/java/com/example/demo/global/base/exception/ErrorCode.java b/src/main/java/com/example/demo/global/base/exception/ErrorCode.java index 7e663e5f..b2c3043a 100644 --- a/src/main/java/com/example/demo/global/base/exception/ErrorCode.java +++ b/src/main/java/com/example/demo/global/base/exception/ErrorCode.java @@ -1,7 +1,7 @@ package com.example.demo.global.base.exception; -import com.example.demo.domain.board.domain.dto.vo.BoardType; -import com.example.demo.domain.board.domain.dto.vo.Status; +import com.example.demo.application.board.dto.vo.BoardType; +import com.example.demo.application.board.dto.vo.Status; import com.example.demo.domain.comment.domain.vo.CommentTargetBoardType; import com.example.demo.domain.recruitment_board.domain.vo.EntireBoardType; import com.example.demo.domain.recruitment_board.domain.vo.QuestionType; diff --git a/src/main/java/com/example/demo/global/config/swagger/SwaggerConfig.java b/src/main/java/com/example/demo/global/config/swagger/SwaggerConfig.java index 4cd22997..3f522a39 100644 --- a/src/main/java/com/example/demo/global/config/swagger/SwaggerConfig.java +++ b/src/main/java/com/example/demo/global/config/swagger/SwaggerConfig.java @@ -2,7 +2,6 @@ import org.springdoc.core.customizers.OperationCustomizer; import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Profile; import org.springframework.core.env.Environment; @@ -10,14 +9,10 @@ import org.springframework.web.filter.ForwardedHeaderFilter; import org.springframework.web.method.HandlerMethod; -import com.example.demo.domain.board.domain.dto.response.BoardInfoResponse; - -import io.swagger.v3.oas.annotations.OpenAPIDefinition; import io.swagger.v3.oas.models.Components; import io.swagger.v3.oas.models.OpenAPI; import io.swagger.v3.oas.models.Operation; import io.swagger.v3.oas.models.info.Info; -import io.swagger.v3.oas.models.media.Schema; import io.swagger.v3.oas.models.security.SecurityRequirement; import io.swagger.v3.oas.models.security.SecurityScheme; import lombok.RequiredArgsConstructor; diff --git a/src/main/java/com/example/demo/global/converter/BoardTypeConverter.java b/src/main/java/com/example/demo/global/converter/BoardTypeConverter.java index 36a1653c..764c19cb 100644 --- a/src/main/java/com/example/demo/global/converter/BoardTypeConverter.java +++ b/src/main/java/com/example/demo/global/converter/BoardTypeConverter.java @@ -1,6 +1,6 @@ package com.example.demo.global.converter; -import com.example.demo.domain.board.domain.dto.vo.BoardType; +import com.example.demo.application.board.dto.vo.BoardType; import com.example.demo.global.base.exception.ErrorCode; import com.example.demo.global.base.exception.ServiceException; import org.springframework.core.convert.converter.Converter; diff --git a/src/main/java/com/example/demo/global/converter/StatusConverter.java b/src/main/java/com/example/demo/global/converter/StatusConverter.java index bac94c6f..fb58b917 100644 --- a/src/main/java/com/example/demo/global/converter/StatusConverter.java +++ b/src/main/java/com/example/demo/global/converter/StatusConverter.java @@ -1,6 +1,6 @@ package com.example.demo.global.converter; -import com.example.demo.domain.board.domain.dto.vo.Status; +import com.example.demo.application.board.dto.vo.Status; import com.example.demo.global.base.exception.ErrorCode; import com.example.demo.global.base.exception.ServiceException; import org.springframework.core.convert.converter.Converter; diff --git a/src/main/java/com/example/demo/global/event/view/BoardViewEventListener.java b/src/main/java/com/example/demo/global/event/view/BoardViewEventListener.java index fbb83686..640ec3ff 100644 --- a/src/main/java/com/example/demo/global/event/view/BoardViewEventListener.java +++ b/src/main/java/com/example/demo/global/event/view/BoardViewEventListener.java @@ -11,21 +11,21 @@ import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; -import com.example.demo.domain.board.Repository.BoardRepository; +import com.example.demo.infra.board.Repository.BoardJpaRepository; @Service public class BoardViewEventListener { private final ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor(); private final ConcurrentHashMap> taskMap = new ConcurrentHashMap<>(); - private final BoardRepository boardRepository; + private final BoardJpaRepository boardJpaRepository; private final RedisTemplate redisTemplate; private static final String BOARD_VIEW_KEY = "board:view:"; @Autowired - public BoardViewEventListener(BoardRepository boardRepository, RedisTemplate redisTemplate) { - this.boardRepository = boardRepository; + public BoardViewEventListener(BoardJpaRepository boardJpaRepository, RedisTemplate redisTemplate) { + this.boardJpaRepository = boardJpaRepository; this.redisTemplate = redisTemplate; } @@ -60,7 +60,7 @@ public void bulkUpdateView(BoardViewEvent event) { redisTemplate.opsForValue().decrement(boardViewKey, viewCount); - boardRepository.increaseViewCount(boardId, viewCount); + boardJpaRepository.increaseViewCount(boardId, viewCount); // 작업 완료 후 해당 boardId의 예약 제거 taskMap.remove(boardId); diff --git a/src/main/java/com/example/demo/global/oauth/handler/OAuth2AuthenticationSuccessHandler.java b/src/main/java/com/example/demo/global/oauth/handler/OAuth2AuthenticationSuccessHandler.java index efd8ab52..cddfc001 100644 --- a/src/main/java/com/example/demo/global/oauth/handler/OAuth2AuthenticationSuccessHandler.java +++ b/src/main/java/com/example/demo/global/oauth/handler/OAuth2AuthenticationSuccessHandler.java @@ -7,7 +7,7 @@ import com.example.demo.domain.token.repository.RefreshTokenRepository; import com.example.demo.domain.user.domain.User; import com.example.demo.domain.user.domain.vo.Role; -import com.example.demo.domain.user.repository.UserRepository; +import com.example.demo.domain.user.repository.UserJpaRepository; import com.example.demo.global.jwt.JwtHandler; import com.example.demo.global.jwt.JwtUserClaim; import org.springframework.security.core.Authentication; @@ -40,7 +40,7 @@ public class OAuth2AuthenticationSuccessHandler extends SimpleUrlAuthenticationS private final HttpCookieOAuth2AuthorizationRequestRepository httpCookieOAuth2AuthorizationRequestRepository; private final OAuth2UserUnlinkManager oAuth2UserUnlinkManager; - private final UserRepository userRepository; + private final UserJpaRepository userJpaRepository; private final RefreshTokenRepository refreshTokenRepository; private final JwtHandler jwtHandler; @@ -101,7 +101,7 @@ private String handleLogin(OAuth2UserPrincipal principal, String targetUrl) { String providerId = principal.getUserInfo().getId(); OAuth2Provider provider = principal.getUserInfo().getProvider(); - User user = userRepository.findByProviderAndProviderId(provider, providerId) + User user = userJpaRepository.findByProviderAndProviderId(provider, providerId) .orElseGet(() -> { isNewUser.set(true); return createAndSaveNewUser(providerId, provider); @@ -128,7 +128,7 @@ private User createAndSaveNewUser(String providerId, OAuth2Provider provider) { .role(Role.ROLE_GUEST) .build(); - return userRepository.save(user); + return userJpaRepository.save(user); } private String handleUnlink(OAuth2UserPrincipal principal, String targetUrl) { @@ -136,9 +136,9 @@ private String handleUnlink(OAuth2UserPrincipal principal, String targetUrl) { oAuth2UserUnlinkManager.unlink(provider, principal.getUserInfo().getAccessToken()); - userRepository.findByProviderAndProviderId(provider, principal.getUserInfo().getId()) + userJpaRepository.findByProviderAndProviderId(provider, principal.getUserInfo().getId()) .ifPresent(user -> { - userRepository.delete(user); + userJpaRepository.delete(user); refreshTokenRepository.deleteById(user.getId()); }); diff --git a/src/main/java/com/example/demo/global/utils/S3UrlUtil.java b/src/main/java/com/example/demo/global/utils/S3UrlUtil.java index ee72bc4a..85b518e3 100644 --- a/src/main/java/com/example/demo/global/utils/S3UrlUtil.java +++ b/src/main/java/com/example/demo/global/utils/S3UrlUtil.java @@ -8,7 +8,7 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; -import com.example.demo.domain.board.domain.dto.request.PresignedUrlRequest; +import com.example.demo.application.board.dto.request.PresignedUrlRequest; import com.example.demo.global.base.exception.ErrorCode; import com.example.demo.global.base.exception.ServiceException; diff --git a/src/main/java/com/example/demo/domain/board/Repository/BoardCategoryRepository.java b/src/main/java/com/example/demo/infra/board/Repository/BoardCategoryJpaRepository.java similarity index 68% rename from src/main/java/com/example/demo/domain/board/Repository/BoardCategoryRepository.java rename to src/main/java/com/example/demo/infra/board/Repository/BoardCategoryJpaRepository.java index 7f6ad0cb..89b06d37 100644 --- a/src/main/java/com/example/demo/domain/board/Repository/BoardCategoryRepository.java +++ b/src/main/java/com/example/demo/infra/board/Repository/BoardCategoryJpaRepository.java @@ -1,12 +1,12 @@ -package com.example.demo.domain.board.Repository; +package com.example.demo.infra.board.Repository; import java.util.Optional; -import com.example.demo.domain.board.domain.entity.BoardCategory; +import com.example.demo.infra.board.entity.BoardCategory; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; -public interface BoardCategoryRepository extends JpaRepository { +public interface BoardCategoryJpaRepository extends JpaRepository { @Query("SELECT COUNT(bc) FROM BoardCategory bc WHERE bc.category.id = :categoryId") diff --git a/src/main/java/com/example/demo/infra/board/Repository/BoardCategoryRepositoryImpl.java b/src/main/java/com/example/demo/infra/board/Repository/BoardCategoryRepositoryImpl.java new file mode 100644 index 00000000..e2623d90 --- /dev/null +++ b/src/main/java/com/example/demo/infra/board/Repository/BoardCategoryRepositoryImpl.java @@ -0,0 +1,35 @@ +package com.example.demo.infra.board.Repository; + +import org.springframework.stereotype.Repository; + +import com.example.demo.domain.board.service.entity.BoardCategoryNames; +import com.example.demo.domain.board.service.entity.BoardInfo; +import com.example.demo.domain.board.service.repository.BoardCategoryRepository; +import com.example.demo.infra.board.entity.Board; +import com.example.demo.infra.board.entity.BoardCategory; +import com.example.demo.infra.board.entity.Category; + +import lombok.RequiredArgsConstructor; + +@Repository +@RequiredArgsConstructor +public class BoardCategoryRepositoryImpl implements BoardCategoryRepository { + private final BoardCategoryJpaRepository boardCategoryJpaRepository; + private final BoardJpaRepository boardJpaRepository; + private final CategoryJpaRepository categoryJpaRepository; + + @Override + public void saveBoardCategories(BoardInfo draftBoard, BoardCategoryNames boardCategoryNames) { + Board board = boardJpaRepository.findById(draftBoard.getBoardId()).get(); + + boardCategoryNames.getCategories().forEach(categoryName -> { + saveCategoryAndBoardCategory(board, categoryName); + }); + } + private void saveCategoryAndBoardCategory(Board board, String categoryName) { + Category category = categoryJpaRepository.findByName(categoryName) + .orElseGet(() -> categoryJpaRepository.save(new Category(categoryName))); + BoardCategory boardCategory = new BoardCategory(board, category); + boardCategoryJpaRepository.save(boardCategory); + } +} diff --git a/src/main/java/com/example/demo/domain/board/Repository/BoardRepository.java b/src/main/java/com/example/demo/infra/board/Repository/BoardJpaRepository.java similarity index 81% rename from src/main/java/com/example/demo/domain/board/Repository/BoardRepository.java rename to src/main/java/com/example/demo/infra/board/Repository/BoardJpaRepository.java index f14fade4..eeca1ded 100644 --- a/src/main/java/com/example/demo/domain/board/Repository/BoardRepository.java +++ b/src/main/java/com/example/demo/infra/board/Repository/BoardJpaRepository.java @@ -1,9 +1,9 @@ -package com.example.demo.domain.board.Repository; +package com.example.demo.infra.board.Repository; -import com.example.demo.domain.board.domain.dto.response.BoardTitleInfoResponse; -import com.example.demo.domain.board.domain.dto.response.DraftBoardTitleResponse; -import com.example.demo.domain.board.domain.dto.vo.BoardType; -import com.example.demo.domain.board.domain.entity.Board; +import com.example.demo.application.board.dto.response.BoardTitleInfoResponse; +import com.example.demo.application.board.dto.response.DraftBoardTitleResponse; +import com.example.demo.application.board.dto.vo.BoardType; +import com.example.demo.infra.board.entity.Board; import com.example.demo.domain.recruitment_board.domain.entity.GenericBoard; import com.example.demo.domain.recruitment_board.repository.CommonBoardRepository; import org.springframework.data.domain.Page; @@ -17,7 +17,7 @@ import java.util.List; import java.util.Optional; -public interface BoardRepository extends JpaRepository, CommonBoardRepository { +public interface BoardJpaRepository extends JpaRepository, CommonBoardRepository { @Query("SELECT b FROM Board b JOIN FETCH b.comments q WHERE b.id = :id") Optional findPostByIdWithComments(@Param("id") Long id); @@ -30,7 +30,7 @@ public interface BoardRepository extends JpaRepository, CommonBoard "where b.id = :id") List findCategoryNameByBoardId(@Param("id") Long id); - @Query("SELECT new com.example.demo.domain.board.domain.dto.response.BoardTitleInfoResponse" + @Query("SELECT new com.example.demo.application.board.dto.response.BoardTitleInfoResponse" + "(b.id, b.title, b.user.nickname, b.boardType, b.viewCount, COUNT(DISTINCT l),b.headImageUrl ,b.createdAt) " + "FROM Board b " + "LEFT JOIN b.likes l " @@ -39,13 +39,13 @@ public interface BoardRepository extends JpaRepository, CommonBoard Page findBoardByPage(@Param("boardType") BoardType boardType, Pageable pageable);//TODO : 추후 QueryDSL로 변경 - @Query("SELECT new com.example.demo.domain.board.domain.dto.response.DraftBoardTitleResponse " + @Query("SELECT new com.example.demo.application.board.dto.response.DraftBoardTitleResponse " + "(b.id, b.title, b.createdAt, b.updatedAt) " + "FROM Board b " + "WHERE b.user.id = :userId AND b.status = 'DRAFT'") Page findDraftBoardByPage(Long userId, Pageable pageable); - @Query("SELECT new com.example.demo.domain.board.domain.dto.response.BoardTitleInfoResponse" + @Query("SELECT new com.example.demo.application.board.dto.response.BoardTitleInfoResponse" + "(b.id, b.title, b.user.nickname, b.boardType,b.viewCount, COUNT(DISTINCT l),b.headImageUrl ,b.createdAt) " + "FROM Board b " + "LEFT JOIN b.likes l " diff --git a/src/main/java/com/example/demo/infra/board/Repository/BoardRepositoryImpl.java b/src/main/java/com/example/demo/infra/board/Repository/BoardRepositoryImpl.java new file mode 100644 index 00000000..5f910656 --- /dev/null +++ b/src/main/java/com/example/demo/infra/board/Repository/BoardRepositoryImpl.java @@ -0,0 +1,41 @@ +package com.example.demo.infra.board.Repository; + +import org.springframework.stereotype.Repository; + +import com.example.demo.domain.board.service.entity.BoardCore; +import com.example.demo.domain.board.service.entity.BoardInfo; +import com.example.demo.domain.board.service.repository.BoardCategoryRepository; +import com.example.demo.domain.board.service.repository.BoardRepository; +import com.example.demo.domain.user.domain.UserTarget; +import com.example.demo.domain.user.repository.UserJpaRepository; +import com.example.demo.infra.board.entity.Board; + +import lombok.RequiredArgsConstructor; + +@Repository +@RequiredArgsConstructor +public class BoardRepositoryImpl implements BoardRepository { + private final BoardJpaRepository boardJpaRepository; + private final UserJpaRepository userJpaRepository; + + @Override + public BoardInfo saveBoard(UserTarget userTarget, BoardCore boardCore) { + Board board = boardJpaRepository.save(Board.builder() + .title(boardCore.getTitle()) + .content(boardCore.getContents()) + .boardType(boardCore.getBoardType()) + .status(boardCore.getBoardStatus()) + .user(userJpaRepository.findById(userTarget.getUserId()).get()) + .headImageUrl(boardCore.getBoardHeadImageUrl()) + .build()); + return BoardInfo.builder() + .boardId(board.getId()) + .boardCore(boardCore) + .viewCount(board.getViewCount()) + .likeCount(0L) + .createdAt(board.getCreatedAt()) + .updatedAt(board.getUpdatedAt()) + .userTarget(userTarget) + .build(); + } +} diff --git a/src/main/java/com/example/demo/domain/board/Repository/CategoryRepository.java b/src/main/java/com/example/demo/infra/board/Repository/CategoryJpaRepository.java similarity index 68% rename from src/main/java/com/example/demo/domain/board/Repository/CategoryRepository.java rename to src/main/java/com/example/demo/infra/board/Repository/CategoryJpaRepository.java index 09303f63..aba91f42 100644 --- a/src/main/java/com/example/demo/domain/board/Repository/CategoryRepository.java +++ b/src/main/java/com/example/demo/infra/board/Repository/CategoryJpaRepository.java @@ -1,21 +1,20 @@ -package com.example.demo.domain.board.Repository; +package com.example.demo.infra.board.Repository; -import com.example.demo.domain.board.domain.dto.response.BoardTitleInfoResponse; -import com.example.demo.domain.board.domain.entity.Category; +import com.example.demo.application.board.dto.response.BoardTitleInfoResponse; +import com.example.demo.infra.board.entity.Category; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; -import java.util.List; import java.util.Optional; -public interface CategoryRepository extends JpaRepository { +public interface CategoryJpaRepository extends JpaRepository { Optional findByName(String name); - @Query("SELECT new com.example.demo.domain.board.domain.dto.response.BoardTitleInfoResponse" + @Query("SELECT new com.example.demo.application.board.dto.response.BoardTitleInfoResponse" + "(b.id, b.title, b.user.nickname, b.boardType, b.viewCount, COUNT(DISTINCT l),b.headImageUrl, b.createdAt) " + "FROM Board b " + "LEFT JOIN b.likes l " diff --git a/src/main/java/com/example/demo/domain/board/Repository/ImageFileRepository.java b/src/main/java/com/example/demo/infra/board/Repository/ImageFileRepository.java similarity index 63% rename from src/main/java/com/example/demo/domain/board/Repository/ImageFileRepository.java rename to src/main/java/com/example/demo/infra/board/Repository/ImageFileRepository.java index 58e2988b..5a583572 100644 --- a/src/main/java/com/example/demo/domain/board/Repository/ImageFileRepository.java +++ b/src/main/java/com/example/demo/infra/board/Repository/ImageFileRepository.java @@ -1,12 +1,12 @@ -package com.example.demo.domain.board.Repository; +package com.example.demo.infra.board.Repository; import java.util.Optional; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; -import com.example.demo.domain.board.domain.entity.Board; -import com.example.demo.domain.board.domain.entity.ImageFile; +import com.example.demo.infra.board.entity.Board; +import com.example.demo.infra.board.entity.ImageFile; @Repository public interface ImageFileRepository extends JpaRepository { diff --git a/src/main/java/com/example/demo/domain/board/Repository/LikeRepository.java b/src/main/java/com/example/demo/infra/board/Repository/LikeRepository.java similarity index 75% rename from src/main/java/com/example/demo/domain/board/Repository/LikeRepository.java rename to src/main/java/com/example/demo/infra/board/Repository/LikeRepository.java index 5a9a6c7f..f814b270 100644 --- a/src/main/java/com/example/demo/domain/board/Repository/LikeRepository.java +++ b/src/main/java/com/example/demo/infra/board/Repository/LikeRepository.java @@ -1,9 +1,9 @@ -package com.example.demo.domain.board.Repository; +package com.example.demo.infra.board.Repository; import java.util.Optional; -import com.example.demo.domain.board.domain.dto.response.BoardTitleInfoResponse; -import com.example.demo.domain.board.domain.entity.Like; +import com.example.demo.application.board.dto.response.BoardTitleInfoResponse; +import com.example.demo.infra.board.entity.Like; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; @@ -17,7 +17,7 @@ public interface LikeRepository extends JpaRepository { Optional findByBoardIdAndUserId(Long boardId, Long userId); - @Query("SELECT new com.example.demo.domain.board.domain.dto.response.BoardTitleInfoResponse" + @Query("SELECT new com.example.demo.application.board.dto.response.BoardTitleInfoResponse" + "(b.id, b.title, b.user.nickname, b.boardType, b.viewCount, COUNT(DISTINCT l.id),b.headImageUrl, b.createdAt) " + "FROM Board b " + "JOIN b.likes l " diff --git a/src/main/java/com/example/demo/domain/board/domain/entity/Board.java b/src/main/java/com/example/demo/infra/board/entity/Board.java similarity index 85% rename from src/main/java/com/example/demo/domain/board/domain/entity/Board.java rename to src/main/java/com/example/demo/infra/board/entity/Board.java index b37e0ae4..84664e45 100644 --- a/src/main/java/com/example/demo/domain/board/domain/entity/Board.java +++ b/src/main/java/com/example/demo/infra/board/entity/Board.java @@ -1,121 +1,121 @@ -package com.example.demo.domain.board.domain.entity; - - -import com.example.demo.domain.board.domain.dto.request.BoardCreateRequest; -import com.example.demo.domain.board.domain.dto.request.BoardUpdateRequest; -import com.example.demo.domain.board.domain.dto.vo.BoardType; -import com.example.demo.domain.board.domain.dto.vo.Status; -import com.example.demo.domain.comment.domain.entity.BoardComment; -import com.example.demo.domain.recruitment_board.domain.entity.GenericBoard; -import com.example.demo.domain.user.domain.User; -import com.example.demo.global.base.domain.BaseEntity; -import jakarta.persistence.*; -import jakarta.validation.constraints.NotBlank; -import jakarta.validation.constraints.NotNull; -import lombok.Builder; -import lombok.Getter; -import lombok.NoArgsConstructor; -import org.hibernate.annotations.SQLDelete; -import org.hibernate.annotations.SQLRestriction; - -import java.util.ArrayList; -import java.util.List; - -@Entity -@Table(name = "boards") -@NoArgsConstructor -@Getter -@SQLDelete(sql = "UPDATE boards SET deleted_at = NOW() where id=?") -@SQLRestriction(value = "deleted_at is NULL") -public class Board extends BaseEntity implements GenericBoard { - - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private Long id; - - @Column(nullable = false, length = 30) - @NotBlank(message = "제목은 빈 값일 수 없습니다.") - private String title; - - @Lob - @Column(nullable = false) - @NotBlank(message = "본문은 빈 값일 수 없습니다.") - private String content; - - @Column(nullable = true, length = 500) - private String attachFileUrl; - - @Column(nullable = false, length = 10) - @Enumerated(EnumType.STRING) - @NotNull(message = "게시판 타입은 빈 값일 수 없습니다.") - private BoardType boardType; //TODO : 각 종 조회에 세미나 와 공지사항 분리하도록 쿼리 추가해야하는지 확인 필요 - - @Column(nullable = false, length = 10) - @Enumerated(EnumType.STRING) - @NotNull(message = "게시판 상태는 빈 값일 수 없습니다.") - private Status status; - - @Column(nullable = false, length = 500) - @NotBlank(message = "게시물 헤드 이미지는 빈 값일 수 없습니다.") - private String headImageUrl; - - @Column(nullable = false) - private Long viewCount; - - @ManyToOne(cascade = CascadeType.PERSIST,fetch = FetchType.LAZY) - @JoinColumn(name = "user_id", nullable = false) - private User user; - - - @OneToMany(mappedBy = "board", cascade = CascadeType.ALL, fetch = FetchType.LAZY) - private List comments = new ArrayList<>(); - - @OneToMany(mappedBy = "board", cascade = CascadeType.ALL, fetch = FetchType.LAZY) - private List imageFiles = new ArrayList<>(); - - @OneToMany(mappedBy = "board", cascade = CascadeType.ALL, fetch = FetchType.LAZY) - private List likes = new ArrayList<>(); - - @OneToMany(mappedBy = "board", cascade = CascadeType.ALL, fetch = FetchType.LAZY) - private List boardCategories = new ArrayList<>(); - - @Builder - private Board(String title, String content, User user, BoardType boardType,Status status,String headImageUrl) { - this.title = title; - this.content = content; - this.user = user; - this.boardType = boardType; - this.status = status; - this.attachFileUrl = null; - this.headImageUrl = headImageUrl; - this.viewCount = 0L; - } - - public static Board fromBoardRequest(User user, BoardCreateRequest boardCreateRequest){ - Board board = new Board(boardCreateRequest.getTitle(), - boardCreateRequest.getContents(), - user, - boardCreateRequest.getBoardType(), - Status.DRAFT, - boardCreateRequest.getBoardHeadImageUrl()); - user.getBoards().add(board); - return board; - } - - public void changeBoardInfo(BoardUpdateRequest boardUpdateRequest){ - this.title = boardUpdateRequest.getTitle(); - this.content = boardUpdateRequest.getContents(); - } - - public void publishBoard(){ - this.status = Status.PUBLISHED; - } - - public void changeAttachFileUrl(String attachFileUrl){ - this.attachFileUrl = attachFileUrl; - } - - public void changeHeadImageUrl(String boardHeadImageUrl) { - this.headImageUrl = boardHeadImageUrl; - } -} +package com.example.demo.infra.board.entity; + + +import com.example.demo.application.board.dto.request.BoardCreateRequest; +import com.example.demo.application.board.dto.request.BoardUpdateRequest; +import com.example.demo.application.board.dto.vo.BoardType; +import com.example.demo.application.board.dto.vo.Status; +import com.example.demo.domain.comment.domain.entity.BoardComment; +import com.example.demo.domain.recruitment_board.domain.entity.GenericBoard; +import com.example.demo.domain.user.domain.User; +import com.example.demo.global.base.domain.BaseEntity; +import jakarta.persistence.*; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import org.hibernate.annotations.SQLDelete; +import org.hibernate.annotations.SQLRestriction; + +import java.util.ArrayList; +import java.util.List; + +@Entity +@Table(name = "boards") +@NoArgsConstructor +@Getter +@SQLDelete(sql = "UPDATE boards SET deleted_at = NOW() where id=?") +@SQLRestriction(value = "deleted_at is NULL") +public class Board extends BaseEntity implements GenericBoard { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column(nullable = false, length = 30) + @NotBlank(message = "제목은 빈 값일 수 없습니다.") + private String title; + + @Lob + @Column(nullable = false) + @NotBlank(message = "본문은 빈 값일 수 없습니다.") + private String content; + + @Column(nullable = true, length = 500) + private String attachFileUrl; + + @Column(nullable = false, length = 10) + @Enumerated(EnumType.STRING) + @NotNull(message = "게시판 타입은 빈 값일 수 없습니다.") + private BoardType boardType; //TODO : 각 종 조회에 세미나 와 공지사항 분리하도록 쿼리 추가해야하는지 확인 필요 + + @Column(nullable = false, length = 10) + @Enumerated(EnumType.STRING) + @NotNull(message = "게시판 상태는 빈 값일 수 없습니다.") + private Status status; + + @Column(nullable = false, length = 500) + @NotBlank(message = "게시물 헤드 이미지는 빈 값일 수 없습니다.") + private String headImageUrl; + + @Column(nullable = false) + private Long viewCount; + + @ManyToOne(cascade = CascadeType.PERSIST,fetch = FetchType.LAZY) + @JoinColumn(name = "user_id", nullable = false) + private User user; + + + @OneToMany(mappedBy = "board", cascade = CascadeType.ALL, fetch = FetchType.LAZY) + private List comments = new ArrayList<>(); + + @OneToMany(mappedBy = "board", cascade = CascadeType.ALL, fetch = FetchType.LAZY) + private List imageFiles = new ArrayList<>(); + + @OneToMany(mappedBy = "board", cascade = CascadeType.ALL, fetch = FetchType.LAZY) + private List likes = new ArrayList<>(); + + @OneToMany(mappedBy = "board", cascade = CascadeType.ALL, fetch = FetchType.LAZY) + private List boardCategories = new ArrayList<>(); + + @Builder + private Board(String title, String content, User user, BoardType boardType,Status status,String headImageUrl) { + this.title = title; + this.content = content; + this.user = user; + this.boardType = boardType; + this.status = status; + this.attachFileUrl = null; + this.headImageUrl = headImageUrl; + this.viewCount = 0L; + } + + public static Board fromBoardRequest(User user, BoardCreateRequest boardCreateRequest){ + Board board = new Board(boardCreateRequest.title(), + boardCreateRequest.contents(), + user, + boardCreateRequest.boardType(), + Status.DRAFT, + boardCreateRequest.boardHeadImageUrl()); + user.getBoards().add(board); + return board; + } + + public void changeBoardInfo(BoardUpdateRequest boardUpdateRequest){ + this.title = boardUpdateRequest.getTitle(); + this.content = boardUpdateRequest.getContents(); + } + + public void publishBoard(){ + this.status = Status.PUBLISHED; + } + + public void changeAttachFileUrl(String attachFileUrl){ + this.attachFileUrl = attachFileUrl; + } + + public void changeHeadImageUrl(String boardHeadImageUrl) { + this.headImageUrl = boardHeadImageUrl; + } +} diff --git a/src/main/java/com/example/demo/domain/board/domain/entity/BoardCategory.java b/src/main/java/com/example/demo/infra/board/entity/BoardCategory.java similarity index 93% rename from src/main/java/com/example/demo/domain/board/domain/entity/BoardCategory.java rename to src/main/java/com/example/demo/infra/board/entity/BoardCategory.java index b8ad9ed8..402c78c9 100644 --- a/src/main/java/com/example/demo/domain/board/domain/entity/BoardCategory.java +++ b/src/main/java/com/example/demo/infra/board/entity/BoardCategory.java @@ -1,48 +1,48 @@ -package com.example.demo.domain.board.domain.entity; - - -import com.example.demo.global.base.domain.BaseEntity; -import jakarta.persistence.*; -import jakarta.validation.constraints.NotBlank; -import lombok.Getter; -import lombok.NoArgsConstructor; -import org.hibernate.annotations.SQLDelete; -import org.hibernate.annotations.SQLRestriction; - -@Entity -@Table(name ="board_categories") -@NoArgsConstructor -@Getter -@SQLDelete(sql = "UPDATE board_categories SET deleted_at = NOW() where id=?") -@SQLRestriction(value = "deleted_at is NULL") -public class BoardCategory extends BaseEntity { - - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private Long id; - - @Column(nullable = false,length = 50) - @NotBlank(message = "카테고리 이름은 빈 값일 수 없습니다.") - private String name; - - @ManyToOne(cascade = CascadeType.PERSIST,fetch = FetchType.LAZY) - @JoinColumn(name = "board_id", nullable = false) - private Board board; - - @ManyToOne(cascade = CascadeType.PERSIST,fetch = FetchType.EAGER) - @JoinColumn(name = "category_id", nullable = false) - private Category category; - - public BoardCategory(Board board, Category category) { - this.board = board; - this.category = category; - this.name = category.getName(); - board.getBoardCategories().add(this); - category.getBoardCategories().add(this); - } - - public void setAssociateNull() { - this.board = null; - this.category = null; - } -} +package com.example.demo.infra.board.entity; + + +import com.example.demo.global.base.domain.BaseEntity; +import jakarta.persistence.*; +import jakarta.validation.constraints.NotBlank; +import lombok.Getter; +import lombok.NoArgsConstructor; +import org.hibernate.annotations.SQLDelete; +import org.hibernate.annotations.SQLRestriction; + +@Entity +@Table(name ="board_categories") +@NoArgsConstructor +@Getter +@SQLDelete(sql = "UPDATE board_categories SET deleted_at = NOW() where id=?") +@SQLRestriction(value = "deleted_at is NULL") +public class BoardCategory extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column(nullable = false,length = 50) + @NotBlank(message = "카테고리 이름은 빈 값일 수 없습니다.") + private String name; + + @ManyToOne(cascade = CascadeType.PERSIST,fetch = FetchType.LAZY) + @JoinColumn(name = "board_id", nullable = false) + private Board board; + + @ManyToOne(cascade = CascadeType.PERSIST,fetch = FetchType.EAGER) + @JoinColumn(name = "category_id", nullable = false) + private Category category; + + public BoardCategory(Board board, Category category) { + this.board = board; + this.category = category; + this.name = category.getName(); + board.getBoardCategories().add(this); + category.getBoardCategories().add(this); + } + + public void setAssociateNull() { + this.board = null; + this.category = null; + } +} diff --git a/src/main/java/com/example/demo/domain/board/domain/entity/Category.java b/src/main/java/com/example/demo/infra/board/entity/Category.java similarity index 94% rename from src/main/java/com/example/demo/domain/board/domain/entity/Category.java rename to src/main/java/com/example/demo/infra/board/entity/Category.java index 24892ac3..1626cf33 100644 --- a/src/main/java/com/example/demo/domain/board/domain/entity/Category.java +++ b/src/main/java/com/example/demo/infra/board/entity/Category.java @@ -1,4 +1,4 @@ -package com.example.demo.domain.board.domain.entity; +package com.example.demo.infra.board.entity; import com.example.demo.global.base.domain.BaseEntity; import jakarta.persistence.*; diff --git a/src/main/java/com/example/demo/domain/board/domain/entity/ImageFile.java b/src/main/java/com/example/demo/infra/board/entity/ImageFile.java similarity index 95% rename from src/main/java/com/example/demo/domain/board/domain/entity/ImageFile.java rename to src/main/java/com/example/demo/infra/board/entity/ImageFile.java index 16040699..753dca18 100644 --- a/src/main/java/com/example/demo/domain/board/domain/entity/ImageFile.java +++ b/src/main/java/com/example/demo/infra/board/entity/ImageFile.java @@ -1,4 +1,4 @@ -package com.example.demo.domain.board.domain.entity; +package com.example.demo.infra.board.entity; import org.hibernate.annotations.SQLDelete; diff --git a/src/main/java/com/example/demo/domain/board/domain/entity/Like.java b/src/main/java/com/example/demo/infra/board/entity/Like.java similarity index 94% rename from src/main/java/com/example/demo/domain/board/domain/entity/Like.java rename to src/main/java/com/example/demo/infra/board/entity/Like.java index a70d23fe..74a84561 100644 --- a/src/main/java/com/example/demo/domain/board/domain/entity/Like.java +++ b/src/main/java/com/example/demo/infra/board/entity/Like.java @@ -1,4 +1,4 @@ -package com.example.demo.domain.board.domain.entity; +package com.example.demo.infra.board.entity; import com.example.demo.domain.user.domain.User; import com.example.demo.global.base.domain.BaseEntity; diff --git a/src/main/java/com/example/demo/domain/board/domain/entity/LikeEntityListener.java b/src/main/java/com/example/demo/infra/board/entity/LikeEntityListener.java similarity index 93% rename from src/main/java/com/example/demo/domain/board/domain/entity/LikeEntityListener.java rename to src/main/java/com/example/demo/infra/board/entity/LikeEntityListener.java index 0c68a757..c4811ba0 100644 --- a/src/main/java/com/example/demo/domain/board/domain/entity/LikeEntityListener.java +++ b/src/main/java/com/example/demo/infra/board/entity/LikeEntityListener.java @@ -1,4 +1,4 @@ -package com.example.demo.domain.board.domain.entity; +package com.example.demo.infra.board.entity; import com.example.demo.domain.board.service.service.LikeNotificationService; import jakarta.persistence.PreRemove; diff --git a/src/test/java/com/example/demo/base/IntegrationTest.java b/src/test/java/com/example/demo/base/IntegrationTest.java index f4843bd4..bbaa57f9 100644 --- a/src/test/java/com/example/demo/base/IntegrationTest.java +++ b/src/test/java/com/example/demo/base/IntegrationTest.java @@ -1,9 +1,7 @@ package com.example.demo.base; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.ImportAutoConfiguration; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.context.annotation.DependsOn; import org.springframework.context.annotation.Import; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.test.context.ActiveProfiles; @@ -15,7 +13,7 @@ import com.example.demo.base.config.RedisContainerConfig; import com.example.demo.builder.BuilderSupporter; import com.example.demo.builder.TestFixtureBuilder; -import com.example.demo.domain.board.service.usecase.BoardUseCase; +import com.example.demo.domain.board.service.usecase.BoardService; @SpringJUnitConfig // Spring 테스트 컨텍스트 활성화 @SpringBootTest @@ -36,6 +34,6 @@ public abstract class IntegrationTest { protected ApplicationEvents events; @Autowired - protected BoardUseCase boardUseCase; + protected BoardService boardService; } diff --git a/src/test/java/com/example/demo/builder/BuilderSupporter.java b/src/test/java/com/example/demo/builder/BuilderSupporter.java index 9e098aa2..3bf1a24f 100644 --- a/src/test/java/com/example/demo/builder/BuilderSupporter.java +++ b/src/test/java/com/example/demo/builder/BuilderSupporter.java @@ -1,12 +1,12 @@ package com.example.demo.builder; -import com.example.demo.domain.board.Repository.BoardRepository; -import com.example.demo.domain.board.Repository.LikeRepository; +import com.example.demo.infra.board.Repository.BoardJpaRepository; +import com.example.demo.infra.board.Repository.LikeRepository; import com.example.demo.domain.comment.repository.BoardCommentRepository; import com.example.demo.domain.comment.repository.RecruitmentBoardCommentRepository; import com.example.demo.domain.notification.repository.NotificationRepository; import com.example.demo.domain.recruitment_board.repository.RecruitmentBoardRepository; -import com.example.demo.domain.user.repository.UserRepository; +import com.example.demo.domain.user.repository.UserJpaRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -14,10 +14,10 @@ public class BuilderSupporter { @Autowired - private BoardRepository boardRepository; + private BoardJpaRepository boardJpaRepository; @Autowired - private UserRepository userRepository; + private UserJpaRepository userJpaRepository; @Autowired private LikeRepository likeRepository; @@ -35,12 +35,12 @@ public class BuilderSupporter { private NotificationRepository notificationRepository; - public BoardRepository boardRepository() { - return boardRepository; + public BoardJpaRepository boardRepository() { + return boardJpaRepository; } - public UserRepository userRepository() { - return userRepository; + public UserJpaRepository userRepository() { + return userJpaRepository; } public LikeRepository likeRepository() { diff --git a/src/test/java/com/example/demo/builder/TestFixtureBuilder.java b/src/test/java/com/example/demo/builder/TestFixtureBuilder.java index 24eeac19..adb11366 100644 --- a/src/test/java/com/example/demo/builder/TestFixtureBuilder.java +++ b/src/test/java/com/example/demo/builder/TestFixtureBuilder.java @@ -1,7 +1,7 @@ package com.example.demo.builder; -import com.example.demo.domain.board.domain.entity.Board; -import com.example.demo.domain.board.domain.entity.Like; +import com.example.demo.infra.board.entity.Board; +import com.example.demo.infra.board.entity.Like; import com.example.demo.domain.comment.domain.entity.BoardComment; import com.example.demo.domain.comment.domain.entity.RecruitmentBoardComment; import com.example.demo.domain.notification.domain.entity.Notification; diff --git a/src/test/java/com/example/demo/domain/board/Repository/BoardCategoryRepositoryTest.java b/src/test/java/com/example/demo/domain/board/Repository/BoardCategoryRepositoryTest.java index ada9d332..566ca0ac 100644 --- a/src/test/java/com/example/demo/domain/board/Repository/BoardCategoryRepositoryTest.java +++ b/src/test/java/com/example/demo/domain/board/Repository/BoardCategoryRepositoryTest.java @@ -1,9 +1,9 @@ // package com.example.demo.domain.board.Repository; // // import com.example.demo.base.RepositoryTest; -// import com.example.demo.domain.board.domain.entity.Board; -// import com.example.demo.domain.board.domain.entity.BoardCategory; -// import com.example.demo.domain.board.domain.entity.Category; +// import com.example.demo.infra.board.entity.Board; +// import com.example.demo.infra.board.entity.BoardCategory; +// import com.example.demo.infra.board.entity.Category; // import com.example.demo.domain.board.domain.dto.vo.Status; // import com.example.demo.domain.board.domain.dto.vo.Tag; // import com.example.demo.domain.user.domain.User; diff --git a/src/test/java/com/example/demo/domain/board/controller/BoardControllerIntegrationTest.java b/src/test/java/com/example/demo/domain/board/controller/BoardControllerIntegrationTest.java index 7f1d38a6..841e0212 100644 --- a/src/test/java/com/example/demo/domain/board/controller/BoardControllerIntegrationTest.java +++ b/src/test/java/com/example/demo/domain/board/controller/BoardControllerIntegrationTest.java @@ -15,8 +15,8 @@ import org.springframework.security.core.context.SecurityContextHolder; import com.example.demo.base.IntegrationTest; -import com.example.demo.domain.board.domain.dto.response.BoardInfoResponse; -import com.example.demo.domain.board.domain.entity.Board; +import com.example.demo.application.board.dto.response.BoardInfoResponse; +import com.example.demo.infra.board.entity.Board; import com.example.demo.domain.user.domain.User; import com.example.demo.global.base.exception.ErrorCode; import com.example.demo.global.base.exception.ServiceException; @@ -50,7 +50,7 @@ void tearDown() { Board publishedBOARD = testFixtureBuilder.buildBoard(PUBLISHED_SEMINAR_BOARD(savedUser)); // when - BoardInfoResponse boardInfoResponse = boardUseCase.searchSingleBoard(publishedBOARD.getId()); + BoardInfoResponse boardInfoResponse = boardService.searchSingleBoard(publishedBOARD.getId()); // then assertSoftly(softly -> { @@ -80,7 +80,7 @@ void tearDown() { SecurityContextHolder.getContext().setAuthentication(new JwtAuthentication(JwtUserClaim.create(savedUser))); // when - BoardInfoResponse boardInfoResponse = boardUseCase.searchSingleBoard(draftBoard.getId()); + BoardInfoResponse boardInfoResponse = boardService.searchSingleBoard(draftBoard.getId()); // then assertSoftly(softly -> { @@ -117,7 +117,7 @@ void tearDown() { // when -> then assertSoftly(softly -> { - softly.assertThatThrownBy(() -> boardUseCase.searchSingleBoard(draftBoard.getId())) + softly.assertThatThrownBy(() -> boardService.searchSingleBoard(draftBoard.getId())) .isInstanceOf(ServiceException.class) .hasFieldOrPropertyWithValue("errorCode", ErrorCode.DRAFT_NOT_ACCESS_USER); softly.assertThat(redisTemplate.opsForValue().get(BOARD_VIEW_KEY + draftBoard.getId())) @@ -133,7 +133,7 @@ void tearDown() { // when -> then assertSoftly(softly -> { - softly.assertThatThrownBy(() -> boardUseCase.searchSingleBoard(draftBoard.getId() + 1)) + softly.assertThatThrownBy(() -> boardService.searchSingleBoard(draftBoard.getId() + 1)) .isInstanceOf(ServiceException.class) .hasFieldOrPropertyWithValue("errorCode", ErrorCode.BOARD_NOT_FOUND); softly.assertThat(redisTemplate.opsForValue().get(BOARD_VIEW_KEY + draftBoard.getId())) diff --git a/src/test/java/com/example/demo/domain/board/event/LikeEntityListenerTest.java b/src/test/java/com/example/demo/domain/board/event/LikeEntityListenerTest.java index 0f8e413f..49009e1d 100644 --- a/src/test/java/com/example/demo/domain/board/event/LikeEntityListenerTest.java +++ b/src/test/java/com/example/demo/domain/board/event/LikeEntityListenerTest.java @@ -2,8 +2,8 @@ import com.example.demo.builder.BuilderSupporter; import com.example.demo.builder.TestFixtureBuilder; -import com.example.demo.domain.board.domain.entity.Like; -import com.example.demo.domain.board.service.usecase.BoardUseCase; +import com.example.demo.infra.board.entity.Like; +import com.example.demo.domain.board.service.usecase.BoardService; import com.example.demo.domain.board.service.usecase.LikeUseCase; import com.example.demo.domain.comment.TransactionalTask; import com.example.demo.domain.notification.domain.entity.Notification; @@ -38,7 +38,7 @@ class LikeEntityListenerTest { @Autowired private LikeUseCase likeUseCase; @Autowired - private BoardUseCase boardUseCase; + private BoardService boardService; @Nested @@ -84,7 +84,7 @@ void tearDown() { assertTrue(notificationRepository.existsById(savedNotification.getId())); // when - boardUseCase.deleteBoard(savedLike.getBoard().getUser().getId(), savedLike.getBoard().getId()); + boardService.deleteBoard(savedLike.getBoard().getUser().getId(), savedLike.getBoard().getId()); // then Awaitility.await().untilAsserted(() -> { diff --git a/src/test/java/com/example/demo/domain/board/service/BoardServiceTest.java b/src/test/java/com/example/demo/domain/board/service/BoardServiceTest.java index 014f06a0..101ce871 100644 --- a/src/test/java/com/example/demo/domain/board/service/BoardServiceTest.java +++ b/src/test/java/com/example/demo/domain/board/service/BoardServiceTest.java @@ -1,14 +1,14 @@ // package com.example.demo.domain.board.service; // -// import com.example.demo.domain.board.Repository.BoardRepository; +// import com.example.demo.infra.board.Repository.BoardRepository; // import com.example.demo.domain.board.Repository.ViewRepository; -// import com.example.demo.domain.board.domain.entity.Board; +// import com.example.demo.infra.board.entity.Board; // import com.example.demo.domain.board.domain.request.BoardRequest; // import com.example.demo.domain.board.domain.response.BoardInfoResponse; -// import com.example.demo.domain.board.domain.entity.BoardCategory; -// import com.example.demo.domain.board.domain.entity.Category; -// import com.example.demo.domain.board.Repository.BoardCategoryRepository; -// import com.example.demo.domain.board.Repository.CategoryRepository; +// import com.example.demo.infra.board.entity.BoardCategory; +// import com.example.demo.infra.board.entity.Category; +// import com.example.demo.infra.board.Repository.BoardCategoryRepository; +// import com.example.demo.infra.board.Repository.CategoryRepository; // import com.example.demo.domain.user.domain.User; // import com.example.demo.domain.user.domain.vo.Role; // import com.example.demo.domain.user.repository.UserRepository; diff --git a/src/test/java/com/example/demo/domain/board/service/LikeNotificationServiceTest.java b/src/test/java/com/example/demo/domain/board/service/LikeNotificationServiceTest.java index d285aaab..80210ba5 100644 --- a/src/test/java/com/example/demo/domain/board/service/LikeNotificationServiceTest.java +++ b/src/test/java/com/example/demo/domain/board/service/LikeNotificationServiceTest.java @@ -1,7 +1,7 @@ package com.example.demo.domain.board.service; import com.example.demo.builder.TestFixtureBuilder; -import com.example.demo.domain.board.domain.entity.Like; +import com.example.demo.infra.board.entity.Like; import com.example.demo.domain.board.service.service.LikeNotificationService; import com.example.demo.domain.comment.TransactionalTask; import com.example.demo.domain.notification.domain.entity.Notification; diff --git a/src/test/java/com/example/demo/domain/category/repository/CategoryRepositoryTest.java b/src/test/java/com/example/demo/domain/category/repository/CategoryRepositoryTest.java index 4cb148e0..d68a2578 100644 --- a/src/test/java/com/example/demo/domain/category/repository/CategoryRepositoryTest.java +++ b/src/test/java/com/example/demo/domain/category/repository/CategoryRepositoryTest.java @@ -2,7 +2,7 @@ // // //import com.example.demo.base.RepositoryTest; -//import com.example.demo.domain.board.domain.entity.Category; +//import com.example.demo.infra.board.entity.Category; //import org.assertj.core.api.Assertions; //import org.junit.jupiter.api.AfterEach; //import org.junit.jupiter.api.BeforeEach; diff --git a/src/test/java/com/example/demo/domain/comment/TransactionalTask.java b/src/test/java/com/example/demo/domain/comment/TransactionalTask.java index 8d434fcb..93ef7cd3 100644 --- a/src/test/java/com/example/demo/domain/comment/TransactionalTask.java +++ b/src/test/java/com/example/demo/domain/comment/TransactionalTask.java @@ -1,8 +1,8 @@ package com.example.demo.domain.comment; import com.example.demo.builder.TestFixtureBuilder; -import com.example.demo.domain.board.domain.entity.Board; -import com.example.demo.domain.board.domain.entity.Like; +import com.example.demo.infra.board.entity.Board; +import com.example.demo.infra.board.entity.Like; import com.example.demo.domain.comment.domain.entity.BoardComment; import com.example.demo.domain.comment.domain.entity.RecruitmentBoardComment; import com.example.demo.domain.recruitment_board.domain.entity.RecruitmentBoard; diff --git a/src/test/java/com/example/demo/domain/comment/event/CommentEntityListenerTest.java b/src/test/java/com/example/demo/domain/comment/event/CommentEntityListenerTest.java index 340024e9..0c1c95e6 100644 --- a/src/test/java/com/example/demo/domain/comment/event/CommentEntityListenerTest.java +++ b/src/test/java/com/example/demo/domain/comment/event/CommentEntityListenerTest.java @@ -2,7 +2,7 @@ import com.example.demo.builder.BuilderSupporter; import com.example.demo.builder.TestFixtureBuilder; -import com.example.demo.domain.board.service.usecase.BoardUseCase; +import com.example.demo.domain.board.service.usecase.BoardService; import com.example.demo.domain.comment.TransactionalTask; import com.example.demo.domain.comment.domain.entity.BoardComment; import com.example.demo.domain.comment.domain.entity.RecruitmentBoardComment; @@ -44,7 +44,7 @@ class CommentEntityListenerTest { @Autowired private AbstractCommentService commentService; @Autowired - private BoardUseCase boardUseCase; + private BoardService boardService; @Autowired private RecruitmentBoardService recruitmentBoardService; @@ -89,7 +89,7 @@ void tearDown() { assertTrue(notificationRepository.existsById(savedNotification.getId())); // when - boardUseCase.deleteBoard(savedComment.getBoard().getUser().getId(), savedComment.getBoard().getId()); + boardService.deleteBoard(savedComment.getBoard().getUser().getId(), savedComment.getBoard().getId()); // then Awaitility.await().untilAsserted(() -> { diff --git a/src/test/java/com/example/demo/domain/comment/repository/CommentRepositoryTest.java b/src/test/java/com/example/demo/domain/comment/repository/CommentRepositoryTest.java index 1cec68ae..4ef0aecd 100644 --- a/src/test/java/com/example/demo/domain/comment/repository/CommentRepositoryTest.java +++ b/src/test/java/com/example/demo/domain/comment/repository/CommentRepositoryTest.java @@ -3,9 +3,9 @@ // // import com.example.demo.DemoApplication; // import com.example.demo.base.RepositoryTest; -// import com.example.demo.domain.board.Repository.BoardRepository; +// import com.example.demo.infra.board.Repository.BoardRepository; // import com.example.demo.domain.board.domain.BoardStatus; -// import com.example.demo.domain.board.domain.entity.Board; +// import com.example.demo.infra.board.entity.Board; // import com.example.demo.domain.comment.domain.entity.Comment; // import com.example.demo.domain.user.domain.User; // import com.example.demo.domain.user.domain.vo.Status; diff --git a/src/test/java/com/example/demo/domain/comment/service/CommentServiceTest.java b/src/test/java/com/example/demo/domain/comment/service/CommentServiceTest.java index 0f10cf91..d610cd50 100644 --- a/src/test/java/com/example/demo/domain/comment/service/CommentServiceTest.java +++ b/src/test/java/com/example/demo/domain/comment/service/CommentServiceTest.java @@ -1,7 +1,7 @@ // package com.example.demo.domain.comment.service; // -// import com.example.demo.domain.board.Repository.BoardRepository; -// import com.example.demo.domain.board.domain.entity.Board; +// import com.example.demo.infra.board.Repository.BoardRepository; +// import com.example.demo.infra.board.entity.Board; // import com.example.demo.domain.comment.domain.entity.Comment; // import com.example.demo.domain.comment.domain.response.CommentInfo; // import com.example.demo.domain.comment.domain.response.CommentResponse; diff --git a/src/test/java/com/example/demo/domain/user/api/controller/UserControllerIntegrationTest.java b/src/test/java/com/example/demo/domain/user/api/controller/UserControllerIntegrationTest.java index e307598b..5ff35955 100644 --- a/src/test/java/com/example/demo/domain/user/api/controller/UserControllerIntegrationTest.java +++ b/src/test/java/com/example/demo/domain/user/api/controller/UserControllerIntegrationTest.java @@ -5,7 +5,7 @@ import com.example.demo.domain.token.repository.RefreshTokenRepository; import com.example.demo.domain.user.domain.User; import com.example.demo.domain.user.domain.dto.request.CompleteRegistrationRequest; -import com.example.demo.domain.user.repository.UserRepository; +import com.example.demo.domain.user.repository.UserJpaRepository; import com.example.demo.global.base.exception.ErrorCode; import com.example.demo.global.base.exception.ServiceException; import com.example.demo.global.jwt.JwtHandler; @@ -13,20 +13,14 @@ import com.example.demo.global.jwt.JwtUserClaim; import com.example.demo.global.utils.S3UrlUtil; import com.fasterxml.jackson.databind.ObjectMapper; -import jakarta.transaction.Transactional; + import org.junit.jupiter.api.*; -import org.mockito.Mockito; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; -import org.springframework.boot.test.context.SpringBootTest; import org.springframework.http.MediaType; import org.springframework.security.test.context.support.WithMockUser; -import org.springframework.test.context.ActiveProfiles; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.ResultActions; -import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; -import org.springframework.test.web.servlet.result.MockMvcResultHandlers; -import org.springframework.test.web.servlet.result.MockMvcResultMatchers; import static com.example.demo.fixture.user.UserFixtures.*; import static org.assertj.core.api.AssertionsForClassTypes.*; @@ -40,7 +34,7 @@ public class UserControllerIntegrationTest extends IntegrationTest { @Autowired - private UserRepository userRepository; + private UserJpaRepository userJpaRepository; private User savedUser; @@ -139,7 +133,7 @@ class completeRegistration { .andDo(print()) .andExpect(status().isOk()); - User updatedUser = userRepository.findById(user.getId()).orElseThrow(() -> new ServiceException(ErrorCode.USER_NOT_FOUND)); + User updatedUser = userJpaRepository.findById(user.getId()).orElseThrow(() -> new ServiceException(ErrorCode.USER_NOT_FOUND)); assertSoftly(softly -> { softly.assertThat(updatedUser.getProfileImageUrl()).isEqualTo(defaultUrl); diff --git a/src/test/java/com/example/demo/fixture/board/BoardFixtures.java b/src/test/java/com/example/demo/fixture/board/BoardFixtures.java index 779152d3..95a1b3d0 100644 --- a/src/test/java/com/example/demo/fixture/board/BoardFixtures.java +++ b/src/test/java/com/example/demo/fixture/board/BoardFixtures.java @@ -1,8 +1,8 @@ package com.example.demo.fixture.board; -import com.example.demo.domain.board.domain.dto.vo.BoardType; -import com.example.demo.domain.board.domain.dto.vo.Status; -import com.example.demo.domain.board.domain.entity.Board; +import com.example.demo.application.board.dto.vo.BoardType; +import com.example.demo.application.board.dto.vo.Status; +import com.example.demo.infra.board.entity.Board; import com.example.demo.domain.user.domain.User; public class BoardFixtures { diff --git a/src/test/java/com/example/demo/fixture/board/LikeFixtures.java b/src/test/java/com/example/demo/fixture/board/LikeFixtures.java index 7dc16670..eefe08c3 100644 --- a/src/test/java/com/example/demo/fixture/board/LikeFixtures.java +++ b/src/test/java/com/example/demo/fixture/board/LikeFixtures.java @@ -1,7 +1,7 @@ package com.example.demo.fixture.board; -import com.example.demo.domain.board.domain.entity.Board; -import com.example.demo.domain.board.domain.entity.Like; +import com.example.demo.infra.board.entity.Board; +import com.example.demo.infra.board.entity.Like; import com.example.demo.domain.user.domain.User; public class LikeFixtures { diff --git a/src/test/java/com/example/demo/fixture/comment/CommentFixtures.java b/src/test/java/com/example/demo/fixture/comment/CommentFixtures.java index 39af3f85..e95e4e86 100644 --- a/src/test/java/com/example/demo/fixture/comment/CommentFixtures.java +++ b/src/test/java/com/example/demo/fixture/comment/CommentFixtures.java @@ -1,6 +1,6 @@ package com.example.demo.fixture.comment; -import com.example.demo.domain.board.domain.entity.Board; +import com.example.demo.infra.board.entity.Board; import com.example.demo.domain.comment.domain.entity.BoardComment; import com.example.demo.domain.comment.domain.entity.RecruitmentBoardComment; import com.example.demo.domain.recruitment_board.domain.entity.RecruitmentBoard; diff --git a/src/test/java/com/example/demo/fixture/notification/NotificationFixtures.java b/src/test/java/com/example/demo/fixture/notification/NotificationFixtures.java index 6431935d..21e23680 100644 --- a/src/test/java/com/example/demo/fixture/notification/NotificationFixtures.java +++ b/src/test/java/com/example/demo/fixture/notification/NotificationFixtures.java @@ -1,6 +1,6 @@ package com.example.demo.fixture.notification; -import com.example.demo.domain.board.domain.entity.Like; +import com.example.demo.infra.board.entity.Like; import com.example.demo.domain.comment.domain.entity.BoardComment; import com.example.demo.domain.comment.domain.entity.RecruitmentBoardComment; import com.example.demo.domain.notification.domain.entity.Notification; diff --git a/src/test/java/com/example/demo/fixture/recruitment_board/RecruitmentBoardFixtures.java b/src/test/java/com/example/demo/fixture/recruitment_board/RecruitmentBoardFixtures.java index aa448ddd..a2ffad87 100644 --- a/src/test/java/com/example/demo/fixture/recruitment_board/RecruitmentBoardFixtures.java +++ b/src/test/java/com/example/demo/fixture/recruitment_board/RecruitmentBoardFixtures.java @@ -1,6 +1,6 @@ package com.example.demo.fixture.recruitment_board; -import com.example.demo.domain.board.domain.dto.vo.Status; +import com.example.demo.application.board.dto.vo.Status; import com.example.demo.domain.recruitment_board.domain.entity.RecruitmentBoard; import com.example.demo.domain.recruitment_board.domain.vo.RecruitmentBoardTag; import com.example.demo.domain.recruitment_board.domain.vo.RecruitmentBoardType;