From 62ca9c20e8e201bc7a616508cc31ac3151bda022 Mon Sep 17 00:00:00 2001 From: zeoueon Date: Fri, 16 Jan 2026 00:22:18 +0900 Subject: [PATCH 1/5] =?UTF-8?q?[Feat]=20=EB=A7=A4=EC=B9=AD=20=EC=9A=94?= =?UTF-8?q?=EC=B2=AD=20=EC=97=94=ED=8B=B0=ED=8B=B0=20=EC=84=A4=EA=B3=84=20?= =?UTF-8?q?=EB=B0=8F=20Enum=20=EC=A0=95=EC=9D=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - BaseEntity를 상속받는 Matching 엔티티 구현 - MatchingRequestType, MatchingStatus Enum 정의 --- .../nect/core/entity/matching/Matching.java | 59 +++++++++++++++++++ .../matching/enums/MatchingRequestType.java | 6 ++ .../entity/matching/enums/MatchingStatus.java | 9 +++ 3 files changed, 74 insertions(+) create mode 100644 nect-core/src/main/java/com/nect/core/entity/matching/Matching.java create mode 100644 nect-core/src/main/java/com/nect/core/entity/matching/enums/MatchingRequestType.java create mode 100644 nect-core/src/main/java/com/nect/core/entity/matching/enums/MatchingStatus.java diff --git a/nect-core/src/main/java/com/nect/core/entity/matching/Matching.java b/nect-core/src/main/java/com/nect/core/entity/matching/Matching.java new file mode 100644 index 0000000..db54541 --- /dev/null +++ b/nect-core/src/main/java/com/nect/core/entity/matching/Matching.java @@ -0,0 +1,59 @@ +package com.nect.core.entity.matching; + +import com.nect.core.entity.BaseEntity; +import com.nect.core.entity.matching.enums.MatchingRequestType; +import com.nect.core.entity.matching.enums.MatchingStatus; +import jakarta.persistence.*; +import lombok.*; + +import java.time.LocalDateTime; + +@Entity +@Table(name = "matching") +@Getter +@NoArgsConstructor(access = AccessLevel.PROTECTED) +public class Matching extends BaseEntity { + + @Builder + public Matching( + Long requestUserId, + Long targetUserId, + Long projectId, + MatchingRequestType requestType + ){ + this.requestUserId = requestUserId; + this.targetUserId = targetUserId; + this.projectId = projectId; + this.requestType = requestType; + this.matchingStatus = MatchingStatus.PENDING; + } + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column(name = "request_user_id", nullable = false) + private Long requestUserId; + + @Column(name = "target_user_id", nullable = false) + private Long targetUserId; + + @Column(name = "project_id", nullable = false) + private Long projectId; + + @Enumerated(EnumType.STRING) + @Column(name = "request_type", nullable = false) + private MatchingRequestType requestType; + + @Enumerated(EnumType.STRING) + @Column(name = "matching_status", nullable = false) + private MatchingStatus matchingStatus; + + @Column(name = "expires_at") + private LocalDateTime expiresAt; + + @PrePersist + public void calculateExpiration() { + this.expiresAt = LocalDateTime.now().plusHours(24); + } +} diff --git a/nect-core/src/main/java/com/nect/core/entity/matching/enums/MatchingRequestType.java b/nect-core/src/main/java/com/nect/core/entity/matching/enums/MatchingRequestType.java new file mode 100644 index 0000000..227ada6 --- /dev/null +++ b/nect-core/src/main/java/com/nect/core/entity/matching/enums/MatchingRequestType.java @@ -0,0 +1,6 @@ +package com.nect.core.entity.matching.enums; + +public enum MatchingRequestType { + USER_TO_PROJECT, // 회원 -> 프로젝트 요청 + PROJECT_TO_USER // 프로젝트(리더) -> 요청 +} diff --git a/nect-core/src/main/java/com/nect/core/entity/matching/enums/MatchingStatus.java b/nect-core/src/main/java/com/nect/core/entity/matching/enums/MatchingStatus.java new file mode 100644 index 0000000..40ae182 --- /dev/null +++ b/nect-core/src/main/java/com/nect/core/entity/matching/enums/MatchingStatus.java @@ -0,0 +1,9 @@ +package com.nect.core.entity.matching.enums; + +public enum MatchingStatus { + PENDING, // 진행 + ACCEPTED, // 수락 + REJECTED, // 거절 + EXPIRED, // 만료 + CANCELED // 취소 +} From 47442d3b74ef22a78524d5422615764832b2e233 Mon Sep 17 00:00:00 2001 From: zeoueon Date: Fri, 16 Jan 2026 00:23:43 +0900 Subject: [PATCH 2/5] =?UTF-8?q?[Feat]=20=EB=A7=A4=EC=B9=AD=20=EC=9A=94?= =?UTF-8?q?=EC=B2=AD/=EC=9D=91=EB=8B=B5=20DTO=20=EC=A0=95=EC=9D=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../nect/api/matching/dto/MatchingReqDTO.java | 16 ++++++++++++++++ .../nect/api/matching/dto/MatchingResDTO.java | 19 +++++++++++++++++++ 2 files changed, 35 insertions(+) create mode 100644 nect-api/src/main/java/com/nect/api/matching/dto/MatchingReqDTO.java create mode 100644 nect-api/src/main/java/com/nect/api/matching/dto/MatchingResDTO.java diff --git a/nect-api/src/main/java/com/nect/api/matching/dto/MatchingReqDTO.java b/nect-api/src/main/java/com/nect/api/matching/dto/MatchingReqDTO.java new file mode 100644 index 0000000..43bcdd9 --- /dev/null +++ b/nect-api/src/main/java/com/nect/api/matching/dto/MatchingReqDTO.java @@ -0,0 +1,16 @@ +package com.nect.api.matching.dto; + +import com.nect.core.entity.matching.enums.MatchingRequestType; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; + +public class MatchingReqDTO { + + public record matchingReqDTO( + Long targetUserId, + @NotNull + Long projectId, + @NotNull + MatchingRequestType requestType + ){} +} diff --git a/nect-api/src/main/java/com/nect/api/matching/dto/MatchingResDTO.java b/nect-api/src/main/java/com/nect/api/matching/dto/MatchingResDTO.java new file mode 100644 index 0000000..bf17667 --- /dev/null +++ b/nect-api/src/main/java/com/nect/api/matching/dto/MatchingResDTO.java @@ -0,0 +1,19 @@ +package com.nect.api.matching.dto; + +import com.nect.core.entity.matching.enums.MatchingRequestType; +import com.nect.core.entity.matching.enums.MatchingStatus; + +import java.time.LocalDateTime; + +public class MatchingResDTO { + + public record matchingResDTO( + Long id, + Long requestUserId, + Long targetUserId, + Long projectId, + MatchingStatus matchingStatus, + MatchingRequestType requestType, + LocalDateTime expiresAt + ){} +} From 585e44001bf8fe0c3c859dccadaf1930caaa33ba Mon Sep 17 00:00:00 2001 From: zeoueon Date: Fri, 16 Jan 2026 00:27:28 +0900 Subject: [PATCH 3/5] =?UTF-8?q?[Feat]=20Matching=20=EB=8F=84=EB=A9=94?= =?UTF-8?q?=EC=9D=B8=20=EA=B4=80=EB=A0=A8=20=EA=B5=AC=EC=A1=B0=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Matching 도메인의 컨트롤러, 서비스, 레파지토리 클래스 생성 - Matching 도메인 전용 ErrorCode, Exception 정의 --- .../matching/controller/MatchingController.java | 9 +++++++++ .../matching/enums/code/MatchingErrorCode.java | 17 +++++++++++++++++ .../matching/exception/MatchingException.java | 11 +++++++++++ .../api/matching/service/MatchingService.java | 9 +++++++++ .../repository/matching/MatchingRepository.java | 7 +++++++ 5 files changed, 53 insertions(+) create mode 100644 nect-api/src/main/java/com/nect/api/matching/controller/MatchingController.java create mode 100644 nect-api/src/main/java/com/nect/api/matching/enums/code/MatchingErrorCode.java create mode 100644 nect-api/src/main/java/com/nect/api/matching/exception/MatchingException.java create mode 100644 nect-api/src/main/java/com/nect/api/matching/service/MatchingService.java create mode 100644 nect-core/src/main/java/com/nect/core/repository/matching/MatchingRepository.java diff --git a/nect-api/src/main/java/com/nect/api/matching/controller/MatchingController.java b/nect-api/src/main/java/com/nect/api/matching/controller/MatchingController.java new file mode 100644 index 0000000..31e95ef --- /dev/null +++ b/nect-api/src/main/java/com/nect/api/matching/controller/MatchingController.java @@ -0,0 +1,9 @@ +package com.nect.api.matching.controller; + +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequiredArgsConstructor +public class MatchingController { +} diff --git a/nect-api/src/main/java/com/nect/api/matching/enums/code/MatchingErrorCode.java b/nect-api/src/main/java/com/nect/api/matching/enums/code/MatchingErrorCode.java new file mode 100644 index 0000000..ee6f13c --- /dev/null +++ b/nect-api/src/main/java/com/nect/api/matching/enums/code/MatchingErrorCode.java @@ -0,0 +1,17 @@ +package com.nect.api.matching.enums.code; + +import com.nect.api.global.code.ResponseCode; +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public enum MatchingErrorCode implements ResponseCode { + + MATCHING_APPLY_COUNT_EXCEEDED("M400_1", "이미 매칭 대기 중인 프로젝트가 있습니다."), + MATCHING_INVITE_COUNT_EXCEEDED("M400_2", "해당 프로젝트의 매칭 신청 가능 수를 초과하였습니다."), + ; + + private final String statusCode; + private final String message; +} \ No newline at end of file diff --git a/nect-api/src/main/java/com/nect/api/matching/exception/MatchingException.java b/nect-api/src/main/java/com/nect/api/matching/exception/MatchingException.java new file mode 100644 index 0000000..024d2fc --- /dev/null +++ b/nect-api/src/main/java/com/nect/api/matching/exception/MatchingException.java @@ -0,0 +1,11 @@ +package com.nect.api.matching.exception; + +import com.nect.api.global.code.ResponseCode; +import com.nect.api.global.exception.CustomException; + +public class MatchingException extends CustomException { + + public MatchingException(ResponseCode code) { + super(code); + } +} diff --git a/nect-api/src/main/java/com/nect/api/matching/service/MatchingService.java b/nect-api/src/main/java/com/nect/api/matching/service/MatchingService.java new file mode 100644 index 0000000..bb31c85 --- /dev/null +++ b/nect-api/src/main/java/com/nect/api/matching/service/MatchingService.java @@ -0,0 +1,9 @@ +package com.nect.api.matching.service; + +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +@Service +@RequiredArgsConstructor +public class MatchingService { +} diff --git a/nect-core/src/main/java/com/nect/core/repository/matching/MatchingRepository.java b/nect-core/src/main/java/com/nect/core/repository/matching/MatchingRepository.java new file mode 100644 index 0000000..d2c84b9 --- /dev/null +++ b/nect-core/src/main/java/com/nect/core/repository/matching/MatchingRepository.java @@ -0,0 +1,7 @@ +package com.nect.core.repository.matching; + +import com.nect.core.entity.matching.Matching; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface MatchingRepository extends JpaRepository { +} From 9c0ee8290fc80f2f1ef0dc41d0751d1166e761c6 Mon Sep 17 00:00:00 2001 From: zeoueon Date: Fri, 16 Jan 2026 21:48:01 +0900 Subject: [PATCH 4/5] =?UTF-8?q?[Style]=20Dto=20=EB=84=A4=EC=9D=B4=EB=B0=8D?= =?UTF-8?q?=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - DTO를 Dto로 네이밍 규칙에 따라 수정 --- .../dto/{MatchingReqDTO.java => MatchingReqDto.java} | 5 ++--- .../dto/{MatchingResDTO.java => MatchingResDto.java} | 4 ++-- 2 files changed, 4 insertions(+), 5 deletions(-) rename nect-api/src/main/java/com/nect/api/matching/dto/{MatchingReqDTO.java => MatchingReqDto.java} (73%) rename nect-api/src/main/java/com/nect/api/matching/dto/{MatchingResDTO.java => MatchingResDto.java} (87%) diff --git a/nect-api/src/main/java/com/nect/api/matching/dto/MatchingReqDTO.java b/nect-api/src/main/java/com/nect/api/matching/dto/MatchingReqDto.java similarity index 73% rename from nect-api/src/main/java/com/nect/api/matching/dto/MatchingReqDTO.java rename to nect-api/src/main/java/com/nect/api/matching/dto/MatchingReqDto.java index 43bcdd9..b1b0c7e 100644 --- a/nect-api/src/main/java/com/nect/api/matching/dto/MatchingReqDTO.java +++ b/nect-api/src/main/java/com/nect/api/matching/dto/MatchingReqDto.java @@ -1,12 +1,11 @@ package com.nect.api.matching.dto; import com.nect.core.entity.matching.enums.MatchingRequestType; -import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; -public class MatchingReqDTO { +public class MatchingReqDto { - public record matchingReqDTO( + public record matchingReqDto( Long targetUserId, @NotNull Long projectId, diff --git a/nect-api/src/main/java/com/nect/api/matching/dto/MatchingResDTO.java b/nect-api/src/main/java/com/nect/api/matching/dto/MatchingResDto.java similarity index 87% rename from nect-api/src/main/java/com/nect/api/matching/dto/MatchingResDTO.java rename to nect-api/src/main/java/com/nect/api/matching/dto/MatchingResDto.java index bf17667..3eb2aab 100644 --- a/nect-api/src/main/java/com/nect/api/matching/dto/MatchingResDTO.java +++ b/nect-api/src/main/java/com/nect/api/matching/dto/MatchingResDto.java @@ -5,9 +5,9 @@ import java.time.LocalDateTime; -public class MatchingResDTO { +public class MatchingResDto { - public record matchingResDTO( + public record matchingResDto( Long id, Long requestUserId, Long targetUserId, From 2c7d680159494905c73becff0a0f4b45b634c0d2 Mon Sep 17 00:00:00 2001 From: zeoueon Date: Fri, 16 Jan 2026 21:48:24 +0900 Subject: [PATCH 5/5] =?UTF-8?q?[Style]=20=ED=8C=8C=EC=9D=BC=20=EB=81=9D=20?= =?UTF-8?q?=EA=B0=9C=ED=96=89=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/nect/api/matching/enums/code/MatchingErrorCode.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nect-api/src/main/java/com/nect/api/matching/enums/code/MatchingErrorCode.java b/nect-api/src/main/java/com/nect/api/matching/enums/code/MatchingErrorCode.java index ee6f13c..c0602d7 100644 --- a/nect-api/src/main/java/com/nect/api/matching/enums/code/MatchingErrorCode.java +++ b/nect-api/src/main/java/com/nect/api/matching/enums/code/MatchingErrorCode.java @@ -14,4 +14,4 @@ public enum MatchingErrorCode implements ResponseCode { private final String statusCode; private final String message; -} \ No newline at end of file +}