66 lines
1.9 KiB
Go
66 lines
1.9 KiB
Go
package domain
|
|
|
|
import (
|
|
"encoding/json"
|
|
"time"
|
|
)
|
|
|
|
// PersonaID is a strongly-typed identifier for personas.
|
|
type PersonaID string
|
|
|
|
// String returns the string representation of the ID.
|
|
func (id PersonaID) String() string {
|
|
return string(id)
|
|
}
|
|
|
|
// IsZero returns true if the ID is empty.
|
|
func (id PersonaID) IsZero() bool {
|
|
return id == ""
|
|
}
|
|
|
|
// PersonaStatus represents the current generation state of a persona.
|
|
type PersonaStatus string
|
|
|
|
const (
|
|
PersonaStatusPending PersonaStatus = "pending"
|
|
PersonaStatusGenerating PersonaStatus = "generating"
|
|
PersonaStatusComplete PersonaStatus = "complete"
|
|
PersonaStatusFailed PersonaStatus = "failed"
|
|
)
|
|
|
|
// PersonaStage represents a generation pipeline stage.
|
|
type PersonaStage string
|
|
|
|
const (
|
|
StageSpec PersonaStage = "spec"
|
|
StageAnchor PersonaStage = "anchor"
|
|
StageAvatar PersonaStage = "avatar"
|
|
StageBanner PersonaStage = "banner"
|
|
StageGalleryBatch PersonaStage = "gallery_batch"
|
|
StageVideo PersonaStage = "video"
|
|
)
|
|
|
|
// Persona represents an AI-generated persona.
|
|
type Persona struct {
|
|
ID PersonaID `json:"id"`
|
|
Name string `json:"name"`
|
|
Handle string `json:"handle"`
|
|
Gender string `json:"gender"`
|
|
Description string `json:"description"`
|
|
Tags []string `json:"tags"`
|
|
SpecJSON json.RawMessage `json:"spec_json,omitempty"`
|
|
AnchorURL string `json:"anchor_url,omitempty"`
|
|
AvatarURL string `json:"avatar_url,omitempty"`
|
|
BannerURL string `json:"banner_url,omitempty"`
|
|
ImageURLs []string `json:"image_urls"`
|
|
VideoURLs []string `json:"video_urls"`
|
|
Status PersonaStatus `json:"status"`
|
|
CreatedAt time.Time `json:"created_at"`
|
|
}
|
|
|
|
// PersonaGenerateJob represents a queued persona generation job payload.
|
|
type PersonaGenerateJob struct {
|
|
PersonaID string `json:"persona_id"`
|
|
Stage string `json:"stage"`
|
|
}
|