50 lines
1.2 KiB
Swift
50 lines
1.2 KiB
Swift
import Foundation
|
|
|
|
enum WorkspaceKind: String, Codable, CaseIterable, Sendable {
|
|
case personal
|
|
case team
|
|
}
|
|
|
|
enum WorkspaceRole: String, Codable, CaseIterable, Sendable {
|
|
case owner
|
|
case admin
|
|
case developer
|
|
case viewer
|
|
}
|
|
|
|
struct SonarWorkspace: Codable, Identifiable, Hashable, Sendable {
|
|
var id: UUID
|
|
var name: String
|
|
var kind: WorkspaceKind
|
|
var role: WorkspaceRole
|
|
var serverIDs: [UUID]
|
|
var createdAt: Date
|
|
var updatedAt: Date
|
|
|
|
init(id: UUID = UUID(), name: String, kind: WorkspaceKind, role: WorkspaceRole,
|
|
serverIDs: [UUID] = [], createdAt: Date = Date(), updatedAt: Date = Date()) {
|
|
self.id = id
|
|
self.name = name
|
|
self.kind = kind
|
|
self.role = role
|
|
self.serverIDs = serverIDs
|
|
self.createdAt = createdAt
|
|
self.updatedAt = updatedAt
|
|
}
|
|
|
|
static let personal = SonarWorkspace(
|
|
id: UUID(uuidString: "00000000-0000-0000-0000-000000000001")!,
|
|
name: "Personal",
|
|
kind: .personal,
|
|
role: .owner
|
|
)
|
|
}
|
|
|
|
struct WorkspaceMember: Codable, Identifiable, Hashable, Sendable {
|
|
var id: UUID
|
|
var workspaceID: UUID
|
|
var displayName: String
|
|
var role: WorkspaceRole
|
|
var joinedAt: Date
|
|
}
|