// // MessageCenterAPI.swift // suixinkan // import Foundation /// 消息中心服务协议,抽象列表、已读和删除接口。 @MainActor protocol MessageCenterServing { /// 拉取消息列表。 func list(lastId: Int, limit: Int, unread: Int) async throws -> MessageListResponse /// 获取当前账号未读消息总数。 func unreadCount() async throws -> MessageUnreadCountResponse /// 标记消息已读并返回最新未读数量。 func markAsRead(messageId: Int) async throws -> MessageUnreadCountResponse /// 将当前账号全部消息标记已读。 func markAllAsRead() async throws -> MessageReadAllResponse /// 删除消息。 func delete(messageId: Int) async throws } /// 消息中心 API,对齐 Android `NetworkApi` 的 msg 区域。 @MainActor final class MessageCenterAPI: MessageCenterServing { private let client: APIClient /// 初始化消息中心 API。 init(client: APIClient) { self.client = client } /// GET /api/app/msg/list func list(lastId: Int = 0, limit: Int = 20, unread: Int = 0) async throws -> MessageListResponse { try await client.send( APIRequest( method: .get, path: "/api/app/msg/list", queryItems: [ URLQueryItem(name: "last_id", value: String(max(lastId, 0))), URLQueryItem(name: "limit", value: String(max(limit, 1))), URLQueryItem(name: "unread", value: String(max(unread, 0))), ] ) ) } /// GET /api/app/msg/unread-count func unreadCount() async throws -> MessageUnreadCountResponse { try await client.send( APIRequest(method: .get, path: "/api/app/msg/unread-count") ) } /// POST /api/app/msg/read func markAsRead(messageId: Int) async throws -> MessageUnreadCountResponse { try await client.send( APIRequest( method: .post, path: "/api/app/msg/read", queryItems: [URLQueryItem(name: "id", value: String(messageId))] ) ) } /// POST /api/app/msg/read-all func markAllAsRead() async throws -> MessageReadAllResponse { try await client.send( APIRequest(method: .post, path: "/api/app/msg/read-all") ) } /// POST /api/app/msg/delete func delete(messageId: Int) async throws { let _: EmptyPayload = try await client.send( APIRequest( method: .post, path: "/api/app/msg/delete", body: MessageDeleteRequest(id: messageId) ) ) } }