91 lines
3.3 KiB
Go
91 lines
3.3 KiB
Go
package models
|
||
|
||
import "time"
|
||
|
||
// StatsCache 统计缓存模型
|
||
type StatsCache struct {
|
||
ID int64 `json:"id" db:"id"`
|
||
RepoID int64 `json:"repo_id" db:"repo_id"`
|
||
Branch string `json:"branch" db:"branch"`
|
||
ConstraintType string `json:"constraint_type" db:"constraint_type"` // date_range/commit_limit
|
||
ConstraintValue string `json:"constraint_value" db:"constraint_value"` // JSON string
|
||
CommitHash string `json:"commit_hash" db:"commit_hash"`
|
||
ResultPath string `json:"result_path" db:"result_path"`
|
||
ResultSize int64 `json:"result_size" db:"result_size"`
|
||
CacheKey string `json:"cache_key" db:"cache_key"`
|
||
HitCount int `json:"hit_count" db:"hit_count"`
|
||
CreatedAt time.Time `json:"created_at" db:"created_at"`
|
||
LastHitAt *time.Time `json:"last_hit_at,omitempty" db:"last_hit_at"`
|
||
}
|
||
|
||
// StatsConstraint 统计约束
|
||
type StatsConstraint struct {
|
||
Type string `json:"type"` // date_range 或 commit_limit
|
||
From string `json:"from,omitempty"` // type=date_range时使用
|
||
To string `json:"to,omitempty"` // type=date_range时使用
|
||
Limit int `json:"limit,omitempty"` // type=commit_limit时使用
|
||
}
|
||
|
||
// Constraint Type constants
|
||
const (
|
||
ConstraintTypeDateRange = "date_range"
|
||
ConstraintTypeCommitLimit = "commit_limit"
|
||
)
|
||
|
||
// StatsResult 统计结果
|
||
type StatsResult struct {
|
||
CacheHit bool `json:"cache_hit"`
|
||
CachedAt *time.Time `json:"cached_at,omitempty"`
|
||
CommitHash string `json:"commit_hash"`
|
||
Statistics *Statistics `json:"statistics"`
|
||
}
|
||
|
||
// Statistics 统计数据
|
||
type Statistics struct {
|
||
Summary StatsSummary `json:"summary"`
|
||
ByContributor []ContributorStats `json:"by_contributor"`
|
||
}
|
||
|
||
// StatsSummary 统计摘要
|
||
type StatsSummary struct {
|
||
TotalCommits int `json:"total_commits"`
|
||
TotalContributors int `json:"total_contributors"`
|
||
DateRange *DateRange `json:"date_range,omitempty"`
|
||
CommitLimit *int `json:"commit_limit,omitempty"`
|
||
}
|
||
|
||
// DateRange 日期范围
|
||
type DateRange struct {
|
||
From string `json:"from"`
|
||
To string `json:"to"`
|
||
}
|
||
|
||
// ContributorStats 贡献者统计
|
||
type ContributorStats struct {
|
||
Author string `json:"author"`
|
||
Email string `json:"email"`
|
||
Commits int `json:"commits"`
|
||
Additions int `json:"additions"` // 新增行数
|
||
Deletions int `json:"deletions"` // 删除行数
|
||
Modifications int `json:"modifications"` // 修改行数 = min(additions, deletions)
|
||
NetAdditions int `json:"net_additions"` // 净增加 = additions - deletions
|
||
}
|
||
|
||
// Credential 凭据模型
|
||
type Credential struct {
|
||
ID string `json:"id" db:"id"`
|
||
Username string `json:"username,omitempty" db:"-"` // 不直接存储,存在EncryptedData中
|
||
Password string `json:"password,omitempty" db:"-"` // 不直接存储
|
||
AuthType string `json:"auth_type" db:"auth_type"`
|
||
EncryptedData []byte `json:"-" db:"encrypted_data"`
|
||
CreatedAt time.Time `json:"created_at" db:"created_at"`
|
||
UpdatedAt time.Time `json:"updated_at" db:"updated_at"`
|
||
}
|
||
|
||
// Auth Type constants
|
||
const (
|
||
AuthTypeBasic = "basic"
|
||
AuthTypeToken = "token"
|
||
AuthTypeSSH = "ssh"
|
||
)
|