import Foundation /// 签到 + 任务,对齐后端 signin.py / tasks.py(需登录)。 struct WelfareService { private var api: APIClient { .shared } func signinStatus() async throws -> SigninStatusDTO { try await api.get("api/v1/signin/status") } func doSignin() async throws -> SigninResultDTO { try await api.post("api/v1/signin") } func tasks() async throws -> TaskListDTO { try await api.get("api/v1/tasks") } /// task_key 在 URL 路径上,不是 body。 func claimTask(taskKey: String) async throws -> TaskClaimResultDTO { let key = taskKey.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? taskKey return try await api.post("api/v1/tasks/\(key)/claim") } }