package store // Project represents a deployable application. type Project struct { ID string `json:"id"` Name string `json:"name"` Registry string `json:"registry"` Image string `json:"image"` Port int `json:"port"` Healthcheck string `json:"healthcheck"` Env string `json:"env"` // JSON-encoded map Volumes string `json:"volumes"` // JSON-encoded map CreatedAt string `json:"created_at"` UpdatedAt string `json:"updated_at"` } // Stage represents a deployment stage within a project (e.g. dev, rel, prod). type Stage struct { ID string `json:"id"` ProjectID string `json:"project_id"` Name string `json:"name"` TagPattern string `json:"tag_pattern"` AutoDeploy bool `json:"auto_deploy"` MaxInstances int `json:"max_instances"` Confirm bool `json:"confirm"` EnableProxy bool `json:"enable_proxy"` PromoteFrom string `json:"promote_from"` Subdomain string `json:"subdomain"` CreatedAt string `json:"created_at"` UpdatedAt string `json:"updated_at"` } // Registry represents a container image registry. type Registry struct { ID string `json:"id"` Name string `json:"name"` URL string `json:"url"` Type string `json:"type"` Token string `json:"token"` Owner string `json:"owner"` CreatedAt string `json:"created_at"` UpdatedAt string `json:"updated_at"` } // Settings holds global application configuration (single-row pattern). type Settings struct { Domain string `json:"domain"` ServerIP string `json:"server_ip"` Network string `json:"network"` SubdomainPattern string `json:"subdomain_pattern"` NotificationURL string `json:"notification_url"` NpmURL string `json:"npm_url"` NpmEmail string `json:"npm_email"` NpmPassword string `json:"npm_password"` WebhookSecret string `json:"webhook_secret"` PollingInterval string `json:"polling_interval"` BaseVolumePath string `json:"base_volume_path"` SSLCertificateID int `json:"ssl_certificate_id"` UpdatedAt string `json:"updated_at"` } // Instance represents a running (or stopped) container for a project stage. type Instance struct { ID string `json:"id"` StageID string `json:"stage_id"` ProjectID string `json:"project_id"` ContainerID string `json:"container_id"` ImageTag string `json:"image_tag"` Subdomain string `json:"subdomain"` NpmProxyID int `json:"npm_proxy_id"` Status string `json:"status"` // running, stopped, failed, removing Port int `json:"port"` CreatedAt string `json:"created_at"` UpdatedAt string `json:"updated_at"` } // Deploy represents a deployment attempt. type Deploy struct { ID string `json:"id"` ProjectID string `json:"project_id"` StageID string `json:"stage_id"` InstanceID string `json:"instance_id"` ImageTag string `json:"image_tag"` Status string `json:"status"` // pending, pulling, starting, configuring_proxy, health_checking, success, failed, rolled_back StartedAt string `json:"started_at"` FinishedAt string `json:"finished_at"` Error string `json:"error"` } // DeployLog is a single log entry for a deploy. type DeployLog struct { ID int64 `json:"id"` DeployID string `json:"deploy_id"` Message string `json:"message"` Level string `json:"level"` // info, warn, error CreatedAt string `json:"created_at"` } // StageEnv represents a per-stage environment variable override. type StageEnv struct { ID string `json:"id"` StageID string `json:"stage_id"` Key string `json:"key"` Value string `json:"value"` Encrypted bool `json:"encrypted"` CreatedAt string `json:"created_at"` UpdatedAt string `json:"updated_at"` } // Volume represents a volume mount configuration for a project. type Volume struct { ID string `json:"id"` ProjectID string `json:"project_id"` Source string `json:"source"` Target string `json:"target"` Mode string `json:"mode"` // shared or isolated CreatedAt string `json:"created_at"` UpdatedAt string `json:"updated_at"` }