feat(server): 用户管理与变更历史接口;修复 result_revisions.parent_id 从未写入

This commit is contained in:
AskaEth committed 2026-09-09 19:51:50 +08:00
1 parent f3813171d3
commit 72462792ec
39 files changed
+10001 -28

No files matched your search

+74
View File
@@ -286,6 +286,80 @@ type eventSettingsStandings struct {
ShowIndividualBoard bool `json:"showIndividualBoard"`
}
// ---------- 用户管理 ----------
type userListItemDTO struct {
ID int64 `json:"id"`
Username string `json:"username"`
DisplayName string `json:"displayName"`
Role string `json:"role"`
Active bool `json:"active"`
MustChangePassword bool `json:"mustChangePassword"`
LastLoginAt *string `json:"lastLoginAt"`
}
// resetPasswordResultDTO 里的 password 是唯一一次明文,落库只存哈希。
type resetPasswordResultDTO struct {
ID int64 `json:"id"`
Username string `json:"username"`
Password string `json:"password"`
Generated bool `json:"generated"`
MustChangePassword bool `json:"mustChangePassword"`
}
// ---------- 变更历史 ----------
type revisionPageDTO struct {
Items []revisionListItemDTO `json:"items"`
Total int `json:"total"`
Limit int `json:"limit"`
Offset int `json:"offset"`
}
type revisionListItemDTO struct {
ID int64 `json:"id"`
ParentID *int64 `json:"parentId"`
EventID int64 `json:"eventId"`
EventName string `json:"eventName"`
Action string `json:"action"`
ActorID *int64 `json:"actorId"`
ActorName string `json:"actorName"`
Message *string `json:"message"`
CreatedAt string `json:"createdAt"`
ChangedCount int `json:"changedCount"`
}
type revisionDetailDTO struct {
revisionListItemDTO
Snapshot []resultDTO `json:"snapshot"`
Diff revisionDiffDTO `json:"diff"`
}
type revisionDiffDTO struct {
Results []revisionResultChangeDTO `json:"results"`
Teams []revisionTeamDeltaDTO `json:"teams"`
}
type revisionResultChangeDTO struct {
ResultID int64 `json:"resultId"`
EntryID int64 `json:"entryId"`
TeamID *int64 `json:"teamId"`
Change string `json:"change"`
Fields []string `json:"fields,omitempty"`
Before *resultDTO `json:"before"`
After *resultDTO `json:"after"`
}
type revisionTeamDeltaDTO struct {
TeamID int64 `json:"teamId"`
TeamCode string `json:"teamCode"`
TeamName string `json:"teamName"`
PointsBefore float64 `json:"pointsBefore"`
PointsAfter float64 `json:"pointsAfter"`
PointsDelta float64 `json:"pointsDelta"`
ChangedResults int `json:"changedResults"`
}
// ---------- domain → DTO ----------
func standingRowsDTO(rows []domain.StandingsRow, teams map[int64]teamDTO) []standingRowDTO {