diff --git a/linkareer-data-mapping-guide.md b/linkareer-data-mapping-guide.md new file mode 100644 index 00000000..c7bf496c --- /dev/null +++ b/linkareer-data-mapping-guide.md @@ -0,0 +1,226 @@ +# 링커리어 데이터 → Picklab DB 적재 AI 변환 가이드 + +링커리어에서 크롤링한 비정형 CSV 데이터를 Picklab DB 스키마에 맞게 변환할 때 AI에게 전달하는 기준 지침이다. + +--- + +## 입력 데이터 컬럼 (linkareer.csv) + +| 컬럼명 | 설명 | +|--------|------| +| `/상세링크` | 링커리어 상세 링크 | +| `활동유형` | 대외활동 / 공모전/해커톤 / 교육 / 강연/세미나 | +| `출처` | 링커리어 | +| `제목` | 활동 제목 | +| `주최기관` | 기관명 → **`organizer` 컬럼에 그대로 저장** (기업형태 판단에도 활용) | +| `기업형태` | 링커리어의 원본 분류 값 | +| `참여대상` | 링커리어의 원본 참여 대상 | +| `접수기간` | 예: `2026.02.25 ~ 2026.03.08` | +| `활동기간` | 예: `26.3 ~ 26.10` | +| `모집인원` | 예: `10명`, `00명` (00명은 인원 미정으로 처리) | +| `모임지역` | 링커리어의 지역 분류 | +| `홈페이지` | 외부 링크 | +| `공모분야` | 공모전 도메인 분류 (링커리어 자체 분류) | +| `활동분야` | 대외활동 분야 분류 | +| `비용/시상규모` | 교육 비용 또는 공모전 시상 금액 | +| `썸네일이미지` | 썸네일 URL | +| `상세이미지` | 상세 이미지 URL (`;`로 복수 구분) | +| `상세내용` | 활동 상세 설명 텍스트 | + +--- + +## 출력 필드별 변환 규칙 + +### 0. 주최기관명 (organizer) → `organizer` 컬럼 + +링커리어의 `주최기관` 값을 **그대로** `organizer` 컬럼(VARCHAR)에 저장한다. 변환 없음. + +예시: +- `(사)한국이스포츠협회` → `organizer = "(사)한국이스포츠협회"` +- `방송콘텐츠진흥재단` → `organizer = "방송콘텐츠진흥재단"` + +--- + +### 1. 활동유형 (ActivityType) + +| 링커리어 값 | Picklab 값 | +|------------|-----------| +| 대외활동 | `대외활동` | +| 공모전/해커톤 | `공모전` | +| 교육 | `교육` | +| 강연/세미나 | `강연/세미나` | + +--- + +### 2. 기업형태 (OrganizerType) → `organizer_type` 컬럼 + +링커리어의 `기업형태` 컬럼 값과 `주최기관` 기관명을 함께 보고 판단한다. + +| 링커리어 값 | Picklab DB 값 (`organizer_type`) | 비고 | +|------------|----------------------------------|------| +| 대기업 | `LARGE_CORPORATION` | | +| 중견기업 | `MEDIUM_CORPORATION` | | +| 중소기업 | `SMALL_CORPORATION` | | +| 공공기관/공기업 | `PUBLIC_ORGANIZATION` | | +| 외국계기업 | `FOREIGN_CORPORATION` | | +| 스타트업 | `STARTUP` | | +| 금융권 | `FINANCIAL_INSTITUTION` | | +| 병원 | `HOSPITAL` | | +| 기타 | `ETC` | | +| 비영리단체/협회/재단 | **기관명으로 판단** | 아래 규칙 적용 | + +**비영리단체/협회/재단 분리 규칙:** +- `주최기관` 이름에 **"재단"** 이 포함되면 → `NON_PROFIT` (재단 포함) +- 나머지는 → `NON_PROFIT` + +> 현재 `OrganizerType`에 재단/협회 세분화가 없으므로 모두 `NON_PROFIT`으로 통일한다. + +예시: +- `(사)한국이스포츠협회` → `NON_PROFIT` +- `(재)제천문화재단` → `NON_PROFIT` +- `방송콘텐츠진흥재단` → `NON_PROFIT` + +--- + +### 3. 참여대상 (TargetAudience) + +링커리어의 `참여대상` 컬럼을 아래 규칙으로 단일 값으로 변환한다. + +| 링커리어 값 | Picklab 값 | +|------------|-----------| +| `대학생` | `대학생` | +| `직장인/일반인` | `직장인 및 일반인` | +| `대상 제한 없음` | `대상 제한 없음` | +| `청소년` 포함 | `대상 제한 없음` | +| `청소년, 대학생` 등 복수 | `대상 제한 없음` | +| `대학생, 직장인/일반인` 등 복수 | `대상 제한 없음` | +| 비어 있음 (null) | `null` 로 적재 | + +**규칙 요약:** 참여 대상이 두 개 이상이거나 청소년이 포함된 경우, 대상 제한이 없는 것으로 간주하여 `대상 제한 없음`으로 설정한다. + +--- + +### 4. 활동분야 (ActivityField) — 대외활동 한정 + +링커리어의 `활동분야` 컬럼을 Picklab 분류로 변환한다. `;`로 구분된 복수 값은 각각 매핑 후 대표 값 하나를 선택하거나 복수 태그로 처리한다. + +| 링커리어 값 | Picklab 값 | +|------------|-----------| +| 서포터즈 | `서포터즈` | +| 마케터 | `마케터` | +| 멘토링 | `멘토링` | +| 기자단 | `기자단` | +| 봉사단-국내 | `국내봉사` | +| 해외봉사 | `해외봉사` | +| **해외탐방** | `해외봉사` (해외봉사와 동일하게 처리) | +| **강연** | `강연/세미나` | +| 기타 | `기타` | + +--- + +### 5. 모임지역 (MeetingRegion) + +| 링커리어 값 | Picklab 값 | +|------------|-----------| +| `지역 제한없음` | `지역 제한없음` | +| 서울 포함 (`서울 강남구`, `서울 종로구` 등) | `서울/인천` | +| 인천 포함 | `서울/인천` | +| 경기 포함 | `경기/강원` | +| 강원 포함 | `경기/강원` | +| 대전 포함 | `대전/세종/충남` | +| 충청 포함 | `대전/세종/충남` | +| 부산 포함 | `부산/대구/경상` | +| 대구 포함 | `부산/대구/경상` | +| 울산 포함 | `부산/대구/경상` | +| 경상 포함 | `부산/대구/경상` | +| 광주 포함 | `광주/전라` | +| 전라 포함 | `광주/전라` | +| 제주 포함 | `제주` | +| 해외 포함 | `해외` | +| 복수 지역이 포함된 경우 | `지역 제한없음` | + +--- + +### 6. 도메인 (Domain) — 공모전 한정 + +링커리어의 `공모분야` 컬럼 값과 `제목`, `상세내용`을 종합적으로 분석하여 Picklab 도메인으로 분류한다. + +**Picklab 도메인 목록:** +`SaaS`, `웹 (Web)`, `모바일 (App)`, `클라우드`, `AI`, `사물인터넷 (IoT)`, `교육`, `금융`, `게임 및 엔터테인먼트`, `생활과학 및 헬스케어`, `커머스`, `콘텐츠 및 소셜`, `교통 및 물류`, `AR 및 VR`, `전자기술 및 로보틱스`, `비즈니스 및 엔터프라이즈`, `기타` + +**링커리어 공모분야 참고 매핑:** + +| 링커리어 공모분야 | 우선 고려 Picklab 도메인 | +|-----------------|------------------------| +| 과학/공학 | `AI`, `전자기술 및 로보틱스`, `사물인터넷 (IoT)` 중 상세내용 보고 판단 | +| 기획/아이디어, 창업 | `비즈니스 및 엔터프라이즈` 또는 상세내용 보고 판단 | +| 사진/영상/UCC | `콘텐츠 및 소셜` | +| 문학/시나리오 | `콘텐츠 및 소셜` | +| 디자인/순수미술/공예 | `콘텐츠 및 소셜` | +| 캐릭터/만화/게임 | `게임 및 엔터테인먼트` | +| 네이밍/슬로건 | `콘텐츠 및 소셜` | +| 학술 | `교육` | +| 기타 | `기타` | + +**중요:** 공모분야가 위 목록에 없거나 맞는 도메인이 불분명한 경우 반드시 `기타`로 설정한다. 억지로 매핑하지 않는다. + +--- + +### 7. 시상규모 (PrizeRange) — 공모전 한정 + +링커리어의 `비용/시상규모` 컬럼에서 금액을 파싱하여 아래 기준으로 분류한다. + +| 조건 | Picklab 값 | +|------|-----------| +| 시상 금액 합계 또는 최고 상금이 **500만 원 미만** | `5백만원 미만` | +| 시상 금액 합계 또는 최고 상금이 **500만 원 이상 ~ 5,000만 원 미만** | `5백만원 이상` | +| 시상 금액 합계 또는 최고 상금이 **5,000만 원 이상** | `5천만원 이상` | +| 금액 없음 (`-`, 비어 있음, 파싱 불가) | `null` 로 적재 | + +금액 표기 예시 처리: +- `300만 원` → 300만 원 → `5백만원 미만` +- `1280만 원` → 1280만 원 → `5백만원 이상` +- `4000만 원` → 4000만 원 → `5백만원 이상` +- `1억 250만 원` → 1억 250만 원 → `5천만원 이상` +- `600억 원`, `800억 원` → `5천만원 이상` +- `-` → `null` + +--- + +### 8. 교육 온/오프라인 (OnOffline) — 교육 한정 + +**적재 제외.** 교육 활동의 온/오프라인 필터는 데이터 충족률이 낮아 이번 적재에서 제외한다. 해당 필드는 `null`로 유지한다. + +--- + +## 적재 제외 케이스 + +다음에 해당하는 row는 DB에 적재하지 않는다: + +- `활동유형`이 위 매핑 표에 없는 경우 +- `제목`이 비어 있는 경우 + +--- + +## 처리 예시 + +**입력:** +``` +활동유형: 공모전/해커톤 +제목: 2026 방콘진 혁신 방송 신기술 상용화 지원 공모 사업 +주최기관: 방송콘텐츠진흥재단 +기업형태: 비영리단체/협회/재단 +참여대상: 대학생, 직장인/일반인 +공모분야: 기획/아이디어; 과학/공학 +비용/시상규모: 4000만 원 +``` + +**출력:** +``` +활동유형: COMPETITION +organizer: "방송콘텐츠진흥재단" ← 주최기관 그대로 저장 +organizer_type: NON_PROFIT ← 기관명에 "재단" 포함이지만 enum은 NON_PROFIT 통일 +참여대상: ALL ← 복수 대상 → ALL +도메인: BUSINESS_ENTERPRISE ← 기획/아이디어 기반, 상세내용 보고 판단 +시상규모: 5백만원 이상 ← 4000만 원 → 500만~5000만 원 구간 +``` diff --git a/src/main/kotlin/picklab/backend/activity/application/mapper/ActivityCreateMapper.kt b/src/main/kotlin/picklab/backend/activity/application/mapper/ActivityCreateMapper.kt index 8e84de40..ac8ebf3d 100644 --- a/src/main/kotlin/picklab/backend/activity/application/mapper/ActivityCreateMapper.kt +++ b/src/main/kotlin/picklab/backend/activity/application/mapper/ActivityCreateMapper.kt @@ -21,6 +21,7 @@ fun ActivityCreateCommand.toEntity(activityGroup: ActivityGroup): Activity = ExternalActivity( title = title, organizer = organizer, + organizerType = organizerType, targetAudience = targetAudience, location = location, recruitmentStartDate = recruitmentStartDate, @@ -44,6 +45,7 @@ fun ActivityCreateCommand.toEntity(activityGroup: ActivityGroup): Activity = SeminarActivity( title = title, organizer = organizer, + organizerType = organizerType, targetAudience = targetAudience, location = location, recruitmentStartDate = recruitmentStartDate, @@ -66,6 +68,7 @@ fun ActivityCreateCommand.toEntity(activityGroup: ActivityGroup): Activity = EducationActivity( title = title, organizer = organizer, + organizerType = organizerType, targetAudience = targetAudience, location = location, recruitmentStartDate = recruitmentStartDate, @@ -91,6 +94,7 @@ fun ActivityCreateCommand.toEntity(activityGroup: ActivityGroup): Activity = CompetitionActivity( title = title, organizer = organizer, + organizerType = organizerType, targetAudience = targetAudience, recruitmentStartDate = recruitmentStartDate, recruitmentEndDate = recruitmentEndDate, diff --git a/src/main/kotlin/picklab/backend/activity/application/mapper/ActivityItemMapper.kt b/src/main/kotlin/picklab/backend/activity/application/mapper/ActivityItemMapper.kt index f8338863..f348bb49 100644 --- a/src/main/kotlin/picklab/backend/activity/application/mapper/ActivityItemMapper.kt +++ b/src/main/kotlin/picklab/backend/activity/application/mapper/ActivityItemMapper.kt @@ -18,6 +18,7 @@ fun ActivityView.withBookmark(isBookmarked: Boolean): ActivityItemWithBookmark { id, title, organization, + organizerType, startDate, category, jobTags, diff --git a/src/main/kotlin/picklab/backend/activity/application/model/ActivityCreateCommand.kt b/src/main/kotlin/picklab/backend/activity/application/model/ActivityCreateCommand.kt index 22887cf3..ccfb1f4c 100644 --- a/src/main/kotlin/picklab/backend/activity/application/model/ActivityCreateCommand.kt +++ b/src/main/kotlin/picklab/backend/activity/application/model/ActivityCreateCommand.kt @@ -16,7 +16,8 @@ sealed class ActivityCreateCommand( open val activityType: ActivityType, open val activityGroupId: Long, open val title: String, - open val organizer: OrganizerType, + open val organizer: String?, + open val organizerType: OrganizerType, open val targetAudience: ParticipantType, open val recruitmentStartDate: LocalDate, open val recruitmentEndDate: LocalDate?, @@ -37,7 +38,8 @@ sealed class ActivityCreateCommand( data class ExternalActivityCreateCommand( override val activityGroupId: Long, override val title: String, - override val organizer: OrganizerType, + override val organizer: String? = null, + override val organizerType: OrganizerType, override val targetAudience: ParticipantType, override val recruitmentStartDate: LocalDate, override val recruitmentEndDate: LocalDate?, @@ -60,6 +62,7 @@ data class ExternalActivityCreateCommand( activityGroupId = activityGroupId, title = title, organizer = organizer, + organizerType = organizerType, targetAudience = targetAudience, recruitmentStartDate = recruitmentStartDate, recruitmentEndDate = recruitmentEndDate, @@ -80,7 +83,8 @@ data class ExternalActivityCreateCommand( data class SeminarActivityCreateCommand( override val activityGroupId: Long, override val title: String, - override val organizer: OrganizerType, + override val organizer: String? = null, + override val organizerType: OrganizerType, override val targetAudience: ParticipantType, override val recruitmentStartDate: LocalDate, override val recruitmentEndDate: LocalDate?, @@ -102,6 +106,7 @@ data class SeminarActivityCreateCommand( activityGroupId = activityGroupId, title = title, organizer = organizer, + organizerType = organizerType, targetAudience = targetAudience, recruitmentStartDate = recruitmentStartDate, recruitmentEndDate = recruitmentEndDate, @@ -122,7 +127,8 @@ data class SeminarActivityCreateCommand( data class EducationActivityCreateCommand( override val activityGroupId: Long, override val title: String, - override val organizer: OrganizerType, + override val organizer: String? = null, + override val organizerType: OrganizerType, override val targetAudience: ParticipantType, override val recruitmentStartDate: LocalDate, override val recruitmentEndDate: LocalDate?, @@ -147,6 +153,7 @@ data class EducationActivityCreateCommand( activityGroupId = activityGroupId, title = title, organizer = organizer, + organizerType = organizerType, targetAudience = targetAudience, recruitmentStartDate = recruitmentStartDate, recruitmentEndDate = recruitmentEndDate, @@ -167,7 +174,8 @@ data class EducationActivityCreateCommand( data class CompetitionActivityCreateCommand( override val activityGroupId: Long, override val title: String, - override val organizer: OrganizerType, + override val organizer: String? = null, + override val organizerType: OrganizerType, override val targetAudience: ParticipantType, override val recruitmentStartDate: LocalDate, override val recruitmentEndDate: LocalDate?, @@ -190,6 +198,7 @@ data class CompetitionActivityCreateCommand( activityGroupId = activityGroupId, title = title, organizer = organizer, + organizerType = organizerType, targetAudience = targetAudience, recruitmentStartDate = recruitmentStartDate, recruitmentEndDate = recruitmentEndDate, diff --git a/src/main/kotlin/picklab/backend/activity/application/model/ActivityItemWithBookmark.kt b/src/main/kotlin/picklab/backend/activity/application/model/ActivityItemWithBookmark.kt index b43967a9..e041fcc4 100644 --- a/src/main/kotlin/picklab/backend/activity/application/model/ActivityItemWithBookmark.kt +++ b/src/main/kotlin/picklab/backend/activity/application/model/ActivityItemWithBookmark.kt @@ -6,7 +6,8 @@ import java.time.LocalDate data class ActivityItemWithBookmark( val id: Long, val title: String, - val organization: String, + val organization: String?, + val organizerType: String, val startDate: LocalDate, val category: String, val jobTags: List, diff --git a/src/main/kotlin/picklab/backend/activity/application/model/ActivitySearchCondition.kt b/src/main/kotlin/picklab/backend/activity/application/model/ActivitySearchCondition.kt index 3a26cbe6..6e7adb7e 100644 --- a/src/main/kotlin/picklab/backend/activity/application/model/ActivitySearchCondition.kt +++ b/src/main/kotlin/picklab/backend/activity/application/model/ActivitySearchCondition.kt @@ -14,7 +14,7 @@ import picklab.backend.job.domain.enums.JobDetail data class ActivitySearchCondition( val category: ActivityType, val jobTag: List?, - val organizer: List?, + val organizerType: List?, val target: List?, val field: List?, val location: List?, diff --git a/src/main/kotlin/picklab/backend/activity/application/model/ActivityView.kt b/src/main/kotlin/picklab/backend/activity/application/model/ActivityView.kt index d274ca5d..cc254dc0 100644 --- a/src/main/kotlin/picklab/backend/activity/application/model/ActivityView.kt +++ b/src/main/kotlin/picklab/backend/activity/application/model/ActivityView.kt @@ -6,7 +6,8 @@ import java.time.LocalDate interface ActivityView { val id: Long val title: String - val organization: String + val organization: String? + val organizerType: String val startDate: LocalDate val category: String val jobTags: List diff --git a/src/main/kotlin/picklab/backend/activity/domain/entity/Activity.kt b/src/main/kotlin/picklab/backend/activity/domain/entity/Activity.kt index b41c72ca..ea54c37f 100644 --- a/src/main/kotlin/picklab/backend/activity/domain/entity/Activity.kt +++ b/src/main/kotlin/picklab/backend/activity/domain/entity/Activity.kt @@ -39,10 +39,13 @@ abstract class Activity( @Column(name = "title", nullable = false, length = 50) @Comment("활동명") var title: String, - @Column(name = "organizer", nullable = false, length = 50) - @Enumerated(EnumType.STRING) + @Column(name = "organizer") @Comment("주최 기관/단체명") - var organizer: OrganizerType, + var organizer: String? = null, + @Column(name = "organizer_type", nullable = false, length = 50) + @Enumerated(EnumType.STRING) + @Comment("주최 기관 유형") + var organizerType: OrganizerType, @Column(name = "target_audience", nullable = false, length = 50) @Enumerated(EnumType.STRING) @Comment("참여대상") diff --git a/src/main/kotlin/picklab/backend/activity/domain/entity/CompetitionActivity.kt b/src/main/kotlin/picklab/backend/activity/domain/entity/CompetitionActivity.kt index ba54e17c..d4582278 100644 --- a/src/main/kotlin/picklab/backend/activity/domain/entity/CompetitionActivity.kt +++ b/src/main/kotlin/picklab/backend/activity/domain/entity/CompetitionActivity.kt @@ -18,7 +18,8 @@ import java.time.LocalDate @DiscriminatorValue("COMPETITION") class CompetitionActivity( title: String, - organizer: OrganizerType, + organizer: String? = null, + organizerType: OrganizerType, targetAudience: ParticipantType, recruitmentStartDate: LocalDate, recruitmentEndDate: LocalDate?, @@ -44,6 +45,7 @@ class CompetitionActivity( ) : Activity( title = title, organizer = organizer, + organizerType = organizerType, targetAudience = targetAudience, recruitmentStartDate = recruitmentStartDate, recruitmentEndDate = recruitmentEndDate, diff --git a/src/main/kotlin/picklab/backend/activity/domain/entity/EducationActivity.kt b/src/main/kotlin/picklab/backend/activity/domain/entity/EducationActivity.kt index 28f42223..c3d0b8b4 100644 --- a/src/main/kotlin/picklab/backend/activity/domain/entity/EducationActivity.kt +++ b/src/main/kotlin/picklab/backend/activity/domain/entity/EducationActivity.kt @@ -20,7 +20,8 @@ import java.time.LocalDate @DiscriminatorValue("EDUCATION") class EducationActivity( title: String, - organizer: OrganizerType, + organizer: String? = null, + organizerType: OrganizerType, targetAudience: ParticipantType, @Column(name = "location", length = 50) @Enumerated(EnumType.STRING) @@ -54,6 +55,7 @@ class EducationActivity( ) : Activity( title = title, organizer = organizer, + organizerType = organizerType, targetAudience = targetAudience, recruitmentStartDate = recruitmentStartDate, recruitmentEndDate = recruitmentEndDate, diff --git a/src/main/kotlin/picklab/backend/activity/domain/entity/ExternalActivity.kt b/src/main/kotlin/picklab/backend/activity/domain/entity/ExternalActivity.kt index eeb44cd9..756d846b 100644 --- a/src/main/kotlin/picklab/backend/activity/domain/entity/ExternalActivity.kt +++ b/src/main/kotlin/picklab/backend/activity/domain/entity/ExternalActivity.kt @@ -19,7 +19,8 @@ import java.time.LocalDate @DiscriminatorValue("EXTRACURRICULAR") class ExternalActivity( title: String, - organizer: OrganizerType, + organizer: String? = null, + organizerType: OrganizerType, targetAudience: ParticipantType, @Column(name = "location", length = 50) @Enumerated(EnumType.STRING) @@ -46,6 +47,7 @@ class ExternalActivity( ) : Activity( title = title, organizer = organizer, + organizerType = organizerType, targetAudience = targetAudience, recruitmentStartDate = recruitmentStartDate, recruitmentEndDate = recruitmentEndDate, diff --git a/src/main/kotlin/picklab/backend/activity/domain/entity/SeminarActivity.kt b/src/main/kotlin/picklab/backend/activity/domain/entity/SeminarActivity.kt index c952930a..fae25cb2 100644 --- a/src/main/kotlin/picklab/backend/activity/domain/entity/SeminarActivity.kt +++ b/src/main/kotlin/picklab/backend/activity/domain/entity/SeminarActivity.kt @@ -18,7 +18,8 @@ import java.time.LocalDate @DiscriminatorValue("SEMINAR") class SeminarActivity( title: String, - organizer: OrganizerType, + organizer: String? = null, + organizerType: OrganizerType, targetAudience: ParticipantType, @Column(name = "location", length = 50) @Enumerated(EnumType.STRING) @@ -41,6 +42,7 @@ class SeminarActivity( ) : Activity( title = title, organizer = organizer, + organizerType = organizerType, targetAudience = targetAudience, recruitmentStartDate = recruitmentStartDate, recruitmentEndDate = recruitmentEndDate, diff --git a/src/main/kotlin/picklab/backend/activity/domain/repository/ActivityRepositoryImpl.kt b/src/main/kotlin/picklab/backend/activity/domain/repository/ActivityRepositoryImpl.kt index 3d4f29d0..b749faff 100644 --- a/src/main/kotlin/picklab/backend/activity/domain/repository/ActivityRepositoryImpl.kt +++ b/src/main/kotlin/picklab/backend/activity/domain/repository/ActivityRepositoryImpl.kt @@ -43,7 +43,7 @@ class ActivityRepositoryImpl( .or(QActivity.activity.recruitmentEndDate.goe(LocalDate.now())), ) andIfNotNullOrEmpty(queryData.jobTag) { QJobCategory.jobCategory.jobDetail.`in`(queryData.jobTag) } - andIfNotNullOrEmpty(queryData.organizer) { QActivity.activity.organizer.`in`(queryData.organizer) } + andIfNotNullOrEmpty(queryData.organizerType) { QActivity.activity.organizerType.`in`(queryData.organizerType) } andIfNotNullOrEmpty(queryData.target) { QActivity.activity.targetAudience.`in`(queryData.target) } andIfNotNullOrEmpty(queryData.field) { Expressions.enumPath(ActivityFieldType::class.javaObjectType, "activityField").`in`(queryData.field) @@ -120,7 +120,8 @@ class ActivityRepositoryImpl( QActivityItem( QActivity.activity.id, QActivity.activity.title, - QActivity.activity.organizer.stringValue(), + QActivity.activity.organizer, + QActivity.activity.organizerType.stringValue(), QActivity.activity.startDate, QActivity.activity.activityType, GroupBy.list(QJobCategory.jobCategory.jobDetail.stringValue()), diff --git a/src/main/kotlin/picklab/backend/activity/entrypoint/ActivityApi.kt b/src/main/kotlin/picklab/backend/activity/entrypoint/ActivityApi.kt index a40eac0b..fb096f07 100644 --- a/src/main/kotlin/picklab/backend/activity/entrypoint/ActivityApi.kt +++ b/src/main/kotlin/picklab/backend/activity/entrypoint/ActivityApi.kt @@ -27,11 +27,12 @@ interface ActivityApi { summary = "활동 생성", description = "activity DDL 기준으로 활동을 생성합니다.\n\n" + - "공통 필수값은 activity_type, activity_group_id, title, organizer, target_audience, " + - "recruitmentStartDate, recruitmentEndDate, startDate, endDate, status, duration 입니다.\n\n" + - "공통 선택값은 activity_homepage_url, activity_application_url, activity_thumbnail_url, " + - "description, benefit, job_categories, upload_files 입니다.\n\n" + - "타입별 필수값:\n" + + "**공통 필수값:** activity_type, activity_group_id, title, organizer_type, target_audience, " + + "recruitment_start_date, start_date, status, duration\n\n" + + "**공통 선택값:** organizer(주최 기관명), recruitment_end_date, recruitment_end_type(기본: FIXED), " + + "end_date, activity_homepage_url, activity_application_url, activity_thumbnail_url, " + + "description, benefit, job_categories, upload_files\n\n" + + "**타입별 필수값:**\n" + "- EXTRACURRICULAR: location, activity_field\n" + "- SEMINAR: location\n" + "- EDUCATION: location, cost, cost_type, education_format\n" + @@ -60,7 +61,7 @@ interface ActivityApi { "**요청 파라미터:**\n" + "- category: 활동 분류 (extracurricular, seminar, education, competition)\n" + "- jobTag: 직무 태그 (ex. frontend, backend)\n" + - "- organizer: 주최 기관 (large_corporation, medium_corporation, small_corporation, public_organization, foreign_corporation, non_profit, startup, financial_institution, hospital, etc.)\n" + + "- organizerType: 주최 기관 유형 (LARGE_CORPORATION, MEDIUM_CORPORATION, SMALL_CORPORATION, PUBLIC_ORGANIZATION, FOREIGN_CORPORATION, NON_PROFIT, STARTUP, FINANCIAL_INSTITUTION, HOSPITAL, ETC)\n" + "- target: 참여 대상(all, university_student, worker)\n" + "- field: 분야 (ex. supporters, marketer, mentoring, press, overseas_volunteer, domestic_volunteer)\n" + "- location: 모임 지역 (all, seoul_incheon, gyeonggi_gangwon, daejeon_sejong_chungnam, busan_daegu_gyeongsang, gwangju_jeolla, jeju, overseas)\n" + diff --git a/src/main/kotlin/picklab/backend/activity/entrypoint/mapper/ActivitySearchConditionMapper.kt b/src/main/kotlin/picklab/backend/activity/entrypoint/mapper/ActivitySearchConditionMapper.kt index 2104679d..4a834282 100644 --- a/src/main/kotlin/picklab/backend/activity/entrypoint/mapper/ActivitySearchConditionMapper.kt +++ b/src/main/kotlin/picklab/backend/activity/entrypoint/mapper/ActivitySearchConditionMapper.kt @@ -7,7 +7,7 @@ fun ActivitySearchRequest.toCondition(): ActivitySearchCondition = ActivitySearchCondition( category = category, jobTag = jobTag, - organizer = organizer, + organizerType = organizerType, target = target, field = field, location = location, diff --git a/src/main/kotlin/picklab/backend/activity/entrypoint/request/ActivityCreateRequest.kt b/src/main/kotlin/picklab/backend/activity/entrypoint/request/ActivityCreateRequest.kt index ddddaac7..9b29134b 100644 --- a/src/main/kotlin/picklab/backend/activity/entrypoint/request/ActivityCreateRequest.kt +++ b/src/main/kotlin/picklab/backend/activity/entrypoint/request/ActivityCreateRequest.kt @@ -68,8 +68,10 @@ sealed class ActivityCreateRequest( @field:Size(max = 50) @field:Schema(description = "활동명") open val title: String, - @field:Schema(description = "주최 기관/단체") - open val organizer: OrganizerType, + @field:Schema(description = "주최 기관/단체명") + open val organizer: String? = null, + @field:Schema(description = "주최 기관 유형") + open val organizerType: OrganizerType, @field:Schema(description = "참여 대상") open val targetAudience: ParticipantType, @field:Schema(description = "모집 시작일") @@ -127,8 +129,10 @@ data class ExternalActivityCreateRequest( @field:Size(max = 50) @field:Schema(description = "활동명") override val title: String, - @field:Schema(description = "주최 기관/단체") - override val organizer: OrganizerType, + @field:Schema(description = "주최 기관/단체명") + override val organizer: String? = null, + @field:Schema(description = "주최 기관 유형") + override val organizerType: OrganizerType, @field:Schema(description = "참여 대상") override val targetAudience: ParticipantType, @field:Schema(description = "모집 시작일") @@ -171,6 +175,7 @@ data class ExternalActivityCreateRequest( activityGroupId = activityGroupId, title = title, organizer = organizer, + organizerType = organizerType, targetAudience = targetAudience, recruitmentStartDate = recruitmentStartDate, recruitmentEndDate = recruitmentEndDate, @@ -192,6 +197,7 @@ data class ExternalActivityCreateRequest( activityGroupId = activityGroupId, title = title, organizer = organizer, + organizerType = organizerType, targetAudience = targetAudience, recruitmentStartDate = recruitmentStartDate, recruitmentEndDate = recruitmentEndDate, @@ -223,8 +229,10 @@ data class SeminarActivityCreateRequest( @field:Size(max = 50) @field:Schema(description = "활동명") override val title: String, - @field:Schema(description = "주최 기관/단체") - override val organizer: OrganizerType, + @field:Schema(description = "주최 기관/단체명") + override val organizer: String? = null, + @field:Schema(description = "주최 기관 유형") + override val organizerType: OrganizerType, @field:Schema(description = "참여 대상") override val targetAudience: ParticipantType, @field:Schema(description = "모집 시작일") @@ -265,6 +273,7 @@ data class SeminarActivityCreateRequest( activityGroupId = activityGroupId, title = title, organizer = organizer, + organizerType = organizerType, targetAudience = targetAudience, recruitmentStartDate = recruitmentStartDate, recruitmentEndDate = recruitmentEndDate, @@ -286,6 +295,7 @@ data class SeminarActivityCreateRequest( activityGroupId = activityGroupId, title = title, organizer = organizer, + organizerType = organizerType, targetAudience = targetAudience, recruitmentStartDate = recruitmentStartDate, recruitmentEndDate = recruitmentEndDate, @@ -316,8 +326,10 @@ data class EducationActivityCreateRequest( @field:Size(max = 50) @field:Schema(description = "활동명") override val title: String, - @field:Schema(description = "주최 기관/단체") - override val organizer: OrganizerType, + @field:Schema(description = "주최 기관/단체명") + override val organizer: String? = null, + @field:Schema(description = "주최 기관 유형") + override val organizerType: OrganizerType, @field:Schema(description = "참여 대상") override val targetAudience: ParticipantType, @field:Schema(description = "모집 시작일") @@ -365,6 +377,7 @@ data class EducationActivityCreateRequest( activityGroupId = activityGroupId, title = title, organizer = organizer, + organizerType = organizerType, targetAudience = targetAudience, recruitmentStartDate = recruitmentStartDate, recruitmentEndDate = recruitmentEndDate, @@ -386,6 +399,7 @@ data class EducationActivityCreateRequest( activityGroupId = activityGroupId, title = title, organizer = organizer, + organizerType = organizerType, targetAudience = targetAudience, recruitmentStartDate = recruitmentStartDate, recruitmentEndDate = recruitmentEndDate, @@ -419,8 +433,10 @@ data class CompetitionActivityCreateRequest( @field:Size(max = 50) @field:Schema(description = "활동명") override val title: String, - @field:Schema(description = "주최 기관/단체") - override val organizer: OrganizerType, + @field:Schema(description = "주최 기관/단체명") + override val organizer: String? = null, + @field:Schema(description = "주최 기관 유형") + override val organizerType: OrganizerType, @field:Schema(description = "참여 대상") override val targetAudience: ParticipantType, @field:Schema(description = "모집 시작일") @@ -464,6 +480,7 @@ data class CompetitionActivityCreateRequest( activityGroupId = activityGroupId, title = title, organizer = organizer, + organizerType = organizerType, targetAudience = targetAudience, recruitmentStartDate = recruitmentStartDate, recruitmentEndDate = recruitmentEndDate, @@ -485,6 +502,7 @@ data class CompetitionActivityCreateRequest( activityGroupId = activityGroupId, title = title, organizer = organizer, + organizerType = organizerType, targetAudience = targetAudience, recruitmentStartDate = recruitmentStartDate, recruitmentEndDate = recruitmentEndDate, diff --git a/src/main/kotlin/picklab/backend/activity/entrypoint/request/ActivitySearchRequest.kt b/src/main/kotlin/picklab/backend/activity/entrypoint/request/ActivitySearchRequest.kt index 5aceac48..3aa9f9ad 100644 --- a/src/main/kotlin/picklab/backend/activity/entrypoint/request/ActivitySearchRequest.kt +++ b/src/main/kotlin/picklab/backend/activity/entrypoint/request/ActivitySearchRequest.kt @@ -17,8 +17,8 @@ data class ActivitySearchRequest( val category: ActivityType, @field:Schema(description = "관련 직무") val jobTag: List?, - @field:Schema(description = "주최 기관") - val organizer: List?, + @field:Schema(description = "주최 기관 유형") + val organizerType: List?, @field:Schema(description = "참여 대상") val target: List?, @field:Schema(description = "활동 분야") diff --git a/src/main/kotlin/picklab/backend/activity/entrypoint/response/GetActivityDetailResponse.kt b/src/main/kotlin/picklab/backend/activity/entrypoint/response/GetActivityDetailResponse.kt index 94a96685..a79cb34d 100644 --- a/src/main/kotlin/picklab/backend/activity/entrypoint/response/GetActivityDetailResponse.kt +++ b/src/main/kotlin/picklab/backend/activity/entrypoint/response/GetActivityDetailResponse.kt @@ -16,8 +16,10 @@ data class GetActivityDetailResponse( val id: Long, @field:Schema(description = "활동 제목") val title: String, - @field:Schema(description = "조직") - val organization: String, + @field:Schema(description = "조직명") + val organization: String?, + @field:Schema(description = "조직 유형") + val organizerType: String, @field:Schema(description = "대상") val target: String, @field:Schema(description = "모집 기간") @@ -61,7 +63,8 @@ data class GetActivityDetailResponse( ) = GetActivityDetailResponse( id = activity.id, title = activity.title, - organization = activity.organizer.name, + organization = activity.organizer, + organizerType = activity.organizerType.name, target = activity.targetAudience.name, recruitPeriod = RecruitPeriod( diff --git a/src/main/kotlin/picklab/backend/activity/infrastructure/ActivityItem.kt b/src/main/kotlin/picklab/backend/activity/infrastructure/ActivityItem.kt index bbda5b92..42113d33 100644 --- a/src/main/kotlin/picklab/backend/activity/infrastructure/ActivityItem.kt +++ b/src/main/kotlin/picklab/backend/activity/infrastructure/ActivityItem.kt @@ -9,7 +9,8 @@ import java.time.LocalDate data class ActivityItem( override val id: Long, override val title: String, - override val organization: String, + override val organization: String?, + override val organizerType: String, override val startDate: LocalDate, override val category: String, override val jobTags: List, diff --git a/src/main/kotlin/picklab/backend/activity/infrastructure/ActivityQueryRepositoryImpl.kt b/src/main/kotlin/picklab/backend/activity/infrastructure/ActivityQueryRepositoryImpl.kt index 0c09451f..19d87f1d 100644 --- a/src/main/kotlin/picklab/backend/activity/infrastructure/ActivityQueryRepositoryImpl.kt +++ b/src/main/kotlin/picklab/backend/activity/infrastructure/ActivityQueryRepositoryImpl.kt @@ -88,7 +88,8 @@ class ActivityQueryRepositoryImpl( QActivityItem( QActivity.activity.id, QActivity.activity.title, - QActivity.activity.organizer.stringValue(), + QActivity.activity.organizer, + QActivity.activity.organizerType.stringValue(), QActivity.activity.startDate, QActivity.activity.activityType, GroupBy.list(QJobCategory.jobCategory.jobDetail.stringValue()), @@ -170,7 +171,8 @@ class ActivityQueryRepositoryImpl( QActivityItem( QActivity.activity.id, QActivity.activity.title, - QActivity.activity.organizer.stringValue(), + QActivity.activity.organizer, + QActivity.activity.organizerType.stringValue(), QActivity.activity.startDate, QActivity.activity.activityType, GroupBy.list(QJobCategory.jobCategory.jobDetail.stringValue()), @@ -259,7 +261,8 @@ class ActivityQueryRepositoryImpl( QActivityItem( QActivity.activity.id, QActivity.activity.title, - QActivity.activity.organizer.stringValue(), + QActivity.activity.organizer, + QActivity.activity.organizerType.stringValue(), QActivity.activity.startDate, QActivity.activity.activityType, GroupBy.list(QJobCategory.jobCategory.jobDetail.stringValue()), @@ -340,7 +343,8 @@ class ActivityQueryRepositoryImpl( QActivityItem( QActivity.activity.id, QActivity.activity.title, - QActivity.activity.organizer.stringValue(), + QActivity.activity.organizer, + QActivity.activity.organizerType.stringValue(), QActivity.activity.startDate, QActivity.activity.activityType, GroupBy.list(QJobCategory.jobCategory.jobDetail.stringValue()), diff --git a/src/main/kotlin/picklab/backend/review/application/query/model/MyReviewListView.kt b/src/main/kotlin/picklab/backend/review/application/query/model/MyReviewListView.kt index 557ba61c..d4e040e1 100644 --- a/src/main/kotlin/picklab/backend/review/application/query/model/MyReviewListView.kt +++ b/src/main/kotlin/picklab/backend/review/application/query/model/MyReviewListView.kt @@ -1,13 +1,13 @@ package picklab.backend.review.application.query.model -import picklab.backend.activity.domain.enums.OrganizerType import picklab.backend.review.domain.enums.ReviewApprovalStatus import java.time.LocalDateTime interface MyReviewListView { val id: Long val title: String - val organizer: OrganizerType + val organizer: String? + val organizerType: String val activityType: String val createdAt: LocalDateTime val approvalStatus: ReviewApprovalStatus diff --git a/src/main/kotlin/picklab/backend/review/entrypoint/mapper/ReviewListMapper.kt b/src/main/kotlin/picklab/backend/review/entrypoint/mapper/ReviewListMapper.kt index e85c0b80..fa294e94 100644 --- a/src/main/kotlin/picklab/backend/review/entrypoint/mapper/ReviewListMapper.kt +++ b/src/main/kotlin/picklab/backend/review/entrypoint/mapper/ReviewListMapper.kt @@ -11,6 +11,7 @@ fun MyReviewListView.toResponse(): MyReviewsResponse = id = id, title = title, organizer = organizer, + organizerType = organizerType, activityType = activityType, createdAt = createdAt, approvalStatus = approvalStatus, diff --git a/src/main/kotlin/picklab/backend/review/entrypoint/response/MyReviewsResponse.kt b/src/main/kotlin/picklab/backend/review/entrypoint/response/MyReviewsResponse.kt index ea8040ed..9cdfd816 100644 --- a/src/main/kotlin/picklab/backend/review/entrypoint/response/MyReviewsResponse.kt +++ b/src/main/kotlin/picklab/backend/review/entrypoint/response/MyReviewsResponse.kt @@ -1,7 +1,6 @@ package picklab.backend.review.entrypoint.response import io.swagger.v3.oas.annotations.media.Schema -import picklab.backend.activity.domain.enums.OrganizerType import picklab.backend.review.domain.enums.ReviewApprovalStatus import java.time.LocalDateTime @@ -11,8 +10,10 @@ data class MyReviewsResponse( val id: Long, @field:Schema(description = "활동명", example = "활동명") val title: String, - @field:Schema(description = "주최기관/단체명", example = "주최기관/단체명") - val organizer: OrganizerType, + @field:Schema(description = "주최 기관명", example = "삼성전자") + val organizer: String?, + @field:Schema(description = "주최 기관 유형", example = "LARGE_CORPORATION") + val organizerType: String, @field:Schema(description = "활동 구분", example = "활동 구분") val activityType: String, @field:Schema(description = "작성일", example = "2024-01-01T12:00:00") diff --git a/src/main/kotlin/picklab/backend/review/infrastructure/query/ReviewOverviewQueryRepositoryImpl.kt b/src/main/kotlin/picklab/backend/review/infrastructure/query/ReviewOverviewQueryRepositoryImpl.kt index 86ea6162..9cefb077 100644 --- a/src/main/kotlin/picklab/backend/review/infrastructure/query/ReviewOverviewQueryRepositoryImpl.kt +++ b/src/main/kotlin/picklab/backend/review/infrastructure/query/ReviewOverviewQueryRepositoryImpl.kt @@ -36,6 +36,7 @@ class ReviewOverviewQueryRepositoryImpl( review.id, activity.title, activity.organizer, + activity.organizerType.stringValue(), activity.activityType, review.createdAt, review.reviewApprovalStatus, diff --git a/src/main/kotlin/picklab/backend/review/infrastructure/query/projection/MyReviewListItem.kt b/src/main/kotlin/picklab/backend/review/infrastructure/query/projection/MyReviewListItem.kt index 456a0a02..b84fa79e 100644 --- a/src/main/kotlin/picklab/backend/review/infrastructure/query/projection/MyReviewListItem.kt +++ b/src/main/kotlin/picklab/backend/review/infrastructure/query/projection/MyReviewListItem.kt @@ -1,7 +1,6 @@ package picklab.backend.review.infrastructure.query.projection import com.querydsl.core.annotations.QueryProjection -import picklab.backend.activity.domain.enums.OrganizerType import picklab.backend.review.application.query.model.MyReviewListView import picklab.backend.review.domain.enums.ReviewApprovalStatus import java.time.LocalDateTime @@ -10,7 +9,8 @@ import java.time.LocalDateTime data class MyReviewListItem( override val id: Long, override val title: String, - override val organizer: OrganizerType, + override val organizer: String?, + override val organizerType: String, override val activityType: String, override val createdAt: LocalDateTime, override val approvalStatus: ReviewApprovalStatus, diff --git a/src/main/resources/db/migration/V1.9__rename_organizer_column.sql b/src/main/resources/db/migration/V1.9__rename_organizer_column.sql new file mode 100644 index 00000000..f912a564 --- /dev/null +++ b/src/main/resources/db/migration/V1.9__rename_organizer_column.sql @@ -0,0 +1,7 @@ +ALTER TABLE activity RENAME COLUMN organizer TO organizer_type; +ALTER TABLE activity ADD COLUMN organizer VARCHAR(100) NULL AFTER title; + +UPDATE activity a + JOIN activity_group g ON g.id = a.group_id +SET a.organizer = SUBSTRING_INDEX(g.description, ' | host:', -1) +WHERE g.description LIKE 'linkareer:% | host:%'; diff --git a/src/test/kotlin/picklab/backend/activity/ActivityIntegrationTest.kt b/src/test/kotlin/picklab/backend/activity/ActivityIntegrationTest.kt index 96c922e8..9df364d5 100644 --- a/src/test/kotlin/picklab/backend/activity/ActivityIntegrationTest.kt +++ b/src/test/kotlin/picklab/backend/activity/ActivityIntegrationTest.kt @@ -100,7 +100,7 @@ class ActivityIntegrationTest : IntegrationTest() { "activity_type": "EXTRACURRICULAR", "activity_group_id": ${activityGroup.id}, "title": "활동명", - "organizer": "LARGE_CORPORATION", + "organizer_type": "LARGE_CORPORATION", "target_audience": "ALL", "recruitment_start_date": "2026-04-01", "recruitment_end_date": "2026-05-01", @@ -149,7 +149,7 @@ class ActivityIntegrationTest : IntegrationTest() { activityRepository.save( ExternalActivity( title = "테스트 대외활동", - organizer = OrganizerType.PUBLIC_ORGANIZATION, + organizerType = OrganizerType.PUBLIC_ORGANIZATION, targetAudience = ParticipantType.WORKER, location = LocationType.SEOUL_INCHEON, recruitmentStartDate = LocalDate.now().plusDays(1), @@ -176,7 +176,7 @@ class ActivityIntegrationTest : IntegrationTest() { activityRepository.save( ExternalActivity( title = "테스트 대외활동", - organizer = OrganizerType.PUBLIC_ORGANIZATION, + organizerType = OrganizerType.PUBLIC_ORGANIZATION, targetAudience = ParticipantType.WORKER, location = LocationType.SEOUL_INCHEON, recruitmentStartDate = LocalDate.now().plusDays(1), @@ -232,7 +232,7 @@ class ActivityIntegrationTest : IntegrationTest() { activityRepository.save( ExternalActivity( title = "테스트 대외활동1", - organizer = OrganizerType.PUBLIC_ORGANIZATION, + organizerType = OrganizerType.PUBLIC_ORGANIZATION, targetAudience = ParticipantType.WORKER, location = LocationType.SEOUL_INCHEON, recruitmentStartDate = LocalDate.now().plusDays(1), @@ -258,7 +258,7 @@ class ActivityIntegrationTest : IntegrationTest() { activityRepository.save( ExternalActivity( title = "테스트 대외활동2", - organizer = OrganizerType.LARGE_CORPORATION, + organizerType = OrganizerType.LARGE_CORPORATION, targetAudience = ParticipantType.WORKER, location = LocationType.SEOUL_INCHEON, recruitmentStartDate = LocalDate.now().plusDays(1), @@ -286,7 +286,7 @@ class ActivityIntegrationTest : IntegrationTest() { mockMvc .get("/v1/activities") { param("category", "extracurricular") - param("organizer", "public_organization") + param("organizerType", "public_organization") param("sort", "latest") param("size", "20") param("page", "1") @@ -315,7 +315,7 @@ class ActivityIntegrationTest : IntegrationTest() { activityRepository.save( ExternalActivity( title = "테스트 대외활동", - organizer = OrganizerType.PUBLIC_ORGANIZATION, + organizerType = OrganizerType.PUBLIC_ORGANIZATION, targetAudience = ParticipantType.WORKER, location = LocationType.SEOUL_INCHEON, recruitmentStartDate = LocalDate.now().plusDays(1), @@ -341,7 +341,7 @@ class ActivityIntegrationTest : IntegrationTest() { activityRepository.save( ExternalActivity( title = "테스트 대외활동2", - organizer = OrganizerType.PUBLIC_ORGANIZATION, + organizerType = OrganizerType.PUBLIC_ORGANIZATION, targetAudience = ParticipantType.UNIVERSITY_STUDENT, location = LocationType.SEOUL_INCHEON, recruitmentStartDate = LocalDate.now().plusDays(1), @@ -398,7 +398,7 @@ class ActivityIntegrationTest : IntegrationTest() { activityRepository.save( ExternalActivity( title = "테스트 대외활동", - organizer = OrganizerType.PUBLIC_ORGANIZATION, + organizerType = OrganizerType.PUBLIC_ORGANIZATION, targetAudience = ParticipantType.WORKER, location = LocationType.SEOUL_INCHEON, recruitmentStartDate = LocalDate.now().plusDays(1), @@ -424,7 +424,7 @@ class ActivityIntegrationTest : IntegrationTest() { activityRepository.save( ExternalActivity( title = "테스트 대외활동2", - organizer = OrganizerType.PUBLIC_ORGANIZATION, + organizerType = OrganizerType.PUBLIC_ORGANIZATION, targetAudience = ParticipantType.WORKER, location = LocationType.BUSAN_DAEGU_GYEONGSANG, recruitmentStartDate = LocalDate.now().plusDays(1), @@ -481,7 +481,7 @@ class ActivityIntegrationTest : IntegrationTest() { activityRepository.save( ExternalActivity( title = "테스트 대외활동", - organizer = OrganizerType.PUBLIC_ORGANIZATION, + organizerType = OrganizerType.PUBLIC_ORGANIZATION, targetAudience = ParticipantType.WORKER, location = LocationType.SEOUL_INCHEON, recruitmentStartDate = LocalDate.now().plusDays(1), @@ -507,7 +507,7 @@ class ActivityIntegrationTest : IntegrationTest() { activityRepository.save( ExternalActivity( title = "테스트 대외활동2", - organizer = OrganizerType.PUBLIC_ORGANIZATION, + organizerType = OrganizerType.PUBLIC_ORGANIZATION, targetAudience = ParticipantType.WORKER, location = LocationType.SEOUL_INCHEON, recruitmentStartDate = LocalDate.now().plusDays(1), @@ -567,7 +567,7 @@ class ActivityIntegrationTest : IntegrationTest() { activityRepository.save( EducationActivity( title = "테스트 교육활동", - organizer = OrganizerType.PUBLIC_ORGANIZATION, + organizerType = OrganizerType.PUBLIC_ORGANIZATION, targetAudience = ParticipantType.WORKER, location = LocationType.SEOUL_INCHEON, recruitmentStartDate = LocalDate.now().plusDays(1), @@ -595,7 +595,7 @@ class ActivityIntegrationTest : IntegrationTest() { activityRepository.save( EducationActivity( title = "테스트 교육활동", - organizer = OrganizerType.PUBLIC_ORGANIZATION, + organizerType = OrganizerType.PUBLIC_ORGANIZATION, targetAudience = ParticipantType.WORKER, location = LocationType.SEOUL_INCHEON, recruitmentStartDate = LocalDate.now().plusDays(1), @@ -654,7 +654,7 @@ class ActivityIntegrationTest : IntegrationTest() { activityRepository.save( EducationActivity( title = "테스트 교육활동", - organizer = OrganizerType.PUBLIC_ORGANIZATION, + organizerType = OrganizerType.PUBLIC_ORGANIZATION, targetAudience = ParticipantType.WORKER, location = LocationType.SEOUL_INCHEON, recruitmentStartDate = LocalDate.now().plusDays(1), @@ -682,7 +682,7 @@ class ActivityIntegrationTest : IntegrationTest() { activityRepository.save( EducationActivity( title = "테스트 교육활동2", - organizer = OrganizerType.PUBLIC_ORGANIZATION, + organizerType = OrganizerType.PUBLIC_ORGANIZATION, targetAudience = ParticipantType.WORKER, location = LocationType.SEOUL_INCHEON, recruitmentStartDate = LocalDate.now().plusDays(1), @@ -742,7 +742,7 @@ class ActivityIntegrationTest : IntegrationTest() { activityRepository.save( EducationActivity( title = "테스트 교육활동", - organizer = OrganizerType.PUBLIC_ORGANIZATION, + organizerType = OrganizerType.PUBLIC_ORGANIZATION, targetAudience = ParticipantType.WORKER, location = LocationType.SEOUL_INCHEON, recruitmentStartDate = LocalDate.now().plusDays(1), @@ -770,7 +770,7 @@ class ActivityIntegrationTest : IntegrationTest() { activityRepository.save( EducationActivity( title = "테스트 교육활동2", - organizer = OrganizerType.PUBLIC_ORGANIZATION, + organizerType = OrganizerType.PUBLIC_ORGANIZATION, targetAudience = ParticipantType.WORKER, location = LocationType.SEOUL_INCHEON, recruitmentStartDate = LocalDate.now().plusDays(1), @@ -829,7 +829,7 @@ class ActivityIntegrationTest : IntegrationTest() { activityRepository.save( EducationActivity( title = "테스트 교육활동", - organizer = OrganizerType.PUBLIC_ORGANIZATION, + organizerType = OrganizerType.PUBLIC_ORGANIZATION, targetAudience = ParticipantType.WORKER, location = LocationType.SEOUL_INCHEON, recruitmentStartDate = LocalDate.now().plusDays(1), @@ -857,7 +857,7 @@ class ActivityIntegrationTest : IntegrationTest() { activityRepository.save( EducationActivity( title = "테스트 교육활동2", - organizer = OrganizerType.PUBLIC_ORGANIZATION, + organizerType = OrganizerType.PUBLIC_ORGANIZATION, targetAudience = ParticipantType.WORKER, location = LocationType.SEOUL_INCHEON, recruitmentStartDate = LocalDate.now().plusDays(1), @@ -915,7 +915,7 @@ class ActivityIntegrationTest : IntegrationTest() { activityRepository.save( CompetitionActivity( title = "테스트 공모전", - organizer = OrganizerType.PUBLIC_ORGANIZATION, + organizerType = OrganizerType.PUBLIC_ORGANIZATION, targetAudience = ParticipantType.UNIVERSITY_STUDENT, recruitmentStartDate = LocalDate.now().plusDays(1), recruitmentEndDate = LocalDate.now().plusMonths(1), @@ -941,7 +941,7 @@ class ActivityIntegrationTest : IntegrationTest() { activityRepository.save( CompetitionActivity( title = "테스트 공모전2", - organizer = OrganizerType.PUBLIC_ORGANIZATION, + organizerType = OrganizerType.PUBLIC_ORGANIZATION, targetAudience = ParticipantType.UNIVERSITY_STUDENT, recruitmentStartDate = LocalDate.now().plusDays(1), recruitmentEndDate = LocalDate.now().plusMonths(1), @@ -997,7 +997,7 @@ class ActivityIntegrationTest : IntegrationTest() { activityRepository.save( CompetitionActivity( title = "테스트 공모전", - organizer = OrganizerType.PUBLIC_ORGANIZATION, + organizerType = OrganizerType.PUBLIC_ORGANIZATION, targetAudience = ParticipantType.UNIVERSITY_STUDENT, recruitmentStartDate = LocalDate.now().plusDays(1), recruitmentEndDate = LocalDate.now().plusMonths(1), @@ -1023,7 +1023,7 @@ class ActivityIntegrationTest : IntegrationTest() { activityRepository.save( CompetitionActivity( title = "테스트 공모전2", - organizer = OrganizerType.PUBLIC_ORGANIZATION, + organizerType = OrganizerType.PUBLIC_ORGANIZATION, targetAudience = ParticipantType.UNIVERSITY_STUDENT, recruitmentStartDate = LocalDate.now().plusDays(1), recruitmentEndDate = LocalDate.now().plusMonths(1), @@ -1079,7 +1079,7 @@ class ActivityIntegrationTest : IntegrationTest() { activityRepository.save( ExternalActivity( title = "테스트 대외활동1", - organizer = OrganizerType.PUBLIC_ORGANIZATION, + organizerType = OrganizerType.PUBLIC_ORGANIZATION, targetAudience = ParticipantType.WORKER, location = LocationType.SEOUL_INCHEON, recruitmentStartDate = LocalDate.now().plusDays(1), @@ -1106,7 +1106,7 @@ class ActivityIntegrationTest : IntegrationTest() { activityRepository.save( ExternalActivity( title = "테스트 대외활동2", - organizer = OrganizerType.LARGE_CORPORATION, + organizerType = OrganizerType.LARGE_CORPORATION, targetAudience = ParticipantType.WORKER, location = LocationType.SEOUL_INCHEON, recruitmentStartDate = LocalDate.now().plusDays(1), @@ -1161,7 +1161,7 @@ class ActivityIntegrationTest : IntegrationTest() { activityRepository.save( ExternalActivity( title = "테스트 대외활동1", - organizer = OrganizerType.PUBLIC_ORGANIZATION, + organizerType = OrganizerType.PUBLIC_ORGANIZATION, targetAudience = ParticipantType.WORKER, location = LocationType.SEOUL_INCHEON, recruitmentStartDate = LocalDate.now().plusDays(1), @@ -1187,7 +1187,7 @@ class ActivityIntegrationTest : IntegrationTest() { activityRepository.save( ExternalActivity( title = "테스트 대외활동2", - organizer = OrganizerType.LARGE_CORPORATION, + organizerType = OrganizerType.LARGE_CORPORATION, targetAudience = ParticipantType.WORKER, location = LocationType.SEOUL_INCHEON, recruitmentStartDate = LocalDate.now().plusDays(1), @@ -1243,7 +1243,7 @@ class ActivityIntegrationTest : IntegrationTest() { activityRepository.save( ExternalActivity( title = "테스트 대외활동1", - organizer = OrganizerType.PUBLIC_ORGANIZATION, + organizerType = OrganizerType.PUBLIC_ORGANIZATION, targetAudience = ParticipantType.WORKER, location = LocationType.SEOUL_INCHEON, recruitmentStartDate = LocalDate.now().plusDays(1), @@ -1345,7 +1345,7 @@ class ActivityIntegrationTest : IntegrationTest() { activityRepository.save( ExternalActivity( title = "관심 직무 활동 1", - organizer = OrganizerType.PUBLIC_ORGANIZATION, + organizerType = OrganizerType.PUBLIC_ORGANIZATION, targetAudience = ParticipantType.WORKER, location = LocationType.SEOUL_INCHEON, recruitmentStartDate = LocalDate.now().plusDays(1), @@ -1369,7 +1369,7 @@ class ActivityIntegrationTest : IntegrationTest() { activityRepository.save( ExternalActivity( title = "관심 직무 활동 2", - organizer = OrganizerType.PUBLIC_ORGANIZATION, + organizerType = OrganizerType.PUBLIC_ORGANIZATION, targetAudience = ParticipantType.WORKER, location = LocationType.SEOUL_INCHEON, recruitmentStartDate = LocalDate.now().plusDays(1), @@ -1419,7 +1419,7 @@ class ActivityIntegrationTest : IntegrationTest() { activityRepository.save( ExternalActivity( title = "관심없는 직무 활동", - organizer = OrganizerType.PUBLIC_ORGANIZATION, + organizerType = OrganizerType.PUBLIC_ORGANIZATION, targetAudience = ParticipantType.WORKER, location = LocationType.SEOUL_INCHEON, recruitmentStartDate = LocalDate.now().plusDays(1), @@ -1480,7 +1480,7 @@ class ActivityIntegrationTest : IntegrationTest() { activityRepository.save( ExternalActivity( title = "테스트 대외활동", - organizer = OrganizerType.PUBLIC_ORGANIZATION, + organizerType = OrganizerType.PUBLIC_ORGANIZATION, targetAudience = ParticipantType.WORKER, location = LocationType.SEOUL_INCHEON, recruitmentStartDate = LocalDate.now().plusDays(1), @@ -1558,7 +1558,7 @@ class ActivityIntegrationTest : IntegrationTest() { activityRepository.save( ExternalActivity( title = "테스트 대외활동", - organizer = OrganizerType.PUBLIC_ORGANIZATION, + organizerType = OrganizerType.PUBLIC_ORGANIZATION, targetAudience = ParticipantType.WORKER, location = LocationType.SEOUL_INCHEON, recruitmentStartDate = LocalDate.now().plusDays(1), diff --git a/src/test/kotlin/picklab/backend/activity/domain/entity/ActivityIsRecruitingTest.kt b/src/test/kotlin/picklab/backend/activity/domain/entity/ActivityIsRecruitingTest.kt index 67d1a818..b94a9294 100644 --- a/src/test/kotlin/picklab/backend/activity/domain/entity/ActivityIsRecruitingTest.kt +++ b/src/test/kotlin/picklab/backend/activity/domain/entity/ActivityIsRecruitingTest.kt @@ -22,7 +22,7 @@ class ActivityIsRecruitingTest { status: RecruitmentStatus = RecruitmentStatus.OPEN, ) = ExternalActivity( title = "테스트 활동", - organizer = OrganizerType.LARGE_CORPORATION, + organizerType = OrganizerType.LARGE_CORPORATION, targetAudience = ParticipantType.ALL, location = LocationType.ALL, recruitmentStartDate = LocalDate.of(2026, 1, 1), diff --git a/src/test/kotlin/picklab/backend/activity/service/ActivityDeadlineServiceTest.kt b/src/test/kotlin/picklab/backend/activity/service/ActivityDeadlineServiceTest.kt index e3792ff5..75ab7df4 100644 --- a/src/test/kotlin/picklab/backend/activity/service/ActivityDeadlineServiceTest.kt +++ b/src/test/kotlin/picklab/backend/activity/service/ActivityDeadlineServiceTest.kt @@ -142,7 +142,7 @@ class ActivityDeadlineServiceTest : IntegrationTest() { ): ExternalActivity = ExternalActivity( title = title, - organizer = OrganizerType.PUBLIC_ORGANIZATION, + organizerType = OrganizerType.PUBLIC_ORGANIZATION, targetAudience = ParticipantType.ALL, location = LocationType.SEOUL_INCHEON, recruitmentStartDate = recruitmentEndDate.minusDays(30), diff --git a/src/test/kotlin/picklab/backend/activity/service/ActivityQuerySanitizeTest.kt b/src/test/kotlin/picklab/backend/activity/service/ActivityQuerySanitizeTest.kt index 8d859fb5..b3ae096a 100644 --- a/src/test/kotlin/picklab/backend/activity/service/ActivityQuerySanitizeTest.kt +++ b/src/test/kotlin/picklab/backend/activity/service/ActivityQuerySanitizeTest.kt @@ -42,7 +42,7 @@ class ActivityQuerySanitizeTest { ActivitySearchCondition( category = ActivityType.EXTRACURRICULAR, jobTag = listOf(JobDetail.BACKEND), - organizer = listOf(OrganizerType.LARGE_CORPORATION), + organizerType = listOf(OrganizerType.LARGE_CORPORATION), target = listOf(ParticipantType.ALL), field = listOf(ActivityFieldType.MENTORING), location = listOf(LocationType.SEOUL_INCHEON), @@ -72,7 +72,7 @@ class ActivityQuerySanitizeTest { ActivitySearchCondition( category = ActivityType.SEMINAR, jobTag = listOf(JobDetail.BACKEND), - organizer = listOf(OrganizerType.LARGE_CORPORATION), + organizerType = listOf(OrganizerType.LARGE_CORPORATION), target = listOf(ParticipantType.ALL), field = listOf(ActivityFieldType.MENTORING), location = listOf(LocationType.SEOUL_INCHEON), @@ -106,7 +106,7 @@ class ActivityQuerySanitizeTest { ActivitySearchCondition( category = ActivityType.EDUCATION, jobTag = listOf(JobDetail.BACKEND), - organizer = listOf(OrganizerType.LARGE_CORPORATION), + organizerType = listOf(OrganizerType.LARGE_CORPORATION), target = listOf(ParticipantType.ALL), field = listOf(ActivityFieldType.MENTORING), location = listOf(LocationType.SEOUL_INCHEON), @@ -134,7 +134,7 @@ class ActivityQuerySanitizeTest { ActivitySearchCondition( category = ActivityType.EDUCATION, jobTag = listOf(JobDetail.BACKEND), - organizer = listOf(OrganizerType.LARGE_CORPORATION), + organizerType = listOf(OrganizerType.LARGE_CORPORATION), target = listOf(ParticipantType.ALL), field = listOf(ActivityFieldType.MENTORING), location = listOf(LocationType.SEOUL_INCHEON), @@ -164,7 +164,7 @@ class ActivityQuerySanitizeTest { ActivitySearchCondition( category = ActivityType.COMPETITION, jobTag = listOf(JobDetail.BACKEND), - organizer = listOf(OrganizerType.LARGE_CORPORATION), + organizerType = listOf(OrganizerType.LARGE_CORPORATION), target = listOf(ParticipantType.ALL), field = listOf(ActivityFieldType.MENTORING), location = listOf(LocationType.SEOUL_INCHEON), @@ -193,7 +193,7 @@ class ActivityQuerySanitizeTest { ActivitySearchCondition( category = ActivityType.COMPETITION, jobTag = listOf(JobDetail.BACKEND), - organizer = listOf(OrganizerType.LARGE_CORPORATION), + organizerType = listOf(OrganizerType.LARGE_CORPORATION), target = listOf(ParticipantType.ALL), field = listOf(ActivityFieldType.MENTORING), location = listOf(LocationType.SEOUL_INCHEON), @@ -222,7 +222,7 @@ class ActivityQuerySanitizeTest { ActivitySearchCondition( category = ActivityType.COMPETITION, jobTag = listOf(JobDetail.BACKEND), - organizer = listOf(OrganizerType.LARGE_CORPORATION), + organizerType = listOf(OrganizerType.LARGE_CORPORATION), target = listOf(ParticipantType.ALL), field = listOf(ActivityFieldType.MENTORING), location = listOf(LocationType.SEOUL_INCHEON), diff --git a/src/test/kotlin/picklab/backend/bookmark/BookmarkIntegrationTest.kt b/src/test/kotlin/picklab/backend/bookmark/BookmarkIntegrationTest.kt index 350cc854..89ef261e 100644 --- a/src/test/kotlin/picklab/backend/bookmark/BookmarkIntegrationTest.kt +++ b/src/test/kotlin/picklab/backend/bookmark/BookmarkIntegrationTest.kt @@ -70,7 +70,7 @@ class BookmarkIntegrationTest : IntegrationTest() { activityRepository.save( ExternalActivity( title = "테스트 대외활동", - organizer = OrganizerType.PUBLIC_ORGANIZATION, + organizerType = OrganizerType.PUBLIC_ORGANIZATION, targetAudience = ParticipantType.WORKER, location = LocationType.SEOUL_INCHEON, recruitmentStartDate = LocalDate.now().plusDays(1), diff --git a/src/test/kotlin/picklab/backend/notification/domain/service/ActivityDeadlineNotificationServiceTest.kt b/src/test/kotlin/picklab/backend/notification/domain/service/ActivityDeadlineNotificationServiceTest.kt index c8a47736..37e75b71 100644 --- a/src/test/kotlin/picklab/backend/notification/domain/service/ActivityDeadlineNotificationServiceTest.kt +++ b/src/test/kotlin/picklab/backend/notification/domain/service/ActivityDeadlineNotificationServiceTest.kt @@ -178,7 +178,7 @@ class ActivityDeadlineNotificationServiceTest : IntegrationTest() { activityRepository.save( ExternalActivity( title = "테스트 활동", - organizer = OrganizerType.PUBLIC_ORGANIZATION, + organizerType = OrganizerType.PUBLIC_ORGANIZATION, targetAudience = ParticipantType.ALL, location = LocationType.SEOUL_INCHEON, recruitmentStartDate = recruitmentEndDate.minusDays(30), diff --git a/src/test/kotlin/picklab/backend/notification/domain/service/PopularActivityNotificationServiceTest.kt b/src/test/kotlin/picklab/backend/notification/domain/service/PopularActivityNotificationServiceTest.kt index 7638fb98..a100a035 100644 --- a/src/test/kotlin/picklab/backend/notification/domain/service/PopularActivityNotificationServiceTest.kt +++ b/src/test/kotlin/picklab/backend/notification/domain/service/PopularActivityNotificationServiceTest.kt @@ -225,7 +225,7 @@ class PopularActivityNotificationServiceTest : IntegrationTest() { activityRepository.save( ExternalActivity( title = title, - organizer = OrganizerType.PUBLIC_ORGANIZATION, + organizerType = OrganizerType.PUBLIC_ORGANIZATION, targetAudience = ParticipantType.ALL, location = LocationType.SEOUL_INCHEON, recruitmentStartDate = LocalDate.now().minusDays(10), diff --git a/src/test/kotlin/picklab/backend/participation/domain/entity/ActivityParticipationTest.kt b/src/test/kotlin/picklab/backend/participation/domain/entity/ActivityParticipationTest.kt index 72daed20..9bae6330 100644 --- a/src/test/kotlin/picklab/backend/participation/domain/entity/ActivityParticipationTest.kt +++ b/src/test/kotlin/picklab/backend/participation/domain/entity/ActivityParticipationTest.kt @@ -38,7 +38,7 @@ class ActivityParticipationTest { mockActivity = object : Activity( title = "테스트 활동", - organizer = OrganizerType.ETC, + organizerType = OrganizerType.ETC, targetAudience = ParticipantType.ALL, recruitmentStartDate = fixedDate, recruitmentEndDate = fixedDate,