# 2026-03-30: 서버 이벤트 일정 관리 Phase 1 구현 (Event Schedule Phase 1 Implementation) 서버 이벤트 일정 관리 기능의 Phase 1 범위를 구현했습니다. 이번 단계에서는 이벤트 데이터를 저장할 수 있는 DB 모델을 추가하고, 기본 슬래시 명령인 생성, 목록 조회, 취소 기능을 제공하도록 구성했습니다. ## 주요 변경 사항 ### 1. Prisma `GuildEvent` 모델 및 마이그레이션 추가 - `GuildEvent` 모델을 추가해 서버 단위 이벤트 데이터를 저장할 수 있도록 했습니다. - `EventStatus` enum을 추가해 `SCHEDULED`, `CANCELLED`, `COMPLETED` 상태를 관리할 수 있게 했습니다. - `startsAt`, `announcementChannelId`, `createdByUserId`, 리마인더 관련 플래그를 포함해 이후 Phase 확장에 대비했습니다. - `20260330073722_add_guild_events` 마이그레이션을 생성 및 적용했습니다. ### 2. `/event` 명령 기본 기능 구현 - 새 명령 파일 `src/commands/event.ts`를 추가했습니다. - 아래 3개 서브커맨드를 구현했습니다. - `/event create` - `/event list` - `/event cancel` - `Manage Guild` 권한이 필요한 관리자용 명령으로 제한했습니다. ### 3. 이벤트 생성 로직 구현 - `title`, `date`, `time`, `description`, `channel`, `reminder` 옵션을 지원합니다. - 날짜는 `YYYY-MM-DD`, 시간은 `HH:mm` 형식으로 입력받습니다. - 현재 Phase 1 설계에 맞춰 `Asia/Seoul` 기준으로 시각을 해석합니다. - 과거 시각 또는 잘못된 형식 입력 시 에러 메시지를 반환합니다. ### 4. 이벤트 목록 조회 로직 구현 - 아직 시작하지 않은 `SCHEDULED` 이벤트를 시작 시각 순으로 최대 10개까지 표시합니다. - Discord timestamp 포맷을 사용해 절대 시각과 상대 시각을 함께 보여줍니다. - 이벤트 ID, 상태, 리마인더 사용 여부, 공지 채널 여부를 함께 표시합니다. ### 5. 이벤트 취소 로직 구현 - `/event cancel id:` 형태로 예약 이벤트를 취소할 수 있게 했습니다. - 실제 삭제 대신 상태를 `CANCELLED`로 변경하는 방식으로 처리했습니다. - 서버 ID와 이벤트 상태를 함께 검사해 다른 서버 이벤트 또는 이미 취소된 이벤트를 잘못 취소하지 않도록 했습니다. ### 6. i18n 문구 추가 - `en`, `ko` 번역 파일에 이벤트 명령 관련 문구를 추가했습니다. - `TranslationSchema`에 `commands.event` 구조를 반영해 타입 안정성을 유지했습니다. ## 검증 결과 - `yarn build`: 성공 - `yarn test --runInBand`: 6개 테스트 스위트, 40개 테스트 통과 ## 다음 단계 메모 - Phase 2에서 `/event announce`와 공지 Embed 전송 기능을 추가할 수 있습니다. - 리마인더 주기 작업 및 감사 로그 연동은 이후 단계에서 확장 예정입니다.