ITN Dev 07-24
feat: 담당자 구분에 아이티앤 담당자(ITN) 유형 추가
@97674a3ca6a868cccd6464e03301eb82fd2545d7
frontend/src/api/client.ts
--- frontend/src/api/client.ts
+++ frontend/src/api/client.ts
@@ -1,6 +1,6 @@
 export type OrgStatus = 'INFO_PENDING' | 'READY' | 'PARTIAL' | 'ACTIVE'
 
-export type ContactCategory = 'APPLICANT' | 'MJ' | 'LAWYER' | 'OPERATOR'
+export type ContactCategory = 'APPLICANT' | 'MJ' | 'LAWYER' | 'OPERATOR' | 'ITN'
 
 /** 담당자관리에 등록된 담당자 1명. 신청기관 담당자는 affiliation에 소속 기관명이 들어간다. */
 export interface Contact {
frontend/src/components/ContactsPage.tsx
--- frontend/src/components/ContactsPage.tsx
+++ frontend/src/components/ContactsPage.tsx
@@ -16,6 +16,7 @@
   MJ: '문정원',
   LAWYER: '변호사',
   OPERATOR: '수행기관',
+  ITN: '아이티앤 담당자',
 }
 
 const CATEGORY_BADGE_STYLES: Record<ContactCategory, string> = {
@@ -23,6 +24,7 @@
   MJ: 'bg-emerald-50 text-emerald-700',
   LAWYER: 'bg-violet-50 text-violet-700',
   OPERATOR: 'bg-sky-50 text-sky-700',
+  ITN: 'bg-orange-50 text-orange-700',
 }
 
 const FILTERS: { key: ContactCategory | 'ALL'; label: string }[] = [
@@ -31,6 +33,7 @@
   { key: 'MJ', label: '문정원' },
   { key: 'LAWYER', label: '변호사' },
   { key: 'OPERATOR', label: '수행기관' },
+  { key: 'ITN', label: '아이티앤 담당자' },
 ]
 
 function emptyForm(contact: Contact | null): ContactInput {
@@ -125,6 +128,7 @@
               <option value="MJ">문정원</option>
               <option value="LAWYER">변호사</option>
               <option value="OPERATOR">수행기관</option>
+              <option value="ITN">아이티앤 담당자</option>
             </select>
           </div>
           <div className="flex flex-col gap-1">
src/main/java/kr/itn/itnhub/contact/ContactService.java
--- src/main/java/kr/itn/itnhub/contact/ContactService.java
+++ src/main/java/kr/itn/itnhub/contact/ContactService.java
@@ -9,7 +9,7 @@
 @Service
 public class ContactService {
 
-    private static final Set<String> CATEGORIES = Set.of("APPLICANT", "MJ", "LAWYER", "OPERATOR");
+    private static final Set<String> CATEGORIES = Set.of("APPLICANT", "MJ", "LAWYER", "OPERATOR", "ITN");
 
     private final ContactMapper mapper;
 
src/main/java/kr/itn/itnhub/contact/MemberDirectoryParser.java
--- src/main/java/kr/itn/itnhub/contact/MemberDirectoryParser.java
+++ src/main/java/kr/itn/itnhub/contact/MemberDirectoryParser.java
@@ -43,7 +43,8 @@
             "주관기관", "MJ",
             "변호사", "LAWYER",
             "신청기관", "APPLICANT",
-            "수행기관", "OPERATOR");
+            "수행기관", "OPERATOR",
+            "아이티앤 담당자", "ITN");
 
     public MemberParseResult parse(InputStream xlsx) {
         try (Workbook wb = WorkbookFactory.create(xlsx)) {
 
src/main/resources/db/migration/V6__itn_category.sql (added)
+++ src/main/resources/db/migration/V6__itn_category.sql
@@ -0,0 +1,7 @@
+-- 담당자 구분에 '아이티앤 담당자'(ITN)를 신설한다. 수행기관(OPERATOR)과는 별개 유형이다.
+-- 기존에 수행기관으로 들어간 ㈜아이티앤 소속 직원은 새 유형으로 옮긴다.
+-- (개별 재분류는 담당자관리 수정 모달에서 언제든 가능)
+update contact
+   set category = 'ITN'
+ where category = 'OPERATOR'
+   and affiliation like '%아이티앤%';
Add a comment
List