package models import "time" // GitCredential stores encrypted git authentication credentials. // The encrypted_data field contains JSON: { "token": "..." } for PAT, // { "username": "...", "password": "..." } for basic auth, or // { "private_key": "...", "passphrase": "..." } for SSH keys. type GitCredential struct { ID string `json:"id" db:"id"` UserID string `json:"user_id" db:"user_id"` Name string `json:"name" db:"name"` AuthType string `json:"auth_type" db:"auth_type"` // https_pat, https_basic, ssh_key EncryptedData []byte `json:"-" db:"encrypted_data"` // never expose Nonce []byte `json:"-" db:"nonce"` // never expose PublicKey string `json:"public_key,omitempty" db:"public_key"` Fingerprint string `json:"fingerprint,omitempty" db:"fingerprint"` PersonaID *string `json:"persona_id,omitempty" db:"persona_id"` CreatedAt time.Time `json:"created_at" db:"created_at"` } // GitCredentialSummary is the safe-to-expose version (no encrypted data). type GitCredentialSummary struct { ID string `json:"id"` Name string `json:"name"` AuthType string `json:"auth_type"` PublicKey string `json:"public_key,omitempty"` Fingerprint string `json:"fingerprint,omitempty"` PersonaID *string `json:"persona_id,omitempty"` CreatedAt time.Time `json:"created_at"` } // Summary returns a safe version without encrypted fields. func (c *GitCredential) Summary() GitCredentialSummary { return GitCredentialSummary{ ID: c.ID, Name: c.Name, AuthType: c.AuthType, PublicKey: c.PublicKey, Fingerprint: c.Fingerprint, PersonaID: c.PersonaID, CreatedAt: c.CreatedAt, } } // GitStatus represents the output of git status. type GitStatus struct { Branch string `json:"branch"` Clean bool `json:"clean"` Ahead int `json:"ahead"` Behind int `json:"behind"` Staged []GitFileStatus `json:"staged,omitempty"` Modified []GitFileStatus `json:"modified,omitempty"` Untracked []string `json:"untracked,omitempty"` } // GitFileStatus represents a single file in git status output. type GitFileStatus struct { Path string `json:"path"` Status string `json:"status"` // M, A, D, R, C, U } // GitLogEntry represents a single commit in git log. type GitLogEntry struct { Hash string `json:"hash"` ShortHash string `json:"short_hash"` Author string `json:"author"` Date time.Time `json:"date"` Message string `json:"message"` }