diff --git a/.github/workflows/ci-cd.yml b/.github/workflows/ci-cd.yml
index 5e6072d3f..633ca8b7a 100644
--- a/.github/workflows/ci-cd.yml
+++ b/.github/workflows/ci-cd.yml
@@ -28,23 +28,49 @@ jobs:
- name: make application.yml
if: contains(github.ref, 'main') || contains(github.ref, 'dev')
run: |
- cd ./src/main/resources
+ cd ./Clubber-External/src/main/resources
touch ./application.yml
echo "${{ secrets.YML }}" > ./application.yml
shell: bash
+ - name: make application.yml (Internal)
+ if: contains(github.ref, 'main') || contains(github.ref, 'dev')
+ run: |
+ cd ./Clubber-Internal/src/main/resources
+ touch ./application.yml
+ echo "${{ secrets.INTERNAL_YML }}" > ./application.yml
+ shell: bash
+
- name: make application-dev.yml
if: contains(github.ref, 'dev')
run: |
- cd ./src/main/resources
+ cd ./Clubber-External/src/main/resources
touch ./application-dev.yml
echo "${{ secrets.YML_DEV }}" > ./application-dev.yml
shell: bash
+ # [Internal] application-dev.yml
+ - name: make application-dev.yml (Internal)
+ if: contains(github.ref, 'dev')
+ run: |
+ cd ./Clubber-Internal/src/main/resources
+ touch ./application-dev.yml
+ echo "${{ secrets.INTERNAL_YML_DEV }}" > ./application-dev.yml
+ shell: bash
+
- name: make application-prod.yml
if: contains(github.ref, 'main')
run: |
- cd ./src/main/resources
+ cd ./Clubber-External/src/main/resources
+ touch ./application-prod.yml
+ echo "${{ secrets.YML_PROD }}" > ./application-prod.yml
+ shell: bash
+
+ # [Internal] application-prod.yml
+ - name: make application-prod.yml (Internal)
+ if: contains(github.ref, 'main')
+ run: |
+ cd ./Clubber-Internal/src/main/resources
touch ./application-prod.yml
echo "${{ secrets.YML_PROD }}" > ./application-prod.yml
shell: bash
@@ -53,12 +79,16 @@ jobs:
run: chmod +x gradlew
- name: Build with Gradle
- run: ./gradlew clean build -x test
+ run: ./gradlew :Clubber-External:clean build -x test
+ # [Internal] Build
+ - name: Build with Gradle (Internal)
+ run: ./gradlew :Clubber-Internal:clean build -x test
- name: docker build and push to dev
if: contains(github.ref, 'dev')
run: |
+ cd Clubber-External
docker login -u ${{ secrets.DOCKER_USERNAME }} -p ${{ secrets.DOCKER_PASSWORD }}
docker build -f Dockerfile.dev -t ${{ secrets.DOCKER_REPO }}/clubber-backend-dev .
docker push ${{ secrets.DOCKER_REPO }}/clubber-backend-dev
@@ -66,10 +96,20 @@ jobs:
- name: docker build and push to dev nginx
if: contains(github.ref, 'dev')
run: |
+ cd Clubber-External
docker login -u ${{ secrets.DOCKER_USERNAME }} -p ${{ secrets.DOCKER_PASSWORD }}
docker build -f Dockerfile.nginx.dev -t ${{ secrets.DOCKER_REPO }}/clubber-nginx-dev .
docker push ${{ secrets.DOCKER_REPO }}/clubber-nginx-dev
+ # [Internal] Docker Build & Push (Dev)
+ - name: docker build and push to dev (Internal)
+ if: contains(github.ref, 'dev')
+ run: |
+ cd Clubber-Internal
+ docker login -u ${{ secrets.DOCKER_USERNAME }} -p ${{ secrets.DOCKER_PASSWORD }}
+ docker build -f Dockerfile.dev -t ${{ secrets.DOCKER_REPO }}/clubber-internal-dev .
+ docker push ${{ secrets.DOCKER_REPO }}/clubber-internal-dev
+
- name: docker build and push to prod
if: contains(github.ref, 'main')
run: |
@@ -84,6 +124,15 @@ jobs:
docker build -f Dockerfile.nginx.prod -t ${{ secrets.DOCKER_REPO }}/clubber-nginx-prod .
docker push ${{ secrets.DOCKER_REPO }}/clubber-nginx-prod
+ # [Internal] Docker Build & Push (Prod)
+ - name: docker build and push to prod (Internal)
+ if: contains(github.ref, 'main')
+ run: |
+ cd Clubber-Internal
+ docker login -u ${{ secrets.DOCKER_USERNAME }} -p ${{ secrets.DOCKER_PASSWORD }}
+ docker build -f Dockerfile.prod -t ${{ secrets.DOCKER_REPO }}/clubber-internal-prod .
+ docker push ${{ secrets.DOCKER_REPO }}/clubber-internal-prod
+
- name: Copy docker-compose.yml to EC2 DEV
if: contains(github.ref, 'dev')
uses: appleboy/scp-action@master
@@ -115,6 +164,7 @@ jobs:
cd /home/ubuntu
sudo docker rm -f $(docker ps -qa)
sudo docker pull ${{ secrets.DOCKER_REPO }}/clubber-backend-dev
+ sudo docker pull ${{ secrets.DOCKER_REPO }}/clubber-internal-dev
sudo docker pull ${{ secrets.DOCKER_REPO }}/clubber-front-dev
sudo docker pull ${{ secrets.DOCKER_REPO }}/clubber-nginx-dev
sudo docker-compose -f docker-compose-dev.yml up -d
@@ -131,6 +181,7 @@ jobs:
cd /home/ubuntu
sudo docker rm -f $(docker ps -qa)
sudo docker pull ${{ secrets.DOCKER_REPO }}/clubber-backend-prod
+ sudo docker pull ${{ secrets.DOCKER_REPO }}/clubber-internal-prod # [Internal]
sudo docker pull ${{ secrets.DOCKER_REPO }}/clubber-front-prod
sudo docker pull ${{ secrets.DOCKER_REPO }}/clubber-nginx-prod
sudo docker-compose -f docker-compose-prod.yml up -d
diff --git a/.gitignore b/.gitignore
index 34f9c9311..26a8f23f2 100644
--- a/.gitignore
+++ b/.gitignore
@@ -6,7 +6,7 @@
# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
#YML filese
-src/main/resources/*.yml
+application*.yml
src/main/resources/data.sql
# User-specific stuff
@@ -180,4 +180,7 @@ gradle-app.setting
*.idea
-# End of https://www.toptal.com/developers/gitignore/api/intellij,gradle,java
\ No newline at end of file
+**/build/generated/sources/querydsl/ss
+
+# End of https://www.toptal.com/developers/gitignore/api/intellij,gradle,java
+Clubber-Domain/Clubber-Domain.iml
diff --git a/Clubber-Common/Clubber-Common.iml b/Clubber-Common/Clubber-Common.iml
new file mode 100644
index 000000000..c90834f2d
--- /dev/null
+++ b/Clubber-Common/Clubber-Common.iml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Clubber-Common/build.gradle b/Clubber-Common/build.gradle
new file mode 100644
index 000000000..5fd67f337
--- /dev/null
+++ b/Clubber-Common/build.gradle
@@ -0,0 +1,7 @@
+jar {
+ enabled = true
+}
+
+bootJar {
+ enabled = false
+}
\ No newline at end of file
diff --git a/src/main/java/com/clubber/ClubberServer/global/common/consts/ClubberStatic.java b/Clubber-Common/src/main/java/com/clubber/common/consts/ClubberStatic.java
similarity index 94%
rename from src/main/java/com/clubber/ClubberServer/global/common/consts/ClubberStatic.java
rename to Clubber-Common/src/main/java/com/clubber/common/consts/ClubberStatic.java
index 343ccea39..33091d011 100644
--- a/src/main/java/com/clubber/ClubberServer/global/common/consts/ClubberStatic.java
+++ b/Clubber-Common/src/main/java/com/clubber/common/consts/ClubberStatic.java
@@ -1,4 +1,4 @@
-package com.clubber.ClubberServer.global.common.consts;
+package com.clubber.common.consts;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
diff --git a/src/main/java/com/clubber/ClubberServer/global/dto/ErrorResponse.java b/Clubber-Common/src/main/java/com/clubber/common/dto/ErrorResponse.java
similarity index 87%
rename from src/main/java/com/clubber/ClubberServer/global/dto/ErrorResponse.java
rename to Clubber-Common/src/main/java/com/clubber/common/dto/ErrorResponse.java
index 94233f0ed..7a5345813 100644
--- a/src/main/java/com/clubber/ClubberServer/global/dto/ErrorResponse.java
+++ b/Clubber-Common/src/main/java/com/clubber/common/dto/ErrorResponse.java
@@ -1,7 +1,7 @@
-package com.clubber.ClubberServer.global.dto;
+package com.clubber.common.dto;
-import com.clubber.ClubberServer.global.exception.ErrorReason;
+import com.clubber.common.exception.ErrorReason;
import java.time.LocalDateTime;
import lombok.Getter;
diff --git a/src/main/java/com/clubber/ClubberServer/global/dto/SuccessResponse.java b/Clubber-Common/src/main/java/com/clubber/common/dto/SuccessResponse.java
similarity index 87%
rename from src/main/java/com/clubber/ClubberServer/global/dto/SuccessResponse.java
rename to Clubber-Common/src/main/java/com/clubber/common/dto/SuccessResponse.java
index 0e805b188..5de702104 100644
--- a/src/main/java/com/clubber/ClubberServer/global/dto/SuccessResponse.java
+++ b/Clubber-Common/src/main/java/com/clubber/common/dto/SuccessResponse.java
@@ -1,4 +1,4 @@
-package com.clubber.ClubberServer.global.dto;
+package com.clubber.common.dto;
import java.time.LocalDateTime;
import lombok.Getter;
diff --git a/src/main/java/com/clubber/ClubberServer/global/exception/BaseErrorCode.java b/Clubber-Common/src/main/java/com/clubber/common/exception/BaseErrorCode.java
similarity index 56%
rename from src/main/java/com/clubber/ClubberServer/global/exception/BaseErrorCode.java
rename to Clubber-Common/src/main/java/com/clubber/common/exception/BaseErrorCode.java
index 4010f3a6a..b9ee76c8e 100644
--- a/src/main/java/com/clubber/ClubberServer/global/exception/BaseErrorCode.java
+++ b/Clubber-Common/src/main/java/com/clubber/common/exception/BaseErrorCode.java
@@ -1,4 +1,4 @@
-package com.clubber.ClubberServer.global.exception;
+package com.clubber.common.exception;
public interface BaseErrorCode {
diff --git a/src/main/java/com/clubber/ClubberServer/global/exception/BaseException.java b/Clubber-Common/src/main/java/com/clubber/common/exception/BaseException.java
similarity index 83%
rename from src/main/java/com/clubber/ClubberServer/global/exception/BaseException.java
rename to Clubber-Common/src/main/java/com/clubber/common/exception/BaseException.java
index 44d4f9d80..d9ab8c791 100644
--- a/src/main/java/com/clubber/ClubberServer/global/exception/BaseException.java
+++ b/Clubber-Common/src/main/java/com/clubber/common/exception/BaseException.java
@@ -1,4 +1,4 @@
-package com.clubber.ClubberServer.global.exception;
+package com.clubber.common.exception;
import lombok.AllArgsConstructor;
import lombok.Getter;
diff --git a/src/main/java/com/clubber/ClubberServer/global/exception/EnumTypeNotValidException.java b/Clubber-Common/src/main/java/com/clubber/common/exception/EnumTypeNotValidException.java
similarity index 82%
rename from src/main/java/com/clubber/ClubberServer/global/exception/EnumTypeNotValidException.java
rename to Clubber-Common/src/main/java/com/clubber/common/exception/EnumTypeNotValidException.java
index 7537818a5..2560e5a34 100644
--- a/src/main/java/com/clubber/ClubberServer/global/exception/EnumTypeNotValidException.java
+++ b/Clubber-Common/src/main/java/com/clubber/common/exception/EnumTypeNotValidException.java
@@ -1,4 +1,4 @@
-package com.clubber.ClubberServer.global.exception;
+package com.clubber.common.exception;
public class EnumTypeNotValidException extends BaseException {
diff --git a/src/main/java/com/clubber/ClubberServer/global/exception/ErrorReason.java b/Clubber-Common/src/main/java/com/clubber/common/exception/ErrorReason.java
similarity index 77%
rename from src/main/java/com/clubber/ClubberServer/global/exception/ErrorReason.java
rename to Clubber-Common/src/main/java/com/clubber/common/exception/ErrorReason.java
index 5e8fe142c..f3552d4e8 100644
--- a/src/main/java/com/clubber/ClubberServer/global/exception/ErrorReason.java
+++ b/Clubber-Common/src/main/java/com/clubber/common/exception/ErrorReason.java
@@ -1,4 +1,4 @@
-package com.clubber.ClubberServer.global.exception;
+package com.clubber.common.exception;
import lombok.Builder;
import lombok.Getter;
diff --git a/src/main/java/com/clubber/ClubberServer/global/exception/GlobalErrorCode.java b/Clubber-Common/src/main/java/com/clubber/common/exception/GlobalErrorCode.java
similarity index 94%
rename from src/main/java/com/clubber/ClubberServer/global/exception/GlobalErrorCode.java
rename to Clubber-Common/src/main/java/com/clubber/common/exception/GlobalErrorCode.java
index 854be6452..a3daccb2e 100644
--- a/src/main/java/com/clubber/ClubberServer/global/exception/GlobalErrorCode.java
+++ b/Clubber-Common/src/main/java/com/clubber/common/exception/GlobalErrorCode.java
@@ -1,4 +1,4 @@
-package com.clubber.ClubberServer.global.exception;
+package com.clubber.common.exception;
import lombok.AllArgsConstructor;
import lombok.Getter;
diff --git a/src/main/java/com/clubber/ClubberServer/global/mapper/enums/EnumDefaultMapperType.java b/Clubber-Common/src/main/java/com/clubber/common/mapper/enums/EnumDefaultMapperType.java
similarity index 58%
rename from src/main/java/com/clubber/ClubberServer/global/mapper/enums/EnumDefaultMapperType.java
rename to Clubber-Common/src/main/java/com/clubber/common/mapper/enums/EnumDefaultMapperType.java
index 574dce8fe..96c2443f1 100644
--- a/src/main/java/com/clubber/ClubberServer/global/mapper/enums/EnumDefaultMapperType.java
+++ b/Clubber-Common/src/main/java/com/clubber/common/mapper/enums/EnumDefaultMapperType.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.global.mapper.enums;
+package com.clubber.common.mapper.enums;
-import com.clubber.ClubberServer.global.vo.enums.EnumMapperVO;
+import com.clubber.common.vo.enums.EnumMapperVO;
public interface EnumDefaultMapperType extends EnumMapperType {
diff --git a/Clubber-Common/src/main/java/com/clubber/common/mapper/enums/EnumFaqMapperType.java b/Clubber-Common/src/main/java/com/clubber/common/mapper/enums/EnumFaqMapperType.java
new file mode 100644
index 000000000..3f6d9836b
--- /dev/null
+++ b/Clubber-Common/src/main/java/com/clubber/common/mapper/enums/EnumFaqMapperType.java
@@ -0,0 +1,14 @@
+package com.clubber.common.mapper.enums;
+
+import com.clubber.common.vo.enums.EnumFaQMapperVO;
+import com.clubber.common.vo.enums.EnumMapperVO;
+
+public interface EnumFaqMapperType extends EnumMapperType {
+
+ String getAnswer();
+
+ @Override
+ default EnumMapperVO createVO() {
+ return new EnumFaQMapperVO(this);
+ }
+}
diff --git a/Clubber-Common/src/main/java/com/clubber/common/mapper/enums/EnumImageMapperType.java b/Clubber-Common/src/main/java/com/clubber/common/mapper/enums/EnumImageMapperType.java
new file mode 100644
index 000000000..66d265e35
--- /dev/null
+++ b/Clubber-Common/src/main/java/com/clubber/common/mapper/enums/EnumImageMapperType.java
@@ -0,0 +1,15 @@
+package com.clubber.common.mapper.enums;
+
+import com.clubber.common.vo.enums.EnumImageMapperVO;
+import com.clubber.common.vo.enums.EnumMapperVO;
+
+public interface EnumImageMapperType extends EnumMapperType {
+
+ String getImageUrl();
+
+ @Override
+ default EnumMapperVO createVO() {
+ return new EnumImageMapperVO(this);
+ }
+}
+
diff --git a/src/main/java/com/clubber/ClubberServer/global/mapper/enums/EnumMapper.java b/Clubber-Common/src/main/java/com/clubber/common/mapper/enums/EnumMapper.java
similarity index 88%
rename from src/main/java/com/clubber/ClubberServer/global/mapper/enums/EnumMapper.java
rename to Clubber-Common/src/main/java/com/clubber/common/mapper/enums/EnumMapper.java
index 3ce2cc881..c91b861ea 100644
--- a/src/main/java/com/clubber/ClubberServer/global/mapper/enums/EnumMapper.java
+++ b/Clubber-Common/src/main/java/com/clubber/common/mapper/enums/EnumMapper.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.global.mapper.enums;
+package com.clubber.common.mapper.enums;
-import com.clubber.ClubberServer.global.vo.enums.EnumMapperVO;
+import com.clubber.common.vo.enums.EnumMapperVO;
import lombok.NoArgsConstructor;
import java.util.*;
diff --git a/Clubber-Common/src/main/java/com/clubber/common/mapper/enums/EnumMapperType.java b/Clubber-Common/src/main/java/com/clubber/common/mapper/enums/EnumMapperType.java
new file mode 100644
index 000000000..a54b3babe
--- /dev/null
+++ b/Clubber-Common/src/main/java/com/clubber/common/mapper/enums/EnumMapperType.java
@@ -0,0 +1,13 @@
+package com.clubber.common.mapper.enums;
+
+import com.clubber.common.vo.enums.EnumMapperVO;
+
+public interface EnumMapperType {
+
+ String getCode();
+
+ String getTitle();
+
+ EnumMapperVO createVO();
+}
+
diff --git a/src/main/java/com/clubber/ClubberServer/global/vo/enums/EnumFaQMapperVO.java b/Clubber-Common/src/main/java/com/clubber/common/vo/enums/EnumFaQMapperVO.java
similarity index 67%
rename from src/main/java/com/clubber/ClubberServer/global/vo/enums/EnumFaQMapperVO.java
rename to Clubber-Common/src/main/java/com/clubber/common/vo/enums/EnumFaQMapperVO.java
index 7fd72788f..33499497c 100644
--- a/src/main/java/com/clubber/ClubberServer/global/vo/enums/EnumFaQMapperVO.java
+++ b/Clubber-Common/src/main/java/com/clubber/common/vo/enums/EnumFaQMapperVO.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.global.vo.enums;
+package com.clubber.common.vo.enums;
-import com.clubber.ClubberServer.global.mapper.enums.EnumFaqMapperType;
+import com.clubber.common.mapper.enums.EnumFaqMapperType;
import lombok.Getter;
@Getter
diff --git a/src/main/java/com/clubber/ClubberServer/global/vo/enums/EnumImageMapperVO.java b/Clubber-Common/src/main/java/com/clubber/common/vo/enums/EnumImageMapperVO.java
similarity index 68%
rename from src/main/java/com/clubber/ClubberServer/global/vo/enums/EnumImageMapperVO.java
rename to Clubber-Common/src/main/java/com/clubber/common/vo/enums/EnumImageMapperVO.java
index a4806b7b2..b4de3f785 100644
--- a/src/main/java/com/clubber/ClubberServer/global/vo/enums/EnumImageMapperVO.java
+++ b/Clubber-Common/src/main/java/com/clubber/common/vo/enums/EnumImageMapperVO.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.global.vo.enums;
+package com.clubber.common.vo.enums;
-import com.clubber.ClubberServer.global.mapper.enums.EnumImageMapperType;
+import com.clubber.common.mapper.enums.EnumImageMapperType;
import lombok.Getter;
@Getter
diff --git a/src/main/java/com/clubber/ClubberServer/global/vo/enums/EnumMapperVO.java b/Clubber-Common/src/main/java/com/clubber/common/vo/enums/EnumMapperVO.java
similarity index 68%
rename from src/main/java/com/clubber/ClubberServer/global/vo/enums/EnumMapperVO.java
rename to Clubber-Common/src/main/java/com/clubber/common/vo/enums/EnumMapperVO.java
index 7f83127b7..b17f24c43 100644
--- a/src/main/java/com/clubber/ClubberServer/global/vo/enums/EnumMapperVO.java
+++ b/Clubber-Common/src/main/java/com/clubber/common/vo/enums/EnumMapperVO.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.global.vo.enums;
+package com.clubber.common.vo.enums;
-import com.clubber.ClubberServer.global.mapper.enums.EnumMapperType;
+import com.clubber.common.mapper.enums.EnumMapperType;
import lombok.Getter;
@Getter
diff --git a/Clubber-Domain/build.gradle b/Clubber-Domain/build.gradle
new file mode 100644
index 000000000..7ff51028e
--- /dev/null
+++ b/Clubber-Domain/build.gradle
@@ -0,0 +1,17 @@
+dependencies{
+ implementation project(":Clubber-Common")
+ implementation 'com.fasterxml.jackson.core:jackson-databind'
+ implementation 'com.fasterxml.jackson.core:jackson-core'
+ implementation 'com.fasterxml.jackson.core:jackson-annotations'
+
+ //TODO QueryDSL Projections & 외부 DTO 의존성 제거
+ implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.0.2'
+}
+
+jar {
+ enabled = true
+}
+
+bootJar {
+ enabled = false
+}
\ No newline at end of file
diff --git a/src/main/java/com/clubber/ClubberServer/domain/common/BaseEntity.java b/Clubber-Domain/src/main/java/com/clubber/domain/common/BaseEntity.java
similarity index 92%
rename from src/main/java/com/clubber/ClubberServer/domain/common/BaseEntity.java
rename to Clubber-Domain/src/main/java/com/clubber/domain/common/BaseEntity.java
index d848adab3..57447685c 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/common/BaseEntity.java
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/common/BaseEntity.java
@@ -1,4 +1,4 @@
-package com.clubber.ClubberServer.domain.common;
+package com.clubber.domain.common;
import jakarta.persistence.Column;
import jakarta.persistence.EntityListeners;
diff --git a/src/main/java/com/clubber/ClubberServer/global/vo/image/ImageVO.java b/Clubber-Domain/src/main/java/com/clubber/domain/common/vo/ImageVO.java
similarity index 80%
rename from src/main/java/com/clubber/ClubberServer/global/vo/image/ImageVO.java
rename to Clubber-Domain/src/main/java/com/clubber/domain/common/vo/ImageVO.java
index dca032eb3..cbb0b6461 100644
--- a/src/main/java/com/clubber/ClubberServer/global/vo/image/ImageVO.java
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/common/vo/ImageVO.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.global.vo.image;
+package com.clubber.domain.common.vo;
-import static com.clubber.ClubberServer.global.common.consts.ClubberStatic.IMAGE_SERVER;
+import static com.clubber.common.consts.ClubberStatic.IMAGE_SERVER;
import com.fasterxml.jackson.annotation.JsonValue;
import jakarta.persistence.Embeddable;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/admin/domain/Admin.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/admin/domain/Admin.java
similarity index 83%
rename from src/main/java/com/clubber/ClubberServer/domain/admin/domain/Admin.java
rename to Clubber-Domain/src/main/java/com/clubber/domain/domains/admin/domain/Admin.java
index 170fef031..fd21f9d0b 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/admin/domain/Admin.java
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/admin/domain/Admin.java
@@ -1,10 +1,10 @@
-package com.clubber.ClubberServer.domain.admin.domain;
+package com.clubber.domain.domains.admin.domain;
-import com.clubber.ClubberServer.domain.admin.exception.AdminAlreadyDeletedException;
-import com.clubber.ClubberServer.domain.club.domain.Club;
-import com.clubber.ClubberServer.domain.common.BaseEntity;
-import com.clubber.ClubberServer.domain.user.domain.AccountRole;
-import com.clubber.ClubberServer.domain.user.domain.AccountState;
+import com.clubber.domain.domains.admin.exception.AdminAlreadyDeletedException;
+import com.clubber.domain.domains.club.domain.Club;
+import com.clubber.domain.common.BaseEntity;
+import com.clubber.domain.domains.user.domain.AccountRole;
+import com.clubber.domain.domains.user.domain.AccountState;
import jakarta.persistence.*;
import jakarta.validation.constraints.NotNull;
import lombok.*;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/admin/domain/AdminPasswordFindAuth.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/admin/domain/AdminPasswordFindAuth.java
similarity index 79%
rename from src/main/java/com/clubber/ClubberServer/domain/admin/domain/AdminPasswordFindAuth.java
rename to Clubber-Domain/src/main/java/com/clubber/domain/domains/admin/domain/AdminPasswordFindAuth.java
index 0309c688c..03d11ed77 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/admin/domain/AdminPasswordFindAuth.java
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/admin/domain/AdminPasswordFindAuth.java
@@ -1,7 +1,7 @@
-package com.clubber.ClubberServer.domain.admin.domain;
+package com.clubber.domain.domains.admin.domain;
-import com.clubber.ClubberServer.domain.admin.exception.AdminAlreadyEmailVerifiedException;
-import com.clubber.ClubberServer.domain.admin.exception.AdminInvalidAuthCodeException;
+import com.clubber.domain.domains.admin.exception.AdminAlreadyEmailVerifiedException;
+import com.clubber.domain.domains.admin.exception.AdminInvalidAuthCodeException;
import lombok.Builder;
import lombok.Getter;
import org.springframework.data.annotation.Id;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/admin/domain/AdminRefreshToken.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/admin/domain/AdminRefreshToken.java
similarity index 94%
rename from src/main/java/com/clubber/ClubberServer/domain/admin/domain/AdminRefreshToken.java
rename to Clubber-Domain/src/main/java/com/clubber/domain/domains/admin/domain/AdminRefreshToken.java
index fecf54621..d102e81f3 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/admin/domain/AdminRefreshToken.java
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/admin/domain/AdminRefreshToken.java
@@ -1,4 +1,4 @@
-package com.clubber.ClubberServer.domain.admin.domain;
+package com.clubber.domain.domains.admin.domain;
import lombok.Builder;
import lombok.Getter;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/admin/domain/AdminSignupAuth.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/admin/domain/AdminSignupAuth.java
similarity index 80%
rename from src/main/java/com/clubber/ClubberServer/domain/admin/domain/AdminSignupAuth.java
rename to Clubber-Domain/src/main/java/com/clubber/domain/domains/admin/domain/AdminSignupAuth.java
index 8a5b270f4..ef0bdc556 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/admin/domain/AdminSignupAuth.java
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/admin/domain/AdminSignupAuth.java
@@ -1,7 +1,7 @@
-package com.clubber.ClubberServer.domain.admin.domain;
+package com.clubber.domain.domains.admin.domain;
-import com.clubber.ClubberServer.domain.admin.exception.AdminAlreadyEmailVerifiedException;
-import com.clubber.ClubberServer.domain.admin.exception.AdminInvalidAuthCodeException;
+import com.clubber.domain.domains.admin.exception.AdminAlreadyEmailVerifiedException;
+import com.clubber.domain.domains.admin.exception.AdminInvalidAuthCodeException;
import lombok.Builder;
import lombok.Getter;
import org.springframework.data.annotation.Id;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/admin/domain/AdminUpdateEmailAuth.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/admin/domain/AdminUpdateEmailAuth.java
similarity index 78%
rename from src/main/java/com/clubber/ClubberServer/domain/admin/domain/AdminUpdateEmailAuth.java
rename to Clubber-Domain/src/main/java/com/clubber/domain/domains/admin/domain/AdminUpdateEmailAuth.java
index 44bc601d6..6d38f4a29 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/admin/domain/AdminUpdateEmailAuth.java
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/admin/domain/AdminUpdateEmailAuth.java
@@ -1,7 +1,7 @@
-package com.clubber.ClubberServer.domain.admin.domain;
+package com.clubber.domain.domains.admin.domain;
-import com.clubber.ClubberServer.domain.admin.exception.AdminAlreadyEmailVerifiedException;
-import com.clubber.ClubberServer.domain.admin.exception.AdminInvalidAuthCodeException;
+import com.clubber.domain.domains.admin.exception.AdminAlreadyEmailVerifiedException;
+import com.clubber.domain.domains.admin.exception.AdminInvalidAuthCodeException;
import lombok.Builder;
import lombok.Getter;
import org.springframework.data.annotation.Id;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/admin/domain/AdminUsernameFindAuth.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/admin/domain/AdminUsernameFindAuth.java
similarity index 79%
rename from src/main/java/com/clubber/ClubberServer/domain/admin/domain/AdminUsernameFindAuth.java
rename to Clubber-Domain/src/main/java/com/clubber/domain/domains/admin/domain/AdminUsernameFindAuth.java
index 4ccb7e31a..125d3f0d7 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/admin/domain/AdminUsernameFindAuth.java
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/admin/domain/AdminUsernameFindAuth.java
@@ -1,7 +1,7 @@
-package com.clubber.ClubberServer.domain.admin.domain;
+package com.clubber.domain.domains.admin.domain;
-import com.clubber.ClubberServer.domain.admin.exception.AdminAlreadyEmailVerifiedException;
-import com.clubber.ClubberServer.domain.admin.exception.AdminInvalidAuthCodeException;
+import com.clubber.domain.domains.admin.exception.AdminAlreadyEmailVerifiedException;
+import com.clubber.domain.domains.admin.exception.AdminInvalidAuthCodeException;
import lombok.Builder;
import lombok.Getter;
import org.springframework.data.annotation.Id;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/admin/domain/Contact.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/admin/domain/Contact.java
similarity index 93%
rename from src/main/java/com/clubber/ClubberServer/domain/admin/domain/Contact.java
rename to Clubber-Domain/src/main/java/com/clubber/domain/domains/admin/domain/Contact.java
index c0a486868..c07cfa589 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/admin/domain/Contact.java
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/admin/domain/Contact.java
@@ -1,4 +1,4 @@
-package com.clubber.ClubberServer.domain.admin.domain;
+package com.clubber.domain.domains.admin.domain;
import jakarta.persistence.Column;
import jakarta.persistence.Embeddable;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/admin/domain/PendingAdminInfo.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/admin/domain/PendingAdminInfo.java
similarity index 92%
rename from src/main/java/com/clubber/ClubberServer/domain/admin/domain/PendingAdminInfo.java
rename to Clubber-Domain/src/main/java/com/clubber/domain/domains/admin/domain/PendingAdminInfo.java
index e9d95275c..77c2a4aaf 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/admin/domain/PendingAdminInfo.java
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/admin/domain/PendingAdminInfo.java
@@ -1,7 +1,7 @@
-package com.clubber.ClubberServer.domain.admin.domain;
+package com.clubber.domain.domains.admin.domain;
-import com.clubber.ClubberServer.domain.club.domain.*;
-import com.clubber.ClubberServer.domain.common.BaseEntity;
+import com.clubber.domain.common.BaseEntity;
+import com.clubber.domain.domains.club.domain.*;
import jakarta.persistence.*;
import jakarta.validation.constraints.NotNull;
import lombok.*;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/admin/exception/AdminAlreadyDeletedException.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/admin/exception/AdminAlreadyDeletedException.java
similarity index 67%
rename from src/main/java/com/clubber/ClubberServer/domain/admin/exception/AdminAlreadyDeletedException.java
rename to Clubber-Domain/src/main/java/com/clubber/domain/domains/admin/exception/AdminAlreadyDeletedException.java
index c1d172047..8147c52af 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/admin/exception/AdminAlreadyDeletedException.java
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/admin/exception/AdminAlreadyDeletedException.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.domain.admin.exception;
+package com.clubber.domain.domains.admin.exception;
-import com.clubber.ClubberServer.global.exception.BaseException;
+import com.clubber.common.exception.BaseException;
public class AdminAlreadyDeletedException extends BaseException {
diff --git a/src/main/java/com/clubber/ClubberServer/domain/admin/exception/AdminAlreadyEmailVerifiedException.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/admin/exception/AdminAlreadyEmailVerifiedException.java
similarity index 68%
rename from src/main/java/com/clubber/ClubberServer/domain/admin/exception/AdminAlreadyEmailVerifiedException.java
rename to Clubber-Domain/src/main/java/com/clubber/domain/domains/admin/exception/AdminAlreadyEmailVerifiedException.java
index afb3aa67d..cdedc29ff 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/admin/exception/AdminAlreadyEmailVerifiedException.java
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/admin/exception/AdminAlreadyEmailVerifiedException.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.domain.admin.exception;
+package com.clubber.domain.domains.admin.exception;
-import com.clubber.ClubberServer.global.exception.BaseException;
+import com.clubber.common.exception.BaseException;
public class AdminAlreadyEmailVerifiedException extends BaseException {
diff --git a/src/main/java/com/clubber/ClubberServer/domain/admin/exception/AdminEqualsPreviousPasswordExcpetion.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/admin/exception/AdminEqualsPreviousPasswordExcpetion.java
similarity index 69%
rename from src/main/java/com/clubber/ClubberServer/domain/admin/exception/AdminEqualsPreviousPasswordExcpetion.java
rename to Clubber-Domain/src/main/java/com/clubber/domain/domains/admin/exception/AdminEqualsPreviousPasswordExcpetion.java
index e63a192c8..79d75ded9 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/admin/exception/AdminEqualsPreviousPasswordExcpetion.java
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/admin/exception/AdminEqualsPreviousPasswordExcpetion.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.domain.admin.exception;
+package com.clubber.domain.domains.admin.exception;
-import com.clubber.ClubberServer.global.exception.BaseException;
+import com.clubber.common.exception.BaseException;
public class AdminEqualsPreviousPasswordExcpetion extends BaseException {
public static final BaseException EXCEPTION = new AdminEqualsPreviousPasswordExcpetion();
diff --git a/src/main/java/com/clubber/ClubberServer/domain/admin/exception/AdminErrorCode.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/admin/exception/AdminErrorCode.java
similarity index 89%
rename from src/main/java/com/clubber/ClubberServer/domain/admin/exception/AdminErrorCode.java
rename to Clubber-Domain/src/main/java/com/clubber/domain/domains/admin/exception/AdminErrorCode.java
index 832b781aa..1ab471b3a 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/admin/exception/AdminErrorCode.java
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/admin/exception/AdminErrorCode.java
@@ -1,7 +1,7 @@
-package com.clubber.ClubberServer.domain.admin.exception;
+package com.clubber.domain.domains.admin.exception;
-import com.clubber.ClubberServer.global.exception.BaseErrorCode;
-import com.clubber.ClubberServer.global.exception.ErrorReason;
+import com.clubber.common.exception.BaseErrorCode;
+import com.clubber.common.exception.ErrorReason;
import lombok.AllArgsConstructor;
import org.springframework.http.HttpStatus;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/admin/exception/AdminInvalidAuthCodeException.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/admin/exception/AdminInvalidAuthCodeException.java
similarity index 52%
rename from src/main/java/com/clubber/ClubberServer/domain/admin/exception/AdminInvalidAuthCodeException.java
rename to Clubber-Domain/src/main/java/com/clubber/domain/domains/admin/exception/AdminInvalidAuthCodeException.java
index a62e2a17a..827b33dc1 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/admin/exception/AdminInvalidAuthCodeException.java
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/admin/exception/AdminInvalidAuthCodeException.java
@@ -1,8 +1,8 @@
-package com.clubber.ClubberServer.domain.admin.exception;
+package com.clubber.domain.domains.admin.exception;
-import static com.clubber.ClubberServer.domain.admin.exception.AdminErrorCode.ADMIN_INVALID_AUTH_CODE;
+import static com.clubber.domain.domains.admin.exception.AdminErrorCode.ADMIN_INVALID_AUTH_CODE;
-import com.clubber.ClubberServer.global.exception.BaseException;
+import com.clubber.common.exception.BaseException;
public class AdminInvalidAuthCodeException extends BaseException {
diff --git a/src/main/java/com/clubber/ClubberServer/domain/admin/exception/AdminInvalidCurrentPasswordException.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/admin/exception/AdminInvalidCurrentPasswordException.java
similarity index 70%
rename from src/main/java/com/clubber/ClubberServer/domain/admin/exception/AdminInvalidCurrentPasswordException.java
rename to Clubber-Domain/src/main/java/com/clubber/domain/domains/admin/exception/AdminInvalidCurrentPasswordException.java
index f955394af..399c48d0a 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/admin/exception/AdminInvalidCurrentPasswordException.java
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/admin/exception/AdminInvalidCurrentPasswordException.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.domain.admin.exception;
+package com.clubber.domain.domains.admin.exception;
-import com.clubber.ClubberServer.global.exception.BaseException;
+import com.clubber.common.exception.BaseException;
public class AdminInvalidCurrentPasswordException extends BaseException {
public static final BaseException EXCEPTION = new AdminInvalidCurrentPasswordException();
diff --git a/src/main/java/com/clubber/ClubberServer/domain/admin/exception/AdminLoginFailedException.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/admin/exception/AdminLoginFailedException.java
similarity index 51%
rename from src/main/java/com/clubber/ClubberServer/domain/admin/exception/AdminLoginFailedException.java
rename to Clubber-Domain/src/main/java/com/clubber/domain/domains/admin/exception/AdminLoginFailedException.java
index 0fe50bc0f..ed34e27d1 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/admin/exception/AdminLoginFailedException.java
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/admin/exception/AdminLoginFailedException.java
@@ -1,8 +1,8 @@
-package com.clubber.ClubberServer.domain.admin.exception;
+package com.clubber.domain.domains.admin.exception;
-import static com.clubber.ClubberServer.domain.admin.exception.AdminErrorCode.ADMIN_LOGIN_FAILED;
+import static com.clubber.domain.domains.admin.exception.AdminErrorCode.ADMIN_LOGIN_FAILED;
-import com.clubber.ClubberServer.global.exception.BaseException;
+import com.clubber.common.exception.BaseException;
public class AdminLoginFailedException extends BaseException {
diff --git a/src/main/java/com/clubber/ClubberServer/domain/admin/exception/AdminNotFoundException.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/admin/exception/AdminNotFoundException.java
similarity index 66%
rename from src/main/java/com/clubber/ClubberServer/domain/admin/exception/AdminNotFoundException.java
rename to Clubber-Domain/src/main/java/com/clubber/domain/domains/admin/exception/AdminNotFoundException.java
index bb4902f88..621b8e9b0 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/admin/exception/AdminNotFoundException.java
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/admin/exception/AdminNotFoundException.java
@@ -1,7 +1,7 @@
-package com.clubber.ClubberServer.domain.admin.exception;
+package com.clubber.domain.domains.admin.exception;
-import com.clubber.ClubberServer.global.exception.BaseException;
+import com.clubber.common.exception.BaseException;
public class AdminNotFoundException extends BaseException {
diff --git a/src/main/java/com/clubber/ClubberServer/domain/admin/exception/AdminUsernameNotFoundException.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/admin/exception/AdminUsernameNotFoundException.java
similarity index 68%
rename from src/main/java/com/clubber/ClubberServer/domain/admin/exception/AdminUsernameNotFoundException.java
rename to Clubber-Domain/src/main/java/com/clubber/domain/domains/admin/exception/AdminUsernameNotFoundException.java
index cc542522b..3ecb803eb 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/admin/exception/AdminUsernameNotFoundException.java
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/admin/exception/AdminUsernameNotFoundException.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.domain.admin.exception;
+package com.clubber.domain.domains.admin.exception;
-import com.clubber.ClubberServer.global.exception.BaseException;
+import com.clubber.common.exception.BaseException;
public class AdminUsernameNotFoundException extends BaseException {
diff --git a/src/main/java/com/clubber/ClubberServer/domain/admin/exception/InvalidApprovedStatusException.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/admin/exception/InvalidApprovedStatusException.java
similarity index 68%
rename from src/main/java/com/clubber/ClubberServer/domain/admin/exception/InvalidApprovedStatusException.java
rename to Clubber-Domain/src/main/java/com/clubber/domain/domains/admin/exception/InvalidApprovedStatusException.java
index 1bb924bec..47581955a 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/admin/exception/InvalidApprovedStatusException.java
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/admin/exception/InvalidApprovedStatusException.java
@@ -1,8 +1,8 @@
-package com.clubber.ClubberServer.domain.admin.exception;
+package com.clubber.domain.domains.admin.exception;
-import com.clubber.ClubberServer.global.exception.BaseException;
+import com.clubber.common.exception.BaseException;
public class InvalidApprovedStatusException extends BaseException {
diff --git a/src/main/java/com/clubber/ClubberServer/domain/admin/repository/AdminPasswordFindAuthRepository.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/admin/repository/AdminPasswordFindAuthRepository.java
similarity index 55%
rename from src/main/java/com/clubber/ClubberServer/domain/admin/repository/AdminPasswordFindAuthRepository.java
rename to Clubber-Domain/src/main/java/com/clubber/domain/domains/admin/repository/AdminPasswordFindAuthRepository.java
index 66bc3ac5a..4082943f9 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/admin/repository/AdminPasswordFindAuthRepository.java
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/admin/repository/AdminPasswordFindAuthRepository.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.domain.admin.repository;
+package com.clubber.domain.domains.admin.repository;
-import com.clubber.ClubberServer.domain.admin.domain.AdminPasswordFindAuth;
+import com.clubber.domain.domains.admin.domain.AdminPasswordFindAuth;
import org.springframework.data.repository.CrudRepository;
public interface AdminPasswordFindAuthRepository extends CrudRepository {
diff --git a/src/main/java/com/clubber/ClubberServer/domain/admin/repository/AdminRefreshTokenRepository.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/admin/repository/AdminRefreshTokenRepository.java
similarity index 66%
rename from src/main/java/com/clubber/ClubberServer/domain/admin/repository/AdminRefreshTokenRepository.java
rename to Clubber-Domain/src/main/java/com/clubber/domain/domains/admin/repository/AdminRefreshTokenRepository.java
index 36b9a112f..5ca160af8 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/admin/repository/AdminRefreshTokenRepository.java
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/admin/repository/AdminRefreshTokenRepository.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.domain.admin.repository;
+package com.clubber.domain.domains.admin.repository;
-import com.clubber.ClubberServer.domain.admin.domain.AdminRefreshToken;
+import com.clubber.domain.domains.admin.domain.AdminRefreshToken;
import org.springframework.data.repository.CrudRepository;
import java.util.Optional;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/admin/repository/AdminRepository.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/admin/repository/AdminRepository.java
similarity index 79%
rename from src/main/java/com/clubber/ClubberServer/domain/admin/repository/AdminRepository.java
rename to Clubber-Domain/src/main/java/com/clubber/domain/domains/admin/repository/AdminRepository.java
index 625248a94..2ca089900 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/admin/repository/AdminRepository.java
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/admin/repository/AdminRepository.java
@@ -1,9 +1,9 @@
-package com.clubber.ClubberServer.domain.admin.repository;
+package com.clubber.domain.domains.admin.repository;
-import com.clubber.ClubberServer.domain.admin.domain.Admin;
-import com.clubber.ClubberServer.domain.club.domain.Club;
-import com.clubber.ClubberServer.domain.user.domain.AccountState;
+import com.clubber.domain.domains.admin.domain.Admin;
+import com.clubber.domain.domains.club.domain.Club;
+import com.clubber.domain.domains.user.domain.AccountState;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.Optional;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/admin/repository/AdminSignupAuthRepository.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/admin/repository/AdminSignupAuthRepository.java
similarity index 67%
rename from src/main/java/com/clubber/ClubberServer/domain/admin/repository/AdminSignupAuthRepository.java
rename to Clubber-Domain/src/main/java/com/clubber/domain/domains/admin/repository/AdminSignupAuthRepository.java
index b7f3fdfa2..31c259229 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/admin/repository/AdminSignupAuthRepository.java
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/admin/repository/AdminSignupAuthRepository.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.domain.admin.repository;
+package com.clubber.domain.domains.admin.repository;
-import com.clubber.ClubberServer.domain.admin.domain.AdminSignupAuth;
+import com.clubber.domain.domains.admin.domain.AdminSignupAuth;
import java.util.Optional;
import org.springframework.data.repository.CrudRepository;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/admin/repository/AdminUpdateEmailAuthRepository.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/admin/repository/AdminUpdateEmailAuthRepository.java
similarity index 55%
rename from src/main/java/com/clubber/ClubberServer/domain/admin/repository/AdminUpdateEmailAuthRepository.java
rename to Clubber-Domain/src/main/java/com/clubber/domain/domains/admin/repository/AdminUpdateEmailAuthRepository.java
index d6dc80775..1fb723b84 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/admin/repository/AdminUpdateEmailAuthRepository.java
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/admin/repository/AdminUpdateEmailAuthRepository.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.domain.admin.repository;
+package com.clubber.domain.domains.admin.repository;
-import com.clubber.ClubberServer.domain.admin.domain.AdminUpdateEmailAuth;
+import com.clubber.domain.domains.admin.domain.AdminUpdateEmailAuth;
import org.springframework.data.repository.CrudRepository;
public interface AdminUpdateEmailAuthRepository extends CrudRepository {
diff --git a/src/main/java/com/clubber/ClubberServer/domain/admin/repository/AdminUsernameFindAuthRepository.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/admin/repository/AdminUsernameFindAuthRepository.java
similarity index 55%
rename from src/main/java/com/clubber/ClubberServer/domain/admin/repository/AdminUsernameFindAuthRepository.java
rename to Clubber-Domain/src/main/java/com/clubber/domain/domains/admin/repository/AdminUsernameFindAuthRepository.java
index 589033b19..0185c85b8 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/admin/repository/AdminUsernameFindAuthRepository.java
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/admin/repository/AdminUsernameFindAuthRepository.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.domain.admin.repository;
+package com.clubber.domain.domains.admin.repository;
-import com.clubber.ClubberServer.domain.admin.domain.AdminUsernameFindAuth;
+import com.clubber.domain.domains.admin.domain.AdminUsernameFindAuth;
import org.springframework.data.repository.CrudRepository;
public interface AdminUsernameFindAuthRepository extends CrudRepository {
diff --git a/src/main/java/com/clubber/ClubberServer/domain/admin/repository/PendingAdminInfoRepository.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/admin/repository/PendingAdminInfoRepository.java
similarity index 62%
rename from src/main/java/com/clubber/ClubberServer/domain/admin/repository/PendingAdminInfoRepository.java
rename to Clubber-Domain/src/main/java/com/clubber/domain/domains/admin/repository/PendingAdminInfoRepository.java
index d275b3957..b97cdccad 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/admin/repository/PendingAdminInfoRepository.java
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/admin/repository/PendingAdminInfoRepository.java
@@ -1,6 +1,8 @@
-package com.clubber.ClubberServer.domain.admin.repository;
+package com.clubber.domain.domains.admin.repository;
-import com.clubber.ClubberServer.domain.admin.domain.PendingAdminInfo;
+import com.clubber.domain.domains.admin.domain.PendingAdminInfo;
+
+import java.util.List;
import java.util.Optional;
import org.springframework.data.jpa.repository.JpaRepository;
@@ -9,4 +11,6 @@ public interface PendingAdminInfoRepository extends JpaRepository findByUsername(String username);
+
+ List findByIsApproved(boolean isApproved);
}
diff --git a/Clubber-Domain/src/main/java/com/clubber/domain/domains/club/domain/Club.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/club/domain/Club.java
new file mode 100644
index 000000000..73b93d2d5
--- /dev/null
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/club/domain/Club.java
@@ -0,0 +1,103 @@
+package com.clubber.domain.domains.club.domain;
+
+import com.clubber.domain.domains.club.exception.*;
+import com.clubber.domain.common.BaseEntity;
+import com.clubber.domain.common.vo.ImageVO;
+import jakarta.persistence.*;
+import jakarta.validation.constraints.NotNull;
+import lombok.*;
+import org.hibernate.annotations.JdbcTypeCode;
+import org.hibernate.type.SqlTypes;
+
+@Builder
+@Entity
+@Getter
+@NoArgsConstructor(access = AccessLevel.PROTECTED)
+@AllArgsConstructor
+public class Club extends BaseEntity {
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ private Long id;
+
+ @NotNull
+ @Column(unique = true)
+ private String name;
+
+ @NotNull
+ @JdbcTypeCode(SqlTypes.VARCHAR)
+ @Enumerated(EnumType.STRING)
+ @Builder.Default
+ private ClubType clubType = ClubType.ETC;
+
+ @Column(length = 1000)
+ private String introduction;
+
+ @NotNull
+ @JdbcTypeCode(SqlTypes.VARCHAR)
+ @Enumerated(EnumType.STRING)
+ @Builder.Default
+ private Hashtag hashtag = Hashtag.ETC;
+
+ @NotNull
+ @JdbcTypeCode(SqlTypes.VARCHAR)
+ @Enumerated(EnumType.STRING)
+ @Builder.Default
+ private Division division = Division.ETC;
+
+ @NotNull
+ @JdbcTypeCode(SqlTypes.VARCHAR)
+ @Enumerated(EnumType.STRING)
+ @Builder.Default
+ private College college = College.ETC;
+
+ @NotNull
+ @JdbcTypeCode(SqlTypes.VARCHAR)
+ @Enumerated(EnumType.STRING)
+ @Builder.Default
+ private Department department = Department.ETC;
+
+ @Embedded
+ private ImageVO imageUrl;
+
+ private boolean isDeleted = false;
+
+ @OneToOne(fetch = FetchType.LAZY)
+ @JoinColumn(name = "clubInfo_id")
+ private ClubInfo clubInfo;
+
+ @Builder.Default
+ private boolean isAgreeToReview = true;
+
+ private boolean isAgreeToProvideInfo = false;
+
+ public void updateClub(String imageKey, String introduction) {
+ this.imageUrl = ImageVO.valueOf(imageKey);
+ this.introduction = introduction;
+ }
+
+ public void delete() {
+ if (this.isDeleted) {
+ throw ClubAlreadyDeletedException.EXCEPTION;
+ }
+ this.isDeleted = true;
+ }
+
+ public void validateAgreeToReview() {
+ if (!isAgreeToReview)
+ throw ClubNotAgreeToProvideReviewException.EXCEPTION;
+ }
+
+ public void disableReview() {
+ if (!isAgreeToReview) {
+ throw ClubReviewAlreadyDisabledException.EXCEPTION;
+ }
+ this.isAgreeToReview = false;
+ }
+
+ public void enableReview() {
+ if (isAgreeToReview) {
+ throw ClubReviewAlreadyEnabledException.EXCEPTION;
+ }
+ this.isAgreeToReview = true;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/clubber/ClubberServer/domain/club/domain/ClubInfo.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/club/domain/ClubInfo.java
similarity index 92%
rename from src/main/java/com/clubber/ClubberServer/domain/club/domain/ClubInfo.java
rename to Clubber-Domain/src/main/java/com/clubber/domain/domains/club/domain/ClubInfo.java
index c2b52ba12..9afe204c9 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/club/domain/ClubInfo.java
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/club/domain/ClubInfo.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.domain.club.domain;
+package com.clubber.domain.domains.club.domain;
-import com.clubber.ClubberServer.domain.common.BaseEntity;
+import com.clubber.domain.common.BaseEntity;
import jakarta.persistence.*;
import lombok.AccessLevel;
import lombok.Builder;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/club/domain/ClubType.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/club/domain/ClubType.java
similarity index 76%
rename from src/main/java/com/clubber/ClubberServer/domain/club/domain/ClubType.java
rename to Clubber-Domain/src/main/java/com/clubber/domain/domains/club/domain/ClubType.java
index e121737c0..2239b7960 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/club/domain/ClubType.java
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/club/domain/ClubType.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.domain.club.domain;
+package com.clubber.domain.domains.club.domain;
-import com.clubber.ClubberServer.global.mapper.enums.EnumDefaultMapperType;
+import com.clubber.common.mapper.enums.EnumDefaultMapperType;
import lombok.AllArgsConstructor;
import lombok.Getter;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/club/domain/College.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/club/domain/College.java
similarity index 94%
rename from src/main/java/com/clubber/ClubberServer/domain/club/domain/College.java
rename to Clubber-Domain/src/main/java/com/clubber/domain/domains/club/domain/College.java
index 93fe19cea..12dcf600b 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/club/domain/College.java
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/club/domain/College.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.domain.club.domain;
+package com.clubber.domain.domains.club.domain;
-import com.clubber.ClubberServer.global.mapper.enums.EnumDefaultMapperType;
+import com.clubber.common.mapper.enums.EnumDefaultMapperType;
import java.util.EnumSet;
import lombok.AllArgsConstructor;
import lombok.Getter;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/club/domain/Department.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/club/domain/Department.java
similarity index 95%
rename from src/main/java/com/clubber/ClubberServer/domain/club/domain/Department.java
rename to Clubber-Domain/src/main/java/com/clubber/domain/domains/club/domain/Department.java
index 0f8d719c9..8ca33bf19 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/club/domain/Department.java
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/club/domain/Department.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.domain.club.domain;
+package com.clubber.domain.domains.club.domain;
-import com.clubber.ClubberServer.global.mapper.enums.EnumDefaultMapperType;
+import com.clubber.common.mapper.enums.EnumDefaultMapperType;
import lombok.AllArgsConstructor;
import lombok.Getter;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/club/domain/Division.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/club/domain/Division.java
similarity index 80%
rename from src/main/java/com/clubber/ClubberServer/domain/club/domain/Division.java
rename to Clubber-Domain/src/main/java/com/clubber/domain/domains/club/domain/Division.java
index d421a0d3a..4b082a3a1 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/club/domain/Division.java
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/club/domain/Division.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.domain.club.domain;
+package com.clubber.domain.domains.club.domain;
-import com.clubber.ClubberServer.global.mapper.enums.EnumDefaultMapperType;
+import com.clubber.common.mapper.enums.EnumDefaultMapperType;
import lombok.AllArgsConstructor;
import lombok.Getter;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/club/domain/Hashtag.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/club/domain/Hashtag.java
similarity index 82%
rename from src/main/java/com/clubber/ClubberServer/domain/club/domain/Hashtag.java
rename to Clubber-Domain/src/main/java/com/clubber/domain/domains/club/domain/Hashtag.java
index 26ef7de91..9240682e9 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/club/domain/Hashtag.java
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/club/domain/Hashtag.java
@@ -1,7 +1,7 @@
-package com.clubber.ClubberServer.domain.club.domain;
+package com.clubber.domain.domains.club.domain;
-import com.clubber.ClubberServer.global.mapper.enums.EnumImageMapperType;
-import com.clubber.ClubberServer.global.vo.image.ImageVO;
+import com.clubber.common.mapper.enums.EnumImageMapperType;
+import com.clubber.domain.common.vo.ImageVO;
import lombok.AllArgsConstructor;
@AllArgsConstructor
diff --git a/src/main/java/com/clubber/ClubberServer/domain/club/exception/ClubAlreadyDeletedException.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/club/exception/ClubAlreadyDeletedException.java
similarity index 67%
rename from src/main/java/com/clubber/ClubberServer/domain/club/exception/ClubAlreadyDeletedException.java
rename to Clubber-Domain/src/main/java/com/clubber/domain/domains/club/exception/ClubAlreadyDeletedException.java
index 0d7b6048b..483bcb039 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/club/exception/ClubAlreadyDeletedException.java
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/club/exception/ClubAlreadyDeletedException.java
@@ -1,7 +1,7 @@
-package com.clubber.ClubberServer.domain.club.exception;
+package com.clubber.domain.domains.club.exception;
-import com.clubber.ClubberServer.global.exception.BaseException;
+import com.clubber.common.exception.BaseException;
public class ClubAlreadyDeletedException extends BaseException {
diff --git a/src/main/java/com/clubber/ClubberServer/domain/club/exception/ClubErrorCode.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/club/exception/ClubErrorCode.java
similarity index 74%
rename from src/main/java/com/clubber/ClubberServer/domain/club/exception/ClubErrorCode.java
rename to Clubber-Domain/src/main/java/com/clubber/domain/domains/club/exception/ClubErrorCode.java
index e3126f49a..179745fce 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/club/exception/ClubErrorCode.java
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/club/exception/ClubErrorCode.java
@@ -1,14 +1,16 @@
-package com.clubber.ClubberServer.domain.club.exception;
+package com.clubber.domain.domains.club.exception;
-import com.clubber.ClubberServer.global.exception.BaseErrorCode;
-import com.clubber.ClubberServer.global.exception.ErrorReason;
-import lombok.AllArgsConstructor;
+import com.clubber.common.exception.BaseErrorCode;
+import com.clubber.common.exception.ErrorReason;
+import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
-@AllArgsConstructor
+@RequiredArgsConstructor
public enum ClubErrorCode implements BaseErrorCode {
CLUB_ALREADY_DELETED(HttpStatus.BAD_REQUEST.value(), "CLUB_400_1", "이미 삭제된 동아리입니다."),
+ CLUB_REVIEW_ALREADY_DISABLED(HttpStatus.BAD_REQUEST.value(), "CLUB_400_2", "이미 리뷰 제공 기능이 비활성화 상태입니다."),
+ CLUB_REVIEW_ALREADY_ENABLED(HttpStatus.BAD_REQUEST.value(), "CLUB_400_3", "이미 리뷰 제공 기능이 활성화된 상태입니다"),
CLUB_NOT_AGREED_TO_PROVIDE_INFO(HttpStatus.FORBIDDEN.value(), "CLUB_403_1", "정보 제공에 동의하지 않은 동아리입니다."),
CLUB_NOT_AGREE_TO_PROVIDE_REVIEW(HttpStatus.FORBIDDEN.value(), "CLUB_403_2", "리뷰 제공에 동의하지 않은 동아리입니다."),
SEARCHED_CLUB_NOT_FOUND(HttpStatus.NOT_FOUND.value(), "CLUB_404_1", "검색하신 동아리 및 소모임은 존재하지 않습니다."),
@@ -17,8 +19,6 @@ public enum ClubErrorCode implements BaseErrorCode {
CLUBID_NOT_FOUND(HttpStatus.NOT_FOUND.value(), "CLUB_404_4", "해당 clubid을 가진 동아리가 존재하지 않습니다."),
HASHTAG_NOT_FOUND(HttpStatus.NOT_FOUND.value(), "CLUB_404_5", "해당 hashtag에 속한 동아리가 존재하지 않습니다.");
-
-
private final Integer status;
private final String code;
private final String reason;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/club/exception/ClubIdNotFoundException.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/club/exception/ClubIdNotFoundException.java
similarity index 66%
rename from src/main/java/com/clubber/ClubberServer/domain/club/exception/ClubIdNotFoundException.java
rename to Clubber-Domain/src/main/java/com/clubber/domain/domains/club/exception/ClubIdNotFoundException.java
index 4aca3b8ac..ce830398a 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/club/exception/ClubIdNotFoundException.java
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/club/exception/ClubIdNotFoundException.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.domain.club.exception;
+package com.clubber.domain.domains.club.exception;
-import com.clubber.ClubberServer.global.exception.BaseException;
+import com.clubber.common.exception.BaseException;
public class ClubIdNotFoundException extends BaseException {
public static final BaseException EXCEPTION = new ClubIdNotFoundException();
diff --git a/src/main/java/com/clubber/ClubberServer/domain/club/exception/ClubNotAgreeToProvideInfoException.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/club/exception/ClubNotAgreeToProvideInfoException.java
similarity index 70%
rename from src/main/java/com/clubber/ClubberServer/domain/club/exception/ClubNotAgreeToProvideInfoException.java
rename to Clubber-Domain/src/main/java/com/clubber/domain/domains/club/exception/ClubNotAgreeToProvideInfoException.java
index 3f2582e3d..b2d9b1a60 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/club/exception/ClubNotAgreeToProvideInfoException.java
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/club/exception/ClubNotAgreeToProvideInfoException.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.domain.club.exception;
+package com.clubber.domain.domains.club.exception;
-import com.clubber.ClubberServer.global.exception.BaseException;
+import com.clubber.common.exception.BaseException;
public class ClubNotAgreeToProvideInfoException extends BaseException{
public static final BaseException EXCEPTION = new ClubNotAgreeToProvideInfoException();
diff --git a/src/main/java/com/clubber/ClubberServer/domain/club/exception/ClubNotAgreeToProvideReviewException.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/club/exception/ClubNotAgreeToProvideReviewException.java
similarity index 70%
rename from src/main/java/com/clubber/ClubberServer/domain/club/exception/ClubNotAgreeToProvideReviewException.java
rename to Clubber-Domain/src/main/java/com/clubber/domain/domains/club/exception/ClubNotAgreeToProvideReviewException.java
index 597de039a..2ef67d138 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/club/exception/ClubNotAgreeToProvideReviewException.java
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/club/exception/ClubNotAgreeToProvideReviewException.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.domain.club.exception;
+package com.clubber.domain.domains.club.exception;
-import com.clubber.ClubberServer.global.exception.BaseException;
+import com.clubber.common.exception.BaseException;
public class ClubNotAgreeToProvideReviewException extends BaseException {
public static final BaseException EXCEPTION = new ClubNotAgreeToProvideReviewException();
diff --git a/src/main/java/com/clubber/ClubberServer/domain/club/exception/ClubNotFoundException.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/club/exception/ClubNotFoundException.java
similarity index 66%
rename from src/main/java/com/clubber/ClubberServer/domain/club/exception/ClubNotFoundException.java
rename to Clubber-Domain/src/main/java/com/clubber/domain/domains/club/exception/ClubNotFoundException.java
index e1c1f006f..a73fd7f7c 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/club/exception/ClubNotFoundException.java
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/club/exception/ClubNotFoundException.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.domain.club.exception;
+package com.clubber.domain.domains.club.exception;
-import com.clubber.ClubberServer.global.exception.BaseException;
+import com.clubber.common.exception.BaseException;
public class ClubNotFoundException extends BaseException{
public static final BaseException EXCEPTION = new ClubNotFoundException();
diff --git a/Clubber-Domain/src/main/java/com/clubber/domain/domains/club/exception/ClubReviewAlreadyDisabledException.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/club/exception/ClubReviewAlreadyDisabledException.java
new file mode 100644
index 000000000..6e6c7e2f5
--- /dev/null
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/club/exception/ClubReviewAlreadyDisabledException.java
@@ -0,0 +1,11 @@
+package com.clubber.domain.domains.club.exception;
+
+import com.clubber.common.exception.BaseException;
+
+public class ClubReviewAlreadyDisabledException extends BaseException {
+ public static BaseException EXCEPTION = new ClubReviewAlreadyDisabledException();
+
+ private ClubReviewAlreadyDisabledException() {
+ super(ClubErrorCode.CLUB_REVIEW_ALREADY_DISABLED);
+ }
+}
diff --git a/Clubber-Domain/src/main/java/com/clubber/domain/domains/club/exception/ClubReviewAlreadyEnabledException.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/club/exception/ClubReviewAlreadyEnabledException.java
new file mode 100644
index 000000000..18269fc8c
--- /dev/null
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/club/exception/ClubReviewAlreadyEnabledException.java
@@ -0,0 +1,11 @@
+package com.clubber.domain.domains.club.exception;
+
+import com.clubber.common.exception.BaseException;
+
+public class ClubReviewAlreadyEnabledException extends BaseException {
+ public static final BaseException EXCEPTION = new ClubReviewAlreadyEnabledException();
+
+ private ClubReviewAlreadyEnabledException() {
+ super(ClubErrorCode.CLUB_REVIEW_ALREADY_ENABLED);
+ }
+}
diff --git a/src/main/java/com/clubber/ClubberServer/domain/club/exception/DepartmentNotFoundException.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/club/exception/DepartmentNotFoundException.java
similarity index 67%
rename from src/main/java/com/clubber/ClubberServer/domain/club/exception/DepartmentNotFoundException.java
rename to Clubber-Domain/src/main/java/com/clubber/domain/domains/club/exception/DepartmentNotFoundException.java
index 0cb569fc7..694d23044 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/club/exception/DepartmentNotFoundException.java
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/club/exception/DepartmentNotFoundException.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.domain.club.exception;
+package com.clubber.domain.domains.club.exception;
-import com.clubber.ClubberServer.global.exception.BaseException;
+import com.clubber.common.exception.BaseException;
public class DepartmentNotFoundException extends BaseException {
public static final BaseException EXCEPTION = new DepartmentNotFoundException();
diff --git a/src/main/java/com/clubber/ClubberServer/domain/club/exception/DivisionNotFoundException.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/club/exception/DivisionNotFoundException.java
similarity index 67%
rename from src/main/java/com/clubber/ClubberServer/domain/club/exception/DivisionNotFoundException.java
rename to Clubber-Domain/src/main/java/com/clubber/domain/domains/club/exception/DivisionNotFoundException.java
index 825082300..3da0af668 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/club/exception/DivisionNotFoundException.java
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/club/exception/DivisionNotFoundException.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.domain.club.exception;
+package com.clubber.domain.domains.club.exception;
-import com.clubber.ClubberServer.global.exception.BaseException;
+import com.clubber.common.exception.BaseException;
public class DivisionNotFoundException extends BaseException {
public static final BaseException EXCEPTION = new DivisionNotFoundException();
diff --git a/src/main/java/com/clubber/ClubberServer/domain/club/exception/HashtagNotFoundException.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/club/exception/HashtagNotFoundException.java
similarity index 66%
rename from src/main/java/com/clubber/ClubberServer/domain/club/exception/HashtagNotFoundException.java
rename to Clubber-Domain/src/main/java/com/clubber/domain/domains/club/exception/HashtagNotFoundException.java
index 38fbe1faf..24f4005f9 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/club/exception/HashtagNotFoundException.java
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/club/exception/HashtagNotFoundException.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.domain.club.exception;
+package com.clubber.domain.domains.club.exception;
-import com.clubber.ClubberServer.global.exception.BaseException;
+import com.clubber.common.exception.BaseException;
public class HashtagNotFoundException extends BaseException {
public static final BaseException EXCEPTION = new HashtagNotFoundException();
diff --git a/src/main/java/com/clubber/ClubberServer/domain/club/repository/ClubInfoRepository.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/club/repository/ClubInfoRepository.java
similarity index 54%
rename from src/main/java/com/clubber/ClubberServer/domain/club/repository/ClubInfoRepository.java
rename to Clubber-Domain/src/main/java/com/clubber/domain/domains/club/repository/ClubInfoRepository.java
index 75dab39b6..2e3a44e52 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/club/repository/ClubInfoRepository.java
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/club/repository/ClubInfoRepository.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.domain.club.repository;
+package com.clubber.domain.domains.club.repository;
-import com.clubber.ClubberServer.domain.club.domain.ClubInfo;
+import com.clubber.domain.domains.club.domain.ClubInfo;
import org.springframework.data.jpa.repository.JpaRepository;
public interface ClubInfoRepository extends JpaRepository {
diff --git a/src/main/java/com/clubber/ClubberServer/domain/club/repository/ClubRepository.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/club/repository/ClubRepository.java
similarity index 90%
rename from src/main/java/com/clubber/ClubberServer/domain/club/repository/ClubRepository.java
rename to Clubber-Domain/src/main/java/com/clubber/domain/domains/club/repository/ClubRepository.java
index a633a90f3..ac061c002 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/club/repository/ClubRepository.java
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/club/repository/ClubRepository.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.domain.club.repository;
+package com.clubber.domain.domains.club.repository;
-import com.clubber.ClubberServer.domain.club.domain.*;
+import com.clubber.domain.domains.club.domain.*;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
@@ -8,7 +8,7 @@
import java.util.List;
import java.util.Optional;
-public interface ClubRepository extends JpaRepository, ClubCustomRepository{
+public interface ClubRepository extends JpaRepository{
List findByDivisionAndIsDeleted(Division division, boolean isDeleted);
diff --git a/src/main/java/com/clubber/ClubberServer/domain/favorite/domain/Favorite.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/favorite/domain/Favorite.java
similarity index 75%
rename from src/main/java/com/clubber/ClubberServer/domain/favorite/domain/Favorite.java
rename to Clubber-Domain/src/main/java/com/clubber/domain/domains/favorite/domain/Favorite.java
index 36236024f..13f820489 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/favorite/domain/Favorite.java
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/favorite/domain/Favorite.java
@@ -1,13 +1,13 @@
-package com.clubber.ClubberServer.domain.favorite.domain;
-
-import com.clubber.ClubberServer.domain.club.domain.Club;
-import com.clubber.ClubberServer.domain.club.exception.ClubNotFoundException;
-import com.clubber.ClubberServer.domain.common.BaseEntity;
-import com.clubber.ClubberServer.domain.favorite.exception.FavoriteAlreadyDeleteException;
-import com.clubber.ClubberServer.domain.favorite.exception.FavoriteNotMatchClubException;
-import com.clubber.ClubberServer.domain.favorite.exception.FavoriteNotMatchUserException;
-import com.clubber.ClubberServer.domain.user.domain.User;
-import com.clubber.ClubberServer.domain.user.exception.UserNotFoundException;
+package com.clubber.domain.domains.favorite.domain;
+
+import com.clubber.domain.domains.club.domain.Club;
+import com.clubber.domain.domains.club.exception.ClubNotFoundException;
+import com.clubber.domain.common.BaseEntity;
+import com.clubber.domain.domains.favorite.exception.FavoriteAlreadyDeleteException;
+import com.clubber.domain.domains.favorite.exception.FavoriteNotMatchClubException;
+import com.clubber.domain.domains.favorite.exception.FavoriteNotMatchUserException;
+import com.clubber.domain.domains.user.domain.User;
+import com.clubber.domain.domains.user.exception.UserNotFoundException;
import jakarta.persistence.*;
import jakarta.validation.constraints.NotNull;
import lombok.AccessLevel;
@@ -17,7 +17,7 @@
import java.util.Objects;
-import static com.clubber.ClubberServer.domain.user.domain.AccountState.INACTIVE;
+import static com.clubber.domain.domains.user.domain.AccountState.INACTIVE;
@Entity
@NoArgsConstructor(access = AccessLevel.PROTECTED)
diff --git a/src/main/java/com/clubber/ClubberServer/domain/favorite/exception/ClubAlreadyRegisterdFavoriteException.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/favorite/exception/ClubAlreadyRegisterdFavoriteException.java
similarity index 69%
rename from src/main/java/com/clubber/ClubberServer/domain/favorite/exception/ClubAlreadyRegisterdFavoriteException.java
rename to Clubber-Domain/src/main/java/com/clubber/domain/domains/favorite/exception/ClubAlreadyRegisterdFavoriteException.java
index 82c45036f..abf6d3a67 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/favorite/exception/ClubAlreadyRegisterdFavoriteException.java
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/favorite/exception/ClubAlreadyRegisterdFavoriteException.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.domain.favorite.exception;
+package com.clubber.domain.domains.favorite.exception;
-import com.clubber.ClubberServer.global.exception.BaseException;
+import com.clubber.common.exception.BaseException;
public class ClubAlreadyRegisterdFavoriteException extends BaseException {
diff --git a/src/main/java/com/clubber/ClubberServer/domain/favorite/exception/FavoriteAlreadyDeleteException.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/favorite/exception/FavoriteAlreadyDeleteException.java
similarity index 67%
rename from src/main/java/com/clubber/ClubberServer/domain/favorite/exception/FavoriteAlreadyDeleteException.java
rename to Clubber-Domain/src/main/java/com/clubber/domain/domains/favorite/exception/FavoriteAlreadyDeleteException.java
index 4d609ac0b..1becd752d 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/favorite/exception/FavoriteAlreadyDeleteException.java
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/favorite/exception/FavoriteAlreadyDeleteException.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.domain.favorite.exception;
+package com.clubber.domain.domains.favorite.exception;
-import com.clubber.ClubberServer.global.exception.BaseException;
+import com.clubber.common.exception.BaseException;
public class FavoriteAlreadyDeleteException extends BaseException {
diff --git a/src/main/java/com/clubber/ClubberServer/domain/favorite/exception/FavoriteErrorCode.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/favorite/exception/FavoriteErrorCode.java
similarity index 85%
rename from src/main/java/com/clubber/ClubberServer/domain/favorite/exception/FavoriteErrorCode.java
rename to Clubber-Domain/src/main/java/com/clubber/domain/domains/favorite/exception/FavoriteErrorCode.java
index 0ac349307..757d4f5ed 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/favorite/exception/FavoriteErrorCode.java
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/favorite/exception/FavoriteErrorCode.java
@@ -1,7 +1,7 @@
-package com.clubber.ClubberServer.domain.favorite.exception;
+package com.clubber.domain.domains.favorite.exception;
-import com.clubber.ClubberServer.global.exception.BaseErrorCode;
-import com.clubber.ClubberServer.global.exception.ErrorReason;
+import com.clubber.common.exception.BaseErrorCode;
+import com.clubber.common.exception.ErrorReason;
import lombok.AllArgsConstructor;
import org.springframework.http.HttpStatus;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/favorite/exception/FavoriteNotFoundException.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/favorite/exception/FavoriteNotFoundException.java
similarity index 65%
rename from src/main/java/com/clubber/ClubberServer/domain/favorite/exception/FavoriteNotFoundException.java
rename to Clubber-Domain/src/main/java/com/clubber/domain/domains/favorite/exception/FavoriteNotFoundException.java
index ffcc337b2..60a241db4 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/favorite/exception/FavoriteNotFoundException.java
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/favorite/exception/FavoriteNotFoundException.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.domain.favorite.exception;
+package com.clubber.domain.domains.favorite.exception;
-import com.clubber.ClubberServer.global.exception.BaseException;
+import com.clubber.common.exception.BaseException;
public class FavoriteNotFoundException extends BaseException {
diff --git a/src/main/java/com/clubber/ClubberServer/domain/favorite/exception/FavoriteNotMatchClubException.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/favorite/exception/FavoriteNotMatchClubException.java
similarity index 67%
rename from src/main/java/com/clubber/ClubberServer/domain/favorite/exception/FavoriteNotMatchClubException.java
rename to Clubber-Domain/src/main/java/com/clubber/domain/domains/favorite/exception/FavoriteNotMatchClubException.java
index 1adde5670..c64ae69e7 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/favorite/exception/FavoriteNotMatchClubException.java
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/favorite/exception/FavoriteNotMatchClubException.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.domain.favorite.exception;
+package com.clubber.domain.domains.favorite.exception;
-import com.clubber.ClubberServer.global.exception.BaseException;
+import com.clubber.common.exception.BaseException;
public class FavoriteNotMatchClubException extends BaseException {
diff --git a/src/main/java/com/clubber/ClubberServer/domain/favorite/exception/FavoriteNotMatchUserException.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/favorite/exception/FavoriteNotMatchUserException.java
similarity index 67%
rename from src/main/java/com/clubber/ClubberServer/domain/favorite/exception/FavoriteNotMatchUserException.java
rename to Clubber-Domain/src/main/java/com/clubber/domain/domains/favorite/exception/FavoriteNotMatchUserException.java
index 855fcd0dc..cfe23c7bc 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/favorite/exception/FavoriteNotMatchUserException.java
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/favorite/exception/FavoriteNotMatchUserException.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.domain.favorite.exception;
+package com.clubber.domain.domains.favorite.exception;
-import com.clubber.ClubberServer.global.exception.BaseException;
+import com.clubber.common.exception.BaseException;
public class FavoriteNotMatchUserException extends BaseException {
diff --git a/Clubber-Domain/src/main/java/com/clubber/domain/domains/report/domain/Report.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/report/domain/Report.java
new file mode 100644
index 000000000..ebf466c7e
--- /dev/null
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/report/domain/Report.java
@@ -0,0 +1,71 @@
+package com.clubber.domain.domains.report.domain;
+
+import com.clubber.domain.common.BaseEntity;
+import com.clubber.domain.domains.report.exception.ReviewAlreadyHiddenException;
+import com.clubber.domain.domains.review.domain.Review;
+import jakarta.persistence.Entity;
+import jakarta.persistence.EnumType;
+import jakarta.persistence.Enumerated;
+import jakarta.persistence.FetchType;
+import jakarta.persistence.GeneratedValue;
+import jakarta.persistence.GenerationType;
+import jakarta.persistence.Id;
+import jakarta.persistence.JoinColumn;
+import jakarta.persistence.ManyToOne;
+import jakarta.validation.constraints.NotNull;
+import lombok.AccessLevel;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import org.hibernate.annotations.JdbcTypeCode;
+import org.hibernate.type.SqlTypes;
+
+@Getter
+@Entity
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor(access = AccessLevel.PROTECTED)
+public class Report extends BaseEntity {
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ private Long id;
+
+ @ManyToOne(fetch = FetchType.LAZY)
+ @JoinColumn(name = "review_id")
+ @NotNull
+ private Review review;
+
+ @NotNull
+ @JdbcTypeCode(SqlTypes.VARCHAR)
+ @Enumerated(EnumType.STRING)
+ private ReportReason reportReason;
+
+ private String detailReason;
+
+ @JdbcTypeCode(SqlTypes.VARCHAR)
+ @Enumerated(EnumType.STRING)
+ @NotNull
+ @Builder.Default
+ private ReportStatus reportStatus = ReportStatus.PENDING;
+
+ @Builder.Default
+ private boolean isDeleted = false;
+
+ public static Report of(Review review, ReportReason reportReason, String detailReason) {
+ return Report.builder()
+ .review(review)
+ .reportReason(reportReason)
+ .detailReason(detailReason)
+ .build();
+ }
+
+ public void changeStatus(ReportStatus status) {
+ if (reportStatus != ReportStatus.PENDING) {
+ throw ReviewAlreadyHiddenException.EXCEPTION;
+ }
+ reportStatus = status;
+ }
+
+}
diff --git a/Clubber-Domain/src/main/java/com/clubber/domain/domains/report/domain/ReportReason.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/report/domain/ReportReason.java
new file mode 100644
index 000000000..711cc847e
--- /dev/null
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/report/domain/ReportReason.java
@@ -0,0 +1,25 @@
+package com.clubber.domain.domains.report.domain;
+
+import com.clubber.common.mapper.enums.EnumDefaultMapperType;
+import lombok.AllArgsConstructor;
+
+@AllArgsConstructor
+public enum ReportReason implements EnumDefaultMapperType {
+ ABUSE("욕설 및 비방"),
+ FALSE_INFORMATION("허위 정보"),
+ ADVERTISEMENT_SPAM("광고 및 스팸"),
+ PERSONAL_INFORMATION("개인정보 포함"),
+ OTHER("기타");
+
+ private final String title;
+
+ @Override
+ public String getCode() {
+ return name();
+ }
+
+ @Override
+ public String getTitle() {
+ return title;
+ }
+}
diff --git a/Clubber-Domain/src/main/java/com/clubber/domain/domains/report/domain/ReportStatus.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/report/domain/ReportStatus.java
new file mode 100644
index 000000000..9b12eb95b
--- /dev/null
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/report/domain/ReportStatus.java
@@ -0,0 +1,24 @@
+package com.clubber.domain.domains.report.domain;
+
+import com.clubber.common.mapper.enums.EnumDefaultMapperType;
+import lombok.AllArgsConstructor;
+
+@AllArgsConstructor
+public enum ReportStatus implements EnumDefaultMapperType {
+ PENDING("대기"),
+ APPROVED("승인"),
+ REJECTED("거절");
+
+ private final String title;
+
+ @Override
+ public String getCode() {
+ return name();
+ }
+
+ @Override
+ public String getTitle() {
+ return title;
+ }
+
+}
diff --git a/Clubber-Domain/src/main/java/com/clubber/domain/domains/report/exception/ReportErrorCode.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/report/exception/ReportErrorCode.java
new file mode 100644
index 000000000..82b80a183
--- /dev/null
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/report/exception/ReportErrorCode.java
@@ -0,0 +1,31 @@
+package com.clubber.domain.domains.report.exception;
+
+import com.clubber.common.exception.BaseErrorCode;
+import com.clubber.common.exception.ErrorReason;
+import lombok.AllArgsConstructor;
+import org.springframework.http.HttpStatus;
+
+@AllArgsConstructor
+public enum ReportErrorCode implements BaseErrorCode {
+
+ REVIEW_REPORT_ALREADY_HIDDEN(HttpStatus.BAD_REQUEST.value(), "REVIEW_REPORT_400_1",
+ "이미 숨김 처리된 리뷰입니다."),
+ DETAIL_REASON_REQUIRED(HttpStatus.BAD_REQUEST.value(), "REVIEW_REPORT_400_2",
+ "신고 사유를 입력해야합니다."),
+ REVIEW_REPORT_NOT_FOUND(HttpStatus.NOT_FOUND.value(), "REVIEW_REPORT_404_1",
+ "존재하지 않는 신고내역입니다.");
+
+
+ private final Integer status;
+ private final String code;
+ private final String reason;
+
+ @Override
+ public ErrorReason getErrorReason() {
+ return ErrorReason.builder()
+ .status(status)
+ .code(code)
+ .reason(reason)
+ .build();
+ }
+}
diff --git a/Clubber-Domain/src/main/java/com/clubber/domain/domains/report/exception/ReportNotFoundException.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/report/exception/ReportNotFoundException.java
new file mode 100644
index 000000000..06eff5c98
--- /dev/null
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/report/exception/ReportNotFoundException.java
@@ -0,0 +1,12 @@
+package com.clubber.domain.domains.report.exception;
+
+import com.clubber.common.exception.BaseException;
+
+public class ReportNotFoundException extends BaseException {
+
+ public static final BaseException EXCEPTION = new ReportNotFoundException();
+
+ public ReportNotFoundException() {
+ super(ReportErrorCode.REVIEW_REPORT_NOT_FOUND);
+ }
+}
\ No newline at end of file
diff --git a/Clubber-Domain/src/main/java/com/clubber/domain/domains/report/exception/ReviewAlreadyHiddenException.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/report/exception/ReviewAlreadyHiddenException.java
new file mode 100644
index 000000000..2f7004b98
--- /dev/null
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/report/exception/ReviewAlreadyHiddenException.java
@@ -0,0 +1,14 @@
+package com.clubber.domain.domains.report.exception;
+
+import com.clubber.common.exception.BaseException;
+
+public class ReviewAlreadyHiddenException extends BaseException {
+
+ public static final BaseException EXCEPTION = new ReviewAlreadyHiddenException();
+
+ public ReviewAlreadyHiddenException() {
+ super(ReportErrorCode.REVIEW_REPORT_NOT_FOUND);
+ }
+}
+
+
diff --git a/Clubber-Domain/src/main/java/com/clubber/domain/domains/report/exception/ReviewDetailReasonRequiredException.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/report/exception/ReviewDetailReasonRequiredException.java
new file mode 100644
index 000000000..4fa3a316e
--- /dev/null
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/report/exception/ReviewDetailReasonRequiredException.java
@@ -0,0 +1,12 @@
+package com.clubber.domain.domains.report.exception;
+
+import com.clubber.common.exception.BaseException;
+
+public class ReviewDetailReasonRequiredException extends BaseException {
+
+ public static final BaseException EXCEPTION = new ReviewDetailReasonRequiredException();
+
+ public ReviewDetailReasonRequiredException() {
+ super(ReportErrorCode.DETAIL_REASON_REQUIRED);
+ }
+}
diff --git a/Clubber-Domain/src/main/java/com/clubber/domain/domains/report/implement/ReportReader.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/report/implement/ReportReader.java
new file mode 100644
index 000000000..22e6a6773
--- /dev/null
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/report/implement/ReportReader.java
@@ -0,0 +1,41 @@
+package com.clubber.domain.domains.report.implement;
+
+import com.clubber.domain.domains.report.domain.Report;
+import com.clubber.domain.domains.report.domain.ReportStatus;
+import com.clubber.domain.domains.report.exception.ReportNotFoundException;
+import com.clubber.domain.domains.report.repository.ReportRepository;
+import com.clubber.domain.domains.report.vo.GetOneReportResponse;
+import java.util.List;
+import lombok.RequiredArgsConstructor;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.stereotype.Component;
+
+@Component
+@RequiredArgsConstructor
+public class ReportReader {
+
+ private final ReportRepository reportRepository;
+
+ public Report findById(Long id) {
+ return reportRepository.findByIdAndIsDeletedFalse(id)
+ .orElseThrow(() -> ReportNotFoundException.EXCEPTION);
+ }
+
+ public Page findReportsPage(Pageable pageable){
+ return reportRepository.findReports(pageable);
+ }
+
+ public Report findByIdAndStatus(Long id, ReportStatus status) {
+ return reportRepository.findByIdAndIsDeletedFalseAndReportStatus(id, status)
+ .orElseThrow(() -> ReportNotFoundException.EXCEPTION);
+ }
+
+ public List findByReviewId(Long reviewId) {
+ return reportRepository.findByReviewIdAndIsDeletedFalse(reviewId);
+ }
+
+ public List findAlwaysNextReport(Long reportId, Long reviewId){
+ return reportRepository.findNextReport(reportId,reviewId);
+ }
+}
diff --git a/Clubber-Domain/src/main/java/com/clubber/domain/domains/report/implement/ReportValidator.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/report/implement/ReportValidator.java
new file mode 100644
index 000000000..f24dd4e2f
--- /dev/null
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/report/implement/ReportValidator.java
@@ -0,0 +1,22 @@
+package com.clubber.domain.domains.report.implement;
+
+import com.clubber.domain.domains.report.domain.ReportStatus;
+import com.clubber.domain.domains.report.exception.ReportNotFoundException;
+import com.clubber.domain.domains.report.repository.ReportRepository;
+import com.clubber.domain.domains.review.domain.Review;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Component;
+
+@Component
+@RequiredArgsConstructor
+public class ReportValidator {
+ private final ReportRepository reportRepository;
+
+ public void hasPendingReport(Review review) {
+ if (!reportRepository.existsByReviewAndReportStatusAndIsDeletedFalse(review,
+ ReportStatus.PENDING)){
+ throw ReportNotFoundException.EXCEPTION;
+ }
+ }
+
+}
diff --git a/Clubber-Domain/src/main/java/com/clubber/domain/domains/report/repository/ReportCustomRepository.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/report/repository/ReportCustomRepository.java
new file mode 100644
index 000000000..19b3a0190
--- /dev/null
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/report/repository/ReportCustomRepository.java
@@ -0,0 +1,15 @@
+package com.clubber.domain.domains.report.repository;
+
+import com.clubber.domain.domains.report.domain.Report;
+import com.clubber.domain.domains.report.vo.GetOneReportResponse;
+import java.util.List;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+
+public interface ReportCustomRepository {
+
+ List findNextReport(Long reportId, Long reviewId);
+
+ Page findReports(Pageable pageable);
+
+}
diff --git a/Clubber-Domain/src/main/java/com/clubber/domain/domains/report/repository/ReportCustomRepositoryImpl.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/report/repository/ReportCustomRepositoryImpl.java
new file mode 100644
index 000000000..4272606fd
--- /dev/null
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/report/repository/ReportCustomRepositoryImpl.java
@@ -0,0 +1,119 @@
+package com.clubber.domain.domains.report.repository;
+
+import static com.clubber.domain.domains.report.domain.QReport.report;
+
+import com.clubber.domain.domains.club.domain.QClub;
+import com.clubber.domain.domains.report.domain.QReport;
+import com.clubber.domain.domains.report.domain.Report;
+import com.clubber.domain.domains.report.vo.GetOneReportResponse;
+import com.clubber.domain.domains.review.domain.QReview;
+import com.querydsl.core.Tuple;
+import com.querydsl.core.group.GroupBy;
+import com.querydsl.core.types.dsl.BooleanExpression;
+import com.querydsl.jpa.JPAExpressions;
+import com.querydsl.jpa.impl.JPAQuery;
+import com.querydsl.jpa.impl.JPAQueryFactory;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+import lombok.RequiredArgsConstructor;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.support.PageableExecutionUtils;
+
+@RequiredArgsConstructor
+public class ReportCustomRepositoryImpl implements ReportCustomRepository {
+
+ private final JPAQueryFactory queryFactory;
+
+ @Override
+ public List findNextReport(Long reportId, Long reviewId) {
+ return queryFactory.selectFrom(report)
+ .where(
+ report.isDeleted.eq(false),
+ report.review.id.eq(reviewId),
+ ltReportId(reportId)
+ )
+ .orderBy(report.id.desc())
+ .limit(2)
+ .fetch();
+ }
+
+ private BooleanExpression ltReportId(Long reportId) {
+ if (reportId == null) {
+ return null;
+ }
+ return report.id.lt(reportId);
+ }
+
+ @Override
+ public Page findReports(Pageable pageable) {
+
+ QReport report = QReport.report;
+ QReport newer = new QReport("newer");
+ QReport rc = new QReport("rc");
+ QReview review = QReview.review;
+ QClub club = QClub.club;
+
+ List latest = queryFactory
+ .selectFrom(report)
+ .join(report.review, review).fetchJoin()
+ .join(review.club, club).fetchJoin()
+ .where(
+ report.isDeleted.eq(false),
+ JPAExpressions.selectOne().from(newer)
+ .where(
+ newer.isDeleted.eq(false),
+ newer.review.id.eq(report.review.id),
+ newer.createdAt.gt(report.createdAt)
+ .or(newer.createdAt.eq(report.createdAt)
+ .and(newer.id.gt(report.id)))
+ ).notExists()
+ )
+ .orderBy(report.createdAt.desc(), report.id.desc())
+ .offset(pageable.getOffset())
+ .limit(pageable.getPageSize())
+ .fetch();
+
+ List reviewIds = latest.stream()
+ .map(r -> r.getReview().getId())
+ .toList();
+
+ final Map countMap;
+ if (reviewIds.isEmpty()) {
+ countMap = Map.of();
+ } else {
+ List cntTuples = queryFactory
+ .select(rc.review.id, rc.id.count())
+ .from(rc)
+ .where(
+ rc.isDeleted.eq(false),
+ rc.review.id.in(reviewIds)
+ )
+ .groupBy(rc.review.id)
+ .fetch();
+
+ countMap = cntTuples.stream()
+ .collect(Collectors.toMap(
+ t -> t.get(rc.review.id),
+ t -> t.get(rc.id.count())
+ ));
+ }
+
+ List responses = latest.stream()
+ .map(r -> GetOneReportResponse.of(
+ r,
+ countMap.getOrDefault(r.getReview().getId(), 0L).intValue()
+ ))
+ .toList();
+
+ JPAQuery countQuery = queryFactory
+ .select(report.review.id.countDistinct())
+ .from(report)
+ .where(report.isDeleted.eq(false));
+
+ return PageableExecutionUtils.getPage(responses, pageable, countQuery::fetchOne);
+ }
+
+}
diff --git a/Clubber-Domain/src/main/java/com/clubber/domain/domains/report/repository/ReportRepository.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/report/repository/ReportRepository.java
new file mode 100644
index 000000000..431fa41a5
--- /dev/null
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/report/repository/ReportRepository.java
@@ -0,0 +1,17 @@
+package com.clubber.domain.domains.report.repository;
+
+import com.clubber.domain.domains.report.domain.Report;
+import com.clubber.domain.domains.report.domain.ReportStatus;
+import com.clubber.domain.domains.review.domain.Review;
+import java.util.List;
+import java.util.Optional;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+public interface ReportRepository extends JpaRepository, ReportCustomRepository {
+
+ Optional findByIdAndIsDeletedFalse(Long id);
+ Optional findByIdAndIsDeletedFalseAndReportStatus(Long id, ReportStatus reportStatus);
+ List findByReviewIdAndIsDeletedFalse(Long reviewId);
+ boolean existsByReviewAndReportStatusAndIsDeletedFalse(Review review, ReportStatus reportStatus);
+ boolean existsByReviewAndIsDeletedFalse(Review review);
+}
diff --git a/Clubber-Domain/src/main/java/com/clubber/domain/domains/report/vo/GetOneReportResponse.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/report/vo/GetOneReportResponse.java
new file mode 100644
index 000000000..8fdd184e3
--- /dev/null
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/report/vo/GetOneReportResponse.java
@@ -0,0 +1,49 @@
+package com.clubber.domain.domains.report.vo;
+
+import com.clubber.domain.domains.report.domain.Report;
+import io.swagger.v3.oas.annotations.media.Schema;
+import java.time.LocalDateTime;
+import lombok.AccessLevel;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Getter;
+
+@Getter
+@Builder(access = AccessLevel.PRIVATE)
+@AllArgsConstructor(access = AccessLevel.PRIVATE)
+public class GetOneReportResponse {
+
+ @Schema(description = "리뷰 id", example = "1")
+ private final Long reviewId;
+
+ @Schema(description = "동아리명", example = "클러버")
+ private final String clubName;
+
+ @Schema(description = "신고 횟수", example = "2")
+ private final Integer reportedNum;
+
+ @Schema(description = "리뷰 내용", example = "좋아요")
+ private final String content;
+
+ @Schema(description = "신고사유", example = "허위 정보")
+ private final String reportReason;
+
+ @Schema(description = "신고일", example = "2025-07-06T10:00:00")
+ private final LocalDateTime reportedAt;
+
+ @Schema(description = "처리 상태", example = "승인")
+ private final String reportStatus;
+
+
+ public static GetOneReportResponse of(Report report, Integer reportedNum) {
+ return GetOneReportResponse.builder()
+ .reviewId(report.getReview().getId())
+ .clubName(report.getReview().getClub().getName())
+ .reportedNum(reportedNum)
+ .content(report.getReview().getContent())
+ .reportReason(report.getReportReason().getTitle())
+ .reportedAt(report.getCreatedAt())
+ .reportStatus(report.getReportStatus().getTitle())
+ .build();
+ }
+}
diff --git a/Clubber-Domain/src/main/java/com/clubber/domain/domains/review/domain/Keyword.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/review/domain/Keyword.java
new file mode 100644
index 000000000..37dbf1619
--- /dev/null
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/review/domain/Keyword.java
@@ -0,0 +1,82 @@
+package com.clubber.domain.domains.review.domain;
+
+import com.clubber.common.mapper.enums.EnumDefaultMapperType;
+import com.fasterxml.jackson.annotation.JsonCreator;
+
+import java.util.Arrays;
+
+import lombok.AllArgsConstructor;
+
+@AllArgsConstructor
+public enum Keyword implements EnumDefaultMapperType {
+ // 활동 스타일
+ ACTIVE("🔥 활동이 활발해요"),
+ FREE("🔥 자유로워요"),
+ SYSTEMATIC("🔥 체계적으로 운영돼요"),
+ AUTONOMOUS("🔥 자율성이 높아요"),
+ STABLE("🔥 운영이 탄탄해요"),
+
+ // 분위기
+ FRIENDLY("👥 친목활동이 많아요"),
+ COMFORTABLE("🔥 편안한 분위기에요"),
+ HIERARCHICAL("🔥 선후배 관계가 수평적이에요"),
+ WELCOMING("🔥 처음 와도 잘 적응 할 수 있어요"),
+ TEAM_ACTIVITY("🔥 조 활동이 있어요"),
+
+ // 활동
+ DIVERSE_ACTIVITY("🔥 활동이 다양해요"),
+ PRACTICAL("🔥 실무/프로젝트 중심이에요"),
+ MAJOR_RELATED("🔥 전공과 연계돼요"),
+ CAREER_HELPFUL("🔥 대외활동/커리어에 도움이 됐어요"),
+ REGULAR_MEETING("🔥 정기 모임이 있어요"),
+
+ // 비용
+ LOW_FEE("💵 회비가 저렴해요"),
+ FAIR_FEE("💵 회비가 적당해요"),
+ NO_FEE("💵 회비가 아깝지 않아요"),
+ FUNDED("💵 활동비가 충분히 지원돼요"),
+
+ // 운영진
+ GOOD_MANAGEMENT("🔥 운영진이 일을 잘해요"),
+ GOOD_COMMUNICATION("🔥 소통이 원활해요"),
+ TRANSPARENT("🔥 투명하게 운영돼요"),
+ RESPONSIBLE("🔥 회장이 책임감이 있어요"),
+
+ // 시간/참여도
+ LOW_TIME("🔥 활동 시간이 적어요"),
+ EXAM_FRIENDLY("🔥 시험 기간에 배려해줘요"),
+ FLEXIBLE_ATTENDANCE("🔥 참여가 자유로워요"),
+ HIGH_ATTENDANCE("🔥 참여 비중이 높아요"),
+
+ // 가입/선발
+ INTERVIEW("🔥 면접이 있어요"),
+ REQUIRE_SPEC("🔥 스펙이 필요해요"),
+ SELF_INTRO("🔥 자기소개서를 제출했어요"),
+ LOW_COMPETITION("🔥 진입장벽이 낮아요"),
+
+ // 구성원
+ MIXED_GRADES("🔥 다양한 학년이 섞여 있어요"),
+ MOSTLY_FRESHMEN("🔥 대부분 1학년이에요"),
+ SMALL_GROUP("🔥 소규모 동아리에요"),
+ LARGE_GROUP("🔥 대규모 동아리에요");
+
+ private final String title;
+
+ @JsonCreator
+ public static Keyword from(String req) {
+ return Arrays.stream(Keyword.values())
+ .filter(keyword -> keyword.getCode().equals(req))
+ .findAny()
+ .orElse(null);
+ }
+
+ @Override
+ public String getCode() {
+ return name();
+ }
+
+ @Override
+ public String getTitle() {
+ return title;
+ }
+}
diff --git a/Clubber-Domain/src/main/java/com/clubber/domain/domains/review/domain/ReportStatus.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/review/domain/ReportStatus.java
new file mode 100644
index 000000000..5f8793ff9
--- /dev/null
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/review/domain/ReportStatus.java
@@ -0,0 +1,6 @@
+package com.clubber.domain.domains.review.domain;
+
+public enum ReportStatus {
+ HIDDEN,
+ VISIBLE
+}
diff --git a/Clubber-Domain/src/main/java/com/clubber/domain/domains/review/domain/Review.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/review/domain/Review.java
new file mode 100644
index 000000000..0c6965bb5
--- /dev/null
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/review/domain/Review.java
@@ -0,0 +1,103 @@
+package com.clubber.domain.domains.review.domain;
+
+import com.clubber.domain.common.BaseEntity;
+import com.clubber.domain.domains.club.domain.Club;
+import com.clubber.domain.domains.report.domain.Report;
+import com.clubber.domain.domains.review.exception.ReviewAlreadyDeletedException;
+import com.clubber.domain.domains.user.domain.User;
+import jakarta.persistence.*;
+import jakarta.validation.constraints.NotNull;
+import lombok.*;
+import org.hibernate.annotations.JdbcTypeCode;
+import org.hibernate.type.SqlTypes;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Builder
+@AllArgsConstructor(access = AccessLevel.PROTECTED)
+@Entity
+@NoArgsConstructor(access = AccessLevel.PROTECTED)
+@Getter
+@Table(indexes = @Index(name = "idx_review_club_id_approved_status_id_desc",
+ columnList = "club_id, approved_status, id desc"))
+public class Review extends BaseEntity {
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ private Long id;
+
+ @ManyToOne(fetch = FetchType.LAZY)
+ @JoinColumn(name = "club_id")
+ @NotNull
+ private Club club;
+
+ @ManyToOne(fetch = FetchType.LAZY)
+ @JoinColumn(name = "user_id")
+ @NotNull
+ private User user;
+
+ private String content;
+
+ @JdbcTypeCode(SqlTypes.VARCHAR)
+ @Enumerated(EnumType.STRING)
+ @NotNull
+ @Builder.Default
+ private ReportStatus reportStatus = ReportStatus.VISIBLE;
+
+ @Builder.Default
+ private boolean isDeleted = false;
+
+ @Builder.Default
+ @OneToMany(mappedBy = "review", cascade = CascadeType.ALL)
+ private List reviewKeywords = new ArrayList<>();
+
+ @Builder.Default
+ @OneToMany(mappedBy = "review", cascade = CascadeType.ALL)
+ private List reviewLikes = new ArrayList<>();
+
+ @Builder.Default
+ @OneToMany(mappedBy = "review", cascade = CascadeType.ALL)
+ private List reviewReports = new ArrayList<>();
+
+ @OneToOne(mappedBy = "review")
+ private ReviewReply reviewReply;
+
+ public static Review of(User user, Club club, String content) {
+ return Review.builder()
+ .user(user)
+ .club(club)
+ .content(content)
+ .build();
+ }
+
+ //양방향 매핑 메서드
+ public void addKeywords(List keywords) {
+ keywords.forEach(keyword -> {
+ ReviewKeyword reviewKeyword = ReviewKeyword.of(keyword, this);
+ this.reviewKeywords.add(reviewKeyword);
+ });
+ }
+
+ public void updateContent(String content) {
+ this.content = content;
+ }
+
+ public void delete() {
+ if (isDeleted) {
+ throw ReviewAlreadyDeletedException.EXCEPTION;
+ }
+ this.isDeleted = true;
+ }
+
+ public void hide() {
+ this.reportStatus = ReportStatus.HIDDEN;
+ }
+
+ public String getContentForPublic() {
+ if (reportStatus == ReportStatus.HIDDEN) {
+ return null;
+ }
+ return content;
+ }
+}
diff --git a/Clubber-Domain/src/main/java/com/clubber/domain/domains/review/domain/ReviewFilterType.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/review/domain/ReviewFilterType.java
new file mode 100644
index 000000000..b745e7294
--- /dev/null
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/review/domain/ReviewFilterType.java
@@ -0,0 +1,5 @@
+package com.clubber.domain.domains.review.domain;
+
+public enum ReviewFilterType {
+ NOT_REPLYED
+}
diff --git a/src/main/java/com/clubber/ClubberServer/domain/review/domain/ReviewKeyword.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/review/domain/ReviewKeyword.java
similarity index 92%
rename from src/main/java/com/clubber/ClubberServer/domain/review/domain/ReviewKeyword.java
rename to Clubber-Domain/src/main/java/com/clubber/domain/domains/review/domain/ReviewKeyword.java
index cee8631f1..d8bd7dcf4 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/review/domain/ReviewKeyword.java
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/review/domain/ReviewKeyword.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.domain.review.domain;
+package com.clubber.domain.domains.review.domain;
-import com.clubber.ClubberServer.domain.common.BaseEntity;
+import com.clubber.domain.common.BaseEntity;
import jakarta.persistence.Entity;
import jakarta.persistence.EnumType;
import jakarta.persistence.Enumerated;
diff --git a/Clubber-Domain/src/main/java/com/clubber/domain/domains/review/domain/ReviewKeywordCategory.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/review/domain/ReviewKeywordCategory.java
new file mode 100644
index 000000000..ad6df0c0c
--- /dev/null
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/review/domain/ReviewKeywordCategory.java
@@ -0,0 +1,80 @@
+package com.clubber.domain.domains.review.domain;
+
+import com.clubber.common.mapper.enums.EnumDefaultMapperType;
+import lombok.Getter;
+import lombok.RequiredArgsConstructor;
+
+import java.util.EnumSet;
+import java.util.Set;
+
+import static com.clubber.domain.domains.review.domain.Keyword.*;
+
+@Getter
+@RequiredArgsConstructor
+public enum ReviewKeywordCategory implements EnumDefaultMapperType {
+
+ ACTIVITY_STYLE("활동 스타일", EnumSet.of(
+ ACTIVE,
+ FREE,
+ SYSTEMATIC,
+ AUTONOMOUS,
+ STABLE
+ )),
+ CULTURE("분위기", EnumSet.of(
+ FRIENDLY,
+ COMFORTABLE,
+ HIERARCHICAL,
+ WELCOMING,
+ TEAM_ACTIVITY
+ )),
+ ACTIVITY("활동", EnumSet.of(
+ DIVERSE_ACTIVITY,
+ PRACTICAL,
+ MAJOR_RELATED,
+ CAREER_HELPFUL,
+ REGULAR_MEETING
+ )),
+ COST("비용", EnumSet.of(
+ LOW_FEE,
+ FAIR_FEE,
+ NO_FEE,
+ FUNDED
+ )),
+ MANAGE("운영진", EnumSet.of(
+ GOOD_MANAGEMENT,
+ GOOD_COMMUNICATION,
+ TRANSPARENT,
+ RESPONSIBLE
+ )),
+ TIME_AND_ENGAGEMENT("시간/참여도", EnumSet.of(
+ LOW_TIME,
+ EXAM_FRIENDLY,
+ FLEXIBLE_ATTENDANCE,
+ HIGH_ATTENDANCE
+ )),
+ RECRUITMENT("가입/선발", EnumSet.of(
+ INTERVIEW,
+ REQUIRE_SPEC,
+ SELF_INTRO,
+ LOW_COMPETITION
+ )),
+ MEMBER("구성원", EnumSet.of(
+ MIXED_GRADES,
+ MOSTLY_FRESHMEN,
+ SMALL_GROUP,
+ LARGE_GROUP
+ ));
+
+ private final String title;
+ private final Set reviewKeywords;
+
+ @Override
+ public String getCode() {
+ return name();
+ }
+
+ @Override
+ public String getTitle() {
+ return title;
+ }
+}
diff --git a/Clubber-Domain/src/main/java/com/clubber/domain/domains/review/domain/ReviewLike.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/review/domain/ReviewLike.java
new file mode 100644
index 000000000..cdfafb6fa
--- /dev/null
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/review/domain/ReviewLike.java
@@ -0,0 +1,31 @@
+package com.clubber.domain.domains.review.domain;
+
+import com.clubber.domain.domains.user.domain.User;
+import jakarta.persistence.*;
+import lombok.*;
+
+@Builder
+@AllArgsConstructor(access = AccessLevel.PROTECTED)
+@Entity
+@NoArgsConstructor(access = AccessLevel.PROTECTED)
+@Getter
+public class ReviewLike {
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ private Long id;
+
+ @ManyToOne(fetch = FetchType.LAZY)
+ @JoinColumn(name = "user_id")
+ private User user;
+
+ @ManyToOne(fetch = FetchType.LAZY)
+ @JoinColumn(name = "review_id")
+ private Review review;
+
+ @Builder.Default
+ private boolean isDeleted = false;
+
+ public void delete() {
+ isDeleted = true;
+ }
+}
diff --git a/Clubber-Domain/src/main/java/com/clubber/domain/domains/review/domain/ReviewReply.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/review/domain/ReviewReply.java
new file mode 100644
index 000000000..281773d0e
--- /dev/null
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/review/domain/ReviewReply.java
@@ -0,0 +1,31 @@
+package com.clubber.domain.domains.review.domain;
+
+import com.clubber.domain.common.BaseEntity;
+import com.clubber.domain.domains.admin.domain.Admin;
+import jakarta.persistence.*;
+import lombok.*;
+
+@Getter
+@NoArgsConstructor(access = AccessLevel.PROTECTED)
+@AllArgsConstructor(access = AccessLevel.PRIVATE)
+@Builder
+@Entity
+public class ReviewReply extends BaseEntity {
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ private Long id;
+
+ private String content;
+
+ @ManyToOne(fetch = FetchType.LAZY)
+ @JoinColumn(name = "admin_id")
+ private Admin admin;
+
+ @OneToOne(fetch = FetchType.LAZY)
+ @JoinColumn(name = "review_id")
+ private Review review;
+
+ @Builder.Default
+ private boolean isDeleted = false;
+}
diff --git a/Clubber-Domain/src/main/java/com/clubber/domain/domains/review/domain/ReviewSortType.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/review/domain/ReviewSortType.java
new file mode 100644
index 000000000..ee1d79e16
--- /dev/null
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/review/domain/ReviewSortType.java
@@ -0,0 +1,5 @@
+package com.clubber.domain.domains.review.domain;
+
+public enum ReviewSortType {
+ LIKE, ASC, DESC
+}
diff --git a/src/main/java/com/clubber/ClubberServer/domain/review/exception/ReviewAlreadyDeletedException.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/review/exception/ReviewAlreadyDeletedException.java
similarity index 66%
rename from src/main/java/com/clubber/ClubberServer/domain/review/exception/ReviewAlreadyDeletedException.java
rename to Clubber-Domain/src/main/java/com/clubber/domain/domains/review/exception/ReviewAlreadyDeletedException.java
index 6f600f1bd..f1c575a0c 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/review/exception/ReviewAlreadyDeletedException.java
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/review/exception/ReviewAlreadyDeletedException.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.domain.review.exception;
+package com.clubber.domain.domains.review.exception;
-import com.clubber.ClubberServer.global.exception.BaseException;
+import com.clubber.common.exception.BaseException;
public class ReviewAlreadyDeletedException extends BaseException {
diff --git a/Clubber-Domain/src/main/java/com/clubber/domain/domains/review/exception/ReviewAlreadyHiddenException.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/review/exception/ReviewAlreadyHiddenException.java
new file mode 100644
index 000000000..cdf15817e
--- /dev/null
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/review/exception/ReviewAlreadyHiddenException.java
@@ -0,0 +1,13 @@
+package com.clubber.domain.domains.review.exception;
+
+import com.clubber.common.exception.BaseException;
+
+public class ReviewAlreadyHiddenException extends BaseException {
+
+ public static final BaseException EXCEPTION = new ReviewAlreadyHiddenException();
+
+ public ReviewAlreadyHiddenException() {
+ super(ReviewErrorCode.REVIEW_ALREADY_HIDDEN);
+ }
+}
+
diff --git a/Clubber-Domain/src/main/java/com/clubber/domain/domains/review/exception/ReviewAlreadyLikedException.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/review/exception/ReviewAlreadyLikedException.java
new file mode 100644
index 000000000..19464b623
--- /dev/null
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/review/exception/ReviewAlreadyLikedException.java
@@ -0,0 +1,11 @@
+package com.clubber.domain.domains.review.exception;
+
+import com.clubber.common.exception.BaseException;
+
+public class ReviewAlreadyLikedException extends BaseException {
+ public static final BaseException EXCEPTION = new ReviewAlreadyLikedException();
+
+ public ReviewAlreadyLikedException() {
+ super(ReviewErrorCode.REVIEW_ALREADY_LIKED);
+ }
+}
diff --git a/src/main/java/com/clubber/ClubberServer/domain/review/exception/ReviewClubNotMatchException.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/review/exception/ReviewClubNotMatchException.java
similarity index 66%
rename from src/main/java/com/clubber/ClubberServer/domain/review/exception/ReviewClubNotMatchException.java
rename to Clubber-Domain/src/main/java/com/clubber/domain/domains/review/exception/ReviewClubNotMatchException.java
index 67ea351eb..83e6b52ee 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/review/exception/ReviewClubNotMatchException.java
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/review/exception/ReviewClubNotMatchException.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.domain.review.exception;
+package com.clubber.domain.domains.review.exception;
-import com.clubber.ClubberServer.global.exception.BaseException;
+import com.clubber.common.exception.BaseException;
public class ReviewClubNotMatchException extends BaseException {
diff --git a/src/main/java/com/clubber/ClubberServer/domain/review/exception/ReviewEnumNotMatchedException.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/review/exception/ReviewEnumNotMatchedException.java
similarity index 67%
rename from src/main/java/com/clubber/ClubberServer/domain/review/exception/ReviewEnumNotMatchedException.java
rename to Clubber-Domain/src/main/java/com/clubber/domain/domains/review/exception/ReviewEnumNotMatchedException.java
index 72ed837d0..ff7da818b 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/review/exception/ReviewEnumNotMatchedException.java
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/review/exception/ReviewEnumNotMatchedException.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.domain.review.exception;
+package com.clubber.domain.domains.review.exception;
-import com.clubber.ClubberServer.global.exception.BaseException;
+import com.clubber.common.exception.BaseException;
public class ReviewEnumNotMatchedException extends BaseException {
diff --git a/Clubber-Domain/src/main/java/com/clubber/domain/domains/review/exception/ReviewErrorCode.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/review/exception/ReviewErrorCode.java
new file mode 100644
index 000000000..82a9a9e29
--- /dev/null
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/review/exception/ReviewErrorCode.java
@@ -0,0 +1,37 @@
+package com.clubber.domain.domains.review.exception;
+
+import com.clubber.common.exception.BaseErrorCode;
+import com.clubber.common.exception.ErrorReason;
+import lombok.AllArgsConstructor;
+import org.springframework.http.HttpStatus;
+
+@AllArgsConstructor
+public enum ReviewErrorCode implements BaseErrorCode {
+ USER_ALREADY_REVIEWED(HttpStatus.BAD_REQUEST.value(), "REVIEW_400_1", "이미 리뷰를 등록한 동아리입니다."),
+ REVIEW_CLUB_NOT_MATCHED(HttpStatus.BAD_REQUEST.value(), "REVIEW_400_2", "리뷰와 동아리가 일치하지 않습니다"),
+ REVIEW_KEYWORD_ENUM_NOT_MATCHED(HttpStatus.BAD_REQUEST.value(), "REVIEW_400_3",
+ "잘못된 리뷰 키워드 값입니다."),
+ USER_REVIEWS_NOT_FOUND(HttpStatus.BAD_REQUEST.value(), "REVIEW_400_4", "적절하지 않은 리뷰 ID입니다."),
+ REVIEW_ALREADY_DELETED(HttpStatus.BAD_REQUEST.value(), "REVIEW_400_5", "이미 삭제된 리뷰입니다."),
+ REVIEW_ALREADY_VERIFIED(HttpStatus.BAD_REQUEST.value(), "REVIEW_400_6", "이미 인증된 리뷰입니다."),
+ REVIEW_USER_NOT_MATCHED(HttpStatus.BAD_REQUEST.value(), "REVIEW_400_7", "리뷰의 작성자와 일치하지 않습니다"),
+ REVIEW_ALREADY_LIKED(HttpStatus.BAD_REQUEST.value(), "REVIEW_400_8", "이미 좋아요를 표시한 리뷰입니다."),
+ REVIEW_SELF_REPORT_NOT_ALLOWED(HttpStatus.BAD_REQUEST.value(), "REVIEW_400_9", "자신이 작성한 리뷰는 신고할 수 없습니다."),
+ REVIEW_ALREADY_HIDDEN(HttpStatus.BAD_REQUEST.value(),"REVIEW_400_10", "이미 숨김 처리된 리뷰입니다."),
+ REVIEW_HAS_REPORT(HttpStatus.BAD_REQUEST.value(), "REVIEW_400_11", "해당 리뷰에 대한 신고 내역이 존재하므로 수정이 불가능합니다."),
+ REVIEW_NOT_FOUND(HttpStatus.NO_CONTENT.value(), "REVIEW_404_1", "존재하지 않는 리뷰입니다."),
+ REVIEW_LIKE_NOT_FOUND(HttpStatus.NO_CONTENT.value(), "REVIEW_404_2", "좋아요하지 않은 리뷰입니다");
+
+ private final Integer status;
+ private final String code;
+ private final String reason;
+
+ @Override
+ public ErrorReason getErrorReason() {
+ return ErrorReason.builder()
+ .status(status)
+ .code(code)
+ .reason(reason)
+ .build();
+ }
+}
diff --git a/Clubber-Domain/src/main/java/com/clubber/domain/domains/review/exception/ReviewHasReportException.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/review/exception/ReviewHasReportException.java
new file mode 100644
index 000000000..fa062693f
--- /dev/null
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/review/exception/ReviewHasReportException.java
@@ -0,0 +1,11 @@
+package com.clubber.domain.domains.review.exception;
+
+import com.clubber.common.exception.BaseException;
+
+public class ReviewHasReportException extends BaseException {
+ public static final BaseException EXCEPTION = new ReviewHasReportException();
+
+ private ReviewHasReportException() {
+ super(ReviewErrorCode.REVIEW_HAS_REPORT);
+ }
+}
diff --git a/Clubber-Domain/src/main/java/com/clubber/domain/domains/review/exception/ReviewLikeNotFoundException.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/review/exception/ReviewLikeNotFoundException.java
new file mode 100644
index 000000000..5be0171b9
--- /dev/null
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/review/exception/ReviewLikeNotFoundException.java
@@ -0,0 +1,12 @@
+package com.clubber.domain.domains.review.exception;
+
+import com.clubber.common.exception.BaseException;
+
+public class ReviewLikeNotFoundException extends BaseException {
+
+ public static final BaseException EXCEPTION = new ReviewLikeNotFoundException();
+
+ private ReviewLikeNotFoundException() {
+ super(ReviewErrorCode.REVIEW_LIKE_NOT_FOUND);
+ }
+}
diff --git a/src/main/java/com/clubber/ClubberServer/domain/review/exception/ReviewNotFoundException.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/review/exception/ReviewNotFoundException.java
similarity index 50%
rename from src/main/java/com/clubber/ClubberServer/domain/review/exception/ReviewNotFoundException.java
rename to Clubber-Domain/src/main/java/com/clubber/domain/domains/review/exception/ReviewNotFoundException.java
index 602e9f7de..d00cc31c8 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/review/exception/ReviewNotFoundException.java
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/review/exception/ReviewNotFoundException.java
@@ -1,8 +1,8 @@
-package com.clubber.ClubberServer.domain.review.exception;
+package com.clubber.domain.domains.review.exception;
-import static com.clubber.ClubberServer.domain.review.exception.ReviewErrorCode.REVIEW_NOT_FOUND;
+import static com.clubber.domain.domains.review.exception.ReviewErrorCode.REVIEW_NOT_FOUND;
-import com.clubber.ClubberServer.global.exception.BaseException;
+import com.clubber.common.exception.BaseException;
public class ReviewNotFoundException extends BaseException {
diff --git a/Clubber-Domain/src/main/java/com/clubber/domain/domains/review/exception/ReviewSelfReportNotAllowedException.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/review/exception/ReviewSelfReportNotAllowedException.java
new file mode 100644
index 000000000..86417bb09
--- /dev/null
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/review/exception/ReviewSelfReportNotAllowedException.java
@@ -0,0 +1,13 @@
+package com.clubber.domain.domains.review.exception;
+
+import com.clubber.common.exception.BaseException;
+
+public class ReviewSelfReportNotAllowedException extends BaseException {
+
+ public static final BaseException EXCEPTION = new ReviewSelfReportNotAllowedException();
+
+ public ReviewSelfReportNotAllowedException() {
+ super(ReviewErrorCode.REVIEW_SELF_REPORT_NOT_ALLOWED);
+ }
+
+}
diff --git a/Clubber-Domain/src/main/java/com/clubber/domain/domains/review/exception/ReviewUserNotMatchException.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/review/exception/ReviewUserNotMatchException.java
new file mode 100644
index 000000000..356fb070b
--- /dev/null
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/review/exception/ReviewUserNotMatchException.java
@@ -0,0 +1,11 @@
+package com.clubber.domain.domains.review.exception;
+
+import com.clubber.common.exception.BaseException;
+
+public class ReviewUserNotMatchException extends BaseException {
+ public static final BaseException EXCEPTION = new ReviewUserNotMatchException();
+
+ public ReviewUserNotMatchException() {
+ super(ReviewErrorCode.REVIEW_USER_NOT_MATCHED);
+ }
+}
diff --git a/src/main/java/com/clubber/ClubberServer/domain/review/exception/UserAlreadyReviewedException.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/review/exception/UserAlreadyReviewedException.java
similarity index 53%
rename from src/main/java/com/clubber/ClubberServer/domain/review/exception/UserAlreadyReviewedException.java
rename to Clubber-Domain/src/main/java/com/clubber/domain/domains/review/exception/UserAlreadyReviewedException.java
index ddef7c49c..b1a54f6d8 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/review/exception/UserAlreadyReviewedException.java
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/review/exception/UserAlreadyReviewedException.java
@@ -1,12 +1,12 @@
-package com.clubber.ClubberServer.domain.review.exception;
+package com.clubber.domain.domains.review.exception;
-import com.clubber.ClubberServer.global.exception.BaseException;
+import com.clubber.common.exception.BaseException;
public class UserAlreadyReviewedException extends BaseException {
public static final BaseException EXCEPTION = new UserAlreadyReviewedException();
private UserAlreadyReviewedException() {
- super(ReviewErrorCode.USER_ALREADY_REVIEWD);
+ super(ReviewErrorCode.USER_ALREADY_REVIEWED);
}
}
diff --git a/src/main/java/com/clubber/ClubberServer/domain/review/exception/UserReviewsNotFoundException.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/review/exception/UserReviewsNotFoundException.java
similarity index 66%
rename from src/main/java/com/clubber/ClubberServer/domain/review/exception/UserReviewsNotFoundException.java
rename to Clubber-Domain/src/main/java/com/clubber/domain/domains/review/exception/UserReviewsNotFoundException.java
index fd6bf8542..5a6bd9e84 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/review/exception/UserReviewsNotFoundException.java
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/review/exception/UserReviewsNotFoundException.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.domain.review.exception;
+package com.clubber.domain.domains.review.exception;
-import com.clubber.ClubberServer.global.exception.BaseException;
+import com.clubber.common.exception.BaseException;
public class UserReviewsNotFoundException extends BaseException {
diff --git a/Clubber-Domain/src/main/java/com/clubber/domain/domains/review/implement/ReviewReader.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/review/implement/ReviewReader.java
new file mode 100644
index 000000000..5fe77d67d
--- /dev/null
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/review/implement/ReviewReader.java
@@ -0,0 +1,28 @@
+package com.clubber.domain.domains.review.implement;
+
+import com.clubber.domain.domains.review.domain.Review;
+import com.clubber.domain.domains.review.domain.ReviewLike;
+import com.clubber.domain.domains.review.exception.ReviewLikeNotFoundException;
+import com.clubber.domain.domains.review.exception.ReviewNotFoundException;
+import com.clubber.domain.domains.review.repository.ReviewLikeRepository;
+import com.clubber.domain.domains.review.repository.ReviewRepository;
+import com.clubber.domain.domains.user.domain.User;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Component;
+
+@Component
+@RequiredArgsConstructor
+public class ReviewReader {
+ private final ReviewRepository reviewRepository;
+ private final ReviewLikeRepository reviewLikeRepository;
+
+ public Review findById(Long id) {
+ return reviewRepository.findByIdAndIsDeletedFalse(id)
+ .orElseThrow(() -> ReviewNotFoundException.EXCEPTION);
+ }
+
+ public ReviewLike findUserReviewLike(Review review, User user) {
+ return reviewLikeRepository.findByReviewAndUserAndIsDeletedFalse(review, user)
+ .orElseThrow(() -> ReviewLikeNotFoundException.EXCEPTION);
+ }
+}
diff --git a/Clubber-Domain/src/main/java/com/clubber/domain/domains/review/implement/ReviewValidator.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/review/implement/ReviewValidator.java
new file mode 100644
index 000000000..a00827e83
--- /dev/null
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/review/implement/ReviewValidator.java
@@ -0,0 +1,72 @@
+package com.clubber.domain.domains.review.implement;
+
+import com.clubber.domain.domains.club.domain.Club;
+import com.clubber.domain.domains.report.domain.ReportReason;
+import com.clubber.domain.domains.report.exception.ReviewDetailReasonRequiredException;
+import com.clubber.domain.domains.report.repository.ReportRepository;
+import com.clubber.domain.domains.review.domain.ReportStatus;
+import com.clubber.domain.domains.review.domain.Review;
+import com.clubber.domain.domains.review.exception.*;
+import com.clubber.domain.domains.review.repository.ReviewLikeRepository;
+import com.clubber.domain.domains.review.repository.ReviewRepository;
+import com.clubber.domain.domains.user.domain.User;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Component;
+
+@Component
+@RequiredArgsConstructor
+public class ReviewValidator {
+
+ private final ReviewLikeRepository reviewLikeRepository;
+ private final ReviewRepository reviewRepository;
+ private final ReportRepository reportRepository;
+
+ public void validateReviewUser(User user, Review review) {
+ if (!review.getUser().equals(user)) {
+ throw ReviewUserNotMatchException.EXCEPTION;
+ }
+ }
+
+ public void validateReviewClub(Club club, Review review) {
+ if (!review.getClub().equals(club)) {
+ throw ReviewClubNotMatchException.EXCEPTION;
+ }
+ }
+
+ public void validateReviewExists(User user, Review review) {
+ boolean isExists = reviewLikeRepository.existsByReviewAndUserAndIsDeletedFalse(review,
+ user);
+ if (isExists) {
+ throw ReviewAlreadyLikedException.EXCEPTION;
+ }
+ }
+
+ public void validateReviewExists(Club club, User user) {
+ if (reviewRepository.existsByClubAndUser(club, user)) {
+ throw UserAlreadyReviewedException.EXCEPTION;
+ }
+ }
+
+ public void validateReviewReportExists(Review review) {
+ if (reportRepository.existsByReviewAndIsDeletedFalse(review)){
+ throw ReviewHasReportException.EXCEPTION;
+ }
+ }
+
+ public void validateNotSelfReview(User user, Review review) {
+ if (review.getUser().equals(user)) {
+ throw ReviewSelfReportNotAllowedException.EXCEPTION;
+ }
+ }
+ public void validateReportReason(ReportReason reportReason, String detailReason){
+ if (reportReason == ReportReason.OTHER && detailReason == null){
+ throw ReviewDetailReasonRequiredException.EXCEPTION;
+ }
+ }
+
+ public void validateReviewStatus(Review review){
+ if (review.getReportStatus()== ReportStatus.HIDDEN){
+ throw ReviewAlreadyHiddenException.EXCEPTION;
+ }
+ }
+}
diff --git a/Clubber-Domain/src/main/java/com/clubber/domain/domains/review/repository/ReviewCustomRepository.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/review/repository/ReviewCustomRepository.java
new file mode 100644
index 000000000..ea40f9791
--- /dev/null
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/review/repository/ReviewCustomRepository.java
@@ -0,0 +1,30 @@
+package com.clubber.domain.domains.review.repository;
+
+import com.clubber.domain.domains.club.domain.Club;
+import com.clubber.domain.domains.report.domain.Report;
+import com.clubber.domain.domains.review.domain.Review;
+import com.clubber.domain.domains.review.domain.ReviewFilterType;
+import com.clubber.domain.domains.review.domain.ReviewSortType;
+import com.clubber.domain.domains.review.vo.ClubReviewResponse;
+import com.clubber.domain.domains.user.domain.User;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+
+import java.util.List;
+
+public interface ReviewCustomRepository {
+
+ List queryReviewByUserOrderByIdDesc(User user);
+
+ Page queryReviewByClub(Club club, User loginUser, Pageable pageable, ReviewSortType sortType);
+
+ Page queryReviewByClubAndFilterType(Club club, ReviewFilterType filterType, Pageable pageable);
+
+ List queryReviewNoOffsetByClub(Club club, Pageable pageable, Long reviewId);
+
+ boolean existsByClubAndUser(Club club, User user);
+
+ void softDeleteReviewByClubId(Long clubId);
+
+ List queryNextReviewReport(Long reviewId, Long nowReviewReportId);
+}
diff --git a/Clubber-Domain/src/main/java/com/clubber/domain/domains/review/repository/ReviewCustomRepositoryImpl.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/review/repository/ReviewCustomRepositoryImpl.java
new file mode 100644
index 000000000..5ecff05a6
--- /dev/null
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/review/repository/ReviewCustomRepositoryImpl.java
@@ -0,0 +1,216 @@
+package com.clubber.domain.domains.review.repository;
+
+import com.clubber.domain.domains.club.domain.Club;
+import com.clubber.domain.domains.report.domain.Report;
+import com.clubber.domain.domains.review.domain.*;
+import com.clubber.domain.domains.review.util.ReviewUtil;
+import com.clubber.domain.domains.review.vo.ClubReviewResponse;
+import com.clubber.domain.domains.review.vo.ReviewReplyResponse;
+import com.clubber.domain.domains.user.domain.User;
+import com.querydsl.core.Tuple;
+import com.querydsl.core.types.OrderSpecifier;
+import com.querydsl.core.types.dsl.BooleanExpression;
+import com.querydsl.jpa.impl.JPAQuery;
+import com.querydsl.jpa.impl.JPAQueryFactory;
+import lombok.RequiredArgsConstructor;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.support.PageableExecutionUtils;
+
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+import static com.clubber.domain.domains.club.domain.QClub.club;
+import static com.clubber.domain.domains.report.domain.QReport.report;
+import static com.clubber.domain.domains.review.domain.QReview.review;
+import static com.clubber.domain.domains.review.domain.QReviewKeyword.reviewKeyword;
+import static com.clubber.domain.domains.review.domain.QReviewLike.reviewLike;
+import static com.clubber.domain.domains.review.domain.QReviewReply.reviewReply;
+import static com.clubber.domain.domains.user.domain.QUser.user;
+
+@RequiredArgsConstructor
+public class ReviewCustomRepositoryImpl implements ReviewCustomRepository {
+
+ private final JPAQueryFactory queryFactory;
+
+ @Override
+ public List queryReviewByUserOrderByIdDesc(User user) {
+ return queryFactory.selectFrom(review)
+ .join(review.reviewKeywords, reviewKeyword).fetchJoin()
+ .join(review.club, club).fetchJoin()
+ .where(review.user.eq(user)
+ .and(review.isDeleted.eq(false)))
+ .orderBy(review.id.desc())
+ .fetch();
+ }
+
+ @Override
+ public Page queryReviewByClub(Club club, User loginUser, Pageable pageable, ReviewSortType sortType) {
+
+ List tuples = queryFactory
+ .select(review, reviewLike.count())
+ .from(review)
+ .leftJoin(review.reviewLikes, reviewLike)
+ .on(reviewLike.isDeleted.eq(false))
+ .where(review.club.id.eq(club.getId())
+ .and(review.isDeleted.eq(false)))
+ .groupBy(review)
+ .orderBy(getOrderSpecifier(sortType, review, reviewLike))
+ .offset(pageable.getOffset())
+ .limit(pageable.getPageSize())
+ .fetch();
+
+ List reviewIds = tuples.stream()
+ .map(t -> t.get(review).getId())
+ .toList();
+
+ Map likeCountMap = tuples.stream()
+ .collect(Collectors.toMap(
+ t -> t.get(review).getId(),
+ t -> t.get(reviewLike.count())
+ ));
+
+
+ List likedReviewIds = queryFactory.select(reviewLike.review.id)
+ .from(reviewLike)
+ .where(reviewLike.user.id.eq(loginUser.getId())
+ .and(reviewLike.isDeleted.eq(false))
+ .and(reviewLike.review.id.in(reviewIds))
+ )
+ .fetch();
+
+ List reviews = queryFactory.selectFrom(review)
+ .join(review.reviewKeywords, reviewKeyword).fetchJoin()
+ .join(review.user, user).fetchJoin()
+ .where(review.id.in(reviewIds))
+ .fetch();
+
+ // Tuple 순서에 맞게 재정렬
+ Map reviewMap = reviews.stream()
+ .collect(Collectors.toMap(Review::getId, r -> r));
+
+ List sortedReviews = reviewIds.stream()
+ .map(reviewMap::get)
+ .toList();
+
+ List responses = sortedReviews.stream()
+ .map(r -> ClubReviewResponse.of(
+ r,
+ ReviewUtil.extractKeywords(r),
+ likeCountMap.getOrDefault(r.getId(), 0L),
+ likedReviewIds.contains(r.getId()),
+ ReviewReplyResponse.of(r.getReviewReply())
+
+ ))
+ .toList();
+
+ JPAQuery countQuery = queryFactory
+ .select(review.count())
+ .from(review)
+ .where(review.club.id.eq(club.getId())
+ .and(review.isDeleted.eq(false)));
+
+ return PageableExecutionUtils.getPage(responses, pageable, countQuery::fetchOne);
+ }
+
+ public Page queryReviewByClubAndFilterType(Club club, ReviewFilterType reviewFilterType, Pageable pageable) {
+ List reviews = queryFactory.selectFrom(review)
+ .leftJoin(review.reviewReply, reviewReply)
+ .where(review.club.id.eq(club.getId())
+ .and(eqReviewReplyNull(reviewFilterType))
+ .and(review.isDeleted.eq(false))
+ )
+ .offset(pageable.getOffset())
+ .limit(pageable.getPageSize())
+ .orderBy(review.id.desc())
+ .fetch();
+
+ JPAQuery countQuery = queryFactory
+ .select(review.count())
+ .from(review)
+ .leftJoin(review.reviewReply, reviewReply)
+ .where(review.club.id.eq(club.getId())
+ .and(eqReviewReplyNull(reviewFilterType))
+ .and(review.isDeleted.eq(false))
+ );
+
+ return PageableExecutionUtils.getPage(reviews, pageable, countQuery::fetchOne);
+ }
+
+ //TODO EXISTS 쿼리 고려
+ private BooleanExpression eqReviewReplyNull(ReviewFilterType filterType) {
+ if (filterType == ReviewFilterType.NOT_REPLYED) {
+ return review.reviewReply.isNull();
+ }
+ return null;
+ }
+
+ private static OrderSpecifier> getOrderSpecifier(
+ ReviewSortType sortType,
+ QReview review,
+ QReviewLike reviewLike
+ ) {
+ return switch (sortType) {
+ case ASC -> review.id.asc();
+ case DESC -> review.id.desc();
+ case LIKE -> reviewLike.count().coalesce(0L).desc();
+ };
+ }
+
+ @Override
+ public List queryReviewNoOffsetByClub(Club club, Pageable pageable, Long reviewId) {
+ return queryFactory.selectFrom(review)
+ .where(review.club.id.eq(club.getId()),
+ ltReviewId(reviewId))
+ .orderBy(review.id.desc())
+ .limit(pageable.getPageSize() + 1)
+ .fetch();
+ }
+
+ private BooleanExpression ltReviewId(Long reviewId) {
+ if (reviewId == null) {
+ return null;
+ }
+ return review.id.lt(reviewId);
+ }
+
+ @Override
+ public boolean existsByClubAndUser(Club club, User user) {
+ return queryFactory.selectOne()
+ .from(review)
+ .where(review.club.id.eq(club.getId())
+ .and(review.user.id.eq(user.getId()))
+ .and(review.isDeleted.eq(false))
+ )
+ .fetchFirst() != null;
+ }
+
+ @Override
+ public void softDeleteReviewByClubId(Long clubId) {
+ queryFactory.update(review)
+ .set(review.isDeleted, true)
+ .where(
+ review.club.id.eq(clubId), review.isDeleted.eq(false)
+ )
+ .execute();
+ }
+
+ public List queryNextReviewReport(Long reviewId, Long nowReviewReportId) {
+ return queryFactory.selectFrom(report)
+ .join(report.review, review).fetchJoin()
+ .where(report.review.id.eq(reviewId)
+ .and(report.isDeleted.eq(false))
+ .and(ltReviewReportId(nowReviewReportId)))
+ .limit(2)
+ .orderBy(report.id.desc())
+ .fetch();
+ }
+
+ private BooleanExpression ltReviewReportId(Long nowReviewReportId) {
+ if (nowReviewReportId == null) {
+ return null;
+ }
+ return report.id.lt(nowReviewReportId);
+ }
+}
diff --git a/src/main/java/com/clubber/ClubberServer/domain/review/repository/ReviewKeywordCustomRepository.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/review/repository/ReviewKeywordCustomRepository.java
similarity index 50%
rename from src/main/java/com/clubber/ClubberServer/domain/review/repository/ReviewKeywordCustomRepository.java
rename to Clubber-Domain/src/main/java/com/clubber/domain/domains/review/repository/ReviewKeywordCustomRepository.java
index 8a7f240c5..f2bd6018c 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/review/repository/ReviewKeywordCustomRepository.java
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/review/repository/ReviewKeywordCustomRepository.java
@@ -1,10 +1,10 @@
-package com.clubber.ClubberServer.domain.review.repository;
+package com.clubber.domain.domains.review.repository;
-import com.clubber.ClubberServer.domain.review.dto.KeywordCountStatDto;
+import com.clubber.domain.domains.review.vo.KeywordCountStatDto;
import java.util.List;
public interface ReviewKeywordCustomRepository {
- List queryReviewKeywordStatsByClubId(Long clubId);
+ List queryReviewKeywordStatsByClubId(Long clubId, int limit);
}
diff --git a/Clubber-Domain/src/main/java/com/clubber/domain/domains/review/repository/ReviewKeywordCustomRepositoryImpl.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/review/repository/ReviewKeywordCustomRepositoryImpl.java
new file mode 100644
index 000000000..f9a70defd
--- /dev/null
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/review/repository/ReviewKeywordCustomRepositoryImpl.java
@@ -0,0 +1,38 @@
+package com.clubber.domain.domains.review.repository;
+
+import com.clubber.domain.domains.review.domain.ReportStatus;
+import com.clubber.domain.domains.review.vo.KeywordCountStatDto;
+import com.querydsl.core.types.Projections;
+import com.querydsl.jpa.impl.JPAQueryFactory;
+import lombok.RequiredArgsConstructor;
+
+import java.util.List;
+
+import static com.clubber.domain.domains.review.domain.QReview.review;
+import static com.clubber.domain.domains.review.domain.QReviewKeyword.reviewKeyword;
+
+@RequiredArgsConstructor
+public class ReviewKeywordCustomRepositoryImpl implements ReviewKeywordCustomRepository {
+
+ private final JPAQueryFactory queryFactory;
+
+ @Override
+ public List queryReviewKeywordStatsByClubId(Long clubId, int limit) {
+ return queryFactory
+ .select(Projections.constructor(
+ KeywordCountStatDto.class,
+ reviewKeyword.keyword,
+ reviewKeyword.count().as("count"))
+ )
+ .from(reviewKeyword)
+ .where(review.club.id.eq(clubId)
+ .and(review.reportStatus.eq(ReportStatus.VISIBLE)
+ .and(review.isDeleted.eq(false)))
+ )
+ .join(reviewKeyword.review, review)
+ .groupBy(reviewKeyword.keyword)
+ .orderBy(reviewKeyword.count().desc())
+ .limit(limit)
+ .fetch();
+ }
+}
diff --git a/Clubber-Domain/src/main/java/com/clubber/domain/domains/review/repository/ReviewKeywordRepository.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/review/repository/ReviewKeywordRepository.java
new file mode 100644
index 000000000..714e56726
--- /dev/null
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/review/repository/ReviewKeywordRepository.java
@@ -0,0 +1,7 @@
+package com.clubber.domain.domains.review.repository;
+
+import com.clubber.domain.domains.review.domain.ReviewKeyword;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+public interface ReviewKeywordRepository extends JpaRepository, ReviewKeywordCustomRepository {
+}
diff --git a/Clubber-Domain/src/main/java/com/clubber/domain/domains/review/repository/ReviewLikeRepository.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/review/repository/ReviewLikeRepository.java
new file mode 100644
index 000000000..0c522a5fa
--- /dev/null
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/review/repository/ReviewLikeRepository.java
@@ -0,0 +1,13 @@
+package com.clubber.domain.domains.review.repository;
+
+import com.clubber.domain.domains.review.domain.Review;
+import com.clubber.domain.domains.review.domain.ReviewLike;
+import com.clubber.domain.domains.user.domain.User;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+import java.util.Optional;
+
+public interface ReviewLikeRepository extends JpaRepository {
+ boolean existsByReviewAndUserAndIsDeletedFalse(Review review, User user);
+ Optional findByReviewAndUserAndIsDeletedFalse(Review review, User user);
+}
diff --git a/Clubber-Domain/src/main/java/com/clubber/domain/domains/review/repository/ReviewReplyRepository.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/review/repository/ReviewReplyRepository.java
new file mode 100644
index 000000000..1b0d5e0e6
--- /dev/null
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/review/repository/ReviewReplyRepository.java
@@ -0,0 +1,7 @@
+package com.clubber.domain.domains.review.repository;
+
+import com.clubber.domain.domains.review.domain.ReviewReply;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+public interface ReviewReplyRepository extends JpaRepository {
+}
diff --git a/Clubber-Domain/src/main/java/com/clubber/domain/domains/review/repository/ReviewRepository.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/review/repository/ReviewRepository.java
new file mode 100644
index 000000000..46d432d02
--- /dev/null
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/review/repository/ReviewRepository.java
@@ -0,0 +1,15 @@
+package com.clubber.domain.domains.review.repository;
+
+import com.clubber.domain.domains.club.domain.Club;
+import com.clubber.domain.domains.review.domain.Review;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+import java.util.List;
+import java.util.Optional;
+
+public interface ReviewRepository extends JpaRepository, ReviewCustomRepository {
+
+ Optional findByIdAndIsDeletedFalse(Long id);
+
+ List findByClubOrderByIdDesc(Club club);
+}
diff --git a/Clubber-Domain/src/main/java/com/clubber/domain/domains/review/util/ReviewUtil.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/review/util/ReviewUtil.java
new file mode 100644
index 000000000..80d527022
--- /dev/null
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/review/util/ReviewUtil.java
@@ -0,0 +1,45 @@
+package com.clubber.domain.domains.review.util;
+
+import com.clubber.domain.domains.review.domain.Review;
+import com.clubber.domain.domains.review.domain.ReviewKeyword;
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import org.springframework.data.domain.Pageable;
+import org.springframework.util.StringUtils;
+
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public class ReviewUtil {
+
+ public static Set extractKeywords(Review review) {
+ return review.getReviewKeywords()
+ .stream()
+ .map(ReviewKeyword::getKeywordTitle)
+ .collect(Collectors.toCollection(LinkedHashSet::new));
+ }
+
+// public static Long getLastReviewId(List reviews, Pageable pageable) {
+// if (SliceUtil.hasNext(reviews, pageable)) {
+// return SliceUtil.getLastContent(reviews).getId();
+// }
+// return null;
+// }
+
+ public static String checkBlankContent(String content) {
+ if (hasContent(content)) {
+ return content;
+ }
+ return null;
+ }
+
+ public static boolean hasContent(String content) {
+ if (StringUtils.hasText(content)) {
+ return true;
+ }
+ return false;
+ }
+}
diff --git a/Clubber-Domain/src/main/java/com/clubber/domain/domains/review/vo/ClubReviewResponse.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/review/vo/ClubReviewResponse.java
new file mode 100644
index 000000000..b939e89d6
--- /dev/null
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/review/vo/ClubReviewResponse.java
@@ -0,0 +1,61 @@
+package com.clubber.domain.domains.review.vo;
+
+import com.clubber.domain.domains.review.domain.ReportStatus;
+import com.clubber.domain.domains.review.domain.Review;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AccessLevel;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Getter;
+
+import java.time.LocalDateTime;
+import java.util.Set;
+
+@Getter
+@Builder(access = AccessLevel.PRIVATE)
+@AllArgsConstructor(access = AccessLevel.PRIVATE)
+public class ClubReviewResponse {
+
+ @Schema(description = "리뷰 id", example = "1")
+ private final Long reviewId;
+
+ @Schema(description = "유저 id", example = "1")
+ private final Long userId;
+
+ @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy.MM.dd", timezone = "Asia/Seoul")
+ @Schema(description = "리뷰 작성 일자", example = "2024.01.01", type = "string")
+ private final LocalDateTime dateTime;
+
+ @Schema(description = "작성한 리뷰 키워드")
+ private final Set keywords;
+
+ @Schema(description = "해당 동아리 된 한줄평 중 승인된 한줄평의 내용", example = "활동이 재밌어요")
+ private final String content;
+
+ @Schema(description = "리뷰 좋아요 수")
+ private final Long likes;
+
+ @Schema(description = "리뷰 좋아요 여부")
+ private final boolean isLiked;
+
+ @Schema(description = "신고 상태")
+ private final ReportStatus reportStatus;
+
+ @Schema(description = "리뷰 답글")
+ private final ReviewReplyResponse reviewReply;
+
+ public static ClubReviewResponse of(Review review, Set keywords, Long likes, boolean isLiked, ReviewReplyResponse reviewReply) {
+ return ClubReviewResponse.builder()
+ .keywords(keywords)
+ .reviewId(review.getId())
+ .userId(review.getUser().getId())
+ .dateTime(review.getCreatedAt())
+ .content(review.getContentForPublic())
+ .likes(likes)
+ .isLiked(isLiked)
+ .reportStatus(review.getReportStatus())
+ .reviewReply(reviewReply)
+ .build();
+ }
+}
diff --git a/Clubber-Domain/src/main/java/com/clubber/domain/domains/review/vo/KeywordCountStatDto.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/review/vo/KeywordCountStatDto.java
new file mode 100644
index 000000000..828c0cc53
--- /dev/null
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/review/vo/KeywordCountStatDto.java
@@ -0,0 +1,6 @@
+package com.clubber.domain.domains.review.vo;
+
+import com.clubber.domain.domains.review.domain.Keyword;
+
+public record KeywordCountStatDto(Keyword keyword, Long count) {
+}
diff --git a/Clubber-Domain/src/main/java/com/clubber/domain/domains/review/vo/KeywordStatsVO.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/review/vo/KeywordStatsVO.java
new file mode 100644
index 000000000..f69114a80
--- /dev/null
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/review/vo/KeywordStatsVO.java
@@ -0,0 +1,50 @@
+package com.clubber.domain.domains.review.vo;
+
+import com.clubber.domain.domains.review.domain.Keyword;
+
+import java.util.Arrays;
+import java.util.EnumMap;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+import lombok.Getter;
+
+public class KeywordStatsVO {
+
+ //키워드 통계 반환 시 Key가 String이지만 추후 확장성을 위해 EnumMap으로 관리한다.
+ private final Map keywordMap = new EnumMap<>(Keyword.class);
+
+ @Getter
+ private final Map keywordMapAsStingKey;
+
+ public KeywordStatsVO(List keywordCountStatDtoList, int limit) {
+ initializeKeywordMap();
+ updateKeywordStat(keywordCountStatDtoList);
+ keywordMapAsStingKey = convertKeywordMapAsStringKey(limit);
+ }
+
+ private void initializeKeywordMap() {
+ Arrays.stream(Keyword.values())
+ .forEach(keyword -> keywordMap.put(keyword, 0L));
+ }
+
+ private void updateKeywordStat(List keywordCountStatDtoList) {
+ for (KeywordCountStatDto keywordCountStatDTO : keywordCountStatDtoList) {
+ keywordMap.put(keywordCountStatDTO.keyword(), keywordCountStatDTO.count());
+ }
+ }
+
+ private Map convertKeywordMapAsStringKey(int limit) {
+ return keywordMap.entrySet().stream()
+ .sorted(Map.Entry.comparingByValue().reversed())
+ .limit(limit)
+ .collect(Collectors.toMap(
+ entry -> entry.getKey().getTitle(),
+ Map.Entry::getValue,
+ (oldValue, newValue) -> oldValue,
+ LinkedHashMap::new)
+ );
+ }
+}
diff --git a/Clubber-Domain/src/main/java/com/clubber/domain/domains/review/vo/ReviewReplyResponse.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/review/vo/ReviewReplyResponse.java
new file mode 100644
index 000000000..b3b43b673
--- /dev/null
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/review/vo/ReviewReplyResponse.java
@@ -0,0 +1,27 @@
+package com.clubber.domain.domains.review.vo;
+
+import com.clubber.domain.domains.review.domain.ReviewReply;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+import java.time.LocalDateTime;
+import java.util.Optional;
+
+public record ReviewReplyResponse(
+ @Schema(description = "답글 id")
+ Long id,
+ @Schema(description = "리뷰 답글", example = "감사합니다.")
+ String content,
+ @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "MM-dd")
+ LocalDateTime updateAt
+) {
+ public static ReviewReplyResponse of(ReviewReply reviewReply) {
+ return Optional.ofNullable(reviewReply)
+ .map(r -> new ReviewReplyResponse(
+ r.getId(),
+ r.getContent(),
+ r.getCreatedAt()
+ ))
+ .orElse(null);
+ }
+}
diff --git a/src/main/java/com/clubber/ClubberServer/domain/user/domain/AccountRole.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/user/domain/AccountRole.java
similarity index 51%
rename from src/main/java/com/clubber/ClubberServer/domain/user/domain/AccountRole.java
rename to Clubber-Domain/src/main/java/com/clubber/domain/domains/user/domain/AccountRole.java
index 8a1e66e47..72c50c590 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/user/domain/AccountRole.java
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/user/domain/AccountRole.java
@@ -1,4 +1,4 @@
-package com.clubber.ClubberServer.domain.user.domain;
+package com.clubber.domain.domains.user.domain;
public enum AccountRole {
USER, ADMIN, SUPER_ADMIN
diff --git a/src/main/java/com/clubber/ClubberServer/domain/user/domain/AccountState.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/user/domain/AccountState.java
similarity index 78%
rename from src/main/java/com/clubber/ClubberServer/domain/user/domain/AccountState.java
rename to Clubber-Domain/src/main/java/com/clubber/domain/domains/user/domain/AccountState.java
index 2e6ca0f35..40d88859c 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/user/domain/AccountState.java
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/user/domain/AccountState.java
@@ -1,4 +1,4 @@
-package com.clubber.ClubberServer.domain.user.domain;
+package com.clubber.domain.domains.user.domain;
import lombok.AllArgsConstructor;
import lombok.Getter;
diff --git a/Clubber-Domain/src/main/java/com/clubber/domain/domains/user/domain/SnsType.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/user/domain/SnsType.java
new file mode 100644
index 000000000..311947fa2
--- /dev/null
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/user/domain/SnsType.java
@@ -0,0 +1,5 @@
+package com.clubber.domain.domains.user.domain;
+
+public enum SnsType {
+ KAKAO
+}
diff --git a/src/main/java/com/clubber/ClubberServer/domain/user/domain/User.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/user/domain/User.java
similarity index 86%
rename from src/main/java/com/clubber/ClubberServer/domain/user/domain/User.java
rename to Clubber-Domain/src/main/java/com/clubber/domain/domains/user/domain/User.java
index 7b21a79d4..db68bbffa 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/user/domain/User.java
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/user/domain/User.java
@@ -1,14 +1,14 @@
-package com.clubber.ClubberServer.domain.user.domain;
+package com.clubber.domain.domains.user.domain;
import java.util.ArrayList;
import java.util.List;
+import com.clubber.domain.domains.favorite.domain.Favorite;
import org.hibernate.annotations.JdbcTypeCode;
import org.hibernate.type.SqlTypes;
-import com.clubber.ClubberServer.domain.common.BaseEntity;
-import com.clubber.ClubberServer.domain.favorite.domain.Favorite;
-import com.clubber.ClubberServer.domain.user.exception.UserAlreadyDeletedException;
+import com.clubber.domain.common.BaseEntity;
+import com.clubber.domain.domains.user.exception.UserAlreadyDeletedException;
import jakarta.persistence.Entity;
import jakarta.persistence.EnumType;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/user/exception/InvalidTokenException.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/user/exception/InvalidTokenException.java
similarity index 64%
rename from src/main/java/com/clubber/ClubberServer/domain/user/exception/InvalidTokenException.java
rename to Clubber-Domain/src/main/java/com/clubber/domain/domains/user/exception/InvalidTokenException.java
index 65269f45a..cc7397cb8 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/user/exception/InvalidTokenException.java
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/user/exception/InvalidTokenException.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.domain.user.exception;
+package com.clubber.domain.domains.user.exception;
-import com.clubber.ClubberServer.global.exception.BaseException;
+import com.clubber.common.exception.BaseException;
public class InvalidTokenException extends BaseException {
diff --git a/src/main/java/com/clubber/ClubberServer/domain/user/exception/RefreshTokenExpiredException.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/user/exception/RefreshTokenExpiredException.java
similarity index 67%
rename from src/main/java/com/clubber/ClubberServer/domain/user/exception/RefreshTokenExpiredException.java
rename to Clubber-Domain/src/main/java/com/clubber/domain/domains/user/exception/RefreshTokenExpiredException.java
index 81799760b..2e441821e 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/user/exception/RefreshTokenExpiredException.java
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/user/exception/RefreshTokenExpiredException.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.domain.user.exception;
+package com.clubber.domain.domains.user.exception;
-import com.clubber.ClubberServer.global.exception.BaseException;
+import com.clubber.common.exception.BaseException;
public class RefreshTokenExpiredException extends BaseException {
diff --git a/src/main/java/com/clubber/ClubberServer/domain/user/exception/TokenExpiredException.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/user/exception/TokenExpiredException.java
similarity index 64%
rename from src/main/java/com/clubber/ClubberServer/domain/user/exception/TokenExpiredException.java
rename to Clubber-Domain/src/main/java/com/clubber/domain/domains/user/exception/TokenExpiredException.java
index da9da5833..c8f2c9b50 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/user/exception/TokenExpiredException.java
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/user/exception/TokenExpiredException.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.domain.user.exception;
+package com.clubber.domain.domains.user.exception;
-import com.clubber.ClubberServer.global.exception.BaseException;
+import com.clubber.common.exception.BaseException;
public class TokenExpiredException extends BaseException {
diff --git a/src/main/java/com/clubber/ClubberServer/domain/user/exception/UserAlreadyDeletedException.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/user/exception/UserAlreadyDeletedException.java
similarity index 66%
rename from src/main/java/com/clubber/ClubberServer/domain/user/exception/UserAlreadyDeletedException.java
rename to Clubber-Domain/src/main/java/com/clubber/domain/domains/user/exception/UserAlreadyDeletedException.java
index b07ac3a53..5e7729143 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/user/exception/UserAlreadyDeletedException.java
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/user/exception/UserAlreadyDeletedException.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.domain.user.exception;
+package com.clubber.domain.domains.user.exception;
-import com.clubber.ClubberServer.global.exception.BaseException;
+import com.clubber.common.exception.BaseException;
public class UserAlreadyDeletedException extends BaseException {
diff --git a/src/main/java/com/clubber/ClubberServer/domain/user/exception/UserErrorCode.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/user/exception/UserErrorCode.java
similarity index 86%
rename from src/main/java/com/clubber/ClubberServer/domain/user/exception/UserErrorCode.java
rename to Clubber-Domain/src/main/java/com/clubber/domain/domains/user/exception/UserErrorCode.java
index 47f16cdf3..f7229630d 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/user/exception/UserErrorCode.java
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/user/exception/UserErrorCode.java
@@ -1,7 +1,7 @@
-package com.clubber.ClubberServer.domain.user.exception;
+package com.clubber.domain.domains.user.exception;
-import com.clubber.ClubberServer.global.exception.BaseErrorCode;
-import com.clubber.ClubberServer.global.exception.ErrorReason;
+import com.clubber.common.exception.BaseErrorCode;
+import com.clubber.common.exception.ErrorReason;
import lombok.AllArgsConstructor;
import org.springframework.http.HttpStatus;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/user/exception/UserNotFoundException.java b/Clubber-Domain/src/main/java/com/clubber/domain/domains/user/exception/UserNotFoundException.java
similarity index 64%
rename from src/main/java/com/clubber/ClubberServer/domain/user/exception/UserNotFoundException.java
rename to Clubber-Domain/src/main/java/com/clubber/domain/domains/user/exception/UserNotFoundException.java
index 1cc8a093a..6ded90036 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/user/exception/UserNotFoundException.java
+++ b/Clubber-Domain/src/main/java/com/clubber/domain/domains/user/exception/UserNotFoundException.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.domain.user.exception;
+package com.clubber.domain.domains.user.exception;
-import com.clubber.ClubberServer.global.exception.BaseException;
+import com.clubber.common.exception.BaseException;
public class UserNotFoundException extends BaseException {
diff --git a/Clubber-External/Clubber-External.iml b/Clubber-External/Clubber-External.iml
new file mode 100644
index 000000000..c90834f2d
--- /dev/null
+++ b/Clubber-External/Clubber-External.iml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Dockerfile.dev b/Clubber-External/Dockerfile.dev
similarity index 82%
rename from Dockerfile.dev
rename to Clubber-External/Dockerfile.dev
index 0eb4ff19d..fac03beb6 100644
--- a/Dockerfile.dev
+++ b/Clubber-External/Dockerfile.dev
@@ -3,7 +3,7 @@ FROM openjdk:17-alpine
# curl 설치
RUN apk add --no-cache curl
-ARG JAR_FILE=build/libs/*.jar
+ARG JAR_FILE=build/libs/Clubber-External.jar
COPY ${JAR_FILE} app.jar
ARG PROFILE=dev
diff --git a/Dockerfile.nginx.dev b/Clubber-External/Dockerfile.nginx.dev
similarity index 100%
rename from Dockerfile.nginx.dev
rename to Clubber-External/Dockerfile.nginx.dev
diff --git a/Dockerfile.nginx.prod b/Clubber-External/Dockerfile.nginx.prod
similarity index 100%
rename from Dockerfile.nginx.prod
rename to Clubber-External/Dockerfile.nginx.prod
diff --git a/Dockerfile.prod b/Clubber-External/Dockerfile.prod
similarity index 78%
rename from Dockerfile.prod
rename to Clubber-External/Dockerfile.prod
index 7787ffc46..5b9fbe814 100644
--- a/Dockerfile.prod
+++ b/Clubber-External/Dockerfile.prod
@@ -1,6 +1,6 @@
FROM openjdk:17-alpine
-ARG JAR_FILE=build/libs/*.jar
+ARG JAR_FILE=build/libs/Clubber-External.jar
COPY ${JAR_FILE} app.jar
ARG PROFILE=prod
diff --git a/Clubber-External/build.gradle b/Clubber-External/build.gradle
new file mode 100644
index 000000000..c1400ede5
--- /dev/null
+++ b/Clubber-External/build.gradle
@@ -0,0 +1,20 @@
+dependencies{
+ implementation 'org.springframework.boot:spring-boot-starter-web'
+ implementation 'io.jsonwebtoken:jjwt-api:0.11.5'
+ implementation 'io.jsonwebtoken:jjwt-impl:0.11.5'
+ implementation 'io.jsonwebtoken:jjwt-jackson:0.11.5'
+ //TODO infra 모듈 분리
+ implementation 'org.springframework.cloud:spring-cloud-starter-openfeign:4.1.0'
+ implementation 'org.springframework.cloud:spring-cloud-starter-aws:2.2.6.RELEASE'
+ implementation 'org.springframework.boot:spring-boot-starter-mail'
+
+ //swagger
+ implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.0.2'
+
+ //spring-boot-actuator
+ implementation 'org.springframework.boot:spring-boot-starter-actuator'
+ runtimeOnly 'io.micrometer:micrometer-registry-prometheus'
+
+ implementation project(":Clubber-Domain")
+ implementation project(":Clubber-Common")
+}
\ No newline at end of file
diff --git a/src/main/java/com/clubber/ClubberServer/ClubberServerApplication.java b/Clubber-External/src/main/java/com/clubber/ClubberServerApplication.java
similarity index 74%
rename from src/main/java/com/clubber/ClubberServer/ClubberServerApplication.java
rename to Clubber-External/src/main/java/com/clubber/ClubberServerApplication.java
index 1c024bd45..a0f70e92f 100644
--- a/src/main/java/com/clubber/ClubberServer/ClubberServerApplication.java
+++ b/Clubber-External/src/main/java/com/clubber/ClubberServerApplication.java
@@ -1,10 +1,10 @@
-package com.clubber.ClubberServer;
+package com.clubber;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.ConfigurationPropertiesScan;
-@ConfigurationPropertiesScan(basePackages = "com.clubber.ClubberServer.global.properties")
+@ConfigurationPropertiesScan(basePackages = "com.clubber.global.properties")
@SpringBootApplication
public class ClubberServerApplication {
diff --git a/src/main/java/com/clubber/ClubberServer/domain/admin/controller/AdminController.java b/Clubber-External/src/main/java/com/clubber/domain/admin/controller/AdminController.java
similarity index 91%
rename from src/main/java/com/clubber/ClubberServer/domain/admin/controller/AdminController.java
rename to Clubber-External/src/main/java/com/clubber/domain/admin/controller/AdminController.java
index 1ef3aa314..39c2a5c1c 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/admin/controller/AdminController.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/admin/controller/AdminController.java
@@ -1,12 +1,12 @@
-package com.clubber.ClubberServer.domain.admin.controller;
-
-import com.clubber.ClubberServer.domain.admin.dto.*;
-import com.clubber.ClubberServer.domain.admin.service.AdminAccountService;
-import com.clubber.ClubberServer.domain.admin.service.AdminAuthService;
-import com.clubber.ClubberServer.domain.admin.service.AdminClubService;
-import com.clubber.ClubberServer.domain.auth.service.helper.CookieHelper;
-import com.clubber.ClubberServer.domain.club.dto.GetClubResponse;
-import com.clubber.ClubberServer.global.config.swagger.DisableSwaggerSecurity;
+package com.clubber.domain.admin.controller;
+
+import com.clubber.domain.admin.dto.*;
+import com.clubber.domain.admin.service.AdminAccountService;
+import com.clubber.domain.admin.service.AdminAuthService;
+import com.clubber.domain.admin.service.AdminClubService;
+import com.clubber.domain.auth.service.helper.CookieHelper;
+import com.clubber.domain.club.dto.GetClubResponse;
+import com.clubber.global.config.swagger.DisableSwaggerSecurity;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.Valid;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/admin/controller/AdminEmailAuthController.java b/Clubber-External/src/main/java/com/clubber/domain/admin/controller/AdminEmailAuthController.java
similarity index 92%
rename from src/main/java/com/clubber/ClubberServer/domain/admin/controller/AdminEmailAuthController.java
rename to Clubber-External/src/main/java/com/clubber/domain/admin/controller/AdminEmailAuthController.java
index b40233dae..f3e59fbf0 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/admin/controller/AdminEmailAuthController.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/admin/controller/AdminEmailAuthController.java
@@ -1,9 +1,9 @@
-package com.clubber.ClubberServer.domain.admin.controller;
+package com.clubber.domain.admin.controller;
-import com.clubber.ClubberServer.domain.admin.dto.*;
-import com.clubber.ClubberServer.domain.admin.facade.AdminEmailAuthFacade;
-import com.clubber.ClubberServer.domain.admin.service.AdminEmailAuthService;
-import com.clubber.ClubberServer.global.config.swagger.DisableSwaggerSecurity;
+import com.clubber.domain.admin.dto.*;
+import com.clubber.domain.admin.facade.AdminEmailAuthFacade;
+import com.clubber.domain.admin.service.AdminEmailAuthService;
+import com.clubber.global.config.swagger.DisableSwaggerSecurity;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.Valid;
diff --git a/Clubber-External/src/main/java/com/clubber/domain/admin/controller/AdminReviewController.java b/Clubber-External/src/main/java/com/clubber/domain/admin/controller/AdminReviewController.java
new file mode 100644
index 000000000..c9f7ac82e
--- /dev/null
+++ b/Clubber-External/src/main/java/com/clubber/domain/admin/controller/AdminReviewController.java
@@ -0,0 +1,51 @@
+package com.clubber.domain.admin.controller;
+
+import com.clubber.domain.admin.dto.GetAdminsReviewsResponse;
+import com.clubber.domain.domains.review.domain.ReviewFilterType;
+import com.clubber.domain.review.dto.CreateReviewApplyRequest;
+import com.clubber.domain.review.dto.GetClubReviewAgreedStatusResponse;
+import com.clubber.domain.review.service.AdminReviewService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.RequiredArgsConstructor;
+import org.springframework.data.domain.Pageable;
+import org.springframework.web.bind.annotation.*;
+
+@RestController
+@RequiredArgsConstructor
+@RequestMapping("/api/v1/admins/reviews")
+@Tag(name = "[동아리 계정 리뷰 관련 API]", description = "🔐동아리 계정")
+public class AdminReviewController {
+
+ private final AdminReviewService adminReviewService;
+
+ @Operation(summary = "동아리 계정 마이페이지 리뷰 목록")
+ @GetMapping
+ public GetAdminsReviewsResponse getAdminsReviews(Pageable pageable, @RequestParam(required = false)ReviewFilterType filterType) {
+ return adminReviewService.getAdminsReviews(pageable, filterType);
+ }
+
+ @Operation(summary = "리뷰 답글 달기")
+ @PostMapping("/reply/{id}")
+ public void createReplyReview(@PathVariable Long id, @RequestBody CreateReviewApplyRequest request) {
+ adminReviewService.createReviewApply(id, request);
+ }
+
+ @Operation(summary = "리뷰 활성화 상태 조회")
+ @GetMapping("/enabled")
+ public GetClubReviewAgreedStatusResponse getReviewEnabledStatus() {
+ return adminReviewService.getReviewEnabledStatus();
+ }
+
+ @Operation(summary = "동아리 리뷰 기능 거절 (리뷰 제공 OFF)")
+ @PatchMapping("/disable")
+ public void disableClubReview() {
+ adminReviewService.disableClubReview();
+ }
+
+ @Operation(summary = "동아리 리뷰 기능 승인 (리뷰 제공 ON)")
+ @PatchMapping("/enable")
+ public void enableClubReview() {
+ adminReviewService.enableClubReview();
+ }
+}
diff --git a/Clubber-External/src/main/java/com/clubber/domain/admin/dto/AdminReviewResponse.java b/Clubber-External/src/main/java/com/clubber/domain/admin/dto/AdminReviewResponse.java
new file mode 100644
index 000000000..dd62cb8b7
--- /dev/null
+++ b/Clubber-External/src/main/java/com/clubber/domain/admin/dto/AdminReviewResponse.java
@@ -0,0 +1,45 @@
+package com.clubber.domain.admin.dto;
+
+import com.clubber.domain.domains.review.domain.Review;
+import com.clubber.domain.domains.review.vo.ReviewReplyResponse;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AccessLevel;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Getter;
+
+import java.time.LocalDateTime;
+import java.util.Set;
+
+@Getter
+@Builder(access = AccessLevel.PRIVATE)
+@AllArgsConstructor(access = AccessLevel.PRIVATE)
+public class AdminReviewResponse {
+
+ @Schema(description = "리뷰 id", example = "1")
+ private final Long reviewId;
+
+ @Schema(description = "작성한 리뷰 키워드",
+ example = "[\"CULTURE\", \"FEE\", \"ACTIVITY\", \"CAREER\", \"MANAGE\"]")
+ private final Set keywords;
+
+ @Schema(description = "리뷰 한줄평", example = "분위기가 좋아요")
+ private final String content;
+
+ @Schema(description = "리뷰 작성 일자", example = "2024.01.01", type = "string")
+ @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy.MM.dd", timezone = "Asia/Seoul")
+ private final LocalDateTime dateTime;
+
+ private ReviewReplyResponse reviewReply;
+
+ public static AdminReviewResponse of(Review review, Set keywords, ReviewReplyResponse reviewReply) {
+ return AdminReviewResponse.builder()
+ .reviewId(review.getId())
+ .keywords(keywords)
+ .content(review.getContent())
+ .dateTime(review.getCreatedAt())
+ .reviewReply(reviewReply)
+ .build();
+ }
+}
diff --git a/src/main/java/com/clubber/ClubberServer/domain/admin/dto/CreateAdminAuthResponse.java b/Clubber-External/src/main/java/com/clubber/domain/admin/dto/CreateAdminAuthResponse.java
similarity index 65%
rename from src/main/java/com/clubber/ClubberServer/domain/admin/dto/CreateAdminAuthResponse.java
rename to Clubber-External/src/main/java/com/clubber/domain/admin/dto/CreateAdminAuthResponse.java
index af2b901d6..a2d924dca 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/admin/dto/CreateAdminAuthResponse.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/admin/dto/CreateAdminAuthResponse.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.domain.admin.dto;
+package com.clubber.domain.admin.dto;
-import com.clubber.ClubberServer.domain.admin.domain.AdminSignupAuth;
+import com.clubber.domain.domains.admin.domain.AdminSignupAuth;
public record CreateAdminAuthResponse(
String email
diff --git a/src/main/java/com/clubber/ClubberServer/domain/admin/dto/CreateAdminPasswordFindRequest.java b/Clubber-External/src/main/java/com/clubber/domain/admin/dto/CreateAdminPasswordFindRequest.java
similarity index 88%
rename from src/main/java/com/clubber/ClubberServer/domain/admin/dto/CreateAdminPasswordFindRequest.java
rename to Clubber-External/src/main/java/com/clubber/domain/admin/dto/CreateAdminPasswordFindRequest.java
index b4c4877b0..0d065ac33 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/admin/dto/CreateAdminPasswordFindRequest.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/admin/dto/CreateAdminPasswordFindRequest.java
@@ -1,4 +1,4 @@
-package com.clubber.ClubberServer.domain.admin.dto;
+package com.clubber.domain.admin.dto;
import jakarta.validation.constraints.NotBlank;
import lombok.AllArgsConstructor;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/admin/dto/CreateAdminSignUpRequest.java b/Clubber-External/src/main/java/com/clubber/domain/admin/dto/CreateAdminSignUpRequest.java
similarity index 83%
rename from src/main/java/com/clubber/ClubberServer/domain/admin/dto/CreateAdminSignUpRequest.java
rename to Clubber-External/src/main/java/com/clubber/domain/admin/dto/CreateAdminSignUpRequest.java
index 08a1a57ff..7957656e6 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/admin/dto/CreateAdminSignUpRequest.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/admin/dto/CreateAdminSignUpRequest.java
@@ -1,11 +1,11 @@
-package com.clubber.ClubberServer.domain.admin.dto;
+package com.clubber.domain.admin.dto;
-import com.clubber.ClubberServer.domain.admin.domain.Contact;
-import com.clubber.ClubberServer.domain.admin.domain.PendingAdminInfo;
-import com.clubber.ClubberServer.domain.club.domain.ClubType;
-import com.clubber.ClubberServer.domain.club.domain.College;
-import com.clubber.ClubberServer.domain.club.domain.Department;
-import com.clubber.ClubberServer.global.validator.enums.Enum;
+import com.clubber.domain.domains.admin.domain.Contact;
+import com.clubber.domain.domains.admin.domain.PendingAdminInfo;
+import com.clubber.domain.domains.club.domain.ClubType;
+import com.clubber.domain.domains.club.domain.College;
+import com.clubber.domain.domains.club.domain.Department;
+import com.clubber.global.validator.enums.Enum;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.NotBlank;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/admin/dto/CreateAdminSignUpResponse.java b/Clubber-External/src/main/java/com/clubber/domain/admin/dto/CreateAdminSignUpResponse.java
similarity index 73%
rename from src/main/java/com/clubber/ClubberServer/domain/admin/dto/CreateAdminSignUpResponse.java
rename to Clubber-External/src/main/java/com/clubber/domain/admin/dto/CreateAdminSignUpResponse.java
index f7291bed4..f68617476 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/admin/dto/CreateAdminSignUpResponse.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/admin/dto/CreateAdminSignUpResponse.java
@@ -1,7 +1,7 @@
-package com.clubber.ClubberServer.domain.admin.dto;
+package com.clubber.domain.admin.dto;
-import com.clubber.ClubberServer.domain.admin.domain.Contact;
-import com.clubber.ClubberServer.domain.admin.domain.PendingAdminInfo;
+import com.clubber.domain.domains.admin.domain.Contact;
+import com.clubber.domain.domains.admin.domain.PendingAdminInfo;
import lombok.AccessLevel;
import lombok.Builder;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/admin/dto/CreateAdminSignupAuthRequest.java b/Clubber-External/src/main/java/com/clubber/domain/admin/dto/CreateAdminSignupAuthRequest.java
similarity index 90%
rename from src/main/java/com/clubber/ClubberServer/domain/admin/dto/CreateAdminSignupAuthRequest.java
rename to Clubber-External/src/main/java/com/clubber/domain/admin/dto/CreateAdminSignupAuthRequest.java
index aab8c6537..9ba330bec 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/admin/dto/CreateAdminSignupAuthRequest.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/admin/dto/CreateAdminSignupAuthRequest.java
@@ -1,4 +1,4 @@
-package com.clubber.ClubberServer.domain.admin.dto;
+package com.clubber.domain.admin.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/admin/dto/CreateAdminSignupAuthVerifyRequest.java b/Clubber-External/src/main/java/com/clubber/domain/admin/dto/CreateAdminSignupAuthVerifyRequest.java
similarity index 93%
rename from src/main/java/com/clubber/ClubberServer/domain/admin/dto/CreateAdminSignupAuthVerifyRequest.java
rename to Clubber-External/src/main/java/com/clubber/domain/admin/dto/CreateAdminSignupAuthVerifyRequest.java
index eac70fadc..e660780d4 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/admin/dto/CreateAdminSignupAuthVerifyRequest.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/admin/dto/CreateAdminSignupAuthVerifyRequest.java
@@ -1,4 +1,4 @@
-package com.clubber.ClubberServer.domain.admin.dto;
+package com.clubber.domain.admin.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/admin/dto/CreateAdminUpdateEmailAuthRequest.java b/Clubber-External/src/main/java/com/clubber/domain/admin/dto/CreateAdminUpdateEmailAuthRequest.java
similarity index 89%
rename from src/main/java/com/clubber/ClubberServer/domain/admin/dto/CreateAdminUpdateEmailAuthRequest.java
rename to Clubber-External/src/main/java/com/clubber/domain/admin/dto/CreateAdminUpdateEmailAuthRequest.java
index e445e3281..36220c6a7 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/admin/dto/CreateAdminUpdateEmailAuthRequest.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/admin/dto/CreateAdminUpdateEmailAuthRequest.java
@@ -1,4 +1,4 @@
-package com.clubber.ClubberServer.domain.admin.dto;
+package com.clubber.domain.admin.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/admin/dto/CreateAdminUsernameFindAuthRequest.java b/Clubber-External/src/main/java/com/clubber/domain/admin/dto/CreateAdminUsernameFindAuthRequest.java
similarity index 89%
rename from src/main/java/com/clubber/ClubberServer/domain/admin/dto/CreateAdminUsernameFindAuthRequest.java
rename to Clubber-External/src/main/java/com/clubber/domain/admin/dto/CreateAdminUsernameFindAuthRequest.java
index c95a4e3e1..916a26055 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/admin/dto/CreateAdminUsernameFindAuthRequest.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/admin/dto/CreateAdminUsernameFindAuthRequest.java
@@ -1,4 +1,4 @@
-package com.clubber.ClubberServer.domain.admin.dto;
+package com.clubber.domain.admin.dto;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/admin/dto/CreateAdminsLoginRequest.java b/Clubber-External/src/main/java/com/clubber/domain/admin/dto/CreateAdminsLoginRequest.java
similarity index 92%
rename from src/main/java/com/clubber/ClubberServer/domain/admin/dto/CreateAdminsLoginRequest.java
rename to Clubber-External/src/main/java/com/clubber/domain/admin/dto/CreateAdminsLoginRequest.java
index 0ad884893..a0976e899 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/admin/dto/CreateAdminsLoginRequest.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/admin/dto/CreateAdminsLoginRequest.java
@@ -1,4 +1,4 @@
-package com.clubber.ClubberServer.domain.admin.dto;
+package com.clubber.domain.admin.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/admin/dto/CreateAdminsLoginResponse.java b/Clubber-External/src/main/java/com/clubber/domain/admin/dto/CreateAdminsLoginResponse.java
similarity index 89%
rename from src/main/java/com/clubber/ClubberServer/domain/admin/dto/CreateAdminsLoginResponse.java
rename to Clubber-External/src/main/java/com/clubber/domain/admin/dto/CreateAdminsLoginResponse.java
index 7b02bde66..9cb297d70 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/admin/dto/CreateAdminsLoginResponse.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/admin/dto/CreateAdminsLoginResponse.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.domain.admin.dto;
+package com.clubber.domain.admin.dto;
-import com.clubber.ClubberServer.domain.admin.domain.Admin;
+import com.clubber.domain.domains.admin.domain.Admin;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/admin/dto/GetAdminPendingReviewsSliceResponse.java b/Clubber-External/src/main/java/com/clubber/domain/admin/dto/GetAdminPendingReviewsSliceResponse.java
similarity index 83%
rename from src/main/java/com/clubber/ClubberServer/domain/admin/dto/GetAdminPendingReviewsSliceResponse.java
rename to Clubber-External/src/main/java/com/clubber/domain/admin/dto/GetAdminPendingReviewsSliceResponse.java
index 92f9316fd..608d32ac6 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/admin/dto/GetAdminPendingReviewsSliceResponse.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/admin/dto/GetAdminPendingReviewsSliceResponse.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.domain.admin.dto;
+package com.clubber.domain.admin.dto;
-import com.clubber.ClubberServer.global.common.slice.SliceResponse;
+import com.clubber.global.common.slice.SliceResponse;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Builder;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/admin/dto/GetAdminUsernameCheckDuplicateResponse.java b/Clubber-External/src/main/java/com/clubber/domain/admin/dto/GetAdminUsernameCheckDuplicateResponse.java
similarity index 68%
rename from src/main/java/com/clubber/ClubberServer/domain/admin/dto/GetAdminUsernameCheckDuplicateResponse.java
rename to Clubber-External/src/main/java/com/clubber/domain/admin/dto/GetAdminUsernameCheckDuplicateResponse.java
index d89617f6c..86601f9c7 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/admin/dto/GetAdminUsernameCheckDuplicateResponse.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/admin/dto/GetAdminUsernameCheckDuplicateResponse.java
@@ -1,4 +1,4 @@
-package com.clubber.ClubberServer.domain.admin.dto;
+package com.clubber.domain.admin.dto;
public record GetAdminUsernameCheckDuplicateResponse(
String username,
diff --git a/src/main/java/com/clubber/ClubberServer/domain/admin/dto/GetAdminUsernameFindRequest.java b/Clubber-External/src/main/java/com/clubber/domain/admin/dto/GetAdminUsernameFindRequest.java
similarity index 91%
rename from src/main/java/com/clubber/ClubberServer/domain/admin/dto/GetAdminUsernameFindRequest.java
rename to Clubber-External/src/main/java/com/clubber/domain/admin/dto/GetAdminUsernameFindRequest.java
index afa869c5c..d43045487 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/admin/dto/GetAdminUsernameFindRequest.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/admin/dto/GetAdminUsernameFindRequest.java
@@ -1,4 +1,4 @@
-package com.clubber.ClubberServer.domain.admin.dto;
+package com.clubber.domain.admin.dto;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/admin/dto/GetAdminUsernameFindResponse.java b/Clubber-External/src/main/java/com/clubber/domain/admin/dto/GetAdminUsernameFindResponse.java
similarity index 55%
rename from src/main/java/com/clubber/ClubberServer/domain/admin/dto/GetAdminUsernameFindResponse.java
rename to Clubber-External/src/main/java/com/clubber/domain/admin/dto/GetAdminUsernameFindResponse.java
index ba9016a61..e78a77e48 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/admin/dto/GetAdminUsernameFindResponse.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/admin/dto/GetAdminUsernameFindResponse.java
@@ -1,4 +1,4 @@
-package com.clubber.ClubberServer.domain.admin.dto;
+package com.clubber.domain.admin.dto;
public record GetAdminUsernameFindResponse(String username) {
}
diff --git a/src/main/java/com/clubber/ClubberServer/domain/admin/dto/GetAdminsPendingReviews.java b/Clubber-External/src/main/java/com/clubber/domain/admin/dto/GetAdminsPendingReviews.java
similarity index 86%
rename from src/main/java/com/clubber/ClubberServer/domain/admin/dto/GetAdminsPendingReviews.java
rename to Clubber-External/src/main/java/com/clubber/domain/admin/dto/GetAdminsPendingReviews.java
index d2a4ce3ad..87cc0a8b9 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/admin/dto/GetAdminsPendingReviews.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/admin/dto/GetAdminsPendingReviews.java
@@ -1,11 +1,10 @@
-package com.clubber.ClubberServer.domain.admin.dto;
+package com.clubber.domain.admin.dto;
-import com.clubber.ClubberServer.domain.review.domain.Review;
+import com.clubber.domain.domains.review.domain.Review;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import java.time.LocalDateTime;
-import java.util.List;
-import java.util.stream.Collectors;
+
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Builder;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/admin/dto/GetAdminsProfileResponse.java b/Clubber-External/src/main/java/com/clubber/domain/admin/dto/GetAdminsProfileResponse.java
similarity index 73%
rename from src/main/java/com/clubber/ClubberServer/domain/admin/dto/GetAdminsProfileResponse.java
rename to Clubber-External/src/main/java/com/clubber/domain/admin/dto/GetAdminsProfileResponse.java
index 5ac619f78..d5c4466a9 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/admin/dto/GetAdminsProfileResponse.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/admin/dto/GetAdminsProfileResponse.java
@@ -1,7 +1,7 @@
-package com.clubber.ClubberServer.domain.admin.dto;
+package com.clubber.domain.admin.dto;
-import com.clubber.ClubberServer.domain.admin.domain.Admin;
-import com.clubber.ClubberServer.domain.admin.domain.Contact;
+import com.clubber.domain.domains.admin.domain.Admin;
+import com.clubber.domain.domains.admin.domain.Contact;
import lombok.AccessLevel;
import lombok.Builder;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/admin/dto/GetAdminsReviewsResponse.java b/Clubber-External/src/main/java/com/clubber/domain/admin/dto/GetAdminsReviewsResponse.java
similarity index 80%
rename from src/main/java/com/clubber/ClubberServer/domain/admin/dto/GetAdminsReviewsResponse.java
rename to Clubber-External/src/main/java/com/clubber/domain/admin/dto/GetAdminsReviewsResponse.java
index 8a176a41a..6d8cb6995 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/admin/dto/GetAdminsReviewsResponse.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/admin/dto/GetAdminsReviewsResponse.java
@@ -1,8 +1,8 @@
-package com.clubber.ClubberServer.domain.admin.dto;
+package com.clubber.domain.admin.dto;
-import com.clubber.ClubberServer.domain.admin.domain.Admin;
-import com.clubber.ClubberServer.domain.club.domain.Club;
-import com.clubber.ClubberServer.global.common.page.PageResponse;
+import com.clubber.domain.domains.admin.domain.Admin;
+import com.clubber.domain.domains.club.domain.Club;
+import com.clubber.global.common.page.PageResponse;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/admin/dto/UpdateAdminAuthResponse.java b/Clubber-External/src/main/java/com/clubber/domain/admin/dto/UpdateAdminAuthResponse.java
similarity index 53%
rename from src/main/java/com/clubber/ClubberServer/domain/admin/dto/UpdateAdminAuthResponse.java
rename to Clubber-External/src/main/java/com/clubber/domain/admin/dto/UpdateAdminAuthResponse.java
index c746cd39c..5a5275928 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/admin/dto/UpdateAdminAuthResponse.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/admin/dto/UpdateAdminAuthResponse.java
@@ -1,4 +1,4 @@
-package com.clubber.ClubberServer.domain.admin.dto;
+package com.clubber.domain.admin.dto;
public record UpdateAdminAuthResponse(
String email
diff --git a/src/main/java/com/clubber/ClubberServer/domain/admin/dto/UpdateAdminContactRequest.java b/Clubber-External/src/main/java/com/clubber/domain/admin/dto/UpdateAdminContactRequest.java
similarity index 66%
rename from src/main/java/com/clubber/ClubberServer/domain/admin/dto/UpdateAdminContactRequest.java
rename to Clubber-External/src/main/java/com/clubber/domain/admin/dto/UpdateAdminContactRequest.java
index 350aa5b3e..0e68f3d08 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/admin/dto/UpdateAdminContactRequest.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/admin/dto/UpdateAdminContactRequest.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.domain.admin.dto;
+package com.clubber.domain.admin.dto;
-import com.clubber.ClubberServer.domain.admin.domain.Contact;
+import com.clubber.domain.domains.admin.domain.Contact;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
diff --git a/Clubber-External/src/main/java/com/clubber/domain/admin/dto/UpdateAdminContactResponse.java b/Clubber-External/src/main/java/com/clubber/domain/admin/dto/UpdateAdminContactResponse.java
new file mode 100644
index 000000000..b9306e307
--- /dev/null
+++ b/Clubber-External/src/main/java/com/clubber/domain/admin/dto/UpdateAdminContactResponse.java
@@ -0,0 +1,9 @@
+package com.clubber.domain.admin.dto;
+
+import com.clubber.domain.domains.admin.domain.Contact;
+
+public record UpdateAdminContactResponse(
+ Long adminId,
+ Contact contact
+) {
+}
diff --git a/src/main/java/com/clubber/ClubberServer/domain/admin/dto/UpdateAdminEmailRequest.java b/Clubber-External/src/main/java/com/clubber/domain/admin/dto/UpdateAdminEmailRequest.java
similarity index 92%
rename from src/main/java/com/clubber/ClubberServer/domain/admin/dto/UpdateAdminEmailRequest.java
rename to Clubber-External/src/main/java/com/clubber/domain/admin/dto/UpdateAdminEmailRequest.java
index 93cf8ffe3..0127f8696 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/admin/dto/UpdateAdminEmailRequest.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/admin/dto/UpdateAdminEmailRequest.java
@@ -1,4 +1,4 @@
-package com.clubber.ClubberServer.domain.admin.dto;
+package com.clubber.domain.admin.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/admin/dto/UpdateAdminEmailResponse.java b/Clubber-External/src/main/java/com/clubber/domain/admin/dto/UpdateAdminEmailResponse.java
similarity index 63%
rename from src/main/java/com/clubber/ClubberServer/domain/admin/dto/UpdateAdminEmailResponse.java
rename to Clubber-External/src/main/java/com/clubber/domain/admin/dto/UpdateAdminEmailResponse.java
index 46da1ff98..546eca2ae 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/admin/dto/UpdateAdminEmailResponse.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/admin/dto/UpdateAdminEmailResponse.java
@@ -1,4 +1,4 @@
-package com.clubber.ClubberServer.domain.admin.dto;
+package com.clubber.domain.admin.dto;
public record UpdateAdminEmailResponse(
Long adminId,
diff --git a/src/main/java/com/clubber/ClubberServer/domain/admin/dto/UpdateAdminPasswordFindAuthVerifyRequest.java b/Clubber-External/src/main/java/com/clubber/domain/admin/dto/UpdateAdminPasswordFindAuthVerifyRequest.java
similarity index 92%
rename from src/main/java/com/clubber/ClubberServer/domain/admin/dto/UpdateAdminPasswordFindAuthVerifyRequest.java
rename to Clubber-External/src/main/java/com/clubber/domain/admin/dto/UpdateAdminPasswordFindAuthVerifyRequest.java
index 524594ef9..a742ca246 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/admin/dto/UpdateAdminPasswordFindAuthVerifyRequest.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/admin/dto/UpdateAdminPasswordFindAuthVerifyRequest.java
@@ -1,4 +1,4 @@
-package com.clubber.ClubberServer.domain.admin.dto;
+package com.clubber.domain.admin.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/admin/dto/UpdateAdminResetPasswordRequest.java b/Clubber-External/src/main/java/com/clubber/domain/admin/dto/UpdateAdminResetPasswordRequest.java
similarity index 84%
rename from src/main/java/com/clubber/ClubberServer/domain/admin/dto/UpdateAdminResetPasswordRequest.java
rename to Clubber-External/src/main/java/com/clubber/domain/admin/dto/UpdateAdminResetPasswordRequest.java
index 595c02d3a..26d2b3f87 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/admin/dto/UpdateAdminResetPasswordRequest.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/admin/dto/UpdateAdminResetPasswordRequest.java
@@ -1,4 +1,4 @@
-package com.clubber.ClubberServer.domain.admin.dto;
+package com.clubber.domain.admin.dto;
import lombok.AllArgsConstructor;
import lombok.Getter;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/admin/dto/UpdateAdminUpdateEmailAuthVerifyRequest.java b/Clubber-External/src/main/java/com/clubber/domain/admin/dto/UpdateAdminUpdateEmailAuthVerifyRequest.java
similarity index 92%
rename from src/main/java/com/clubber/ClubberServer/domain/admin/dto/UpdateAdminUpdateEmailAuthVerifyRequest.java
rename to Clubber-External/src/main/java/com/clubber/domain/admin/dto/UpdateAdminUpdateEmailAuthVerifyRequest.java
index 48332cfc0..777f97151 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/admin/dto/UpdateAdminUpdateEmailAuthVerifyRequest.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/admin/dto/UpdateAdminUpdateEmailAuthVerifyRequest.java
@@ -1,4 +1,4 @@
-package com.clubber.ClubberServer.domain.admin.dto;
+package com.clubber.domain.admin.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/admin/dto/UpdateAdminUsernameFindAuthVerifyRequest.java b/Clubber-External/src/main/java/com/clubber/domain/admin/dto/UpdateAdminUsernameFindAuthVerifyRequest.java
similarity index 91%
rename from src/main/java/com/clubber/ClubberServer/domain/admin/dto/UpdateAdminUsernameFindAuthVerifyRequest.java
rename to Clubber-External/src/main/java/com/clubber/domain/admin/dto/UpdateAdminUsernameFindAuthVerifyRequest.java
index fbd5661ce..bc557b1af 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/admin/dto/UpdateAdminUsernameFindAuthVerifyRequest.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/admin/dto/UpdateAdminUsernameFindAuthVerifyRequest.java
@@ -1,4 +1,4 @@
-package com.clubber.ClubberServer.domain.admin.dto;
+package com.clubber.domain.admin.dto;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/admin/dto/UpdateAdminsPasswordRequest.java b/Clubber-External/src/main/java/com/clubber/domain/admin/dto/UpdateAdminsPasswordRequest.java
similarity index 91%
rename from src/main/java/com/clubber/ClubberServer/domain/admin/dto/UpdateAdminsPasswordRequest.java
rename to Clubber-External/src/main/java/com/clubber/domain/admin/dto/UpdateAdminsPasswordRequest.java
index 2245b8ef4..a74ee35c9 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/admin/dto/UpdateAdminsPasswordRequest.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/admin/dto/UpdateAdminsPasswordRequest.java
@@ -1,4 +1,4 @@
-package com.clubber.ClubberServer.domain.admin.dto;
+package com.clubber.domain.admin.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/admin/dto/UpdateAdminsPasswordResponse.java b/Clubber-External/src/main/java/com/clubber/domain/admin/dto/UpdateAdminsPasswordResponse.java
similarity index 86%
rename from src/main/java/com/clubber/ClubberServer/domain/admin/dto/UpdateAdminsPasswordResponse.java
rename to Clubber-External/src/main/java/com/clubber/domain/admin/dto/UpdateAdminsPasswordResponse.java
index b2195dfac..03b1fcb28 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/admin/dto/UpdateAdminsPasswordResponse.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/admin/dto/UpdateAdminsPasswordResponse.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.domain.admin.dto;
+package com.clubber.domain.admin.dto;
-import com.clubber.ClubberServer.domain.admin.domain.Admin;
+import com.clubber.domain.domains.admin.domain.Admin;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/admin/dto/UpdateAdminsReviewVerifyResponse.java b/Clubber-External/src/main/java/com/clubber/domain/admin/dto/UpdateAdminsReviewVerifyResponse.java
similarity index 72%
rename from src/main/java/com/clubber/ClubberServer/domain/admin/dto/UpdateAdminsReviewVerifyResponse.java
rename to Clubber-External/src/main/java/com/clubber/domain/admin/dto/UpdateAdminsReviewVerifyResponse.java
index 5963ae2a9..4cfb6856a 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/admin/dto/UpdateAdminsReviewVerifyResponse.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/admin/dto/UpdateAdminsReviewVerifyResponse.java
@@ -1,7 +1,7 @@
-package com.clubber.ClubberServer.domain.admin.dto;
+package com.clubber.domain.admin.dto;
-import com.clubber.ClubberServer.domain.admin.domain.Admin;
-import com.clubber.ClubberServer.domain.review.domain.Review;
+import com.clubber.domain.domains.admin.domain.Admin;
+import com.clubber.domain.domains.review.domain.Review;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Builder;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/admin/dto/UpdateClubPageRequest.java b/Clubber-External/src/main/java/com/clubber/domain/admin/dto/UpdateClubPageRequest.java
similarity index 92%
rename from src/main/java/com/clubber/ClubberServer/domain/admin/dto/UpdateClubPageRequest.java
rename to Clubber-External/src/main/java/com/clubber/domain/admin/dto/UpdateClubPageRequest.java
index d5d8077f5..cb6937fa9 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/admin/dto/UpdateClubPageRequest.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/admin/dto/UpdateClubPageRequest.java
@@ -1,4 +1,4 @@
-package com.clubber.ClubberServer.domain.admin.dto;
+package com.clubber.domain.admin.dto;
import jakarta.validation.constraints.Size;
import lombok.AccessLevel;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/admin/dto/UpdateClubPageResponse.java b/Clubber-External/src/main/java/com/clubber/domain/admin/dto/UpdateClubPageResponse.java
similarity index 81%
rename from src/main/java/com/clubber/ClubberServer/domain/admin/dto/UpdateClubPageResponse.java
rename to Clubber-External/src/main/java/com/clubber/domain/admin/dto/UpdateClubPageResponse.java
index 86e787c6c..e5dc7971a 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/admin/dto/UpdateClubPageResponse.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/admin/dto/UpdateClubPageResponse.java
@@ -1,8 +1,8 @@
-package com.clubber.ClubberServer.domain.admin.dto;
+package com.clubber.domain.admin.dto;
-import com.clubber.ClubberServer.domain.club.domain.Club;
-import com.clubber.ClubberServer.domain.club.domain.ClubInfo;
-import com.clubber.ClubberServer.global.vo.image.ImageVO;
+import com.clubber.domain.domains.club.domain.Club;
+import com.clubber.domain.domains.club.domain.ClubInfo;
+import com.clubber.domain.common.vo.ImageVO;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Builder;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/admin/facade/AdminEmailAuthFacade.java b/Clubber-External/src/main/java/com/clubber/domain/admin/facade/AdminEmailAuthFacade.java
similarity index 83%
rename from src/main/java/com/clubber/ClubberServer/domain/admin/facade/AdminEmailAuthFacade.java
rename to Clubber-External/src/main/java/com/clubber/domain/admin/facade/AdminEmailAuthFacade.java
index 8414a933a..dbfe960fb 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/admin/facade/AdminEmailAuthFacade.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/admin/facade/AdminEmailAuthFacade.java
@@ -1,12 +1,12 @@
-package com.clubber.ClubberServer.domain.admin.facade;
+package com.clubber.domain.admin.facade;
-import com.clubber.ClubberServer.domain.admin.domain.Admin;
-import com.clubber.ClubberServer.domain.admin.domain.AdminSignupAuth;
-import com.clubber.ClubberServer.domain.admin.dto.*;
-import com.clubber.ClubberServer.domain.admin.implement.AdminReader;
-import com.clubber.ClubberServer.domain.admin.service.AdminEmailAuthService;
-import com.clubber.ClubberServer.global.infrastructure.outer.mail.MailService;
-import com.clubber.ClubberServer.global.util.RandomAuthCodeUtil;
+import com.clubber.domain.domains.admin.domain.Admin;
+import com.clubber.domain.domains.admin.domain.AdminSignupAuth;
+import com.clubber.domain.admin.dto.*;
+import com.clubber.domain.admin.implement.AdminReader;
+import com.clubber.domain.admin.service.AdminEmailAuthService;
+import com.clubber.global.infrastructure.outer.mail.MailService;
+import com.clubber.global.util.RandomAuthCodeUtil;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/admin/implement/AdminAppender.java b/Clubber-External/src/main/java/com/clubber/domain/admin/implement/AdminAppender.java
similarity index 82%
rename from src/main/java/com/clubber/ClubberServer/domain/admin/implement/AdminAppender.java
rename to Clubber-External/src/main/java/com/clubber/domain/admin/implement/AdminAppender.java
index 4eb45df42..5cfa020b0 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/admin/implement/AdminAppender.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/admin/implement/AdminAppender.java
@@ -1,8 +1,8 @@
-package com.clubber.ClubberServer.domain.admin.implement;
+package com.clubber.domain.admin.implement;
-import com.clubber.ClubberServer.domain.admin.domain.Admin;
-import com.clubber.ClubberServer.domain.admin.domain.Contact;
-import com.clubber.ClubberServer.domain.club.domain.Club;
+import com.clubber.domain.domains.admin.domain.Admin;
+import com.clubber.domain.domains.admin.domain.Contact;
+import com.clubber.domain.domains.club.domain.Club;
import lombok.RequiredArgsConstructor;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Component;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/admin/implement/AdminReader.java b/Clubber-External/src/main/java/com/clubber/domain/admin/implement/AdminReader.java
similarity index 73%
rename from src/main/java/com/clubber/ClubberServer/domain/admin/implement/AdminReader.java
rename to Clubber-External/src/main/java/com/clubber/domain/admin/implement/AdminReader.java
index 2f5f0e8f7..30b1add3f 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/admin/implement/AdminReader.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/admin/implement/AdminReader.java
@@ -1,15 +1,15 @@
-package com.clubber.ClubberServer.domain.admin.implement;
+package com.clubber.domain.admin.implement;
-import static com.clubber.ClubberServer.domain.user.domain.AccountState.ACTIVE;
+import static com.clubber.domain.domains.user.domain.AccountState.ACTIVE;
-import com.clubber.ClubberServer.domain.admin.domain.Admin;
-import com.clubber.ClubberServer.domain.admin.exception.AdminLoginFailedException;
-import com.clubber.ClubberServer.domain.admin.exception.AdminNotFoundException;
-import com.clubber.ClubberServer.domain.admin.exception.AdminUsernameNotFoundException;
-import com.clubber.ClubberServer.domain.admin.repository.AdminRepository;
-import com.clubber.ClubberServer.domain.club.domain.Club;
-import com.clubber.ClubberServer.domain.user.domain.AccountState;
-import com.clubber.ClubberServer.global.config.security.SecurityUtils;
+import com.clubber.domain.domains.admin.domain.Admin;
+import com.clubber.domain.domains.admin.exception.AdminLoginFailedException;
+import com.clubber.domain.domains.admin.exception.AdminNotFoundException;
+import com.clubber.domain.domains.admin.exception.AdminUsernameNotFoundException;
+import com.clubber.domain.domains.admin.repository.AdminRepository;
+import com.clubber.domain.domains.club.domain.Club;
+import com.clubber.domain.domains.user.domain.AccountState;
+import com.clubber.global.config.security.SecurityUtils;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/admin/implement/AdminTokenAppender.java b/Clubber-External/src/main/java/com/clubber/domain/admin/implement/AdminTokenAppender.java
similarity index 69%
rename from src/main/java/com/clubber/ClubberServer/domain/admin/implement/AdminTokenAppender.java
rename to Clubber-External/src/main/java/com/clubber/domain/admin/implement/AdminTokenAppender.java
index 8dc902dc8..8dfa128b1 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/admin/implement/AdminTokenAppender.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/admin/implement/AdminTokenAppender.java
@@ -1,10 +1,10 @@
-package com.clubber.ClubberServer.domain.admin.implement;
+package com.clubber.domain.admin.implement;
-import com.clubber.ClubberServer.domain.admin.domain.Admin;
-import com.clubber.ClubberServer.domain.admin.domain.AdminRefreshToken;
-import com.clubber.ClubberServer.domain.admin.repository.AdminRefreshTokenRepository;
-import com.clubber.ClubberServer.global.jwt.vo.TokenVO;
-import com.clubber.ClubberServer.global.jwt.JwtTokenUtil;
+import com.clubber.domain.domains.admin.domain.Admin;
+import com.clubber.domain.domains.admin.domain.AdminRefreshToken;
+import com.clubber.domain.domains.admin.repository.AdminRefreshTokenRepository;
+import com.clubber.global.jwt.vo.TokenVO;
+import com.clubber.global.jwt.JwtTokenUtil;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/admin/implement/AdminTokenReader.java b/Clubber-External/src/main/java/com/clubber/domain/admin/implement/AdminTokenReader.java
similarity index 70%
rename from src/main/java/com/clubber/ClubberServer/domain/admin/implement/AdminTokenReader.java
rename to Clubber-External/src/main/java/com/clubber/domain/admin/implement/AdminTokenReader.java
index 0d57c9150..20c097d10 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/admin/implement/AdminTokenReader.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/admin/implement/AdminTokenReader.java
@@ -1,9 +1,9 @@
-package com.clubber.ClubberServer.domain.admin.implement;
+package com.clubber.domain.admin.implement;
-import com.clubber.ClubberServer.domain.admin.domain.AdminRefreshToken;
-import com.clubber.ClubberServer.domain.admin.repository.AdminRefreshTokenRepository;
-import com.clubber.ClubberServer.domain.user.exception.RefreshTokenExpiredException;
-import com.clubber.ClubberServer.global.jwt.JwtTokenUtil;
+import com.clubber.domain.domains.admin.domain.AdminRefreshToken;
+import com.clubber.domain.domains.admin.repository.AdminRefreshTokenRepository;
+import com.clubber.domain.domains.user.exception.RefreshTokenExpiredException;
+import com.clubber.global.jwt.JwtTokenUtil;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/admin/implement/AdminValidator.java b/Clubber-External/src/main/java/com/clubber/domain/admin/implement/AdminValidator.java
similarity index 69%
rename from src/main/java/com/clubber/ClubberServer/domain/admin/implement/AdminValidator.java
rename to Clubber-External/src/main/java/com/clubber/domain/admin/implement/AdminValidator.java
index 2231b3d4f..c5992b850 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/admin/implement/AdminValidator.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/admin/implement/AdminValidator.java
@@ -1,10 +1,9 @@
-package com.clubber.ClubberServer.domain.admin.implement;
+package com.clubber.domain.admin.implement;
-import com.clubber.ClubberServer.domain.admin.domain.Admin;
-import com.clubber.ClubberServer.domain.admin.exception.AdminEqualsPreviousPasswordExcpetion;
-import com.clubber.ClubberServer.domain.admin.exception.AdminInvalidAuthCodeException;
-import com.clubber.ClubberServer.domain.admin.exception.AdminInvalidCurrentPasswordException;
-import com.clubber.ClubberServer.domain.admin.exception.AdminLoginFailedException;
+import com.clubber.domain.domains.admin.exception.AdminEqualsPreviousPasswordExcpetion;
+import com.clubber.domain.domains.admin.exception.AdminInvalidAuthCodeException;
+import com.clubber.domain.domains.admin.exception.AdminInvalidCurrentPasswordException;
+import com.clubber.domain.domains.admin.exception.AdminLoginFailedException;
import lombok.RequiredArgsConstructor;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Component;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/admin/implement/PendingAdminInfoManager.java b/Clubber-External/src/main/java/com/clubber/domain/admin/implement/PendingAdminInfoManager.java
similarity index 78%
rename from src/main/java/com/clubber/ClubberServer/domain/admin/implement/PendingAdminInfoManager.java
rename to Clubber-External/src/main/java/com/clubber/domain/admin/implement/PendingAdminInfoManager.java
index 7c594aec4..314345815 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/admin/implement/PendingAdminInfoManager.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/admin/implement/PendingAdminInfoManager.java
@@ -1,14 +1,14 @@
-package com.clubber.ClubberServer.domain.admin.implement;
+package com.clubber.domain.admin.implement;
-import com.clubber.ClubberServer.domain.admin.domain.Admin;
-import com.clubber.ClubberServer.domain.admin.domain.PendingAdminInfo;
-import com.clubber.ClubberServer.domain.admin.dto.CreateAdminSignUpRequest;
-import com.clubber.ClubberServer.domain.admin.mapper.PendingAdminMapper;
-import com.clubber.ClubberServer.domain.admin.repository.AdminRepository;
-import com.clubber.ClubberServer.domain.admin.repository.PendingAdminInfoRepository;
-import com.clubber.ClubberServer.domain.club.domain.Club;
-import com.clubber.ClubberServer.domain.club.domain.ClubType;
-import com.clubber.ClubberServer.domain.club.repository.ClubRepository;
+import com.clubber.domain.domains.admin.domain.Admin;
+import com.clubber.domain.domains.admin.domain.PendingAdminInfo;
+import com.clubber.domain.admin.dto.CreateAdminSignUpRequest;
+import com.clubber.domain.admin.mapper.PendingAdminMapper;
+import com.clubber.domain.domains.admin.repository.AdminRepository;
+import com.clubber.domain.domains.admin.repository.PendingAdminInfoRepository;
+import com.clubber.domain.domains.club.domain.Club;
+import com.clubber.domain.domains.club.domain.ClubType;
+import com.clubber.domain.domains.club.repository.ClubRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Component;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/admin/implement/PendingAdminInfoReader.java b/Clubber-External/src/main/java/com/clubber/domain/admin/implement/PendingAdminInfoReader.java
similarity index 72%
rename from src/main/java/com/clubber/ClubberServer/domain/admin/implement/PendingAdminInfoReader.java
rename to Clubber-External/src/main/java/com/clubber/domain/admin/implement/PendingAdminInfoReader.java
index 7bb1095e8..174541051 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/admin/implement/PendingAdminInfoReader.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/admin/implement/PendingAdminInfoReader.java
@@ -1,8 +1,8 @@
-package com.clubber.ClubberServer.domain.admin.implement;
+package com.clubber.domain.admin.implement;
-import com.clubber.ClubberServer.domain.admin.domain.PendingAdminInfo;
-import com.clubber.ClubberServer.domain.admin.exception.AdminNotFoundException;
-import com.clubber.ClubberServer.domain.admin.repository.PendingAdminInfoRepository;
+import com.clubber.domain.domains.admin.domain.PendingAdminInfo;
+import com.clubber.domain.domains.admin.exception.AdminNotFoundException;
+import com.clubber.domain.domains.admin.repository.PendingAdminInfoRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
diff --git a/Clubber-External/src/main/java/com/clubber/domain/admin/mapper/AdminReviewMapper.java b/Clubber-External/src/main/java/com/clubber/domain/admin/mapper/AdminReviewMapper.java
new file mode 100644
index 000000000..3a1bd695a
--- /dev/null
+++ b/Clubber-External/src/main/java/com/clubber/domain/admin/mapper/AdminReviewMapper.java
@@ -0,0 +1,59 @@
+package com.clubber.domain.admin.mapper;
+
+import com.clubber.domain.domains.admin.domain.Admin;
+import com.clubber.domain.admin.dto.AdminReviewResponse;
+import com.clubber.domain.admin.dto.GetAdminsPendingReviews;
+import com.clubber.domain.admin.dto.GetAdminsReviewsResponse;
+import com.clubber.domain.domains.club.domain.Club;
+import com.clubber.domain.domains.review.domain.Review;
+import com.clubber.domain.domains.review.util.ReviewUtil;
+import com.clubber.domain.domains.review.vo.ReviewReplyResponse;
+import com.clubber.global.common.page.PageResponse;
+
+import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
+import org.springframework.data.domain.Page;
+import org.springframework.stereotype.Component;
+
+@Component
+public class AdminReviewMapper {
+
+// // 리뷰 조회 (관리자)
+ public GetAdminsReviewsResponse getGetAdminReviewsResponse(
+ Admin admin, Club club, Page reviews) {
+ PageResponse adminsReviewDetailsPageResponse = getAdminsReviewResponse(
+ reviews);
+ return GetAdminsReviewsResponse.of(admin, club, adminsReviewDetailsPageResponse);
+ }
+
+ private static PageResponse getAdminsReviewResponse(
+ Page reviewPages) {
+ Page getAdminReviewsPageResponse = reviewPages.map(
+ review -> {
+ Set keywords = ReviewUtil.extractKeywords(review);
+ ReviewReplyResponse reviewReply = ReviewReplyResponse.of(review.getReviewReply());
+ return AdminReviewResponse.of(review, keywords, reviewReply);
+ });
+ return PageResponse.of(getAdminReviewsPageResponse);
+ }
+
+// //대기 상태 리뷰 조회 (관리자, No-offset)
+// public GetAdminPendingReviewsSliceResponse getGetAdminPendingReviewSliceResponse(
+// List reviews, Pageable pageable) {
+// List getAdminPendingReviewList = getGetAdminPendingReviewList(
+// reviews);
+// SliceResponse getAdminsPendingReviewsSliceResponse = SliceUtil.valueOf(
+// getAdminPendingReviewList, pageable);
+// Long lastReviewId = ReviewUtil.getLastReviewId(reviews, pageable);
+// return GetAdminPendingReviewsSliceResponse.of(getAdminsPendingReviewsSliceResponse,
+// lastReviewId);
+// }
+
+ //대기 상태 리뷰 조회 (관리자)
+ public List getGetAdminPendingReviewList(List reviews) {
+ return reviews.stream()
+ .map(GetAdminsPendingReviews::from)
+ .collect(Collectors.toList());
+ }
+}
diff --git a/src/main/java/com/clubber/ClubberServer/domain/admin/mapper/PendingAdminMapper.java b/Clubber-External/src/main/java/com/clubber/domain/admin/mapper/PendingAdminMapper.java
similarity index 79%
rename from src/main/java/com/clubber/ClubberServer/domain/admin/mapper/PendingAdminMapper.java
rename to Clubber-External/src/main/java/com/clubber/domain/admin/mapper/PendingAdminMapper.java
index 11a6291b9..720f9ec06 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/admin/mapper/PendingAdminMapper.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/admin/mapper/PendingAdminMapper.java
@@ -1,8 +1,8 @@
-package com.clubber.ClubberServer.domain.admin.mapper;
+package com.clubber.domain.admin.mapper;
-import com.clubber.ClubberServer.domain.admin.domain.Admin;
-import com.clubber.ClubberServer.domain.admin.domain.PendingAdminInfo;
-import com.clubber.ClubberServer.domain.club.domain.Club;
+import com.clubber.domain.domains.admin.domain.Admin;
+import com.clubber.domain.domains.admin.domain.PendingAdminInfo;
+import com.clubber.domain.domains.club.domain.Club;
import org.springframework.stereotype.Component;
@Component
diff --git a/src/main/java/com/clubber/ClubberServer/domain/admin/service/AdminAccountService.java b/Clubber-External/src/main/java/com/clubber/domain/admin/service/AdminAccountService.java
similarity index 85%
rename from src/main/java/com/clubber/ClubberServer/domain/admin/service/AdminAccountService.java
rename to Clubber-External/src/main/java/com/clubber/domain/admin/service/AdminAccountService.java
index 3955c6a0f..d7ab62a0f 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/admin/service/AdminAccountService.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/admin/service/AdminAccountService.java
@@ -1,15 +1,15 @@
-package com.clubber.ClubberServer.domain.admin.service;
-
-import com.clubber.ClubberServer.domain.admin.domain.Admin;
-import com.clubber.ClubberServer.domain.admin.domain.PendingAdminInfo;
-import com.clubber.ClubberServer.domain.admin.dto.*;
-import com.clubber.ClubberServer.domain.admin.implement.AdminAppender;
-import com.clubber.ClubberServer.domain.admin.implement.AdminReader;
-import com.clubber.ClubberServer.domain.admin.implement.AdminValidator;
-import com.clubber.ClubberServer.domain.admin.implement.PendingAdminInfoManager;
-import com.clubber.ClubberServer.domain.admin.util.AdminUtil;
-import com.clubber.ClubberServer.global.event.signup.SignUpAlarmEventPublisher;
-import com.clubber.ClubberServer.global.event.withdraw.SoftDeleteEventPublisher;
+package com.clubber.domain.admin.service;
+
+import com.clubber.domain.domains.admin.domain.Admin;
+import com.clubber.domain.domains.admin.domain.PendingAdminInfo;
+import com.clubber.domain.admin.dto.*;
+import com.clubber.domain.admin.implement.AdminAppender;
+import com.clubber.domain.admin.implement.AdminReader;
+import com.clubber.domain.admin.implement.AdminValidator;
+import com.clubber.domain.admin.implement.PendingAdminInfoManager;
+import com.clubber.domain.admin.util.AdminUtil;
+import com.clubber.global.event.signup.SignUpAlarmEventPublisher;
+import com.clubber.global.event.withdraw.SoftDeleteEventPublisher;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/admin/service/AdminAuthService.java b/Clubber-External/src/main/java/com/clubber/domain/admin/service/AdminAuthService.java
similarity index 68%
rename from src/main/java/com/clubber/ClubberServer/domain/admin/service/AdminAuthService.java
rename to Clubber-External/src/main/java/com/clubber/domain/admin/service/AdminAuthService.java
index 692239242..f3c014515 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/admin/service/AdminAuthService.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/admin/service/AdminAuthService.java
@@ -1,14 +1,14 @@
-package com.clubber.ClubberServer.domain.admin.service;
+package com.clubber.domain.admin.service;
-import com.clubber.ClubberServer.domain.admin.domain.Admin;
-import com.clubber.ClubberServer.domain.admin.dto.CreateAdminsLoginRequest;
-import com.clubber.ClubberServer.domain.admin.dto.CreateAdminsLoginResponse;
-import com.clubber.ClubberServer.domain.admin.implement.AdminReader;
-import com.clubber.ClubberServer.domain.admin.implement.AdminTokenAppender;
-import com.clubber.ClubberServer.domain.admin.implement.AdminTokenReader;
-import com.clubber.ClubberServer.domain.admin.implement.AdminValidator;
-import com.clubber.ClubberServer.global.jwt.vo.TokenVO;
-import com.clubber.ClubberServer.global.config.security.SecurityUtils;
+import com.clubber.domain.domains.admin.domain.Admin;
+import com.clubber.domain.admin.dto.CreateAdminsLoginRequest;
+import com.clubber.domain.admin.dto.CreateAdminsLoginResponse;
+import com.clubber.domain.admin.implement.AdminReader;
+import com.clubber.domain.admin.implement.AdminTokenAppender;
+import com.clubber.domain.admin.implement.AdminTokenReader;
+import com.clubber.domain.admin.implement.AdminValidator;
+import com.clubber.global.jwt.vo.TokenVO;
+import com.clubber.global.config.security.SecurityUtils;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/admin/service/AdminClubService.java b/Clubber-External/src/main/java/com/clubber/domain/admin/service/AdminClubService.java
similarity index 64%
rename from src/main/java/com/clubber/ClubberServer/domain/admin/service/AdminClubService.java
rename to Clubber-External/src/main/java/com/clubber/domain/admin/service/AdminClubService.java
index 44edadb8d..1cf2e230d 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/admin/service/AdminClubService.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/admin/service/AdminClubService.java
@@ -1,14 +1,14 @@
-package com.clubber.ClubberServer.domain.admin.service;
-
-import com.clubber.ClubberServer.domain.admin.domain.Admin;
-import com.clubber.ClubberServer.domain.admin.dto.UpdateClubPageRequest;
-import com.clubber.ClubberServer.domain.admin.dto.UpdateClubPageResponse;
-import com.clubber.ClubberServer.domain.admin.implement.AdminReader;
-import com.clubber.ClubberServer.domain.club.domain.Club;
-import com.clubber.ClubberServer.domain.club.domain.ClubInfo;
-import com.clubber.ClubberServer.domain.club.dto.GetClubInfoResponse;
-import com.clubber.ClubberServer.domain.club.dto.GetClubResponse;
-import com.clubber.ClubberServer.global.util.ImageUtil;
+package com.clubber.domain.admin.service;
+
+import com.clubber.domain.domains.admin.domain.Admin;
+import com.clubber.domain.admin.dto.UpdateClubPageRequest;
+import com.clubber.domain.admin.dto.UpdateClubPageResponse;
+import com.clubber.domain.admin.implement.AdminReader;
+import com.clubber.domain.domains.club.domain.Club;
+import com.clubber.domain.domains.club.domain.ClubInfo;
+import com.clubber.domain.club.dto.GetClubInfoResponse;
+import com.clubber.domain.club.dto.GetClubResponse;
+import com.clubber.global.util.ImageUtil;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/admin/service/AdminEmailAuthService.java b/Clubber-External/src/main/java/com/clubber/domain/admin/service/AdminEmailAuthService.java
similarity index 87%
rename from src/main/java/com/clubber/ClubberServer/domain/admin/service/AdminEmailAuthService.java
rename to Clubber-External/src/main/java/com/clubber/domain/admin/service/AdminEmailAuthService.java
index fd648e596..f55368c31 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/admin/service/AdminEmailAuthService.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/admin/service/AdminEmailAuthService.java
@@ -1,16 +1,16 @@
-package com.clubber.ClubberServer.domain.admin.service;
-
-import com.clubber.ClubberServer.domain.admin.domain.*;
-import com.clubber.ClubberServer.domain.admin.dto.CreateAdminSignupAuthVerifyRequest;
-import com.clubber.ClubberServer.domain.admin.dto.UpdateAdminPasswordFindAuthVerifyRequest;
-import com.clubber.ClubberServer.domain.admin.dto.UpdateAdminUpdateEmailAuthVerifyRequest;
-import com.clubber.ClubberServer.domain.admin.exception.AdminInvalidAuthCodeException;
-import com.clubber.ClubberServer.domain.admin.implement.AdminReader;
-import com.clubber.ClubberServer.domain.admin.implement.AdminValidator;
-import com.clubber.ClubberServer.domain.admin.repository.AdminPasswordFindAuthRepository;
-import com.clubber.ClubberServer.domain.admin.repository.AdminSignupAuthRepository;
-import com.clubber.ClubberServer.domain.admin.repository.AdminUpdateEmailAuthRepository;
-import com.clubber.ClubberServer.domain.admin.repository.AdminUsernameFindAuthRepository;
+package com.clubber.domain.admin.service;
+
+import com.clubber.domain.admin.dto.CreateAdminSignupAuthVerifyRequest;
+import com.clubber.domain.admin.dto.UpdateAdminPasswordFindAuthVerifyRequest;
+import com.clubber.domain.admin.dto.UpdateAdminUpdateEmailAuthVerifyRequest;
+import com.clubber.domain.domains.admin.domain.*;
+import com.clubber.domain.domains.admin.exception.AdminInvalidAuthCodeException;
+import com.clubber.domain.admin.implement.AdminReader;
+import com.clubber.domain.admin.implement.AdminValidator;
+import com.clubber.domain.domains.admin.repository.AdminPasswordFindAuthRepository;
+import com.clubber.domain.domains.admin.repository.AdminSignupAuthRepository;
+import com.clubber.domain.domains.admin.repository.AdminUpdateEmailAuthRepository;
+import com.clubber.domain.domains.admin.repository.AdminUsernameFindAuthRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/admin/util/AdminUtil.java b/Clubber-External/src/main/java/com/clubber/domain/admin/util/AdminUtil.java
similarity index 72%
rename from src/main/java/com/clubber/ClubberServer/domain/admin/util/AdminUtil.java
rename to Clubber-External/src/main/java/com/clubber/domain/admin/util/AdminUtil.java
index 2474d9fb4..c676ed522 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/admin/util/AdminUtil.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/admin/util/AdminUtil.java
@@ -1,4 +1,4 @@
-package com.clubber.ClubberServer.domain.admin.util;
+package com.clubber.domain.admin.util;
public class AdminUtil {
public static String maskUsername(String username) {
diff --git a/src/main/java/com/clubber/ClubberServer/domain/auth/controller/AuthController.java b/Clubber-External/src/main/java/com/clubber/domain/auth/controller/AuthController.java
similarity index 85%
rename from src/main/java/com/clubber/ClubberServer/domain/auth/controller/AuthController.java
rename to Clubber-External/src/main/java/com/clubber/domain/auth/controller/AuthController.java
index aa8ba65a9..85bc0ec94 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/auth/controller/AuthController.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/auth/controller/AuthController.java
@@ -1,13 +1,10 @@
-package com.clubber.ClubberServer.domain.auth.controller;
+package com.clubber.domain.auth.controller;
-import static com.clubber.ClubberServer.global.common.consts.ClubberStatic.*;
-
-import com.clubber.ClubberServer.domain.auth.facade.UserRegisterFacade;
-import com.clubber.ClubberServer.domain.auth.facade.UserWithdrawFacade;
-import com.clubber.ClubberServer.domain.auth.dto.KakaoOauthResponse;
-import com.clubber.ClubberServer.domain.auth.service.helper.CookieHelper;
-import com.clubber.ClubberServer.domain.auth.service.AuthService;
-import com.clubber.ClubberServer.global.config.swagger.DisableSwaggerSecurity;
+import com.clubber.domain.auth.facade.UserRegisterFacade;
+import com.clubber.domain.auth.facade.UserWithdrawFacade;
+import com.clubber.domain.auth.dto.KakaoOauthResponse;
+import com.clubber.domain.auth.service.AuthService;
+import com.clubber.global.config.swagger.DisableSwaggerSecurity;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.enums.ParameterIn;
@@ -16,7 +13,6 @@
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.ResponseEntity;
-import org.springframework.web.bind.annotation.CookieValue;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
@@ -25,6 +21,8 @@
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
+import static com.clubber.common.consts.ClubberStatic.*;
+
@Slf4j
@RestController
@RequestMapping("/api/v1/auths")
diff --git a/src/main/java/com/clubber/ClubberServer/domain/auth/domain/UserRefreshToken.java b/Clubber-External/src/main/java/com/clubber/domain/auth/domain/UserRefreshToken.java
similarity index 94%
rename from src/main/java/com/clubber/ClubberServer/domain/auth/domain/UserRefreshToken.java
rename to Clubber-External/src/main/java/com/clubber/domain/auth/domain/UserRefreshToken.java
index 1a37781b1..c5fff6d7e 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/auth/domain/UserRefreshToken.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/auth/domain/UserRefreshToken.java
@@ -1,4 +1,4 @@
-package com.clubber.ClubberServer.domain.auth.domain;
+package com.clubber.domain.auth.domain;
import lombok.Builder;
import lombok.Getter;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/auth/dto/KakaoOauthResponse.java b/Clubber-External/src/main/java/com/clubber/domain/auth/dto/KakaoOauthResponse.java
similarity index 87%
rename from src/main/java/com/clubber/ClubberServer/domain/auth/dto/KakaoOauthResponse.java
rename to Clubber-External/src/main/java/com/clubber/domain/auth/dto/KakaoOauthResponse.java
index 59122c518..48b44cdb9 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/auth/dto/KakaoOauthResponse.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/auth/dto/KakaoOauthResponse.java
@@ -1,7 +1,7 @@
-package com.clubber.ClubberServer.domain.auth.dto;
+package com.clubber.domain.auth.dto;
-import com.clubber.ClubberServer.domain.user.domain.User;
+import com.clubber.domain.domains.user.domain.User;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AccessLevel;
import lombok.Builder;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/auth/facade/UserRegisterFacade.java b/Clubber-External/src/main/java/com/clubber/domain/auth/facade/UserRegisterFacade.java
similarity index 54%
rename from src/main/java/com/clubber/ClubberServer/domain/auth/facade/UserRegisterFacade.java
rename to Clubber-External/src/main/java/com/clubber/domain/auth/facade/UserRegisterFacade.java
index 31f41e157..e46d3b6ff 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/auth/facade/UserRegisterFacade.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/auth/facade/UserRegisterFacade.java
@@ -1,17 +1,17 @@
-package com.clubber.ClubberServer.domain.auth.facade;
-
-import com.clubber.ClubberServer.domain.auth.dto.KakaoOauthResponse;
-import com.clubber.ClubberServer.domain.auth.service.AuthService;
-import com.clubber.ClubberServer.global.infrastructure.outer.api.oauth.kakao.client.KakaoInfoClient;
-import com.clubber.ClubberServer.global.infrastructure.outer.api.oauth.kakao.client.KakaoOauthClient;
-import com.clubber.ClubberServer.global.infrastructure.outer.api.oauth.kakao.dto.KakaoOAuthRequest;
-import com.clubber.ClubberServer.global.infrastructure.outer.api.oauth.kakao.dto.KakaoTokenResponse;
-import com.clubber.ClubberServer.global.infrastructure.outer.api.oauth.kakao.dto.KakaoUserInfoResponse;
-import com.clubber.ClubberServer.global.properties.KakaoProperties;
+package com.clubber.domain.auth.facade;
+
+import com.clubber.domain.auth.dto.KakaoOauthResponse;
+import com.clubber.domain.auth.service.AuthService;
+import com.clubber.global.infrastructure.outer.api.oauth.kakao.client.KakaoInfoClient;
+import com.clubber.global.infrastructure.outer.api.oauth.kakao.client.KakaoOauthClient;
+import com.clubber.global.infrastructure.outer.api.oauth.kakao.dto.KakaoOAuthRequest;
+import com.clubber.global.infrastructure.outer.api.oauth.kakao.dto.KakaoTokenResponse;
+import com.clubber.global.infrastructure.outer.api.oauth.kakao.dto.KakaoUserInfoResponse;
+import com.clubber.global.properties.KakaoProperties;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;
-import static com.clubber.ClubberServer.global.common.consts.ClubberStatic.BEARER;
+import static com.clubber.common.consts.ClubberStatic.BEARER;
@Component
@RequiredArgsConstructor
diff --git a/src/main/java/com/clubber/ClubberServer/domain/auth/facade/UserWithdrawFacade.java b/Clubber-External/src/main/java/com/clubber/domain/auth/facade/UserWithdrawFacade.java
similarity index 57%
rename from src/main/java/com/clubber/ClubberServer/domain/auth/facade/UserWithdrawFacade.java
rename to Clubber-External/src/main/java/com/clubber/domain/auth/facade/UserWithdrawFacade.java
index b2e204c81..8ae086e4e 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/auth/facade/UserWithdrawFacade.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/auth/facade/UserWithdrawFacade.java
@@ -1,11 +1,11 @@
-package com.clubber.ClubberServer.domain.auth.facade;
+package com.clubber.domain.auth.facade;
-import com.clubber.ClubberServer.global.infrastructure.outer.api.oauth.kakao.dto.UnlinkKaKaoTarget;
-import com.clubber.ClubberServer.domain.auth.service.AuthService;
-import com.clubber.ClubberServer.domain.user.domain.User;
-import com.clubber.ClubberServer.domain.user.implement.UserReader;
-import com.clubber.ClubberServer.global.infrastructure.outer.api.oauth.kakao.client.KakaoInfoClient;
-import com.clubber.ClubberServer.global.properties.KakaoProperties;
+import com.clubber.global.infrastructure.outer.api.oauth.kakao.dto.UnlinkKaKaoTarget;
+import com.clubber.domain.auth.service.AuthService;
+import com.clubber.domain.domains.user.domain.User;
+import com.clubber.domain.user.implement.UserReader;
+import com.clubber.global.infrastructure.outer.api.oauth.kakao.client.KakaoInfoClient;
+import com.clubber.global.properties.KakaoProperties;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/auth/implement/UserTokenAppender.java b/Clubber-External/src/main/java/com/clubber/domain/auth/implement/UserTokenAppender.java
similarity index 69%
rename from src/main/java/com/clubber/ClubberServer/domain/auth/implement/UserTokenAppender.java
rename to Clubber-External/src/main/java/com/clubber/domain/auth/implement/UserTokenAppender.java
index d830fa201..b72a74fd5 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/auth/implement/UserTokenAppender.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/auth/implement/UserTokenAppender.java
@@ -1,10 +1,10 @@
-package com.clubber.ClubberServer.domain.auth.implement;
+package com.clubber.domain.auth.implement;
-import com.clubber.ClubberServer.domain.auth.domain.UserRefreshToken;
-import com.clubber.ClubberServer.domain.auth.repository.UserRefreshTokenRepository;
-import com.clubber.ClubberServer.global.jwt.vo.TokenVO;
-import com.clubber.ClubberServer.domain.user.domain.User;
-import com.clubber.ClubberServer.global.jwt.JwtTokenUtil;
+import com.clubber.domain.auth.domain.UserRefreshToken;
+import com.clubber.domain.auth.repository.UserRefreshTokenRepository;
+import com.clubber.global.jwt.vo.TokenVO;
+import com.clubber.domain.domains.user.domain.User;
+import com.clubber.global.jwt.JwtTokenUtil;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/auth/implement/UserTokenReader.java b/Clubber-External/src/main/java/com/clubber/domain/auth/implement/UserTokenReader.java
similarity index 63%
rename from src/main/java/com/clubber/ClubberServer/domain/auth/implement/UserTokenReader.java
rename to Clubber-External/src/main/java/com/clubber/domain/auth/implement/UserTokenReader.java
index 69531e5f3..19d0baf64 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/auth/implement/UserTokenReader.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/auth/implement/UserTokenReader.java
@@ -1,9 +1,9 @@
-package com.clubber.ClubberServer.domain.auth.implement;
+package com.clubber.domain.auth.implement;
-import com.clubber.ClubberServer.domain.auth.domain.UserRefreshToken;
-import com.clubber.ClubberServer.domain.auth.repository.UserRefreshTokenRepository;
-import com.clubber.ClubberServer.domain.user.exception.RefreshTokenExpiredException;
-import com.clubber.ClubberServer.global.jwt.JwtTokenUtil;
+import com.clubber.domain.auth.domain.UserRefreshToken;
+import com.clubber.domain.auth.repository.UserRefreshTokenRepository;
+import com.clubber.domain.domains.user.exception.RefreshTokenExpiredException;
+import com.clubber.global.jwt.JwtTokenUtil;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/auth/repository/UserRefreshTokenRepository.java b/Clubber-External/src/main/java/com/clubber/domain/auth/repository/UserRefreshTokenRepository.java
similarity index 66%
rename from src/main/java/com/clubber/ClubberServer/domain/auth/repository/UserRefreshTokenRepository.java
rename to Clubber-External/src/main/java/com/clubber/domain/auth/repository/UserRefreshTokenRepository.java
index 65974a1fa..aa1b37934 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/auth/repository/UserRefreshTokenRepository.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/auth/repository/UserRefreshTokenRepository.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.domain.auth.repository;
+package com.clubber.domain.auth.repository;
-import com.clubber.ClubberServer.domain.auth.domain.UserRefreshToken;
+import com.clubber.domain.auth.domain.UserRefreshToken;
import org.springframework.data.repository.CrudRepository;
import java.util.Optional;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/auth/service/AuthService.java b/Clubber-External/src/main/java/com/clubber/domain/auth/service/AuthService.java
similarity index 71%
rename from src/main/java/com/clubber/ClubberServer/domain/auth/service/AuthService.java
rename to Clubber-External/src/main/java/com/clubber/domain/auth/service/AuthService.java
index 9be68cb41..57040b18d 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/auth/service/AuthService.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/auth/service/AuthService.java
@@ -1,14 +1,14 @@
-package com.clubber.ClubberServer.domain.auth.service;
-
-import com.clubber.ClubberServer.domain.auth.dto.KakaoOauthResponse;
-import com.clubber.ClubberServer.domain.auth.implement.UserTokenAppender;
-import com.clubber.ClubberServer.domain.auth.implement.UserTokenReader;
-import com.clubber.ClubberServer.global.jwt.vo.TokenVO;
-import com.clubber.ClubberServer.domain.user.domain.User;
-import com.clubber.ClubberServer.domain.user.repository.UserRepository;
-import com.clubber.ClubberServer.domain.user.implement.UserReader;
-import com.clubber.ClubberServer.global.config.security.SecurityUtils;
-import com.clubber.ClubberServer.global.infrastructure.outer.api.oauth.kakao.dto.KakaoUserInfoResponse;
+package com.clubber.domain.auth.service;
+
+import com.clubber.domain.auth.dto.KakaoOauthResponse;
+import com.clubber.domain.auth.implement.UserTokenAppender;
+import com.clubber.domain.auth.implement.UserTokenReader;
+import com.clubber.global.jwt.vo.TokenVO;
+import com.clubber.domain.domains.user.domain.User;
+import com.clubber.domain.user.repository.UserRepository;
+import com.clubber.domain.user.implement.UserReader;
+import com.clubber.global.config.security.SecurityUtils;
+import com.clubber.global.infrastructure.outer.api.oauth.kakao.dto.KakaoUserInfoResponse;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/auth/service/helper/CookieHelper.java b/Clubber-External/src/main/java/com/clubber/domain/auth/service/helper/CookieHelper.java
similarity index 90%
rename from src/main/java/com/clubber/ClubberServer/domain/auth/service/helper/CookieHelper.java
rename to Clubber-External/src/main/java/com/clubber/domain/auth/service/helper/CookieHelper.java
index 9fe015529..bd9775d08 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/auth/service/helper/CookieHelper.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/auth/service/helper/CookieHelper.java
@@ -1,7 +1,7 @@
-package com.clubber.ClubberServer.domain.auth.service.helper;
+package com.clubber.domain.auth.service.helper;
-import com.clubber.ClubberServer.global.helper.SpringEnvironmentHelper;
-import com.clubber.ClubberServer.global.properties.JwtProperties;
+import com.clubber.global.helper.SpringEnvironmentHelper;
+import com.clubber.global.properties.JwtProperties;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpHeaders;
import org.springframework.http.ResponseCookie;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/calendar/controller/CalendarAdminController.java b/Clubber-External/src/main/java/com/clubber/domain/calendar/controller/CalendarAdminController.java
similarity index 82%
rename from src/main/java/com/clubber/ClubberServer/domain/calendar/controller/CalendarAdminController.java
rename to Clubber-External/src/main/java/com/clubber/domain/calendar/controller/CalendarAdminController.java
index 6537987a6..ef7e8fbce 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/calendar/controller/CalendarAdminController.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/calendar/controller/CalendarAdminController.java
@@ -1,11 +1,11 @@
-package com.clubber.ClubberServer.domain.calendar.controller;
-
-import com.clubber.ClubberServer.domain.calendar.domain.CalendarStatus;
-import com.clubber.ClubberServer.domain.calendar.domain.OrderStatus;
-import com.clubber.ClubberServer.domain.calendar.dto.*;
-import com.clubber.ClubberServer.domain.calendar.service.CalendarAdminService;
-import com.clubber.ClubberServer.domain.recruit.domain.RecruitType;
-import com.clubber.ClubberServer.global.common.page.PageResponse;
+package com.clubber.domain.calendar.controller;
+
+import com.clubber.domain.calendar.domain.CalendarStatus;
+import com.clubber.domain.calendar.domain.OrderStatus;
+import com.clubber.domain.calendar.dto.*;
+import com.clubber.domain.calendar.service.CalendarAdminService;
+import com.clubber.domain.recruit.domain.RecruitType;
+import com.clubber.global.common.page.PageResponse;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.Valid;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/calendar/controller/CalendarController.java b/Clubber-External/src/main/java/com/clubber/domain/calendar/controller/CalendarController.java
similarity index 75%
rename from src/main/java/com/clubber/ClubberServer/domain/calendar/controller/CalendarController.java
rename to Clubber-External/src/main/java/com/clubber/domain/calendar/controller/CalendarController.java
index 268803394..d287f3a54 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/calendar/controller/CalendarController.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/calendar/controller/CalendarController.java
@@ -1,9 +1,12 @@
-package com.clubber.ClubberServer.domain.calendar.controller;
-
-import com.clubber.ClubberServer.domain.calendar.dto.*;
-import com.clubber.ClubberServer.domain.calendar.service.CalendarService;
-import com.clubber.ClubberServer.global.common.slice.SliceResponse;
-import com.clubber.ClubberServer.global.config.swagger.DisableSwaggerSecurity;
+package com.clubber.domain.calendar.controller;
+
+import com.clubber.domain.calendar.dto.GetCalendarInListResponse;
+import com.clubber.domain.calendar.dto.GetCalendarResponse;
+import com.clubber.domain.calendar.dto.GetNextAlwaysCalendarRequest;
+import com.clubber.domain.calendar.dto.GetTodayCalendarResponse;
+import com.clubber.domain.calendar.service.CalendarService;
+import com.clubber.global.common.slice.SliceResponse;
+import com.clubber.global.config.swagger.DisableSwaggerSecurity;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/calendar/domain/Calendar.java b/Clubber-External/src/main/java/com/clubber/domain/calendar/domain/Calendar.java
similarity index 88%
rename from src/main/java/com/clubber/ClubberServer/domain/calendar/domain/Calendar.java
rename to Clubber-External/src/main/java/com/clubber/domain/calendar/domain/Calendar.java
index 3d9279130..a8d2f266e 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/calendar/domain/Calendar.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/calendar/domain/Calendar.java
@@ -1,9 +1,9 @@
-package com.clubber.ClubberServer.domain.calendar.domain;
+package com.clubber.domain.calendar.domain;
-import com.clubber.ClubberServer.domain.club.domain.Club;
-import com.clubber.ClubberServer.domain.common.BaseEntity;
-import com.clubber.ClubberServer.domain.recruit.domain.RecruitType;
-import com.clubber.ClubberServer.domain.user.domain.AccountRole;
+import com.clubber.domain.domains.club.domain.Club;
+import com.clubber.domain.common.BaseEntity;
+import com.clubber.domain.recruit.domain.RecruitType;
+import com.clubber.domain.domains.user.domain.AccountRole;
import jakarta.persistence.*;
import jakarta.validation.constraints.NotNull;
import lombok.AccessLevel;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/calendar/domain/CalendarStatus.java b/Clubber-External/src/main/java/com/clubber/domain/calendar/domain/CalendarStatus.java
similarity index 79%
rename from src/main/java/com/clubber/ClubberServer/domain/calendar/domain/CalendarStatus.java
rename to Clubber-External/src/main/java/com/clubber/domain/calendar/domain/CalendarStatus.java
index 7725f9da7..835e05b13 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/calendar/domain/CalendarStatus.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/calendar/domain/CalendarStatus.java
@@ -1,7 +1,7 @@
-package com.clubber.ClubberServer.domain.calendar.domain;
+package com.clubber.domain.calendar.domain;
-import com.clubber.ClubberServer.domain.recruit.domain.RecruitType;
-import com.clubber.ClubberServer.global.mapper.enums.EnumDefaultMapperType;
+import com.clubber.domain.recruit.domain.RecruitType;
+import com.clubber.common.mapper.enums.EnumDefaultMapperType;
import lombok.AllArgsConstructor;
import java.time.LocalDateTime;
diff --git a/Clubber-External/src/main/java/com/clubber/domain/calendar/domain/OrderStatus.java b/Clubber-External/src/main/java/com/clubber/domain/calendar/domain/OrderStatus.java
new file mode 100644
index 000000000..c035e4187
--- /dev/null
+++ b/Clubber-External/src/main/java/com/clubber/domain/calendar/domain/OrderStatus.java
@@ -0,0 +1,5 @@
+package com.clubber.domain.calendar.domain;
+
+public enum OrderStatus {
+ ASC
+}
diff --git a/src/main/java/com/clubber/ClubberServer/domain/calendar/dto/CreateCalendarRequest.java b/Clubber-External/src/main/java/com/clubber/domain/calendar/dto/CreateCalendarRequest.java
similarity index 81%
rename from src/main/java/com/clubber/ClubberServer/domain/calendar/dto/CreateCalendarRequest.java
rename to Clubber-External/src/main/java/com/clubber/domain/calendar/dto/CreateCalendarRequest.java
index ece51a45f..6c0a91f48 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/calendar/dto/CreateCalendarRequest.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/calendar/dto/CreateCalendarRequest.java
@@ -1,9 +1,9 @@
-package com.clubber.ClubberServer.domain.calendar.dto;
+package com.clubber.domain.calendar.dto;
-import com.clubber.ClubberServer.domain.calendar.domain.Calendar;
-import com.clubber.ClubberServer.domain.club.domain.Club;
-import com.clubber.ClubberServer.domain.recruit.domain.RecruitType;
-import com.clubber.ClubberServer.domain.user.domain.AccountRole;
+import com.clubber.domain.calendar.domain.Calendar;
+import com.clubber.domain.domains.club.domain.Club;
+import com.clubber.domain.recruit.domain.RecruitType;
+import com.clubber.domain.domains.user.domain.AccountRole;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/calendar/dto/CreateCalendarResponse.java b/Clubber-External/src/main/java/com/clubber/domain/calendar/dto/CreateCalendarResponse.java
similarity index 76%
rename from src/main/java/com/clubber/ClubberServer/domain/calendar/dto/CreateCalendarResponse.java
rename to Clubber-External/src/main/java/com/clubber/domain/calendar/dto/CreateCalendarResponse.java
index e9026311c..7849c3d53 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/calendar/dto/CreateCalendarResponse.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/calendar/dto/CreateCalendarResponse.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.domain.calendar.dto;
+package com.clubber.domain.calendar.dto;
-import com.clubber.ClubberServer.domain.calendar.domain.Calendar;
+import com.clubber.domain.calendar.domain.Calendar;
import io.swagger.v3.oas.annotations.media.Schema;
public record CreateCalendarResponse(
diff --git a/src/main/java/com/clubber/ClubberServer/domain/calendar/dto/GetAlwaysCalendarResponse.java b/Clubber-External/src/main/java/com/clubber/domain/calendar/dto/GetAlwaysCalendarResponse.java
similarity index 86%
rename from src/main/java/com/clubber/ClubberServer/domain/calendar/dto/GetAlwaysCalendarResponse.java
rename to Clubber-External/src/main/java/com/clubber/domain/calendar/dto/GetAlwaysCalendarResponse.java
index ff8f7a27a..2fe90360e 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/calendar/dto/GetAlwaysCalendarResponse.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/calendar/dto/GetAlwaysCalendarResponse.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.domain.calendar.dto;
+package com.clubber.domain.calendar.dto;
-import com.clubber.ClubberServer.domain.recruit.domain.RecruitType;
+import com.clubber.domain.recruit.domain.RecruitType;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/calendar/dto/GetCalendarDuplicateRequest.java b/Clubber-External/src/main/java/com/clubber/domain/calendar/dto/GetCalendarDuplicateRequest.java
similarity index 83%
rename from src/main/java/com/clubber/ClubberServer/domain/calendar/dto/GetCalendarDuplicateRequest.java
rename to Clubber-External/src/main/java/com/clubber/domain/calendar/dto/GetCalendarDuplicateRequest.java
index 0f3f3d058..9b637aa95 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/calendar/dto/GetCalendarDuplicateRequest.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/calendar/dto/GetCalendarDuplicateRequest.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.domain.calendar.dto;
+package com.clubber.domain.calendar.dto;
-import com.clubber.ClubberServer.domain.recruit.domain.RecruitType;
+import com.clubber.domain.recruit.domain.RecruitType;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotNull;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/calendar/dto/GetCalendarDuplicateResponse.java b/Clubber-External/src/main/java/com/clubber/domain/calendar/dto/GetCalendarDuplicateResponse.java
similarity index 67%
rename from src/main/java/com/clubber/ClubberServer/domain/calendar/dto/GetCalendarDuplicateResponse.java
rename to Clubber-External/src/main/java/com/clubber/domain/calendar/dto/GetCalendarDuplicateResponse.java
index 578a82898..dd12e7717 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/calendar/dto/GetCalendarDuplicateResponse.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/calendar/dto/GetCalendarDuplicateResponse.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.domain.calendar.dto;
+package com.clubber.domain.calendar.dto;
-import com.clubber.ClubberServer.domain.recruit.domain.RecruitType;
+import com.clubber.domain.recruit.domain.RecruitType;
import io.swagger.v3.oas.annotations.media.Schema;
public record GetCalendarDuplicateResponse(
diff --git a/src/main/java/com/clubber/ClubberServer/domain/calendar/dto/GetCalendarInListResponse.java b/Clubber-External/src/main/java/com/clubber/domain/calendar/dto/GetCalendarInListResponse.java
similarity index 95%
rename from src/main/java/com/clubber/ClubberServer/domain/calendar/dto/GetCalendarInListResponse.java
rename to Clubber-External/src/main/java/com/clubber/domain/calendar/dto/GetCalendarInListResponse.java
index 072285597..fd5c2f56e 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/calendar/dto/GetCalendarInListResponse.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/calendar/dto/GetCalendarInListResponse.java
@@ -1,4 +1,4 @@
-package com.clubber.ClubberServer.domain.calendar.dto;
+package com.clubber.domain.calendar.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import java.util.List;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/calendar/dto/GetCalendarResponse.java b/Clubber-External/src/main/java/com/clubber/domain/calendar/dto/GetCalendarResponse.java
similarity index 87%
rename from src/main/java/com/clubber/ClubberServer/domain/calendar/dto/GetCalendarResponse.java
rename to Clubber-External/src/main/java/com/clubber/domain/calendar/dto/GetCalendarResponse.java
index 20256db73..57e925bf2 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/calendar/dto/GetCalendarResponse.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/calendar/dto/GetCalendarResponse.java
@@ -1,8 +1,8 @@
-package com.clubber.ClubberServer.domain.calendar.dto;
+package com.clubber.domain.calendar.dto;
-import com.clubber.ClubberServer.domain.calendar.domain.Calendar;
-import com.clubber.ClubberServer.domain.recruit.domain.RecruitType;
-import com.clubber.ClubberServer.domain.user.domain.AccountRole;
+import com.clubber.domain.calendar.domain.Calendar;
+import com.clubber.domain.recruit.domain.RecruitType;
+import com.clubber.domain.domains.user.domain.AccountRole;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Builder;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/calendar/dto/GetCalendarResponseWithLinkedStatus.java b/Clubber-External/src/main/java/com/clubber/domain/calendar/dto/GetCalendarResponseWithLinkedStatus.java
similarity index 88%
rename from src/main/java/com/clubber/ClubberServer/domain/calendar/dto/GetCalendarResponseWithLinkedStatus.java
rename to Clubber-External/src/main/java/com/clubber/domain/calendar/dto/GetCalendarResponseWithLinkedStatus.java
index 898f5cc19..dd5d4f5cf 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/calendar/dto/GetCalendarResponseWithLinkedStatus.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/calendar/dto/GetCalendarResponseWithLinkedStatus.java
@@ -1,8 +1,8 @@
-package com.clubber.ClubberServer.domain.calendar.dto;
+package com.clubber.domain.calendar.dto;
-import com.clubber.ClubberServer.domain.calendar.domain.Calendar;
-import com.clubber.ClubberServer.domain.recruit.domain.RecruitType;
-import com.clubber.ClubberServer.domain.user.domain.AccountRole;
+import com.clubber.domain.calendar.domain.Calendar;
+import com.clubber.domain.recruit.domain.RecruitType;
+import com.clubber.domain.domains.user.domain.AccountRole;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Builder;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/calendar/dto/GetNextAlwaysCalendarRequest.java b/Clubber-External/src/main/java/com/clubber/domain/calendar/dto/GetNextAlwaysCalendarRequest.java
similarity index 91%
rename from src/main/java/com/clubber/ClubberServer/domain/calendar/dto/GetNextAlwaysCalendarRequest.java
rename to Clubber-External/src/main/java/com/clubber/domain/calendar/dto/GetNextAlwaysCalendarRequest.java
index bd95a5449..fe9929d06 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/calendar/dto/GetNextAlwaysCalendarRequest.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/calendar/dto/GetNextAlwaysCalendarRequest.java
@@ -1,4 +1,4 @@
-package com.clubber.ClubberServer.domain.calendar.dto;
+package com.clubber.domain.calendar.dto;
import jakarta.validation.constraints.*;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/calendar/dto/GetNonAlwaysCalendarResponse.java b/Clubber-External/src/main/java/com/clubber/domain/calendar/dto/GetNonAlwaysCalendarResponse.java
similarity index 93%
rename from src/main/java/com/clubber/ClubberServer/domain/calendar/dto/GetNonAlwaysCalendarResponse.java
rename to Clubber-External/src/main/java/com/clubber/domain/calendar/dto/GetNonAlwaysCalendarResponse.java
index c3c59538a..507cd8a3b 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/calendar/dto/GetNonAlwaysCalendarResponse.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/calendar/dto/GetNonAlwaysCalendarResponse.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.domain.calendar.dto;
+package com.clubber.domain.calendar.dto;
-import com.clubber.ClubberServer.domain.calendar.domain.Calendar;
+import com.clubber.domain.calendar.domain.Calendar;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import java.time.LocalDateTime;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/calendar/dto/GetTodayCalendarResponse.java b/Clubber-External/src/main/java/com/clubber/domain/calendar/dto/GetTodayCalendarResponse.java
similarity index 77%
rename from src/main/java/com/clubber/ClubberServer/domain/calendar/dto/GetTodayCalendarResponse.java
rename to Clubber-External/src/main/java/com/clubber/domain/calendar/dto/GetTodayCalendarResponse.java
index 938ffa112..081f20802 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/calendar/dto/GetTodayCalendarResponse.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/calendar/dto/GetTodayCalendarResponse.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.domain.calendar.dto;
+package com.clubber.domain.calendar.dto;
-import com.clubber.ClubberServer.domain.club.domain.Club;
+import com.clubber.domain.domains.club.domain.Club;
import io.swagger.v3.oas.annotations.media.Schema;
public record GetTodayCalendarResponse(
diff --git a/src/main/java/com/clubber/ClubberServer/domain/calendar/dto/UpdateCalendarRequest.java b/Clubber-External/src/main/java/com/clubber/domain/calendar/dto/UpdateCalendarRequest.java
similarity index 89%
rename from src/main/java/com/clubber/ClubberServer/domain/calendar/dto/UpdateCalendarRequest.java
rename to Clubber-External/src/main/java/com/clubber/domain/calendar/dto/UpdateCalendarRequest.java
index a50578c88..a230e2956 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/calendar/dto/UpdateCalendarRequest.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/calendar/dto/UpdateCalendarRequest.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.domain.calendar.dto;
+package com.clubber.domain.calendar.dto;
-import com.clubber.ClubberServer.domain.recruit.domain.RecruitType;
+import com.clubber.domain.recruit.domain.RecruitType;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/calendar/exception/CalendarErrorCode.java b/Clubber-External/src/main/java/com/clubber/domain/calendar/exception/CalendarErrorCode.java
similarity index 81%
rename from src/main/java/com/clubber/ClubberServer/domain/calendar/exception/CalendarErrorCode.java
rename to Clubber-External/src/main/java/com/clubber/domain/calendar/exception/CalendarErrorCode.java
index 8b4d12d8f..890035ca0 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/calendar/exception/CalendarErrorCode.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/calendar/exception/CalendarErrorCode.java
@@ -1,7 +1,7 @@
-package com.clubber.ClubberServer.domain.calendar.exception;
+package com.clubber.domain.calendar.exception;
-import com.clubber.ClubberServer.global.exception.BaseErrorCode;
-import com.clubber.ClubberServer.global.exception.ErrorReason;
+import com.clubber.common.exception.BaseErrorCode;
+import com.clubber.common.exception.ErrorReason;
import lombok.AllArgsConstructor;
import org.springframework.http.HttpStatus;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/calendar/exception/CalendarInvalidMonthException.java b/Clubber-External/src/main/java/com/clubber/domain/calendar/exception/CalendarInvalidMonthException.java
similarity index 68%
rename from src/main/java/com/clubber/ClubberServer/domain/calendar/exception/CalendarInvalidMonthException.java
rename to Clubber-External/src/main/java/com/clubber/domain/calendar/exception/CalendarInvalidMonthException.java
index f9797a3a7..94ccf1479 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/calendar/exception/CalendarInvalidMonthException.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/calendar/exception/CalendarInvalidMonthException.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.domain.calendar.exception;
+package com.clubber.domain.calendar.exception;
-import com.clubber.ClubberServer.global.exception.BaseException;
+import com.clubber.common.exception.BaseException;
public class CalendarInvalidMonthException extends BaseException {
diff --git a/src/main/java/com/clubber/ClubberServer/domain/calendar/exception/CalendarNotFoundException.java b/Clubber-External/src/main/java/com/clubber/domain/calendar/exception/CalendarNotFoundException.java
similarity index 66%
rename from src/main/java/com/clubber/ClubberServer/domain/calendar/exception/CalendarNotFoundException.java
rename to Clubber-External/src/main/java/com/clubber/domain/calendar/exception/CalendarNotFoundException.java
index 061882752..c6817ae94 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/calendar/exception/CalendarNotFoundException.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/calendar/exception/CalendarNotFoundException.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.domain.calendar.exception;
+package com.clubber.domain.calendar.exception;
-import com.clubber.ClubberServer.global.exception.BaseException;
+import com.clubber.common.exception.BaseException;
public class CalendarNotFoundException extends BaseException {
diff --git a/src/main/java/com/clubber/ClubberServer/domain/calendar/exception/CalendarPostUnauthorizedException.java b/Clubber-External/src/main/java/com/clubber/domain/calendar/exception/CalendarPostUnauthorizedException.java
similarity index 69%
rename from src/main/java/com/clubber/ClubberServer/domain/calendar/exception/CalendarPostUnauthorizedException.java
rename to Clubber-External/src/main/java/com/clubber/domain/calendar/exception/CalendarPostUnauthorizedException.java
index ac7b3f9aa..03e29bf67 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/calendar/exception/CalendarPostUnauthorizedException.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/calendar/exception/CalendarPostUnauthorizedException.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.domain.calendar.exception;
+package com.clubber.domain.calendar.exception;
-import com.clubber.ClubberServer.global.exception.BaseException;
+import com.clubber.common.exception.BaseException;
public class CalendarPostUnauthorizedException extends BaseException {
diff --git a/src/main/java/com/clubber/ClubberServer/domain/calendar/implement/CalendarAppender.java b/Clubber-External/src/main/java/com/clubber/domain/calendar/implement/CalendarAppender.java
similarity index 74%
rename from src/main/java/com/clubber/ClubberServer/domain/calendar/implement/CalendarAppender.java
rename to Clubber-External/src/main/java/com/clubber/domain/calendar/implement/CalendarAppender.java
index 6ca21a05b..53f772cc0 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/calendar/implement/CalendarAppender.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/calendar/implement/CalendarAppender.java
@@ -1,9 +1,9 @@
-package com.clubber.ClubberServer.domain.calendar.implement;
+package com.clubber.domain.calendar.implement;
-import com.clubber.ClubberServer.domain.calendar.dto.UpdateCalendarRequest;
-import com.clubber.ClubberServer.domain.calendar.domain.Calendar;
-import com.clubber.ClubberServer.domain.calendar.repository.CalendarRepository;
-import com.clubber.ClubberServer.domain.recruit.domain.RecruitType;
+import com.clubber.domain.calendar.dto.UpdateCalendarRequest;
+import com.clubber.domain.calendar.domain.Calendar;
+import com.clubber.domain.calendar.repository.CalendarRepository;
+import com.clubber.domain.recruit.domain.RecruitType;
import java.time.LocalDateTime;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/calendar/implement/CalendarMapper.java b/Clubber-External/src/main/java/com/clubber/domain/calendar/implement/CalendarMapper.java
similarity index 79%
rename from src/main/java/com/clubber/ClubberServer/domain/calendar/implement/CalendarMapper.java
rename to Clubber-External/src/main/java/com/clubber/domain/calendar/implement/CalendarMapper.java
index e40d292c1..8b05d555f 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/calendar/implement/CalendarMapper.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/calendar/implement/CalendarMapper.java
@@ -1,14 +1,14 @@
-package com.clubber.ClubberServer.domain.calendar.implement;
+package com.clubber.domain.calendar.implement;
-import com.clubber.ClubberServer.domain.calendar.domain.Calendar;
-import com.clubber.ClubberServer.domain.calendar.dto.*;
-import com.clubber.ClubberServer.domain.club.domain.Club;
-import com.clubber.ClubberServer.domain.recruit.domain.Recruit;
-import com.clubber.ClubberServer.domain.recruit.implement.RecruitReader;
-import com.clubber.ClubberServer.domain.user.domain.AccountRole;
-import com.clubber.ClubberServer.global.common.page.PageResponse;
-import com.clubber.ClubberServer.global.common.slice.SliceResponse;
-import com.clubber.ClubberServer.global.util.SliceUtil;
+import com.clubber.domain.calendar.domain.Calendar;
+import com.clubber.domain.calendar.dto.*;
+import com.clubber.domain.domains.club.domain.Club;
+import com.clubber.domain.recruit.domain.Recruit;
+import com.clubber.domain.recruit.implement.RecruitReader;
+import com.clubber.domain.domains.user.domain.AccountRole;
+import com.clubber.global.common.page.PageResponse;
+import com.clubber.global.common.slice.SliceResponse;
+import com.clubber.global.util.SliceUtil;
import lombok.RequiredArgsConstructor;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/calendar/implement/CalendarReader.java b/Clubber-External/src/main/java/com/clubber/domain/calendar/implement/CalendarReader.java
similarity index 83%
rename from src/main/java/com/clubber/ClubberServer/domain/calendar/implement/CalendarReader.java
rename to Clubber-External/src/main/java/com/clubber/domain/calendar/implement/CalendarReader.java
index ac9d0ca2b..3f49eefe6 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/calendar/implement/CalendarReader.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/calendar/implement/CalendarReader.java
@@ -1,14 +1,14 @@
-package com.clubber.ClubberServer.domain.calendar.implement;
+package com.clubber.domain.calendar.implement;
-import com.clubber.ClubberServer.domain.calendar.domain.Calendar;
-import com.clubber.ClubberServer.domain.calendar.domain.CalendarStatus;
-import com.clubber.ClubberServer.domain.calendar.domain.OrderStatus;
-import com.clubber.ClubberServer.domain.calendar.dto.GetAlwaysCalendarResponse;
-import com.clubber.ClubberServer.domain.calendar.dto.GetCalendarDuplicateRequest;
-import com.clubber.ClubberServer.domain.calendar.exception.CalendarNotFoundException;
-import com.clubber.ClubberServer.domain.calendar.repository.CalendarRepository;
-import com.clubber.ClubberServer.domain.club.domain.Club;
-import com.clubber.ClubberServer.domain.recruit.domain.RecruitType;
+import com.clubber.domain.calendar.domain.Calendar;
+import com.clubber.domain.calendar.domain.CalendarStatus;
+import com.clubber.domain.calendar.domain.OrderStatus;
+import com.clubber.domain.calendar.dto.GetAlwaysCalendarResponse;
+import com.clubber.domain.calendar.dto.GetCalendarDuplicateRequest;
+import com.clubber.domain.calendar.exception.CalendarNotFoundException;
+import com.clubber.domain.calendar.repository.CalendarRepository;
+import com.clubber.domain.domains.club.domain.Club;
+import com.clubber.domain.recruit.domain.RecruitType;
import lombok.RequiredArgsConstructor;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/calendar/implement/CalendarValidator.java b/Clubber-External/src/main/java/com/clubber/domain/calendar/implement/CalendarValidator.java
similarity index 55%
rename from src/main/java/com/clubber/ClubberServer/domain/calendar/implement/CalendarValidator.java
rename to Clubber-External/src/main/java/com/clubber/domain/calendar/implement/CalendarValidator.java
index fb1be2782..866cbab90 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/calendar/implement/CalendarValidator.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/calendar/implement/CalendarValidator.java
@@ -1,9 +1,9 @@
-package com.clubber.ClubberServer.domain.calendar.implement;
+package com.clubber.domain.calendar.implement;
-import com.clubber.ClubberServer.domain.admin.domain.Admin;
-import com.clubber.ClubberServer.domain.calendar.domain.Calendar;
-import com.clubber.ClubberServer.domain.calendar.exception.CalendarPostUnauthorizedException;
-import com.clubber.ClubberServer.domain.calendar.exception.CalendarInvalidMonthException;
+import com.clubber.domain.domains.admin.domain.Admin;
+import com.clubber.domain.calendar.domain.Calendar;
+import com.clubber.domain.calendar.exception.CalendarPostUnauthorizedException;
+import com.clubber.domain.calendar.exception.CalendarInvalidMonthException;
import org.springframework.stereotype.Component;
@Component
diff --git a/src/main/java/com/clubber/ClubberServer/domain/calendar/repository/CalendarCustomRepository.java b/Clubber-External/src/main/java/com/clubber/domain/calendar/repository/CalendarCustomRepository.java
similarity index 66%
rename from src/main/java/com/clubber/ClubberServer/domain/calendar/repository/CalendarCustomRepository.java
rename to Clubber-External/src/main/java/com/clubber/domain/calendar/repository/CalendarCustomRepository.java
index d4a26d69a..e39a5f565 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/calendar/repository/CalendarCustomRepository.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/calendar/repository/CalendarCustomRepository.java
@@ -1,10 +1,10 @@
-package com.clubber.ClubberServer.domain.calendar.repository;
+package com.clubber.domain.calendar.repository;
-import com.clubber.ClubberServer.domain.calendar.domain.Calendar;
-import com.clubber.ClubberServer.domain.calendar.domain.CalendarStatus;
-import com.clubber.ClubberServer.domain.calendar.domain.OrderStatus;
-import com.clubber.ClubberServer.domain.club.domain.Club;
-import com.clubber.ClubberServer.domain.recruit.domain.RecruitType;
+import com.clubber.domain.calendar.domain.Calendar;
+import com.clubber.domain.calendar.domain.CalendarStatus;
+import com.clubber.domain.calendar.domain.OrderStatus;
+import com.clubber.domain.domains.club.domain.Club;
+import com.clubber.domain.recruit.domain.RecruitType;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/calendar/repository/CalendarCustomRepositoryImpl.java b/Clubber-External/src/main/java/com/clubber/domain/calendar/repository/CalendarCustomRepositoryImpl.java
similarity index 90%
rename from src/main/java/com/clubber/ClubberServer/domain/calendar/repository/CalendarCustomRepositoryImpl.java
rename to Clubber-External/src/main/java/com/clubber/domain/calendar/repository/CalendarCustomRepositoryImpl.java
index f8d7a013b..fd9eb61eb 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/calendar/repository/CalendarCustomRepositoryImpl.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/calendar/repository/CalendarCustomRepositoryImpl.java
@@ -1,10 +1,10 @@
-package com.clubber.ClubberServer.domain.calendar.repository;
+package com.clubber.domain.calendar.repository;
-import com.clubber.ClubberServer.domain.calendar.domain.Calendar;
-import com.clubber.ClubberServer.domain.calendar.domain.CalendarStatus;
-import com.clubber.ClubberServer.domain.calendar.domain.OrderStatus;
-import com.clubber.ClubberServer.domain.club.domain.Club;
-import com.clubber.ClubberServer.domain.recruit.domain.RecruitType;
+import com.clubber.domain.calendar.domain.Calendar;
+import com.clubber.domain.calendar.domain.CalendarStatus;
+import com.clubber.domain.calendar.domain.OrderStatus;
+import com.clubber.domain.domains.club.domain.Club;
+import com.clubber.domain.recruit.domain.RecruitType;
import com.querydsl.core.types.Expression;
import com.querydsl.core.types.Order;
import com.querydsl.core.types.OrderSpecifier;
@@ -19,8 +19,8 @@
import java.time.LocalDateTime;
import java.util.List;
-import static com.clubber.ClubberServer.domain.calendar.domain.QCalendar.calendar;
-import static com.clubber.ClubberServer.domain.recruit.domain.RecruitType.ALWAYS;
+import static com.clubber.domain.calendar.domain.QCalendar.calendar;
+import static com.clubber.domain.recruit.domain.RecruitType.ALWAYS;
@RequiredArgsConstructor
public class CalendarCustomRepositoryImpl implements CalendarCustomRepository {
diff --git a/src/main/java/com/clubber/ClubberServer/domain/calendar/repository/CalendarFilterType.java b/Clubber-External/src/main/java/com/clubber/domain/calendar/repository/CalendarFilterType.java
similarity index 57%
rename from src/main/java/com/clubber/ClubberServer/domain/calendar/repository/CalendarFilterType.java
rename to Clubber-External/src/main/java/com/clubber/domain/calendar/repository/CalendarFilterType.java
index 1e64610ba..099d4805b 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/calendar/repository/CalendarFilterType.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/calendar/repository/CalendarFilterType.java
@@ -1,4 +1,4 @@
-package com.clubber.ClubberServer.domain.calendar.repository;
+package com.clubber.domain.calendar.repository;
public enum CalendarFilterType {
ALL,
diff --git a/src/main/java/com/clubber/ClubberServer/domain/calendar/repository/CalendarRepository.java b/Clubber-External/src/main/java/com/clubber/domain/calendar/repository/CalendarRepository.java
similarity index 78%
rename from src/main/java/com/clubber/ClubberServer/domain/calendar/repository/CalendarRepository.java
rename to Clubber-External/src/main/java/com/clubber/domain/calendar/repository/CalendarRepository.java
index 1d4a9a1ba..b1c4e3de9 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/calendar/repository/CalendarRepository.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/calendar/repository/CalendarRepository.java
@@ -1,8 +1,8 @@
-package com.clubber.ClubberServer.domain.calendar.repository;
+package com.clubber.domain.calendar.repository;
-import com.clubber.ClubberServer.domain.calendar.domain.Calendar;
-import com.clubber.ClubberServer.domain.calendar.dto.GetAlwaysCalendarResponse;
-import com.clubber.ClubberServer.domain.recruit.domain.RecruitType;
+import com.clubber.domain.calendar.domain.Calendar;
+import com.clubber.domain.calendar.dto.GetAlwaysCalendarResponse;
+import com.clubber.domain.recruit.domain.RecruitType;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
@@ -22,7 +22,7 @@ List findCalendarsWithinDateRange(LocalDateTime startOfMonth,
LocalDateTime startOfNextMonth, List recruitTypes);
- @Query("SELECT new com.clubber.ClubberServer.domain.calendar.dto.GetAlwaysCalendarResponse( " +
+ @Query("SELECT new com.clubber.domain.calendar.dto.GetAlwaysCalendarResponse( " +
"c.club.id, c.club.name,CAST(COUNT(c)-1 AS long)) " +
"FROM Calendar c " +
"WHERE c.recruitType = :recruitType " +
diff --git a/src/main/java/com/clubber/ClubberServer/domain/calendar/service/CalendarAdminService.java b/Clubber-External/src/main/java/com/clubber/domain/calendar/service/CalendarAdminService.java
similarity index 72%
rename from src/main/java/com/clubber/ClubberServer/domain/calendar/service/CalendarAdminService.java
rename to Clubber-External/src/main/java/com/clubber/domain/calendar/service/CalendarAdminService.java
index 89d6db068..9c83a3252 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/calendar/service/CalendarAdminService.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/calendar/service/CalendarAdminService.java
@@ -1,18 +1,18 @@
-package com.clubber.ClubberServer.domain.calendar.service;
+package com.clubber.domain.calendar.service;
-import com.clubber.ClubberServer.domain.admin.domain.Admin;
-import com.clubber.ClubberServer.domain.admin.implement.AdminReader;
-import com.clubber.ClubberServer.domain.calendar.domain.Calendar;
-import com.clubber.ClubberServer.domain.calendar.domain.CalendarStatus;
-import com.clubber.ClubberServer.domain.calendar.domain.OrderStatus;
-import com.clubber.ClubberServer.domain.calendar.dto.*;
-import com.clubber.ClubberServer.domain.calendar.implement.CalendarAppender;
-import com.clubber.ClubberServer.domain.calendar.implement.CalendarMapper;
-import com.clubber.ClubberServer.domain.calendar.implement.CalendarReader;
-import com.clubber.ClubberServer.domain.calendar.implement.CalendarValidator;
-import com.clubber.ClubberServer.domain.club.domain.Club;
-import com.clubber.ClubberServer.domain.recruit.domain.RecruitType;
-import com.clubber.ClubberServer.global.common.page.PageResponse;
+import com.clubber.domain.domains.admin.domain.Admin;
+import com.clubber.domain.admin.implement.AdminReader;
+import com.clubber.domain.calendar.domain.Calendar;
+import com.clubber.domain.calendar.domain.CalendarStatus;
+import com.clubber.domain.calendar.domain.OrderStatus;
+import com.clubber.domain.calendar.dto.*;
+import com.clubber.domain.calendar.implement.CalendarAppender;
+import com.clubber.domain.calendar.implement.CalendarMapper;
+import com.clubber.domain.calendar.implement.CalendarReader;
+import com.clubber.domain.calendar.implement.CalendarValidator;
+import com.clubber.domain.domains.club.domain.Club;
+import com.clubber.domain.recruit.domain.RecruitType;
+import com.clubber.global.common.page.PageResponse;
import lombok.RequiredArgsConstructor;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/calendar/service/CalendarService.java b/Clubber-External/src/main/java/com/clubber/domain/calendar/service/CalendarService.java
similarity index 78%
rename from src/main/java/com/clubber/ClubberServer/domain/calendar/service/CalendarService.java
rename to Clubber-External/src/main/java/com/clubber/domain/calendar/service/CalendarService.java
index e17aa3e74..069e48d7c 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/calendar/service/CalendarService.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/calendar/service/CalendarService.java
@@ -1,13 +1,13 @@
-package com.clubber.ClubberServer.domain.calendar.service;
+package com.clubber.domain.calendar.service;
-import com.clubber.ClubberServer.domain.calendar.domain.Calendar;
-import com.clubber.ClubberServer.domain.calendar.dto.*;
-import com.clubber.ClubberServer.domain.calendar.implement.CalendarMapper;
-import com.clubber.ClubberServer.domain.calendar.implement.CalendarReader;
-import com.clubber.ClubberServer.domain.calendar.implement.CalendarValidator;
-import com.clubber.ClubberServer.domain.club.domain.Club;
-import com.clubber.ClubberServer.global.common.slice.SliceResponse;
+import com.clubber.domain.calendar.domain.Calendar;
+import com.clubber.domain.calendar.dto.*;
+import com.clubber.domain.calendar.implement.CalendarMapper;
+import com.clubber.domain.calendar.implement.CalendarReader;
+import com.clubber.domain.calendar.implement.CalendarValidator;
+import com.clubber.domain.domains.club.domain.Club;
+import com.clubber.global.common.slice.SliceResponse;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/club/controller/ClubCategoryController.java b/Clubber-External/src/main/java/com/clubber/domain/club/controller/ClubCategoryController.java
similarity index 84%
rename from src/main/java/com/clubber/ClubberServer/domain/club/controller/ClubCategoryController.java
rename to Clubber-External/src/main/java/com/clubber/domain/club/controller/ClubCategoryController.java
index 86b756652..1ab01306e 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/club/controller/ClubCategoryController.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/club/controller/ClubCategoryController.java
@@ -1,10 +1,10 @@
-package com.clubber.ClubberServer.domain.club.controller;
+package com.clubber.domain.club.controller;
-import com.clubber.ClubberServer.domain.club.domain.College;
-import com.clubber.ClubberServer.domain.club.dto.CollegeResponse;
-import com.clubber.ClubberServer.domain.club.service.ClubCategoryService;
-import com.clubber.ClubberServer.global.config.swagger.DisableSwaggerSecurity;
-import com.clubber.ClubberServer.global.vo.enums.EnumMapperVO;
+import com.clubber.domain.domains.club.domain.College;
+import com.clubber.domain.club.dto.CollegeResponse;
+import com.clubber.domain.club.service.ClubCategoryService;
+import com.clubber.global.config.swagger.DisableSwaggerSecurity;
+import com.clubber.common.vo.enums.EnumMapperVO;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/club/controller/ClubController.java b/Clubber-External/src/main/java/com/clubber/domain/club/controller/ClubController.java
similarity index 87%
rename from src/main/java/com/clubber/ClubberServer/domain/club/controller/ClubController.java
rename to Clubber-External/src/main/java/com/clubber/domain/club/controller/ClubController.java
index 4307c2fa7..f7373c05d 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/club/controller/ClubController.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/club/controller/ClubController.java
@@ -1,11 +1,11 @@
-package com.clubber.ClubberServer.domain.club.controller;
+package com.clubber.domain.club.controller;
-import com.clubber.ClubberServer.domain.club.domain.Department;
-import com.clubber.ClubberServer.domain.club.domain.Division;
-import com.clubber.ClubberServer.domain.club.domain.Hashtag;
-import com.clubber.ClubberServer.domain.club.dto.*;
-import com.clubber.ClubberServer.domain.club.service.ClubService;
-import com.clubber.ClubberServer.global.config.swagger.DisableSwaggerSecurity;
+import com.clubber.domain.club.dto.*;
+import com.clubber.domain.domains.club.domain.Department;
+import com.clubber.domain.domains.club.domain.Division;
+import com.clubber.domain.domains.club.domain.Hashtag;
+import com.clubber.domain.club.service.ClubService;
+import com.clubber.global.config.swagger.DisableSwaggerSecurity;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/club/dto/CollegeResponse.java b/Clubber-External/src/main/java/com/clubber/domain/club/dto/CollegeResponse.java
similarity index 84%
rename from src/main/java/com/clubber/ClubberServer/domain/club/dto/CollegeResponse.java
rename to Clubber-External/src/main/java/com/clubber/domain/club/dto/CollegeResponse.java
index ba03f595a..449c394ae 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/club/dto/CollegeResponse.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/club/dto/CollegeResponse.java
@@ -1,7 +1,7 @@
-package com.clubber.ClubberServer.domain.club.dto;
+package com.clubber.domain.club.dto;
-import com.clubber.ClubberServer.domain.club.domain.College;
-import com.clubber.ClubberServer.global.vo.enums.EnumMapperVO;
+import com.clubber.domain.domains.club.domain.College;
+import com.clubber.common.vo.enums.EnumMapperVO;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/club/dto/DepartmentSmallDto.java b/Clubber-External/src/main/java/com/clubber/domain/club/dto/DepartmentSmallDto.java
similarity index 84%
rename from src/main/java/com/clubber/ClubberServer/domain/club/dto/DepartmentSmallDto.java
rename to Clubber-External/src/main/java/com/clubber/domain/club/dto/DepartmentSmallDto.java
index 3051424d3..93319bcd8 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/club/dto/DepartmentSmallDto.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/club/dto/DepartmentSmallDto.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.domain.club.dto;
+package com.clubber.domain.club.dto;
-import com.clubber.ClubberServer.domain.club.domain.Department;
+import com.clubber.domain.domains.club.domain.Department;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/club/dto/GetClubByDivisionResponse.java b/Clubber-External/src/main/java/com/clubber/domain/club/dto/GetClubByDivisionResponse.java
similarity index 86%
rename from src/main/java/com/clubber/ClubberServer/domain/club/dto/GetClubByDivisionResponse.java
rename to Clubber-External/src/main/java/com/clubber/domain/club/dto/GetClubByDivisionResponse.java
index c77f2f08e..0b6730f84 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/club/dto/GetClubByDivisionResponse.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/club/dto/GetClubByDivisionResponse.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.domain.club.dto;
+package com.clubber.domain.club.dto;
-import com.clubber.ClubberServer.domain.club.domain.Division;
+import com.clubber.domain.domains.club.domain.Division;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/club/dto/GetClubByHashTagResponse.java b/Clubber-External/src/main/java/com/clubber/domain/club/dto/GetClubByHashTagResponse.java
similarity index 87%
rename from src/main/java/com/clubber/ClubberServer/domain/club/dto/GetClubByHashTagResponse.java
rename to Clubber-External/src/main/java/com/clubber/domain/club/dto/GetClubByHashTagResponse.java
index 34580681b..083e58535 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/club/dto/GetClubByHashTagResponse.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/club/dto/GetClubByHashTagResponse.java
@@ -1,7 +1,7 @@
-package com.clubber.ClubberServer.domain.club.dto;
+package com.clubber.domain.club.dto;
-import com.clubber.ClubberServer.domain.club.domain.Club;
-import com.clubber.ClubberServer.global.vo.image.ImageVO;
+import com.clubber.domain.domains.club.domain.Club;
+import com.clubber.domain.common.vo.ImageVO;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AccessLevel;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/club/dto/GetClubInfoResponse.java b/Clubber-External/src/main/java/com/clubber/domain/club/dto/GetClubInfoResponse.java
similarity index 91%
rename from src/main/java/com/clubber/ClubberServer/domain/club/dto/GetClubInfoResponse.java
rename to Clubber-External/src/main/java/com/clubber/domain/club/dto/GetClubInfoResponse.java
index 8d18462b6..38b96d7e3 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/club/dto/GetClubInfoResponse.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/club/dto/GetClubInfoResponse.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.domain.club.dto;
+package com.clubber.domain.club.dto;
-import com.clubber.ClubberServer.domain.club.domain.ClubInfo;
+import com.clubber.domain.domains.club.domain.ClubInfo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AccessLevel;
import lombok.Builder;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/club/dto/GetClubIntoCardResponse.java b/Clubber-External/src/main/java/com/clubber/domain/club/dto/GetClubIntoCardResponse.java
similarity index 87%
rename from src/main/java/com/clubber/ClubberServer/domain/club/dto/GetClubIntoCardResponse.java
rename to Clubber-External/src/main/java/com/clubber/domain/club/dto/GetClubIntoCardResponse.java
index 443f8ee2f..67b1573da 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/club/dto/GetClubIntoCardResponse.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/club/dto/GetClubIntoCardResponse.java
@@ -1,7 +1,7 @@
-package com.clubber.ClubberServer.domain.club.dto;
+package com.clubber.domain.club.dto;
-import com.clubber.ClubberServer.domain.club.domain.Club;
-import com.clubber.ClubberServer.global.vo.image.ImageVO;
+import com.clubber.domain.domains.club.domain.Club;
+import com.clubber.domain.common.vo.ImageVO;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/club/dto/GetClubPopularResponse.java b/Clubber-External/src/main/java/com/clubber/domain/club/dto/GetClubPopularResponse.java
similarity index 87%
rename from src/main/java/com/clubber/ClubberServer/domain/club/dto/GetClubPopularResponse.java
rename to Clubber-External/src/main/java/com/clubber/domain/club/dto/GetClubPopularResponse.java
index 93e416745..c09f43eac 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/club/dto/GetClubPopularResponse.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/club/dto/GetClubPopularResponse.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.domain.club.dto;
+package com.clubber.domain.club.dto;
-import com.clubber.ClubberServer.domain.club.domain.Club;
+import com.clubber.domain.domains.club.domain.Club;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/club/dto/GetClubResponse.java b/Clubber-External/src/main/java/com/clubber/domain/club/dto/GetClubResponse.java
similarity index 91%
rename from src/main/java/com/clubber/ClubberServer/domain/club/dto/GetClubResponse.java
rename to Clubber-External/src/main/java/com/clubber/domain/club/dto/GetClubResponse.java
index 198e9ffd6..88079595e 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/club/dto/GetClubResponse.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/club/dto/GetClubResponse.java
@@ -1,7 +1,7 @@
-package com.clubber.ClubberServer.domain.club.dto;
+package com.clubber.domain.club.dto;
-import com.clubber.ClubberServer.domain.club.domain.Club;
-import com.clubber.ClubberServer.global.vo.image.ImageVO;
+import com.clubber.domain.domains.club.domain.Club;
+import com.clubber.domain.common.vo.ImageVO;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AccessLevel;
import lombok.Builder;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/club/dto/GetClubSearchResponse.java b/Clubber-External/src/main/java/com/clubber/domain/club/dto/GetClubSearchResponse.java
similarity index 88%
rename from src/main/java/com/clubber/ClubberServer/domain/club/dto/GetClubSearchResponse.java
rename to Clubber-External/src/main/java/com/clubber/domain/club/dto/GetClubSearchResponse.java
index 49bd03224..9ae832603 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/club/dto/GetClubSearchResponse.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/club/dto/GetClubSearchResponse.java
@@ -1,7 +1,7 @@
-package com.clubber.ClubberServer.domain.club.dto;
+package com.clubber.domain.club.dto;
-import com.clubber.ClubberServer.domain.club.domain.Club;
-import com.clubber.ClubberServer.global.vo.image.ImageVO;
+import com.clubber.domain.domains.club.domain.Club;
+import com.clubber.domain.common.vo.ImageVO;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AccessLevel;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/club/dto/GetClubsByHashTagResponse.java b/Clubber-External/src/main/java/com/clubber/domain/club/dto/GetClubsByHashTagResponse.java
similarity index 86%
rename from src/main/java/com/clubber/ClubberServer/domain/club/dto/GetClubsByHashTagResponse.java
rename to Clubber-External/src/main/java/com/clubber/domain/club/dto/GetClubsByHashTagResponse.java
index 6f53f17fc..e9b4d0250 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/club/dto/GetClubsByHashTagResponse.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/club/dto/GetClubsByHashTagResponse.java
@@ -1,7 +1,7 @@
-package com.clubber.ClubberServer.domain.club.dto;
+package com.clubber.domain.club.dto;
-import com.clubber.ClubberServer.domain.club.domain.Hashtag;
+import com.clubber.domain.domains.club.domain.Hashtag;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.List;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/club/dto/GetClubsSearchForSignUpResponse.java b/Clubber-External/src/main/java/com/clubber/domain/club/dto/GetClubsSearchForSignUpResponse.java
similarity index 88%
rename from src/main/java/com/clubber/ClubberServer/domain/club/dto/GetClubsSearchForSignUpResponse.java
rename to Clubber-External/src/main/java/com/clubber/domain/club/dto/GetClubsSearchForSignUpResponse.java
index cf80748f1..95fcb0f40 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/club/dto/GetClubsSearchForSignUpResponse.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/club/dto/GetClubsSearchForSignUpResponse.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.domain.club.dto;
+package com.clubber.domain.club.dto;
-import com.clubber.ClubberServer.domain.club.domain.Club;
+import com.clubber.domain.domains.club.domain.Club;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/club/dto/GetClubsSearchResponse.java b/Clubber-External/src/main/java/com/clubber/domain/club/dto/GetClubsSearchResponse.java
similarity index 92%
rename from src/main/java/com/clubber/ClubberServer/domain/club/dto/GetClubsSearchResponse.java
rename to Clubber-External/src/main/java/com/clubber/domain/club/dto/GetClubsSearchResponse.java
index 9b25457d7..2fd3b1281 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/club/dto/GetClubsSearchResponse.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/club/dto/GetClubsSearchResponse.java
@@ -1,4 +1,4 @@
-package com.clubber.ClubberServer.domain.club.dto;
+package com.clubber.domain.club.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/club/dto/GetOfficialClubGroupResponse.java b/Clubber-External/src/main/java/com/clubber/domain/club/dto/GetOfficialClubGroupResponse.java
similarity index 87%
rename from src/main/java/com/clubber/ClubberServer/domain/club/dto/GetOfficialClubGroupResponse.java
rename to Clubber-External/src/main/java/com/clubber/domain/club/dto/GetOfficialClubGroupResponse.java
index 8c5b6954c..70653041a 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/club/dto/GetOfficialClubGroupResponse.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/club/dto/GetOfficialClubGroupResponse.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.domain.club.dto;
+package com.clubber.domain.club.dto;
-import com.clubber.ClubberServer.domain.club.domain.ClubType;
+import com.clubber.domain.domains.club.domain.ClubType;
import io.swagger.v3.oas.annotations.media.Schema;
import java.util.List;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/club/dto/GetOfficialClubResponse.java b/Clubber-External/src/main/java/com/clubber/domain/club/dto/GetOfficialClubResponse.java
similarity index 88%
rename from src/main/java/com/clubber/ClubberServer/domain/club/dto/GetOfficialClubResponse.java
rename to Clubber-External/src/main/java/com/clubber/domain/club/dto/GetOfficialClubResponse.java
index 00fbf12b1..44c8c337e 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/club/dto/GetOfficialClubResponse.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/club/dto/GetOfficialClubResponse.java
@@ -1,7 +1,7 @@
-package com.clubber.ClubberServer.domain.club.dto;
+package com.clubber.domain.club.dto;
-import com.clubber.ClubberServer.domain.club.domain.Club;
-import com.clubber.ClubberServer.global.vo.image.ImageVO;
+import com.clubber.domain.domains.club.domain.Club;
+import com.clubber.domain.common.vo.ImageVO;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/club/dto/GetSummaryClubGroupResponse.java b/Clubber-External/src/main/java/com/clubber/domain/club/dto/GetSummaryClubGroupResponse.java
similarity index 88%
rename from src/main/java/com/clubber/ClubberServer/domain/club/dto/GetSummaryClubGroupResponse.java
rename to Clubber-External/src/main/java/com/clubber/domain/club/dto/GetSummaryClubGroupResponse.java
index 3f21d6267..1f294850b 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/club/dto/GetSummaryClubGroupResponse.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/club/dto/GetSummaryClubGroupResponse.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.domain.club.dto;
+package com.clubber.domain.club.dto;
-import com.clubber.ClubberServer.domain.club.domain.Division;
+import com.clubber.domain.domains.club.domain.Division;
import io.swagger.v3.oas.annotations.media.Schema;
import java.util.List;
import lombok.AccessLevel;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/club/dto/GetSummaryClubResponse.java b/Clubber-External/src/main/java/com/clubber/domain/club/dto/GetSummaryClubResponse.java
similarity index 86%
rename from src/main/java/com/clubber/ClubberServer/domain/club/dto/GetSummaryClubResponse.java
rename to Clubber-External/src/main/java/com/clubber/domain/club/dto/GetSummaryClubResponse.java
index 05b980048..8ddbfe07f 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/club/dto/GetSummaryClubResponse.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/club/dto/GetSummaryClubResponse.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.domain.club.dto;
+package com.clubber.domain.club.dto;
-import com.clubber.ClubberServer.domain.club.domain.Club;
+import com.clubber.domain.domains.club.domain.Club;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/club/implement/ClubAppender.java b/Clubber-External/src/main/java/com/clubber/domain/club/implement/ClubAppender.java
similarity index 62%
rename from src/main/java/com/clubber/ClubberServer/domain/club/implement/ClubAppender.java
rename to Clubber-External/src/main/java/com/clubber/domain/club/implement/ClubAppender.java
index 39303c5eb..607fec379 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/club/implement/ClubAppender.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/club/implement/ClubAppender.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.domain.club.implement;
+package com.clubber.domain.club.implement;
-import com.clubber.ClubberServer.domain.club.domain.ClubInfo;
+import com.clubber.domain.domains.club.domain.ClubInfo;
import org.springframework.stereotype.Component;
@Component
diff --git a/src/main/java/com/clubber/ClubberServer/domain/club/implement/ClubReader.java b/Clubber-External/src/main/java/com/clubber/domain/club/implement/ClubReader.java
similarity index 80%
rename from src/main/java/com/clubber/ClubberServer/domain/club/implement/ClubReader.java
rename to Clubber-External/src/main/java/com/clubber/domain/club/implement/ClubReader.java
index 9bd1d2bea..3b924f21a 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/club/implement/ClubReader.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/club/implement/ClubReader.java
@@ -1,11 +1,8 @@
-package com.clubber.ClubberServer.domain.club.implement;
+package com.clubber.domain.club.implement;
-import com.clubber.ClubberServer.domain.club.domain.*;
-import com.clubber.ClubberServer.domain.club.exception.ClubNotFoundException;
-import com.clubber.ClubberServer.domain.club.exception.DepartmentNotFoundException;
-import com.clubber.ClubberServer.domain.club.exception.DivisionNotFoundException;
-import com.clubber.ClubberServer.domain.club.exception.HashtagNotFoundException;
-import com.clubber.ClubberServer.domain.club.repository.ClubRepository;
+import com.clubber.domain.domains.club.domain.*;
+import com.clubber.domain.domains.club.exception.ClubNotFoundException;
+import com.clubber.domain.domains.club.repository.ClubRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/club/service/ClubCategoryService.java b/Clubber-External/src/main/java/com/clubber/domain/club/service/ClubCategoryService.java
similarity index 84%
rename from src/main/java/com/clubber/ClubberServer/domain/club/service/ClubCategoryService.java
rename to Clubber-External/src/main/java/com/clubber/domain/club/service/ClubCategoryService.java
index e698a1e55..9a95b501d 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/club/service/ClubCategoryService.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/club/service/ClubCategoryService.java
@@ -1,9 +1,9 @@
-package com.clubber.ClubberServer.domain.club.service;
+package com.clubber.domain.club.service;
-import com.clubber.ClubberServer.domain.club.domain.College;
-import com.clubber.ClubberServer.domain.club.dto.CollegeResponse;
-import com.clubber.ClubberServer.global.mapper.enums.EnumMapper;
-import com.clubber.ClubberServer.global.vo.enums.EnumMapperVO;
+import com.clubber.domain.domains.club.domain.College;
+import com.clubber.domain.club.dto.CollegeResponse;
+import com.clubber.common.mapper.enums.EnumMapper;
+import com.clubber.common.vo.enums.EnumMapperVO;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/club/service/ClubService.java b/Clubber-External/src/main/java/com/clubber/domain/club/service/ClubService.java
similarity index 89%
rename from src/main/java/com/clubber/ClubberServer/domain/club/service/ClubService.java
rename to Clubber-External/src/main/java/com/clubber/domain/club/service/ClubService.java
index 8e92c18ec..8ee48e180 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/club/service/ClubService.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/club/service/ClubService.java
@@ -1,9 +1,10 @@
-package com.clubber.ClubberServer.domain.club.service;
+package com.clubber.domain.club.service;
-import com.clubber.ClubberServer.domain.club.domain.*;
-import com.clubber.ClubberServer.domain.club.dto.*;
-import com.clubber.ClubberServer.domain.club.implement.ClubAppender;
-import com.clubber.ClubberServer.domain.club.implement.ClubReader;
+import com.clubber.domain.club.dto.*;
+import com.clubber.domain.club.implement.ClubAppender;
+import com.clubber.domain.club.implement.ClubReader;
+import com.clubber.domain.domains.club.domain.*;
+import com.clubber.domain.review.dto.GetClubReviewAgreedStatusResponse;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -43,9 +44,6 @@ public DepartmentSmallDto getClubsByDepartment(Department department) {
@Transactional
public GetClubResponse getClubsIndividualPage(Long clubId) {
Club club = clubReader.findById(clubId);
-
- club.validateAgreeToProvideInfo();
-
ClubInfo clubInfo = club.getClubInfo();
clubAppender.increaseClubTotalView(clubInfo);
return GetClubResponse.of(club, GetClubInfoResponse.from(clubInfo));
@@ -123,4 +121,10 @@ public List searchForSignUp(String clubName) {
.map(GetClubsSearchForSignUpResponse::from)
.collect(Collectors.toList());
}
+
+ @Transactional(readOnly = true)
+ public GetClubReviewAgreedStatusResponse getClubReviewAgreedStatus(Long clubId) {
+ Club club = clubReader.findById(clubId);
+ return GetClubReviewAgreedStatusResponse.from(club);
+ }
}
\ No newline at end of file
diff --git a/src/main/java/com/clubber/ClubberServer/domain/example/ExampleController.java b/Clubber-External/src/main/java/com/clubber/domain/example/ExampleController.java
similarity index 63%
rename from src/main/java/com/clubber/ClubberServer/domain/example/ExampleController.java
rename to Clubber-External/src/main/java/com/clubber/domain/example/ExampleController.java
index 4fc511009..9ea1389dd 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/example/ExampleController.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/example/ExampleController.java
@@ -1,13 +1,13 @@
-package com.clubber.ClubberServer.domain.example;
-
-import com.clubber.ClubberServer.domain.admin.exception.AdminErrorCode;
-import com.clubber.ClubberServer.domain.club.exception.ClubErrorCode;
-import com.clubber.ClubberServer.domain.favorite.exception.FavoriteErrorCode;
-import com.clubber.ClubberServer.domain.notice.exception.NoticeErrorCode;
-import com.clubber.ClubberServer.domain.recruit.exception.RecruitErrorCode;
-import com.clubber.ClubberServer.domain.review.exception.ReviewErrorCode;
-import com.clubber.ClubberServer.domain.user.exception.UserErrorCode;
-import com.clubber.ClubberServer.global.config.swagger.ApiErrorCodeExample;
+package com.clubber.domain.example;
+
+import com.clubber.domain.domains.admin.exception.AdminErrorCode;
+import com.clubber.domain.domains.club.exception.ClubErrorCode;
+import com.clubber.domain.domains.favorite.exception.FavoriteErrorCode;
+import com.clubber.domain.notice.exception.NoticeErrorCode;
+import com.clubber.domain.recruit.exception.RecruitErrorCode;
+import com.clubber.domain.domains.review.exception.ReviewErrorCode;
+import com.clubber.domain.domains.user.exception.UserErrorCode;
+import com.clubber.global.config.swagger.ApiErrorCodeExample;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/faq/controller/FaqController.java b/Clubber-External/src/main/java/com/clubber/domain/faq/controller/FaqController.java
similarity index 74%
rename from src/main/java/com/clubber/ClubberServer/domain/faq/controller/FaqController.java
rename to Clubber-External/src/main/java/com/clubber/domain/faq/controller/FaqController.java
index fc443ec32..b45146cbd 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/faq/controller/FaqController.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/faq/controller/FaqController.java
@@ -1,8 +1,8 @@
-package com.clubber.ClubberServer.domain.faq.controller;
+package com.clubber.domain.faq.controller;
-import com.clubber.ClubberServer.domain.faq.service.FaqService;
-import com.clubber.ClubberServer.global.config.swagger.DisableSwaggerSecurity;
-import com.clubber.ClubberServer.global.vo.enums.EnumMapperVO;
+import com.clubber.domain.faq.service.FaqService;
+import com.clubber.global.config.swagger.DisableSwaggerSecurity;
+import com.clubber.common.vo.enums.EnumMapperVO;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/faq/domain/Faq.java b/Clubber-External/src/main/java/com/clubber/domain/faq/domain/Faq.java
similarity index 92%
rename from src/main/java/com/clubber/ClubberServer/domain/faq/domain/Faq.java
rename to Clubber-External/src/main/java/com/clubber/domain/faq/domain/Faq.java
index 5aea67fa2..d48fc4b70 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/faq/domain/Faq.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/faq/domain/Faq.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.domain.faq.domain;
+package com.clubber.domain.faq.domain;
-import com.clubber.ClubberServer.global.mapper.enums.EnumFaqMapperType;
+import com.clubber.common.mapper.enums.EnumFaqMapperType;
import lombok.AllArgsConstructor;
@AllArgsConstructor
diff --git a/src/main/java/com/clubber/ClubberServer/domain/faq/dto/GetFaqsResponse.java b/Clubber-External/src/main/java/com/clubber/domain/faq/dto/GetFaqsResponse.java
similarity index 88%
rename from src/main/java/com/clubber/ClubberServer/domain/faq/dto/GetFaqsResponse.java
rename to Clubber-External/src/main/java/com/clubber/domain/faq/dto/GetFaqsResponse.java
index 0215604e2..8e2d362cd 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/faq/dto/GetFaqsResponse.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/faq/dto/GetFaqsResponse.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.domain.faq.dto;
+package com.clubber.domain.faq.dto;
-import com.clubber.ClubberServer.domain.faq.domain.Faq;
+import com.clubber.domain.faq.domain.Faq;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/faq/service/FaqService.java b/Clubber-External/src/main/java/com/clubber/domain/faq/service/FaqService.java
similarity index 61%
rename from src/main/java/com/clubber/ClubberServer/domain/faq/service/FaqService.java
rename to Clubber-External/src/main/java/com/clubber/domain/faq/service/FaqService.java
index 78d05eeaa..ec5a456be 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/faq/service/FaqService.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/faq/service/FaqService.java
@@ -1,7 +1,7 @@
-package com.clubber.ClubberServer.domain.faq.service;
+package com.clubber.domain.faq.service;
-import com.clubber.ClubberServer.global.mapper.enums.EnumMapper;
-import com.clubber.ClubberServer.global.vo.enums.EnumMapperVO;
+import com.clubber.common.mapper.enums.EnumMapper;
+import com.clubber.common.vo.enums.EnumMapperVO;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/favorite/controller/FavoriteController.java b/Clubber-External/src/main/java/com/clubber/domain/favorite/controller/FavoriteController.java
similarity index 84%
rename from src/main/java/com/clubber/ClubberServer/domain/favorite/controller/FavoriteController.java
rename to Clubber-External/src/main/java/com/clubber/domain/favorite/controller/FavoriteController.java
index 805a92987..853492da4 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/favorite/controller/FavoriteController.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/favorite/controller/FavoriteController.java
@@ -1,8 +1,8 @@
-package com.clubber.ClubberServer.domain.favorite.controller;
+package com.clubber.domain.favorite.controller;
-import com.clubber.ClubberServer.domain.favorite.dto.FavoriteResponse;
-import com.clubber.ClubberServer.domain.favorite.service.FavoriteService;
+import com.clubber.domain.favorite.dto.FavoriteResponse;
+import com.clubber.domain.favorite.service.FavoriteService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/favorite/dto/FavoriteResponse.java b/Clubber-External/src/main/java/com/clubber/domain/favorite/dto/FavoriteResponse.java
similarity index 86%
rename from src/main/java/com/clubber/ClubberServer/domain/favorite/dto/FavoriteResponse.java
rename to Clubber-External/src/main/java/com/clubber/domain/favorite/dto/FavoriteResponse.java
index 52efd9875..ba3f4aaad 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/favorite/dto/FavoriteResponse.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/favorite/dto/FavoriteResponse.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.domain.favorite.dto;
+package com.clubber.domain.favorite.dto;
-import com.clubber.ClubberServer.domain.favorite.domain.Favorite;
+import com.clubber.domain.domains.favorite.domain.Favorite;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AccessLevel;
import lombok.Builder;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/favorite/dto/GetFavoriteDetailsResponse.java b/Clubber-External/src/main/java/com/clubber/domain/favorite/dto/GetFavoriteDetailsResponse.java
similarity index 81%
rename from src/main/java/com/clubber/ClubberServer/domain/favorite/dto/GetFavoriteDetailsResponse.java
rename to Clubber-External/src/main/java/com/clubber/domain/favorite/dto/GetFavoriteDetailsResponse.java
index 8b126e338..db3c3f8b6 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/favorite/dto/GetFavoriteDetailsResponse.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/favorite/dto/GetFavoriteDetailsResponse.java
@@ -1,8 +1,8 @@
-package com.clubber.ClubberServer.domain.favorite.dto;
+package com.clubber.domain.favorite.dto;
-import com.clubber.ClubberServer.domain.club.domain.Club;
-import com.clubber.ClubberServer.domain.favorite.domain.Favorite;
-import com.clubber.ClubberServer.global.vo.image.ImageVO;
+import com.clubber.domain.domains.club.domain.Club;
+import com.clubber.domain.domains.favorite.domain.Favorite;
+import com.clubber.domain.common.vo.ImageVO;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AccessLevel;
import lombok.Builder;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/favorite/implement/FavoriteAppender.java b/Clubber-External/src/main/java/com/clubber/domain/favorite/implement/FavoriteAppender.java
similarity index 65%
rename from src/main/java/com/clubber/ClubberServer/domain/favorite/implement/FavoriteAppender.java
rename to Clubber-External/src/main/java/com/clubber/domain/favorite/implement/FavoriteAppender.java
index 3387001a2..395d2d19d 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/favorite/implement/FavoriteAppender.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/favorite/implement/FavoriteAppender.java
@@ -1,9 +1,9 @@
-package com.clubber.ClubberServer.domain.favorite.implement;
+package com.clubber.domain.favorite.implement;
-import com.clubber.ClubberServer.domain.club.domain.Club;
-import com.clubber.ClubberServer.domain.favorite.domain.Favorite;
-import com.clubber.ClubberServer.domain.favorite.repository.FavoriteRepository;
-import com.clubber.ClubberServer.domain.user.domain.User;
+import com.clubber.domain.domains.club.domain.Club;
+import com.clubber.domain.domains.favorite.domain.Favorite;
+import com.clubber.domain.favorite.repository.FavoriteRepository;
+import com.clubber.domain.domains.user.domain.User;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/favorite/implement/FavoriteReader.java b/Clubber-External/src/main/java/com/clubber/domain/favorite/implement/FavoriteReader.java
similarity index 72%
rename from src/main/java/com/clubber/ClubberServer/domain/favorite/implement/FavoriteReader.java
rename to Clubber-External/src/main/java/com/clubber/domain/favorite/implement/FavoriteReader.java
index 9a7328b9a..9dafcab66 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/favorite/implement/FavoriteReader.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/favorite/implement/FavoriteReader.java
@@ -1,10 +1,10 @@
-package com.clubber.ClubberServer.domain.favorite.implement;
+package com.clubber.domain.favorite.implement;
-import com.clubber.ClubberServer.domain.club.domain.Club;
-import com.clubber.ClubberServer.domain.favorite.domain.Favorite;
-import com.clubber.ClubberServer.domain.favorite.exception.FavoriteNotFoundException;
-import com.clubber.ClubberServer.domain.favorite.repository.FavoriteRepository;
-import com.clubber.ClubberServer.domain.user.domain.User;
+import com.clubber.domain.domains.club.domain.Club;
+import com.clubber.domain.domains.favorite.domain.Favorite;
+import com.clubber.domain.domains.favorite.exception.FavoriteNotFoundException;
+import com.clubber.domain.favorite.repository.FavoriteRepository;
+import com.clubber.domain.domains.user.domain.User;
import lombok.RequiredArgsConstructor;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/favorite/implement/FavoriteValidator.java b/Clubber-External/src/main/java/com/clubber/domain/favorite/implement/FavoriteValidator.java
similarity index 50%
rename from src/main/java/com/clubber/ClubberServer/domain/favorite/implement/FavoriteValidator.java
rename to Clubber-External/src/main/java/com/clubber/domain/favorite/implement/FavoriteValidator.java
index 5d970bec1..101c1920f 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/favorite/implement/FavoriteValidator.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/favorite/implement/FavoriteValidator.java
@@ -1,10 +1,9 @@
-package com.clubber.ClubberServer.domain.favorite.implement;
+package com.clubber.domain.favorite.implement;
-import com.clubber.ClubberServer.domain.club.domain.Club;
-import com.clubber.ClubberServer.domain.favorite.domain.Favorite;
-import com.clubber.ClubberServer.domain.favorite.exception.ClubAlreadyRegisterdFavoriteException;
-import com.clubber.ClubberServer.domain.favorite.repository.FavoriteRepository;
-import com.clubber.ClubberServer.domain.user.domain.User;
+import com.clubber.domain.domains.club.domain.Club;
+import com.clubber.domain.domains.favorite.exception.ClubAlreadyRegisterdFavoriteException;
+import com.clubber.domain.favorite.repository.FavoriteRepository;
+import com.clubber.domain.domains.user.domain.User;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/favorite/repository/FavoriteCustomRepository.java b/Clubber-External/src/main/java/com/clubber/domain/favorite/repository/FavoriteCustomRepository.java
similarity index 73%
rename from src/main/java/com/clubber/ClubberServer/domain/favorite/repository/FavoriteCustomRepository.java
rename to Clubber-External/src/main/java/com/clubber/domain/favorite/repository/FavoriteCustomRepository.java
index 03b9e17bc..3d9ba562a 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/favorite/repository/FavoriteCustomRepository.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/favorite/repository/FavoriteCustomRepository.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.domain.favorite.repository;
+package com.clubber.domain.favorite.repository;
-import com.clubber.ClubberServer.domain.favorite.domain.Favorite;
+import com.clubber.domain.domains.favorite.domain.Favorite;
import java.util.List;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/favorite/repository/FavoriteCustomRepositoryImpl.java b/Clubber-External/src/main/java/com/clubber/domain/favorite/repository/FavoriteCustomRepositoryImpl.java
similarity index 88%
rename from src/main/java/com/clubber/ClubberServer/domain/favorite/repository/FavoriteCustomRepositoryImpl.java
rename to Clubber-External/src/main/java/com/clubber/domain/favorite/repository/FavoriteCustomRepositoryImpl.java
index 176c2ab8b..fe822aa14 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/favorite/repository/FavoriteCustomRepositoryImpl.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/favorite/repository/FavoriteCustomRepositoryImpl.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.domain.favorite.repository;
+package com.clubber.domain.favorite.repository;
-import com.clubber.ClubberServer.domain.favorite.domain.Favorite;
+import com.clubber.domain.domains.favorite.domain.Favorite;
import com.querydsl.jpa.impl.JPAQuery;
import com.querydsl.jpa.impl.JPAQueryFactory;
import lombok.RequiredArgsConstructor;
@@ -10,8 +10,8 @@
import java.util.List;
-import static com.clubber.ClubberServer.domain.club.domain.QClub.club;
-import static com.clubber.ClubberServer.domain.favorite.domain.QFavorite.favorite;
+import static com.clubber.domain.domains.club.domain.QClub.club;
+import static com.clubber.domain.domains.favorite.domain.QFavorite.favorite;
@RequiredArgsConstructor
public class FavoriteCustomRepositoryImpl implements FavoriteCustomRepository {
diff --git a/src/main/java/com/clubber/ClubberServer/domain/favorite/repository/FavoriteRepository.java b/Clubber-External/src/main/java/com/clubber/domain/favorite/repository/FavoriteRepository.java
similarity index 63%
rename from src/main/java/com/clubber/ClubberServer/domain/favorite/repository/FavoriteRepository.java
rename to Clubber-External/src/main/java/com/clubber/domain/favorite/repository/FavoriteRepository.java
index e0697bdbf..068ff7ff9 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/favorite/repository/FavoriteRepository.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/favorite/repository/FavoriteRepository.java
@@ -1,10 +1,10 @@
-package com.clubber.ClubberServer.domain.favorite.repository;
+package com.clubber.domain.favorite.repository;
import java.util.List;
-import com.clubber.ClubberServer.domain.club.domain.Club;
-import com.clubber.ClubberServer.domain.favorite.domain.Favorite;
-import com.clubber.ClubberServer.domain.user.domain.User;
+import com.clubber.domain.domains.club.domain.Club;
+import com.clubber.domain.domains.favorite.domain.Favorite;
+import com.clubber.domain.domains.user.domain.User;
import java.util.Optional;
import org.springframework.data.jpa.repository.JpaRepository;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/favorite/service/FavoriteService.java b/Clubber-External/src/main/java/com/clubber/domain/favorite/service/FavoriteService.java
similarity index 63%
rename from src/main/java/com/clubber/ClubberServer/domain/favorite/service/FavoriteService.java
rename to Clubber-External/src/main/java/com/clubber/domain/favorite/service/FavoriteService.java
index 84b82d2ae..4808a38d4 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/favorite/service/FavoriteService.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/favorite/service/FavoriteService.java
@@ -1,15 +1,15 @@
-package com.clubber.ClubberServer.domain.favorite.service;
-
-import com.clubber.ClubberServer.domain.club.domain.Club;
-import com.clubber.ClubberServer.domain.club.implement.ClubReader;
-import com.clubber.ClubberServer.domain.favorite.domain.Favorite;
-import com.clubber.ClubberServer.domain.favorite.dto.FavoriteResponse;
-import com.clubber.ClubberServer.domain.favorite.implement.FavoriteAppender;
-import com.clubber.ClubberServer.domain.favorite.implement.FavoriteReader;
-import com.clubber.ClubberServer.domain.favorite.implement.FavoriteValidator;
-import com.clubber.ClubberServer.domain.user.domain.User;
-import com.clubber.ClubberServer.domain.user.implement.UserReader;
-import com.clubber.ClubberServer.global.config.security.SecurityUtils;
+package com.clubber.domain.favorite.service;
+
+import com.clubber.domain.domains.club.domain.Club;
+import com.clubber.domain.club.implement.ClubReader;
+import com.clubber.domain.domains.favorite.domain.Favorite;
+import com.clubber.domain.favorite.dto.FavoriteResponse;
+import com.clubber.domain.favorite.implement.FavoriteAppender;
+import com.clubber.domain.favorite.implement.FavoriteReader;
+import com.clubber.domain.favorite.implement.FavoriteValidator;
+import com.clubber.domain.domains.user.domain.User;
+import com.clubber.domain.user.implement.UserReader;
+import com.clubber.global.config.security.SecurityUtils;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/image/controller/ImageController.java b/Clubber-External/src/main/java/com/clubber/domain/image/controller/ImageController.java
similarity index 82%
rename from src/main/java/com/clubber/ClubberServer/domain/image/controller/ImageController.java
rename to Clubber-External/src/main/java/com/clubber/domain/image/controller/ImageController.java
index 6997bc6d9..722e4a817 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/image/controller/ImageController.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/image/controller/ImageController.java
@@ -1,9 +1,9 @@
-package com.clubber.ClubberServer.domain.image.controller;
+package com.clubber.domain.image.controller;
-import com.clubber.ClubberServer.domain.image.dto.CreateImagePresignedUrlResponse;
-import com.clubber.ClubberServer.domain.image.dto.CreateRecruitsImagePresigneUrlRequest;
-import com.clubber.ClubberServer.domain.image.service.S3UploadPresignedService;
-import com.clubber.ClubberServer.global.config.s3.ImageFileExtension;
+import com.clubber.domain.image.dto.CreateImagePresignedUrlResponse;
+import com.clubber.domain.image.dto.CreateRecruitsImagePresigneUrlRequest;
+import com.clubber.domain.image.service.S3UploadPresignedService;
+import com.clubber.global.config.s3.ImageFileExtension;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import java.util.List;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/image/dto/CreateImagePresignedUrlResponse.java b/Clubber-External/src/main/java/com/clubber/domain/image/dto/CreateImagePresignedUrlResponse.java
similarity index 89%
rename from src/main/java/com/clubber/ClubberServer/domain/image/dto/CreateImagePresignedUrlResponse.java
rename to Clubber-External/src/main/java/com/clubber/domain/image/dto/CreateImagePresignedUrlResponse.java
index af1ac6f06..d4ed5f73f 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/image/dto/CreateImagePresignedUrlResponse.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/image/dto/CreateImagePresignedUrlResponse.java
@@ -1,7 +1,7 @@
-package com.clubber.ClubberServer.domain.image.dto;
+package com.clubber.domain.image.dto;
-import com.clubber.ClubberServer.global.vo.image.ImageVO;
+import com.clubber.domain.common.vo.ImageVO;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AccessLevel;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/image/dto/CreateRecruitsImagePresigneUrlRequest.java b/Clubber-External/src/main/java/com/clubber/domain/image/dto/CreateRecruitsImagePresigneUrlRequest.java
similarity index 73%
rename from src/main/java/com/clubber/ClubberServer/domain/image/dto/CreateRecruitsImagePresigneUrlRequest.java
rename to Clubber-External/src/main/java/com/clubber/domain/image/dto/CreateRecruitsImagePresigneUrlRequest.java
index bc404e83d..87f6ee261 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/image/dto/CreateRecruitsImagePresigneUrlRequest.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/image/dto/CreateRecruitsImagePresigneUrlRequest.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.domain.image.dto;
+package com.clubber.domain.image.dto;
-import com.clubber.ClubberServer.global.config.s3.ImageFileExtension;
+import com.clubber.global.config.s3.ImageFileExtension;
import java.util.ArrayList;
import java.util.List;
import lombok.AccessLevel;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/image/service/S3UploadPresignedService.java b/Clubber-External/src/main/java/com/clubber/domain/image/service/S3UploadPresignedService.java
similarity index 88%
rename from src/main/java/com/clubber/ClubberServer/domain/image/service/S3UploadPresignedService.java
rename to Clubber-External/src/main/java/com/clubber/domain/image/service/S3UploadPresignedService.java
index 41a8d90c3..eea048831 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/image/service/S3UploadPresignedService.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/image/service/S3UploadPresignedService.java
@@ -1,17 +1,17 @@
-package com.clubber.ClubberServer.domain.image.service;
+package com.clubber.domain.image.service;
import com.amazonaws.HttpMethod;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.Headers;
import com.amazonaws.services.s3.model.CannedAccessControlList;
import com.amazonaws.services.s3.model.GeneratePresignedUrlRequest;
-import com.clubber.ClubberServer.domain.admin.domain.Admin;
-import com.clubber.ClubberServer.domain.admin.implement.AdminReader;
-import com.clubber.ClubberServer.domain.club.exception.ClubNotFoundException;
-import com.clubber.ClubberServer.domain.club.repository.ClubRepository;
-import com.clubber.ClubberServer.domain.image.dto.CreateImagePresignedUrlResponse;
-import com.clubber.ClubberServer.domain.image.dto.CreateRecruitsImagePresigneUrlRequest;
-import com.clubber.ClubberServer.global.config.s3.ImageFileExtension;
+import com.clubber.domain.domains.admin.domain.Admin;
+import com.clubber.domain.admin.implement.AdminReader;
+import com.clubber.domain.domains.club.exception.ClubNotFoundException;
+import com.clubber.domain.domains.club.repository.ClubRepository;
+import com.clubber.domain.image.dto.CreateImagePresignedUrlResponse;
+import com.clubber.domain.image.dto.CreateRecruitsImagePresigneUrlRequest;
+import com.clubber.global.config.s3.ImageFileExtension;
import java.net.URL;
import java.util.Date;
import java.util.List;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/notice/controller/NoticeController.java b/Clubber-External/src/main/java/com/clubber/domain/notice/controller/NoticeController.java
similarity index 78%
rename from src/main/java/com/clubber/ClubberServer/domain/notice/controller/NoticeController.java
rename to Clubber-External/src/main/java/com/clubber/domain/notice/controller/NoticeController.java
index 195b96a29..0f6787fd3 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/notice/controller/NoticeController.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/notice/controller/NoticeController.java
@@ -1,10 +1,10 @@
-package com.clubber.ClubberServer.domain.notice.controller;
+package com.clubber.domain.notice.controller;
-import com.clubber.ClubberServer.domain.notice.dto.GetNoticeResponse;
-import com.clubber.ClubberServer.domain.notice.dto.GetNoticesAtMainResponse;
-import com.clubber.ClubberServer.domain.notice.service.NoticeService;
-import com.clubber.ClubberServer.global.config.swagger.DisableSwaggerSecurity;
-import com.clubber.ClubberServer.global.common.page.PageResponse;
+import com.clubber.domain.notice.dto.GetNoticeResponse;
+import com.clubber.domain.notice.dto.GetNoticesAtMainResponse;
+import com.clubber.domain.notice.service.NoticeService;
+import com.clubber.global.config.swagger.DisableSwaggerSecurity;
+import com.clubber.global.common.page.PageResponse;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/notice/domain/Notice.java b/Clubber-External/src/main/java/com/clubber/domain/notice/domain/Notice.java
similarity index 79%
rename from src/main/java/com/clubber/ClubberServer/domain/notice/domain/Notice.java
rename to Clubber-External/src/main/java/com/clubber/domain/notice/domain/Notice.java
index bc7bbb8ff..6915fa22c 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/notice/domain/Notice.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/notice/domain/Notice.java
@@ -1,8 +1,8 @@
-package com.clubber.ClubberServer.domain.notice.domain;
+package com.clubber.domain.notice.domain;
-import com.clubber.ClubberServer.domain.common.BaseEntity;
-import com.clubber.ClubberServer.domain.owner.domain.Owner;
-import com.clubber.ClubberServer.global.vo.image.ImageVO;
+import com.clubber.domain.common.BaseEntity;
+import com.clubber.domain.owner.domain.Owner;
+import com.clubber.domain.common.vo.ImageVO;
import jakarta.persistence.*;
import lombok.AccessLevel;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/notice/dto/GetNoticeResponse.java b/Clubber-External/src/main/java/com/clubber/domain/notice/dto/GetNoticeResponse.java
similarity index 89%
rename from src/main/java/com/clubber/ClubberServer/domain/notice/dto/GetNoticeResponse.java
rename to Clubber-External/src/main/java/com/clubber/domain/notice/dto/GetNoticeResponse.java
index 1d9bfef77..391f989ad 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/notice/dto/GetNoticeResponse.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/notice/dto/GetNoticeResponse.java
@@ -1,7 +1,7 @@
-package com.clubber.ClubberServer.domain.notice.dto;
+package com.clubber.domain.notice.dto;
-import com.clubber.ClubberServer.domain.notice.domain.Notice;
-import com.clubber.ClubberServer.global.vo.image.ImageVO;
+import com.clubber.domain.notice.domain.Notice;
+import com.clubber.domain.common.vo.ImageVO;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/notice/dto/GetNoticesAtMainResponse.java b/Clubber-External/src/main/java/com/clubber/domain/notice/dto/GetNoticesAtMainResponse.java
similarity index 90%
rename from src/main/java/com/clubber/ClubberServer/domain/notice/dto/GetNoticesAtMainResponse.java
rename to Clubber-External/src/main/java/com/clubber/domain/notice/dto/GetNoticesAtMainResponse.java
index 25a11cb16..327b85594 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/notice/dto/GetNoticesAtMainResponse.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/notice/dto/GetNoticesAtMainResponse.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.domain.notice.dto;
+package com.clubber.domain.notice.dto;
-import com.clubber.ClubberServer.domain.notice.domain.Notice;
+import com.clubber.domain.notice.domain.Notice;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AccessLevel;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/notice/exception/NoticeErrorCode.java b/Clubber-External/src/main/java/com/clubber/domain/notice/exception/NoticeErrorCode.java
similarity index 76%
rename from src/main/java/com/clubber/ClubberServer/domain/notice/exception/NoticeErrorCode.java
rename to Clubber-External/src/main/java/com/clubber/domain/notice/exception/NoticeErrorCode.java
index a192ed5bf..50387d0dd 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/notice/exception/NoticeErrorCode.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/notice/exception/NoticeErrorCode.java
@@ -1,7 +1,7 @@
-package com.clubber.ClubberServer.domain.notice.exception;
+package com.clubber.domain.notice.exception;
-import com.clubber.ClubberServer.global.exception.BaseErrorCode;
-import com.clubber.ClubberServer.global.exception.ErrorReason;
+import com.clubber.common.exception.BaseErrorCode;
+import com.clubber.common.exception.ErrorReason;
import lombok.AllArgsConstructor;
import org.springframework.http.HttpStatus;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/notice/exception/NoticeNotFoundException.java b/Clubber-External/src/main/java/com/clubber/domain/notice/exception/NoticeNotFoundException.java
similarity index 66%
rename from src/main/java/com/clubber/ClubberServer/domain/notice/exception/NoticeNotFoundException.java
rename to Clubber-External/src/main/java/com/clubber/domain/notice/exception/NoticeNotFoundException.java
index 58f5e1651..3b17bb2eb 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/notice/exception/NoticeNotFoundException.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/notice/exception/NoticeNotFoundException.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.domain.notice.exception;
+package com.clubber.domain.notice.exception;
-import com.clubber.ClubberServer.global.exception.BaseException;
+import com.clubber.common.exception.BaseException;
public class NoticeNotFoundException extends BaseException {
public static final BaseException EXCEPTION = new NoticeNotFoundException();
diff --git a/src/main/java/com/clubber/ClubberServer/domain/notice/mapper/NoticeMapper.java b/Clubber-External/src/main/java/com/clubber/domain/notice/mapper/NoticeMapper.java
similarity index 65%
rename from src/main/java/com/clubber/ClubberServer/domain/notice/mapper/NoticeMapper.java
rename to Clubber-External/src/main/java/com/clubber/domain/notice/mapper/NoticeMapper.java
index 7fb7f5e2e..3723440e6 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/notice/mapper/NoticeMapper.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/notice/mapper/NoticeMapper.java
@@ -1,9 +1,9 @@
-package com.clubber.ClubberServer.domain.notice.mapper;
+package com.clubber.domain.notice.mapper;
-import com.clubber.ClubberServer.domain.notice.domain.Notice;
-import com.clubber.ClubberServer.domain.notice.dto.GetNoticeResponse;
-import com.clubber.ClubberServer.domain.notice.dto.GetNoticesAtMainResponse;
-import com.clubber.ClubberServer.global.common.page.PageResponse;
+import com.clubber.domain.notice.domain.Notice;
+import com.clubber.domain.notice.dto.GetNoticeResponse;
+import com.clubber.domain.notice.dto.GetNoticesAtMainResponse;
+import com.clubber.global.common.page.PageResponse;
import org.springframework.data.domain.Page;
import org.springframework.stereotype.Component;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/notice/repository/NoticeRepository.java b/Clubber-External/src/main/java/com/clubber/domain/notice/repository/NoticeRepository.java
similarity index 74%
rename from src/main/java/com/clubber/ClubberServer/domain/notice/repository/NoticeRepository.java
rename to Clubber-External/src/main/java/com/clubber/domain/notice/repository/NoticeRepository.java
index e75bdcc6a..0df96d283 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/notice/repository/NoticeRepository.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/notice/repository/NoticeRepository.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.domain.notice.repository;
+package com.clubber.domain.notice.repository;
-import com.clubber.ClubberServer.domain.notice.domain.Notice;
+import com.clubber.domain.notice.domain.Notice;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/notice/service/NoticeService.java b/Clubber-External/src/main/java/com/clubber/domain/notice/service/NoticeService.java
similarity index 68%
rename from src/main/java/com/clubber/ClubberServer/domain/notice/service/NoticeService.java
rename to Clubber-External/src/main/java/com/clubber/domain/notice/service/NoticeService.java
index 8495bedba..1e4f25497 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/notice/service/NoticeService.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/notice/service/NoticeService.java
@@ -1,12 +1,12 @@
-package com.clubber.ClubberServer.domain.notice.service;
-
-import com.clubber.ClubberServer.domain.notice.domain.Notice;
-import com.clubber.ClubberServer.domain.notice.dto.GetNoticeResponse;
-import com.clubber.ClubberServer.domain.notice.dto.GetNoticesAtMainResponse;
-import com.clubber.ClubberServer.domain.notice.exception.NoticeNotFoundException;
-import com.clubber.ClubberServer.domain.notice.mapper.NoticeMapper;
-import com.clubber.ClubberServer.domain.notice.repository.NoticeRepository;
-import com.clubber.ClubberServer.global.common.page.PageResponse;
+package com.clubber.domain.notice.service;
+
+import com.clubber.domain.notice.domain.Notice;
+import com.clubber.domain.notice.dto.GetNoticeResponse;
+import com.clubber.domain.notice.dto.GetNoticesAtMainResponse;
+import com.clubber.domain.notice.exception.NoticeNotFoundException;
+import com.clubber.domain.notice.mapper.NoticeMapper;
+import com.clubber.domain.notice.repository.NoticeRepository;
+import com.clubber.global.common.page.PageResponse;
import lombok.RequiredArgsConstructor;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/owner/domain/Owner.java b/Clubber-External/src/main/java/com/clubber/domain/owner/domain/Owner.java
similarity index 82%
rename from src/main/java/com/clubber/ClubberServer/domain/owner/domain/Owner.java
rename to Clubber-External/src/main/java/com/clubber/domain/owner/domain/Owner.java
index 9d6c7d929..dd08e0a58 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/owner/domain/Owner.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/owner/domain/Owner.java
@@ -1,7 +1,7 @@
-package com.clubber.ClubberServer.domain.owner.domain;
+package com.clubber.domain.owner.domain;
-import com.clubber.ClubberServer.domain.common.BaseEntity;
-import com.clubber.ClubberServer.domain.user.domain.AccountRole;
+import com.clubber.domain.common.BaseEntity;
+import com.clubber.domain.domains.user.domain.AccountRole;
import jakarta.persistence.*;
import jakarta.validation.constraints.NotNull;
import lombok.AccessLevel;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/owner/service/OwnerService.java b/Clubber-External/src/main/java/com/clubber/domain/owner/service/OwnerService.java
similarity index 70%
rename from src/main/java/com/clubber/ClubberServer/domain/owner/service/OwnerService.java
rename to Clubber-External/src/main/java/com/clubber/domain/owner/service/OwnerService.java
index e25b63f87..517d1bc1d 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/owner/service/OwnerService.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/owner/service/OwnerService.java
@@ -1,8 +1,8 @@
-package com.clubber.ClubberServer.domain.owner.service;
+package com.clubber.domain.owner.service;
-import com.clubber.ClubberServer.domain.admin.domain.PendingAdminInfo;
-import com.clubber.ClubberServer.domain.admin.implement.PendingAdminInfoManager;
-import com.clubber.ClubberServer.domain.admin.implement.PendingAdminInfoReader;
+import com.clubber.domain.domains.admin.domain.PendingAdminInfo;
+import com.clubber.domain.admin.implement.PendingAdminInfoManager;
+import com.clubber.domain.admin.implement.PendingAdminInfoReader;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/recruit/controller/AdminRecruitController.java b/Clubber-External/src/main/java/com/clubber/domain/recruit/controller/AdminRecruitController.java
similarity index 85%
rename from src/main/java/com/clubber/ClubberServer/domain/recruit/controller/AdminRecruitController.java
rename to Clubber-External/src/main/java/com/clubber/domain/recruit/controller/AdminRecruitController.java
index 1c37c0cc7..7ac1eddbd 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/recruit/controller/AdminRecruitController.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/recruit/controller/AdminRecruitController.java
@@ -1,10 +1,8 @@
-package com.clubber.ClubberServer.domain.recruit.controller;
+package com.clubber.domain.recruit.controller;
-
-import com.clubber.ClubberServer.domain.recruit.dto.*;
-import com.clubber.ClubberServer.domain.recruit.dto.DeleteRecruitByIdResponse;
-import com.clubber.ClubberServer.domain.recruit.service.RecruitService;
-import com.clubber.ClubberServer.global.common.page.PageResponse;
+import com.clubber.domain.recruit.dto.*;
+import com.clubber.domain.recruit.service.RecruitService;
+import com.clubber.global.common.page.PageResponse;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.Valid;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/recruit/controller/RecruitCommentController.java b/Clubber-External/src/main/java/com/clubber/domain/recruit/controller/RecruitCommentController.java
similarity index 75%
rename from src/main/java/com/clubber/ClubberServer/domain/recruit/controller/RecruitCommentController.java
rename to Clubber-External/src/main/java/com/clubber/domain/recruit/controller/RecruitCommentController.java
index 86b71f3b2..f72d5ea20 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/recruit/controller/RecruitCommentController.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/recruit/controller/RecruitCommentController.java
@@ -1,11 +1,11 @@
-package com.clubber.ClubberServer.domain.recruit.controller;
+package com.clubber.domain.recruit.controller;
-import com.clubber.ClubberServer.domain.recruit.dto.recruitComment.DeleteRecruitCommentResponse;
-import com.clubber.ClubberServer.domain.recruit.dto.recruitComment.GetRecruitCommentResponse;
-import com.clubber.ClubberServer.domain.recruit.dto.recruitComment.PostRecruitCommentRequest;
-import com.clubber.ClubberServer.domain.recruit.dto.recruitComment.PostRecruitCommentResponse;
-import com.clubber.ClubberServer.domain.recruit.service.RecruitCommentService;
-import com.clubber.ClubberServer.global.config.swagger.DisableSwaggerSecurity;
+import com.clubber.domain.recruit.dto.recruitComment.DeleteRecruitCommentResponse;
+import com.clubber.domain.recruit.dto.recruitComment.GetRecruitCommentResponse;
+import com.clubber.domain.recruit.dto.recruitComment.PostRecruitCommentRequest;
+import com.clubber.domain.recruit.dto.recruitComment.PostRecruitCommentResponse;
+import com.clubber.domain.recruit.service.RecruitCommentService;
+import com.clubber.global.config.swagger.DisableSwaggerSecurity;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.Valid;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/recruit/controller/RecruitController.java b/Clubber-External/src/main/java/com/clubber/domain/recruit/controller/RecruitController.java
similarity index 78%
rename from src/main/java/com/clubber/ClubberServer/domain/recruit/controller/RecruitController.java
rename to Clubber-External/src/main/java/com/clubber/domain/recruit/controller/RecruitController.java
index 251ad7e5c..cee24673d 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/recruit/controller/RecruitController.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/recruit/controller/RecruitController.java
@@ -1,10 +1,11 @@
-package com.clubber.ClubberServer.domain.recruit.controller;
-
-import com.clubber.ClubberServer.domain.recruit.dto.*;
-import com.clubber.ClubberServer.domain.recruit.dto.mainPage.GetRecruitsMainPageResponse;
-import com.clubber.ClubberServer.domain.recruit.service.RecruitService;
-import com.clubber.ClubberServer.global.config.swagger.DisableSwaggerSecurity;
-import com.clubber.ClubberServer.global.common.page.PageResponse;
+package com.clubber.domain.recruit.controller;
+
+import com.clubber.domain.recruit.dto.GetOneRecruitInListResponse;
+import com.clubber.domain.recruit.dto.GetOneRecruitWithClubResponse;
+import com.clubber.domain.recruit.dto.mainPage.GetRecruitsMainPageResponse;
+import com.clubber.domain.recruit.service.RecruitService;
+import com.clubber.global.config.swagger.DisableSwaggerSecurity;
+import com.clubber.global.common.page.PageResponse;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
@@ -25,7 +26,7 @@ public class RecruitController {
@DisableSwaggerSecurity
@Operation(summary = "특정 동아리 모집글 조회")
public PageResponse getRecruitsByClubId(@PathVariable("clubId")Long clubId,
- @PageableDefault(size = 5) Pageable pageable){
+ @PageableDefault(size = 5) Pageable pageable){
return recruitService.getRecruitsByClubId(clubId,pageable);
}
diff --git a/src/main/java/com/clubber/ClubberServer/domain/recruit/controller/RecruitLinkedCalendarController.java b/Clubber-External/src/main/java/com/clubber/domain/recruit/controller/RecruitLinkedCalendarController.java
similarity index 80%
rename from src/main/java/com/clubber/ClubberServer/domain/recruit/controller/RecruitLinkedCalendarController.java
rename to Clubber-External/src/main/java/com/clubber/domain/recruit/controller/RecruitLinkedCalendarController.java
index 62726c975..72fe3b4d5 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/recruit/controller/RecruitLinkedCalendarController.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/recruit/controller/RecruitLinkedCalendarController.java
@@ -1,8 +1,8 @@
-package com.clubber.ClubberServer.domain.recruit.controller;
+package com.clubber.domain.recruit.controller;
-import com.clubber.ClubberServer.domain.recruit.dto.CreateLinkedCalendarRequest;
-import com.clubber.ClubberServer.domain.recruit.dto.CreateLinkedCalendarResponse;
-import com.clubber.ClubberServer.domain.recruit.service.RecruitLinkedCalendarService;
+import com.clubber.domain.recruit.dto.CreateLinkedCalendarRequest;
+import com.clubber.domain.recruit.dto.CreateLinkedCalendarResponse;
+import com.clubber.domain.recruit.service.RecruitLinkedCalendarService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/recruit/domain/Recruit.java b/Clubber-External/src/main/java/com/clubber/domain/recruit/domain/Recruit.java
similarity index 88%
rename from src/main/java/com/clubber/ClubberServer/domain/recruit/domain/Recruit.java
rename to Clubber-External/src/main/java/com/clubber/domain/recruit/domain/Recruit.java
index a6ef0700b..69225c3e7 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/recruit/domain/Recruit.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/recruit/domain/Recruit.java
@@ -1,10 +1,10 @@
-package com.clubber.ClubberServer.domain.recruit.domain;
+package com.clubber.domain.recruit.domain;
-import com.clubber.ClubberServer.domain.calendar.domain.Calendar;
-import com.clubber.ClubberServer.domain.calendar.domain.CalendarStatus;
-import com.clubber.ClubberServer.domain.club.domain.Club;
-import com.clubber.ClubberServer.domain.common.BaseEntity;
-import com.clubber.ClubberServer.domain.recruit.exception.RecruitAlreadyCalendarUnlinkedException;
+import com.clubber.domain.calendar.domain.Calendar;
+import com.clubber.domain.calendar.domain.CalendarStatus;
+import com.clubber.domain.domains.club.domain.Club;
+import com.clubber.domain.common.BaseEntity;
+import com.clubber.domain.recruit.exception.RecruitAlreadyCalendarUnlinkedException;
import jakarta.persistence.*;
import jakarta.validation.constraints.NotNull;
import lombok.AccessLevel;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/recruit/domain/RecruitComment.java b/Clubber-External/src/main/java/com/clubber/domain/recruit/domain/RecruitComment.java
similarity index 89%
rename from src/main/java/com/clubber/ClubberServer/domain/recruit/domain/RecruitComment.java
rename to Clubber-External/src/main/java/com/clubber/domain/recruit/domain/RecruitComment.java
index bd411bf42..2f4a462aa 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/recruit/domain/RecruitComment.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/recruit/domain/RecruitComment.java
@@ -1,7 +1,7 @@
-package com.clubber.ClubberServer.domain.recruit.domain;
+package com.clubber.domain.recruit.domain;
-import com.clubber.ClubberServer.domain.common.BaseEntity;
-import com.clubber.ClubberServer.domain.user.domain.User;
+import com.clubber.domain.common.BaseEntity;
+import com.clubber.domain.domains.user.domain.User;
import jakarta.persistence.*;
import jakarta.validation.constraints.NotNull;
import lombok.AccessLevel;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/recruit/domain/RecruitImage.java b/Clubber-External/src/main/java/com/clubber/domain/recruit/domain/RecruitImage.java
similarity index 88%
rename from src/main/java/com/clubber/ClubberServer/domain/recruit/domain/RecruitImage.java
rename to Clubber-External/src/main/java/com/clubber/domain/recruit/domain/RecruitImage.java
index d13edcc9d..23532a083 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/recruit/domain/RecruitImage.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/recruit/domain/RecruitImage.java
@@ -1,7 +1,7 @@
-package com.clubber.ClubberServer.domain.recruit.domain;
+package com.clubber.domain.recruit.domain;
-import com.clubber.ClubberServer.domain.common.BaseEntity;
-import com.clubber.ClubberServer.global.vo.image.ImageVO;
+import com.clubber.domain.common.BaseEntity;
+import com.clubber.domain.common.vo.ImageVO;
import jakarta.persistence.*;
import lombok.AccessLevel;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/recruit/domain/RecruitType.java b/Clubber-External/src/main/java/com/clubber/domain/recruit/domain/RecruitType.java
similarity index 75%
rename from src/main/java/com/clubber/ClubberServer/domain/recruit/domain/RecruitType.java
rename to Clubber-External/src/main/java/com/clubber/domain/recruit/domain/RecruitType.java
index c10906f47..d60a8096d 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/recruit/domain/RecruitType.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/recruit/domain/RecruitType.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.domain.recruit.domain;
+package com.clubber.domain.recruit.domain;
-import com.clubber.ClubberServer.global.mapper.enums.EnumDefaultMapperType;
+import com.clubber.common.mapper.enums.EnumDefaultMapperType;
import lombok.AllArgsConstructor;
import lombok.Getter;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/recruit/dto/CreateLinkedCalendarRequest.java b/Clubber-External/src/main/java/com/clubber/domain/recruit/dto/CreateLinkedCalendarRequest.java
similarity index 85%
rename from src/main/java/com/clubber/ClubberServer/domain/recruit/dto/CreateLinkedCalendarRequest.java
rename to Clubber-External/src/main/java/com/clubber/domain/recruit/dto/CreateLinkedCalendarRequest.java
index 0d3b34cf1..9d7f6f1ee 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/recruit/dto/CreateLinkedCalendarRequest.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/recruit/dto/CreateLinkedCalendarRequest.java
@@ -1,4 +1,4 @@
-package com.clubber.ClubberServer.domain.recruit.dto;
+package com.clubber.domain.recruit.dto;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/recruit/dto/CreateLinkedCalendarResponse.java b/Clubber-External/src/main/java/com/clubber/domain/recruit/dto/CreateLinkedCalendarResponse.java
similarity index 64%
rename from src/main/java/com/clubber/ClubberServer/domain/recruit/dto/CreateLinkedCalendarResponse.java
rename to Clubber-External/src/main/java/com/clubber/domain/recruit/dto/CreateLinkedCalendarResponse.java
index 97c91af53..b186cc555 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/recruit/dto/CreateLinkedCalendarResponse.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/recruit/dto/CreateLinkedCalendarResponse.java
@@ -1,4 +1,4 @@
-package com.clubber.ClubberServer.domain.recruit.dto;
+package com.clubber.domain.recruit.dto;
public record CreateLinkedCalendarResponse(
Long recruitId,
diff --git a/src/main/java/com/clubber/ClubberServer/domain/recruit/dto/DeleteRecruitByIdResponse.java b/Clubber-External/src/main/java/com/clubber/domain/recruit/dto/DeleteRecruitByIdResponse.java
similarity index 94%
rename from src/main/java/com/clubber/ClubberServer/domain/recruit/dto/DeleteRecruitByIdResponse.java
rename to Clubber-External/src/main/java/com/clubber/domain/recruit/dto/DeleteRecruitByIdResponse.java
index 5475ab4f9..7776ccc49 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/recruit/dto/DeleteRecruitByIdResponse.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/recruit/dto/DeleteRecruitByIdResponse.java
@@ -1,7 +1,7 @@
-package com.clubber.ClubberServer.domain.recruit.dto;
+package com.clubber.domain.recruit.dto;
-import com.clubber.ClubberServer.domain.recruit.domain.Recruit;
-import com.clubber.ClubberServer.global.vo.image.ImageVO;
+import com.clubber.domain.recruit.domain.Recruit;
+import com.clubber.domain.common.vo.ImageVO;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import java.time.LocalDateTime;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/recruit/dto/GetOneAdminRecruitResponse.java b/Clubber-External/src/main/java/com/clubber/domain/recruit/dto/GetOneAdminRecruitResponse.java
similarity index 92%
rename from src/main/java/com/clubber/ClubberServer/domain/recruit/dto/GetOneAdminRecruitResponse.java
rename to Clubber-External/src/main/java/com/clubber/domain/recruit/dto/GetOneAdminRecruitResponse.java
index 1dea71b1a..9bd613646 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/recruit/dto/GetOneAdminRecruitResponse.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/recruit/dto/GetOneAdminRecruitResponse.java
@@ -1,8 +1,7 @@
-package com.clubber.ClubberServer.domain.recruit.dto;
+package com.clubber.domain.recruit.dto;
-import com.clubber.ClubberServer.domain.calendar.domain.CalendarStatus;
-import com.clubber.ClubberServer.domain.recruit.domain.Recruit;
-import com.clubber.ClubberServer.global.vo.image.ImageVO;
+import com.clubber.domain.recruit.domain.Recruit;
+import com.clubber.domain.common.vo.ImageVO;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/recruit/dto/GetOneRecruitInListResponse.java b/Clubber-External/src/main/java/com/clubber/domain/recruit/dto/GetOneRecruitInListResponse.java
similarity index 89%
rename from src/main/java/com/clubber/ClubberServer/domain/recruit/dto/GetOneRecruitInListResponse.java
rename to Clubber-External/src/main/java/com/clubber/domain/recruit/dto/GetOneRecruitInListResponse.java
index 364753450..6306b8268 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/recruit/dto/GetOneRecruitInListResponse.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/recruit/dto/GetOneRecruitInListResponse.java
@@ -1,9 +1,8 @@
-package com.clubber.ClubberServer.domain.recruit.dto;
+package com.clubber.domain.recruit.dto;
-import com.clubber.ClubberServer.domain.recruit.domain.Recruit;
-import com.clubber.ClubberServer.global.vo.image.ImageVO;
+import com.clubber.domain.recruit.domain.Recruit;
+import com.clubber.domain.common.vo.ImageVO;
import io.swagger.v3.oas.annotations.media.Schema;
-import jakarta.validation.constraints.NotBlank;
import java.time.LocalDateTime;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/recruit/dto/GetOneRecruitResponse.java b/Clubber-External/src/main/java/com/clubber/domain/recruit/dto/GetOneRecruitResponse.java
similarity index 93%
rename from src/main/java/com/clubber/ClubberServer/domain/recruit/dto/GetOneRecruitResponse.java
rename to Clubber-External/src/main/java/com/clubber/domain/recruit/dto/GetOneRecruitResponse.java
index 948394920..406c390f1 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/recruit/dto/GetOneRecruitResponse.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/recruit/dto/GetOneRecruitResponse.java
@@ -1,8 +1,8 @@
-package com.clubber.ClubberServer.domain.recruit.dto;
+package com.clubber.domain.recruit.dto;
-import com.clubber.ClubberServer.domain.recruit.domain.Recruit;
-import com.clubber.ClubberServer.global.vo.image.ImageVO;
+import com.clubber.domain.recruit.domain.Recruit;
+import com.clubber.domain.common.vo.ImageVO;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import java.time.LocalDateTime;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/recruit/dto/GetOneRecruitWithClubResponse.java b/Clubber-External/src/main/java/com/clubber/domain/recruit/dto/GetOneRecruitWithClubResponse.java
similarity index 93%
rename from src/main/java/com/clubber/ClubberServer/domain/recruit/dto/GetOneRecruitWithClubResponse.java
rename to Clubber-External/src/main/java/com/clubber/domain/recruit/dto/GetOneRecruitWithClubResponse.java
index e82ebd28d..aa7f53a03 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/recruit/dto/GetOneRecruitWithClubResponse.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/recruit/dto/GetOneRecruitWithClubResponse.java
@@ -1,8 +1,8 @@
-package com.clubber.ClubberServer.domain.recruit.dto;
+package com.clubber.domain.recruit.dto;
-import com.clubber.ClubberServer.domain.club.domain.Club;
-import com.clubber.ClubberServer.domain.recruit.domain.Recruit;
-import com.clubber.ClubberServer.global.vo.image.ImageVO;
+import com.clubber.domain.domains.club.domain.Club;
+import com.clubber.domain.recruit.domain.Recruit;
+import com.clubber.domain.common.vo.ImageVO;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/recruit/dto/GetRecruitResponse.java b/Clubber-External/src/main/java/com/clubber/domain/recruit/dto/GetRecruitResponse.java
similarity index 93%
rename from src/main/java/com/clubber/ClubberServer/domain/recruit/dto/GetRecruitResponse.java
rename to Clubber-External/src/main/java/com/clubber/domain/recruit/dto/GetRecruitResponse.java
index 58fc17bd6..bfc781959 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/recruit/dto/GetRecruitResponse.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/recruit/dto/GetRecruitResponse.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.domain.recruit.dto;
+package com.clubber.domain.recruit.dto;
-import com.clubber.ClubberServer.domain.recruit.domain.Recruit;
+import com.clubber.domain.recruit.domain.Recruit;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import java.time.LocalDateTime;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/recruit/dto/PostRecruitRequest.java b/Clubber-External/src/main/java/com/clubber/domain/recruit/dto/PostRecruitRequest.java
similarity index 88%
rename from src/main/java/com/clubber/ClubberServer/domain/recruit/dto/PostRecruitRequest.java
rename to Clubber-External/src/main/java/com/clubber/domain/recruit/dto/PostRecruitRequest.java
index 658754001..055b4ca6f 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/recruit/dto/PostRecruitRequest.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/recruit/dto/PostRecruitRequest.java
@@ -1,15 +1,15 @@
-package com.clubber.ClubberServer.domain.recruit.dto;
+package com.clubber.domain.recruit.dto;
-import com.clubber.ClubberServer.domain.club.domain.Club;
-import com.clubber.ClubberServer.domain.recruit.domain.Recruit;
-import com.clubber.ClubberServer.domain.recruit.domain.RecruitType;
+import com.clubber.domain.domains.club.domain.Club;
+import com.clubber.domain.recruit.domain.Recruit;
+import com.clubber.domain.recruit.domain.RecruitType;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import java.time.LocalDateTime;
import java.util.List;
-import lombok.AccessLevel;
+
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/recruit/dto/PostRecruitResponse.java b/Clubber-External/src/main/java/com/clubber/domain/recruit/dto/PostRecruitResponse.java
similarity index 90%
rename from src/main/java/com/clubber/ClubberServer/domain/recruit/dto/PostRecruitResponse.java
rename to Clubber-External/src/main/java/com/clubber/domain/recruit/dto/PostRecruitResponse.java
index 7492d7933..407a39169 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/recruit/dto/PostRecruitResponse.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/recruit/dto/PostRecruitResponse.java
@@ -1,9 +1,9 @@
-package com.clubber.ClubberServer.domain.recruit.dto;
+package com.clubber.domain.recruit.dto;
-import com.clubber.ClubberServer.domain.recruit.domain.Recruit;
-import com.clubber.ClubberServer.global.vo.image.ImageVO;
+import com.clubber.domain.recruit.domain.Recruit;
+import com.clubber.domain.common.vo.ImageVO;
import io.swagger.v3.oas.annotations.media.Schema;
-import jakarta.validation.constraints.NotBlank;
+
import java.time.LocalDateTime;
import java.util.List;
import lombok.AccessLevel;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/recruit/dto/UpdateRecruitRequest.java b/Clubber-External/src/main/java/com/clubber/domain/recruit/dto/UpdateRecruitRequest.java
similarity index 93%
rename from src/main/java/com/clubber/ClubberServer/domain/recruit/dto/UpdateRecruitRequest.java
rename to Clubber-External/src/main/java/com/clubber/domain/recruit/dto/UpdateRecruitRequest.java
index 846a2aafd..24185a943 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/recruit/dto/UpdateRecruitRequest.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/recruit/dto/UpdateRecruitRequest.java
@@ -1,13 +1,13 @@
-package com.clubber.ClubberServer.domain.recruit.dto;
+package com.clubber.domain.recruit.dto;
-import com.clubber.ClubberServer.domain.recruit.domain.RecruitType;
+import com.clubber.domain.recruit.domain.RecruitType;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import java.time.LocalDateTime;
import java.util.List;
-import lombok.AccessLevel;
+
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/recruit/dto/UpdateRecruitResponse.java b/Clubber-External/src/main/java/com/clubber/domain/recruit/dto/UpdateRecruitResponse.java
similarity index 95%
rename from src/main/java/com/clubber/ClubberServer/domain/recruit/dto/UpdateRecruitResponse.java
rename to Clubber-External/src/main/java/com/clubber/domain/recruit/dto/UpdateRecruitResponse.java
index aad3b4c8c..6198a46e5 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/recruit/dto/UpdateRecruitResponse.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/recruit/dto/UpdateRecruitResponse.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.domain.recruit.dto;
+package com.clubber.domain.recruit.dto;
-import com.clubber.ClubberServer.domain.recruit.domain.Recruit;
+import com.clubber.domain.recruit.domain.Recruit;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import java.time.LocalDateTime;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/recruit/dto/mainPage/GetOneRecruitMainPageResponse.java b/Clubber-External/src/main/java/com/clubber/domain/recruit/dto/mainPage/GetOneRecruitMainPageResponse.java
similarity index 87%
rename from src/main/java/com/clubber/ClubberServer/domain/recruit/dto/mainPage/GetOneRecruitMainPageResponse.java
rename to Clubber-External/src/main/java/com/clubber/domain/recruit/dto/mainPage/GetOneRecruitMainPageResponse.java
index 5687ad35f..d77cdbb51 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/recruit/dto/mainPage/GetOneRecruitMainPageResponse.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/recruit/dto/mainPage/GetOneRecruitMainPageResponse.java
@@ -1,7 +1,7 @@
-package com.clubber.ClubberServer.domain.recruit.dto.mainPage;
+package com.clubber.domain.recruit.dto.mainPage;
-import com.clubber.ClubberServer.domain.calendar.domain.CalendarStatus;
-import com.clubber.ClubberServer.domain.recruit.domain.Recruit;
+import com.clubber.domain.calendar.domain.CalendarStatus;
+import com.clubber.domain.recruit.domain.Recruit;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import java.time.LocalDateTime;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/recruit/dto/mainPage/GetRecruitsMainPageResponse.java b/Clubber-External/src/main/java/com/clubber/domain/recruit/dto/mainPage/GetRecruitsMainPageResponse.java
similarity index 89%
rename from src/main/java/com/clubber/ClubberServer/domain/recruit/dto/mainPage/GetRecruitsMainPageResponse.java
rename to Clubber-External/src/main/java/com/clubber/domain/recruit/dto/mainPage/GetRecruitsMainPageResponse.java
index dbe831264..1391c9712 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/recruit/dto/mainPage/GetRecruitsMainPageResponse.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/recruit/dto/mainPage/GetRecruitsMainPageResponse.java
@@ -1,4 +1,4 @@
-package com.clubber.ClubberServer.domain.recruit.dto.mainPage;
+package com.clubber.domain.recruit.dto.mainPage;
import java.util.List;
import lombok.AccessLevel;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/recruit/dto/recruitComment/DeleteRecruitCommentResponse.java b/Clubber-External/src/main/java/com/clubber/domain/recruit/dto/recruitComment/DeleteRecruitCommentResponse.java
similarity index 84%
rename from src/main/java/com/clubber/ClubberServer/domain/recruit/dto/recruitComment/DeleteRecruitCommentResponse.java
rename to Clubber-External/src/main/java/com/clubber/domain/recruit/dto/recruitComment/DeleteRecruitCommentResponse.java
index 663e5563a..5c734517c 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/recruit/dto/recruitComment/DeleteRecruitCommentResponse.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/recruit/dto/recruitComment/DeleteRecruitCommentResponse.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.domain.recruit.dto.recruitComment;
+package com.clubber.domain.recruit.dto.recruitComment;
-import com.clubber.ClubberServer.domain.recruit.domain.RecruitComment;
+import com.clubber.domain.recruit.domain.RecruitComment;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/recruit/dto/recruitComment/GetRecruitCommentResponse.java b/Clubber-External/src/main/java/com/clubber/domain/recruit/dto/recruitComment/GetRecruitCommentResponse.java
similarity index 92%
rename from src/main/java/com/clubber/ClubberServer/domain/recruit/dto/recruitComment/GetRecruitCommentResponse.java
rename to Clubber-External/src/main/java/com/clubber/domain/recruit/dto/recruitComment/GetRecruitCommentResponse.java
index b0b5571a1..c026c557c 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/recruit/dto/recruitComment/GetRecruitCommentResponse.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/recruit/dto/recruitComment/GetRecruitCommentResponse.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.domain.recruit.dto.recruitComment;
+package com.clubber.domain.recruit.dto.recruitComment;
-import com.clubber.ClubberServer.domain.recruit.domain.RecruitComment;
+import com.clubber.domain.recruit.domain.RecruitComment;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import java.time.LocalDateTime;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/recruit/dto/recruitComment/PostRecruitCommentRequest.java b/Clubber-External/src/main/java/com/clubber/domain/recruit/dto/recruitComment/PostRecruitCommentRequest.java
similarity index 77%
rename from src/main/java/com/clubber/ClubberServer/domain/recruit/dto/recruitComment/PostRecruitCommentRequest.java
rename to Clubber-External/src/main/java/com/clubber/domain/recruit/dto/recruitComment/PostRecruitCommentRequest.java
index 13db4e813..48bc669d7 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/recruit/dto/recruitComment/PostRecruitCommentRequest.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/recruit/dto/recruitComment/PostRecruitCommentRequest.java
@@ -1,8 +1,8 @@
-package com.clubber.ClubberServer.domain.recruit.dto.recruitComment;
+package com.clubber.domain.recruit.dto.recruitComment;
-import com.clubber.ClubberServer.domain.recruit.domain.Recruit;
-import com.clubber.ClubberServer.domain.recruit.domain.RecruitComment;
-import com.clubber.ClubberServer.domain.user.domain.User;
+import com.clubber.domain.recruit.domain.Recruit;
+import com.clubber.domain.recruit.domain.RecruitComment;
+import com.clubber.domain.domains.user.domain.User;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Size;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/recruit/dto/recruitComment/PostRecruitCommentResponse.java b/Clubber-External/src/main/java/com/clubber/domain/recruit/dto/recruitComment/PostRecruitCommentResponse.java
similarity index 88%
rename from src/main/java/com/clubber/ClubberServer/domain/recruit/dto/recruitComment/PostRecruitCommentResponse.java
rename to Clubber-External/src/main/java/com/clubber/domain/recruit/dto/recruitComment/PostRecruitCommentResponse.java
index 5fa5b7ebd..88128f11d 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/recruit/dto/recruitComment/PostRecruitCommentResponse.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/recruit/dto/recruitComment/PostRecruitCommentResponse.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.domain.recruit.dto.recruitComment;
+package com.clubber.domain.recruit.dto.recruitComment;
-import com.clubber.ClubberServer.domain.recruit.domain.RecruitComment;
+import com.clubber.domain.recruit.domain.RecruitComment;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import java.time.LocalDateTime;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/recruit/exception/RecruitAlreadyCalendarUnlinkedException.java b/Clubber-External/src/main/java/com/clubber/domain/recruit/exception/RecruitAlreadyCalendarUnlinkedException.java
similarity index 54%
rename from src/main/java/com/clubber/ClubberServer/domain/recruit/exception/RecruitAlreadyCalendarUnlinkedException.java
rename to Clubber-External/src/main/java/com/clubber/domain/recruit/exception/RecruitAlreadyCalendarUnlinkedException.java
index 082454a6c..fa6f395bf 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/recruit/exception/RecruitAlreadyCalendarUnlinkedException.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/recruit/exception/RecruitAlreadyCalendarUnlinkedException.java
@@ -1,8 +1,8 @@
-package com.clubber.ClubberServer.domain.recruit.exception;
+package com.clubber.domain.recruit.exception;
-import com.clubber.ClubberServer.global.exception.BaseException;
+import com.clubber.common.exception.BaseException;
-import static com.clubber.ClubberServer.domain.recruit.exception.RecruitErrorCode.RECRUIT_ALREADY_CALENDAR_UNLINKED;
+import static com.clubber.domain.recruit.exception.RecruitErrorCode.RECRUIT_ALREADY_CALENDAR_UNLINKED;
public class RecruitAlreadyCalendarUnlinkedException extends BaseException {
diff --git a/src/main/java/com/clubber/ClubberServer/domain/recruit/exception/RecruitCalendarInvalidYearException.java b/Clubber-External/src/main/java/com/clubber/domain/recruit/exception/RecruitCalendarInvalidYearException.java
similarity index 70%
rename from src/main/java/com/clubber/ClubberServer/domain/recruit/exception/RecruitCalendarInvalidYearException.java
rename to Clubber-External/src/main/java/com/clubber/domain/recruit/exception/RecruitCalendarInvalidYearException.java
index 3fd492bd9..5290e7f68 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/recruit/exception/RecruitCalendarInvalidYearException.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/recruit/exception/RecruitCalendarInvalidYearException.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.domain.recruit.exception;
+package com.clubber.domain.recruit.exception;
-import com.clubber.ClubberServer.global.exception.BaseException;
+import com.clubber.common.exception.BaseException;
public class RecruitCalendarInvalidYearException extends BaseException {
diff --git a/src/main/java/com/clubber/ClubberServer/domain/recruit/exception/RecruitCommentNotFoundException.java b/Clubber-External/src/main/java/com/clubber/domain/recruit/exception/RecruitCommentNotFoundException.java
similarity index 68%
rename from src/main/java/com/clubber/ClubberServer/domain/recruit/exception/RecruitCommentNotFoundException.java
rename to Clubber-External/src/main/java/com/clubber/domain/recruit/exception/RecruitCommentNotFoundException.java
index 68376c168..c044180a1 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/recruit/exception/RecruitCommentNotFoundException.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/recruit/exception/RecruitCommentNotFoundException.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.domain.recruit.exception;
+package com.clubber.domain.recruit.exception;
-import com.clubber.ClubberServer.global.exception.BaseException;
+import com.clubber.common.exception.BaseException;
public class RecruitCommentNotFoundException extends BaseException {
diff --git a/src/main/java/com/clubber/ClubberServer/domain/recruit/exception/RecruitCommentUserUnauthorizedException.java b/Clubber-External/src/main/java/com/clubber/domain/recruit/exception/RecruitCommentUserUnauthorizedException.java
similarity index 70%
rename from src/main/java/com/clubber/ClubberServer/domain/recruit/exception/RecruitCommentUserUnauthorizedException.java
rename to Clubber-External/src/main/java/com/clubber/domain/recruit/exception/RecruitCommentUserUnauthorizedException.java
index 37d58230d..a6ca14c52 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/recruit/exception/RecruitCommentUserUnauthorizedException.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/recruit/exception/RecruitCommentUserUnauthorizedException.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.domain.recruit.exception;
+package com.clubber.domain.recruit.exception;
-import com.clubber.ClubberServer.global.exception.BaseException;
+import com.clubber.common.exception.BaseException;
public class RecruitCommentUserUnauthorizedException extends BaseException {
diff --git a/src/main/java/com/clubber/ClubberServer/domain/recruit/exception/RecruitDateOutOfOrder.java b/Clubber-External/src/main/java/com/clubber/domain/recruit/exception/RecruitDateOutOfOrder.java
similarity index 66%
rename from src/main/java/com/clubber/ClubberServer/domain/recruit/exception/RecruitDateOutOfOrder.java
rename to Clubber-External/src/main/java/com/clubber/domain/recruit/exception/RecruitDateOutOfOrder.java
index b780d1204..9b076a421 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/recruit/exception/RecruitDateOutOfOrder.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/recruit/exception/RecruitDateOutOfOrder.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.domain.recruit.exception;
+package com.clubber.domain.recruit.exception;
-import com.clubber.ClubberServer.global.exception.BaseException;
+import com.clubber.common.exception.BaseException;
public class RecruitDateOutOfOrder extends BaseException {
diff --git a/src/main/java/com/clubber/ClubberServer/domain/recruit/exception/RecruitDeleteUnauthorizedException.java b/Clubber-External/src/main/java/com/clubber/domain/recruit/exception/RecruitDeleteUnauthorizedException.java
similarity index 69%
rename from src/main/java/com/clubber/ClubberServer/domain/recruit/exception/RecruitDeleteUnauthorizedException.java
rename to Clubber-External/src/main/java/com/clubber/domain/recruit/exception/RecruitDeleteUnauthorizedException.java
index 17d796ae0..0c2e69c06 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/recruit/exception/RecruitDeleteUnauthorizedException.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/recruit/exception/RecruitDeleteUnauthorizedException.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.domain.recruit.exception;
+package com.clubber.domain.recruit.exception;
-import com.clubber.ClubberServer.global.exception.BaseException;
+import com.clubber.common.exception.BaseException;
public class RecruitDeleteUnauthorizedException extends BaseException {
diff --git a/src/main/java/com/clubber/ClubberServer/domain/recruit/exception/RecruitErrorCode.java b/Clubber-External/src/main/java/com/clubber/domain/recruit/exception/RecruitErrorCode.java
similarity index 92%
rename from src/main/java/com/clubber/ClubberServer/domain/recruit/exception/RecruitErrorCode.java
rename to Clubber-External/src/main/java/com/clubber/domain/recruit/exception/RecruitErrorCode.java
index 8c06a9ed4..acffb9b0a 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/recruit/exception/RecruitErrorCode.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/recruit/exception/RecruitErrorCode.java
@@ -1,7 +1,7 @@
-package com.clubber.ClubberServer.domain.recruit.exception;
+package com.clubber.domain.recruit.exception;
-import com.clubber.ClubberServer.global.exception.BaseErrorCode;
-import com.clubber.ClubberServer.global.exception.ErrorReason;
+import com.clubber.common.exception.BaseErrorCode;
+import com.clubber.common.exception.ErrorReason;
import lombok.AllArgsConstructor;
import org.springframework.http.HttpStatus;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/recruit/exception/RecruitImageDeleteRemainDuplicatedException.java b/Clubber-External/src/main/java/com/clubber/domain/recruit/exception/RecruitImageDeleteRemainDuplicatedException.java
similarity index 72%
rename from src/main/java/com/clubber/ClubberServer/domain/recruit/exception/RecruitImageDeleteRemainDuplicatedException.java
rename to Clubber-External/src/main/java/com/clubber/domain/recruit/exception/RecruitImageDeleteRemainDuplicatedException.java
index 7f6cc7b07..319c18c4e 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/recruit/exception/RecruitImageDeleteRemainDuplicatedException.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/recruit/exception/RecruitImageDeleteRemainDuplicatedException.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.domain.recruit.exception;
+package com.clubber.domain.recruit.exception;
-import com.clubber.ClubberServer.global.exception.BaseException;
+import com.clubber.common.exception.BaseException;
public class RecruitImageDeleteRemainDuplicatedException extends BaseException {
diff --git a/src/main/java/com/clubber/ClubberServer/domain/recruit/exception/RecruitImageNotFoundException.java b/Clubber-External/src/main/java/com/clubber/domain/recruit/exception/RecruitImageNotFoundException.java
similarity index 68%
rename from src/main/java/com/clubber/ClubberServer/domain/recruit/exception/RecruitImageNotFoundException.java
rename to Clubber-External/src/main/java/com/clubber/domain/recruit/exception/RecruitImageNotFoundException.java
index de63ae879..ca5b787f9 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/recruit/exception/RecruitImageNotFoundException.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/recruit/exception/RecruitImageNotFoundException.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.domain.recruit.exception;
+package com.clubber.domain.recruit.exception;
-import com.clubber.ClubberServer.global.exception.BaseException;
+import com.clubber.common.exception.BaseException;
public class RecruitImageNotFoundException extends BaseException {
diff --git a/src/main/java/com/clubber/ClubberServer/domain/recruit/exception/RecruitImageRevisedFinalSizeException.java b/Clubber-External/src/main/java/com/clubber/domain/recruit/exception/RecruitImageRevisedFinalSizeException.java
similarity index 71%
rename from src/main/java/com/clubber/ClubberServer/domain/recruit/exception/RecruitImageRevisedFinalSizeException.java
rename to Clubber-External/src/main/java/com/clubber/domain/recruit/exception/RecruitImageRevisedFinalSizeException.java
index 95439b2e7..967099722 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/recruit/exception/RecruitImageRevisedFinalSizeException.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/recruit/exception/RecruitImageRevisedFinalSizeException.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.domain.recruit.exception;
+package com.clubber.domain.recruit.exception;
-import com.clubber.ClubberServer.global.exception.BaseException;
+import com.clubber.common.exception.BaseException;
public class RecruitImageRevisedFinalSizeException extends BaseException {
diff --git a/src/main/java/com/clubber/ClubberServer/domain/recruit/exception/RecruitInvalidPeriodException.java b/Clubber-External/src/main/java/com/clubber/domain/recruit/exception/RecruitInvalidPeriodException.java
similarity index 68%
rename from src/main/java/com/clubber/ClubberServer/domain/recruit/exception/RecruitInvalidPeriodException.java
rename to Clubber-External/src/main/java/com/clubber/domain/recruit/exception/RecruitInvalidPeriodException.java
index 3895f21cd..c7cb4ba78 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/recruit/exception/RecruitInvalidPeriodException.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/recruit/exception/RecruitInvalidPeriodException.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.domain.recruit.exception;
+package com.clubber.domain.recruit.exception;
-import com.clubber.ClubberServer.global.exception.BaseException;
+import com.clubber.common.exception.BaseException;
public class RecruitInvalidPeriodException extends BaseException {
diff --git a/src/main/java/com/clubber/ClubberServer/domain/recruit/exception/RecruitMissingPeriodException.java b/Clubber-External/src/main/java/com/clubber/domain/recruit/exception/RecruitMissingPeriodException.java
similarity index 68%
rename from src/main/java/com/clubber/ClubberServer/domain/recruit/exception/RecruitMissingPeriodException.java
rename to Clubber-External/src/main/java/com/clubber/domain/recruit/exception/RecruitMissingPeriodException.java
index 38395a8d0..1a0e489cb 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/recruit/exception/RecruitMissingPeriodException.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/recruit/exception/RecruitMissingPeriodException.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.domain.recruit.exception;
+package com.clubber.domain.recruit.exception;
-import com.clubber.ClubberServer.global.exception.BaseException;
+import com.clubber.common.exception.BaseException;
public class RecruitMissingPeriodException extends BaseException {
diff --git a/src/main/java/com/clubber/ClubberServer/domain/recruit/exception/RecruitNotFoundException.java b/Clubber-External/src/main/java/com/clubber/domain/recruit/exception/RecruitNotFoundException.java
similarity index 66%
rename from src/main/java/com/clubber/ClubberServer/domain/recruit/exception/RecruitNotFoundException.java
rename to Clubber-External/src/main/java/com/clubber/domain/recruit/exception/RecruitNotFoundException.java
index e2908b89d..8c83bf01e 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/recruit/exception/RecruitNotFoundException.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/recruit/exception/RecruitNotFoundException.java
@@ -1,5 +1,5 @@
-package com.clubber.ClubberServer.domain.recruit.exception;
-import com.clubber.ClubberServer.global.exception.BaseException;
+package com.clubber.domain.recruit.exception;
+import com.clubber.common.exception.BaseException;
public class RecruitNotFoundException extends BaseException {
public static final BaseException EXCEPTION = new RecruitNotFoundException();
diff --git a/src/main/java/com/clubber/ClubberServer/domain/recruit/exception/RecruitPeriodNotAllowedException.java b/Clubber-External/src/main/java/com/clubber/domain/recruit/exception/RecruitPeriodNotAllowedException.java
similarity index 69%
rename from src/main/java/com/clubber/ClubberServer/domain/recruit/exception/RecruitPeriodNotAllowedException.java
rename to Clubber-External/src/main/java/com/clubber/domain/recruit/exception/RecruitPeriodNotAllowedException.java
index 04014eefd..ac8caf1d9 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/recruit/exception/RecruitPeriodNotAllowedException.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/recruit/exception/RecruitPeriodNotAllowedException.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.domain.recruit.exception;
+package com.clubber.domain.recruit.exception;
-import com.clubber.ClubberServer.global.exception.BaseException;
+import com.clubber.common.exception.BaseException;
public class RecruitPeriodNotAllowedException extends BaseException {
diff --git a/src/main/java/com/clubber/ClubberServer/domain/recruit/exception/RecruitUnauthorizedException.java b/Clubber-External/src/main/java/com/clubber/domain/recruit/exception/RecruitUnauthorizedException.java
similarity index 68%
rename from src/main/java/com/clubber/ClubberServer/domain/recruit/exception/RecruitUnauthorizedException.java
rename to Clubber-External/src/main/java/com/clubber/domain/recruit/exception/RecruitUnauthorizedException.java
index 7602173a7..76edc8015 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/recruit/exception/RecruitUnauthorizedException.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/recruit/exception/RecruitUnauthorizedException.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.domain.recruit.exception;
+package com.clubber.domain.recruit.exception;
-import com.clubber.ClubberServer.global.exception.BaseException;
+import com.clubber.common.exception.BaseException;
public class RecruitUnauthorizedException extends BaseException {
diff --git a/src/main/java/com/clubber/ClubberServer/domain/recruit/implement/RecruitAppender.java b/Clubber-External/src/main/java/com/clubber/domain/recruit/implement/RecruitAppender.java
similarity index 80%
rename from src/main/java/com/clubber/ClubberServer/domain/recruit/implement/RecruitAppender.java
rename to Clubber-External/src/main/java/com/clubber/domain/recruit/implement/RecruitAppender.java
index 4539f20c9..86ee5ffff 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/recruit/implement/RecruitAppender.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/recruit/implement/RecruitAppender.java
@@ -1,9 +1,9 @@
-package com.clubber.ClubberServer.domain.recruit.implement;
+package com.clubber.domain.recruit.implement;
-import com.clubber.ClubberServer.domain.calendar.implement.CalendarAppender;
-import com.clubber.ClubberServer.domain.recruit.domain.Recruit;
-import com.clubber.ClubberServer.domain.recruit.dto.UpdateRecruitRequest;
-import com.clubber.ClubberServer.domain.recruit.repository.RecruitRepository;
+import com.clubber.domain.calendar.implement.CalendarAppender;
+import com.clubber.domain.recruit.domain.Recruit;
+import com.clubber.domain.recruit.dto.UpdateRecruitRequest;
+import com.clubber.domain.recruit.repository.RecruitRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/recruit/implement/RecruitCommentAppender.java b/Clubber-External/src/main/java/com/clubber/domain/recruit/implement/RecruitCommentAppender.java
similarity index 63%
rename from src/main/java/com/clubber/ClubberServer/domain/recruit/implement/RecruitCommentAppender.java
rename to Clubber-External/src/main/java/com/clubber/domain/recruit/implement/RecruitCommentAppender.java
index ada02c33c..fb3ac88f2 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/recruit/implement/RecruitCommentAppender.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/recruit/implement/RecruitCommentAppender.java
@@ -1,10 +1,10 @@
-package com.clubber.ClubberServer.domain.recruit.implement;
+package com.clubber.domain.recruit.implement;
-import com.clubber.ClubberServer.domain.recruit.domain.Recruit;
-import com.clubber.ClubberServer.domain.recruit.domain.RecruitComment;
-import com.clubber.ClubberServer.domain.recruit.dto.recruitComment.PostRecruitCommentRequest;
-import com.clubber.ClubberServer.domain.recruit.repository.RecruitCommentRepository;
-import com.clubber.ClubberServer.domain.user.domain.User;
+import com.clubber.domain.recruit.domain.Recruit;
+import com.clubber.domain.recruit.domain.RecruitComment;
+import com.clubber.domain.recruit.dto.recruitComment.PostRecruitCommentRequest;
+import com.clubber.domain.recruit.repository.RecruitCommentRepository;
+import com.clubber.domain.domains.user.domain.User;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/recruit/implement/RecruitCommentReader.java b/Clubber-External/src/main/java/com/clubber/domain/recruit/implement/RecruitCommentReader.java
similarity index 73%
rename from src/main/java/com/clubber/ClubberServer/domain/recruit/implement/RecruitCommentReader.java
rename to Clubber-External/src/main/java/com/clubber/domain/recruit/implement/RecruitCommentReader.java
index d49566046..55a0c37cc 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/recruit/implement/RecruitCommentReader.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/recruit/implement/RecruitCommentReader.java
@@ -1,9 +1,9 @@
-package com.clubber.ClubberServer.domain.recruit.implement;
+package com.clubber.domain.recruit.implement;
-import com.clubber.ClubberServer.domain.recruit.domain.Recruit;
-import com.clubber.ClubberServer.domain.recruit.domain.RecruitComment;
-import com.clubber.ClubberServer.domain.recruit.exception.RecruitCommentNotFoundException;
-import com.clubber.ClubberServer.domain.recruit.repository.RecruitCommentRepository;
+import com.clubber.domain.recruit.domain.Recruit;
+import com.clubber.domain.recruit.domain.RecruitComment;
+import com.clubber.domain.recruit.exception.RecruitCommentNotFoundException;
+import com.clubber.domain.recruit.repository.RecruitCommentRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/recruit/implement/RecruitImageAppender.java b/Clubber-External/src/main/java/com/clubber/domain/recruit/implement/RecruitImageAppender.java
similarity index 75%
rename from src/main/java/com/clubber/ClubberServer/domain/recruit/implement/RecruitImageAppender.java
rename to Clubber-External/src/main/java/com/clubber/domain/recruit/implement/RecruitImageAppender.java
index fb0b8dc4a..42a9d5465 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/recruit/implement/RecruitImageAppender.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/recruit/implement/RecruitImageAppender.java
@@ -1,9 +1,9 @@
-package com.clubber.ClubberServer.domain.recruit.implement;
+package com.clubber.domain.recruit.implement;
-import com.clubber.ClubberServer.domain.recruit.domain.Recruit;
-import com.clubber.ClubberServer.domain.recruit.domain.RecruitImage;
-import com.clubber.ClubberServer.domain.recruit.repository.RecruitImageRepository;
-import com.clubber.ClubberServer.global.vo.image.ImageVO;
+import com.clubber.domain.recruit.domain.Recruit;
+import com.clubber.domain.recruit.domain.RecruitImage;
+import com.clubber.domain.recruit.repository.RecruitImageRepository;
+import com.clubber.domain.common.vo.ImageVO;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/recruit/implement/RecruitReader.java b/Clubber-External/src/main/java/com/clubber/domain/recruit/implement/RecruitReader.java
similarity index 78%
rename from src/main/java/com/clubber/ClubberServer/domain/recruit/implement/RecruitReader.java
rename to Clubber-External/src/main/java/com/clubber/domain/recruit/implement/RecruitReader.java
index 4d3ef0125..8c2d77411 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/recruit/implement/RecruitReader.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/recruit/implement/RecruitReader.java
@@ -1,10 +1,10 @@
-package com.clubber.ClubberServer.domain.recruit.implement;
+package com.clubber.domain.recruit.implement;
-import com.clubber.ClubberServer.domain.calendar.domain.Calendar;
-import com.clubber.ClubberServer.domain.club.domain.Club;
-import com.clubber.ClubberServer.domain.recruit.domain.Recruit;
-import com.clubber.ClubberServer.domain.recruit.exception.RecruitNotFoundException;
-import com.clubber.ClubberServer.domain.recruit.repository.RecruitRepository;
+import com.clubber.domain.calendar.domain.Calendar;
+import com.clubber.domain.domains.club.domain.Club;
+import com.clubber.domain.recruit.domain.Recruit;
+import com.clubber.domain.recruit.exception.RecruitNotFoundException;
+import com.clubber.domain.recruit.repository.RecruitRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/recruit/implement/RecruitValidator.java b/Clubber-External/src/main/java/com/clubber/domain/recruit/implement/RecruitValidator.java
similarity index 57%
rename from src/main/java/com/clubber/ClubberServer/domain/recruit/implement/RecruitValidator.java
rename to Clubber-External/src/main/java/com/clubber/domain/recruit/implement/RecruitValidator.java
index f01f78e64..5efffb27a 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/recruit/implement/RecruitValidator.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/recruit/implement/RecruitValidator.java
@@ -1,15 +1,15 @@
-package com.clubber.ClubberServer.domain.recruit.implement;
+package com.clubber.domain.recruit.implement;
-import com.clubber.ClubberServer.domain.admin.domain.Admin;
-import com.clubber.ClubberServer.domain.recruit.domain.Recruit;
-import com.clubber.ClubberServer.domain.recruit.domain.RecruitComment;
-import com.clubber.ClubberServer.domain.recruit.domain.RecruitType;
-import com.clubber.ClubberServer.domain.recruit.exception.RecruitCommentUserUnauthorizedException;
-import com.clubber.ClubberServer.domain.recruit.exception.RecruitDeleteUnauthorizedException;
-import com.clubber.ClubberServer.domain.recruit.exception.RecruitInvalidPeriodException;
-import com.clubber.ClubberServer.domain.recruit.exception.RecruitMissingPeriodException;
-import com.clubber.ClubberServer.domain.recruit.exception.RecruitPeriodNotAllowedException;
-import com.clubber.ClubberServer.domain.user.domain.User;
+import com.clubber.domain.domains.admin.domain.Admin;
+import com.clubber.domain.recruit.domain.Recruit;
+import com.clubber.domain.recruit.domain.RecruitComment;
+import com.clubber.domain.recruit.domain.RecruitType;
+import com.clubber.domain.recruit.exception.RecruitCommentUserUnauthorizedException;
+import com.clubber.domain.recruit.exception.RecruitDeleteUnauthorizedException;
+import com.clubber.domain.recruit.exception.RecruitInvalidPeriodException;
+import com.clubber.domain.recruit.exception.RecruitMissingPeriodException;
+import com.clubber.domain.recruit.exception.RecruitPeriodNotAllowedException;
+import com.clubber.domain.domains.user.domain.User;
import java.time.LocalDateTime;
import org.springframework.stereotype.Component;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/recruit/mapper/RecruitMapper.java b/Clubber-External/src/main/java/com/clubber/domain/recruit/mapper/RecruitMapper.java
similarity index 77%
rename from src/main/java/com/clubber/ClubberServer/domain/recruit/mapper/RecruitMapper.java
rename to Clubber-External/src/main/java/com/clubber/domain/recruit/mapper/RecruitMapper.java
index 0ed2a2751..5dea4dc3b 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/recruit/mapper/RecruitMapper.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/recruit/mapper/RecruitMapper.java
@@ -1,17 +1,19 @@
-package com.clubber.ClubberServer.domain.recruit.mapper;
-
-import com.clubber.ClubberServer.domain.calendar.domain.CalendarStatus;
-import com.clubber.ClubberServer.domain.recruit.domain.Recruit;
-import com.clubber.ClubberServer.domain.recruit.domain.RecruitComment;
-import com.clubber.ClubberServer.domain.recruit.domain.RecruitImage;
-import com.clubber.ClubberServer.domain.recruit.domain.RecruitType;
-import com.clubber.ClubberServer.domain.recruit.dto.*;
-import com.clubber.ClubberServer.domain.recruit.dto.mainPage.GetOneRecruitMainPageResponse;
-import com.clubber.ClubberServer.domain.recruit.dto.mainPage.GetRecruitsMainPageResponse;
-import com.clubber.ClubberServer.domain.recruit.dto.recruitComment.GetRecruitCommentResponse;
-import com.clubber.ClubberServer.domain.recruit.vo.RecruitCommentVO;
-import com.clubber.ClubberServer.global.common.page.PageResponse;
-import com.clubber.ClubberServer.global.vo.image.ImageVO;
+package com.clubber.domain.recruit.mapper;
+
+import com.clubber.domain.calendar.domain.CalendarStatus;
+import com.clubber.domain.recruit.domain.Recruit;
+import com.clubber.domain.recruit.domain.RecruitComment;
+import com.clubber.domain.recruit.domain.RecruitImage;
+import com.clubber.domain.recruit.dto.GetOneAdminRecruitResponse;
+import com.clubber.domain.recruit.dto.GetOneRecruitInListResponse;
+import com.clubber.domain.recruit.dto.GetOneRecruitWithClubResponse;
+import com.clubber.domain.recruit.dto.PostRecruitResponse;
+import com.clubber.domain.recruit.dto.mainPage.GetOneRecruitMainPageResponse;
+import com.clubber.domain.recruit.dto.mainPage.GetRecruitsMainPageResponse;
+import com.clubber.domain.recruit.dto.recruitComment.GetRecruitCommentResponse;
+import com.clubber.domain.recruit.vo.RecruitCommentVO;
+import com.clubber.global.common.page.PageResponse;
+import com.clubber.domain.common.vo.ImageVO;
import java.time.LocalDateTime;
import org.springframework.data.domain.Page;
import org.springframework.stereotype.Component;
@@ -54,7 +56,7 @@ public GetOneAdminRecruitResponse getOneAdminRecruitsById(Recruit recruit) {
}
public PostRecruitResponse getRecruitWithImageUrls(Recruit newRecruit,
- List savedImages, Boolean isCalendarLinked) {
+ List savedImages, Boolean isCalendarLinked) {
List imageUrls = savedImages.stream()
.sorted(Comparator.comparing(RecruitImage::getOrderNum))
.map(RecruitImage::getImageUrl)
diff --git a/src/main/java/com/clubber/ClubberServer/domain/recruit/repository/RecruitCommentRepository.java b/Clubber-External/src/main/java/com/clubber/domain/recruit/repository/RecruitCommentRepository.java
similarity index 65%
rename from src/main/java/com/clubber/ClubberServer/domain/recruit/repository/RecruitCommentRepository.java
rename to Clubber-External/src/main/java/com/clubber/domain/recruit/repository/RecruitCommentRepository.java
index b988be9e2..a7b9ef8e7 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/recruit/repository/RecruitCommentRepository.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/recruit/repository/RecruitCommentRepository.java
@@ -1,7 +1,7 @@
-package com.clubber.ClubberServer.domain.recruit.repository;
+package com.clubber.domain.recruit.repository;
-import com.clubber.ClubberServer.domain.recruit.domain.Recruit;
-import com.clubber.ClubberServer.domain.recruit.domain.RecruitComment;
+import com.clubber.domain.recruit.domain.Recruit;
+import com.clubber.domain.recruit.domain.RecruitComment;
import java.util.List;
import java.util.Optional;
import org.springframework.data.jpa.repository.JpaRepository;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/recruit/repository/RecruitCustomRepository.java b/Clubber-External/src/main/java/com/clubber/domain/recruit/repository/RecruitCustomRepository.java
similarity index 71%
rename from src/main/java/com/clubber/ClubberServer/domain/recruit/repository/RecruitCustomRepository.java
rename to Clubber-External/src/main/java/com/clubber/domain/recruit/repository/RecruitCustomRepository.java
index 892fede9b..aedaec01a 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/recruit/repository/RecruitCustomRepository.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/recruit/repository/RecruitCustomRepository.java
@@ -1,7 +1,7 @@
-package com.clubber.ClubberServer.domain.recruit.repository;
+package com.clubber.domain.recruit.repository;
-import com.clubber.ClubberServer.domain.club.domain.Club;
-import com.clubber.ClubberServer.domain.recruit.domain.Recruit;
+import com.clubber.domain.domains.club.domain.Club;
+import com.clubber.domain.recruit.domain.Recruit;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/recruit/repository/RecruitCustomRepositoryImpl.java b/Clubber-External/src/main/java/com/clubber/domain/recruit/repository/RecruitCustomRepositoryImpl.java
similarity index 91%
rename from src/main/java/com/clubber/ClubberServer/domain/recruit/repository/RecruitCustomRepositoryImpl.java
rename to Clubber-External/src/main/java/com/clubber/domain/recruit/repository/RecruitCustomRepositoryImpl.java
index 8504b0d06..fcdca2b59 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/recruit/repository/RecruitCustomRepositoryImpl.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/recruit/repository/RecruitCustomRepositoryImpl.java
@@ -1,9 +1,7 @@
-package com.clubber.ClubberServer.domain.recruit.repository;
+package com.clubber.domain.recruit.repository;
-import static com.clubber.ClubberServer.domain.recruit.domain.QRecruit.recruit;
-
-import com.clubber.ClubberServer.domain.club.domain.Club;
-import com.clubber.ClubberServer.domain.recruit.domain.Recruit;
+import com.clubber.domain.domains.club.domain.Club;
+import com.clubber.domain.recruit.domain.Recruit;
import com.querydsl.jpa.impl.JPAQuery;
import com.querydsl.jpa.impl.JPAQueryFactory;
@@ -15,6 +13,8 @@
import org.springframework.data.domain.Pageable;
import org.springframework.data.support.PageableExecutionUtils;
+import static com.clubber.domain.recruit.domain.QRecruit.recruit;
+
@RequiredArgsConstructor
public class RecruitCustomRepositoryImpl implements RecruitCustomRepository {
diff --git a/Clubber-External/src/main/java/com/clubber/domain/recruit/repository/RecruitImageCustomRepository.java b/Clubber-External/src/main/java/com/clubber/domain/recruit/repository/RecruitImageCustomRepository.java
new file mode 100644
index 000000000..28700e24f
--- /dev/null
+++ b/Clubber-External/src/main/java/com/clubber/domain/recruit/repository/RecruitImageCustomRepository.java
@@ -0,0 +1,11 @@
+package com.clubber.domain.recruit.repository;
+
+import com.clubber.domain.recruit.domain.Recruit;
+import com.clubber.domain.recruit.domain.RecruitImage;
+
+import java.util.List;
+
+public interface RecruitImageCustomRepository {
+
+ List queryRecruitImages(Recruit recruit);
+}
diff --git a/src/main/java/com/clubber/ClubberServer/domain/recruit/repository/RecruitImageCustomRepositoryImpl.java b/Clubber-External/src/main/java/com/clubber/domain/recruit/repository/RecruitImageCustomRepositoryImpl.java
similarity index 66%
rename from src/main/java/com/clubber/ClubberServer/domain/recruit/repository/RecruitImageCustomRepositoryImpl.java
rename to Clubber-External/src/main/java/com/clubber/domain/recruit/repository/RecruitImageCustomRepositoryImpl.java
index ba160d438..cd990b82a 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/recruit/repository/RecruitImageCustomRepositoryImpl.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/recruit/repository/RecruitImageCustomRepositoryImpl.java
@@ -1,12 +1,12 @@
-package com.clubber.ClubberServer.domain.recruit.repository;
+package com.clubber.domain.recruit.repository;
-import com.clubber.ClubberServer.domain.recruit.domain.Recruit;
-import com.clubber.ClubberServer.domain.recruit.domain.RecruitImage;
+import com.clubber.domain.recruit.domain.Recruit;
+import com.clubber.domain.recruit.domain.RecruitImage;
import com.querydsl.jpa.impl.JPAQueryFactory;
import lombok.RequiredArgsConstructor;
import java.util.List;
-import static com.clubber.ClubberServer.domain.recruit.domain.QRecruitImage.recruitImage;
+import static com.clubber.domain.recruit.domain.QRecruitImage.recruitImage;
@RequiredArgsConstructor
public class RecruitImageCustomRepositoryImpl implements RecruitImageCustomRepository {
diff --git a/src/main/java/com/clubber/ClubberServer/domain/recruit/repository/RecruitImageRepository.java b/Clubber-External/src/main/java/com/clubber/domain/recruit/repository/RecruitImageRepository.java
similarity index 58%
rename from src/main/java/com/clubber/ClubberServer/domain/recruit/repository/RecruitImageRepository.java
rename to Clubber-External/src/main/java/com/clubber/domain/recruit/repository/RecruitImageRepository.java
index 690131e52..27ea75e52 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/recruit/repository/RecruitImageRepository.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/recruit/repository/RecruitImageRepository.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.domain.recruit.repository;
+package com.clubber.domain.recruit.repository;
-import com.clubber.ClubberServer.domain.recruit.domain.RecruitImage;
+import com.clubber.domain.recruit.domain.RecruitImage;
import org.springframework.data.jpa.repository.JpaRepository;
public interface RecruitImageRepository extends JpaRepository,
diff --git a/src/main/java/com/clubber/ClubberServer/domain/recruit/repository/RecruitRepository.java b/Clubber-External/src/main/java/com/clubber/domain/recruit/repository/RecruitRepository.java
similarity index 76%
rename from src/main/java/com/clubber/ClubberServer/domain/recruit/repository/RecruitRepository.java
rename to Clubber-External/src/main/java/com/clubber/domain/recruit/repository/RecruitRepository.java
index 5b4b24f55..ee24cfb95 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/recruit/repository/RecruitRepository.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/recruit/repository/RecruitRepository.java
@@ -1,8 +1,8 @@
-package com.clubber.ClubberServer.domain.recruit.repository;
+package com.clubber.domain.recruit.repository;
-import com.clubber.ClubberServer.domain.calendar.domain.Calendar;
-import com.clubber.ClubberServer.domain.club.domain.Club;
-import com.clubber.ClubberServer.domain.recruit.domain.Recruit;
+import com.clubber.domain.calendar.domain.Calendar;
+import com.clubber.domain.domains.club.domain.Club;
+import com.clubber.domain.recruit.domain.Recruit;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Optional;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/recruit/service/RecruitCommentService.java b/Clubber-External/src/main/java/com/clubber/domain/recruit/service/RecruitCommentService.java
similarity index 63%
rename from src/main/java/com/clubber/ClubberServer/domain/recruit/service/RecruitCommentService.java
rename to Clubber-External/src/main/java/com/clubber/domain/recruit/service/RecruitCommentService.java
index 0096f769a..2625bf63c 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/recruit/service/RecruitCommentService.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/recruit/service/RecruitCommentService.java
@@ -1,18 +1,18 @@
-package com.clubber.ClubberServer.domain.recruit.service;
-
-import com.clubber.ClubberServer.domain.recruit.domain.Recruit;
-import com.clubber.ClubberServer.domain.recruit.domain.RecruitComment;
-import com.clubber.ClubberServer.domain.recruit.dto.recruitComment.DeleteRecruitCommentResponse;
-import com.clubber.ClubberServer.domain.recruit.dto.recruitComment.GetRecruitCommentResponse;
-import com.clubber.ClubberServer.domain.recruit.dto.recruitComment.PostRecruitCommentRequest;
-import com.clubber.ClubberServer.domain.recruit.dto.recruitComment.PostRecruitCommentResponse;
-import com.clubber.ClubberServer.domain.recruit.implement.RecruitCommentAppender;
-import com.clubber.ClubberServer.domain.recruit.implement.RecruitCommentReader;
-import com.clubber.ClubberServer.domain.recruit.implement.RecruitReader;
-import com.clubber.ClubberServer.domain.recruit.implement.RecruitValidator;
-import com.clubber.ClubberServer.domain.recruit.mapper.RecruitMapper;
-import com.clubber.ClubberServer.domain.user.domain.User;
-import com.clubber.ClubberServer.domain.user.implement.UserReader;
+package com.clubber.domain.recruit.service;
+
+import com.clubber.domain.recruit.domain.Recruit;
+import com.clubber.domain.recruit.domain.RecruitComment;
+import com.clubber.domain.recruit.dto.recruitComment.DeleteRecruitCommentResponse;
+import com.clubber.domain.recruit.dto.recruitComment.GetRecruitCommentResponse;
+import com.clubber.domain.recruit.dto.recruitComment.PostRecruitCommentRequest;
+import com.clubber.domain.recruit.dto.recruitComment.PostRecruitCommentResponse;
+import com.clubber.domain.recruit.implement.RecruitCommentAppender;
+import com.clubber.domain.recruit.implement.RecruitCommentReader;
+import com.clubber.domain.recruit.implement.RecruitReader;
+import com.clubber.domain.recruit.implement.RecruitValidator;
+import com.clubber.domain.recruit.mapper.RecruitMapper;
+import com.clubber.domain.domains.user.domain.User;
+import com.clubber.domain.user.implement.UserReader;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/recruit/service/RecruitLinkedCalendarService.java b/Clubber-External/src/main/java/com/clubber/domain/recruit/service/RecruitLinkedCalendarService.java
similarity index 62%
rename from src/main/java/com/clubber/ClubberServer/domain/recruit/service/RecruitLinkedCalendarService.java
rename to Clubber-External/src/main/java/com/clubber/domain/recruit/service/RecruitLinkedCalendarService.java
index 5007684de..95a75c851 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/recruit/service/RecruitLinkedCalendarService.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/recruit/service/RecruitLinkedCalendarService.java
@@ -1,16 +1,16 @@
-package com.clubber.ClubberServer.domain.recruit.service;
+package com.clubber.domain.recruit.service;
-import com.clubber.ClubberServer.domain.admin.domain.Admin;
-import com.clubber.ClubberServer.domain.admin.implement.AdminReader;
-import com.clubber.ClubberServer.domain.calendar.domain.Calendar;
-import com.clubber.ClubberServer.domain.calendar.implement.CalendarAppender;
-import com.clubber.ClubberServer.domain.calendar.implement.CalendarMapper;
-import com.clubber.ClubberServer.domain.calendar.implement.CalendarReader;
-import com.clubber.ClubberServer.domain.recruit.domain.Recruit;
-import com.clubber.ClubberServer.domain.recruit.dto.CreateLinkedCalendarRequest;
-import com.clubber.ClubberServer.domain.recruit.dto.CreateLinkedCalendarResponse;
-import com.clubber.ClubberServer.domain.recruit.implement.RecruitReader;
-import com.clubber.ClubberServer.domain.recruit.implement.RecruitValidator;
+import com.clubber.domain.domains.admin.domain.Admin;
+import com.clubber.domain.admin.implement.AdminReader;
+import com.clubber.domain.calendar.domain.Calendar;
+import com.clubber.domain.calendar.implement.CalendarAppender;
+import com.clubber.domain.calendar.implement.CalendarMapper;
+import com.clubber.domain.calendar.implement.CalendarReader;
+import com.clubber.domain.recruit.domain.Recruit;
+import com.clubber.domain.recruit.dto.CreateLinkedCalendarRequest;
+import com.clubber.domain.recruit.dto.CreateLinkedCalendarResponse;
+import com.clubber.domain.recruit.implement.RecruitReader;
+import com.clubber.domain.recruit.implement.RecruitValidator;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/recruit/service/RecruitService.java b/Clubber-External/src/main/java/com/clubber/domain/recruit/service/RecruitService.java
similarity index 83%
rename from src/main/java/com/clubber/ClubberServer/domain/recruit/service/RecruitService.java
rename to Clubber-External/src/main/java/com/clubber/domain/recruit/service/RecruitService.java
index 7fb3c6df5..9aeacd303 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/recruit/service/RecruitService.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/recruit/service/RecruitService.java
@@ -1,25 +1,25 @@
-package com.clubber.ClubberServer.domain.recruit.service;
-
-import com.clubber.ClubberServer.domain.admin.domain.Admin;
-import com.clubber.ClubberServer.domain.admin.implement.AdminReader;
-import com.clubber.ClubberServer.domain.club.domain.Club;
-import com.clubber.ClubberServer.domain.club.implement.ClubReader;
-import com.clubber.ClubberServer.domain.recruit.domain.Recruit;
-import com.clubber.ClubberServer.domain.recruit.domain.RecruitImage;
-import com.clubber.ClubberServer.domain.recruit.dto.*;
-import com.clubber.ClubberServer.domain.recruit.dto.mainPage.GetRecruitsMainPageResponse;
-import com.clubber.ClubberServer.domain.recruit.exception.RecruitImageDeleteRemainDuplicatedException;
-import com.clubber.ClubberServer.domain.recruit.exception.RecruitImageNotFoundException;
-import com.clubber.ClubberServer.domain.recruit.exception.RecruitImageRevisedFinalSizeException;
-import com.clubber.ClubberServer.domain.recruit.implement.RecruitAppender;
-import com.clubber.ClubberServer.domain.recruit.implement.RecruitImageAppender;
-import com.clubber.ClubberServer.domain.recruit.implement.RecruitReader;
-import com.clubber.ClubberServer.domain.recruit.implement.RecruitValidator;
-import com.clubber.ClubberServer.domain.recruit.mapper.RecruitMapper;
-import com.clubber.ClubberServer.domain.recruit.repository.RecruitImageRepository;
-import com.clubber.ClubberServer.domain.recruit.repository.RecruitRepository;
-import com.clubber.ClubberServer.global.common.page.PageResponse;
-import com.clubber.ClubberServer.global.vo.image.ImageVO;
+package com.clubber.domain.recruit.service;
+
+import com.clubber.domain.domains.admin.domain.Admin;
+import com.clubber.domain.admin.implement.AdminReader;
+import com.clubber.domain.domains.club.domain.Club;
+import com.clubber.domain.club.implement.ClubReader;
+import com.clubber.domain.recruit.domain.Recruit;
+import com.clubber.domain.recruit.domain.RecruitImage;
+import com.clubber.domain.recruit.dto.*;
+import com.clubber.domain.recruit.dto.mainPage.GetRecruitsMainPageResponse;
+import com.clubber.domain.recruit.exception.RecruitImageDeleteRemainDuplicatedException;
+import com.clubber.domain.recruit.exception.RecruitImageNotFoundException;
+import com.clubber.domain.recruit.exception.RecruitImageRevisedFinalSizeException;
+import com.clubber.domain.recruit.implement.RecruitAppender;
+import com.clubber.domain.recruit.implement.RecruitImageAppender;
+import com.clubber.domain.recruit.implement.RecruitReader;
+import com.clubber.domain.recruit.implement.RecruitValidator;
+import com.clubber.domain.recruit.mapper.RecruitMapper;
+import com.clubber.domain.recruit.repository.RecruitImageRepository;
+import com.clubber.domain.recruit.repository.RecruitRepository;
+import com.clubber.global.common.page.PageResponse;
+import com.clubber.domain.common.vo.ImageVO;
import lombok.RequiredArgsConstructor;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
@@ -33,7 +33,7 @@
import java.util.concurrent.atomic.AtomicLong;
import java.util.stream.Collectors;
-import static com.clubber.ClubberServer.global.common.consts.ClubberStatic.IMAGE_SERVER;
+import static com.clubber.common.consts.ClubberStatic.IMAGE_SERVER;
@Service
@RequiredArgsConstructor
@@ -51,7 +51,7 @@ public class RecruitService {
@Transactional(readOnly = true)
public PageResponse getRecruitsByClubId(Long clubId,
- Pageable pageable) {
+ Pageable pageable) {
Club club = clubReader.findById(clubId);
Page recruits = recruitReader.findRecruitPagesByClub(club, pageable);
return recruitMapper.getRecruitsPageResponse(recruits);
diff --git a/src/main/java/com/clubber/ClubberServer/domain/recruit/vo/RecruitCommentVO.java b/Clubber-External/src/main/java/com/clubber/domain/recruit/vo/RecruitCommentVO.java
similarity index 79%
rename from src/main/java/com/clubber/ClubberServer/domain/recruit/vo/RecruitCommentVO.java
rename to Clubber-External/src/main/java/com/clubber/domain/recruit/vo/RecruitCommentVO.java
index 32a5b3ac5..ab7dbbd21 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/recruit/vo/RecruitCommentVO.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/recruit/vo/RecruitCommentVO.java
@@ -1,7 +1,7 @@
-package com.clubber.ClubberServer.domain.recruit.vo;
+package com.clubber.domain.recruit.vo;
-import com.clubber.ClubberServer.domain.recruit.domain.RecruitComment;
-import com.clubber.ClubberServer.domain.recruit.dto.recruitComment.GetRecruitCommentResponse;
+import com.clubber.domain.recruit.domain.RecruitComment;
+import com.clubber.domain.recruit.dto.recruitComment.GetRecruitCommentResponse;
import lombok.Getter;
import java.util.ArrayList;
diff --git a/Clubber-External/src/main/java/com/clubber/domain/report/controller/ReportController.java b/Clubber-External/src/main/java/com/clubber/domain/report/controller/ReportController.java
new file mode 100644
index 000000000..afd1aacbd
--- /dev/null
+++ b/Clubber-External/src/main/java/com/clubber/domain/report/controller/ReportController.java
@@ -0,0 +1,29 @@
+package com.clubber.domain.report.controller;
+
+import com.clubber.common.vo.enums.EnumMapperVO;
+import com.clubber.domain.report.service.ReportService;
+import com.clubber.global.config.swagger.DisableSwaggerSecurity;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import java.util.List;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequiredArgsConstructor
+@RequestMapping("/api/v1/reports")
+@Tag(name = "[리뷰 신고]")
+public class ReportController {
+
+ private final ReportService reportService;
+
+ @DisableSwaggerSecurity
+ @Operation(summary = "신고 사유 목록")
+ @GetMapping(value = "/reasons")
+ public List getReportReasons() {
+ return reportService.getReportReasons();
+ }
+
+}
diff --git a/Clubber-External/src/main/java/com/clubber/domain/report/service/ReportService.java b/Clubber-External/src/main/java/com/clubber/domain/report/service/ReportService.java
new file mode 100644
index 000000000..0855dabe1
--- /dev/null
+++ b/Clubber-External/src/main/java/com/clubber/domain/report/service/ReportService.java
@@ -0,0 +1,50 @@
+package com.clubber.domain.report.service;
+
+import com.clubber.common.mapper.enums.EnumMapper;
+import com.clubber.common.vo.enums.EnumMapperVO;
+import java.util.List;
+
+import com.clubber.domain.domains.report.domain.Report;
+import com.clubber.domain.domains.report.repository.ReportRepository;
+import com.clubber.domain.domains.review.domain.Review;
+import com.clubber.domain.domains.review.implement.ReviewReader;
+import com.clubber.domain.domains.review.implement.ReviewValidator;
+import com.clubber.domain.domains.review.repository.ReviewRepository;
+import com.clubber.domain.domains.user.domain.User;
+import com.clubber.domain.review.dto.CreateReviewReportRequest;
+import com.clubber.domain.review.dto.CreateReviewReportResponse;
+import com.clubber.domain.user.implement.UserReader;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+@Service
+@RequiredArgsConstructor
+public class ReportService {
+
+ private final EnumMapper enumMapper;
+ private final ReviewValidator reviewValidator;
+ private final ReviewReader reviewReader;
+ private final ReportRepository reportRepository;
+ private final UserReader userReader;
+
+ public List getReportReasons() {
+ return enumMapper.get("ReportReason");
+ }
+
+ @Transactional
+ public CreateReviewReportResponse createReviewReport(Long reviewId, CreateReviewReportRequest request) {
+ User user = userReader.getCurrentUser();
+ Review review = reviewReader.findById(reviewId);
+ reviewValidator.validateNotSelfReview(user, review);
+ reviewValidator.validateReviewStatus(review);
+ reviewValidator.validateReportReason(request.getReportReason(), request.getDetailReason());
+
+ Report report = Report.of(review, request.getReportReason(),
+ request.getDetailReason());
+ Report savedReport = reportRepository.save(report);
+
+ return CreateReviewReportResponse.of(review, savedReport);
+ }
+
+}
diff --git a/src/main/java/com/clubber/ClubberServer/domain/review/controller/KeywordController.java b/Clubber-External/src/main/java/com/clubber/domain/review/controller/KeywordController.java
similarity index 55%
rename from src/main/java/com/clubber/ClubberServer/domain/review/controller/KeywordController.java
rename to Clubber-External/src/main/java/com/clubber/domain/review/controller/KeywordController.java
index 919403afd..a6eaddfa0 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/review/controller/KeywordController.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/review/controller/KeywordController.java
@@ -1,9 +1,8 @@
-package com.clubber.ClubberServer.domain.review.controller;
+package com.clubber.domain.review.controller;
-import com.clubber.ClubberServer.domain.review.service.ReviewService;
-import com.clubber.ClubberServer.global.config.swagger.DisableSwaggerSecurity;
-import com.clubber.ClubberServer.global.infrastructure.outer.perspective.client.PerspectiveClient;
-import com.clubber.ClubberServer.global.vo.enums.EnumMapperVO;
+import com.clubber.domain.review.dto.ReviewKeywordCategoryResponse;
+import com.clubber.domain.review.service.ReviewService;
+import com.clubber.global.config.swagger.DisableSwaggerSecurity;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
@@ -21,12 +20,10 @@ public class KeywordController {
private final ReviewService reviewService;
- private final PerspectiveClient perspectiveClient;
-
@Operation(summary = "리뷰 키워드 전체 목록 조회")
@DisableSwaggerSecurity
@GetMapping
- public List getTotalReviews() {
- return reviewService.getTotalKeywords();
+ public List getTotalReviews() {
+ return reviewService.getTotalReviewKeywords();
}
}
diff --git a/src/main/java/com/clubber/ClubberServer/domain/review/controller/PerspectiveController.java b/Clubber-External/src/main/java/com/clubber/domain/review/controller/PerspectiveController.java
similarity index 64%
rename from src/main/java/com/clubber/ClubberServer/domain/review/controller/PerspectiveController.java
rename to Clubber-External/src/main/java/com/clubber/domain/review/controller/PerspectiveController.java
index 15d9a409f..6a32a4a65 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/review/controller/PerspectiveController.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/review/controller/PerspectiveController.java
@@ -1,8 +1,8 @@
-package com.clubber.ClubberServer.domain.review.controller;
+package com.clubber.domain.review.controller;
-import com.clubber.ClubberServer.domain.review.service.PerspectiveService;
-import com.clubber.ClubberServer.global.infrastructure.outer.perspective.dto.CreateTextAnalyzeResponse;
-import com.clubber.ClubberServer.global.infrastructure.outer.perspective.dto.TextDto;
+import com.clubber.domain.review.service.PerspectiveService;
+import com.clubber.global.infrastructure.outer.perspective.dto.CreateTextAnalyzeResponse;
+import com.clubber.global.infrastructure.outer.perspective.dto.TextDto;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
diff --git a/Clubber-External/src/main/java/com/clubber/domain/review/controller/ReviewController.java b/Clubber-External/src/main/java/com/clubber/domain/review/controller/ReviewController.java
new file mode 100644
index 000000000..fdbd57151
--- /dev/null
+++ b/Clubber-External/src/main/java/com/clubber/domain/review/controller/ReviewController.java
@@ -0,0 +1,86 @@
+package com.clubber.domain.review.controller;
+
+import com.clubber.domain.club.service.ClubService;
+import com.clubber.domain.domains.review.domain.ReviewSortType;
+import com.clubber.domain.report.service.ReportService;
+import com.clubber.domain.review.dto.*;
+import com.clubber.domain.review.service.ReviewLikeService;
+import com.clubber.domain.review.service.ReviewService;
+import com.clubber.global.config.swagger.DisableSwaggerSecurity;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.validation.Valid;
+import lombok.RequiredArgsConstructor;
+import org.springframework.data.domain.Pageable;
+import org.springframework.web.bind.annotation.*;
+
+@RestController
+@RequestMapping("/api/v1/clubs/{clubId}/reviews")
+@RequiredArgsConstructor
+@Tag(name = "[리뷰]")
+public class ReviewController {
+
+ private final ClubService clubService;
+ private final ReviewService reviewService;
+ private final ReviewLikeService reviewLikeService;
+ private final ReportService reportService;
+
+ @Operation(summary = "동아리 리뷰 동의 여부 반환")
+ @DisableSwaggerSecurity
+ @GetMapping("/agree")
+ public GetClubReviewAgreedStatusResponse getClubReviewAgreedStatus(@PathVariable Long clubId) {
+ return clubService.getClubReviewAgreedStatus(clubId);
+ }
+
+ @Operation(summary = "개별 동아리 별 리뷰 키워드 통계")
+ @DisableSwaggerSecurity
+ @GetMapping("/keyword-stats")
+ public GetClubReviewsKeywordStatsResponse getReviewKeywordStats(@PathVariable Long clubId, @RequestParam int limit) {
+ return reviewService.getClubReviewKeywordStats(clubId, limit);
+ }
+
+ // === v2 ===
+ @Operation(summary = "개별 동아리 별 리뷰 조회")
+ @DisableSwaggerSecurity
+ @GetMapping
+ public GetClubReviewsPageResponse getClubReviewsWithContentByClubId(
+ @PathVariable Long clubId, Pageable pageable, ReviewSortType reviewSortType) {
+ return reviewService.getClubReviewsWithContent(clubId, pageable, reviewSortType);
+ }
+
+// @Operation(summary = "개별 동아리 별 리뷰 조회 No Offset(Slice)")
+// @DisableSwaggerSecurity
+// @GetMapping("/slice")
+// public GetClubReviewsSliceResponse getClubReviewsWithSliceContent(
+// @PathVariable Long clubId, @PageableDefault(size = 5) Pageable pageable,
+// @RequestParam(required = false) Long reviewid) {
+// return reviewService.getClubReviewsWithSliceContent(clubId, pageable, reviewid);
+// }
+
+
+ @Operation(summary = "동아리 리뷰 작성", description = "리뷰 키워드 항목과 한줄평을 선택하여 작성")
+ @PostMapping
+ public CreateClubReviewResponse createReviewWithContent(
+ @RequestBody @Valid CreateClubReviewRequest reviewRequest,
+ @PathVariable Long clubId) {
+ return reviewService.createReview(clubId, reviewRequest);
+ }
+
+ @Operation(summary = "리뷰 좋아요 등록")
+ @PostMapping("/like/{id}")
+ public void createReviewLike(@PathVariable Long id) {
+ reviewLikeService.createReviewLike(id);
+ }
+
+ @Operation(summary = "리뷰 좋아요 취소(삭제)")
+ @DeleteMapping("/like/{id}")
+ public void deleteReviewLike(@PathVariable Long id) {
+ reviewLikeService.deleteReviewLike(id);
+ }
+
+ @Operation(summary = "리뷰 신고")
+ @PostMapping("/report/{id}")
+ public CreateReviewReportResponse postReviewReport(@PathVariable Long id,@RequestBody @Valid CreateReviewReportRequest request){
+ return reportService.createReviewReport(id,request);
+ }
+}
diff --git a/src/main/java/com/clubber/ClubberServer/domain/review/dto/CreateClubReviewRequest.java b/Clubber-External/src/main/java/com/clubber/domain/review/dto/CreateClubReviewRequest.java
similarity index 77%
rename from src/main/java/com/clubber/ClubberServer/domain/review/dto/CreateClubReviewRequest.java
rename to Clubber-External/src/main/java/com/clubber/domain/review/dto/CreateClubReviewRequest.java
index 8c31f2584..28c01e693 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/review/dto/CreateClubReviewRequest.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/review/dto/CreateClubReviewRequest.java
@@ -1,8 +1,8 @@
-package com.clubber.ClubberServer.domain.review.dto;
+package com.clubber.domain.review.dto;
-import com.clubber.ClubberServer.domain.review.domain.Keyword;
-import com.clubber.ClubberServer.global.validator.enums.Enum;
-import com.clubber.ClubberServer.global.validator.unique.Unique;
+import com.clubber.domain.domains.review.domain.Keyword;
+import com.clubber.global.validator.enums.Enum;
+import com.clubber.global.validator.unique.Unique;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.Size;
import java.util.ArrayList;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/review/dto/CreateClubReviewResponse.java b/Clubber-External/src/main/java/com/clubber/domain/review/dto/CreateClubReviewResponse.java
similarity index 88%
rename from src/main/java/com/clubber/ClubberServer/domain/review/dto/CreateClubReviewResponse.java
rename to Clubber-External/src/main/java/com/clubber/domain/review/dto/CreateClubReviewResponse.java
index 0cf943074..4845491ea 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/review/dto/CreateClubReviewResponse.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/review/dto/CreateClubReviewResponse.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.domain.review.dto;
+package com.clubber.domain.review.dto;
-import com.clubber.ClubberServer.domain.review.domain.Review;
+import com.clubber.domain.domains.review.domain.Review;
import io.swagger.v3.oas.annotations.media.Schema;
import java.util.Set;
import lombok.AccessLevel;
diff --git a/Clubber-External/src/main/java/com/clubber/domain/review/dto/CreateReviewApplyRequest.java b/Clubber-External/src/main/java/com/clubber/domain/review/dto/CreateReviewApplyRequest.java
new file mode 100644
index 000000000..fed1cf829
--- /dev/null
+++ b/Clubber-External/src/main/java/com/clubber/domain/review/dto/CreateReviewApplyRequest.java
@@ -0,0 +1,6 @@
+package com.clubber.domain.review.dto;
+
+public record CreateReviewApplyRequest(
+ String content
+) {
+}
diff --git a/Clubber-External/src/main/java/com/clubber/domain/review/dto/CreateReviewReportRequest.java b/Clubber-External/src/main/java/com/clubber/domain/review/dto/CreateReviewReportRequest.java
new file mode 100644
index 000000000..cdf16ebe4
--- /dev/null
+++ b/Clubber-External/src/main/java/com/clubber/domain/review/dto/CreateReviewReportRequest.java
@@ -0,0 +1,22 @@
+package com.clubber.domain.review.dto;
+
+import com.clubber.domain.domains.report.domain.ReportReason;
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotNull;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+
+@Getter
+@NoArgsConstructor
+@AllArgsConstructor
+public class CreateReviewReportRequest {
+
+ @Schema(description = "신고 사유", example = "ABUSE")
+ @NotNull(message = "신고 사유를 선택해주세요")
+ private ReportReason reportReason;
+
+ @Schema(description = "기타 선택시, 직접 입력", example = "잘못된 내용 기재")
+ private String detailReason;
+
+}
diff --git a/Clubber-External/src/main/java/com/clubber/domain/review/dto/CreateReviewReportResponse.java b/Clubber-External/src/main/java/com/clubber/domain/review/dto/CreateReviewReportResponse.java
new file mode 100644
index 000000000..37e116390
--- /dev/null
+++ b/Clubber-External/src/main/java/com/clubber/domain/review/dto/CreateReviewReportResponse.java
@@ -0,0 +1,33 @@
+package com.clubber.domain.review.dto;
+
+import com.clubber.domain.domains.report.domain.Report;
+import com.clubber.domain.domains.review.domain.Review;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AccessLevel;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Getter;
+
+@Getter
+@Builder(access = AccessLevel.PRIVATE)
+@AllArgsConstructor(access = AccessLevel.PRIVATE)
+public class CreateReviewReportResponse {
+
+ @Schema(description = "신고된 리뷰 id", example = "12")
+ private final Long reviewId;
+
+ @Schema(description = "접수된 신고 id", example = "1")
+ private final Long reportId;
+
+ @Schema(description = "신고 사유", example = "활동이 재밌어요")
+ private final String reportReason;
+
+ public static CreateReviewReportResponse of(Review review, Report report) {
+ return CreateReviewReportResponse.builder()
+ .reviewId(review.getId())
+ .reportId(report.getId())
+ .reportReason(report.getReportReason().getTitle())
+ .build();
+ }
+
+}
diff --git a/src/main/java/com/clubber/ClubberServer/domain/review/dto/GetClubReviewAgreedStatusResponse.java b/Clubber-External/src/main/java/com/clubber/domain/review/dto/GetClubReviewAgreedStatusResponse.java
similarity index 83%
rename from src/main/java/com/clubber/ClubberServer/domain/review/dto/GetClubReviewAgreedStatusResponse.java
rename to Clubber-External/src/main/java/com/clubber/domain/review/dto/GetClubReviewAgreedStatusResponse.java
index 8524bf238..f31ef0bc1 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/review/dto/GetClubReviewAgreedStatusResponse.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/review/dto/GetClubReviewAgreedStatusResponse.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.domain.review.dto;
+package com.clubber.domain.review.dto;
-import com.clubber.ClubberServer.domain.club.domain.Club;
+import com.clubber.domain.domains.club.domain.Club;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/review/dto/GetClubReviewsKeywordStatsResponse.java b/Clubber-External/src/main/java/com/clubber/domain/review/dto/GetClubReviewsKeywordStatsResponse.java
similarity index 90%
rename from src/main/java/com/clubber/ClubberServer/domain/review/dto/GetClubReviewsKeywordStatsResponse.java
rename to Clubber-External/src/main/java/com/clubber/domain/review/dto/GetClubReviewsKeywordStatsResponse.java
index 4649f632c..74908c09f 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/review/dto/GetClubReviewsKeywordStatsResponse.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/review/dto/GetClubReviewsKeywordStatsResponse.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.domain.review.dto;
+package com.clubber.domain.review.dto;
-import com.clubber.ClubberServer.domain.club.domain.Club;
+import com.clubber.domain.domains.club.domain.Club;
import io.swagger.v3.oas.annotations.media.Schema;
import java.util.Map;
import lombok.AccessLevel;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/review/dto/GetClubReviewsPageResponse.java b/Clubber-External/src/main/java/com/clubber/domain/review/dto/GetClubReviewsPageResponse.java
similarity index 77%
rename from src/main/java/com/clubber/ClubberServer/domain/review/dto/GetClubReviewsPageResponse.java
rename to Clubber-External/src/main/java/com/clubber/domain/review/dto/GetClubReviewsPageResponse.java
index 5e6c03222..0eace9fa4 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/review/dto/GetClubReviewsPageResponse.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/review/dto/GetClubReviewsPageResponse.java
@@ -1,6 +1,7 @@
-package com.clubber.ClubberServer.domain.review.dto;
+package com.clubber.domain.review.dto;
-import com.clubber.ClubberServer.global.common.page.PageResponse;
+import com.clubber.domain.domains.review.vo.ClubReviewResponse;
+import com.clubber.global.common.page.PageResponse;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Builder;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/review/dto/GetClubReviewsSliceResponse.java b/Clubber-External/src/main/java/com/clubber/domain/review/dto/GetClubReviewsSliceResponse.java
similarity index 80%
rename from src/main/java/com/clubber/ClubberServer/domain/review/dto/GetClubReviewsSliceResponse.java
rename to Clubber-External/src/main/java/com/clubber/domain/review/dto/GetClubReviewsSliceResponse.java
index ecf39ea2f..82aefa7fa 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/review/dto/GetClubReviewsSliceResponse.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/review/dto/GetClubReviewsSliceResponse.java
@@ -1,6 +1,7 @@
-package com.clubber.ClubberServer.domain.review.dto;
+package com.clubber.domain.review.dto;
-import com.clubber.ClubberServer.global.common.slice.SliceResponse;
+import com.clubber.domain.domains.review.vo.ClubReviewResponse;
+import com.clubber.global.common.slice.SliceResponse;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Builder;
diff --git a/Clubber-External/src/main/java/com/clubber/domain/review/dto/ReviewKeywordCategoryResponse.java b/Clubber-External/src/main/java/com/clubber/domain/review/dto/ReviewKeywordCategoryResponse.java
new file mode 100644
index 000000000..770796e98
--- /dev/null
+++ b/Clubber-External/src/main/java/com/clubber/domain/review/dto/ReviewKeywordCategoryResponse.java
@@ -0,0 +1,12 @@
+package com.clubber.domain.review.dto;
+
+import com.clubber.domain.domains.review.domain.ReviewKeywordCategory;
+import com.clubber.common.vo.enums.EnumMapperVO;
+
+import java.util.List;
+
+public record ReviewKeywordCategoryResponse(
+ ReviewKeywordCategory reviewKeywordCategory,
+ List keywords
+) {
+}
diff --git a/Clubber-External/src/main/java/com/clubber/domain/review/dto/UpdateClubReviewContentRequest.java b/Clubber-External/src/main/java/com/clubber/domain/review/dto/UpdateClubReviewContentRequest.java
new file mode 100644
index 000000000..26afdfe40
--- /dev/null
+++ b/Clubber-External/src/main/java/com/clubber/domain/review/dto/UpdateClubReviewContentRequest.java
@@ -0,0 +1,6 @@
+package com.clubber.domain.review.dto;
+
+public record UpdateClubReviewContentRequest(
+ String content
+) {
+}
diff --git a/Clubber-External/src/main/java/com/clubber/domain/review/mapper/ReviewMapper.java b/Clubber-External/src/main/java/com/clubber/domain/review/mapper/ReviewMapper.java
new file mode 100644
index 000000000..c78f1eda2
--- /dev/null
+++ b/Clubber-External/src/main/java/com/clubber/domain/review/mapper/ReviewMapper.java
@@ -0,0 +1,98 @@
+package com.clubber.domain.review.mapper;
+
+import com.clubber.domain.domains.admin.domain.Admin;
+import com.clubber.domain.domains.club.domain.Club;
+import com.clubber.domain.domains.report.domain.Report;
+import com.clubber.domain.domains.review.domain.Review;
+import com.clubber.domain.domains.review.domain.ReviewLike;
+import com.clubber.domain.domains.review.domain.ReviewReply;
+import com.clubber.domain.domains.review.util.ReviewUtil;
+import com.clubber.domain.domains.review.vo.ClubReviewResponse;
+import com.clubber.domain.domains.review.vo.KeywordStatsVO;
+import com.clubber.domain.domains.user.domain.User;
+import com.clubber.domain.review.dto.CreateClubReviewResponse;
+import com.clubber.domain.review.dto.GetClubReviewsKeywordStatsResponse;
+import com.clubber.domain.review.dto.GetClubReviewsPageResponse;
+import com.clubber.domain.user.dto.GetUserReviewReportResponse;
+import com.clubber.global.common.page.PageResponse;
+import com.clubber.global.common.slice.SliceResponse;
+import com.clubber.global.util.SliceUtil;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+@Component
+public class ReviewMapper {
+
+ // 동아리 별 리뷰 조회 (page)
+ public GetClubReviewsPageResponse getGetClubReviewsPageResponse(Page reviewResponses,
+ Long clubId) {
+ PageResponse pageResponses = PageResponse.of(reviewResponses);
+ return GetClubReviewsPageResponse.of(pageResponses, clubId);
+ }
+
+// // 동아리 별 리뷰 조회 (No Offset)
+// public GetClubReviewsSliceResponse getClubReviewsSliceResponse(
+// Long clubId, List reviews, Pageable pageable) {
+// List clubReviewResponseList = getClubReviewResponseList(
+// reviews);
+// SliceResponse clubReviewSliceResponse = SliceUtil.valueOf(
+// clubReviewResponseList, pageable);
+// Long lastReviewId = ReviewUtil.getLastReviewId(reviews, pageable);
+// return GetClubReviewsSliceResponse.of(clubId, lastReviewId,
+// clubReviewSliceResponse);
+// }
+
+// private static List getClubReviewResponseList(
+// List reviews) {
+// return reviews.stream()
+// .map(review -> {
+// Set keywords = ReviewUtil.extractKeywords(review);
+// return ClubReviewResponse.of(review, keywords);
+// }
+// )
+// .collect(Collectors.toList());
+// }
+
+ // 리뷰 작성
+ public CreateClubReviewResponse getCreateClubReviewResponse(
+ Review review) {
+ Set keywords = ReviewUtil.extractKeywords(review);
+ return CreateClubReviewResponse.of(review, keywords);
+ }
+
+ public GetClubReviewsKeywordStatsResponse getGetClubReviewsKeywordStatsResponse(Club club, KeywordStatsVO keywordStatsVO) {
+ Map keywordMap = keywordStatsVO.getKeywordMapAsStingKey();
+ return GetClubReviewsKeywordStatsResponse.of(club, keywordMap);
+ }
+
+ public ReviewReply toReviewApply(Admin admin, Review review, String content) {
+ return ReviewReply.builder()
+ .content(content)
+ .admin(admin)
+ .review(review)
+ .build();
+ }
+
+ public ReviewLike toReviewLike(Review review, User user) {
+ return ReviewLike.builder()
+ .review(review)
+ .user(user)
+ .build();
+ }
+
+ public SliceResponse getUserReviewReportResponseSliceResponse(List reports) {
+ List reportResponseList = reports.stream()
+ .map(report -> {
+ Review review = report.getReview();
+ return GetUserReviewReportResponse.of(report, review, review.getClub());
+ })
+ .toList();
+ return SliceUtil.valueOf(reportResponseList, PageRequest.ofSize(1));
+ }
+}
+
diff --git a/Clubber-External/src/main/java/com/clubber/domain/review/service/AdminReviewService.java b/Clubber-External/src/main/java/com/clubber/domain/review/service/AdminReviewService.java
new file mode 100644
index 000000000..6f4971d5f
--- /dev/null
+++ b/Clubber-External/src/main/java/com/clubber/domain/review/service/AdminReviewService.java
@@ -0,0 +1,87 @@
+package com.clubber.domain.review.service;
+
+import com.clubber.domain.admin.dto.GetAdminsReviewsResponse;
+import com.clubber.domain.admin.implement.AdminReader;
+import com.clubber.domain.admin.mapper.AdminReviewMapper;
+import com.clubber.domain.domains.admin.domain.Admin;
+import com.clubber.domain.domains.club.domain.Club;
+import com.clubber.domain.domains.review.domain.Review;
+import com.clubber.domain.domains.review.domain.ReviewFilterType;
+import com.clubber.domain.domains.review.domain.ReviewReply;
+import com.clubber.domain.domains.review.domain.ReviewSortType;
+import com.clubber.domain.domains.review.implement.ReviewReader;
+import com.clubber.domain.domains.review.implement.ReviewValidator;
+import com.clubber.domain.domains.review.repository.ReviewReplyRepository;
+import com.clubber.domain.domains.review.repository.ReviewRepository;
+import com.clubber.domain.domains.review.vo.ClubReviewResponse;
+import com.clubber.domain.review.dto.CreateReviewApplyRequest;
+import com.clubber.domain.review.dto.GetClubReviewAgreedStatusResponse;
+import com.clubber.domain.review.mapper.ReviewMapper;
+import com.clubber.global.common.page.PageResponse;
+import lombok.RequiredArgsConstructor;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+@Service
+@RequiredArgsConstructor
+public class AdminReviewService {
+
+ private final ReviewRepository reviewRepository;
+ private final AdminReader adminReader;
+ private final AdminReviewMapper adminReviewMapper;
+ private final ReviewReader reviewReader;
+ private final ReviewReplyRepository reviewReplyRepository;
+ private final ReviewMapper reviewMapper;
+ private final ReviewValidator reviewValidator;
+
+ @Transactional(readOnly = true)
+ public GetAdminsReviewsResponse getAdminsReviews(Pageable pageable, ReviewFilterType filterType) {
+ Admin admin = adminReader.getCurrentAdmin();
+ Club club = admin.getClub();
+ Page clubReviewResponses = reviewRepository.queryReviewByClubAndFilterType(club, filterType, pageable);
+ return adminReviewMapper.getGetAdminReviewsResponse(admin, club, clubReviewResponses);
+ }
+
+// @Transactional(readOnly = true)
+// public GetAdminPendingReviewsSliceResponse getAdminPendingReviewsWithSliceResponse(
+// Pageable pageable, Long lastReviewId) {
+// Admin admin = adminReader.getCurrentAdmin();
+// Club club = clubRepository.findClubByIdAndIsDeleted(admin.getClub().getId(), false)
+// .orElseThrow(() -> ClubNotFoundException.EXCEPTION);
+//
+// List reviews = reviewRepository.queryReviewNoOffsetByClub(club, pageable,
+// lastReviewId);
+// return adminReviewMapper.getGetAdminPendingReviewSliceResponse(reviews, pageable);
+// }
+
+ @Transactional
+ public void createReviewApply(Long reviewId, CreateReviewApplyRequest request) {
+ Review review = reviewReader.findById(reviewId);
+ Admin admin = adminReader.getCurrentAdmin();
+ reviewValidator.validateReviewClub(admin.getClub(), review);
+ ReviewReply reviewApply = reviewMapper.toReviewApply(admin, review, request.content());
+ reviewReplyRepository.save(reviewApply);
+ }
+
+ @Transactional
+ public void disableClubReview() {
+ Admin admin = adminReader.getCurrentAdmin();
+ Club club = admin.getClub();
+ club.disableReview();
+ }
+ @Transactional
+ public void enableClubReview() {
+ Admin admin = adminReader.getCurrentAdmin();
+ Club club = admin.getClub();
+ club.enableReview();
+ }
+
+ @Transactional(readOnly = true)
+ public GetClubReviewAgreedStatusResponse getReviewEnabledStatus() {
+ Admin admin = adminReader.getCurrentAdmin();
+ Club club = admin.getClub();
+ return GetClubReviewAgreedStatusResponse.from(club);
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/clubber/ClubberServer/domain/review/service/PerspectiveService.java b/Clubber-External/src/main/java/com/clubber/domain/review/service/PerspectiveService.java
similarity index 57%
rename from src/main/java/com/clubber/ClubberServer/domain/review/service/PerspectiveService.java
rename to Clubber-External/src/main/java/com/clubber/domain/review/service/PerspectiveService.java
index 059d9d729..2a85d70b6 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/review/service/PerspectiveService.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/review/service/PerspectiveService.java
@@ -1,12 +1,12 @@
-package com.clubber.ClubberServer.domain.review.service;
+package com.clubber.domain.review.service;
-import com.clubber.ClubberServer.global.infrastructure.outer.perspective.client.PerspectiveClient;
-import com.clubber.ClubberServer.global.infrastructure.outer.perspective.dto.AttributeType;
-import com.clubber.ClubberServer.global.infrastructure.outer.perspective.dto.CreateTextAnalyzeRequest;
-import com.clubber.ClubberServer.global.infrastructure.outer.perspective.dto.CreateTextAnalyzeResponse;
-import com.clubber.ClubberServer.global.infrastructure.outer.perspective.dto.TextDto;
-import com.clubber.ClubberServer.global.infrastructure.outer.perspective.dto.RequestedAttribute;
-import com.clubber.ClubberServer.global.infrastructure.outer.perspective.dto.ScoreType;
+import com.clubber.global.infrastructure.outer.perspective.client.PerspectiveClient;
+import com.clubber.global.infrastructure.outer.perspective.dto.AttributeType;
+import com.clubber.global.infrastructure.outer.perspective.dto.CreateTextAnalyzeRequest;
+import com.clubber.global.infrastructure.outer.perspective.dto.CreateTextAnalyzeResponse;
+import com.clubber.global.infrastructure.outer.perspective.dto.TextDto;
+import com.clubber.global.infrastructure.outer.perspective.dto.RequestedAttribute;
+import com.clubber.global.infrastructure.outer.perspective.dto.ScoreType;
import java.util.List;
import java.util.Map;
import lombok.RequiredArgsConstructor;
diff --git a/Clubber-External/src/main/java/com/clubber/domain/review/service/ReviewLikeService.java b/Clubber-External/src/main/java/com/clubber/domain/review/service/ReviewLikeService.java
new file mode 100644
index 000000000..94f14027e
--- /dev/null
+++ b/Clubber-External/src/main/java/com/clubber/domain/review/service/ReviewLikeService.java
@@ -0,0 +1,41 @@
+package com.clubber.domain.review.service;
+
+import com.clubber.domain.domains.review.domain.Review;
+import com.clubber.domain.domains.review.domain.ReviewLike;
+import com.clubber.domain.domains.review.implement.ReviewReader;
+import com.clubber.domain.domains.review.implement.ReviewValidator;
+import com.clubber.domain.domains.review.repository.ReviewLikeRepository;
+import com.clubber.domain.domains.user.domain.User;
+import com.clubber.domain.review.mapper.ReviewMapper;
+import com.clubber.domain.user.implement.UserReader;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+@Service
+@RequiredArgsConstructor
+public class ReviewLikeService {
+
+ private final UserReader userReader;
+ private final ReviewReader reviewReader;
+ private final ReviewValidator reviewValidator;
+ private final ReviewMapper reviewMapper;
+ private final ReviewLikeRepository reviewLikeRepository;
+
+ @Transactional
+ public void createReviewLike(Long reviewId) {
+ User user = userReader.getCurrentUser();
+ Review review = reviewReader.findById(reviewId);
+ reviewValidator.validateReviewExists(user, review);
+ ReviewLike reviewLike = reviewMapper.toReviewLike(review, user);
+ reviewLikeRepository.save(reviewLike);
+ }
+
+ @Transactional
+ public void deleteReviewLike(Long reviewId) {
+ User user = userReader.getCurrentUser();
+ Review review = reviewReader.findById(reviewId);
+ ReviewLike userReviewLike = reviewReader.findUserReviewLike(review, user);
+ userReviewLike.delete();
+ }
+}
diff --git a/Clubber-External/src/main/java/com/clubber/domain/review/service/ReviewService.java b/Clubber-External/src/main/java/com/clubber/domain/review/service/ReviewService.java
new file mode 100644
index 000000000..fc9635d22
--- /dev/null
+++ b/Clubber-External/src/main/java/com/clubber/domain/review/service/ReviewService.java
@@ -0,0 +1,137 @@
+package com.clubber.domain.review.service;
+
+import com.clubber.common.mapper.enums.EnumMapper;
+import com.clubber.common.vo.enums.EnumMapperVO;
+import com.clubber.domain.club.implement.ClubReader;
+import com.clubber.domain.domains.club.domain.Club;
+import com.clubber.domain.domains.report.domain.Report;
+import com.clubber.domain.domains.review.domain.Review;
+import com.clubber.domain.domains.review.domain.ReviewKeywordCategory;
+import com.clubber.domain.domains.review.domain.ReviewSortType;
+import com.clubber.domain.domains.review.implement.ReviewReader;
+import com.clubber.domain.domains.review.implement.ReviewValidator;
+import com.clubber.domain.domains.review.repository.ReviewKeywordRepository;
+import com.clubber.domain.domains.review.repository.ReviewRepository;
+import com.clubber.domain.domains.review.vo.ClubReviewResponse;
+import com.clubber.domain.domains.review.vo.KeywordCountStatDto;
+import com.clubber.domain.domains.review.vo.KeywordStatsVO;
+import com.clubber.domain.domains.user.domain.User;
+import com.clubber.domain.review.dto.*;
+import com.clubber.domain.review.mapper.ReviewMapper;
+import com.clubber.domain.user.dto.GetUserReviewReportResponse;
+import com.clubber.domain.user.implement.UserReader;
+import com.clubber.global.common.slice.SliceResponse;
+import lombok.RequiredArgsConstructor;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.Arrays;
+import java.util.List;
+
+@Service
+@RequiredArgsConstructor
+public class ReviewService {
+
+ private final ReviewRepository reviewRepository;
+ private final ReviewKeywordRepository reviewKeywordRepository;
+ private final ReviewReader reviewReader;
+ private final ReviewMapper reviewMapper;
+ private final ReviewValidator reviewValidator;
+
+ private final EnumMapper enumMapper;
+ private final UserReader userReader;
+ private final ClubReader clubReader;
+
+ public List getTotalReviewKeywords() {
+ return Arrays.stream(ReviewKeywordCategory.values())
+ .map(
+ (reviewKeywordCategory) -> {
+ List enumValues = enumMapper.toEnumValues(
+ reviewKeywordCategory.getReviewKeywords());
+ return new ReviewKeywordCategoryResponse(reviewKeywordCategory, enumValues);
+ })
+ .toList();
+ }
+
+ @Transactional
+ public CreateClubReviewResponse createReview(Long clubId, CreateClubReviewRequest reviewRequest) {
+ User user = userReader.getCurrentUser();
+ Club club = clubReader.findById(clubId);
+
+ club.validateAgreeToReview();
+ reviewValidator.validateReviewExists(club, user);
+
+ Review review = Review.of(user, club, reviewRequest.getContent());
+ review.addKeywords(reviewRequest.getKeywords());
+ Review savedReview = reviewRepository.save(review);
+ return reviewMapper.getCreateClubReviewResponse(savedReview);
+ }
+
+ @Transactional
+ public void updateReviewContent(Long id, String content) {
+ User user = userReader.getCurrentUser();
+ Review review = reviewReader.findById(id);
+ reviewValidator.validateReviewUser(user, review);
+ reviewValidator.validateReviewReportExists(review);
+ review.updateContent(content);
+ }
+
+ @Transactional
+ public void deleteReview(Long reviewId) {
+ User user = userReader.getCurrentUser();
+ Review review = reviewReader.findById(reviewId);
+ reviewValidator.validateReviewUser(user, review);
+ review.delete();
+ }
+
+ @Transactional(readOnly = true)
+ public GetClubReviewsKeywordStatsResponse getClubReviewKeywordStats(Long clubId, int limit) {
+ Club club = clubReader.findById(clubId);
+ club.validateAgreeToReview();
+
+ List keywordCountStatDtoList = reviewKeywordRepository.queryReviewKeywordStatsByClubId(
+ club.getId(), limit);
+
+ final KeywordStatsVO keywordStatsVO = new KeywordStatsVO(keywordCountStatDtoList, limit);
+ return reviewMapper.getGetClubReviewsKeywordStatsResponse(club, keywordStatsVO);
+ }
+
+ //동아리 별 리뷰 조회 : Page 별 조회
+ @Transactional(readOnly = true)
+ public GetClubReviewsPageResponse getClubReviewsWithContent(Long clubId, Pageable pageable, ReviewSortType sortType) {
+ User user = userReader.getCurrentUser();
+ Club club = clubReader.findById(clubId);
+ club.validateAgreeToReview();
+
+ Page clubReviewResponses = reviewRepository.queryReviewByClub(club, user, pageable, sortType);
+ return reviewMapper.getGetClubReviewsPageResponse(clubReviewResponses, clubId);
+ }
+
+// //동아리 별 리뷰 조회 : No Offset 구현
+// @Transactional(readOnly = true)
+// public GetClubReviewsSliceResponse getClubReviewsWithSliceContent(Long clubId,
+// Pageable pageable, Long reviewId) {
+// Club club = clubRepository.findClubByIdAndIsDeleted(clubId, false)
+// .orElseThrow(() -> ClubNotFoundException.EXCEPTION);
+//
+// club.validateAgreeToReview();
+//
+// List reviews = reviewRepository.queryReviewNoOffsetByClub(club, pageable, reviewId);
+//
+// return reviewMapper.getClubReviewsSliceResponse(clubId, reviews, pageable);
+// }
+
+ @Transactional
+ public void softDeleteReviewByClubId(Long clubId) {
+ reviewRepository.softDeleteReviewByClubId(clubId);
+ }
+
+ @Transactional(readOnly = true)
+ public SliceResponse getUserReviewReportResponse(Long reviewId, Long nowReviewReportId) {
+ Review review = reviewReader.findById(reviewId);
+ List reports = reviewRepository.queryNextReviewReport(review.getId(), nowReviewReportId);
+ return reviewMapper.getUserReviewReportResponseSliceResponse(reports);
+ }
+}
diff --git a/src/main/java/com/clubber/ClubberServer/domain/user/controller/UserController.java b/Clubber-External/src/main/java/com/clubber/domain/user/controller/UserController.java
similarity index 68%
rename from src/main/java/com/clubber/ClubberServer/domain/user/controller/UserController.java
rename to Clubber-External/src/main/java/com/clubber/domain/user/controller/UserController.java
index 53e85d28c..2e0c2179c 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/user/controller/UserController.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/user/controller/UserController.java
@@ -1,13 +1,12 @@
-package com.clubber.ClubberServer.domain.user.controller;
+package com.clubber.domain.user.controller;
-import com.clubber.ClubberServer.domain.favorite.dto.GetFavoriteDetailsResponse;
-import com.clubber.ClubberServer.domain.user.dto.GetIsUserFavoriteResponse;
-import com.clubber.ClubberServer.domain.user.dto.GetUserReviewsResponse;
-import com.clubber.ClubberServer.domain.user.dto.GetUserFavoritesResponse;
-import com.clubber.ClubberServer.domain.user.dto.GetUserProfileResponse;
-import com.clubber.ClubberServer.domain.user.service.UserService;
-import com.clubber.ClubberServer.global.common.page.PageResponse;
+import com.clubber.domain.favorite.dto.GetFavoriteDetailsResponse;
+import com.clubber.domain.user.dto.GetIsUserFavoriteResponse;
+import com.clubber.domain.user.dto.GetUserFavoritesResponse;
+import com.clubber.domain.user.dto.GetUserProfileResponse;
+import com.clubber.domain.user.service.UserService;
+import com.clubber.global.common.page.PageResponse;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
@@ -38,11 +37,6 @@ public GetUserFavoritesResponse getUserFavorites() {
return userService.getUserFavorites();
}
- @Operation(summary = "리뷰 전체 조회")
- @GetMapping("/review")
- public GetUserReviewsResponse getUserReviews() {
- return userService.getUserReviews();
- }
@Operation(summary = "즐겨찾기 페이지 조회")
@GetMapping("/favorite/page")
diff --git a/Clubber-External/src/main/java/com/clubber/domain/user/controller/UserReviewController.java b/Clubber-External/src/main/java/com/clubber/domain/user/controller/UserReviewController.java
new file mode 100644
index 000000000..f067edfb2
--- /dev/null
+++ b/Clubber-External/src/main/java/com/clubber/domain/user/controller/UserReviewController.java
@@ -0,0 +1,46 @@
+package com.clubber.domain.user.controller;
+
+import com.clubber.domain.review.dto.UpdateClubReviewContentRequest;
+import com.clubber.domain.review.service.ReviewService;
+import com.clubber.domain.user.dto.GetUserReviewReportResponse;
+import com.clubber.domain.user.dto.GetUserReviewsResponse;
+import com.clubber.domain.user.service.UserService;
+import com.clubber.global.common.slice.SliceResponse;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+@RestController
+@RequestMapping("/api/v1/users/review")
+@RequiredArgsConstructor
+@Tag(name = "[회원 리뷰 API]")
+public class UserReviewController {
+
+ private final UserService userService;
+ private final ReviewService reviewService;
+
+ @Operation(summary = "회원 리뷰 전체 조회")
+ @GetMapping
+ public GetUserReviewsResponse getUserReviews() {
+ return userService.getUserReviews();
+ }
+
+ @Operation(summary = "회원 리뷰 수정")
+ @PatchMapping("/{id}")
+ public void updateUserReview(@PathVariable Long id, @RequestBody UpdateClubReviewContentRequest request) {
+ reviewService.updateReviewContent(id, request.content());
+ }
+
+ @Operation(summary = "리뷰 삭제")
+ @DeleteMapping("/{id}")
+ public void deleteUserReview(@PathVariable Long id) {
+ reviewService.deleteReview(id);
+ }
+
+ @Operation(summary = "회원 리뷰 신고 목록 조회")
+ @GetMapping("/{id}/reports")
+ public SliceResponse getUserReviewReports(@PathVariable Long id, @RequestParam(required = false) Long nowReviewReportId) {
+ return reviewService.getUserReviewReportResponse(id, nowReviewReportId);
+ }
+}
diff --git a/src/main/java/com/clubber/ClubberServer/domain/user/dto/FavoriteClubDetailResponse.java b/Clubber-External/src/main/java/com/clubber/domain/user/dto/FavoriteClubDetailResponse.java
similarity index 84%
rename from src/main/java/com/clubber/ClubberServer/domain/user/dto/FavoriteClubDetailResponse.java
rename to Clubber-External/src/main/java/com/clubber/domain/user/dto/FavoriteClubDetailResponse.java
index 66ce9e636..d71fb05b0 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/user/dto/FavoriteClubDetailResponse.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/user/dto/FavoriteClubDetailResponse.java
@@ -1,7 +1,7 @@
-package com.clubber.ClubberServer.domain.user.dto;
+package com.clubber.domain.user.dto;
-import com.clubber.ClubberServer.domain.club.domain.Club;
-import com.clubber.ClubberServer.global.vo.image.ImageVO;
+import com.clubber.domain.domains.club.domain.Club;
+import com.clubber.domain.common.vo.ImageVO;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AccessLevel;
import lombok.Builder;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/user/dto/FavoriteDetailResponse.java b/Clubber-External/src/main/java/com/clubber/domain/user/dto/FavoriteDetailResponse.java
similarity index 85%
rename from src/main/java/com/clubber/ClubberServer/domain/user/dto/FavoriteDetailResponse.java
rename to Clubber-External/src/main/java/com/clubber/domain/user/dto/FavoriteDetailResponse.java
index 50e8a8fc7..0d36ef6a8 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/user/dto/FavoriteDetailResponse.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/user/dto/FavoriteDetailResponse.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.domain.user.dto;
+package com.clubber.domain.user.dto;
-import com.clubber.ClubberServer.domain.favorite.domain.Favorite;
+import com.clubber.domain.domains.favorite.domain.Favorite;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AccessLevel;
import lombok.Builder;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/user/dto/GetIsUserFavoriteResponse.java b/Clubber-External/src/main/java/com/clubber/domain/user/dto/GetIsUserFavoriteResponse.java
similarity index 79%
rename from src/main/java/com/clubber/ClubberServer/domain/user/dto/GetIsUserFavoriteResponse.java
rename to Clubber-External/src/main/java/com/clubber/domain/user/dto/GetIsUserFavoriteResponse.java
index b14deacd4..16bc7ed4e 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/user/dto/GetIsUserFavoriteResponse.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/user/dto/GetIsUserFavoriteResponse.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.domain.user.dto;
+package com.clubber.domain.user.dto;
-import com.clubber.ClubberServer.domain.club.domain.Club;
+import com.clubber.domain.domains.club.domain.Club;
import lombok.AccessLevel;
import lombok.Builder;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/user/dto/GetUserFavoritesResponse.java b/Clubber-External/src/main/java/com/clubber/domain/user/dto/GetUserFavoritesResponse.java
similarity index 78%
rename from src/main/java/com/clubber/ClubberServer/domain/user/dto/GetUserFavoritesResponse.java
rename to Clubber-External/src/main/java/com/clubber/domain/user/dto/GetUserFavoritesResponse.java
index cfa799990..d2b329fac 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/user/dto/GetUserFavoritesResponse.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/user/dto/GetUserFavoritesResponse.java
@@ -1,7 +1,6 @@
-package com.clubber.ClubberServer.domain.user.dto;
+package com.clubber.domain.user.dto;
-import com.clubber.ClubberServer.domain.favorite.domain.Favorite;
-import com.clubber.ClubberServer.domain.user.domain.User;
+import com.clubber.domain.domains.user.domain.User;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AccessLevel;
import lombok.Builder;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/user/dto/GetUserProfileResponse.java b/Clubber-External/src/main/java/com/clubber/domain/user/dto/GetUserProfileResponse.java
similarity index 84%
rename from src/main/java/com/clubber/ClubberServer/domain/user/dto/GetUserProfileResponse.java
rename to Clubber-External/src/main/java/com/clubber/domain/user/dto/GetUserProfileResponse.java
index 1c439ff0d..95e51af61 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/user/dto/GetUserProfileResponse.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/user/dto/GetUserProfileResponse.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.domain.user.dto;
+package com.clubber.domain.user.dto;
-import com.clubber.ClubberServer.domain.user.domain.User;
+import com.clubber.domain.domains.user.domain.User;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AccessLevel;
import lombok.Builder;
diff --git a/Clubber-External/src/main/java/com/clubber/domain/user/dto/GetUserReviewReportResponse.java b/Clubber-External/src/main/java/com/clubber/domain/user/dto/GetUserReviewReportResponse.java
new file mode 100644
index 000000000..d192fdb06
--- /dev/null
+++ b/Clubber-External/src/main/java/com/clubber/domain/user/dto/GetUserReviewReportResponse.java
@@ -0,0 +1,27 @@
+package com.clubber.domain.user.dto;
+
+import com.clubber.domain.domains.club.domain.Club;
+import com.clubber.domain.domains.report.domain.Report;
+import com.clubber.domain.domains.review.domain.Review;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Builder;
+
+import java.time.LocalDateTime;
+
+@Builder
+public record GetUserReviewReportResponse(
+ String clubName,
+ String content,
+ String reportReason,
+ @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy.MM.dd", timezone = "Asia/Seoul")
+ LocalDateTime reportDate
+) {
+ public static GetUserReviewReportResponse of(Report report, Review review, Club club) {
+ return GetUserReviewReportResponse.builder()
+ .clubName(club.getName())
+ .content(review.getContent())
+ .reportReason(report.getReportReason().getTitle())
+ .reportDate(report.getCreatedAt())
+ .build();
+ }
+}
diff --git a/src/main/java/com/clubber/ClubberServer/domain/user/dto/GetUserReviewsResponse.java b/Clubber-External/src/main/java/com/clubber/domain/user/dto/GetUserReviewsResponse.java
similarity index 85%
rename from src/main/java/com/clubber/ClubberServer/domain/user/dto/GetUserReviewsResponse.java
rename to Clubber-External/src/main/java/com/clubber/domain/user/dto/GetUserReviewsResponse.java
index 5e4129ba4..06f0938d5 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/user/dto/GetUserReviewsResponse.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/user/dto/GetUserReviewsResponse.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.domain.user.dto;
+package com.clubber.domain.user.dto;
-import com.clubber.ClubberServer.domain.user.domain.User;
+import com.clubber.domain.domains.user.domain.User;
import java.util.List;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
diff --git a/Clubber-External/src/main/java/com/clubber/domain/user/dto/UserReviewResponse.java b/Clubber-External/src/main/java/com/clubber/domain/user/dto/UserReviewResponse.java
new file mode 100644
index 000000000..cfd1c005f
--- /dev/null
+++ b/Clubber-External/src/main/java/com/clubber/domain/user/dto/UserReviewResponse.java
@@ -0,0 +1,53 @@
+package com.clubber.domain.user.dto;
+
+import com.clubber.domain.domains.review.domain.ReportStatus;
+import com.clubber.domain.domains.review.domain.Review;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AccessLevel;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Getter;
+
+import java.time.LocalDateTime;
+import java.util.Set;
+
+@Getter
+@Builder(access = AccessLevel.PRIVATE)
+@AllArgsConstructor(access = AccessLevel.PRIVATE)
+public class UserReviewResponse {
+
+ @Schema(description = "리뷰 id", example = "1")
+ private final Long reviewId;
+
+ @Schema(description = "동아리 id", example = "1")
+ private final Long clubId;
+
+ @Schema(description = "동아리 이름", example = "1")
+ private final String clubName;
+
+ @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy.MM.dd", timezone = "Asia/Seoul")
+ @Schema(description = "리뷰 작성 일자", example = "2024.01.01", type = "string")
+ private final LocalDateTime dateTime;
+
+ @Schema(description = "리뷰 작성 시 선택한 키워드")
+ private final Set keywords;
+
+ @Schema(description = "한줄평", example = "매주 정기회의가 있어서 시간 투자가 필요합니다!")
+ private final String content;
+
+ @Schema(description = "신고 상태")
+ private final ReportStatus reportStatus;
+
+ public static UserReviewResponse of(Review review, Set keywords) {
+ return UserReviewResponse.builder()
+ .reviewId(review.getId())
+ .keywords(keywords)
+ .clubId(review.getClub().getId())
+ .clubName(review.getClub().getName())
+ .dateTime(review.getCreatedAt())
+ .content(review.getContent())
+ .reportStatus(review.getReportStatus())
+ .build();
+ }
+}
diff --git a/src/main/java/com/clubber/ClubberServer/domain/user/implement/UserReader.java b/Clubber-External/src/main/java/com/clubber/domain/user/implement/UserReader.java
similarity index 58%
rename from src/main/java/com/clubber/ClubberServer/domain/user/implement/UserReader.java
rename to Clubber-External/src/main/java/com/clubber/domain/user/implement/UserReader.java
index 3d12152b1..22d8db814 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/user/implement/UserReader.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/user/implement/UserReader.java
@@ -1,15 +1,15 @@
-package com.clubber.ClubberServer.domain.user.implement;
+package com.clubber.domain.user.implement;
-import com.clubber.ClubberServer.domain.user.domain.AccountState;
-import com.clubber.ClubberServer.domain.user.domain.User;
-import com.clubber.ClubberServer.domain.user.exception.UserNotFoundException;
-import com.clubber.ClubberServer.domain.user.repository.UserRepository;
-import com.clubber.ClubberServer.global.config.security.SecurityUtils;
+import com.clubber.domain.domains.user.domain.AccountState;
+import com.clubber.domain.domains.user.domain.User;
+import com.clubber.domain.domains.user.exception.UserNotFoundException;
+import com.clubber.domain.user.repository.UserRepository;
+import com.clubber.global.config.security.SecurityUtils;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
-import static com.clubber.ClubberServer.domain.user.domain.AccountState.ACTIVE;
+import static com.clubber.domain.domains.user.domain.AccountState.ACTIVE;
@Component
@RequiredArgsConstructor
diff --git a/src/main/java/com/clubber/ClubberServer/domain/user/mapper/UserMapper.java b/Clubber-External/src/main/java/com/clubber/domain/user/mapper/UserMapper.java
similarity index 78%
rename from src/main/java/com/clubber/ClubberServer/domain/user/mapper/UserMapper.java
rename to Clubber-External/src/main/java/com/clubber/domain/user/mapper/UserMapper.java
index dbb2ff64c..da182ccdd 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/user/mapper/UserMapper.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/user/mapper/UserMapper.java
@@ -1,13 +1,13 @@
-package com.clubber.ClubberServer.domain.user.mapper;
+package com.clubber.domain.user.mapper;
-import com.clubber.ClubberServer.domain.club.domain.Club;
-import com.clubber.ClubberServer.domain.favorite.domain.Favorite;
-import com.clubber.ClubberServer.domain.favorite.dto.GetFavoriteDetailsResponse;
-import com.clubber.ClubberServer.domain.review.domain.Review;
-import com.clubber.ClubberServer.domain.review.util.ReviewUtil;
-import com.clubber.ClubberServer.domain.user.domain.User;
-import com.clubber.ClubberServer.domain.user.dto.*;
-import com.clubber.ClubberServer.global.common.page.PageResponse;
+import com.clubber.domain.domains.club.domain.Club;
+import com.clubber.domain.domains.favorite.domain.Favorite;
+import com.clubber.domain.favorite.dto.GetFavoriteDetailsResponse;
+import com.clubber.domain.domains.review.domain.Review;
+import com.clubber.domain.domains.review.util.ReviewUtil;
+import com.clubber.domain.domains.user.domain.User;
+import com.clubber.global.common.page.PageResponse;
+import com.clubber.domain.user.dto.*;
import org.springframework.data.domain.Page;
import org.springframework.stereotype.Component;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/user/repository/UserRepository.java b/Clubber-External/src/main/java/com/clubber/domain/user/repository/UserRepository.java
similarity index 61%
rename from src/main/java/com/clubber/ClubberServer/domain/user/repository/UserRepository.java
rename to Clubber-External/src/main/java/com/clubber/domain/user/repository/UserRepository.java
index 818b7c62c..c12e331c2 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/user/repository/UserRepository.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/user/repository/UserRepository.java
@@ -1,7 +1,7 @@
-package com.clubber.ClubberServer.domain.user.repository;
+package com.clubber.domain.user.repository;
-import com.clubber.ClubberServer.domain.user.domain.AccountState;
-import com.clubber.ClubberServer.domain.user.domain.User;
+import com.clubber.domain.domains.user.domain.AccountState;
+import com.clubber.domain.domains.user.domain.User;
import java.util.Optional;
import org.springframework.data.jpa.repository.JpaRepository;
diff --git a/src/main/java/com/clubber/ClubberServer/domain/user/service/UserService.java b/Clubber-External/src/main/java/com/clubber/domain/user/service/UserService.java
similarity index 63%
rename from src/main/java/com/clubber/ClubberServer/domain/user/service/UserService.java
rename to Clubber-External/src/main/java/com/clubber/domain/user/service/UserService.java
index ccdd12a0d..82d91a4c0 100644
--- a/src/main/java/com/clubber/ClubberServer/domain/user/service/UserService.java
+++ b/Clubber-External/src/main/java/com/clubber/domain/user/service/UserService.java
@@ -1,20 +1,20 @@
-package com.clubber.ClubberServer.domain.user.service;
+package com.clubber.domain.user.service;
-import com.clubber.ClubberServer.domain.club.domain.Club;
-import com.clubber.ClubberServer.domain.club.implement.ClubReader;
-import com.clubber.ClubberServer.domain.favorite.domain.Favorite;
-import com.clubber.ClubberServer.domain.favorite.dto.GetFavoriteDetailsResponse;
-import com.clubber.ClubberServer.domain.favorite.implement.FavoriteReader;
-import com.clubber.ClubberServer.domain.review.domain.Review;
-import com.clubber.ClubberServer.domain.review.repository.ReviewRepository;
-import com.clubber.ClubberServer.domain.user.domain.User;
-import com.clubber.ClubberServer.domain.user.dto.GetIsUserFavoriteResponse;
-import com.clubber.ClubberServer.domain.user.dto.GetUserFavoritesResponse;
-import com.clubber.ClubberServer.domain.user.dto.GetUserProfileResponse;
-import com.clubber.ClubberServer.domain.user.dto.GetUserReviewsResponse;
-import com.clubber.ClubberServer.domain.user.implement.UserReader;
-import com.clubber.ClubberServer.domain.user.mapper.UserMapper;
-import com.clubber.ClubberServer.global.common.page.PageResponse;
+import com.clubber.domain.domains.club.domain.Club;
+import com.clubber.domain.club.implement.ClubReader;
+import com.clubber.domain.domains.favorite.domain.Favorite;
+import com.clubber.domain.favorite.dto.GetFavoriteDetailsResponse;
+import com.clubber.domain.favorite.implement.FavoriteReader;
+import com.clubber.domain.domains.review.domain.Review;
+import com.clubber.domain.domains.review.repository.ReviewRepository;
+import com.clubber.domain.domains.user.domain.User;
+import com.clubber.domain.user.dto.GetIsUserFavoriteResponse;
+import com.clubber.domain.user.dto.GetUserFavoritesResponse;
+import com.clubber.domain.user.dto.GetUserProfileResponse;
+import com.clubber.domain.user.dto.GetUserReviewsResponse;
+import com.clubber.domain.user.implement.UserReader;
+import com.clubber.domain.user.mapper.UserMapper;
+import com.clubber.global.common.page.PageResponse;
import lombok.RequiredArgsConstructor;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
diff --git a/src/main/java/com/clubber/ClubberServer/global/common/logging/HttpLogMessage.java b/Clubber-External/src/main/java/com/clubber/global/common/logging/HttpLogMessage.java
similarity index 97%
rename from src/main/java/com/clubber/ClubberServer/global/common/logging/HttpLogMessage.java
rename to Clubber-External/src/main/java/com/clubber/global/common/logging/HttpLogMessage.java
index 01865b906..d926c60b1 100644
--- a/src/main/java/com/clubber/ClubberServer/global/common/logging/HttpLogMessage.java
+++ b/Clubber-External/src/main/java/com/clubber/global/common/logging/HttpLogMessage.java
@@ -1,4 +1,4 @@
-package com.clubber.ClubberServer.global.common.logging;
+package com.clubber.global.common.logging;
import lombok.Builder;
import org.springframework.http.HttpStatus;
diff --git a/src/main/java/com/clubber/ClubberServer/global/common/logging/ReqResLoggingFilter.java b/Clubber-External/src/main/java/com/clubber/global/common/logging/ReqResLoggingFilter.java
similarity index 97%
rename from src/main/java/com/clubber/ClubberServer/global/common/logging/ReqResLoggingFilter.java
rename to Clubber-External/src/main/java/com/clubber/global/common/logging/ReqResLoggingFilter.java
index 4a9387f1c..a3c76dded 100644
--- a/src/main/java/com/clubber/ClubberServer/global/common/logging/ReqResLoggingFilter.java
+++ b/Clubber-External/src/main/java/com/clubber/global/common/logging/ReqResLoggingFilter.java
@@ -1,4 +1,4 @@
-package com.clubber.ClubberServer.global.common.logging;
+package com.clubber.global.common.logging;
import jakarta.servlet.FilterChain;
import jakarta.servlet.ServletException;
diff --git a/src/main/java/com/clubber/ClubberServer/global/common/page/PageResponse.java b/Clubber-External/src/main/java/com/clubber/global/common/page/PageResponse.java
similarity index 89%
rename from src/main/java/com/clubber/ClubberServer/global/common/page/PageResponse.java
rename to Clubber-External/src/main/java/com/clubber/global/common/page/PageResponse.java
index 82e7bc22b..115f4c635 100644
--- a/src/main/java/com/clubber/ClubberServer/global/common/page/PageResponse.java
+++ b/Clubber-External/src/main/java/com/clubber/global/common/page/PageResponse.java
@@ -1,4 +1,4 @@
-package com.clubber.ClubberServer.global.common.page;
+package com.clubber.global.common.page;
import java.util.List;
import org.springframework.data.domain.Page;
diff --git a/src/main/java/com/clubber/ClubberServer/global/common/slice/SliceResponse.java b/Clubber-External/src/main/java/com/clubber/global/common/slice/SliceResponse.java
similarity index 82%
rename from src/main/java/com/clubber/ClubberServer/global/common/slice/SliceResponse.java
rename to Clubber-External/src/main/java/com/clubber/global/common/slice/SliceResponse.java
index 3a8eb1376..8f1ad545c 100644
--- a/src/main/java/com/clubber/ClubberServer/global/common/slice/SliceResponse.java
+++ b/Clubber-External/src/main/java/com/clubber/global/common/slice/SliceResponse.java
@@ -1,4 +1,4 @@
-package com.clubber.ClubberServer.global.common.slice;
+package com.clubber.global.common.slice;
import java.util.List;
diff --git a/src/main/java/com/clubber/ClubberServer/global/config/async/AsyncConfig.java b/Clubber-External/src/main/java/com/clubber/global/config/async/AsyncConfig.java
similarity index 89%
rename from src/main/java/com/clubber/ClubberServer/global/config/async/AsyncConfig.java
rename to Clubber-External/src/main/java/com/clubber/global/config/async/AsyncConfig.java
index 4f068a522..c36ef081b 100644
--- a/src/main/java/com/clubber/ClubberServer/global/config/async/AsyncConfig.java
+++ b/Clubber-External/src/main/java/com/clubber/global/config/async/AsyncConfig.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.global.config.async;
+package com.clubber.global.config.async;
-import com.clubber.ClubberServer.global.event.exceptionalarm.async.AsyncExceptionAlarmPublisher;
+import com.clubber.global.event.exceptionalarm.async.AsyncExceptionAlarmPublisher;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler;
diff --git a/src/main/java/com/clubber/ClubberServer/global/config/async/ClonedTaskDecorator.java b/Clubber-External/src/main/java/com/clubber/global/config/async/ClonedTaskDecorator.java
similarity index 88%
rename from src/main/java/com/clubber/ClubberServer/global/config/async/ClonedTaskDecorator.java
rename to Clubber-External/src/main/java/com/clubber/global/config/async/ClonedTaskDecorator.java
index ebb26c556..e93b3fd80 100644
--- a/src/main/java/com/clubber/ClubberServer/global/config/async/ClonedTaskDecorator.java
+++ b/Clubber-External/src/main/java/com/clubber/global/config/async/ClonedTaskDecorator.java
@@ -1,4 +1,4 @@
-package com.clubber.ClubberServer.global.config.async;
+package com.clubber.global.config.async;
import org.slf4j.MDC;
import org.springframework.core.task.TaskDecorator;
diff --git a/src/main/java/com/clubber/ClubberServer/global/config/enums/EnumConfig.java b/Clubber-External/src/main/java/com/clubber/global/config/enums/EnumConfig.java
similarity index 51%
rename from src/main/java/com/clubber/ClubberServer/global/config/enums/EnumConfig.java
rename to Clubber-External/src/main/java/com/clubber/global/config/enums/EnumConfig.java
index cb6a01906..060a53e3f 100644
--- a/src/main/java/com/clubber/ClubberServer/global/config/enums/EnumConfig.java
+++ b/Clubber-External/src/main/java/com/clubber/global/config/enums/EnumConfig.java
@@ -1,10 +1,13 @@
-package com.clubber.ClubberServer.global.config.enums;
+package com.clubber.global.config.enums;
-import com.clubber.ClubberServer.domain.club.domain.*;
-import com.clubber.ClubberServer.domain.faq.domain.Faq;
-import com.clubber.ClubberServer.domain.review.domain.Keyword;
-import com.clubber.ClubberServer.global.mapper.enums.EnumMapper;
+import com.clubber.domain.domains.report.domain.ReportReason;
+import com.clubber.domain.domains.report.domain.ReportStatus;
+import com.clubber.domain.faq.domain.Faq;
+import com.clubber.domain.domains.review.domain.Keyword;
+import com.clubber.domain.domains.review.domain.ReviewKeywordCategory;
+import com.clubber.common.mapper.enums.EnumMapper;
+import com.clubber.domain.domains.club.domain.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@@ -21,6 +24,8 @@ public EnumMapper getEnumMapper() {
enumMapper.put("ClubType", ClubType.class);
enumMapper.put("Hashtag", Hashtag.class);
enumMapper.put("FaQ", Faq.class);
+ enumMapper.put("ReviewKeywordCategory", ReviewKeywordCategory.class);
+ enumMapper.put("ReportReason", ReportReason.class);
return enumMapper;
}
}
diff --git a/src/main/java/com/clubber/ClubberServer/global/config/feign/FeignConfig.java b/Clubber-External/src/main/java/com/clubber/global/config/feign/FeignConfig.java
similarity index 83%
rename from src/main/java/com/clubber/ClubberServer/global/config/feign/FeignConfig.java
rename to Clubber-External/src/main/java/com/clubber/global/config/feign/FeignConfig.java
index 191397ae5..4b972b534 100644
--- a/src/main/java/com/clubber/ClubberServer/global/config/feign/FeignConfig.java
+++ b/Clubber-External/src/main/java/com/clubber/global/config/feign/FeignConfig.java
@@ -1,4 +1,4 @@
-package com.clubber.ClubberServer.global.config.feign;
+package com.clubber.global.config.feign;
import feign.Request;
import feign.Retryer;
@@ -9,7 +9,7 @@
import java.util.concurrent.TimeUnit;
@Configuration
-@EnableFeignClients(basePackages = "com.clubber.ClubberServer.global.infrastructure")
+@EnableFeignClients(basePackages = "com.clubber.global.infrastructure")
public class FeignConfig {
//Feign 사용시 TimeOut 설정
private static final long CONNECTION_TIMEOUT = 10;
diff --git a/src/main/java/com/clubber/ClubberServer/global/config/jpa/JpaAuditingConfig.java b/Clubber-External/src/main/java/com/clubber/global/config/jpa/JpaAuditingConfig.java
similarity index 79%
rename from src/main/java/com/clubber/ClubberServer/global/config/jpa/JpaAuditingConfig.java
rename to Clubber-External/src/main/java/com/clubber/global/config/jpa/JpaAuditingConfig.java
index 0736132da..baa8d1108 100644
--- a/src/main/java/com/clubber/ClubberServer/global/config/jpa/JpaAuditingConfig.java
+++ b/Clubber-External/src/main/java/com/clubber/global/config/jpa/JpaAuditingConfig.java
@@ -1,4 +1,4 @@
-package com.clubber.ClubberServer.global.config.jpa;
+package com.clubber.global.config.jpa;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
diff --git a/src/main/java/com/clubber/ClubberServer/global/config/mail/MailConfig.java b/Clubber-External/src/main/java/com/clubber/global/config/mail/MailConfig.java
similarity index 89%
rename from src/main/java/com/clubber/ClubberServer/global/config/mail/MailConfig.java
rename to Clubber-External/src/main/java/com/clubber/global/config/mail/MailConfig.java
index 6997fa7ae..9ed501da7 100644
--- a/src/main/java/com/clubber/ClubberServer/global/config/mail/MailConfig.java
+++ b/Clubber-External/src/main/java/com/clubber/global/config/mail/MailConfig.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.global.config.mail;
+package com.clubber.global.config.mail;
-import com.clubber.ClubberServer.global.properties.MailProperties;
+import com.clubber.global.properties.MailProperties;
import java.util.Properties;
import lombok.RequiredArgsConstructor;
import org.springframework.context.annotation.Bean;
diff --git a/src/main/java/com/clubber/ClubberServer/global/config/module/ModuleConfig.java b/Clubber-External/src/main/java/com/clubber/global/config/module/ModuleConfig.java
similarity index 91%
rename from src/main/java/com/clubber/ClubberServer/global/config/module/ModuleConfig.java
rename to Clubber-External/src/main/java/com/clubber/global/config/module/ModuleConfig.java
index bfd2032a7..385f32887 100644
--- a/src/main/java/com/clubber/ClubberServer/global/config/module/ModuleConfig.java
+++ b/Clubber-External/src/main/java/com/clubber/global/config/module/ModuleConfig.java
@@ -1,4 +1,4 @@
-package com.clubber.ClubberServer.global.config.module;
+package com.clubber.global.config.module;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
diff --git a/src/main/java/com/clubber/ClubberServer/global/config/querydsl/QueryDslConfig.java b/Clubber-External/src/main/java/com/clubber/global/config/querydsl/QueryDslConfig.java
similarity index 88%
rename from src/main/java/com/clubber/ClubberServer/global/config/querydsl/QueryDslConfig.java
rename to Clubber-External/src/main/java/com/clubber/global/config/querydsl/QueryDslConfig.java
index 2549258e3..bf28a7095 100644
--- a/src/main/java/com/clubber/ClubberServer/global/config/querydsl/QueryDslConfig.java
+++ b/Clubber-External/src/main/java/com/clubber/global/config/querydsl/QueryDslConfig.java
@@ -1,4 +1,4 @@
-package com.clubber.ClubberServer.global.config.querydsl;
+package com.clubber.global.config.querydsl;
import com.querydsl.jpa.impl.JPAQueryFactory;
import jakarta.persistence.EntityManager;
diff --git a/src/main/java/com/clubber/ClubberServer/global/config/redis/RedisConfig.java b/Clubber-External/src/main/java/com/clubber/global/config/redis/RedisConfig.java
similarity index 93%
rename from src/main/java/com/clubber/ClubberServer/global/config/redis/RedisConfig.java
rename to Clubber-External/src/main/java/com/clubber/global/config/redis/RedisConfig.java
index a884e321c..d7961afc4 100644
--- a/src/main/java/com/clubber/ClubberServer/global/config/redis/RedisConfig.java
+++ b/Clubber-External/src/main/java/com/clubber/global/config/redis/RedisConfig.java
@@ -1,4 +1,4 @@
-package com.clubber.ClubberServer.global.config.redis;
+package com.clubber.global.config.redis;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
diff --git a/src/main/java/com/clubber/ClubberServer/global/config/response/GlobalExceptionHandler.java b/Clubber-External/src/main/java/com/clubber/global/config/response/GlobalExceptionHandler.java
similarity index 88%
rename from src/main/java/com/clubber/ClubberServer/global/config/response/GlobalExceptionHandler.java
rename to Clubber-External/src/main/java/com/clubber/global/config/response/GlobalExceptionHandler.java
index 8ddf5e851..f0e6a34ac 100644
--- a/src/main/java/com/clubber/ClubberServer/global/config/response/GlobalExceptionHandler.java
+++ b/Clubber-External/src/main/java/com/clubber/global/config/response/GlobalExceptionHandler.java
@@ -1,11 +1,11 @@
-package com.clubber.ClubberServer.global.config.response;
+package com.clubber.global.config.response;
-import com.clubber.ClubberServer.global.dto.ErrorResponse;
-import com.clubber.ClubberServer.global.event.exceptionalarm.ExceptionAlarmEventPublisher;
-import com.clubber.ClubberServer.global.exception.BaseErrorCode;
-import com.clubber.ClubberServer.global.exception.BaseException;
-import com.clubber.ClubberServer.global.exception.ErrorReason;
-import com.clubber.ClubberServer.global.exception.GlobalErrorCode;
+import com.clubber.common.dto.ErrorResponse;
+import com.clubber.global.event.exceptionalarm.ExceptionAlarmEventPublisher;
+import com.clubber.common.exception.BaseErrorCode;
+import com.clubber.common.exception.BaseException;
+import com.clubber.common.exception.ErrorReason;
+import com.clubber.common.exception.GlobalErrorCode;
import jakarta.servlet.http.HttpServletRequest;
import java.util.List;
import lombok.RequiredArgsConstructor;
diff --git a/src/main/java/com/clubber/ClubberServer/global/config/response/SuccessResponseAdvice.java b/Clubber-External/src/main/java/com/clubber/global/config/response/SuccessResponseAdvice.java
similarity index 91%
rename from src/main/java/com/clubber/ClubberServer/global/config/response/SuccessResponseAdvice.java
rename to Clubber-External/src/main/java/com/clubber/global/config/response/SuccessResponseAdvice.java
index 55f0b5976..ae05a24cc 100644
--- a/src/main/java/com/clubber/ClubberServer/global/config/response/SuccessResponseAdvice.java
+++ b/Clubber-External/src/main/java/com/clubber/global/config/response/SuccessResponseAdvice.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.global.config.response;
+package com.clubber.global.config.response;
-import com.clubber.ClubberServer.global.dto.SuccessResponse;
+import com.clubber.common.dto.SuccessResponse;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.core.MethodParameter;
import org.springframework.http.HttpStatus;
diff --git a/src/main/java/com/clubber/ClubberServer/global/config/s3/ImageFileExtension.java b/Clubber-External/src/main/java/com/clubber/global/config/s3/ImageFileExtension.java
similarity index 79%
rename from src/main/java/com/clubber/ClubberServer/global/config/s3/ImageFileExtension.java
rename to Clubber-External/src/main/java/com/clubber/global/config/s3/ImageFileExtension.java
index b4b8837c6..478c062b2 100644
--- a/src/main/java/com/clubber/ClubberServer/global/config/s3/ImageFileExtension.java
+++ b/Clubber-External/src/main/java/com/clubber/global/config/s3/ImageFileExtension.java
@@ -1,4 +1,4 @@
-package com.clubber.ClubberServer.global.config.s3;
+package com.clubber.global.config.s3;
import lombok.AllArgsConstructor;
import lombok.Getter;
diff --git a/src/main/java/com/clubber/ClubberServer/global/config/s3/S3Config.java b/Clubber-External/src/main/java/com/clubber/global/config/s3/S3Config.java
similarity index 94%
rename from src/main/java/com/clubber/ClubberServer/global/config/s3/S3Config.java
rename to Clubber-External/src/main/java/com/clubber/global/config/s3/S3Config.java
index 22b8e0e6f..48ec9b71f 100644
--- a/src/main/java/com/clubber/ClubberServer/global/config/s3/S3Config.java
+++ b/Clubber-External/src/main/java/com/clubber/global/config/s3/S3Config.java
@@ -1,4 +1,4 @@
-package com.clubber.ClubberServer.global.config.s3;
+package com.clubber.global.config.s3;
import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.auth.BasicAWSCredentials;
diff --git a/src/main/java/com/clubber/ClubberServer/global/config/scheduler/SchedulerConfig.java b/Clubber-External/src/main/java/com/clubber/global/config/scheduler/SchedulerConfig.java
similarity index 88%
rename from src/main/java/com/clubber/ClubberServer/global/config/scheduler/SchedulerConfig.java
rename to Clubber-External/src/main/java/com/clubber/global/config/scheduler/SchedulerConfig.java
index 24a62c4eb..fec5870c3 100644
--- a/src/main/java/com/clubber/ClubberServer/global/config/scheduler/SchedulerConfig.java
+++ b/Clubber-External/src/main/java/com/clubber/global/config/scheduler/SchedulerConfig.java
@@ -1,4 +1,4 @@
-package com.clubber.ClubberServer.global.config.scheduler;
+package com.clubber.global.config.scheduler;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
diff --git a/src/main/java/com/clubber/ClubberServer/global/config/security/AccessDeniedFilter.java b/Clubber-External/src/main/java/com/clubber/global/config/security/AccessDeniedFilter.java
similarity index 85%
rename from src/main/java/com/clubber/ClubberServer/global/config/security/AccessDeniedFilter.java
rename to Clubber-External/src/main/java/com/clubber/global/config/security/AccessDeniedFilter.java
index 02b7e8fd8..afddb8961 100644
--- a/src/main/java/com/clubber/ClubberServer/global/config/security/AccessDeniedFilter.java
+++ b/Clubber-External/src/main/java/com/clubber/global/config/security/AccessDeniedFilter.java
@@ -1,8 +1,8 @@
-package com.clubber.ClubberServer.global.config.security;
+package com.clubber.global.config.security;
-import com.clubber.ClubberServer.domain.user.exception.UserErrorCode;
-import com.clubber.ClubberServer.global.dto.ErrorResponse;
-import com.clubber.ClubberServer.global.exception.BaseErrorCode;
+import com.clubber.domain.domains.user.exception.UserErrorCode;
+import com.clubber.common.dto.ErrorResponse;
+import com.clubber.common.exception.BaseErrorCode;
import com.fasterxml.jackson.databind.ObjectMapper;
import jakarta.servlet.FilterChain;
import jakarta.servlet.ServletException;
diff --git a/src/main/java/com/clubber/ClubberServer/global/config/security/AuthDetails.java b/Clubber-External/src/main/java/com/clubber/global/config/security/AuthDetails.java
similarity index 94%
rename from src/main/java/com/clubber/ClubberServer/global/config/security/AuthDetails.java
rename to Clubber-External/src/main/java/com/clubber/global/config/security/AuthDetails.java
index 9a86ce69e..6fa3cf787 100644
--- a/src/main/java/com/clubber/ClubberServer/global/config/security/AuthDetails.java
+++ b/Clubber-External/src/main/java/com/clubber/global/config/security/AuthDetails.java
@@ -1,4 +1,4 @@
-package com.clubber.ClubberServer.global.config.security;
+package com.clubber.global.config.security;
import java.util.Collection;
import java.util.Collections;
diff --git a/src/main/java/com/clubber/ClubberServer/global/config/security/CorsConfig.java b/Clubber-External/src/main/java/com/clubber/global/config/security/CorsConfig.java
similarity index 89%
rename from src/main/java/com/clubber/ClubberServer/global/config/security/CorsConfig.java
rename to Clubber-External/src/main/java/com/clubber/global/config/security/CorsConfig.java
index 926bca619..0c7d9a1fa 100644
--- a/src/main/java/com/clubber/ClubberServer/global/config/security/CorsConfig.java
+++ b/Clubber-External/src/main/java/com/clubber/global/config/security/CorsConfig.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.global.config.security;
+package com.clubber.global.config.security;
-import com.clubber.ClubberServer.global.helper.SpringEnvironmentHelper;
+import com.clubber.global.helper.SpringEnvironmentHelper;
import java.util.ArrayList;
import java.util.List;
import lombok.RequiredArgsConstructor;
diff --git a/src/main/java/com/clubber/ClubberServer/global/config/security/CustomAuthenticationEntryPoint.java b/Clubber-External/src/main/java/com/clubber/global/config/security/CustomAuthenticationEntryPoint.java
similarity index 84%
rename from src/main/java/com/clubber/ClubberServer/global/config/security/CustomAuthenticationEntryPoint.java
rename to Clubber-External/src/main/java/com/clubber/global/config/security/CustomAuthenticationEntryPoint.java
index ff1f3fbc9..84ed423ae 100644
--- a/src/main/java/com/clubber/ClubberServer/global/config/security/CustomAuthenticationEntryPoint.java
+++ b/Clubber-External/src/main/java/com/clubber/global/config/security/CustomAuthenticationEntryPoint.java
@@ -1,8 +1,8 @@
-package com.clubber.ClubberServer.global.config.security;
+package com.clubber.global.config.security;
-import com.clubber.ClubberServer.global.dto.ErrorResponse;
-import com.clubber.ClubberServer.global.exception.BaseErrorCode;
-import com.clubber.ClubberServer.global.exception.GlobalErrorCode;
+import com.clubber.common.dto.ErrorResponse;
+import com.clubber.common.exception.BaseErrorCode;
+import com.clubber.common.exception.GlobalErrorCode;
import com.fasterxml.jackson.databind.ObjectMapper;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
diff --git a/src/main/java/com/clubber/ClubberServer/global/config/security/FilterConfig.java b/Clubber-External/src/main/java/com/clubber/global/config/security/FilterConfig.java
similarity index 89%
rename from src/main/java/com/clubber/ClubberServer/global/config/security/FilterConfig.java
rename to Clubber-External/src/main/java/com/clubber/global/config/security/FilterConfig.java
index f8704256e..e10bfe09a 100644
--- a/src/main/java/com/clubber/ClubberServer/global/config/security/FilterConfig.java
+++ b/Clubber-External/src/main/java/com/clubber/global/config/security/FilterConfig.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.global.config.security;
+package com.clubber.global.config.security;
-import com.clubber.ClubberServer.global.jwt.JwtTokenUtil;
+import com.clubber.global.jwt.JwtTokenUtil;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.RequiredArgsConstructor;
import org.springframework.security.config.annotation.SecurityConfigurerAdapter;
diff --git a/Clubber-External/src/main/java/com/clubber/global/config/security/JwtExceptionFilter.java b/Clubber-External/src/main/java/com/clubber/global/config/security/JwtExceptionFilter.java
new file mode 100644
index 000000000..1209a9ac9
--- /dev/null
+++ b/Clubber-External/src/main/java/com/clubber/global/config/security/JwtExceptionFilter.java
@@ -0,0 +1,45 @@
+package com.clubber.global.config.security;
+
+import com.clubber.common.dto.ErrorResponse;
+import com.clubber.common.exception.BaseException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import jakarta.servlet.FilterChain;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import lombok.RequiredArgsConstructor;
+import org.springframework.http.MediaType;
+import org.springframework.stereotype.Component;
+import org.springframework.web.filter.OncePerRequestFilter;
+
+
+@RequiredArgsConstructor
+@Component
+public class JwtExceptionFilter extends OncePerRequestFilter {
+
+ private final ObjectMapper objectMapper;
+
+ @Override
+ protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response,
+ FilterChain filterChain) throws ServletException, IOException {
+ try {
+ filterChain.doFilter(request, response);
+ } catch (BaseException e) {
+ responseToClient(response,
+ getErrorResponse(e, request.getRequestURI().toString()));
+ }
+ }
+
+ private void responseToClient(HttpServletResponse response, ErrorResponse errorResponse)
+ throws IOException {
+ response.setCharacterEncoding("UTF-8");
+ response.setContentType(MediaType.APPLICATION_JSON_VALUE);
+ response.setStatus(errorResponse.getStatus());
+ response.getWriter().write(objectMapper.writeValueAsString(errorResponse));
+ }
+
+ private ErrorResponse getErrorResponse(BaseException e, String path) {
+ return new ErrorResponse(e.getErrorReason(), path);
+ }
+}
diff --git a/src/main/java/com/clubber/ClubberServer/global/config/security/JwtTokenFilter.java b/Clubber-External/src/main/java/com/clubber/global/config/security/JwtTokenFilter.java
similarity index 87%
rename from src/main/java/com/clubber/ClubberServer/global/config/security/JwtTokenFilter.java
rename to Clubber-External/src/main/java/com/clubber/global/config/security/JwtTokenFilter.java
index e010f431a..050c9fd17 100644
--- a/src/main/java/com/clubber/ClubberServer/global/config/security/JwtTokenFilter.java
+++ b/Clubber-External/src/main/java/com/clubber/global/config/security/JwtTokenFilter.java
@@ -1,7 +1,7 @@
-package com.clubber.ClubberServer.global.config.security;
+package com.clubber.global.config.security;
-import com.clubber.ClubberServer.global.jwt.vo.AccessTokenInfo;
-import com.clubber.ClubberServer.global.jwt.JwtTokenUtil;
+import com.clubber.global.jwt.vo.AccessTokenInfo;
+import com.clubber.global.jwt.JwtTokenUtil;
import jakarta.servlet.FilterChain;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.Cookie;
@@ -18,8 +18,8 @@
import java.io.IOException;
-import static com.clubber.ClubberServer.global.common.consts.ClubberStatic.AUTH_HEADER;
-import static com.clubber.ClubberServer.global.common.consts.ClubberStatic.BEARER;
+import static com.clubber.common.consts.ClubberStatic.AUTH_HEADER;
+import static com.clubber.common.consts.ClubberStatic.BEARER;
@Slf4j
@RequiredArgsConstructor
diff --git a/src/main/java/com/clubber/ClubberServer/global/config/security/SecurityConfig.java b/Clubber-External/src/main/java/com/clubber/global/config/security/SecurityConfig.java
similarity index 96%
rename from src/main/java/com/clubber/ClubberServer/global/config/security/SecurityConfig.java
rename to Clubber-External/src/main/java/com/clubber/global/config/security/SecurityConfig.java
index 045ebf3bb..73e7d23b7 100644
--- a/src/main/java/com/clubber/ClubberServer/global/config/security/SecurityConfig.java
+++ b/Clubber-External/src/main/java/com/clubber/global/config/security/SecurityConfig.java
@@ -1,4 +1,4 @@
-package com.clubber.ClubberServer.global.config.security;
+package com.clubber.global.config.security;
import lombok.RequiredArgsConstructor;
import org.springframework.context.annotation.Bean;
@@ -36,8 +36,8 @@ public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
.permitAll()
.requestMatchers("/api/v1/auths/refresh")
.permitAll()
- .requestMatchers(HttpMethod.GET, "/api/v1/clubs/{clubId}/reviews/**")
- .permitAll()
+ .requestMatchers("/api/v1/clubs/{clubId}/reviews/**")
+ .hasRole("USER")
.requestMatchers("/api/v1/images/admin/sign-up/verify")
.permitAll()
.requestMatchers("/api/v1/images/club/**")
@@ -108,7 +108,6 @@ public WebSecurityCustomizer webSecurityCustomizer() {
.requestMatchers("/api/v1/clubs/category/**")
.requestMatchers("/api/v1/clubs/summary")
.requestMatchers("/api/v1/clubs/popular")
- .requestMatchers(HttpMethod.GET, "/api/v1/clubs/{clubId}/reviews/**")
.requestMatchers("/api/v1/notices/**")
.requestMatchers("/api/v1/admins/login")
.requestMatchers("/api/v1/admins/sign-up")
diff --git a/src/main/java/com/clubber/ClubberServer/global/config/security/SecurityUtils.java b/Clubber-External/src/main/java/com/clubber/global/config/security/SecurityUtils.java
similarity index 85%
rename from src/main/java/com/clubber/ClubberServer/global/config/security/SecurityUtils.java
rename to Clubber-External/src/main/java/com/clubber/global/config/security/SecurityUtils.java
index fa240b938..1bc314c21 100644
--- a/src/main/java/com/clubber/ClubberServer/global/config/security/SecurityUtils.java
+++ b/Clubber-External/src/main/java/com/clubber/global/config/security/SecurityUtils.java
@@ -1,4 +1,4 @@
-package com.clubber.ClubberServer.global.config.security;
+package com.clubber.global.config.security;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
diff --git a/src/main/java/com/clubber/ClubberServer/global/config/swagger/ApiErrorCodeExample.java b/Clubber-External/src/main/java/com/clubber/global/config/swagger/ApiErrorCodeExample.java
similarity index 71%
rename from src/main/java/com/clubber/ClubberServer/global/config/swagger/ApiErrorCodeExample.java
rename to Clubber-External/src/main/java/com/clubber/global/config/swagger/ApiErrorCodeExample.java
index a9f9adc6c..6625ff6ed 100644
--- a/src/main/java/com/clubber/ClubberServer/global/config/swagger/ApiErrorCodeExample.java
+++ b/Clubber-External/src/main/java/com/clubber/global/config/swagger/ApiErrorCodeExample.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.global.config.swagger;
+package com.clubber.global.config.swagger;
-import com.clubber.ClubberServer.global.exception.BaseErrorCode;
+import com.clubber.common.exception.BaseErrorCode;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
diff --git a/src/main/java/com/clubber/ClubberServer/global/config/swagger/DisableSwaggerSecurity.java b/Clubber-External/src/main/java/com/clubber/global/config/swagger/DisableSwaggerSecurity.java
similarity index 82%
rename from src/main/java/com/clubber/ClubberServer/global/config/swagger/DisableSwaggerSecurity.java
rename to Clubber-External/src/main/java/com/clubber/global/config/swagger/DisableSwaggerSecurity.java
index cc0090a5a..636507b54 100644
--- a/src/main/java/com/clubber/ClubberServer/global/config/swagger/DisableSwaggerSecurity.java
+++ b/Clubber-External/src/main/java/com/clubber/global/config/swagger/DisableSwaggerSecurity.java
@@ -1,4 +1,4 @@
-package com.clubber.ClubberServer.global.config.swagger;
+package com.clubber.global.config.swagger;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
diff --git a/src/main/java/com/clubber/ClubberServer/global/config/swagger/ExampleHolder.java b/Clubber-External/src/main/java/com/clubber/global/config/swagger/ExampleHolder.java
similarity index 78%
rename from src/main/java/com/clubber/ClubberServer/global/config/swagger/ExampleHolder.java
rename to Clubber-External/src/main/java/com/clubber/global/config/swagger/ExampleHolder.java
index 21284dce2..cb02f6648 100644
--- a/src/main/java/com/clubber/ClubberServer/global/config/swagger/ExampleHolder.java
+++ b/Clubber-External/src/main/java/com/clubber/global/config/swagger/ExampleHolder.java
@@ -1,4 +1,4 @@
-package com.clubber.ClubberServer.global.config.swagger;
+package com.clubber.global.config.swagger;
import io.swagger.v3.oas.models.examples.Example;
import lombok.Builder;
diff --git a/src/main/java/com/clubber/ClubberServer/global/config/swagger/SwaggerConfig.java b/Clubber-External/src/main/java/com/clubber/global/config/swagger/SwaggerConfig.java
similarity index 97%
rename from src/main/java/com/clubber/ClubberServer/global/config/swagger/SwaggerConfig.java
rename to Clubber-External/src/main/java/com/clubber/global/config/swagger/SwaggerConfig.java
index e6258669c..e47b34fbb 100644
--- a/src/main/java/com/clubber/ClubberServer/global/config/swagger/SwaggerConfig.java
+++ b/Clubber-External/src/main/java/com/clubber/global/config/swagger/SwaggerConfig.java
@@ -1,11 +1,11 @@
-package com.clubber.ClubberServer.global.config.swagger;
+package com.clubber.global.config.swagger;
import static java.util.stream.Collectors.groupingBy;
-import com.clubber.ClubberServer.global.dto.ErrorResponse;
-import com.clubber.ClubberServer.global.exception.BaseErrorCode;
-import com.clubber.ClubberServer.global.exception.ErrorReason;
+import com.clubber.common.dto.ErrorResponse;
+import com.clubber.common.exception.BaseErrorCode;
+import com.clubber.common.exception.ErrorReason;
import io.swagger.v3.oas.models.Components;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.Operation;
diff --git a/src/main/java/com/clubber/ClubberServer/global/event/exceptionalarm/ExceptionAlarmEvent.java b/Clubber-External/src/main/java/com/clubber/global/event/exceptionalarm/ExceptionAlarmEvent.java
similarity index 78%
rename from src/main/java/com/clubber/ClubberServer/global/event/exceptionalarm/ExceptionAlarmEvent.java
rename to Clubber-External/src/main/java/com/clubber/global/event/exceptionalarm/ExceptionAlarmEvent.java
index eae38027a..993ded2fc 100644
--- a/src/main/java/com/clubber/ClubberServer/global/event/exceptionalarm/ExceptionAlarmEvent.java
+++ b/Clubber-External/src/main/java/com/clubber/global/event/exceptionalarm/ExceptionAlarmEvent.java
@@ -1,4 +1,4 @@
-package com.clubber.ClubberServer.global.event.exceptionalarm;
+package com.clubber.global.event.exceptionalarm;
import lombok.AllArgsConstructor;
import lombok.Getter;
diff --git a/src/main/java/com/clubber/ClubberServer/global/event/exceptionalarm/ExceptionAlarmEventPublisher.java b/Clubber-External/src/main/java/com/clubber/global/event/exceptionalarm/ExceptionAlarmEventPublisher.java
similarity index 81%
rename from src/main/java/com/clubber/ClubberServer/global/event/exceptionalarm/ExceptionAlarmEventPublisher.java
rename to Clubber-External/src/main/java/com/clubber/global/event/exceptionalarm/ExceptionAlarmEventPublisher.java
index 888ef02db..acaab4ae7 100644
--- a/src/main/java/com/clubber/ClubberServer/global/event/exceptionalarm/ExceptionAlarmEventPublisher.java
+++ b/Clubber-External/src/main/java/com/clubber/global/event/exceptionalarm/ExceptionAlarmEventPublisher.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.global.event.exceptionalarm;
+package com.clubber.global.event.exceptionalarm;
-import com.clubber.ClubberServer.global.helper.SpringEnvironmentHelper;
+import com.clubber.global.helper.SpringEnvironmentHelper;
import lombok.RequiredArgsConstructor;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.stereotype.Service;
diff --git a/src/main/java/com/clubber/ClubberServer/global/event/exceptionalarm/ExceptionDiscordAlarmEventHandler.java b/Clubber-External/src/main/java/com/clubber/global/event/exceptionalarm/ExceptionDiscordAlarmEventHandler.java
similarity index 83%
rename from src/main/java/com/clubber/ClubberServer/global/event/exceptionalarm/ExceptionDiscordAlarmEventHandler.java
rename to Clubber-External/src/main/java/com/clubber/global/event/exceptionalarm/ExceptionDiscordAlarmEventHandler.java
index 870238b44..dd0379cef 100644
--- a/src/main/java/com/clubber/ClubberServer/global/event/exceptionalarm/ExceptionDiscordAlarmEventHandler.java
+++ b/Clubber-External/src/main/java/com/clubber/global/event/exceptionalarm/ExceptionDiscordAlarmEventHandler.java
@@ -1,8 +1,8 @@
-package com.clubber.ClubberServer.global.event.exceptionalarm;
+package com.clubber.global.event.exceptionalarm;
-import com.clubber.ClubberServer.global.infrastructure.outer.discord.client.DiscordClient;
-import com.clubber.ClubberServer.global.infrastructure.outer.discord.dto.DiscordMessage;
-import com.clubber.ClubberServer.global.infrastructure.outer.discord.message.DiscordMessageFactory;
+import com.clubber.global.infrastructure.outer.discord.client.DiscordClient;
+import com.clubber.global.infrastructure.outer.discord.dto.DiscordMessage;
+import com.clubber.global.infrastructure.outer.discord.message.DiscordMessageFactory;
import jakarta.servlet.http.HttpServletRequest;
import java.io.PrintWriter;
import java.io.StringWriter;
diff --git a/src/main/java/com/clubber/ClubberServer/global/event/exceptionalarm/async/AsyncExceptionAlaramEvent.java b/Clubber-External/src/main/java/com/clubber/global/event/exceptionalarm/async/AsyncExceptionAlaramEvent.java
similarity index 78%
rename from src/main/java/com/clubber/ClubberServer/global/event/exceptionalarm/async/AsyncExceptionAlaramEvent.java
rename to Clubber-External/src/main/java/com/clubber/global/event/exceptionalarm/async/AsyncExceptionAlaramEvent.java
index 73f5d9218..ffa8ed599 100644
--- a/src/main/java/com/clubber/ClubberServer/global/event/exceptionalarm/async/AsyncExceptionAlaramEvent.java
+++ b/Clubber-External/src/main/java/com/clubber/global/event/exceptionalarm/async/AsyncExceptionAlaramEvent.java
@@ -1,4 +1,4 @@
-package com.clubber.ClubberServer.global.event.exceptionalarm.async;
+package com.clubber.global.event.exceptionalarm.async;
import lombok.AllArgsConstructor;
import lombok.Getter;
diff --git a/src/main/java/com/clubber/ClubberServer/global/event/exceptionalarm/async/AsyncExceptionAlaramHandler.java b/Clubber-External/src/main/java/com/clubber/global/event/exceptionalarm/async/AsyncExceptionAlaramHandler.java
similarity index 76%
rename from src/main/java/com/clubber/ClubberServer/global/event/exceptionalarm/async/AsyncExceptionAlaramHandler.java
rename to Clubber-External/src/main/java/com/clubber/global/event/exceptionalarm/async/AsyncExceptionAlaramHandler.java
index 9ba9abe1d..0e802fbd9 100644
--- a/src/main/java/com/clubber/ClubberServer/global/event/exceptionalarm/async/AsyncExceptionAlaramHandler.java
+++ b/Clubber-External/src/main/java/com/clubber/global/event/exceptionalarm/async/AsyncExceptionAlaramHandler.java
@@ -1,8 +1,8 @@
-package com.clubber.ClubberServer.global.event.exceptionalarm.async;
+package com.clubber.global.event.exceptionalarm.async;
-import com.clubber.ClubberServer.global.infrastructure.outer.discord.client.DiscordClient;
-import com.clubber.ClubberServer.global.infrastructure.outer.discord.dto.DiscordMessage;
-import com.clubber.ClubberServer.global.infrastructure.outer.discord.message.DiscordMessageFactory;
+import com.clubber.global.infrastructure.outer.discord.client.DiscordClient;
+import com.clubber.global.infrastructure.outer.discord.dto.DiscordMessage;
+import com.clubber.global.infrastructure.outer.discord.message.DiscordMessageFactory;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.event.EventListener;
diff --git a/src/main/java/com/clubber/ClubberServer/global/event/exceptionalarm/async/AsyncExceptionAlarmPublisher.java b/Clubber-External/src/main/java/com/clubber/global/event/exceptionalarm/async/AsyncExceptionAlarmPublisher.java
similarity index 71%
rename from src/main/java/com/clubber/ClubberServer/global/event/exceptionalarm/async/AsyncExceptionAlarmPublisher.java
rename to Clubber-External/src/main/java/com/clubber/global/event/exceptionalarm/async/AsyncExceptionAlarmPublisher.java
index 48416050d..fc04b42f4 100644
--- a/src/main/java/com/clubber/ClubberServer/global/event/exceptionalarm/async/AsyncExceptionAlarmPublisher.java
+++ b/Clubber-External/src/main/java/com/clubber/global/event/exceptionalarm/async/AsyncExceptionAlarmPublisher.java
@@ -1,7 +1,6 @@
-package com.clubber.ClubberServer.global.event.exceptionalarm.async;
+package com.clubber.global.event.exceptionalarm.async;
-import com.clubber.ClubberServer.global.event.exceptionalarm.ExceptionAlarmEvent;
-import com.clubber.ClubberServer.global.helper.SpringEnvironmentHelper;
+import com.clubber.global.helper.SpringEnvironmentHelper;
import lombok.RequiredArgsConstructor;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.stereotype.Service;
diff --git a/src/main/java/com/clubber/ClubberServer/global/event/signup/SignUpAlarmEventHandler.java b/Clubber-External/src/main/java/com/clubber/global/event/signup/SignUpAlarmEventHandler.java
similarity index 71%
rename from src/main/java/com/clubber/ClubberServer/global/event/signup/SignUpAlarmEventHandler.java
rename to Clubber-External/src/main/java/com/clubber/global/event/signup/SignUpAlarmEventHandler.java
index e9699d42d..7a9c3537e 100644
--- a/src/main/java/com/clubber/ClubberServer/global/event/signup/SignUpAlarmEventHandler.java
+++ b/Clubber-External/src/main/java/com/clubber/global/event/signup/SignUpAlarmEventHandler.java
@@ -1,9 +1,9 @@
-package com.clubber.ClubberServer.global.event.signup;
+package com.clubber.global.event.signup;
-import com.clubber.ClubberServer.domain.admin.domain.Contact;
-import com.clubber.ClubberServer.global.infrastructure.outer.discord.client.DiscordClient;
-import com.clubber.ClubberServer.global.infrastructure.outer.discord.dto.DiscordMessage;
-import com.clubber.ClubberServer.global.infrastructure.outer.discord.message.DiscordMessageFactory;
+import com.clubber.domain.domains.admin.domain.Contact;
+import com.clubber.global.infrastructure.outer.discord.client.DiscordClient;
+import com.clubber.global.infrastructure.outer.discord.dto.DiscordMessage;
+import com.clubber.global.infrastructure.outer.discord.message.DiscordMessageFactory;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.event.EventListener;
diff --git a/src/main/java/com/clubber/ClubberServer/global/event/signup/SignUpAlarmEventPublisher.java b/Clubber-External/src/main/java/com/clubber/global/event/signup/SignUpAlarmEventPublisher.java
similarity index 78%
rename from src/main/java/com/clubber/ClubberServer/global/event/signup/SignUpAlarmEventPublisher.java
rename to Clubber-External/src/main/java/com/clubber/global/event/signup/SignUpAlarmEventPublisher.java
index 58fa11df4..f91943d11 100644
--- a/src/main/java/com/clubber/ClubberServer/global/event/signup/SignUpAlarmEventPublisher.java
+++ b/Clubber-External/src/main/java/com/clubber/global/event/signup/SignUpAlarmEventPublisher.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.global.event.signup;
+package com.clubber.global.event.signup;
-import com.clubber.ClubberServer.domain.admin.domain.Contact;
+import com.clubber.domain.domains.admin.domain.Contact;
import lombok.RequiredArgsConstructor;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.stereotype.Service;
diff --git a/src/main/java/com/clubber/ClubberServer/global/event/signup/signUpAlarmEvent.java b/Clubber-External/src/main/java/com/clubber/global/event/signup/signUpAlarmEvent.java
similarity index 59%
rename from src/main/java/com/clubber/ClubberServer/global/event/signup/signUpAlarmEvent.java
rename to Clubber-External/src/main/java/com/clubber/global/event/signup/signUpAlarmEvent.java
index 8590b71ca..a1ae9ce6a 100644
--- a/src/main/java/com/clubber/ClubberServer/global/event/signup/signUpAlarmEvent.java
+++ b/Clubber-External/src/main/java/com/clubber/global/event/signup/signUpAlarmEvent.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.global.event.signup;
+package com.clubber.global.event.signup;
-import com.clubber.ClubberServer.domain.admin.domain.Contact;
+import com.clubber.domain.domains.admin.domain.Contact;
import lombok.AllArgsConstructor;
import lombok.Getter;
diff --git a/Clubber-External/src/main/java/com/clubber/global/event/withdraw/SoftDeleteEvent.java b/Clubber-External/src/main/java/com/clubber/global/event/withdraw/SoftDeleteEvent.java
new file mode 100644
index 000000000..b14f88878
--- /dev/null
+++ b/Clubber-External/src/main/java/com/clubber/global/event/withdraw/SoftDeleteEvent.java
@@ -0,0 +1,3 @@
+package com.clubber.global.event.withdraw;
+
+public record SoftDeleteEvent(Long clubId) { }
diff --git a/src/main/java/com/clubber/ClubberServer/global/event/withdraw/SoftDeleteEventHandler.java b/Clubber-External/src/main/java/com/clubber/global/event/withdraw/SoftDeleteEventHandler.java
similarity index 75%
rename from src/main/java/com/clubber/ClubberServer/global/event/withdraw/SoftDeleteEventHandler.java
rename to Clubber-External/src/main/java/com/clubber/global/event/withdraw/SoftDeleteEventHandler.java
index 4f71a637d..00e46c40b 100644
--- a/src/main/java/com/clubber/ClubberServer/global/event/withdraw/SoftDeleteEventHandler.java
+++ b/Clubber-External/src/main/java/com/clubber/global/event/withdraw/SoftDeleteEventHandler.java
@@ -1,8 +1,8 @@
-package com.clubber.ClubberServer.global.event.withdraw;
+package com.clubber.global.event.withdraw;
-import com.clubber.ClubberServer.domain.favorite.service.FavoriteService;
-import com.clubber.ClubberServer.domain.recruit.service.RecruitService;
-import com.clubber.ClubberServer.domain.review.service.ReviewService;
+import com.clubber.domain.favorite.service.FavoriteService;
+import com.clubber.domain.recruit.service.RecruitService;
+import com.clubber.domain.review.service.ReviewService;
import lombok.RequiredArgsConstructor;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
diff --git a/src/main/java/com/clubber/ClubberServer/global/event/withdraw/SoftDeleteEventPublisher.java b/Clubber-External/src/main/java/com/clubber/global/event/withdraw/SoftDeleteEventPublisher.java
similarity index 87%
rename from src/main/java/com/clubber/ClubberServer/global/event/withdraw/SoftDeleteEventPublisher.java
rename to Clubber-External/src/main/java/com/clubber/global/event/withdraw/SoftDeleteEventPublisher.java
index 7ef40f831..22564fabb 100644
--- a/src/main/java/com/clubber/ClubberServer/global/event/withdraw/SoftDeleteEventPublisher.java
+++ b/Clubber-External/src/main/java/com/clubber/global/event/withdraw/SoftDeleteEventPublisher.java
@@ -1,4 +1,4 @@
-package com.clubber.ClubberServer.global.event.withdraw;
+package com.clubber.global.event.withdraw;
import lombok.RequiredArgsConstructor;
import org.springframework.context.ApplicationEventPublisher;
diff --git a/src/main/java/com/clubber/ClubberServer/global/helper/SpringEnvironmentHelper.java b/Clubber-External/src/main/java/com/clubber/global/helper/SpringEnvironmentHelper.java
similarity index 91%
rename from src/main/java/com/clubber/ClubberServer/global/helper/SpringEnvironmentHelper.java
rename to Clubber-External/src/main/java/com/clubber/global/helper/SpringEnvironmentHelper.java
index e694b4497..cc0c0961a 100644
--- a/src/main/java/com/clubber/ClubberServer/global/helper/SpringEnvironmentHelper.java
+++ b/Clubber-External/src/main/java/com/clubber/global/helper/SpringEnvironmentHelper.java
@@ -1,4 +1,4 @@
-package com.clubber.ClubberServer.global.helper;
+package com.clubber.global.helper;
import java.util.Arrays;
import java.util.List;
diff --git a/src/main/java/com/clubber/ClubberServer/global/infrastructure/outer/api/oauth/kakao/client/KakaoInfoClient.java b/Clubber-External/src/main/java/com/clubber/global/infrastructure/outer/api/oauth/kakao/client/KakaoInfoClient.java
similarity index 66%
rename from src/main/java/com/clubber/ClubberServer/global/infrastructure/outer/api/oauth/kakao/client/KakaoInfoClient.java
rename to Clubber-External/src/main/java/com/clubber/global/infrastructure/outer/api/oauth/kakao/client/KakaoInfoClient.java
index d60bd90c3..546da78c8 100644
--- a/src/main/java/com/clubber/ClubberServer/global/infrastructure/outer/api/oauth/kakao/client/KakaoInfoClient.java
+++ b/Clubber-External/src/main/java/com/clubber/global/infrastructure/outer/api/oauth/kakao/client/KakaoInfoClient.java
@@ -1,8 +1,8 @@
-package com.clubber.ClubberServer.global.infrastructure.outer.api.oauth.kakao.client;
+package com.clubber.global.infrastructure.outer.api.oauth.kakao.client;
-import com.clubber.ClubberServer.global.infrastructure.outer.api.oauth.kakao.dto.UnlinkKaKaoTarget;
-import com.clubber.ClubberServer.global.config.feign.FeignConfig;
-import com.clubber.ClubberServer.global.infrastructure.outer.api.oauth.kakao.dto.KakaoUserInfoResponse;
+import com.clubber.global.infrastructure.outer.api.oauth.kakao.dto.UnlinkKaKaoTarget;
+import com.clubber.global.config.feign.FeignConfig;
+import com.clubber.global.infrastructure.outer.api.oauth.kakao.dto.KakaoUserInfoResponse;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.PostMapping;
diff --git a/src/main/java/com/clubber/ClubberServer/global/infrastructure/outer/api/oauth/kakao/client/KakaoOauthClient.java b/Clubber-External/src/main/java/com/clubber/global/infrastructure/outer/api/oauth/kakao/client/KakaoOauthClient.java
similarity index 60%
rename from src/main/java/com/clubber/ClubberServer/global/infrastructure/outer/api/oauth/kakao/client/KakaoOauthClient.java
rename to Clubber-External/src/main/java/com/clubber/global/infrastructure/outer/api/oauth/kakao/client/KakaoOauthClient.java
index 4518ec07d..defe1ac48 100644
--- a/src/main/java/com/clubber/ClubberServer/global/infrastructure/outer/api/oauth/kakao/client/KakaoOauthClient.java
+++ b/Clubber-External/src/main/java/com/clubber/global/infrastructure/outer/api/oauth/kakao/client/KakaoOauthClient.java
@@ -1,8 +1,8 @@
-package com.clubber.ClubberServer.global.infrastructure.outer.api.oauth.kakao.client;
+package com.clubber.global.infrastructure.outer.api.oauth.kakao.client;
-import com.clubber.ClubberServer.global.config.feign.FeignConfig;
-import com.clubber.ClubberServer.global.infrastructure.outer.api.oauth.kakao.dto.KakaoOAuthRequest;
-import com.clubber.ClubberServer.global.infrastructure.outer.api.oauth.kakao.dto.KakaoTokenResponse;
+import com.clubber.global.config.feign.FeignConfig;
+import com.clubber.global.infrastructure.outer.api.oauth.kakao.dto.KakaoOAuthRequest;
+import com.clubber.global.infrastructure.outer.api.oauth.kakao.dto.KakaoTokenResponse;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.PostMapping;
diff --git a/src/main/java/com/clubber/ClubberServer/global/infrastructure/outer/api/oauth/kakao/dto/KakaoOAuthRequest.java b/Clubber-External/src/main/java/com/clubber/global/infrastructure/outer/api/oauth/kakao/dto/KakaoOAuthRequest.java
similarity index 79%
rename from src/main/java/com/clubber/ClubberServer/global/infrastructure/outer/api/oauth/kakao/dto/KakaoOAuthRequest.java
rename to Clubber-External/src/main/java/com/clubber/global/infrastructure/outer/api/oauth/kakao/dto/KakaoOAuthRequest.java
index 402585bd2..4da691dfe 100644
--- a/src/main/java/com/clubber/ClubberServer/global/infrastructure/outer/api/oauth/kakao/dto/KakaoOAuthRequest.java
+++ b/Clubber-External/src/main/java/com/clubber/global/infrastructure/outer/api/oauth/kakao/dto/KakaoOAuthRequest.java
@@ -1,4 +1,4 @@
-package com.clubber.ClubberServer.global.infrastructure.outer.api.oauth.kakao.dto;
+package com.clubber.global.infrastructure.outer.api.oauth.kakao.dto;
import feign.form.FormProperty;
import lombok.AllArgsConstructor;
diff --git a/src/main/java/com/clubber/ClubberServer/global/infrastructure/outer/api/oauth/kakao/dto/KakaoTokenResponse.java b/Clubber-External/src/main/java/com/clubber/global/infrastructure/outer/api/oauth/kakao/dto/KakaoTokenResponse.java
similarity index 80%
rename from src/main/java/com/clubber/ClubberServer/global/infrastructure/outer/api/oauth/kakao/dto/KakaoTokenResponse.java
rename to Clubber-External/src/main/java/com/clubber/global/infrastructure/outer/api/oauth/kakao/dto/KakaoTokenResponse.java
index 20ee29a1d..162bd369c 100644
--- a/src/main/java/com/clubber/ClubberServer/global/infrastructure/outer/api/oauth/kakao/dto/KakaoTokenResponse.java
+++ b/Clubber-External/src/main/java/com/clubber/global/infrastructure/outer/api/oauth/kakao/dto/KakaoTokenResponse.java
@@ -1,4 +1,4 @@
-package com.clubber.ClubberServer.global.infrastructure.outer.api.oauth.kakao.dto;
+package com.clubber.global.infrastructure.outer.api.oauth.kakao.dto;
import com.fasterxml.jackson.databind.PropertyNamingStrategies.SnakeCaseStrategy;
import com.fasterxml.jackson.databind.annotation.JsonNaming;
diff --git a/src/main/java/com/clubber/ClubberServer/global/infrastructure/outer/api/oauth/kakao/dto/KakaoUserInfoResponse.java b/Clubber-External/src/main/java/com/clubber/global/infrastructure/outer/api/oauth/kakao/dto/KakaoUserInfoResponse.java
similarity index 71%
rename from src/main/java/com/clubber/ClubberServer/global/infrastructure/outer/api/oauth/kakao/dto/KakaoUserInfoResponse.java
rename to Clubber-External/src/main/java/com/clubber/global/infrastructure/outer/api/oauth/kakao/dto/KakaoUserInfoResponse.java
index 5c31eb276..2eeaa36db 100644
--- a/src/main/java/com/clubber/ClubberServer/global/infrastructure/outer/api/oauth/kakao/dto/KakaoUserInfoResponse.java
+++ b/Clubber-External/src/main/java/com/clubber/global/infrastructure/outer/api/oauth/kakao/dto/KakaoUserInfoResponse.java
@@ -1,7 +1,7 @@
-package com.clubber.ClubberServer.global.infrastructure.outer.api.oauth.kakao.dto;
+package com.clubber.global.infrastructure.outer.api.oauth.kakao.dto;
-import com.clubber.ClubberServer.domain.user.domain.SnsType;
-import com.clubber.ClubberServer.domain.user.domain.User;
+import com.clubber.domain.domains.user.domain.SnsType;
+import com.clubber.domain.domains.user.domain.User;
import com.fasterxml.jackson.databind.PropertyNamingStrategies.SnakeCaseStrategy;
import com.fasterxml.jackson.databind.annotation.JsonNaming;
diff --git a/src/main/java/com/clubber/ClubberServer/global/infrastructure/outer/api/oauth/kakao/dto/UnlinkKaKaoTarget.java b/Clubber-External/src/main/java/com/clubber/global/infrastructure/outer/api/oauth/kakao/dto/UnlinkKaKaoTarget.java
similarity index 84%
rename from src/main/java/com/clubber/ClubberServer/global/infrastructure/outer/api/oauth/kakao/dto/UnlinkKaKaoTarget.java
rename to Clubber-External/src/main/java/com/clubber/global/infrastructure/outer/api/oauth/kakao/dto/UnlinkKaKaoTarget.java
index 5089759a0..d34984854 100644
--- a/src/main/java/com/clubber/ClubberServer/global/infrastructure/outer/api/oauth/kakao/dto/UnlinkKaKaoTarget.java
+++ b/Clubber-External/src/main/java/com/clubber/global/infrastructure/outer/api/oauth/kakao/dto/UnlinkKaKaoTarget.java
@@ -1,4 +1,4 @@
-package com.clubber.ClubberServer.global.infrastructure.outer.api.oauth.kakao.dto;
+package com.clubber.global.infrastructure.outer.api.oauth.kakao.dto;
import feign.form.FormProperty;
import lombok.Getter;
diff --git a/src/main/java/com/clubber/ClubberServer/global/infrastructure/outer/discord/client/DiscordClient.java b/Clubber-External/src/main/java/com/clubber/global/infrastructure/outer/discord/client/DiscordClient.java
similarity index 71%
rename from src/main/java/com/clubber/ClubberServer/global/infrastructure/outer/discord/client/DiscordClient.java
rename to Clubber-External/src/main/java/com/clubber/global/infrastructure/outer/discord/client/DiscordClient.java
index b24e0dae5..d60a19f9b 100644
--- a/src/main/java/com/clubber/ClubberServer/global/infrastructure/outer/discord/client/DiscordClient.java
+++ b/Clubber-External/src/main/java/com/clubber/global/infrastructure/outer/discord/client/DiscordClient.java
@@ -1,7 +1,7 @@
-package com.clubber.ClubberServer.global.infrastructure.outer.discord.client;
+package com.clubber.global.infrastructure.outer.discord.client;
-import com.clubber.ClubberServer.global.config.feign.FeignConfig;
-import com.clubber.ClubberServer.global.infrastructure.outer.discord.dto.DiscordMessage;
+import com.clubber.global.config.feign.FeignConfig;
+import com.clubber.global.infrastructure.outer.discord.dto.DiscordMessage;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.PathVariable;
diff --git a/src/main/java/com/clubber/ClubberServer/global/infrastructure/outer/discord/dto/DiscordMessage.java b/Clubber-External/src/main/java/com/clubber/global/infrastructure/outer/discord/dto/DiscordMessage.java
similarity index 72%
rename from src/main/java/com/clubber/ClubberServer/global/infrastructure/outer/discord/dto/DiscordMessage.java
rename to Clubber-External/src/main/java/com/clubber/global/infrastructure/outer/discord/dto/DiscordMessage.java
index 2790ef49b..7d70e5cc0 100644
--- a/src/main/java/com/clubber/ClubberServer/global/infrastructure/outer/discord/dto/DiscordMessage.java
+++ b/Clubber-External/src/main/java/com/clubber/global/infrastructure/outer/discord/dto/DiscordMessage.java
@@ -1,4 +1,4 @@
-package com.clubber.ClubberServer.global.infrastructure.outer.discord.dto;
+package com.clubber.global.infrastructure.outer.discord.dto;
import java.util.List;
import lombok.Builder;
diff --git a/src/main/java/com/clubber/ClubberServer/global/infrastructure/outer/discord/message/DiscordMessageFactory.java b/Clubber-External/src/main/java/com/clubber/global/infrastructure/outer/discord/message/DiscordMessageFactory.java
similarity index 68%
rename from src/main/java/com/clubber/ClubberServer/global/infrastructure/outer/discord/message/DiscordMessageFactory.java
rename to Clubber-External/src/main/java/com/clubber/global/infrastructure/outer/discord/message/DiscordMessageFactory.java
index b691f85af..bec120938 100644
--- a/src/main/java/com/clubber/ClubberServer/global/infrastructure/outer/discord/message/DiscordMessageFactory.java
+++ b/Clubber-External/src/main/java/com/clubber/global/infrastructure/outer/discord/message/DiscordMessageFactory.java
@@ -1,7 +1,7 @@
-package com.clubber.ClubberServer.global.infrastructure.outer.discord.message;
+package com.clubber.global.infrastructure.outer.discord.message;
-import com.clubber.ClubberServer.global.infrastructure.outer.discord.dto.DiscordMessage;
-import com.clubber.ClubberServer.global.infrastructure.outer.discord.dto.DiscordMessage.Embed;
+import com.clubber.global.infrastructure.outer.discord.dto.DiscordMessage;
+import com.clubber.global.infrastructure.outer.discord.dto.DiscordMessage.Embed;
import java.util.List;
import org.springframework.stereotype.Component;
diff --git a/src/main/java/com/clubber/ClubberServer/global/infrastructure/outer/mail/MailService.java b/Clubber-External/src/main/java/com/clubber/global/infrastructure/outer/mail/MailService.java
similarity index 95%
rename from src/main/java/com/clubber/ClubberServer/global/infrastructure/outer/mail/MailService.java
rename to Clubber-External/src/main/java/com/clubber/global/infrastructure/outer/mail/MailService.java
index 0185259ee..4a609d2a7 100644
--- a/src/main/java/com/clubber/ClubberServer/global/infrastructure/outer/mail/MailService.java
+++ b/Clubber-External/src/main/java/com/clubber/global/infrastructure/outer/mail/MailService.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.global.infrastructure.outer.mail;
+package com.clubber.global.infrastructure.outer.mail;
-import com.clubber.ClubberServer.global.infrastructure.outer.mail.exception.MailNotSentException;
+import com.clubber.global.infrastructure.outer.mail.exception.MailNotSentException;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.mail.javamail.JavaMailSender;
@@ -9,7 +9,7 @@
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
-import static com.clubber.ClubberServer.global.common.consts.ClubberStatic.CLUBBER_EMAIL;
+import static com.clubber.common.consts.ClubberStatic.CLUBBER_EMAIL;
@Service
@RequiredArgsConstructor
diff --git a/Clubber-External/src/main/java/com/clubber/global/infrastructure/outer/mail/exception/MailNotSentException.java b/Clubber-External/src/main/java/com/clubber/global/infrastructure/outer/mail/exception/MailNotSentException.java
new file mode 100644
index 000000000..4416b11a9
--- /dev/null
+++ b/Clubber-External/src/main/java/com/clubber/global/infrastructure/outer/mail/exception/MailNotSentException.java
@@ -0,0 +1,13 @@
+package com.clubber.global.infrastructure.outer.mail.exception;
+
+import com.clubber.common.exception.BaseException;
+
+import static com.clubber.common.exception.GlobalErrorCode.MAIL_NOT_SENT;
+
+public class MailNotSentException extends BaseException {
+ public static final BaseException EXCEPTION = new MailNotSentException();
+
+ private MailNotSentException() {
+ super(MAIL_NOT_SENT);
+ }
+}
diff --git a/src/main/java/com/clubber/ClubberServer/global/infrastructure/outer/perspective/client/PerspectiveClient.java b/Clubber-External/src/main/java/com/clubber/global/infrastructure/outer/perspective/client/PerspectiveClient.java
similarity index 68%
rename from src/main/java/com/clubber/ClubberServer/global/infrastructure/outer/perspective/client/PerspectiveClient.java
rename to Clubber-External/src/main/java/com/clubber/global/infrastructure/outer/perspective/client/PerspectiveClient.java
index 9ff979c09..e1b8647f9 100644
--- a/src/main/java/com/clubber/ClubberServer/global/infrastructure/outer/perspective/client/PerspectiveClient.java
+++ b/Clubber-External/src/main/java/com/clubber/global/infrastructure/outer/perspective/client/PerspectiveClient.java
@@ -1,8 +1,8 @@
-package com.clubber.ClubberServer.global.infrastructure.outer.perspective.client;
+package com.clubber.global.infrastructure.outer.perspective.client;
-import com.clubber.ClubberServer.global.config.feign.FeignConfig;
-import com.clubber.ClubberServer.global.infrastructure.outer.perspective.dto.CreateTextAnalyzeRequest;
-import com.clubber.ClubberServer.global.infrastructure.outer.perspective.dto.CreateTextAnalyzeResponse;
+import com.clubber.global.config.feign.FeignConfig;
+import com.clubber.global.infrastructure.outer.perspective.dto.CreateTextAnalyzeRequest;
+import com.clubber.global.infrastructure.outer.perspective.dto.CreateTextAnalyzeResponse;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.stereotype.Component;
diff --git a/src/main/java/com/clubber/ClubberServer/global/infrastructure/outer/perspective/dto/AttributeScore.java b/Clubber-External/src/main/java/com/clubber/global/infrastructure/outer/perspective/dto/AttributeScore.java
similarity index 65%
rename from src/main/java/com/clubber/ClubberServer/global/infrastructure/outer/perspective/dto/AttributeScore.java
rename to Clubber-External/src/main/java/com/clubber/global/infrastructure/outer/perspective/dto/AttributeScore.java
index a60e340fb..6bce97d8c 100644
--- a/src/main/java/com/clubber/ClubberServer/global/infrastructure/outer/perspective/dto/AttributeScore.java
+++ b/Clubber-External/src/main/java/com/clubber/global/infrastructure/outer/perspective/dto/AttributeScore.java
@@ -1,4 +1,4 @@
-package com.clubber.ClubberServer.global.infrastructure.outer.perspective.dto;
+package com.clubber.global.infrastructure.outer.perspective.dto;
import java.util.List;
import lombok.Getter;
diff --git a/Clubber-External/src/main/java/com/clubber/global/infrastructure/outer/perspective/dto/AttributeType.java b/Clubber-External/src/main/java/com/clubber/global/infrastructure/outer/perspective/dto/AttributeType.java
new file mode 100644
index 000000000..e2e0bc209
--- /dev/null
+++ b/Clubber-External/src/main/java/com/clubber/global/infrastructure/outer/perspective/dto/AttributeType.java
@@ -0,0 +1,5 @@
+package com.clubber.global.infrastructure.outer.perspective.dto;
+
+public enum AttributeType {
+ TOXICITY
+}
diff --git a/src/main/java/com/clubber/ClubberServer/global/infrastructure/outer/perspective/dto/CreateTextAnalyzeRequest.java b/Clubber-External/src/main/java/com/clubber/global/infrastructure/outer/perspective/dto/CreateTextAnalyzeRequest.java
similarity index 85%
rename from src/main/java/com/clubber/ClubberServer/global/infrastructure/outer/perspective/dto/CreateTextAnalyzeRequest.java
rename to Clubber-External/src/main/java/com/clubber/global/infrastructure/outer/perspective/dto/CreateTextAnalyzeRequest.java
index 3bed527cc..d4595b9f3 100644
--- a/src/main/java/com/clubber/ClubberServer/global/infrastructure/outer/perspective/dto/CreateTextAnalyzeRequest.java
+++ b/Clubber-External/src/main/java/com/clubber/global/infrastructure/outer/perspective/dto/CreateTextAnalyzeRequest.java
@@ -1,4 +1,4 @@
-package com.clubber.ClubberServer.global.infrastructure.outer.perspective.dto;
+package com.clubber.global.infrastructure.outer.perspective.dto;
import java.util.List;
import java.util.Map;
diff --git a/src/main/java/com/clubber/ClubberServer/global/infrastructure/outer/perspective/dto/CreateTextAnalyzeResponse.java b/Clubber-External/src/main/java/com/clubber/global/infrastructure/outer/perspective/dto/CreateTextAnalyzeResponse.java
similarity index 69%
rename from src/main/java/com/clubber/ClubberServer/global/infrastructure/outer/perspective/dto/CreateTextAnalyzeResponse.java
rename to Clubber-External/src/main/java/com/clubber/global/infrastructure/outer/perspective/dto/CreateTextAnalyzeResponse.java
index 45e9c4f8b..504fb6fa4 100644
--- a/src/main/java/com/clubber/ClubberServer/global/infrastructure/outer/perspective/dto/CreateTextAnalyzeResponse.java
+++ b/Clubber-External/src/main/java/com/clubber/global/infrastructure/outer/perspective/dto/CreateTextAnalyzeResponse.java
@@ -1,4 +1,4 @@
-package com.clubber.ClubberServer.global.infrastructure.outer.perspective.dto;
+package com.clubber.global.infrastructure.outer.perspective.dto;
import java.util.List;
import java.util.Map;
diff --git a/src/main/java/com/clubber/ClubberServer/global/infrastructure/outer/perspective/dto/RequestedAttribute.java b/Clubber-External/src/main/java/com/clubber/global/infrastructure/outer/perspective/dto/RequestedAttribute.java
similarity index 64%
rename from src/main/java/com/clubber/ClubberServer/global/infrastructure/outer/perspective/dto/RequestedAttribute.java
rename to Clubber-External/src/main/java/com/clubber/global/infrastructure/outer/perspective/dto/RequestedAttribute.java
index 2a3b80564..c178b61f3 100644
--- a/src/main/java/com/clubber/ClubberServer/global/infrastructure/outer/perspective/dto/RequestedAttribute.java
+++ b/Clubber-External/src/main/java/com/clubber/global/infrastructure/outer/perspective/dto/RequestedAttribute.java
@@ -1,4 +1,4 @@
-package com.clubber.ClubberServer.global.infrastructure.outer.perspective.dto;
+package com.clubber.global.infrastructure.outer.perspective.dto;
import lombok.AllArgsConstructor;
import lombok.Getter;
diff --git a/src/main/java/com/clubber/ClubberServer/global/infrastructure/outer/perspective/dto/Score.java b/Clubber-External/src/main/java/com/clubber/global/infrastructure/outer/perspective/dto/Score.java
similarity index 66%
rename from src/main/java/com/clubber/ClubberServer/global/infrastructure/outer/perspective/dto/Score.java
rename to Clubber-External/src/main/java/com/clubber/global/infrastructure/outer/perspective/dto/Score.java
index 23b8220bb..e1788a680 100644
--- a/src/main/java/com/clubber/ClubberServer/global/infrastructure/outer/perspective/dto/Score.java
+++ b/Clubber-External/src/main/java/com/clubber/global/infrastructure/outer/perspective/dto/Score.java
@@ -1,4 +1,4 @@
-package com.clubber.ClubberServer.global.infrastructure.outer.perspective.dto;
+package com.clubber.global.infrastructure.outer.perspective.dto;
import lombok.AllArgsConstructor;
import lombok.Getter;
diff --git a/Clubber-External/src/main/java/com/clubber/global/infrastructure/outer/perspective/dto/ScoreType.java b/Clubber-External/src/main/java/com/clubber/global/infrastructure/outer/perspective/dto/ScoreType.java
new file mode 100644
index 000000000..0c90d6aa7
--- /dev/null
+++ b/Clubber-External/src/main/java/com/clubber/global/infrastructure/outer/perspective/dto/ScoreType.java
@@ -0,0 +1,5 @@
+package com.clubber.global.infrastructure.outer.perspective.dto;
+
+public enum ScoreType {
+ PROBABILITY
+}
diff --git a/src/main/java/com/clubber/ClubberServer/global/infrastructure/outer/perspective/dto/SpanScore.java b/Clubber-External/src/main/java/com/clubber/global/infrastructure/outer/perspective/dto/SpanScore.java
similarity index 60%
rename from src/main/java/com/clubber/ClubberServer/global/infrastructure/outer/perspective/dto/SpanScore.java
rename to Clubber-External/src/main/java/com/clubber/global/infrastructure/outer/perspective/dto/SpanScore.java
index 84db745cc..a7577cdc2 100644
--- a/src/main/java/com/clubber/ClubberServer/global/infrastructure/outer/perspective/dto/SpanScore.java
+++ b/Clubber-External/src/main/java/com/clubber/global/infrastructure/outer/perspective/dto/SpanScore.java
@@ -1,4 +1,4 @@
-package com.clubber.ClubberServer.global.infrastructure.outer.perspective.dto;
+package com.clubber.global.infrastructure.outer.perspective.dto;
import lombok.Getter;
diff --git a/src/main/java/com/clubber/ClubberServer/global/infrastructure/outer/perspective/dto/TextDto.java b/Clubber-External/src/main/java/com/clubber/global/infrastructure/outer/perspective/dto/TextDto.java
similarity index 77%
rename from src/main/java/com/clubber/ClubberServer/global/infrastructure/outer/perspective/dto/TextDto.java
rename to Clubber-External/src/main/java/com/clubber/global/infrastructure/outer/perspective/dto/TextDto.java
index 31990d754..64baff1de 100644
--- a/src/main/java/com/clubber/ClubberServer/global/infrastructure/outer/perspective/dto/TextDto.java
+++ b/Clubber-External/src/main/java/com/clubber/global/infrastructure/outer/perspective/dto/TextDto.java
@@ -1,4 +1,4 @@
-package com.clubber.ClubberServer.global.infrastructure.outer.perspective.dto;
+package com.clubber.global.infrastructure.outer.perspective.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
diff --git a/src/main/java/com/clubber/ClubberServer/global/jwt/JwtTokenUtil.java b/Clubber-External/src/main/java/com/clubber/global/jwt/JwtTokenUtil.java
similarity index 86%
rename from src/main/java/com/clubber/ClubberServer/global/jwt/JwtTokenUtil.java
rename to Clubber-External/src/main/java/com/clubber/global/jwt/JwtTokenUtil.java
index 836963ee1..7b08c5b30 100644
--- a/src/main/java/com/clubber/ClubberServer/global/jwt/JwtTokenUtil.java
+++ b/Clubber-External/src/main/java/com/clubber/global/jwt/JwtTokenUtil.java
@@ -1,11 +1,11 @@
-package com.clubber.ClubberServer.global.jwt;
-
-import com.clubber.ClubberServer.domain.user.domain.AccountRole;
-import com.clubber.ClubberServer.domain.user.exception.InvalidTokenException;
-import com.clubber.ClubberServer.domain.user.exception.RefreshTokenExpiredException;
-import com.clubber.ClubberServer.domain.user.exception.TokenExpiredException;
-import com.clubber.ClubberServer.global.jwt.vo.AccessTokenInfo;
-import com.clubber.ClubberServer.global.properties.JwtProperties;
+package com.clubber.global.jwt;
+
+import com.clubber.domain.domains.user.domain.AccountRole;
+import com.clubber.domain.domains.user.exception.InvalidTokenException;
+import com.clubber.domain.domains.user.exception.RefreshTokenExpiredException;
+import com.clubber.domain.domains.user.exception.TokenExpiredException;
+import com.clubber.global.jwt.vo.AccessTokenInfo;
+import com.clubber.global.properties.JwtProperties;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.ExpiredJwtException;
import io.jsonwebtoken.Jws;
@@ -18,7 +18,7 @@
import java.security.Key;
import java.util.Date;
-import static com.clubber.ClubberServer.global.common.consts.ClubberStatic.*;
+import static com.clubber.common.consts.ClubberStatic.*;
@Component
@RequiredArgsConstructor
diff --git a/src/main/java/com/clubber/ClubberServer/global/jwt/vo/AccessTokenInfo.java b/Clubber-External/src/main/java/com/clubber/global/jwt/vo/AccessTokenInfo.java
similarity index 65%
rename from src/main/java/com/clubber/ClubberServer/global/jwt/vo/AccessTokenInfo.java
rename to Clubber-External/src/main/java/com/clubber/global/jwt/vo/AccessTokenInfo.java
index 14bb47621..2060f0219 100644
--- a/src/main/java/com/clubber/ClubberServer/global/jwt/vo/AccessTokenInfo.java
+++ b/Clubber-External/src/main/java/com/clubber/global/jwt/vo/AccessTokenInfo.java
@@ -1,4 +1,4 @@
-package com.clubber.ClubberServer.global.jwt.vo;
+package com.clubber.global.jwt.vo;
import lombok.Builder;
diff --git a/src/main/java/com/clubber/ClubberServer/global/jwt/vo/TokenVO.java b/Clubber-External/src/main/java/com/clubber/global/jwt/vo/TokenVO.java
similarity index 58%
rename from src/main/java/com/clubber/ClubberServer/global/jwt/vo/TokenVO.java
rename to Clubber-External/src/main/java/com/clubber/global/jwt/vo/TokenVO.java
index f99b224ef..e07e0188d 100644
--- a/src/main/java/com/clubber/ClubberServer/global/jwt/vo/TokenVO.java
+++ b/Clubber-External/src/main/java/com/clubber/global/jwt/vo/TokenVO.java
@@ -1,4 +1,4 @@
-package com.clubber.ClubberServer.global.jwt.vo;
+package com.clubber.global.jwt.vo;
public record TokenVO(String accessToken, String refreshToken) {
}
diff --git a/src/main/java/com/clubber/ClubberServer/global/properties/JwtProperties.java b/Clubber-External/src/main/java/com/clubber/global/properties/JwtProperties.java
similarity index 86%
rename from src/main/java/com/clubber/ClubberServer/global/properties/JwtProperties.java
rename to Clubber-External/src/main/java/com/clubber/global/properties/JwtProperties.java
index 3686f7b77..1c835da82 100644
--- a/src/main/java/com/clubber/ClubberServer/global/properties/JwtProperties.java
+++ b/Clubber-External/src/main/java/com/clubber/global/properties/JwtProperties.java
@@ -1,4 +1,4 @@
-package com.clubber.ClubberServer.global.properties;
+package com.clubber.global.properties;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
diff --git a/src/main/java/com/clubber/ClubberServer/global/properties/KakaoProperties.java b/Clubber-External/src/main/java/com/clubber/global/properties/KakaoProperties.java
similarity index 86%
rename from src/main/java/com/clubber/ClubberServer/global/properties/KakaoProperties.java
rename to Clubber-External/src/main/java/com/clubber/global/properties/KakaoProperties.java
index 21df01432..35df711ac 100644
--- a/src/main/java/com/clubber/ClubberServer/global/properties/KakaoProperties.java
+++ b/Clubber-External/src/main/java/com/clubber/global/properties/KakaoProperties.java
@@ -1,4 +1,4 @@
-package com.clubber.ClubberServer.global.properties;
+package com.clubber.global.properties;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
diff --git a/src/main/java/com/clubber/ClubberServer/global/properties/MailProperties.java b/Clubber-External/src/main/java/com/clubber/global/properties/MailProperties.java
similarity index 86%
rename from src/main/java/com/clubber/ClubberServer/global/properties/MailProperties.java
rename to Clubber-External/src/main/java/com/clubber/global/properties/MailProperties.java
index 3f8d487b1..576b6e0e4 100644
--- a/src/main/java/com/clubber/ClubberServer/global/properties/MailProperties.java
+++ b/Clubber-External/src/main/java/com/clubber/global/properties/MailProperties.java
@@ -1,4 +1,4 @@
-package com.clubber.ClubberServer.global.properties;
+package com.clubber.global.properties;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
diff --git a/src/main/java/com/clubber/ClubberServer/global/util/ImageUtil.java b/Clubber-External/src/main/java/com/clubber/global/util/ImageUtil.java
similarity index 60%
rename from src/main/java/com/clubber/ClubberServer/global/util/ImageUtil.java
rename to Clubber-External/src/main/java/com/clubber/global/util/ImageUtil.java
index cf3736f5e..efde035ae 100644
--- a/src/main/java/com/clubber/ClubberServer/global/util/ImageUtil.java
+++ b/Clubber-External/src/main/java/com/clubber/global/util/ImageUtil.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.global.util;
+package com.clubber.global.util;
-import static com.clubber.ClubberServer.global.common.consts.ClubberStatic.IMAGE_SERVER;
+import static com.clubber.common.consts.ClubberStatic.IMAGE_SERVER;
public class ImageUtil {
diff --git a/src/main/java/com/clubber/ClubberServer/global/util/RandomAuthCodeUtil.java b/Clubber-External/src/main/java/com/clubber/global/util/RandomAuthCodeUtil.java
similarity index 91%
rename from src/main/java/com/clubber/ClubberServer/global/util/RandomAuthCodeUtil.java
rename to Clubber-External/src/main/java/com/clubber/global/util/RandomAuthCodeUtil.java
index ca36834ef..cd20f80df 100644
--- a/src/main/java/com/clubber/ClubberServer/global/util/RandomAuthCodeUtil.java
+++ b/Clubber-External/src/main/java/com/clubber/global/util/RandomAuthCodeUtil.java
@@ -1,4 +1,4 @@
-package com.clubber.ClubberServer.global.util;
+package com.clubber.global.util;
import java.security.SecureRandom;
diff --git a/src/main/java/com/clubber/ClubberServer/global/util/RandomAuthStringGeneratorUtil.java b/Clubber-External/src/main/java/com/clubber/global/util/RandomAuthStringGeneratorUtil.java
similarity index 93%
rename from src/main/java/com/clubber/ClubberServer/global/util/RandomAuthStringGeneratorUtil.java
rename to Clubber-External/src/main/java/com/clubber/global/util/RandomAuthStringGeneratorUtil.java
index 895edffaa..1305dd773 100644
--- a/src/main/java/com/clubber/ClubberServer/global/util/RandomAuthStringGeneratorUtil.java
+++ b/Clubber-External/src/main/java/com/clubber/global/util/RandomAuthStringGeneratorUtil.java
@@ -1,4 +1,4 @@
-package com.clubber.ClubberServer.global.util;
+package com.clubber.global.util;
import java.security.SecureRandom;
import java.util.stream.Collectors;
diff --git a/src/main/java/com/clubber/ClubberServer/global/util/SliceUtil.java b/Clubber-External/src/main/java/com/clubber/global/util/SliceUtil.java
similarity index 86%
rename from src/main/java/com/clubber/ClubberServer/global/util/SliceUtil.java
rename to Clubber-External/src/main/java/com/clubber/global/util/SliceUtil.java
index c67108840..1ac342a19 100644
--- a/src/main/java/com/clubber/ClubberServer/global/util/SliceUtil.java
+++ b/Clubber-External/src/main/java/com/clubber/global/util/SliceUtil.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.global.util;
+package com.clubber.global.util;
-import com.clubber.ClubberServer.global.common.slice.SliceResponse;
+import com.clubber.global.common.slice.SliceResponse;
import java.util.List;
import org.springframework.data.domain.Pageable;
diff --git a/src/main/java/com/clubber/ClubberServer/global/validator/enums/Enum.java b/Clubber-External/src/main/java/com/clubber/global/validator/enums/Enum.java
similarity index 90%
rename from src/main/java/com/clubber/ClubberServer/global/validator/enums/Enum.java
rename to Clubber-External/src/main/java/com/clubber/global/validator/enums/Enum.java
index 539beca33..de4581185 100644
--- a/src/main/java/com/clubber/ClubberServer/global/validator/enums/Enum.java
+++ b/Clubber-External/src/main/java/com/clubber/global/validator/enums/Enum.java
@@ -1,4 +1,4 @@
-package com.clubber.ClubberServer.global.validator.enums;
+package com.clubber.global.validator.enums;
import jakarta.validation.Constraint;
import jakarta.validation.Payload;
diff --git a/src/main/java/com/clubber/ClubberServer/global/validator/enums/EnumValidator.java b/Clubber-External/src/main/java/com/clubber/global/validator/enums/EnumValidator.java
similarity index 88%
rename from src/main/java/com/clubber/ClubberServer/global/validator/enums/EnumValidator.java
rename to Clubber-External/src/main/java/com/clubber/global/validator/enums/EnumValidator.java
index 1e2ba1ed5..ac95a154b 100644
--- a/src/main/java/com/clubber/ClubberServer/global/validator/enums/EnumValidator.java
+++ b/Clubber-External/src/main/java/com/clubber/global/validator/enums/EnumValidator.java
@@ -1,4 +1,4 @@
-package com.clubber.ClubberServer.global.validator.enums;
+package com.clubber.global.validator.enums;
import jakarta.validation.ConstraintValidator;
import jakarta.validation.ConstraintValidatorContext;
diff --git a/src/main/java/com/clubber/ClubberServer/global/validator/unique/Unique.java b/Clubber-External/src/main/java/com/clubber/global/validator/unique/Unique.java
similarity index 90%
rename from src/main/java/com/clubber/ClubberServer/global/validator/unique/Unique.java
rename to Clubber-External/src/main/java/com/clubber/global/validator/unique/Unique.java
index 66c97889a..ac6571dec 100644
--- a/src/main/java/com/clubber/ClubberServer/global/validator/unique/Unique.java
+++ b/Clubber-External/src/main/java/com/clubber/global/validator/unique/Unique.java
@@ -1,4 +1,4 @@
-package com.clubber.ClubberServer.global.validator.unique;
+package com.clubber.global.validator.unique;
import jakarta.validation.Constraint;
import jakarta.validation.Payload;
diff --git a/src/main/java/com/clubber/ClubberServer/global/validator/unique/UniqueConstraintValidator.java b/Clubber-External/src/main/java/com/clubber/global/validator/unique/UniqueConstraintValidator.java
similarity index 77%
rename from src/main/java/com/clubber/ClubberServer/global/validator/unique/UniqueConstraintValidator.java
rename to Clubber-External/src/main/java/com/clubber/global/validator/unique/UniqueConstraintValidator.java
index 217f58cad..af279aa99 100644
--- a/src/main/java/com/clubber/ClubberServer/global/validator/unique/UniqueConstraintValidator.java
+++ b/Clubber-External/src/main/java/com/clubber/global/validator/unique/UniqueConstraintValidator.java
@@ -1,6 +1,6 @@
-package com.clubber.ClubberServer.global.validator.unique;
+package com.clubber.global.validator.unique;
-import com.clubber.ClubberServer.domain.review.domain.Keyword;
+import com.clubber.domain.domains.review.domain.Keyword;
import jakarta.validation.ConstraintValidator;
import jakarta.validation.ConstraintValidatorContext;
import java.util.HashSet;
diff --git a/src/main/resources/console-appender.xml b/Clubber-External/src/main/resources/console-appender.xml
similarity index 100%
rename from src/main/resources/console-appender.xml
rename to Clubber-External/src/main/resources/console-appender.xml
diff --git a/src/main/resources/file-info-appender.xml b/Clubber-External/src/main/resources/file-info-appender.xml
similarity index 100%
rename from src/main/resources/file-info-appender.xml
rename to Clubber-External/src/main/resources/file-info-appender.xml
diff --git a/src/main/resources/logback-spring.xml b/Clubber-External/src/main/resources/logback-spring.xml
similarity index 100%
rename from src/main/resources/logback-spring.xml
rename to Clubber-External/src/main/resources/logback-spring.xml
diff --git a/src/main/resources/sql/data.sql b/Clubber-External/src/main/resources/sql/data.sql
similarity index 100%
rename from src/main/resources/sql/data.sql
rename to Clubber-External/src/main/resources/sql/data.sql
diff --git a/src/test/java/com/clubber/ClubberServer/ClubberServerApplicationTests.java b/Clubber-External/src/test/java/com/clubber/ClubberServer/ClubberServerApplicationTests.java
similarity index 100%
rename from src/test/java/com/clubber/ClubberServer/ClubberServerApplicationTests.java
rename to Clubber-External/src/test/java/com/clubber/ClubberServer/ClubberServerApplicationTests.java
diff --git a/src/test/java/com/clubber/ClubberServer/integration/domain/admin/controller/AdminControllerTest.java b/Clubber-External/src/test/java/com/clubber/ClubberServer/integration/domain/admin/controller/AdminControllerTest.java
similarity index 100%
rename from src/test/java/com/clubber/ClubberServer/integration/domain/admin/controller/AdminControllerTest.java
rename to Clubber-External/src/test/java/com/clubber/ClubberServer/integration/domain/admin/controller/AdminControllerTest.java
diff --git a/Clubber-External/src/test/java/com/clubber/ClubberServer/integration/domain/admin/controller/AdminReviewControllerTest.java b/Clubber-External/src/test/java/com/clubber/ClubberServer/integration/domain/admin/controller/AdminReviewControllerTest.java
new file mode 100644
index 000000000..75dcba108
--- /dev/null
+++ b/Clubber-External/src/test/java/com/clubber/ClubberServer/integration/domain/admin/controller/AdminReviewControllerTest.java
@@ -0,0 +1,59 @@
+//package com.clubber.ClubberServer.integration.domain.admin.controller;
+//
+//import com.clubber.ClubberServer.integration.util.WithMockCustomUser;
+//import com.fasterxml.jackson.databind.ObjectMapper;
+//import org.junit.jupiter.api.DisplayName;
+//import org.junit.jupiter.api.Test;
+//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.test.context.ActiveProfiles;
+//import org.springframework.test.web.servlet.MockMvc;
+//
+//import static com.clubber.ClubberServer.integration.util.fixture.AdminReviewFixture.UPDATE_ADMINS_EMPTY_REVIEWS;
+//import static com.clubber.ClubberServer.integration.util.fixture.AdminReviewFixture.UPDATE_ADMINS_OVER_MAX_REVIEWS;
+//import static org.hamcrest.Matchers.containsString;
+//import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.patch;
+//import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
+//import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
+//
+//@SpringBootTest
+//@AutoConfigureMockMvc
+//@ActiveProfiles("local")
+//public class AdminReviewControllerTest {
+//
+// /**
+// * TODO : Security 의존성 걷어내고 WebMvcTest으로 리팩토링
+// */
+//
+// @Autowired
+// private MockMvc mockMvc;
+//
+// @Autowired
+// private ObjectMapper objectMapper;
+//
+// @DisplayName("리뷰 승인/거절 목록이 빈 리스트라면 예외가 발생한다.")
+// @WithMockCustomUser
+// @Test
+// void updateEmptyReviewStatus() throws Exception {
+// String updateEmptyReviewStatus = objectMapper.writeValueAsString(UPDATE_ADMINS_EMPTY_REVIEWS);
+// mockMvc.perform(patch("/api/v1/admins/reviews/decision")
+// .contentType(MediaType.APPLICATION_JSON)
+// .content(updateEmptyReviewStatus))
+// .andExpect(status().isBadRequest())
+// .andExpect(jsonPath("$.reason", containsString("1개 이상 수정해야합니다")));
+// }
+//
+// @DisplayName("리뷰 승인/거절 목록이 10개 초과일 경우 예외가 발생한다..")
+// @WithMockCustomUser
+// @Test
+// void updateReviewOverMaxSize() throws Exception {
+// String updateEmptyReviewStatus = objectMapper.writeValueAsString(UPDATE_ADMINS_OVER_MAX_REVIEWS);
+// mockMvc.perform(patch("/api/v1/admins/reviews/decision")
+// .contentType(MediaType.APPLICATION_JSON)
+// .content(updateEmptyReviewStatus))
+// .andExpect(status().isBadRequest())
+// .andExpect(jsonPath("$.reason", containsString("10개 이하로 수정해야합니다")));
+// }
+//}
diff --git a/src/test/java/com/clubber/ClubberServer/integration/domain/admin/service/AdminAccountServiceTest.java b/Clubber-External/src/test/java/com/clubber/ClubberServer/integration/domain/admin/service/AdminAccountServiceTest.java
similarity index 83%
rename from src/test/java/com/clubber/ClubberServer/integration/domain/admin/service/AdminAccountServiceTest.java
rename to Clubber-External/src/test/java/com/clubber/ClubberServer/integration/domain/admin/service/AdminAccountServiceTest.java
index ad1c1d746..e1cc9e75e 100644
--- a/src/test/java/com/clubber/ClubberServer/integration/domain/admin/service/AdminAccountServiceTest.java
+++ b/Clubber-External/src/test/java/com/clubber/ClubberServer/integration/domain/admin/service/AdminAccountServiceTest.java
@@ -1,28 +1,26 @@
package com.clubber.ClubberServer.integration.domain.admin.service;
-import com.clubber.ClubberServer.domain.admin.domain.Admin;
-import com.clubber.ClubberServer.domain.admin.domain.Contact;
-import com.clubber.ClubberServer.domain.admin.dto.GetAdminUsernameCheckDuplicateResponse;
-import com.clubber.ClubberServer.domain.admin.dto.GetAdminsProfileResponse;
-import com.clubber.ClubberServer.domain.admin.dto.UpdateAdminContactRequest;
-import com.clubber.ClubberServer.domain.admin.dto.UpdateAdminsPasswordRequest;
-import com.clubber.ClubberServer.domain.admin.exception.AdminEqualsPreviousPasswordExcpetion;
-import com.clubber.ClubberServer.domain.admin.exception.AdminInvalidCurrentPasswordException;
-import com.clubber.ClubberServer.domain.admin.repository.AdminRepository;
-import com.clubber.ClubberServer.domain.admin.service.AdminAccountService;
-import com.clubber.ClubberServer.domain.admin.implement.AdminReader;
-import com.clubber.ClubberServer.domain.favorite.domain.Favorite;
-import com.clubber.ClubberServer.domain.favorite.repository.FavoriteRepository;
-import com.clubber.ClubberServer.domain.recruit.domain.Recruit;
-import com.clubber.ClubberServer.domain.recruit.repository.RecruitRepository;
-import com.clubber.ClubberServer.domain.review.domain.ApprovedStatus;
-import com.clubber.ClubberServer.domain.review.domain.Review;
-import com.clubber.ClubberServer.domain.review.repository.ReviewRepository;
-import com.clubber.ClubberServer.domain.user.domain.AccountState;
-import com.clubber.ClubberServer.global.config.security.AuthDetails;
-import com.clubber.ClubberServer.global.config.security.SecurityUtils;
import com.clubber.ClubberServer.integration.util.WithMockCustomUser;
import com.clubber.ClubberServer.integration.util.fixture.AdminFixture;
+import com.clubber.domain.admin.dto.GetAdminUsernameCheckDuplicateResponse;
+import com.clubber.domain.admin.dto.GetAdminsProfileResponse;
+import com.clubber.domain.admin.dto.UpdateAdminContactRequest;
+import com.clubber.domain.admin.dto.UpdateAdminsPasswordRequest;
+import com.clubber.domain.admin.implement.AdminReader;
+import com.clubber.domain.admin.service.AdminAccountService;
+import com.clubber.domain.domains.admin.domain.Admin;
+import com.clubber.domain.domains.admin.domain.Contact;
+import com.clubber.domain.domains.admin.exception.AdminEqualsPreviousPasswordExcpetion;
+import com.clubber.domain.domains.admin.exception.AdminInvalidCurrentPasswordException;
+import com.clubber.domain.domains.admin.repository.AdminRepository;
+import com.clubber.domain.domains.favorite.domain.Favorite;
+import com.clubber.domain.domains.review.repository.ReviewRepository;
+import com.clubber.domain.domains.user.domain.AccountState;
+import com.clubber.domain.favorite.repository.FavoriteRepository;
+import com.clubber.domain.recruit.domain.Recruit;
+import com.clubber.domain.recruit.repository.RecruitRepository;
+import com.clubber.global.config.security.AuthDetails;
+import com.clubber.global.config.security.SecurityUtils;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
@@ -223,22 +221,22 @@ private void createSecurityContext(Admin admin) {
// );
// }
- /**
- * TODO : 비동기 soft-withDraw 추후 테스트 코드 변경
- */
- @DisplayName("관리자 회원탈퇴를 수행시 해당 동아리 리뷰가 삭제된다.")
- @WithMockCustomUser
- @Test
- void withDrawAdminDeleteReview() {
- adminAccountService.withDraw();
- Admin admin = adminRepository.findById(SecurityUtils.getCurrentUserId()).get();
-
- List deletedReviews = reviewRepository.findAllByClub(admin.getClub());
-
- for (Review deletedReview : deletedReviews) {
- assertThat(deletedReview.getApprovedStatus()).isEqualTo(ApprovedStatus.DELETED);
- }
- }
+// /**
+// * TODO : 비동기 soft-withDraw 추후 테스트 코드 변경
+// */
+// @DisplayName("관리자 회원탈퇴를 수행시 해당 동아리 리뷰가 삭제된다.")
+// @WithMockCustomUser
+// @Test
+// void withDrawAdminDeleteReview() {
+// adminAccountService.withDraw();
+// Admin admin = adminRepository.findById(SecurityUtils.getCurrentUserId()).get();
+//
+// List deletedReviews = reviewRepository.findAllByClub(admin.getClub());
+//
+// for (Review deletedReview : deletedReviews) {
+// assertThat(deletedReview.getDeletionStatus()).isEqualTo(DeletionStatus.DELETED);
+// }
+// }
@DisplayName("관리자 회원탈퇴를 수행시 해당 동아리 즐겨찾기가 모두 삭제된다.")
@WithMockCustomUser
diff --git a/src/test/java/com/clubber/ClubberServer/integration/domain/admin/service/AdminAuthServiceTest.java b/Clubber-External/src/test/java/com/clubber/ClubberServer/integration/domain/admin/service/AdminAuthServiceTest.java
similarity index 84%
rename from src/test/java/com/clubber/ClubberServer/integration/domain/admin/service/AdminAuthServiceTest.java
rename to Clubber-External/src/test/java/com/clubber/ClubberServer/integration/domain/admin/service/AdminAuthServiceTest.java
index 9aaa33f1f..10d87547d 100644
--- a/src/test/java/com/clubber/ClubberServer/integration/domain/admin/service/AdminAuthServiceTest.java
+++ b/Clubber-External/src/test/java/com/clubber/ClubberServer/integration/domain/admin/service/AdminAuthServiceTest.java
@@ -1,9 +1,9 @@
package com.clubber.ClubberServer.integration.domain.admin.service;
-import com.clubber.ClubberServer.domain.admin.domain.Admin;
-import com.clubber.ClubberServer.domain.admin.dto.CreateAdminsLoginRequest;
-import com.clubber.ClubberServer.domain.admin.repository.AdminRepository;
-import com.clubber.ClubberServer.domain.admin.service.AdminAuthService;
+import com.clubber.domain.domains.admin.domain.Admin;
+import com.clubber.domain.admin.dto.CreateAdminsLoginRequest;
+import com.clubber.domain.domains.admin.repository.AdminRepository;
+import com.clubber.domain.admin.service.AdminAuthService;
import com.clubber.ClubberServer.integration.util.fixture.AdminFixture;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
diff --git a/src/test/java/com/clubber/ClubberServer/integration/domain/admin/service/AdminClubServiceTest.java b/Clubber-External/src/test/java/com/clubber/ClubberServer/integration/domain/admin/service/AdminClubServiceTest.java
similarity index 86%
rename from src/test/java/com/clubber/ClubberServer/integration/domain/admin/service/AdminClubServiceTest.java
rename to Clubber-External/src/test/java/com/clubber/ClubberServer/integration/domain/admin/service/AdminClubServiceTest.java
index fdb3e6ac9..a2e26629e 100644
--- a/src/test/java/com/clubber/ClubberServer/integration/domain/admin/service/AdminClubServiceTest.java
+++ b/Clubber-External/src/test/java/com/clubber/ClubberServer/integration/domain/admin/service/AdminClubServiceTest.java
@@ -1,15 +1,15 @@
package com.clubber.ClubberServer.integration.domain.admin.service;
-import com.clubber.ClubberServer.domain.admin.domain.Admin;
-import com.clubber.ClubberServer.domain.admin.dto.UpdateClubPageRequest;
-import com.clubber.ClubberServer.domain.admin.repository.AdminRepository;
-import com.clubber.ClubberServer.domain.admin.service.AdminClubService;
-import com.clubber.ClubberServer.domain.admin.implement.AdminReader;
-import com.clubber.ClubberServer.domain.club.domain.Club;
-import com.clubber.ClubberServer.domain.club.domain.ClubInfo;
-import com.clubber.ClubberServer.domain.club.repository.ClubInfoRepository;
-import com.clubber.ClubberServer.domain.club.repository.ClubRepository;
-import com.clubber.ClubberServer.global.config.security.AuthDetails;
+import com.clubber.domain.domains.admin.domain.Admin;
+import com.clubber.domain.admin.dto.UpdateClubPageRequest;
+import com.clubber.domain.domains.admin.repository.AdminRepository;
+import com.clubber.domain.admin.service.AdminClubService;
+import com.clubber.domain.admin.implement.AdminReader;
+import com.clubber.domain.domains.club.domain.Club;
+import com.clubber.domain.domains.club.domain.ClubInfo;
+import com.clubber.domain.domains.club.repository.ClubInfoRepository;
+import com.clubber.domain.domains.club.repository.ClubRepository;
+import com.clubber.global.config.security.AuthDetails;
import com.clubber.ClubberServer.integration.util.WithMockCustomUser;
import com.clubber.ClubberServer.integration.util.fixture.AdminFixture;
import com.clubber.ClubberServer.integration.util.fixture.ClubFixture;
@@ -23,7 +23,7 @@
import org.springframework.test.context.ActiveProfiles;
import org.springframework.transaction.annotation.Transactional;
-import static com.clubber.ClubberServer.global.common.consts.ClubberStatic.IMAGE_SERVER;
+import static com.clubber.common.consts.ClubberStatic.IMAGE_SERVER;
import static com.clubber.ClubberServer.integration.util.fixture.AdminFixture.IMAGE_KEY_WITH_IMAGE_SERVER_PAGE_REQUEST;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.assertAll;
diff --git a/src/test/java/com/clubber/ClubberServer/integration/domain/admin/service/AdminEmailAuthServiceTest.java b/Clubber-External/src/test/java/com/clubber/ClubberServer/integration/domain/admin/service/AdminEmailAuthServiceTest.java
similarity index 80%
rename from src/test/java/com/clubber/ClubberServer/integration/domain/admin/service/AdminEmailAuthServiceTest.java
rename to Clubber-External/src/test/java/com/clubber/ClubberServer/integration/domain/admin/service/AdminEmailAuthServiceTest.java
index a5030b2f6..886d375e5 100644
--- a/src/test/java/com/clubber/ClubberServer/integration/domain/admin/service/AdminEmailAuthServiceTest.java
+++ b/Clubber-External/src/test/java/com/clubber/ClubberServer/integration/domain/admin/service/AdminEmailAuthServiceTest.java
@@ -1,15 +1,15 @@
package com.clubber.ClubberServer.integration.domain.admin.service;
-import com.clubber.ClubberServer.domain.admin.domain.AdminPasswordFindAuth;
-import com.clubber.ClubberServer.domain.admin.domain.AdminSignupAuth;
-import com.clubber.ClubberServer.domain.admin.domain.AdminUsernameFindAuth;
-import com.clubber.ClubberServer.domain.admin.dto.CreateAdminSignupAuthVerifyRequest;
-import com.clubber.ClubberServer.domain.admin.dto.GetAdminUsernameFindRequest;
-import com.clubber.ClubberServer.domain.admin.dto.UpdateAdminPasswordFindAuthVerifyRequest;
-import com.clubber.ClubberServer.domain.admin.repository.AdminPasswordFindAuthRepository;
-import com.clubber.ClubberServer.domain.admin.repository.AdminSignupAuthRepository;
-import com.clubber.ClubberServer.domain.admin.repository.AdminUsernameFindAuthRepository;
-import com.clubber.ClubberServer.domain.admin.service.AdminEmailAuthService;
+import com.clubber.domain.domains.admin.domain.AdminPasswordFindAuth;
+import com.clubber.domain.domains.admin.domain.AdminSignupAuth;
+import com.clubber.domain.domains.admin.domain.AdminUsernameFindAuth;
+import com.clubber.domain.admin.dto.CreateAdminSignupAuthVerifyRequest;
+import com.clubber.domain.admin.dto.GetAdminUsernameFindRequest;
+import com.clubber.domain.admin.dto.UpdateAdminPasswordFindAuthVerifyRequest;
+import com.clubber.domain.domains.admin.repository.AdminPasswordFindAuthRepository;
+import com.clubber.domain.domains.admin.repository.AdminSignupAuthRepository;
+import com.clubber.domain.domains.admin.repository.AdminUsernameFindAuthRepository;
+import com.clubber.domain.admin.service.AdminEmailAuthService;
import com.clubber.ClubberServer.integration.util.fixture.AdminEmailAuthFixture;
import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.Test;
diff --git a/src/test/java/com/clubber/ClubberServer/integration/domain/calendar/service/CalendarAdminServiceTest.java b/Clubber-External/src/test/java/com/clubber/ClubberServer/integration/domain/calendar/service/CalendarAdminServiceTest.java
similarity index 86%
rename from src/test/java/com/clubber/ClubberServer/integration/domain/calendar/service/CalendarAdminServiceTest.java
rename to Clubber-External/src/test/java/com/clubber/ClubberServer/integration/domain/calendar/service/CalendarAdminServiceTest.java
index df48a7b84..528714e84 100644
--- a/src/test/java/com/clubber/ClubberServer/integration/domain/calendar/service/CalendarAdminServiceTest.java
+++ b/Clubber-External/src/test/java/com/clubber/ClubberServer/integration/domain/calendar/service/CalendarAdminServiceTest.java
@@ -1,16 +1,16 @@
package com.clubber.ClubberServer.integration.domain.calendar.service;
-import com.clubber.ClubberServer.domain.admin.domain.Admin;
-import com.clubber.ClubberServer.domain.admin.repository.AdminRepository;
-import com.clubber.ClubberServer.domain.calendar.dto.GetCalendarDuplicateRequest;
-import com.clubber.ClubberServer.domain.calendar.dto.GetCalendarDuplicateResponse;
-import com.clubber.ClubberServer.domain.calendar.domain.Calendar;
-import com.clubber.ClubberServer.domain.calendar.repository.CalendarRepository;
-import com.clubber.ClubberServer.domain.calendar.service.CalendarAdminService;
-import com.clubber.ClubberServer.domain.club.domain.Club;
-import com.clubber.ClubberServer.domain.club.repository.ClubRepository;
-import com.clubber.ClubberServer.domain.recruit.domain.RecruitType;
-import com.clubber.ClubberServer.global.config.security.AuthDetails;
+import com.clubber.domain.domains.admin.domain.Admin;
+import com.clubber.domain.domains.admin.repository.AdminRepository;
+import com.clubber.domain.calendar.dto.GetCalendarDuplicateRequest;
+import com.clubber.domain.calendar.dto.GetCalendarDuplicateResponse;
+import com.clubber.domain.calendar.domain.Calendar;
+import com.clubber.domain.calendar.repository.CalendarRepository;
+import com.clubber.domain.calendar.service.CalendarAdminService;
+import com.clubber.domain.domains.club.domain.Club;
+import com.clubber.domain.domains.club.repository.ClubRepository;
+import com.clubber.domain.recruit.domain.RecruitType;
+import com.clubber.global.config.security.AuthDetails;
import com.clubber.ClubberServer.integration.util.fixture.AdminFixture;
import com.clubber.ClubberServer.integration.util.fixture.CalendarFixture;
import com.clubber.ClubberServer.integration.util.fixture.ClubFixture;
diff --git a/src/test/java/com/clubber/ClubberServer/integration/domain/club/controller/ClubControllerTest.java b/Clubber-External/src/test/java/com/clubber/ClubberServer/integration/domain/club/controller/ClubControllerTest.java
similarity index 100%
rename from src/test/java/com/clubber/ClubberServer/integration/domain/club/controller/ClubControllerTest.java
rename to Clubber-External/src/test/java/com/clubber/ClubberServer/integration/domain/club/controller/ClubControllerTest.java
diff --git a/src/test/java/com/clubber/ClubberServer/integration/domain/club/service/ClubServiceTest.java b/Clubber-External/src/test/java/com/clubber/ClubberServer/integration/domain/club/service/ClubServiceTest.java
similarity index 83%
rename from src/test/java/com/clubber/ClubberServer/integration/domain/club/service/ClubServiceTest.java
rename to Clubber-External/src/test/java/com/clubber/ClubberServer/integration/domain/club/service/ClubServiceTest.java
index ec9f85b10..8c676a078 100644
--- a/src/test/java/com/clubber/ClubberServer/integration/domain/club/service/ClubServiceTest.java
+++ b/Clubber-External/src/test/java/com/clubber/ClubberServer/integration/domain/club/service/ClubServiceTest.java
@@ -2,13 +2,13 @@
import static org.assertj.core.api.Assertions.assertThat;
-import com.clubber.ClubberServer.domain.club.domain.Club;
-import com.clubber.ClubberServer.domain.club.domain.ClubType;
-import com.clubber.ClubberServer.domain.club.domain.Division;
-import com.clubber.ClubberServer.domain.club.dto.GetSummaryClubGroupResponse;
-import com.clubber.ClubberServer.domain.club.dto.GetSummaryClubResponse;
-import com.clubber.ClubberServer.domain.club.repository.ClubRepository;
-import com.clubber.ClubberServer.domain.club.service.ClubService;
+import com.clubber.domain.domains.club.domain.Club;
+import com.clubber.domain.domains.club.domain.ClubType;
+import com.clubber.domain.domains.club.domain.Division;
+import com.clubber.domain.club.dto.GetSummaryClubGroupResponse;
+import com.clubber.domain.club.dto.GetSummaryClubResponse;
+import com.clubber.domain.domains.club.repository.ClubRepository;
+import com.clubber.domain.club.service.ClubService;
import com.clubber.ClubberServer.integration.util.ServiceTest;
import java.util.Arrays;
import java.util.List;
diff --git a/src/test/java/com/clubber/ClubberServer/integration/domain/favorite/service/FavoriteServiceTest.java b/Clubber-External/src/test/java/com/clubber/ClubberServer/integration/domain/favorite/service/FavoriteServiceTest.java
similarity index 83%
rename from src/test/java/com/clubber/ClubberServer/integration/domain/favorite/service/FavoriteServiceTest.java
rename to Clubber-External/src/test/java/com/clubber/ClubberServer/integration/domain/favorite/service/FavoriteServiceTest.java
index 20b1f5cc8..bdc61f8b7 100644
--- a/src/test/java/com/clubber/ClubberServer/integration/domain/favorite/service/FavoriteServiceTest.java
+++ b/Clubber-External/src/test/java/com/clubber/ClubberServer/integration/domain/favorite/service/FavoriteServiceTest.java
@@ -1,14 +1,14 @@
package com.clubber.ClubberServer.integration.domain.favorite.service;
-import com.clubber.ClubberServer.domain.club.domain.Club;
-import com.clubber.ClubberServer.domain.club.repository.ClubRepository;
-import com.clubber.ClubberServer.domain.favorite.domain.Favorite;
-import com.clubber.ClubberServer.domain.favorite.exception.ClubAlreadyRegisterdFavoriteException;
-import com.clubber.ClubberServer.domain.favorite.repository.FavoriteRepository;
-import com.clubber.ClubberServer.domain.favorite.service.FavoriteService;
-import com.clubber.ClubberServer.domain.user.domain.User;
-import com.clubber.ClubberServer.domain.user.repository.UserRepository;
-import com.clubber.ClubberServer.global.config.security.AuthDetails;
+import com.clubber.domain.domains.club.domain.Club;
+import com.clubber.domain.domains.club.repository.ClubRepository;
+import com.clubber.domain.domains.favorite.domain.Favorite;
+import com.clubber.domain.domains.favorite.exception.ClubAlreadyRegisterdFavoriteException;
+import com.clubber.domain.favorite.repository.FavoriteRepository;
+import com.clubber.domain.favorite.service.FavoriteService;
+import com.clubber.domain.domains.user.domain.User;
+import com.clubber.domain.user.repository.UserRepository;
+import com.clubber.global.config.security.AuthDetails;
import com.clubber.ClubberServer.integration.util.fixture.ClubFixture;
import com.clubber.ClubberServer.integration.util.fixture.UserFixture;
import org.junit.jupiter.api.Test;
diff --git a/src/test/java/com/clubber/ClubberServer/integration/domain/owner/service/OwnerServiceTest.java b/Clubber-External/src/test/java/com/clubber/ClubberServer/integration/domain/owner/service/OwnerServiceTest.java
similarity index 70%
rename from src/test/java/com/clubber/ClubberServer/integration/domain/owner/service/OwnerServiceTest.java
rename to Clubber-External/src/test/java/com/clubber/ClubberServer/integration/domain/owner/service/OwnerServiceTest.java
index f204a47f3..63fe04c43 100644
--- a/src/test/java/com/clubber/ClubberServer/integration/domain/owner/service/OwnerServiceTest.java
+++ b/Clubber-External/src/test/java/com/clubber/ClubberServer/integration/domain/owner/service/OwnerServiceTest.java
@@ -1,21 +1,20 @@
package com.clubber.ClubberServer.integration.domain.owner.service;
-import com.clubber.ClubberServer.domain.admin.domain.Admin;
-import com.clubber.ClubberServer.domain.admin.domain.PendingAdminInfo;
-import com.clubber.ClubberServer.domain.admin.repository.AdminRepository;
-import com.clubber.ClubberServer.domain.admin.repository.PendingAdminInfoRepository;
-import com.clubber.ClubberServer.domain.club.domain.Club;
-import com.clubber.ClubberServer.domain.club.domain.ClubType;
-import com.clubber.ClubberServer.domain.club.repository.ClubRepository;
-import com.clubber.ClubberServer.domain.owner.service.OwnerService;
-import com.clubber.ClubberServer.domain.user.domain.AccountState;
+import com.clubber.domain.domains.admin.domain.Admin;
+import com.clubber.domain.domains.admin.domain.PendingAdminInfo;
+import com.clubber.domain.domains.admin.repository.AdminRepository;
+import com.clubber.domain.domains.admin.repository.PendingAdminInfoRepository;
+import com.clubber.domain.domains.club.domain.Club;
+import com.clubber.domain.domains.club.domain.ClubType;
+import com.clubber.domain.domains.club.repository.ClubRepository;
+import com.clubber.domain.owner.service.OwnerService;
+import com.clubber.domain.domains.user.domain.AccountState;
import com.clubber.ClubberServer.integration.util.fixture.AdminFixture;
import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.ActiveProfiles;
-import org.springframework.transaction.annotation.Transactional;
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
//@Transactional
diff --git a/src/test/java/com/clubber/ClubberServer/integration/domain/recruit/controller/RecruitCalendarControllerTest.java b/Clubber-External/src/test/java/com/clubber/ClubberServer/integration/domain/recruit/controller/RecruitCalendarControllerTest.java
similarity index 100%
rename from src/test/java/com/clubber/ClubberServer/integration/domain/recruit/controller/RecruitCalendarControllerTest.java
rename to Clubber-External/src/test/java/com/clubber/ClubberServer/integration/domain/recruit/controller/RecruitCalendarControllerTest.java
diff --git a/src/test/java/com/clubber/ClubberServer/integration/domain/recruit/controller/RecruitControllerTest.java b/Clubber-External/src/test/java/com/clubber/ClubberServer/integration/domain/recruit/controller/RecruitControllerTest.java
similarity index 100%
rename from src/test/java/com/clubber/ClubberServer/integration/domain/recruit/controller/RecruitControllerTest.java
rename to Clubber-External/src/test/java/com/clubber/ClubberServer/integration/domain/recruit/controller/RecruitControllerTest.java
diff --git a/src/test/java/com/clubber/ClubberServer/integration/domain/recruit/service/RecruitLinkedCalendarServiceTest.java b/Clubber-External/src/test/java/com/clubber/ClubberServer/integration/domain/recruit/service/RecruitLinkedCalendarServiceTest.java
similarity index 85%
rename from src/test/java/com/clubber/ClubberServer/integration/domain/recruit/service/RecruitLinkedCalendarServiceTest.java
rename to Clubber-External/src/test/java/com/clubber/ClubberServer/integration/domain/recruit/service/RecruitLinkedCalendarServiceTest.java
index 3e4905609..1b2a70ba4 100644
--- a/src/test/java/com/clubber/ClubberServer/integration/domain/recruit/service/RecruitLinkedCalendarServiceTest.java
+++ b/Clubber-External/src/test/java/com/clubber/ClubberServer/integration/domain/recruit/service/RecruitLinkedCalendarServiceTest.java
@@ -1,16 +1,16 @@
package com.clubber.ClubberServer.integration.domain.recruit.service;
-import com.clubber.ClubberServer.domain.admin.domain.Admin;
-import com.clubber.ClubberServer.domain.admin.repository.AdminRepository;
-import com.clubber.ClubberServer.domain.calendar.domain.Calendar;
-import com.clubber.ClubberServer.domain.calendar.repository.CalendarRepository;
-import com.clubber.ClubberServer.domain.club.domain.Club;
-import com.clubber.ClubberServer.domain.club.repository.ClubRepository;
-import com.clubber.ClubberServer.domain.recruit.domain.Recruit;
-import com.clubber.ClubberServer.domain.recruit.dto.CreateLinkedCalendarRequest;
-import com.clubber.ClubberServer.domain.recruit.repository.RecruitRepository;
-import com.clubber.ClubberServer.domain.recruit.service.RecruitLinkedCalendarService;
-import com.clubber.ClubberServer.global.config.security.AuthDetails;
+import com.clubber.domain.domains.admin.domain.Admin;
+import com.clubber.domain.domains.admin.repository.AdminRepository;
+import com.clubber.domain.calendar.domain.Calendar;
+import com.clubber.domain.calendar.repository.CalendarRepository;
+import com.clubber.domain.domains.club.domain.Club;
+import com.clubber.domain.domains.club.repository.ClubRepository;
+import com.clubber.domain.recruit.domain.Recruit;
+import com.clubber.domain.recruit.dto.CreateLinkedCalendarRequest;
+import com.clubber.domain.recruit.repository.RecruitRepository;
+import com.clubber.domain.recruit.service.RecruitLinkedCalendarService;
+import com.clubber.global.config.security.AuthDetails;
import com.clubber.ClubberServer.integration.util.fixture.AdminFixture;
import com.clubber.ClubberServer.integration.util.fixture.CalendarFixture;
import com.clubber.ClubberServer.integration.util.fixture.ClubFixture;
diff --git a/src/test/java/com/clubber/ClubberServer/integration/domain/recruit/service/RecruitServiceTest.java b/Clubber-External/src/test/java/com/clubber/ClubberServer/integration/domain/recruit/service/RecruitServiceTest.java
similarity index 94%
rename from src/test/java/com/clubber/ClubberServer/integration/domain/recruit/service/RecruitServiceTest.java
rename to Clubber-External/src/test/java/com/clubber/ClubberServer/integration/domain/recruit/service/RecruitServiceTest.java
index cc8a1d0e0..e4a173083 100644
--- a/src/test/java/com/clubber/ClubberServer/integration/domain/recruit/service/RecruitServiceTest.java
+++ b/Clubber-External/src/test/java/com/clubber/ClubberServer/integration/domain/recruit/service/RecruitServiceTest.java
@@ -1,7 +1,7 @@
package com.clubber.ClubberServer.integration.domain.recruit.service;
-import static com.clubber.ClubberServer.global.common.consts.ClubberStatic.IMAGE_SERVER;
+import static com.clubber.common.consts.ClubberStatic.IMAGE_SERVER;
import static com.clubber.ClubberServer.integration.util.fixture.RecruitFixture.INVALID_DELETE_IMAGE_RECRUIT_REQUEST;
import static com.clubber.ClubberServer.integration.util.fixture.RecruitFixture.NEW_FINAL_IMAGE_DIFFERENT_RECRUIT_REQUEST;
import static com.clubber.ClubberServer.integration.util.fixture.RecruitFixture.NEW_NOT_IN_FINAL_IMAGE_RECRUIT_REQUEST;
@@ -15,14 +15,14 @@
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
-import com.clubber.ClubberServer.domain.recruit.domain.Recruit;
-import com.clubber.ClubberServer.domain.recruit.domain.RecruitImage;
-import com.clubber.ClubberServer.domain.recruit.dto.UpdateRecruitResponse;
-import com.clubber.ClubberServer.domain.recruit.exception.RecruitImageDeleteRemainDuplicatedException;
-import com.clubber.ClubberServer.domain.recruit.exception.RecruitImageNotFoundException;
-import com.clubber.ClubberServer.domain.recruit.exception.RecruitImageRevisedFinalSizeException;
-import com.clubber.ClubberServer.domain.recruit.repository.RecruitRepository;
-import com.clubber.ClubberServer.domain.recruit.service.RecruitService;
+import com.clubber.domain.recruit.domain.Recruit;
+import com.clubber.domain.recruit.domain.RecruitImage;
+import com.clubber.domain.recruit.dto.UpdateRecruitResponse;
+import com.clubber.domain.recruit.exception.RecruitImageDeleteRemainDuplicatedException;
+import com.clubber.domain.recruit.exception.RecruitImageNotFoundException;
+import com.clubber.domain.recruit.exception.RecruitImageRevisedFinalSizeException;
+import com.clubber.domain.recruit.repository.RecruitRepository;
+import com.clubber.domain.recruit.service.RecruitService;
import com.clubber.ClubberServer.integration.util.ServiceTest;
import com.clubber.ClubberServer.integration.util.WithMockCustomUser;
import jakarta.persistence.EntityManager;
diff --git a/src/test/java/com/clubber/ClubberServer/integration/domain/recruitComment/controller/RecruitCommentControllerTest.java b/Clubber-External/src/test/java/com/clubber/ClubberServer/integration/domain/recruitComment/controller/RecruitCommentControllerTest.java
similarity index 100%
rename from src/test/java/com/clubber/ClubberServer/integration/domain/recruitComment/controller/RecruitCommentControllerTest.java
rename to Clubber-External/src/test/java/com/clubber/ClubberServer/integration/domain/recruitComment/controller/RecruitCommentControllerTest.java
diff --git a/src/test/java/com/clubber/ClubberServer/integration/domain/recruitComment/service/RecruitCommentServiceTest.java b/Clubber-External/src/test/java/com/clubber/ClubberServer/integration/domain/recruitComment/service/RecruitCommentServiceTest.java
similarity index 89%
rename from src/test/java/com/clubber/ClubberServer/integration/domain/recruitComment/service/RecruitCommentServiceTest.java
rename to Clubber-External/src/test/java/com/clubber/ClubberServer/integration/domain/recruitComment/service/RecruitCommentServiceTest.java
index 98c2c6d38..c5f40fac7 100644
--- a/src/test/java/com/clubber/ClubberServer/integration/domain/recruitComment/service/RecruitCommentServiceTest.java
+++ b/Clubber-External/src/test/java/com/clubber/ClubberServer/integration/domain/recruitComment/service/RecruitCommentServiceTest.java
@@ -7,13 +7,13 @@
import static org.assertj.core.api.AssertionsForClassTypes.assertThatThrownBy;
import static org.junit.jupiter.api.Assertions.assertAll;
-import com.clubber.ClubberServer.domain.recruit.domain.RecruitComment;
-import com.clubber.ClubberServer.domain.recruit.dto.recruitComment.DeleteRecruitCommentResponse;
-import com.clubber.ClubberServer.domain.recruit.dto.recruitComment.PostRecruitCommentResponse;
-import com.clubber.ClubberServer.domain.recruit.exception.RecruitCommentNotFoundException;
-import com.clubber.ClubberServer.domain.recruit.exception.RecruitNotFoundException;
-import com.clubber.ClubberServer.domain.recruit.repository.RecruitCommentRepository;
-import com.clubber.ClubberServer.domain.recruit.service.RecruitCommentService;
+import com.clubber.domain.recruit.domain.RecruitComment;
+import com.clubber.domain.recruit.dto.recruitComment.DeleteRecruitCommentResponse;
+import com.clubber.domain.recruit.dto.recruitComment.PostRecruitCommentResponse;
+import com.clubber.domain.recruit.exception.RecruitCommentNotFoundException;
+import com.clubber.domain.recruit.exception.RecruitNotFoundException;
+import com.clubber.domain.recruit.repository.RecruitCommentRepository;
+import com.clubber.domain.recruit.service.RecruitCommentService;
import com.clubber.ClubberServer.integration.util.ServiceTest;
import com.clubber.ClubberServer.integration.util.WithMockCustomUser;
import java.util.Optional;
diff --git a/Clubber-External/src/test/java/com/clubber/ClubberServer/integration/domain/review/controller/ReviewControllerTest.java b/Clubber-External/src/test/java/com/clubber/ClubberServer/integration/domain/review/controller/ReviewControllerTest.java
new file mode 100644
index 000000000..8c7f1c99a
--- /dev/null
+++ b/Clubber-External/src/test/java/com/clubber/ClubberServer/integration/domain/review/controller/ReviewControllerTest.java
@@ -0,0 +1,57 @@
+//package com.clubber.ClubberServer.integration.domain.review.controller;
+//
+//import static com.clubber.ClubberServer.integration.util.fixture.ReviewFixture.EMPTY_KEYWORD_REVIEW_REQUEST;
+//import static com.clubber.ClubberServer.integration.util.fixture.ReviewFixture.LONG_SIZE_INVALID_REVIEW_REQUEST;
+//import static org.hamcrest.Matchers.*;
+//import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
+//import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
+//
+//import org.junit.jupiter.api.DisplayName;
+//import org.junit.jupiter.api.Test;
+//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.test.context.ActiveProfiles;
+//import org.springframework.test.web.servlet.MockMvc;
+//
+//import com.clubber.ClubberServer.integration.util.WithMockCustomUser;
+//import com.fasterxml.jackson.databind.ObjectMapper;
+//
+//@SpringBootTest
+//@AutoConfigureMockMvc
+//@ActiveProfiles("local")
+//public class ReviewControllerTest {
+//
+// @Autowired
+// private MockMvc mockMvc;
+//
+// @Autowired
+// private ObjectMapper objectMapper;
+//
+//
+// @Test
+// @DisplayName("빈키워드_리뷰_예외발생")
+// @WithMockCustomUser(second = "USER")
+// void emptyKeyword() throws Exception {
+// String review = objectMapper.writeValueAsString(EMPTY_KEYWORD_REVIEW_REQUEST);
+// mockMvc.perform(post("/api/v1/clubs/1/reviews")
+// .contentType(MediaType.APPLICATION_JSON)
+// .content(review))
+// .andExpect(status().isBadRequest())
+// .andExpect(jsonPath("$.reason", containsString("1개 이상의 키워드를 선택해주세요")));
+// }
+//
+// @Test
+// @DisplayName("100자보다_긴_리뷰_예외발생")
+// @WithMockCustomUser(second = "USER")
+// void longInvalidReview() throws Exception {
+// String review = objectMapper.writeValueAsString(LONG_SIZE_INVALID_REVIEW_REQUEST);
+//
+// mockMvc.perform(post("/api/v1/clubs/1/reviews")
+// .contentType(MediaType.APPLICATION_JSON)
+// .content(review))
+// .andExpect(status().isBadRequest())
+// .andExpect(jsonPath("$.reason", containsString("리뷰 작성은 100자까지 가능합니다")));
+// }
+//}
diff --git a/Clubber-External/src/test/java/com/clubber/ClubberServer/integration/domain/review/service/ReviewServiceTest.java b/Clubber-External/src/test/java/com/clubber/ClubberServer/integration/domain/review/service/ReviewServiceTest.java
new file mode 100644
index 000000000..79be007ce
--- /dev/null
+++ b/Clubber-External/src/test/java/com/clubber/ClubberServer/integration/domain/review/service/ReviewServiceTest.java
@@ -0,0 +1,111 @@
+package com.clubber.ClubberServer.integration.domain.review.service;
+
+import com.clubber.ClubberServer.integration.util.fixture.ClubFixture;
+import com.clubber.ClubberServer.integration.util.fixture.ReviewFixture;
+import com.clubber.ClubberServer.integration.util.fixture.UserFixture;
+import com.clubber.domain.domains.admin.domain.Admin;
+import com.clubber.domain.domains.club.domain.Club;
+import com.clubber.domain.domains.club.repository.ClubRepository;
+import com.clubber.domain.domains.review.domain.Keyword;
+import com.clubber.domain.domains.review.domain.ReportStatus;
+import com.clubber.domain.domains.review.domain.Review;
+import com.clubber.domain.domains.review.repository.ReviewRepository;
+import com.clubber.domain.domains.user.domain.User;
+import com.clubber.domain.review.dto.CreateClubReviewRequest;
+import com.clubber.domain.review.dto.CreateClubReviewResponse;
+import com.clubber.domain.review.service.ReviewService;
+import com.clubber.ClubberServer.integration.util.ServiceTest;
+import com.clubber.domain.user.repository.UserRepository;
+import com.clubber.global.config.security.AuthDetails;
+import org.junit.jupiter.api.DisplayName;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
+import org.springframework.security.core.context.SecurityContext;
+import org.springframework.security.core.context.SecurityContextHolder;
+import org.springframework.test.context.ActiveProfiles;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+import java.util.Optional;
+import java.util.Set;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.junit.jupiter.api.Assertions.assertAll;
+
+@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
+@Transactional
+@ActiveProfiles("test")
+public class ReviewServiceTest {
+
+ @Autowired
+ private ReviewService reviewService;
+
+ @Autowired
+ private ReviewRepository reviewRepository;
+
+ @Autowired
+ private ClubRepository clubRepository;
+
+ @Autowired
+ private UserRepository userRepository;
+
+ private void createSecurityContext(User user) {
+ SecurityContext context = SecurityContextHolder.createEmptyContext();
+
+ AuthDetails userDetails = new AuthDetails(user.getId().toString(), "USER");
+ UsernamePasswordAuthenticationToken adminToken = new UsernamePasswordAuthenticationToken(
+ userDetails, "user", userDetails.getAuthorities());
+ context.setAuthentication(adminToken);
+ SecurityContextHolder.setContext(context);
+ }
+
+ @DisplayName("리뷰 작성에 성공한다")
+ @Test
+ void createReviewSuccess() {
+ User user = UserFixture.aUser().build();
+ createSecurityContext(userRepository.save(user));
+
+ Club club = ClubFixture.aClub().isAgreeToReview(true).build();
+ clubRepository.save(club);
+
+ String content = "content";
+ List keywords = List.of(Keyword.ACTIVE);
+ CreateClubReviewRequest request = new CreateClubReviewRequest(content, keywords, null);
+
+ CreateClubReviewResponse response = reviewService.createReview(club.getId(), request);
+
+ Optional createdReview = reviewRepository.findById(
+ response.getReviewId());
+
+ assertAll(
+ () -> assertThat(createdReview).isNotNull(),
+ () -> assertThat(createdReview.get().isDeleted()).isEqualTo(false),
+ () -> assertThat(createdReview.get().getContent()).isEqualTo(content),
+ () -> assertThat(createdReview.get().getReportStatus()).isEqualTo(ReportStatus.VISIBLE)
+ );
+ }
+
+ @DisplayName("리뷰 삭제에 성공한다")
+ @Test
+ void deleteReviewSuccess() {
+ User user = UserFixture.aUser().build();
+ User savedUser = userRepository.save(user);
+ createSecurityContext(savedUser);
+
+ Club club = ClubFixture.aClub().isAgreeToReview(true).build();
+ Club savedClub = clubRepository.save(club);
+
+ Review review = ReviewFixture.aReview().user(savedUser).club(savedClub).build();
+ Review savedReview = reviewRepository.save(review);
+
+ reviewService.deleteReview(savedReview.getId());
+ Review deletedReview = reviewRepository.findById(savedReview.getId()).get();
+
+ assertAll(
+ () -> assertThat(deletedReview).isNotNull(),
+ () -> assertThat(deletedReview.isDeleted()).isEqualTo(true)
+ );
+ }
+}
diff --git a/src/test/java/com/clubber/ClubberServer/integration/domain/user/service/UserServiceTest.java b/Clubber-External/src/test/java/com/clubber/ClubberServer/integration/domain/user/service/UserServiceTest.java
similarity index 86%
rename from src/test/java/com/clubber/ClubberServer/integration/domain/user/service/UserServiceTest.java
rename to Clubber-External/src/test/java/com/clubber/ClubberServer/integration/domain/user/service/UserServiceTest.java
index 802e6c303..5133040b3 100644
--- a/src/test/java/com/clubber/ClubberServer/integration/domain/user/service/UserServiceTest.java
+++ b/Clubber-External/src/test/java/com/clubber/ClubberServer/integration/domain/user/service/UserServiceTest.java
@@ -2,8 +2,8 @@
import static org.assertj.core.api.Assertions.assertThat;
-import com.clubber.ClubberServer.domain.user.dto.GetIsUserFavoriteResponse;
-import com.clubber.ClubberServer.domain.user.service.UserService;
+import com.clubber.domain.user.dto.GetIsUserFavoriteResponse;
+import com.clubber.domain.user.service.UserService;
import com.clubber.ClubberServer.integration.util.ServiceTest;
import com.clubber.ClubberServer.integration.util.WithMockCustomUser;
import org.junit.jupiter.api.DisplayName;
diff --git a/src/test/java/com/clubber/ClubberServer/integration/util/DatabaseCleaner.java b/Clubber-External/src/test/java/com/clubber/ClubberServer/integration/util/DatabaseCleaner.java
similarity index 100%
rename from src/test/java/com/clubber/ClubberServer/integration/util/DatabaseCleaner.java
rename to Clubber-External/src/test/java/com/clubber/ClubberServer/integration/util/DatabaseCleaner.java
diff --git a/src/test/java/com/clubber/ClubberServer/integration/util/ServiceTest.java b/Clubber-External/src/test/java/com/clubber/ClubberServer/integration/util/ServiceTest.java
similarity index 100%
rename from src/test/java/com/clubber/ClubberServer/integration/util/ServiceTest.java
rename to Clubber-External/src/test/java/com/clubber/ClubberServer/integration/util/ServiceTest.java
diff --git a/src/test/java/com/clubber/ClubberServer/integration/util/WithMockCustomUser.java b/Clubber-External/src/test/java/com/clubber/ClubberServer/integration/util/WithMockCustomUser.java
similarity index 100%
rename from src/test/java/com/clubber/ClubberServer/integration/util/WithMockCustomUser.java
rename to Clubber-External/src/test/java/com/clubber/ClubberServer/integration/util/WithMockCustomUser.java
diff --git a/src/test/java/com/clubber/ClubberServer/integration/util/WithMockCustomUserSecurityContextFactory.java b/Clubber-External/src/test/java/com/clubber/ClubberServer/integration/util/WithMockCustomUserSecurityContextFactory.java
similarity index 93%
rename from src/test/java/com/clubber/ClubberServer/integration/util/WithMockCustomUserSecurityContextFactory.java
rename to Clubber-External/src/test/java/com/clubber/ClubberServer/integration/util/WithMockCustomUserSecurityContextFactory.java
index fd9847b8f..39a9ef21c 100644
--- a/src/test/java/com/clubber/ClubberServer/integration/util/WithMockCustomUserSecurityContextFactory.java
+++ b/Clubber-External/src/test/java/com/clubber/ClubberServer/integration/util/WithMockCustomUserSecurityContextFactory.java
@@ -1,6 +1,6 @@
package com.clubber.ClubberServer.integration.util;
-import com.clubber.ClubberServer.global.config.security.AuthDetails;
+import com.clubber.global.config.security.AuthDetails;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.context.SecurityContext;
import org.springframework.security.core.context.SecurityContextHolder;
diff --git a/src/test/java/com/clubber/ClubberServer/integration/util/fixture/AdminEmailAuthFixture.java b/Clubber-External/src/test/java/com/clubber/ClubberServer/integration/util/fixture/AdminEmailAuthFixture.java
similarity index 77%
rename from src/test/java/com/clubber/ClubberServer/integration/util/fixture/AdminEmailAuthFixture.java
rename to Clubber-External/src/test/java/com/clubber/ClubberServer/integration/util/fixture/AdminEmailAuthFixture.java
index c3063ef03..dede9f771 100644
--- a/src/test/java/com/clubber/ClubberServer/integration/util/fixture/AdminEmailAuthFixture.java
+++ b/Clubber-External/src/test/java/com/clubber/ClubberServer/integration/util/fixture/AdminEmailAuthFixture.java
@@ -1,11 +1,11 @@
package com.clubber.ClubberServer.integration.util.fixture;
-import com.clubber.ClubberServer.domain.admin.domain.AdminPasswordFindAuth;
-import com.clubber.ClubberServer.domain.admin.domain.AdminSignupAuth;
-import com.clubber.ClubberServer.domain.admin.domain.AdminUsernameFindAuth;
-import com.clubber.ClubberServer.domain.admin.dto.CreateAdminSignupAuthVerifyRequest;
-import com.clubber.ClubberServer.domain.admin.dto.GetAdminUsernameFindRequest;
-import com.clubber.ClubberServer.domain.admin.dto.UpdateAdminPasswordFindAuthVerifyRequest;
+import com.clubber.domain.domains.admin.domain.AdminPasswordFindAuth;
+import com.clubber.domain.domains.admin.domain.AdminSignupAuth;
+import com.clubber.domain.domains.admin.domain.AdminUsernameFindAuth;
+import com.clubber.domain.admin.dto.CreateAdminSignupAuthVerifyRequest;
+import com.clubber.domain.admin.dto.GetAdminUsernameFindRequest;
+import com.clubber.domain.admin.dto.UpdateAdminPasswordFindAuthVerifyRequest;
public class AdminEmailAuthFixture {
public static Long CLUB_ID = 1L;
diff --git a/src/test/java/com/clubber/ClubberServer/integration/util/fixture/AdminFixture.java b/Clubber-External/src/test/java/com/clubber/ClubberServer/integration/util/fixture/AdminFixture.java
similarity index 84%
rename from src/test/java/com/clubber/ClubberServer/integration/util/fixture/AdminFixture.java
rename to Clubber-External/src/test/java/com/clubber/ClubberServer/integration/util/fixture/AdminFixture.java
index d0dc4d7b3..b9ba10e0f 100644
--- a/src/test/java/com/clubber/ClubberServer/integration/util/fixture/AdminFixture.java
+++ b/Clubber-External/src/test/java/com/clubber/ClubberServer/integration/util/fixture/AdminFixture.java
@@ -1,18 +1,18 @@
package com.clubber.ClubberServer.integration.util.fixture;
-import com.clubber.ClubberServer.domain.admin.domain.Admin;
-import com.clubber.ClubberServer.domain.admin.domain.AdminSignupAuth;
-import com.clubber.ClubberServer.domain.admin.domain.Contact;
-import com.clubber.ClubberServer.domain.admin.domain.PendingAdminInfo;
-import com.clubber.ClubberServer.domain.admin.dto.*;
-import com.clubber.ClubberServer.domain.club.domain.ClubType;
-import com.clubber.ClubberServer.domain.club.domain.College;
-import com.clubber.ClubberServer.domain.club.domain.Department;
+import com.clubber.domain.domains.admin.domain.Admin;
+import com.clubber.domain.domains.admin.domain.AdminSignupAuth;
+import com.clubber.domain.domains.admin.domain.Contact;
+import com.clubber.domain.domains.admin.domain.PendingAdminInfo;
+import com.clubber.domain.admin.dto.*;
+import com.clubber.domain.domains.club.domain.ClubType;
+import com.clubber.domain.domains.club.domain.College;
+import com.clubber.domain.domains.club.domain.Department;
import com.navercorp.fixturemonkey.ArbitraryBuilder;
-import static com.clubber.ClubberServer.domain.user.domain.AccountRole.ADMIN;
-import static com.clubber.ClubberServer.domain.user.domain.AccountState.ACTIVE;
-import static com.clubber.ClubberServer.global.common.consts.ClubberStatic.IMAGE_SERVER;
+import static com.clubber.domain.domains.user.domain.AccountRole.ADMIN;
+import static com.clubber.domain.domains.user.domain.AccountState.ACTIVE;
+import static com.clubber.common.consts.ClubberStatic.IMAGE_SERVER;
import static com.clubber.ClubberServer.integration.util.fixture.FixtureCommon.fixtureMonkey;
public class AdminFixture {
diff --git a/Clubber-External/src/test/java/com/clubber/ClubberServer/integration/util/fixture/AdminReviewFixture.java b/Clubber-External/src/test/java/com/clubber/ClubberServer/integration/util/fixture/AdminReviewFixture.java
new file mode 100644
index 000000000..be6c27a18
--- /dev/null
+++ b/Clubber-External/src/test/java/com/clubber/ClubberServer/integration/util/fixture/AdminReviewFixture.java
@@ -0,0 +1,13 @@
+package com.clubber.ClubberServer.integration.util.fixture;
+
+import java.util.List;
+
+public class AdminReviewFixture {
+
+ private static final List reviewIds = List.of(1L, 2L);
+ private static final List notFoundReviewIds = List.of(3L, 4L);
+
+ private static final List overMaxSizeReviews = List.of(1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L);
+
+ private static final List emptyReviewIds = List.of();
+}
diff --git a/src/test/java/com/clubber/ClubberServer/integration/util/fixture/CalendarFixture.java b/Clubber-External/src/test/java/com/clubber/ClubberServer/integration/util/fixture/CalendarFixture.java
similarity index 78%
rename from src/test/java/com/clubber/ClubberServer/integration/util/fixture/CalendarFixture.java
rename to Clubber-External/src/test/java/com/clubber/ClubberServer/integration/util/fixture/CalendarFixture.java
index b55379b5e..3a4e3e4ad 100644
--- a/src/test/java/com/clubber/ClubberServer/integration/util/fixture/CalendarFixture.java
+++ b/Clubber-External/src/test/java/com/clubber/ClubberServer/integration/util/fixture/CalendarFixture.java
@@ -1,8 +1,8 @@
package com.clubber.ClubberServer.integration.util.fixture;
-import com.clubber.ClubberServer.domain.calendar.domain.Calendar;
-import com.clubber.ClubberServer.domain.recruit.domain.RecruitType;
-import com.clubber.ClubberServer.domain.user.domain.AccountRole;
+import com.clubber.domain.calendar.domain.Calendar;
+import com.clubber.domain.recruit.domain.RecruitType;
+import com.clubber.domain.domains.user.domain.AccountRole;
import java.time.LocalDateTime;
diff --git a/src/test/java/com/clubber/ClubberServer/integration/util/fixture/ClubFixture.java b/Clubber-External/src/test/java/com/clubber/ClubberServer/integration/util/fixture/ClubFixture.java
similarity index 76%
rename from src/test/java/com/clubber/ClubberServer/integration/util/fixture/ClubFixture.java
rename to Clubber-External/src/test/java/com/clubber/ClubberServer/integration/util/fixture/ClubFixture.java
index 58a44d424..ff9b73ba7 100644
--- a/src/test/java/com/clubber/ClubberServer/integration/util/fixture/ClubFixture.java
+++ b/Clubber-External/src/test/java/com/clubber/ClubberServer/integration/util/fixture/ClubFixture.java
@@ -1,16 +1,16 @@
package com.clubber.ClubberServer.integration.util.fixture;
-import com.clubber.ClubberServer.domain.admin.dto.UpdateClubPageRequest;
-import com.clubber.ClubberServer.domain.club.domain.Club;
-import com.clubber.ClubberServer.domain.club.domain.ClubInfo;
-import com.clubber.ClubberServer.domain.club.domain.ClubType;
-import com.clubber.ClubberServer.domain.club.domain.Department;
-import com.clubber.ClubberServer.global.vo.image.ImageVO;
+import com.clubber.domain.admin.dto.UpdateClubPageRequest;
+import com.clubber.domain.domains.club.domain.Club;
+import com.clubber.domain.domains.club.domain.ClubInfo;
+import com.clubber.domain.domains.club.domain.ClubType;
+import com.clubber.domain.domains.club.domain.Department;
+import com.clubber.domain.common.vo.ImageVO;
import com.navercorp.fixturemonkey.ArbitraryBuilder;
-import static com.clubber.ClubberServer.domain.club.domain.College.ETC;
-import static com.clubber.ClubberServer.domain.club.domain.Division.ACADEMIC;
-import static com.clubber.ClubberServer.domain.club.domain.Hashtag.PROGRAMMING;
+import static com.clubber.domain.domains.club.domain.College.ETC;
+import static com.clubber.domain.domains.club.domain.Division.ACADEMIC;
+import static com.clubber.domain.domains.club.domain.Hashtag.PROGRAMMING;
import static com.clubber.ClubberServer.integration.util.fixture.FixtureCommon.fixtureMonkey;
public class ClubFixture {
diff --git a/src/test/java/com/clubber/ClubberServer/integration/util/fixture/FavoriteFixture.java b/Clubber-External/src/test/java/com/clubber/ClubberServer/integration/util/fixture/FavoriteFixture.java
similarity index 65%
rename from src/test/java/com/clubber/ClubberServer/integration/util/fixture/FavoriteFixture.java
rename to Clubber-External/src/test/java/com/clubber/ClubberServer/integration/util/fixture/FavoriteFixture.java
index 2ea1fc283..5605c25a1 100644
--- a/src/test/java/com/clubber/ClubberServer/integration/util/fixture/FavoriteFixture.java
+++ b/Clubber-External/src/test/java/com/clubber/ClubberServer/integration/util/fixture/FavoriteFixture.java
@@ -1,8 +1,8 @@
package com.clubber.ClubberServer.integration.util.fixture;
-import com.clubber.ClubberServer.domain.club.domain.Club;
-import com.clubber.ClubberServer.domain.favorite.domain.Favorite;
-import com.clubber.ClubberServer.domain.user.domain.User;
+import com.clubber.domain.domains.club.domain.Club;
+import com.clubber.domain.domains.favorite.domain.Favorite;
+import com.clubber.domain.domains.user.domain.User;
public class FavoriteFixture {
diff --git a/src/test/java/com/clubber/ClubberServer/integration/util/fixture/FixtureCommon.java b/Clubber-External/src/test/java/com/clubber/ClubberServer/integration/util/fixture/FixtureCommon.java
similarity index 100%
rename from src/test/java/com/clubber/ClubberServer/integration/util/fixture/FixtureCommon.java
rename to Clubber-External/src/test/java/com/clubber/ClubberServer/integration/util/fixture/FixtureCommon.java
diff --git a/src/test/java/com/clubber/ClubberServer/integration/util/fixture/RecruitCommentFixture.java b/Clubber-External/src/test/java/com/clubber/ClubberServer/integration/util/fixture/RecruitCommentFixture.java
similarity index 94%
rename from src/test/java/com/clubber/ClubberServer/integration/util/fixture/RecruitCommentFixture.java
rename to Clubber-External/src/test/java/com/clubber/ClubberServer/integration/util/fixture/RecruitCommentFixture.java
index d89413553..e2abefaf7 100644
--- a/src/test/java/com/clubber/ClubberServer/integration/util/fixture/RecruitCommentFixture.java
+++ b/Clubber-External/src/test/java/com/clubber/ClubberServer/integration/util/fixture/RecruitCommentFixture.java
@@ -1,6 +1,6 @@
package com.clubber.ClubberServer.integration.util.fixture;
-import com.clubber.ClubberServer.domain.recruit.dto.recruitComment.PostRecruitCommentRequest;
+import com.clubber.domain.recruit.dto.recruitComment.PostRecruitCommentRequest;
public class RecruitCommentFixture {
diff --git a/src/test/java/com/clubber/ClubberServer/integration/util/fixture/RecruitFixture.java b/Clubber-External/src/test/java/com/clubber/ClubberServer/integration/util/fixture/RecruitFixture.java
similarity index 95%
rename from src/test/java/com/clubber/ClubberServer/integration/util/fixture/RecruitFixture.java
rename to Clubber-External/src/test/java/com/clubber/ClubberServer/integration/util/fixture/RecruitFixture.java
index 89c9e886e..ed56ed9e2 100644
--- a/src/test/java/com/clubber/ClubberServer/integration/util/fixture/RecruitFixture.java
+++ b/Clubber-External/src/test/java/com/clubber/ClubberServer/integration/util/fixture/RecruitFixture.java
@@ -1,9 +1,9 @@
package com.clubber.ClubberServer.integration.util.fixture;
-import com.clubber.ClubberServer.domain.recruit.domain.Recruit;
-import com.clubber.ClubberServer.domain.recruit.domain.RecruitType;
-import com.clubber.ClubberServer.domain.recruit.dto.PostRecruitRequest;
-import com.clubber.ClubberServer.domain.recruit.dto.UpdateRecruitRequest;
+import com.clubber.domain.recruit.domain.Recruit;
+import com.clubber.domain.recruit.domain.RecruitType;
+import com.clubber.domain.recruit.dto.PostRecruitRequest;
+import com.clubber.domain.recruit.dto.UpdateRecruitRequest;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.List;
diff --git a/Clubber-External/src/test/java/com/clubber/ClubberServer/integration/util/fixture/ReviewFixture.java b/Clubber-External/src/test/java/com/clubber/ClubberServer/integration/util/fixture/ReviewFixture.java
new file mode 100644
index 000000000..671c247e0
--- /dev/null
+++ b/Clubber-External/src/test/java/com/clubber/ClubberServer/integration/util/fixture/ReviewFixture.java
@@ -0,0 +1,23 @@
+package com.clubber.ClubberServer.integration.util.fixture;
+
+import com.clubber.domain.domains.club.domain.Club;
+import com.clubber.domain.domains.review.domain.ReportStatus;
+import com.clubber.domain.domains.review.domain.Review;
+import com.clubber.domain.domains.user.domain.User;
+
+public class ReviewFixture {
+ public static final String CONTENT = "content";
+ public static final ReportStatus REPORT_STATUS = ReportStatus.HIDDEN;
+
+ public static Review.ReviewBuilder aReview() {
+ User user = UserFixture.aUser().build();
+ Club club = ClubFixture.aClub().build();
+ return Review.builder()
+ .club(club)
+ .user(user)
+ .content(CONTENT)
+ .reportStatus(REPORT_STATUS)
+ .isDeleted(false)
+ .likes(0L);
+ }
+}
diff --git a/src/test/java/com/clubber/ClubberServer/integration/util/fixture/UserFixture.java b/Clubber-External/src/test/java/com/clubber/ClubberServer/integration/util/fixture/UserFixture.java
similarity index 77%
rename from src/test/java/com/clubber/ClubberServer/integration/util/fixture/UserFixture.java
rename to Clubber-External/src/test/java/com/clubber/ClubberServer/integration/util/fixture/UserFixture.java
index c57e7b818..8b1260de6 100644
--- a/src/test/java/com/clubber/ClubberServer/integration/util/fixture/UserFixture.java
+++ b/Clubber-External/src/test/java/com/clubber/ClubberServer/integration/util/fixture/UserFixture.java
@@ -1,8 +1,8 @@
package com.clubber.ClubberServer.integration.util.fixture;
-import com.clubber.ClubberServer.domain.user.domain.User;
+import com.clubber.domain.domains.user.domain.User;
-import static com.clubber.ClubberServer.domain.user.domain.SnsType.KAKAO;
+import static com.clubber.domain.domains.user.domain.SnsType.KAKAO;
public class UserFixture {
public static final Long USER_ID = 1L;
diff --git a/src/test/java/com/clubber/ClubberServer/unit/domain/admin/domain/AdminDomainTest.java b/Clubber-External/src/test/java/com/clubber/ClubberServer/unit/domain/admin/domain/AdminDomainTest.java
similarity index 80%
rename from src/test/java/com/clubber/ClubberServer/unit/domain/admin/domain/AdminDomainTest.java
rename to Clubber-External/src/test/java/com/clubber/ClubberServer/unit/domain/admin/domain/AdminDomainTest.java
index 7c2abdc44..a9d62820f 100644
--- a/src/test/java/com/clubber/ClubberServer/unit/domain/admin/domain/AdminDomainTest.java
+++ b/Clubber-External/src/test/java/com/clubber/ClubberServer/unit/domain/admin/domain/AdminDomainTest.java
@@ -1,13 +1,13 @@
package com.clubber.ClubberServer.unit.domain.admin.domain;
-import static com.clubber.ClubberServer.domain.user.domain.AccountRole.ADMIN;
-import static com.clubber.ClubberServer.domain.user.domain.AccountState.ACTIVE;
-import static com.clubber.ClubberServer.domain.user.domain.AccountState.INACTIVE;
+import static com.clubber.domain.domains.user.domain.AccountRole.ADMIN;
+import static com.clubber.domain.domains.user.domain.AccountState.ACTIVE;
+import static com.clubber.domain.domains.user.domain.AccountState.INACTIVE;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
-import com.clubber.ClubberServer.domain.admin.domain.Admin;
-import com.clubber.ClubberServer.domain.admin.exception.AdminAlreadyDeletedException;
+import com.clubber.domain.domains.admin.domain.Admin;
+import com.clubber.domain.domains.admin.exception.AdminAlreadyDeletedException;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
diff --git a/src/test/java/com/clubber/ClubberServer/unit/domain/admin/facade/AdminEmailAuthFacadeTest.java b/Clubber-External/src/test/java/com/clubber/ClubberServer/unit/domain/admin/facade/AdminEmailAuthFacadeTest.java
similarity index 77%
rename from src/test/java/com/clubber/ClubberServer/unit/domain/admin/facade/AdminEmailAuthFacadeTest.java
rename to Clubber-External/src/test/java/com/clubber/ClubberServer/unit/domain/admin/facade/AdminEmailAuthFacadeTest.java
index 54aaf6c46..b5360ca94 100644
--- a/src/test/java/com/clubber/ClubberServer/unit/domain/admin/facade/AdminEmailAuthFacadeTest.java
+++ b/Clubber-External/src/test/java/com/clubber/ClubberServer/unit/domain/admin/facade/AdminEmailAuthFacadeTest.java
@@ -1,9 +1,9 @@
package com.clubber.ClubberServer.unit.domain.admin.facade;
-import com.clubber.ClubberServer.domain.admin.dto.CreateAdminPasswordFindRequest;
-import com.clubber.ClubberServer.domain.admin.facade.AdminEmailAuthFacade;
-import com.clubber.ClubberServer.domain.admin.repository.AdminRepository;
-import com.clubber.ClubberServer.global.infrastructure.outer.mail.MailService;
+import com.clubber.domain.admin.dto.CreateAdminPasswordFindRequest;
+import com.clubber.domain.admin.facade.AdminEmailAuthFacade;
+import com.clubber.domain.domains.admin.repository.AdminRepository;
+import com.clubber.global.infrastructure.outer.mail.MailService;
import com.clubber.ClubberServer.integration.util.fixture.AdminFixture;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
@@ -12,7 +12,7 @@
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
-import static com.clubber.ClubberServer.domain.user.domain.AccountState.ACTIVE;
+import static com.clubber.domain.domains.user.domain.AccountState.ACTIVE;
import static org.mockito.Mockito.*;
@ExtendWith(MockitoExtension.class)
diff --git a/src/test/java/com/clubber/ClubberServer/unit/domain/admin/service/AdminAccountServiceTest.java b/Clubber-External/src/test/java/com/clubber/ClubberServer/unit/domain/admin/service/AdminAccountServiceTest.java
similarity index 83%
rename from src/test/java/com/clubber/ClubberServer/unit/domain/admin/service/AdminAccountServiceTest.java
rename to Clubber-External/src/test/java/com/clubber/ClubberServer/unit/domain/admin/service/AdminAccountServiceTest.java
index b4b9d9ef3..1a718c8f9 100644
--- a/src/test/java/com/clubber/ClubberServer/unit/domain/admin/service/AdminAccountServiceTest.java
+++ b/Clubber-External/src/test/java/com/clubber/ClubberServer/unit/domain/admin/service/AdminAccountServiceTest.java
@@ -1,12 +1,12 @@
package com.clubber.ClubberServer.unit.domain.admin.service;
-import com.clubber.ClubberServer.domain.admin.domain.Admin;
-import com.clubber.ClubberServer.domain.admin.dto.GetAdminsProfileResponse;
-import com.clubber.ClubberServer.domain.admin.dto.UpdateAdminsPasswordRequest;
-import com.clubber.ClubberServer.domain.admin.service.AdminAccountService;
-import com.clubber.ClubberServer.domain.admin.implement.AdminReader;
-import com.clubber.ClubberServer.domain.admin.implement.AdminValidator;
-import com.clubber.ClubberServer.global.event.withdraw.SoftDeleteEventPublisher;
+import com.clubber.domain.domains.admin.domain.Admin;
+import com.clubber.domain.admin.dto.GetAdminsProfileResponse;
+import com.clubber.domain.admin.dto.UpdateAdminsPasswordRequest;
+import com.clubber.domain.admin.service.AdminAccountService;
+import com.clubber.domain.admin.implement.AdminReader;
+import com.clubber.domain.admin.implement.AdminValidator;
+import com.clubber.global.event.withdraw.SoftDeleteEventPublisher;
import com.clubber.ClubberServer.integration.util.fixture.AdminFixture;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
@@ -15,7 +15,7 @@
import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.security.crypto.password.PasswordEncoder;
-import static com.clubber.ClubberServer.domain.user.domain.AccountState.INACTIVE;
+import static com.clubber.domain.domains.user.domain.AccountState.INACTIVE;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.assertAll;
import static org.mockito.ArgumentMatchers.anyLong;
diff --git a/src/test/java/com/clubber/ClubberServer/unit/domain/admin/service/AdminClubServiceTest.java b/Clubber-External/src/test/java/com/clubber/ClubberServer/unit/domain/admin/service/AdminClubServiceTest.java
similarity index 76%
rename from src/test/java/com/clubber/ClubberServer/unit/domain/admin/service/AdminClubServiceTest.java
rename to Clubber-External/src/test/java/com/clubber/ClubberServer/unit/domain/admin/service/AdminClubServiceTest.java
index 1e298c786..8aa41a6ce 100644
--- a/src/test/java/com/clubber/ClubberServer/unit/domain/admin/service/AdminClubServiceTest.java
+++ b/Clubber-External/src/test/java/com/clubber/ClubberServer/unit/domain/admin/service/AdminClubServiceTest.java
@@ -1,25 +1,25 @@
package com.clubber.ClubberServer.unit.domain.admin.service;
-import static com.clubber.ClubberServer.domain.club.domain.ClubType.SMALL;
-import static com.clubber.ClubberServer.domain.club.domain.College.BUSINESS_COLLEGE;
-import static com.clubber.ClubberServer.domain.club.domain.Department.BUSINESS;
-import static com.clubber.ClubberServer.domain.club.domain.Division.ETC;
-import static com.clubber.ClubberServer.domain.club.domain.Hashtag.DANCE;
-import static com.clubber.ClubberServer.domain.user.domain.AccountRole.ADMIN;
-import static com.clubber.ClubberServer.domain.user.domain.AccountState.ACTIVE;
+import static com.clubber.domain.domains.club.domain.ClubType.SMALL;
+import static com.clubber.domain.domains.club.domain.College.BUSINESS_COLLEGE;
+import static com.clubber.domain.domains.club.domain.Department.BUSINESS;
+import static com.clubber.domain.domains.club.domain.Division.ETC;
+import static com.clubber.domain.domains.club.domain.Hashtag.DANCE;
+import static com.clubber.domain.domains.user.domain.AccountRole.ADMIN;
+import static com.clubber.domain.domains.user.domain.AccountState.ACTIVE;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.when;
-import com.clubber.ClubberServer.domain.admin.domain.Admin;
-import com.clubber.ClubberServer.domain.admin.dto.UpdateClubPageRequest;
-import com.clubber.ClubberServer.domain.admin.dto.UpdateClubPageResponse;
-import com.clubber.ClubberServer.domain.admin.service.AdminClubService;
-import com.clubber.ClubberServer.domain.admin.implement.AdminReader;
-import com.clubber.ClubberServer.domain.club.domain.Club;
-import com.clubber.ClubberServer.domain.club.domain.ClubInfo;
-import com.clubber.ClubberServer.domain.club.dto.GetClubInfoResponse;
-import com.clubber.ClubberServer.domain.club.dto.GetClubResponse;
-import com.clubber.ClubberServer.global.vo.image.ImageVO;
+import com.clubber.domain.domains.admin.domain.Admin;
+import com.clubber.domain.admin.dto.UpdateClubPageRequest;
+import com.clubber.domain.admin.dto.UpdateClubPageResponse;
+import com.clubber.domain.admin.service.AdminClubService;
+import com.clubber.domain.admin.implement.AdminReader;
+import com.clubber.domain.domains.club.domain.Club;
+import com.clubber.domain.domains.club.domain.ClubInfo;
+import com.clubber.domain.club.dto.GetClubInfoResponse;
+import com.clubber.domain.club.dto.GetClubResponse;
+import com.clubber.domain.common.vo.ImageVO;
import com.clubber.ClubberServer.integration.util.fixture.AdminFixture;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
diff --git a/src/test/java/com/clubber/ClubberServer/unit/domain/admin/validator/AdminValidatorTest.java b/Clubber-External/src/test/java/com/clubber/ClubberServer/unit/domain/admin/validator/AdminValidatorTest.java
similarity index 90%
rename from src/test/java/com/clubber/ClubberServer/unit/domain/admin/validator/AdminValidatorTest.java
rename to Clubber-External/src/test/java/com/clubber/ClubberServer/unit/domain/admin/validator/AdminValidatorTest.java
index 43f15f56c..d04fb1616 100644
--- a/src/test/java/com/clubber/ClubberServer/unit/domain/admin/validator/AdminValidatorTest.java
+++ b/Clubber-External/src/test/java/com/clubber/ClubberServer/unit/domain/admin/validator/AdminValidatorTest.java
@@ -4,10 +4,10 @@
import static org.assertj.core.api.Assertions.assertThatThrownBy;
import static org.mockito.Mockito.when;
-import com.clubber.ClubberServer.domain.admin.exception.AdminEqualsPreviousPasswordExcpetion;
-import com.clubber.ClubberServer.domain.admin.exception.AdminInvalidAuthCodeException;
-import com.clubber.ClubberServer.domain.admin.exception.AdminLoginFailedException;
-import com.clubber.ClubberServer.domain.admin.implement.AdminValidator;
+import com.clubber.domain.domains.admin.exception.AdminEqualsPreviousPasswordExcpetion;
+import com.clubber.domain.domains.admin.exception.AdminInvalidAuthCodeException;
+import com.clubber.domain.domains.admin.exception.AdminLoginFailedException;
+import com.clubber.domain.admin.implement.AdminValidator;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
diff --git a/src/test/java/com/clubber/ClubberServer/unit/domain/calendar/CalendarDomainTest.java b/Clubber-External/src/test/java/com/clubber/ClubberServer/unit/domain/calendar/CalendarDomainTest.java
similarity index 92%
rename from src/test/java/com/clubber/ClubberServer/unit/domain/calendar/CalendarDomainTest.java
rename to Clubber-External/src/test/java/com/clubber/ClubberServer/unit/domain/calendar/CalendarDomainTest.java
index d19bf737b..164969eca 100644
--- a/src/test/java/com/clubber/ClubberServer/unit/domain/calendar/CalendarDomainTest.java
+++ b/Clubber-External/src/test/java/com/clubber/ClubberServer/unit/domain/calendar/CalendarDomainTest.java
@@ -1,8 +1,8 @@
package com.clubber.ClubberServer.unit.domain.calendar;
-import com.clubber.ClubberServer.domain.calendar.domain.Calendar;
-import com.clubber.ClubberServer.domain.calendar.domain.CalendarStatus;
-import com.clubber.ClubberServer.domain.recruit.domain.RecruitType;
+import com.clubber.domain.calendar.domain.Calendar;
+import com.clubber.domain.calendar.domain.CalendarStatus;
+import com.clubber.domain.recruit.domain.RecruitType;
import com.clubber.ClubberServer.integration.util.fixture.CalendarFixture;
import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.Test;
diff --git a/src/test/java/com/clubber/ClubberServer/unit/domain/favorite/domain/FavoriteDomainTest.java b/Clubber-External/src/test/java/com/clubber/ClubberServer/unit/domain/favorite/domain/FavoriteDomainTest.java
similarity index 83%
rename from src/test/java/com/clubber/ClubberServer/unit/domain/favorite/domain/FavoriteDomainTest.java
rename to Clubber-External/src/test/java/com/clubber/ClubberServer/unit/domain/favorite/domain/FavoriteDomainTest.java
index 2d23ebf97..8e1ea4ecd 100644
--- a/src/test/java/com/clubber/ClubberServer/unit/domain/favorite/domain/FavoriteDomainTest.java
+++ b/Clubber-External/src/test/java/com/clubber/ClubberServer/unit/domain/favorite/domain/FavoriteDomainTest.java
@@ -1,9 +1,9 @@
package com.clubber.ClubberServer.unit.domain.favorite.domain;
-import com.clubber.ClubberServer.domain.club.domain.Club;
-import com.clubber.ClubberServer.domain.favorite.domain.Favorite;
-import com.clubber.ClubberServer.domain.favorite.exception.FavoriteAlreadyDeleteException;
-import com.clubber.ClubberServer.domain.user.domain.User;
+import com.clubber.domain.domains.club.domain.Club;
+import com.clubber.domain.domains.favorite.domain.Favorite;
+import com.clubber.domain.domains.favorite.exception.FavoriteAlreadyDeleteException;
+import com.clubber.domain.domains.user.domain.User;
import com.clubber.ClubberServer.integration.util.fixture.ClubFixture;
import com.clubber.ClubberServer.integration.util.fixture.FavoriteFixture;
import com.clubber.ClubberServer.integration.util.fixture.UserFixture;
diff --git a/src/test/java/com/clubber/ClubberServer/unit/domain/favorite/validator/FavoriteValidatorTest.java b/Clubber-External/src/test/java/com/clubber/ClubberServer/unit/domain/favorite/validator/FavoriteValidatorTest.java
similarity index 81%
rename from src/test/java/com/clubber/ClubberServer/unit/domain/favorite/validator/FavoriteValidatorTest.java
rename to Clubber-External/src/test/java/com/clubber/ClubberServer/unit/domain/favorite/validator/FavoriteValidatorTest.java
index fde37ab69..332b9539a 100644
--- a/src/test/java/com/clubber/ClubberServer/unit/domain/favorite/validator/FavoriteValidatorTest.java
+++ b/Clubber-External/src/test/java/com/clubber/ClubberServer/unit/domain/favorite/validator/FavoriteValidatorTest.java
@@ -1,6 +1,6 @@
package com.clubber.ClubberServer.unit.domain.favorite.validator;
-import com.clubber.ClubberServer.domain.favorite.implement.FavoriteValidator;
+import com.clubber.domain.favorite.implement.FavoriteValidator;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.junit.jupiter.MockitoExtension;
diff --git a/Clubber-External/src/test/java/com/clubber/ClubberServer/unit/domain/review/domain/ReviewDomainTest.java b/Clubber-External/src/test/java/com/clubber/ClubberServer/unit/domain/review/domain/ReviewDomainTest.java
new file mode 100644
index 000000000..66d916891
--- /dev/null
+++ b/Clubber-External/src/test/java/com/clubber/ClubberServer/unit/domain/review/domain/ReviewDomainTest.java
@@ -0,0 +1,68 @@
+package com.clubber.ClubberServer.unit.domain.review.domain;
+
+public class ReviewDomainTest {
+
+// @Test
+// @DisplayName("Review에 Keyword 리스트를 저장할때, ReviewKeyword에 포함되어 저장된다.")
+// void addReviewKeywordsTest() {
+// //given
+// Review review = getReview(APPROVED);
+// List keywords = List.of(CULTURE, FEE, ACTIVITY, CAREER, MANAGE);
+//
+// //when
+// review.addKeywords(keywords);
+//
+// //then
+// List reviewKeywords = review.getReviewKeywords();
+// Assertions.assertThat(reviewKeywords)
+// .extracting(ReviewKeyword::getKeyword)
+// .containsExactly(CULTURE, FEE, ACTIVITY, CAREER, MANAGE);
+// }
+
+// private static Review getReview(DeletionStatus deletionStatus) {
+// return Review.builder()
+// .id(1L)
+// .content("content")
+// .approvedStatus(deletionStatus)
+// .build();
+// }
+//
+// private static List getApprovedStatusListExcept(
+// DeletionStatus excludedDeletionStatus) {
+// return Arrays.stream(DeletionStatus.values())
+// .filter(approvedStatus -> approvedStatus != excludedDeletionStatus)
+// .collect(Collectors.toList());
+// }
+//
+// @Test
+// @DisplayName("이미 삭제된 리뷰를 삭제하면 ReviewAlreadyDeletedException가 발생한다.")
+// void deleteAlreadyDeletedReview() {
+// //given
+// Review review = getReview(DELETED);
+//
+// //when & then
+// assertThrows(ReviewAlreadyDeletedException.class, review::delete);
+// }
+//
+// @Test
+// @DisplayName("삭제되지 않은 리뷰 상태이면 올바르게 삭제된다.")
+// void deleteReviewNotDeletedApprovedStatus() {
+// //given
+// List deletionStatusListExceptDeleted = getApprovedStatusListExcept(DELETED);
+//
+// //when & then
+// deletionStatusListExceptDeleted
+// .forEach(approvedStatus -> {
+// Review review = getReview(approvedStatus);
+// review.delete();
+// assertEquals(DELETED, review.getDeletionStatus());
+// });
+// }
+//
+// @Test
+// @DisplayName("리뷰 저장시 인증 상태는 기본값이 저장된다")
+// void getDefaultReviewVerifiedStatus() {
+// Review review = getReview(PENDING);
+// assertEquals(VerifiedStatus.NOT_VERIFIED, review.getVerifiedStatus());
+// }
+}
diff --git a/Clubber-External/src/test/java/com/clubber/ClubberServer/unit/domain/review/mapper/ReviewMapperTest.java b/Clubber-External/src/test/java/com/clubber/ClubberServer/unit/domain/review/mapper/ReviewMapperTest.java
new file mode 100644
index 000000000..d27545c39
--- /dev/null
+++ b/Clubber-External/src/test/java/com/clubber/ClubberServer/unit/domain/review/mapper/ReviewMapperTest.java
@@ -0,0 +1,53 @@
+package com.clubber.ClubberServer.unit.domain.review.mapper;
+
+import com.clubber.domain.review.mapper.ReviewMapper;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.InjectMocks;
+import org.mockito.junit.jupiter.MockitoExtension;
+
+@ExtendWith(MockitoExtension.class)
+public class ReviewMapperTest {
+
+ @InjectMocks
+ private ReviewMapper reviewMapper;
+
+// @Test
+// void testKeywordMapping() {
+// //given
+// KeywordStatsVO keywordStatsVO = new KeywordStatsVO(getKeywordStats());
+// Club club = getClub();
+//
+// //when
+// GetClubReviewsKeywordStatsResponse getClubReviewsKeywordStatsResponse = reviewMapper.getGetClubReviewsKeywordStatsResponse(
+// club, keywordStatsVO);
+//
+// //then
+// Map keywordMap = getClubReviewsKeywordStatsResponse.getKeywordStats();
+//
+// assertThat(keywordMap)
+// .containsExactlyInAnyOrderEntriesOf(Map.of(
+// ACTIVITY.getTitle(), 10L,
+// FEE.getTitle(), 20L,
+// CAREER.getTitle(), 30L,
+// CULTURE.getTitle(), 40L,
+// MANAGE.getTitle(), 50L
+// ));
+// }
+//
+// private static List getKeywordStats() {
+// return List.of(
+// new KeywordCountStatDto(ACTIVITY, 10L),
+// new KeywordCountStatDto(FEE, 20L),
+// new KeywordCountStatDto(CAREER, 30L),
+// new KeywordCountStatDto(CULTURE, 40L),
+// new KeywordCountStatDto(MANAGE, 50L)
+// );
+// }
+//
+// private static Club getClub() {
+// return Club.builder()
+// .id(1L)
+// .isAgreeToReview(true)
+// .build();
+// }
+}
diff --git a/Clubber-External/src/test/java/com/clubber/ClubberServer/unit/domain/review/vo/ReviewKeywordVOTest.java b/Clubber-External/src/test/java/com/clubber/ClubberServer/unit/domain/review/vo/ReviewKeywordVOTest.java
new file mode 100644
index 000000000..5558ecc59
--- /dev/null
+++ b/Clubber-External/src/test/java/com/clubber/ClubberServer/unit/domain/review/vo/ReviewKeywordVOTest.java
@@ -0,0 +1,52 @@
+//package com.clubber.ClubberServer.unit.domain.review.vo;
+//
+//import org.junit.jupiter.api.DisplayName;
+//import org.junit.jupiter.api.Test;
+//
+//public class ReviewKeywordVOTest {
+//
+//
+// @Test
+// @DisplayName("keywordStat 리스트가 주어졌을 때, KeywordStatVO안의 Map에 매핑된다..")
+// void keywordStatsTest() {
+// //given & when
+//// KeywordStatsVO keywordStatsVO = new KeywordStatsVO(getKeywordStats());
+////
+//// //then
+//// Map keywordMap = keywordStatsVO.getKeywordMapAsStingKey();
+//// assertAll(
+//// () -> assertEquals(10L, keywordMap.get(ACTIVITY.getTitle())),
+//// () -> assertEquals(20L, keywordMap.get(FEE.getTitle())),
+//// () -> assertEquals(30L, keywordMap.get(CAREER.getTitle())),
+//// () -> assertEquals(40L, keywordMap.get(CULTURE.getTitle())),
+//// () -> assertEquals(50L, keywordMap.get(MANAGE.getTitle()))
+//// );
+//// }
+////
+//// @Test
+//// @DisplayName("KeywordStatMap의 String키는 Keyword Enum순서와 동일하다")
+//// void keywordStatsKeyOrderTest() {
+//// //given
+//// KeywordStatsVO keywordStatsVO = new KeywordStatsVO(getKeywordStats());
+//// List expectedKeyOrders = Arrays.stream(Keyword.values())
+//// .map(Keyword::getTitle) // Enum 순서대로 제목을 매핑
+//// .toList();
+////
+//// //when : 순서대로 key를 추출할 때
+//// Map keywordMap = keywordStatsVO.getKeywordMapAsStingKey();
+//// List actualKeyOrders = new ArrayList<>(keywordMap.keySet());
+////
+//// //then
+//// Assertions.assertThat(expectedKeyOrders).isEqualTo(actualKeyOrders);
+//// }
+//
+//// private static List getKeywordStats() {
+//// return List.of(
+//// new KeywordCountStatDto(Keyword.ACTIVITY, 10L),
+//// new KeywordCountStatDto(FEE, 20L),
+//// new KeywordCountStatDto(Keyword.CAREER, 30L),
+//// new KeywordCountStatDto(Keyword.CULTURE, 40L),
+//// new KeywordCountStatDto(Keyword.MANAGE, 50L)
+//// );
+//// }
+////}
diff --git a/src/test/java/com/clubber/ClubberServer/unit/global/util/ImageUtilTest.java b/Clubber-External/src/test/java/com/clubber/ClubberServer/unit/global/util/ImageUtilTest.java
similarity index 85%
rename from src/test/java/com/clubber/ClubberServer/unit/global/util/ImageUtilTest.java
rename to Clubber-External/src/test/java/com/clubber/ClubberServer/unit/global/util/ImageUtilTest.java
index 607dfd482..032e8fc29 100644
--- a/src/test/java/com/clubber/ClubberServer/unit/global/util/ImageUtilTest.java
+++ b/Clubber-External/src/test/java/com/clubber/ClubberServer/unit/global/util/ImageUtilTest.java
@@ -1,11 +1,11 @@
package com.clubber.ClubberServer.unit.global.util;
-import com.clubber.ClubberServer.global.util.ImageUtil;
+import com.clubber.global.util.ImageUtil;
import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
-import static com.clubber.ClubberServer.global.common.consts.ClubberStatic.IMAGE_SERVER;
+import static com.clubber.common.consts.ClubberStatic.IMAGE_SERVER;
import static org.assertj.core.api.Assertions.*;
public class ImageUtilTest {
private final String exampleKey = "imagekey";
diff --git a/Clubber-Internal/Clubber-Internal.iml b/Clubber-Internal/Clubber-Internal.iml
new file mode 100644
index 000000000..c90834f2d
--- /dev/null
+++ b/Clubber-Internal/Clubber-Internal.iml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Clubber-Internal/Dockerfile.dev b/Clubber-Internal/Dockerfile.dev
new file mode 100644
index 000000000..dd3ab6ff6
--- /dev/null
+++ b/Clubber-Internal/Dockerfile.dev
@@ -0,0 +1,12 @@
+FROM openjdk:17-alpine
+
+# curl 설치
+RUN apk add --no-cache curl
+
+ARG JAR_FILE=build/libs/Clubber-Internal.jar
+
+COPY ${JAR_FILE} app.jar
+ARG PROFILE=dev
+ENV PROFILE=${PROFILE}
+
+ENTRYPOINT ["java", "-jar", "-Dspring.profiles.active=${PROFILE}","/app.jar"]
\ No newline at end of file
diff --git a/Clubber-Internal/build.gradle b/Clubber-Internal/build.gradle
new file mode 100644
index 000000000..e91ae3b40
--- /dev/null
+++ b/Clubber-Internal/build.gradle
@@ -0,0 +1,24 @@
+plugins {
+ id 'org.springframework.boot' version '3.2.4'
+ id 'io.spring.dependency-management'
+ id 'java'
+}
+
+dependencies {
+ implementation 'org.springframework.boot:spring-boot-starter-web'
+ implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
+ implementation 'org.springframework.boot:spring-boot-starter-security'
+
+ implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta'
+ annotationProcessor "com.querydsl:querydsl-apt:5.0.0:jakarta"
+
+ implementation 'io.jsonwebtoken:jjwt-api:0.11.5'
+ implementation 'io.jsonwebtoken:jjwt-impl:0.11.5'
+ implementation 'io.jsonwebtoken:jjwt-jackson:0.11.5'
+
+ //swagger
+ implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.0.2'
+
+ implementation project(":Clubber-Domain")
+ implementation project(":Clubber-Common")
+}
diff --git a/Clubber-Internal/src/main/java/com/clubber/ClubberInternalApplication.java b/Clubber-Internal/src/main/java/com/clubber/ClubberInternalApplication.java
new file mode 100644
index 000000000..585e4cf7d
--- /dev/null
+++ b/Clubber-Internal/src/main/java/com/clubber/ClubberInternalApplication.java
@@ -0,0 +1,13 @@
+package com.clubber;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.context.properties.ConfigurationPropertiesScan;
+
+@ConfigurationPropertiesScan
+@SpringBootApplication
+public class ClubberInternalApplication {
+ public static void main(String[] args) {
+ SpringApplication.run(ClubberInternalApplication.class);
+ }
+}
diff --git a/Clubber-Internal/src/main/java/com/clubber/domain/admin/controller/AdminController.java b/Clubber-Internal/src/main/java/com/clubber/domain/admin/controller/AdminController.java
new file mode 100644
index 000000000..291c07a18
--- /dev/null
+++ b/Clubber-Internal/src/main/java/com/clubber/domain/admin/controller/AdminController.java
@@ -0,0 +1,21 @@
+package com.clubber.domain.admin.controller;
+
+import com.clubber.domain.admin.dto.PendingAdminInfoResponse;
+import com.clubber.domain.admin.service.InternalClubApproveService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+@RestController
+@RequestMapping("/internal/admins")
+@RequiredArgsConstructor
+public class AdminController {
+ private final InternalClubApproveService internalClubApproveService;
+ @GetMapping
+ public List getNotApprovedPendingAdmins() {
+ return internalClubApproveService.getPendingAdminInfos();
+ }
+}
diff --git a/Clubber-Internal/src/main/java/com/clubber/domain/admin/dto/PendingAdminInfoResponse.java b/Clubber-Internal/src/main/java/com/clubber/domain/admin/dto/PendingAdminInfoResponse.java
new file mode 100644
index 000000000..e79300eac
--- /dev/null
+++ b/Clubber-Internal/src/main/java/com/clubber/domain/admin/dto/PendingAdminInfoResponse.java
@@ -0,0 +1,45 @@
+package com.clubber.domain.admin.dto;
+
+import com.clubber.domain.domains.admin.domain.Contact;
+import com.clubber.domain.domains.admin.domain.PendingAdminInfo;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Builder;
+
+import java.time.LocalDateTime;
+
+import static com.clubber.common.consts.ClubberStatic.IMAGE_SERVER;
+
+@Builder
+public record PendingAdminInfoResponse(Long id,
+ String username,
+ String clubType,
+ String college,
+ String department,
+ String division,
+ String hashtag,
+ String clubName,
+ String email,
+ Contact contact,
+ String imageForApproval,
+ boolean isApproved,
+ @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy.MM.dd", timezone = "Asia/Seoul")
+ LocalDateTime createdAt) {
+ public static PendingAdminInfoResponse of(PendingAdminInfo pendingAdminInfo) {
+ return PendingAdminInfoResponse.builder()
+ .id(pendingAdminInfo.getId())
+ .username(pendingAdminInfo.getUsername())
+ .clubType(pendingAdminInfo.getClubType().getTitle())
+ .college(pendingAdminInfo.getCollege().getTitle())
+ .division(pendingAdminInfo.getDivision().getTitle())
+ .hashtag(pendingAdminInfo.getHashtag().getTitle())
+ .department(pendingAdminInfo.getDepartment().getTitle())
+ .clubName(pendingAdminInfo.getClubName())
+ .email(pendingAdminInfo.getEmail())
+ .contact(pendingAdminInfo.getContact())
+ .imageForApproval(IMAGE_SERVER + pendingAdminInfo.getImageForApproval())
+ .isApproved(pendingAdminInfo.isApproved())
+ .createdAt(pendingAdminInfo.getCreatedAt())
+ .build();
+
+ }
+}
diff --git a/Clubber-Internal/src/main/java/com/clubber/domain/admin/service/InternalClubApproveService.java b/Clubber-Internal/src/main/java/com/clubber/domain/admin/service/InternalClubApproveService.java
new file mode 100644
index 000000000..92110f869
--- /dev/null
+++ b/Clubber-Internal/src/main/java/com/clubber/domain/admin/service/InternalClubApproveService.java
@@ -0,0 +1,20 @@
+package com.clubber.domain.admin.service;
+
+import com.clubber.domain.admin.dto.PendingAdminInfoResponse;
+import com.clubber.domain.domains.admin.domain.PendingAdminInfo;
+import com.clubber.domain.domains.admin.repository.PendingAdminInfoRepository;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+@RequiredArgsConstructor
+public class InternalClubApproveService {
+ private final PendingAdminInfoRepository pendingAdminInfoRepository;
+
+ public List getPendingAdminInfos() {
+ List pendingAdminInfos = pendingAdminInfoRepository.findByIsApproved(false);
+ return pendingAdminInfos.stream().map(PendingAdminInfoResponse::of).toList();
+ }
+}
diff --git a/Clubber-Internal/src/main/java/com/clubber/domain/internaladmin/controller/AdminAuthController.java b/Clubber-Internal/src/main/java/com/clubber/domain/internaladmin/controller/AdminAuthController.java
new file mode 100644
index 000000000..306fa7e31
--- /dev/null
+++ b/Clubber-Internal/src/main/java/com/clubber/domain/internaladmin/controller/AdminAuthController.java
@@ -0,0 +1,20 @@
+package com.clubber.domain.internaladmin.controller;
+
+import com.clubber.domain.internaladmin.dto.InternalAdminLoginRequest;
+import com.clubber.domain.internaladmin.dto.InternalAdminTokenResponse;
+import com.clubber.domain.internaladmin.service.InternalAdminAuthService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+@RestController
+@RequiredArgsConstructor
+@RequestMapping("/internal/auth")
+public class AdminAuthController {
+
+ private final InternalAdminAuthService internalAdminAuthService;
+
+ @PostMapping("/login")
+ public InternalAdminTokenResponse login(@RequestBody InternalAdminLoginRequest request) {
+ return internalAdminAuthService.login(request);
+ }
+}
diff --git a/Clubber-Internal/src/main/java/com/clubber/domain/internaladmin/domain/InternalAdmin.java b/Clubber-Internal/src/main/java/com/clubber/domain/internaladmin/domain/InternalAdmin.java
new file mode 100644
index 000000000..9a5ef3897
--- /dev/null
+++ b/Clubber-Internal/src/main/java/com/clubber/domain/internaladmin/domain/InternalAdmin.java
@@ -0,0 +1,19 @@
+package com.clubber.domain.internaladmin.domain;
+
+import jakarta.persistence.Entity;
+import jakarta.persistence.GeneratedValue;
+import jakarta.persistence.Id;
+import lombok.AccessLevel;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+
+@Getter
+@Entity
+@NoArgsConstructor(access = AccessLevel.PROTECTED)
+public class InternalAdmin {
+ @Id
+ @GeneratedValue
+ private Long id;
+ private String username;
+ private String password;
+}
diff --git a/Clubber-Internal/src/main/java/com/clubber/domain/internaladmin/dto/InternalAdminLoginRequest.java b/Clubber-Internal/src/main/java/com/clubber/domain/internaladmin/dto/InternalAdminLoginRequest.java
new file mode 100644
index 000000000..45e9e98a2
--- /dev/null
+++ b/Clubber-Internal/src/main/java/com/clubber/domain/internaladmin/dto/InternalAdminLoginRequest.java
@@ -0,0 +1,7 @@
+package com.clubber.domain.internaladmin.dto;
+
+public record InternalAdminLoginRequest(
+ String username,
+ String password
+) {
+}
diff --git a/Clubber-Internal/src/main/java/com/clubber/domain/internaladmin/dto/InternalAdminTokenResponse.java b/Clubber-Internal/src/main/java/com/clubber/domain/internaladmin/dto/InternalAdminTokenResponse.java
new file mode 100644
index 000000000..fdbe2224e
--- /dev/null
+++ b/Clubber-Internal/src/main/java/com/clubber/domain/internaladmin/dto/InternalAdminTokenResponse.java
@@ -0,0 +1,6 @@
+package com.clubber.domain.internaladmin.dto;
+
+public record InternalAdminTokenResponse(
+ String accessToken
+) {
+}
diff --git a/Clubber-Internal/src/main/java/com/clubber/domain/internaladmin/repository/InternalAdminRepository.java b/Clubber-Internal/src/main/java/com/clubber/domain/internaladmin/repository/InternalAdminRepository.java
new file mode 100644
index 000000000..9a0de045f
--- /dev/null
+++ b/Clubber-Internal/src/main/java/com/clubber/domain/internaladmin/repository/InternalAdminRepository.java
@@ -0,0 +1,8 @@
+package com.clubber.domain.internaladmin.repository;
+
+import com.clubber.domain.internaladmin.domain.InternalAdmin;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+public interface InternalAdminRepository extends JpaRepository {
+ InternalAdmin findByUsername(String username);
+}
diff --git a/Clubber-Internal/src/main/java/com/clubber/domain/internaladmin/service/InternalAdminAuthService.java b/Clubber-Internal/src/main/java/com/clubber/domain/internaladmin/service/InternalAdminAuthService.java
new file mode 100644
index 000000000..61c20399c
--- /dev/null
+++ b/Clubber-Internal/src/main/java/com/clubber/domain/internaladmin/service/InternalAdminAuthService.java
@@ -0,0 +1,30 @@
+package com.clubber.domain.internaladmin.service;
+
+import com.clubber.domain.internaladmin.dto.InternalAdminLoginRequest;
+import com.clubber.domain.internaladmin.dto.InternalAdminTokenResponse;
+import com.clubber.domain.domains.admin.exception.AdminLoginFailedException;
+import com.clubber.domain.internaladmin.domain.InternalAdmin;
+import com.clubber.domain.internaladmin.repository.InternalAdminRepository;
+import com.clubber.global.jwt.AccountRole;
+import com.clubber.global.jwt.JwtTokenUtil;
+import lombok.RequiredArgsConstructor;
+import org.springframework.security.crypto.password.PasswordEncoder;
+import org.springframework.stereotype.Service;
+
+@Service
+@RequiredArgsConstructor
+public class InternalAdminAuthService {
+ private final PasswordEncoder encoder;
+ private final InternalAdminRepository internalAdminRepository;
+ private final JwtTokenUtil jwtTokenUtil;
+
+ public InternalAdminTokenResponse login(InternalAdminLoginRequest request) {
+ InternalAdmin internalAdmin = internalAdminRepository.findByUsername(request.username());
+ String password = internalAdmin.getPassword();
+ if (!encoder.matches(request.password(), password)) {
+ throw AdminLoginFailedException.EXCEPTION;
+ }
+ String accessToken = jwtTokenUtil.generateAccessToken(internalAdmin.getId(), AccountRole.SUPER_ADMIN);
+ return new InternalAdminTokenResponse(accessToken);
+ }
+}
diff --git a/Clubber-Internal/src/main/java/com/clubber/domain/report/controller/ReportController.java b/Clubber-Internal/src/main/java/com/clubber/domain/report/controller/ReportController.java
new file mode 100644
index 000000000..8d65a4240
--- /dev/null
+++ b/Clubber-Internal/src/main/java/com/clubber/domain/report/controller/ReportController.java
@@ -0,0 +1,57 @@
+package com.clubber.domain.report.controller;
+
+import com.clubber.common.vo.enums.EnumMapperVO;
+import com.clubber.domain.domains.report.vo.GetOneReportResponse;
+import com.clubber.domain.report.dto.GetNextAlwaysReportRequest;
+import com.clubber.domain.report.dto.GetOneReportDetailResponse;
+import com.clubber.domain.report.dto.PutReportRequest;
+import com.clubber.domain.report.service.ReportService;
+import com.clubber.global.common.page.PageResponse;
+import com.clubber.global.common.slice.SliceResponse;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.validation.Valid;
+import java.util.List;
+import lombok.RequiredArgsConstructor;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.web.PageableDefault;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping("/internal/reports")
+@RequiredArgsConstructor
+@Tag(name = "[리뷰 신고]")
+public class ReportController {
+
+ private final ReportService reportService;
+
+ @Operation(summary = "신고 리뷰 목록 조회")
+ @GetMapping("")
+ public PageResponse getReviewReports(
+ @PageableDefault(size = 10) Pageable pageable) {
+ return reportService.getReviewReports(pageable);
+ }
+
+ @Operation(summary = "신고 리뷰 - 상세 조회")
+ @PostMapping("/next-always")
+ public SliceResponse getReportList(@RequestBody
+ GetNextAlwaysReportRequest request) {
+ return reportService.getNextReport(request);
+ }
+
+ @Operation(summary = "리뷰 신고 승인/거절")
+ @PostMapping
+ public void putReportStatus(@RequestBody @Valid PutReportRequest request) {
+ reportService.postReportStatus(request);
+ }
+
+ @Operation(summary = "리뷰 처리 상태 목록")
+ @GetMapping(value = "/status")
+ public List getReportStatus() {
+ return reportService.getReportStatus();
+ }
+}
diff --git a/Clubber-Internal/src/main/java/com/clubber/domain/report/dto/GetNextAlwaysReportRequest.java b/Clubber-Internal/src/main/java/com/clubber/domain/report/dto/GetNextAlwaysReportRequest.java
new file mode 100644
index 000000000..0d0d31b83
--- /dev/null
+++ b/Clubber-Internal/src/main/java/com/clubber/domain/report/dto/GetNextAlwaysReportRequest.java
@@ -0,0 +1,10 @@
+package com.clubber.domain.report.dto;
+
+import jakarta.validation.constraints.NotNull;
+
+public record GetNextAlwaysReportRequest (
+ @NotNull(message = "리뷰 id를 입력해주세요")
+ Long reviewId,
+ Long nowReportId
+){
+}
diff --git a/Clubber-Internal/src/main/java/com/clubber/domain/report/dto/GetOneReportDetailResponse.java b/Clubber-Internal/src/main/java/com/clubber/domain/report/dto/GetOneReportDetailResponse.java
new file mode 100644
index 000000000..cd3e4c580
--- /dev/null
+++ b/Clubber-Internal/src/main/java/com/clubber/domain/report/dto/GetOneReportDetailResponse.java
@@ -0,0 +1,53 @@
+package com.clubber.domain.report.dto;
+
+import com.clubber.domain.domains.report.domain.Report;
+import io.swagger.v3.oas.annotations.media.Schema;
+import java.time.LocalDateTime;
+import lombok.AccessLevel;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Getter;
+
+@Getter
+@Builder(access = AccessLevel.PRIVATE)
+@AllArgsConstructor(access = AccessLevel.PRIVATE)
+public class GetOneReportDetailResponse {
+
+ @Schema(description = "신고 id", example = "12")
+ private final Long reportId;
+
+ @Schema(description = "동아리명", example = "클러버")
+ private final String clubName;
+
+ @Schema(description = "작성자", example = "홍길동")
+ private final String writer;
+
+ @Schema(description = "리뷰 id", example = "1")
+ private final Long reviewId;
+
+ @Schema(description = "리뷰 내용", example = "좋아요")
+ private final String content;
+
+ @Schema(description = "신고사유", example = "허위 정보")
+ private final String reportReason;
+
+ @Schema(description = "구체사유", example = "해당 동아리와 관련없는 내용입니다.")
+ private final String detailReason;
+
+ @Schema(description = "신고 일자", example = "2025-07-06T10:00:00")
+ private final LocalDateTime reportedAt;
+
+ public static GetOneReportDetailResponse from(Report report) {
+ return GetOneReportDetailResponse.builder()
+ .reportId(report.getId())
+ .clubName(report.getReview().getClub().getName())
+ .writer(report.getReview().getUser().getEmail())
+ .reviewId(report.getReview().getId())
+ .content(report.getReview().getContent())
+ .reportReason(report.getReportReason().getTitle())
+ .detailReason(report.getDetailReason())
+ .reportedAt(report.getCreatedAt())
+ .build();
+ }
+
+}
diff --git a/Clubber-Internal/src/main/java/com/clubber/domain/report/dto/GetOneReportResponse.java b/Clubber-Internal/src/main/java/com/clubber/domain/report/dto/GetOneReportResponse.java
new file mode 100644
index 000000000..dc017e286
--- /dev/null
+++ b/Clubber-Internal/src/main/java/com/clubber/domain/report/dto/GetOneReportResponse.java
@@ -0,0 +1,45 @@
+package com.clubber.domain.report.dto;
+
+import com.clubber.domain.domains.report.domain.Report;
+import io.swagger.v3.oas.annotations.media.Schema;
+import java.time.LocalDateTime;
+import lombok.AccessLevel;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Getter;
+
+@Getter
+@Builder(access = AccessLevel.PRIVATE)
+@AllArgsConstructor(access = AccessLevel.PRIVATE)
+public class GetOneReportResponse {
+
+ @Schema(description = "리뷰 id", example = "1")
+ private final Long reviewId;
+
+ @Schema(description = "동아리명", example = "클러버")
+ private final String clubName;
+
+ @Schema(description = "신고 횟수", example = "2")
+ private final Integer reportedNum;
+
+ @Schema(description = "리뷰 내용", example = "좋아요")
+ private final String content;
+
+ @Schema(description = "신고사유", example = "허위 정보")
+ private final String reportReason;
+
+ @Schema(description = "신고일", example = "2025-07-06T10:00:00")
+ private final LocalDateTime reportedAt;
+
+
+ public static GetOneReportResponse of(Report report, Integer reportedNum) {
+ return GetOneReportResponse.builder()
+ .reviewId(report.getReview().getId())
+ .clubName(report.getReview().getClub().getName())
+ .reportedNum(reportedNum)
+ .content(report.getReview().getContent())
+ .reportReason(report.getReportReason().getTitle())
+ .reportedAt(report.getCreatedAt())
+ .build();
+ }
+}
diff --git a/Clubber-Internal/src/main/java/com/clubber/domain/report/dto/PutReportRequest.java b/Clubber-Internal/src/main/java/com/clubber/domain/report/dto/PutReportRequest.java
new file mode 100644
index 000000000..e9629568d
--- /dev/null
+++ b/Clubber-Internal/src/main/java/com/clubber/domain/report/dto/PutReportRequest.java
@@ -0,0 +1,15 @@
+package com.clubber.domain.report.dto;
+
+
+import com.clubber.domain.domains.report.domain.ReportStatus;
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotNull;
+
+public record PutReportRequest (
+ @NotNull(message = "리뷰 id를 입력해주세요")
+ Long reviewId,
+ @NotNull
+ @Schema(description = "승인/거절", example = "APPROVED")
+ ReportStatus reportStatus
+) {
+}
\ No newline at end of file
diff --git a/Clubber-Internal/src/main/java/com/clubber/domain/report/service/ReportService.java b/Clubber-Internal/src/main/java/com/clubber/domain/report/service/ReportService.java
new file mode 100644
index 000000000..d23497fc8
--- /dev/null
+++ b/Clubber-Internal/src/main/java/com/clubber/domain/report/service/ReportService.java
@@ -0,0 +1,73 @@
+package com.clubber.domain.report.service;
+
+
+import com.clubber.common.mapper.enums.EnumMapper;
+import com.clubber.common.vo.enums.EnumMapperVO;
+import com.clubber.domain.domains.report.domain.Report;
+import com.clubber.domain.domains.report.domain.ReportStatus;
+import com.clubber.domain.domains.report.implement.ReportReader;
+import com.clubber.domain.domains.report.implement.ReportValidator;
+import com.clubber.domain.domains.report.vo.GetOneReportResponse;
+import com.clubber.domain.domains.review.domain.Review;
+import com.clubber.domain.domains.review.implement.ReviewReader;
+import com.clubber.domain.domains.review.implement.ReviewValidator;
+import com.clubber.domain.report.dto.GetNextAlwaysReportRequest;
+import com.clubber.domain.report.dto.GetOneReportDetailResponse;
+import com.clubber.domain.report.dto.PutReportRequest;
+import com.clubber.global.common.page.PageResponse;
+import com.clubber.global.common.slice.SliceResponse;
+import com.clubber.global.util.SliceUtil;
+import java.util.List;
+import lombok.RequiredArgsConstructor;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+@Service
+@RequiredArgsConstructor
+public class ReportService {
+
+ private final ReportReader reportReader;
+ private final ReviewReader reviewReader;
+ private final ReviewValidator reviewValidator;
+ private final ReportValidator reportValidator;
+ private final EnumMapper enumMapper;
+
+ @Transactional(readOnly = true)
+ public PageResponse getReviewReports(Pageable pageable) {
+ Page reports = reportReader.findReportsPage(pageable);
+ return PageResponse.of(reports);
+ }
+
+ @Transactional(readOnly = true)
+ public SliceResponse getNextReport(
+ GetNextAlwaysReportRequest request) {
+ List alwaysNextReports = reportReader.findAlwaysNextReport(request.nowReportId(),
+ request.reviewId());
+ List reportResponses = alwaysNextReports.stream()
+ .map(GetOneReportDetailResponse::from)
+ .toList();
+
+ return SliceUtil.valueOf(reportResponses, Pageable.ofSize(1));
+ }
+
+ @Transactional
+ public void postReportStatus(PutReportRequest request) {
+ Review review = reviewReader.findById(request.reviewId());
+ reviewValidator.validateReviewStatus(review);
+ reportValidator.hasPendingReport(review);
+
+ if (request.reportStatus() == ReportStatus.APPROVED) {
+ review.hide();
+ }
+
+ reportReader.findByReviewId(review.getId())
+ .forEach(report -> report.changeStatus(request.reportStatus()));
+ }
+
+ public List getReportStatus() {
+ return enumMapper.get("ReportStatus");
+ }
+
+}
diff --git a/Clubber-Internal/src/main/java/com/clubber/global/common/page/PageResponse.java b/Clubber-Internal/src/main/java/com/clubber/global/common/page/PageResponse.java
new file mode 100644
index 000000000..115f4c635
--- /dev/null
+++ b/Clubber-Internal/src/main/java/com/clubber/global/common/page/PageResponse.java
@@ -0,0 +1,23 @@
+package com.clubber.global.common.page;
+
+import java.util.List;
+import org.springframework.data.domain.Page;
+
+public record PageResponse(
+ List content,
+ int page,
+ int size,
+ long totalElements,
+ int totalPages,
+ boolean hasNextPage) {
+
+ public static PageResponse of(Page page) {
+ return new PageResponse<>(
+ page.getContent(),
+ page.getNumber() + 1,
+ page.getNumberOfElements(),
+ page.getTotalElements(),
+ page.getTotalPages(),
+ page.hasNext());
+ }
+}
diff --git a/Clubber-Internal/src/main/java/com/clubber/global/common/slice/SliceResponse.java b/Clubber-Internal/src/main/java/com/clubber/global/common/slice/SliceResponse.java
new file mode 100644
index 000000000..8f1ad545c
--- /dev/null
+++ b/Clubber-Internal/src/main/java/com/clubber/global/common/slice/SliceResponse.java
@@ -0,0 +1,13 @@
+package com.clubber.global.common.slice;
+
+import java.util.List;
+
+public record SliceResponse(List content, long size, boolean hasNext) {
+
+ public static SliceResponse of(List content, long size, boolean hasNext) {
+ return new SliceResponse<>(
+ content,
+ size,
+ hasNext);
+ }
+}
diff --git a/Clubber-Internal/src/main/java/com/clubber/global/config/enums/EnumConfig.java b/Clubber-Internal/src/main/java/com/clubber/global/config/enums/EnumConfig.java
new file mode 100644
index 000000000..1a3353278
--- /dev/null
+++ b/Clubber-Internal/src/main/java/com/clubber/global/config/enums/EnumConfig.java
@@ -0,0 +1,18 @@
+package com.clubber.global.config.enums;
+
+
+import com.clubber.common.mapper.enums.EnumMapper;
+import com.clubber.domain.domains.report.domain.ReportStatus;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+public class EnumConfig {
+
+ @Bean
+ public EnumMapper getEnumMapper() {
+ final EnumMapper enumMapper = new EnumMapper();
+ enumMapper.put("ReportStatus", ReportStatus.class);
+ return enumMapper;
+ }
+}
diff --git a/Clubber-Internal/src/main/java/com/clubber/global/config/querydsl/QueryDslConfig.java b/Clubber-Internal/src/main/java/com/clubber/global/config/querydsl/QueryDslConfig.java
new file mode 100644
index 000000000..bf28a7095
--- /dev/null
+++ b/Clubber-Internal/src/main/java/com/clubber/global/config/querydsl/QueryDslConfig.java
@@ -0,0 +1,19 @@
+package com.clubber.global.config.querydsl;
+
+import com.querydsl.jpa.impl.JPAQueryFactory;
+import jakarta.persistence.EntityManager;
+import jakarta.persistence.PersistenceContext;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+public class QueryDslConfig {
+
+ @PersistenceContext
+ private EntityManager entityManager;
+
+ @Bean
+ public JPAQueryFactory jpaQueryFactory() {
+ return new JPAQueryFactory(entityManager);
+ }
+}
diff --git a/Clubber-Internal/src/main/java/com/clubber/global/config/response/GlobalExceptionHandler.java b/Clubber-Internal/src/main/java/com/clubber/global/config/response/GlobalExceptionHandler.java
new file mode 100644
index 000000000..541defba7
--- /dev/null
+++ b/Clubber-Internal/src/main/java/com/clubber/global/config/response/GlobalExceptionHandler.java
@@ -0,0 +1,91 @@
+package com.clubber.global.config.response;
+
+import com.clubber.common.dto.ErrorResponse;
+import com.clubber.common.exception.BaseErrorCode;
+import com.clubber.common.exception.BaseException;
+import com.clubber.common.exception.ErrorReason;
+import com.clubber.common.exception.GlobalErrorCode;
+import jakarta.servlet.http.HttpServletRequest;
+import lombok.RequiredArgsConstructor;
+import lombok.SneakyThrows;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.HttpStatusCode;
+import org.springframework.http.ResponseEntity;
+import org.springframework.validation.FieldError;
+import org.springframework.web.bind.MethodArgumentNotValidException;
+import org.springframework.web.bind.annotation.ExceptionHandler;
+import org.springframework.web.bind.annotation.RestControllerAdvice;
+import org.springframework.web.context.request.ServletWebRequest;
+import org.springframework.web.context.request.WebRequest;
+import org.springframework.web.method.annotation.MethodArgumentTypeMismatchException;
+import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler;
+
+import java.util.List;
+
+@RestControllerAdvice
+@Slf4j
+@RequiredArgsConstructor
+public class GlobalExceptionHandler extends ResponseEntityExceptionHandler {
+
+ @ExceptionHandler(BaseException.class)
+ public ResponseEntity handleBaseException(
+ BaseException e, HttpServletRequest request) {
+ BaseErrorCode code = e.getErrorCode();
+ ErrorReason errorReason = code.getErrorReason();
+ ErrorResponse errorResponse = new ErrorResponse(errorReason,
+ request.getRequestURL().toString());
+ return ResponseEntity.status(HttpStatus.valueOf(errorReason.getStatus()))
+ .body(errorResponse);
+ }
+
+ @Override
+ protected ResponseEntity