gitbay/Dashboard/DashboardModels.swift
54 lines · 1543 bytes
1import Foundation
2
3/// The `dashboard` command: the whole account aggregate in one read.
4/// `internal/control/dashboard.go` — arrays are always present.
5nonisolated struct DashboardData: Decodable, Sendable, Hashable {
6 /// Pinned repos share `repo list`'s row shape.
7 let pinned: [RepoSummary]
8 let openMRs: [DashboardItem]
9 let assignedIssues: [DashboardItem]
10 let builds: [DashboardBuild]
11
12 enum CodingKeys: String, CodingKey {
13 case pinned, builds
14 case openMRs = "open_mrs"
15 case assignedIssues = "assigned_issues"
16 }
17}
18
19/// One open issue or MR row, repo resolved server-side.
20nonisolated struct DashboardItem: Decodable, Sendable, Hashable, Identifiable {
21 let repo: String
22 let number: Int64
23 let title: String
24 let author: String
25 let state: String
26 let updatedAt: Date
27
28 enum CodingKeys: String, CodingKey {
29 case repo, number, title, author, state
30 case updatedAt = "updated_at"
31 }
32
33 var id: String { "\(repo)#\(number)" }
34}
35
36/// One build row with its repo attached.
37nonisolated struct DashboardBuild: Decodable, Sendable, Hashable, Identifiable {
38 let repo: String
39 let number: Int64
40 let job: String
41 let status: String
42 let sha: String
43 let ref: String
44 let createdAt: Date
45 let finishedAt: Date?
46
47 enum CodingKeys: String, CodingKey {
48 case repo, number, job, status, sha, ref
49 case createdAt = "created_at"
50 case finishedAt = "finished_at"
51 }
52
53 var id: String { "\(repo)#\(number)" }
54}