feat: 重造领域模型并对齐 android(home/checkin/plan/profile/session)
This commit is contained in:
119
IosClientKit/Sources/CoreModel/Plan.swift
Normal file
119
IosClientKit/Sources/CoreModel/Plan.swift
Normal file
@@ -0,0 +1,119 @@
|
||||
import Foundation
|
||||
|
||||
/// 计划类型(周/月/年)。
|
||||
public enum PlanType: String, CaseIterable, Hashable, Sendable {
|
||||
case weekly
|
||||
case monthly
|
||||
case yearly
|
||||
|
||||
public var label: String {
|
||||
switch self {
|
||||
case .weekly: return "周计划"
|
||||
case .monthly: return "月计划"
|
||||
case .yearly: return "年计划"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// 我提交的计划记录。
|
||||
public struct MyPlanRecord: Hashable, Sendable {
|
||||
public let status: String
|
||||
public let submittedTime: String
|
||||
public let content: String
|
||||
public let attachments: [String]
|
||||
|
||||
public init(status: String, submittedTime: String, content: String, attachments: [String]) {
|
||||
self.status = status
|
||||
self.submittedTime = submittedTime
|
||||
self.content = content
|
||||
self.attachments = attachments
|
||||
}
|
||||
}
|
||||
|
||||
/// 小组成员(计划视角)。
|
||||
public struct PlanMember: Identifiable, Hashable, Sendable {
|
||||
public let id: String
|
||||
public let name: String
|
||||
public let filled: Bool
|
||||
|
||||
public init(id: String, name: String, filled: Bool) {
|
||||
self.id = id
|
||||
self.name = name
|
||||
self.filled = filled
|
||||
}
|
||||
}
|
||||
|
||||
/// 小组计划统计(含成员)。
|
||||
public struct PlanGroup: Identifiable, Hashable, Sendable {
|
||||
public let id: String
|
||||
public let name: String
|
||||
public let checkedCount: Int
|
||||
public let memberCount: Int
|
||||
public let members: [PlanMember]
|
||||
|
||||
public init(id: String, name: String, checkedCount: Int, memberCount: Int, members: [PlanMember]) {
|
||||
self.id = id
|
||||
self.name = name
|
||||
self.checkedCount = checkedCount
|
||||
self.memberCount = memberCount
|
||||
self.members = members
|
||||
}
|
||||
}
|
||||
|
||||
/// 计划页聚合数据。
|
||||
public struct PlanRecord: Hashable, Sendable {
|
||||
public let type: PlanType
|
||||
public let periodKey: String
|
||||
public let canSubmit: Bool
|
||||
public let message: String?
|
||||
public let myChecked: Bool
|
||||
public let myRecord: MyPlanRecord?
|
||||
public let groups: [PlanGroup]
|
||||
public let unassignedCount: Int
|
||||
|
||||
public init(
|
||||
type: PlanType,
|
||||
periodKey: String,
|
||||
canSubmit: Bool,
|
||||
message: String?,
|
||||
myChecked: Bool,
|
||||
myRecord: MyPlanRecord?,
|
||||
groups: [PlanGroup],
|
||||
unassignedCount: Int
|
||||
) {
|
||||
self.type = type
|
||||
self.periodKey = periodKey
|
||||
self.canSubmit = canSubmit
|
||||
self.message = message
|
||||
self.myChecked = myChecked
|
||||
self.myRecord = myRecord
|
||||
self.groups = groups
|
||||
self.unassignedCount = unassignedCount
|
||||
}
|
||||
}
|
||||
|
||||
/// 提交计划页数据。
|
||||
public struct PlanSubmitData: Hashable, Sendable {
|
||||
public let content: String
|
||||
public let attachments: [String]
|
||||
public let checked: Bool
|
||||
public let canSubmit: Bool
|
||||
public let message: String?
|
||||
public let history: [MyPlanRecord]
|
||||
|
||||
public init(
|
||||
content: String,
|
||||
attachments: [String],
|
||||
checked: Bool,
|
||||
canSubmit: Bool,
|
||||
message: String?,
|
||||
history: [MyPlanRecord]
|
||||
) {
|
||||
self.content = content
|
||||
self.attachments = attachments
|
||||
self.checked = checked
|
||||
self.canSubmit = canSubmit
|
||||
self.message = message
|
||||
self.history = history
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user