package recognition import ( "time" "github.com/food-ai/backend/internal/adapters/ai" ) // Job status constants. const ( JobStatusPending = "pending" JobStatusProcessing = "processing" JobStatusDone = "done" JobStatusFailed = "failed" ) // Kafka topic names. const ( TopicPaid = "ai.recognize.paid" TopicFree = "ai.recognize.free" ) // Job represents an async dish recognition task stored in dish_recognition_jobs. type Job struct { ID string UserID string UserPlan string ImageBase64 string MimeType string Lang string TargetDate *string // nullable YYYY-MM-DD TargetMealType *string // nullable e.g. "lunch" Status string Result *ai.DishResult Error *string CreatedAt time.Time StartedAt *time.Time CompletedAt *time.Time } // JobSummary is a lightweight job record for list endpoints (omits ImageBase64). type JobSummary struct { ID string `json:"id"` Status string `json:"status"` TargetDate *string `json:"target_date,omitempty"` TargetMealType *string `json:"target_meal_type,omitempty"` Result *ai.DishResult `json:"result,omitempty"` Error *string `json:"error,omitempty"` CreatedAt time.Time `json:"created_at"` }