feat: Event archive management — Event model, migration, API, frontend page (Phase 8)

- Event ORM model with status/level enums, domain categories, review tracking
- Alembic migration e7f3a9b1c5d0 for events table
- Event crawler service with placeholder data (12 sample events)
- GET /api/v1/events with status/domain/search filtering and overdue_days
- EventArchivePage with filter toolbar (status, domain, search) and adaptive card grid
- Status badges, level badges, domain tags, overdue markers on event cards
- Loading/error/empty states, hover-to-honey card interaction

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
enzo
2026-07-22 17:34:19 +08:00
co-authored by Claude
parent 5c0352c768
commit eaf13e5f51
8 changed files with 623 additions and 4 deletions
+26
View File
@@ -0,0 +1,26 @@
import client from './client'
export interface EventItem {
id: string
title: string
level: 'A' | 'B' | 'C'
domain: string
status: 'active' | 'fading' | 'dissipating' | 'closed'
occurred_date: string
last_reviewed: string | null
no_new_info_count: number
next_review: string | null
overdue_days: number
created_at: string | null
updated_at: string | null
}
export interface EventsResponse {
events: EventItem[]
}
export const getEvents = (params?: {
status?: string
domain?: string
search?: string
}) => client.get<EventsResponse>('/events', { params })