feat: 대시보드 내 이슈(/my/tasks) + 전체 캘린더(CalendarEvent) + 메일 AI 요약(OpenAI)
build-and-push / build (push) Successful in 32s

- GET /my/tasks: 전 프로젝트에서 나에게 배정된 작업 + projectName (대시보드 JIRA 보드용)
  · fix: ORDER BY "end"(예약어) 따옴표 처리
- CalendarEvent 모델 + /calendar/events CRUD(본인 소유), nav에 캘린더 추가
- internal/ai(OpenAI, stdlib): 메일 동기화 시 신규 메일에 한 줄 AI 요약 생성(OPENAI_API_KEY)
  · ProjectMailMsg.Summary, 회당 40건 상한
- nav inbox 라벨 쪽지함으로 통일

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
theorose49
2026-06-30 16:06:55 +09:00
co-authored by Claude Opus 4.8
parent d9ab9934c0
commit 995dd36167
10 changed files with 215 additions and 8 deletions
+3
View File
@@ -35,6 +35,8 @@ type Config struct {
// MailSyncInterval is how often the background mail sync runs (MAIL_SYNC_INTERVAL,
// e.g. "15m"). 0 disables periodic sync (on-demand backfill still works).
MailSyncInterval time.Duration
// OpenAIKey enables short AI mail summaries (OPENAI_API_KEY). Empty = disabled.
OpenAIKey string
// LogoutURL is the common SSO logout path injected by infra (LOGOUT_URL):
// ends the oauth2-proxy session then redirects to Keycloak end-session.
// The static frontend reads it via /me. Defaults to the infra-common value.
@@ -97,6 +99,7 @@ func Load() Config {
FCMCredentialsFile: env("FCM_CREDENTIALS_FILE", ""),
GoogleSACredentialsFile: env("GOOGLE_SA_CREDENTIALS_FILE", ""),
MailSyncInterval: parseDur(env("MAIL_SYNC_INTERVAL", "15m")),
OpenAIKey: env("OPENAI_API_KEY", ""),
LogoutURL: env("LOGOUT_URL",
"/oauth2/sign_out?rd=https%3A%2F%2Fauth.special-partners.com%2Frealms%2Fsp%2Fprotocol%2Fopenid-connect%2Flogout"),
}