gitbay/Dashboard/DashboardModels.swift

5411753023a5e2958f17b523903abce380941107
gitbay-ios/gitbay/Dashboard/DashboardModels.swift history · blame · raw

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}