# 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:<event-id>` 형태로 예약 이벤트를 취소할 수 있게 했습니다.
- 실제 삭제 대신 상태를 `CANCELLED`로 변경하는 방식으로 처리했습니다.
- 서버 ID와 이벤트 상태를 함께 검사해 다른 서버 이벤트 또는 이미 취소된 이벤트를 잘못 취소하지 않도록 했습니다.

### 6. i18n 문구 추가
- `en`, `ko` 번역 파일에 이벤트 명령 관련 문구를 추가했습니다.
- `TranslationSchema`에 `commands.event` 구조를 반영해 타입 안정성을 유지했습니다.

## 검증 결과
- `yarn build`: 성공
- `yarn test --runInBand`: 6개 테스트 스위트, 40개 테스트 통과

## 다음 단계 메모
- Phase 2에서 `/event announce`와 공지 Embed 전송 기능을 추가할 수 있습니다.
- 리마인더 주기 작업 및 감사 로그 연동은 이후 단계에서 확장 예정입니다.
