Files
code-utils/model/models.go
2026-08-15 17:18:00 +08:00

514 lines
19 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// Package model 定义后端服务、SQLite 仓储和 Wails 前端之间共享的数据结构。
// 该包只描述数据,不包含数据库或系统命令逻辑,因此可被各层安全复用。
package model
type Project struct {
ID int64 `json:"id"`
Name string `json:"name"`
Path string `json:"path"`
Description string `json:"description"`
GroupID int64 `json:"groupId"`
GroupName string `json:"groupName"`
Icon string `json:"icon"` // 本地 dataURL不同步
CreatedAt string `json:"createdAt"`
UpdatedAt string `json:"updatedAt"`
Stats ProjectStats `json:"stats"`
Languages []LanguageStat `json:"languages"`
}
type ProjectInput struct {
Name string `json:"name"`
Path string `json:"path"`
Description string `json:"description"`
GroupID int64 `json:"groupId"`
}
type ProjectGroup struct {
ID int64 `json:"id"`
Name string `json:"name"`
CreatedAt string `json:"createdAt"`
UpdatedAt string `json:"updatedAt"`
}
type ProjectStats struct {
TotalLines int64 `json:"totalLines"`
CodeLines int64 `json:"codeLines"`
CommentLines int64 `json:"commentLines"`
BlankLines int64 `json:"blankLines"`
FileCount int64 `json:"fileCount"`
CommitCount int64 `json:"commitCount"`
AddedLines int64 `json:"addedLines"`
DeletedLines int64 `json:"deletedLines"`
ContributorCount int64 `json:"contributorCount"`
LastAnalyzed string `json:"lastAnalyzed"`
}
type LanguageStat struct {
Name string `json:"name"`
Files int64 `json:"files"`
Code int64 `json:"code"`
Comments int64 `json:"comments"`
Blanks int64 `json:"blanks"`
}
type FileEntry struct {
Path string `json:"path"`
Name string `json:"name"`
Extension string `json:"extension"`
Size int64 `json:"size"`
IsDir bool `json:"isDir"`
Parent string `json:"parent"`
}
type StructureStats struct {
Files []FileEntry `json:"files"`
TotalFiles int64 `json:"totalFiles"`
TotalDirs int64 `json:"totalDirs"`
TotalSize int64 `json:"totalSize"`
LargeFiles []FileEntry `json:"largeFiles"`
Folders []FolderStat `json:"folders"`
Extensions []ExtensionStat `json:"extensions"`
}
type FolderStat struct {
Name string `json:"name"`
Files int64 `json:"files"`
Size int64 `json:"size"`
}
type ExtensionStat struct {
Extension string `json:"extension"`
Files int64 `json:"files"`
Size int64 `json:"size"`
}
type GitCommit struct {
Hash string `json:"hash"`
Author string `json:"author"`
Email string `json:"email"`
Message string `json:"message"`
Date string `json:"date"`
Added int64 `json:"added"`
Deleted int64 `json:"deleted"`
}
type GitRef struct {
Name string `json:"name"`
Hash string `json:"hash"`
Kind string `json:"kind"`
Current bool `json:"current"`
}
type Contributor struct {
Name string `json:"name"`
Email string `json:"email"`
Commits int64 `json:"commits"`
Added int64 `json:"added"`
Deleted int64 `json:"deleted"`
}
type HeatDay struct {
Date string `json:"date"`
Count int64 `json:"count"`
Added int64 `json:"added"`
Deleted int64 `json:"deleted"`
}
// GitFileHotspot 记录变更最频繁的文件,用于识别高风险热点。
type GitFileHotspot struct {
Path string `json:"path"`
Changes int64 `json:"changes"`
Added int64 `json:"added"`
Deleted int64 `json:"deleted"`
}
type GitStats struct {
Available bool `json:"available"`
Error string `json:"error,omitempty"`
CurrentBranch string `json:"currentBranch"`
WorkspaceBranch string `json:"workspaceBranch"`
ViewRef string `json:"viewRef"`
CommitCount int64 `json:"commitCount"`
Added int64 `json:"added"`
Deleted int64 `json:"deleted"`
ContributorCount int64 `json:"contributorCount"`
Commits []GitCommit `json:"commits"`
Refs []GitRef `json:"refs"`
Contributors []Contributor `json:"contributors"`
Heatmap []HeatDay `json:"heatmap"`
Hotspots []GitFileHotspot `json:"hotspots"`
}
type GitDiagnostics struct {
Available bool `json:"available"`
ErrorCode string `json:"errorCode,omitempty"`
Detail string `json:"detail,omitempty"`
IsWSL bool `json:"isWsl"`
Distro string `json:"distro,omitempty"`
LinuxPath string `json:"linuxPath,omitempty"`
WorkspaceBranch string `json:"workspaceBranch,omitempty"`
ViewRef string `json:"viewRef,omitempty"`
RefCount int `json:"refCount"`
}
type ProjectInsights struct {
ProjectID int64 `json:"projectId"`
HealthScore int `json:"healthScore"`
GeneratedAt string `json:"generatedAt"`
Summary InsightSummary `json:"summary"`
Issues []InsightIssue `json:"issues"`
}
type InsightSummary struct {
High int `json:"high"`
Medium int `json:"medium"`
Low int `json:"low"`
TodoCount int `json:"todoCount"`
LongFiles int `json:"longFiles"`
LargeFiles int `json:"largeFiles"`
}
type InsightIssue struct {
Severity string `json:"severity"`
Type string `json:"type"`
Title string `json:"title"`
Detail string `json:"detail"`
Path string `json:"path,omitempty"`
Line int `json:"line,omitempty"`
Suggestion string `json:"suggestion"`
Evidence string `json:"evidence,omitempty"`
}
type GitFileChange struct {
Path string `json:"path"`
Status string `json:"status"`
Added int64 `json:"added"`
Deleted int64 `json:"deleted"`
}
type GitCommitDetail struct {
GitCommit
Files []GitFileChange `json:"files"`
}
type CheckoutResult struct {
Branch string `json:"branch"`
Message string `json:"message"`
}
type ExclusionRule struct {
ID int64 `json:"id"`
Pattern string `json:"pattern"`
Category string `json:"category"`
Builtin bool `json:"builtin"`
}
type LogEntry struct {
ID int64 `json:"id"`
Level string `json:"level"`
Category string `json:"category"`
Message string `json:"message"`
Detail string `json:"detail"`
CreatedAt string `json:"createdAt"`
}
type Todo struct {
ID int64 `json:"id"`
UUID string `json:"uuid"`
Title string `json:"title"`
Content string `json:"content"`
ProjectID int64 `json:"projectId"`
ProjectName string `json:"projectName"`
DueAt string `json:"dueAt"`
Priority string `json:"priority"` // low | medium | high
Status string `json:"status"` // open | doing | done
CreatedAt string `json:"createdAt"`
UpdatedAt string `json:"updatedAt"`
History string `json:"history"` // JSON 数组:[{"status","at"}],记录每次进入某状态的时间
TeamID int64 `json:"teamId"` // >0 表示已共享给该团队
}
type Ticket struct {
ID int64 `json:"id"`
UUID string `json:"uuid"`
Title string `json:"title"`
Description string `json:"description"`
Type string `json:"type"` // feature | bug | task | improvement
ProjectID int64 `json:"projectId"`
ProjectName string `json:"projectName"`
StartAt string `json:"startAt"`
DueAt string `json:"dueAt"`
Status string `json:"status"` // open | in_progress | resolved | closed
Priority string `json:"priority"` // low | medium | high
CreatedAt string `json:"createdAt"`
UpdatedAt string `json:"updatedAt"`
History string `json:"history"` // JSON 数组:[{"status","at"}],记录每次进入某状态的时间
TeamID int64 `json:"teamId"` // >0 表示已共享给该团队
}
type Note struct {
ID int64 `json:"id"`
UUID string `json:"uuid"`
Content string `json:"content"`
UpdatedAt string `json:"updatedAt"`
}
type Message struct {
ID int64 `json:"id"`
Kind string `json:"kind"` // todo_due | ticket_due | analysis | sync | system
Title string `json:"title"`
Body string `json:"body"`
SourceType string `json:"sourceType"` // todo | ticket | project | ""
SourceID int64 `json:"sourceId"`
Read bool `json:"read"`
CreatedAt string `json:"createdAt"`
}
type AppSettings struct {
Theme string `json:"theme"`
Locale string `json:"locale"`
GitScope string `json:"gitScope"`
DatabasePath string `json:"databasePath"`
AutoRefresh bool `json:"autoRefresh"`
GlassOpacity int `json:"glassOpacity"`
LoadingStyle string `json:"loadingStyle"`
// 托盘与定时更新Phase 2
MinimizeToTray bool `json:"minimizeToTray"`
AutoUpdateEnabled bool `json:"autoUpdateEnabled"`
AutoUpdateMode string `json:"autoUpdateMode"` // daily | everyNDays | everyNHours
AutoUpdateInterval int `json:"autoUpdateInterval"` // everyNDays/everyNHours 的 N
AutoUpdateTime string `json:"autoUpdateTime"` // daily/everyNDays 的触发时刻 HH:MM
// AI 分析Phase 5
AIProvider string `json:"aiProvider"` // spark | deepseek
SparkKey string `json:"sparkKey"`
DeepSeekKey string `json:"deepSeekKey"`
// SyncAPIKeys 开启后 AI API Key 会加密同步到云端(密钥由登录密码派生,服务器不可解密)。
SyncAPIKeys bool `json:"syncApiKeys"`
// 用户头像AvatarMode 为 ""(未设置) | base64 | url | pathAvatarValue 依模式存 dataURL / 图片 URL / 本地文件路径。
AvatarMode string `json:"avatarMode"`
AvatarValue string `json:"avatarValue"`
// 内容图片存储:待办/工单 Markdown 里粘贴或插入的图片如何保存。
// base64内嵌 dataURL随内容同步到云端| path写入数据目录仅本机可见
ImageMode string `json:"imageMode"`
}
// AvatarPick 是选择头像图片的结果Value 为要保存的值Preview 为可直接显示的图片源。
// SearchHit 全局搜索Ctrl+K 命令面板)的一条结果。
type SearchHit struct {
Kind string `json:"kind"` // project | todo | ticket | conversation
ID int64 `json:"id"`
Title string `json:"title"`
Sub string `json:"sub"` // 路径 / 状态 / 供应商等辅助信息
Extra string `json:"extra"` // 次级状态(如优先级)
}
type AvatarPick struct {
// Mode 是选图后实际采用的存储模式base64 | urlauto 选图时由全局配置决定。
Mode string `json:"mode"`
Value string `json:"value"`
Preview string `json:"preview"`
}
// AIConversation 是一次 AI 分析会话(可绑定项目)。
type AIConversation struct {
ID int64 `json:"id"`
ProjectID int64 `json:"projectId"`
ProjectName string `json:"projectName"`
Provider string `json:"provider"`
Title string `json:"title"`
CreatedAt string `json:"createdAt"`
UpdatedAt string `json:"updatedAt"`
}
// AIMessage 是会话中的一条消息。
type AIMessage struct {
ID int64 `json:"id"`
ConversationID int64 `json:"conversationId"`
Role string `json:"role"` // user | assistant
Content string `json:"content"`
CreatedAt string `json:"createdAt"`
}
// AISummary 是分析完成后 AI 生成的模块介绍(按项目+模块各存最新一份)。
type AISummary struct {
ProjectID int64 `json:"projectId"`
Kind string `json:"kind"` // project | git
Content string `json:"content"`
Provider string `json:"provider"`
GeneratedAt string `json:"generatedAt"`
}
type Dashboard struct {
Projects int64 `json:"projects"`
TotalLines int64 `json:"totalLines"`
CodeLines int64 `json:"codeLines"`
CommentLines int64 `json:"commentLines"`
BlankLines int64 `json:"blankLines"`
FileCount int64 `json:"fileCount"`
Commits int64 `json:"commits"`
Contributors int64 `json:"contributors"`
Languages []LanguageStat `json:"languages"`
}
// FileStorageConfig 是全局「文件存储方式」配置:由管理员(云端账号 id=1设置
// 云端存 sync_settings 的 file_storage 行(挂在 id=1 名下),随同步分发给所有账号。
// mode=local 时图片维持本地行为mode=server 时内容图imageMode=server
// 头像选图上传到 nl-pms-api 换取 http URL远程/跨设备场景直接引用。
type FileStorageConfig struct {
Mode string `json:"mode"` // local | server
BaseURL string `json:"baseUrl"` // nl-pms-api 地址,如 http://192.168.1.10:8788
APIKey string `json:"apiKey"` // 已废弃;上传改用登录 JWT
}
// ServerFile 是 nl-pms-api 素材库中的一条文件记录(含上传者用户名与公开访问 URL
type ServerFile struct {
ID int64 `json:"id"`
Name string `json:"name"`
URL string `json:"url"`
Mime string `json:"mime"`
Size int64 `json:"size"`
UserID int64 `json:"userId"`
TeamID int64 `json:"teamId"`
Kind string `json:"kind"` // avatar | content
Username string `json:"username"`
CreatedAt string `json:"createdAt"`
}
// ServerFileList 是素材库的一页结果。
type ServerFileList struct {
Total int64 `json:"total"`
Items []ServerFile `json:"items"`
}
// SyncConfig 是 nl-pms-api 的 HTTP 基址配置(保存在本地 SQLite meta
type SyncConfig struct {
BaseURL string `json:"baseUrl"`
}
// SyncStatus 描述当前登录与同步状态,供设置页展示。
type SyncStatus struct {
Configured bool `json:"configured"`
LoggedIn bool `json:"loggedIn"`
// UserID 为云端账号 idid=1 视为管理员(可配置节日背景图等全局资源)。
UserID int64 `json:"userId"`
Username string `json:"username"`
LastSyncAt string `json:"lastSyncAt"`
Syncing bool `json:"syncing"`
Online bool `json:"online"`
LastError string `json:"lastError"`
Pushed int `json:"pushed"`
Pulled int `json:"pulled"`
// Pending 为本地待推送dirty行数用于界面徽标。
Pending int `json:"pending"`
}
// FestivalImage 是一个节日的背景配置mode 决定日历格显示自定义照片还是动态插画。
// image 在 mode=art 时仍保留,方便管理员切回图片模式无需重新上传。
type FestivalImage struct {
Mode string `json:"mode"` // photo | art
Image string `json:"image"`
}
// LogPage 是日志分页搜索的结果counts 基于当前搜索条件(忽略级别筛选)。
type LogPage struct {
Items []LogEntry `json:"items"`
Total int64 `json:"total"`
Info int64 `json:"info"`
Warning int64 `json:"warning"`
Error int64 `json:"error"`
}
// BatchSummary 是批量统计完成后的汇总事件载荷。
type BatchSummary struct {
Total int `json:"total"`
Completed int `json:"completed"`
Failed int `json:"failed"`
Cancelled int `json:"cancelled"`
Failures []string `json:"failures"`
}
// FilePreview 是文件预览接口的返回载荷。
type FilePreview struct {
Path string `json:"path"`
Name string `json:"name"`
Extension string `json:"extension"`
Size int64 `json:"size"`
Content string `json:"content"`
Lines int `json:"lines"`
Truncated bool `json:"truncated"`
Binary bool `json:"binary"`
}
// TaskEvent 只传递稳定消息键,具体中文或英文由前端根据当前语言即时翻译。
type TaskEvent struct {
TaskID string `json:"taskId"`
ProjectID int64 `json:"projectId"`
Stage string `json:"stage"`
Progress int `json:"progress"`
MessageKey string `json:"messageKey"`
Params map[string]any `json:"params,omitempty"`
}
// CloneInput 是「从 Git 克隆并添加项目」的入参。
type CloneInput struct {
URL string `json:"url"`
ParentDir string `json:"parentDir"`
Name string `json:"name"`
GroupID int64 `json:"groupId"`
Description string `json:"description"`
}
// LaunchCategory 是启动台一级分类(用户自定义,仅本地)。
type LaunchCategory struct {
ID int64 `json:"id"`
Name string `json:"name"`
Sort int `json:"sort"`
CreatedAt string `json:"createdAt"`
}
// LaunchApp 是启动台保存的应用(含启停命令)。
type LaunchApp struct {
ID int64 `json:"id"`
Name string `json:"name"`
Kind string `json:"kind"`
Port int `json:"port"`
Dir string `json:"dir"`
StartCmd string `json:"startCmd"`
StopCmd string `json:"stopCmd"`
LastPID int64 `json:"lastPid"`
Icon string `json:"icon"` // dataURL本地抓取或用户选图
CategoryID int64 `json:"categoryId"` // 一级分类 id0=未归类
Category string `json:"category"` // 二级分类(自由文本)
CreatedAt string `json:"createdAt"`
UpdatedAt string `json:"updatedAt"`
}
// LaunchEntry 是启动台卡片条目:保存的应用与实时扫描到的监听进程合并后的视图。
type LaunchEntry struct {
ID int64 `json:"id"` // launch_apps id0 表示未保存的扫描条目
Name string `json:"name"`
Kind string `json:"kind"`
Port int `json:"port"`
Dir string `json:"dir"`
StartCmd string `json:"startCmd"`
StopCmd string `json:"stopCmd"`
Running bool `json:"running"`
PID int32 `json:"pid"`
Exe string `json:"exe"`
Cmdline string `json:"cmdline"`
Ports []int `json:"ports"`
CPU float64 `json:"cpu"` // 占全机 CPU 百分比
MemMB float64 `json:"memMB"` // 常驻内存
IOKBs float64 `json:"ioKBs"` // 磁盘读写吞吐
ProjectID int64 `json:"projectId"` // 若目录匹配到「我的项目」则带上
Icon string `json:"icon"` // dataURL
CategoryID int64 `json:"categoryId"` // 一级分类
Category string `json:"category"` // 二级分类
// Status: starting | running | stopped | failed内存态失败会标红
Status string `json:"status"`
LastError string `json:"lastError"`
LastLog string `json:"lastLog"`
}
// LaunchLogLine 启动台本地进程日志行(不同步)。
type LaunchLogLine struct {
ID int64 `json:"id"`
AppID int64 `json:"appId"`
Level string `json:"level"`
Line string `json:"line"`
CreatedAt string `json:"createdAt"`
}
// LaunchSuggest 是按项目种类推荐的启停命令。
type LaunchSuggest struct {
Start []string `json:"start"`
Stop []string `json:"stop"`
}
// LaunchProfile 根据目录/项目探测出的启动草稿(种类、推荐命令、默认端口)。
type LaunchProfile struct {
Name string `json:"name"`
Kind string `json:"kind"`
Port int `json:"port"`
Dir string `json:"dir"`
StartCmd string `json:"startCmd"`
StopCmd string `json:"stopCmd"`
Start []string `json:"start"`
Stop []string `json:"stop"`
ProjectID int64 `json:"projectId"`
}