123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192 |
- package models
- import (
- "time"
- )
- // APIResponse represents a standard API response
- type APIResponse struct {
- Success bool `json:"success"`
- Message string `json:"message,omitempty"`
- Data interface{} `json:"data,omitempty"`
- Error string `json:"error,omitempty"`
- }
- // LoginRequest represents a login request
- type LoginRequest struct {
- Email string `json:"email" binding:"required"`
- Password string `json:"password" binding:"required"`
- }
- // LoginResponse represents a login response
- type LoginResponse struct {
- Token string `json:"token"`
- User User `json:"user"`
- }
- const (
- AppStatusBuilding = "building"
- AppStatusDeploying = "deploying"
- AppStatusReady = "ready"
- AppStatusFailed = "failed"
- )
- type App struct {
- ID uint `json:"id" gorm:"primaryKey;autoIncrement"`
- UserID uint `json:"user_id" gorm:"not null;index"`
- Name string `json:"name" gorm:"not null" validate:"required"`
- Description string `json:"description"`
- Components string `json:"components" gorm:"type:text"` // JSON array of Component IDs
- Status string `json:"status" gorm:"not null;default:'building'"` // e.g., AppStatusBuilding, AppStatusReady, AppStatusFailed
- PreviewID uint `json:"preview_id"`
- PreviewURL string `json:"preview_url"`
- CurrentImageTag string `json:"current_image_tag"`
- CurrentImageURI string `json:"current_image_uri"`
- ErrorMsg string `json:"error_msg"`
- CreatedAt time.Time `json:"created_at" gorm:"autoCreateTime"`
- UpdatedAt time.Time `json:"updated_at" gorm:"autoUpdateTime"`
- }
- // Component represents a deployable component
- type Component struct {
- ID uint `json:"id" gorm:"primaryKey;autoIncrement"`
- UserID uint `json:"user_id" gorm:"not null;index"`
- Name string `json:"name" gorm:"not null"`
- Description string `json:"description"`
- Type string `json:"type" gorm:"not null"` // web, api, database, etc.
- Status string `json:"status" gorm:"not null"` // active, inactive, deploying, etc.
- ErrorMsg string `json:"error_msg"`
- Config string `json:"config" gorm:"type:text"` // JSON configuration
- Repository string `json:"repository"` // URL to the git repository
- Branch string `json:"branch"`
- SourceType string `json:"source_type,omitempty"` // "autodetect", "dockerfile", "docker-compose"
- ServiceName string `json:"service_name,omitempty"` // Service name from docker-compose (if applicable)
- BuildContext string `json:"build_context,omitempty"` // Build context path for docker-compose services
- DockerfilePath string `json:"dockerfile_path,omitempty"` // Dockerfile path relative to build context
- CurrentImageTag string `json:"current_image_tag"`
- CurrentImageURI string `json:"current_image_uri"`
- CreatedAt time.Time `json:"created_at" gorm:"autoCreateTime"`
- UpdatedAt time.Time `json:"updated_at" gorm:"autoUpdateTime"`
- }
- // Deployment represents a deployment instance
- type Deployment struct {
- ID uint `json:"id" gorm:"primaryKey;autoIncrement"`
- AppID uint `json:"app_id" gorm:"not null;index"`
- ClientID uint `json:"client_id" gorm:"not null;index"`
- Name string `json:"name" gorm:"not null"`
- Description string `json:"description"`
- Environment string `json:"environment" gorm:"default:'development'"` // dev, staging, prod
- Status string `json:"status" gorm:"default:'pending'"` // pending, running, stopped, failed
- URL string `json:"url"`
- Config string `json:"config" gorm:"type:text;default:'{}'"` // JSON deployment configuration
- DeployedAt *time.Time `json:"deployed_at,omitempty"`
- CreatedAt time.Time `json:"created_at" gorm:"autoCreateTime"`
- UpdatedAt time.Time `json:"updated_at" gorm:"autoUpdateTime"`
- }
- // Provider represents a cloud provider
- type Provider struct {
- ID uint `json:"id" gorm:"primaryKey;autoIncrement"`
- Name string `json:"name" gorm:"not null"`
- Type string `json:"type" gorm:"not null"` // aws, digitalocean, ovh, etc.
- Config string `json:"config" gorm:"type:text;default:'{}'"`
- Active bool `json:"active" gorm:"default:true"`
- CreatedAt time.Time `json:"created_at" gorm:"autoCreateTime"`
- UpdatedAt time.Time `json:"updated_at" gorm:"autoUpdateTime"`
- }
- // TicketStatus defines the possible statuses for a ticket.
- const (
- TicketStatusOpen = "open"
- TicketStatusInProgress = "in_progress"
- TicketStatusResolved = "resolved"
- TicketStatusClosed = "closed"
- )
- // TicketPriority defines the possible priorities for a ticket.
- const (
- TicketPriorityLow = "low"
- TicketPriorityMedium = "medium"
- TicketPriorityHigh = "high"
- TicketPriorityCritical = "critical"
- )
- // Ticket represents a support ticket
- type Ticket struct {
- ID uint `json:"id" gorm:"primaryKey;autoIncrement"`
- ClientID uint `json:"client_id" gorm:"not null;index"` // Link to Client who reported it
- UserID *uint `json:"user_id,omitempty"` // Link to User who reported it (optional)
- AssignedTo *uint `json:"assigned_to,omitempty"` // Link to User it is assigned to (optional)
- Title string `json:"title" gorm:"not null"`
- Description string `json:"description" gorm:"type:text"`
- Status string `json:"status" gorm:"default:'open'"` // e.g., open, in_progress, resolved, closed
- Priority string `json:"priority" gorm:"default:'medium'"` // e.g., low, medium, high, critical
- CreatedAt time.Time `json:"created_at" gorm:"autoCreateTime"`
- UpdatedAt time.Time `json:"updated_at" gorm:"autoUpdateTime"`
- ResolvedAt *time.Time `json:"resolved_at,omitempty"` // When the ticket was resolved
- }
- // TicketComment represents a comment on a support ticket
- type TicketComment struct {
- ID uint `json:"id" gorm:"primaryKey;autoIncrement"`
- TicketID uint `json:"ticket_id" gorm:"not null;index"` // Link to the parent Ticket
- UserID uint `json:"user_id" gorm:"not null;index"` // Link to User who made the comment
- Content string `json:"content" gorm:"type:text;not null"`
- CreatedAt time.Time `json:"created_at" gorm:"autoCreateTime"`
- UpdatedAt time.Time `json:"updated_at" gorm:"autoUpdateTime"`
- }
- // Role constants for User
- const (
- RoleAdmin = "admin"
- RoleUser = "user"
- RoleEditor = "editor" // Example additional role
- )
- // User represents a user in the system
- type User struct {
- ID uint `json:"id" gorm:"primaryKey;autoIncrement"`
- Email string `json:"email" gorm:"uniqueIndex;not null" validate:"required,email"`
- Password string `json:"-" gorm:"not null"` // Never include password in JSON responses
- Name string `json:"name" gorm:"not null" validate:"required"`
- Role string `json:"role" gorm:"default:'user'" validate:"required,oneof=user admin editor"`
- Active bool `json:"active" gorm:"default:true"`
- CreatedAt time.Time `json:"created_at" gorm:"autoCreateTime"`
- UpdatedAt time.Time `json:"updated_at" gorm:"autoUpdateTime"`
- }
- // Client represents a client in the system
- type Client struct {
- ID uint `json:"id" gorm:"primaryKey;autoIncrement"`
- Name string `json:"name" gorm:"not null" validate:"required"`
- Description string `json:"description"`
- ContactInfo string `json:"contact_info"`
- Active bool `json:"active" gorm:"default:true"`
- CreatedAt time.Time `json:"created_at" gorm:"autoCreateTime"`
- UpdatedAt time.Time `json:"updated_at" gorm:"autoUpdateTime"`
- }
- // PreviewStatus defines the possible statuses for a preview.
- const (
- PreviewStatusBuilding = "building"
- PreviewStatusDeploying = "deploying"
- PreviewStatusRunning = "running"
- PreviewStatusFailed = "failed"
- PreviewStatusStopped = "stopped"
- )
- type Preview struct {
- ID uint `json:"id" gorm:"primaryKey;autoIncrement"`
- AppID uint `json:"app_id" gorm:"not null;index"`
- Status string `json:"status" gorm:"not null;default:'building'"` // e.g., PreviewStatusBuilding, PreviewStatusRunning
- URL string `json:"url"` // Preview URL (http://vps-ip)
- VPSID string `json:"vps_id"` // OVH VPS ID
- IPAddress string `json:"ip_address"` // VPS IP address
- ErrorMsg string `json:"error_msg"`
- BuildLogs string `json:"build_logs" gorm:"type:text"`
- DeployLogs string `json:"deploy_logs" gorm:"type:text"`
- ExpiresAt time.Time `json:"expires_at" gorm:"not null"` // Auto-cleanup after X hours
- CreatedAt time.Time `json:"created_at" gorm:"autoCreateTime"`
- UpdatedAt time.Time `json:"updated_at" gorm:"autoUpdateTime"`
- }
|