feat: 대시보드 내 이슈(/my/tasks) + 전체 캘린더(CalendarEvent) + 메일 AI 요약(OpenAI)
build-and-push / build (push) Successful in 32s
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:
co-authored by
Claude Opus 4.8
parent
d9ab9934c0
commit
995dd36167
@@ -29,7 +29,7 @@ func All() []interface{} {
|
||||
// slice 3 — projects
|
||||
&Company{}, &Product{}, &Version{}, &Project{}, &ProjectMember{},
|
||||
&ClientContact{}, &ProjectTask{}, &TaskComment{}, &MailNote{}, &ProjectMailMsg{}, &ProjectMailState{},
|
||||
&Contract{}, &ContractFile{}, &PaymentSplit{},
|
||||
&CalendarEvent{}, &Contract{}, &ContractFile{}, &PaymentSplit{},
|
||||
// slice 4 — incentive
|
||||
&IncentiveConfig{}, &PaymentStage{}, &UserIncentive{}, &QuarterlySettlement{},
|
||||
// slice 5 — accounting
|
||||
|
||||
@@ -152,6 +152,7 @@ type ProjectMailMsg struct {
|
||||
CcAddr string `json:"cc"`
|
||||
Subject string `json:"subject"`
|
||||
Snippet string `json:"snippet"`
|
||||
Summary string `json:"summary"` // AI 자동 요약(한 줄)
|
||||
DateHdr string `json:"date"`
|
||||
Mailbox string `json:"mailbox"`
|
||||
TS int64 `gorm:"index" json:"ts"`
|
||||
@@ -171,6 +172,25 @@ type ProjectMailState struct {
|
||||
Count int `json:"count"`
|
||||
}
|
||||
|
||||
// CalendarEvent is a personal calendar entry tagged by category(프로젝트/기타/개인)
|
||||
// with a color. Owned by one member.
|
||||
type CalendarEvent struct {
|
||||
Base
|
||||
OwnerEmail string `gorm:"index" json:"ownerEmail"`
|
||||
Title string `json:"title"`
|
||||
Category string `json:"category"` // project | etc | personal (분류 키)
|
||||
ProjectID string `json:"projectId"` // category=project일 때 연결
|
||||
Color string `json:"color"` // 표시 색
|
||||
Start string `json:"start"` // YYYY-MM-DD
|
||||
End string `json:"end"` // YYYY-MM-DD (빈값=하루)
|
||||
AllDay bool `json:"allDay"`
|
||||
Memo string `json:"memo"`
|
||||
CreatedAt time.Time `json:"createdAt"`
|
||||
UpdatedAt time.Time `json:"updatedAt"`
|
||||
}
|
||||
|
||||
func (m *CalendarEvent) BeforeCreate(*gorm.DB) error { m.ensureID(); return nil }
|
||||
|
||||
// Contract holds the [admin-only] commercial terms of a project. BE is the
|
||||
// break-even floor (손해가 안 나는 최소 금액). Exposed ONLY to admins.
|
||||
type Contract struct {
|
||||
|
||||
Reference in New Issue
Block a user