Lower deployment target to iOS 16, replace @Observable with ObservableObject, add navigation and UI compatibility shims, and include login smoke UI tests. Co-authored-by: Cursor <cursoragent@cursor.com>
121 lines
3.7 KiB
Swift
121 lines
3.7 KiB
Swift
//
|
||
// ScenicPermissionAPI.swift
|
||
// suixinkan
|
||
//
|
||
// Created by Codex on 2026/6/23.
|
||
//
|
||
|
||
import Foundation
|
||
import Combine
|
||
|
||
/// 景区权限模块服务协议,定义景区选择、权限申请和景区申请所需接口。
|
||
@MainActor
|
||
protocol ScenicPermissionServing {
|
||
/// 获取所有可申请景区列表。
|
||
func scenicListAll() async throws -> ScenicListAllResponse
|
||
|
||
/// 获取省市区地区树。
|
||
func areas() async throws -> [ScenicAreaNode]
|
||
|
||
/// 获取当前用户的景区申请记录。
|
||
func scenicApplicationPendingAll() async throws -> ScenicApplicationPendingsResponse
|
||
|
||
/// 提交新增景区入驻申请。
|
||
func scenicSubmit(_ request: ScenicApplicationSubmitRequest) async throws
|
||
|
||
/// 提交景区申请图片占位信息。
|
||
func scenicApplicationUploadPlaceholder(_ items: [ScenicApplicationUploadPlaceholder]) async throws
|
||
|
||
/// 获取当前用户的角色权限申请记录。
|
||
func roleApplyAll() async throws -> [RoleApplyPendingResponse]
|
||
|
||
/// 提交角色景区权限申请。
|
||
func roleApplySubmit(roleId: Int, scenicIds: [Int]) async throws
|
||
}
|
||
|
||
@MainActor
|
||
/// 景区权限 API,封装景区选择和申请相关网络请求。
|
||
final class ScenicPermissionAPI {
|
||
private let client: APIClient
|
||
|
||
/// 初始化景区权限 API,并注入共享网络客户端。
|
||
init(client: APIClient) {
|
||
self.client = client
|
||
}
|
||
|
||
/// 获取所有可申请景区列表。
|
||
func scenicListAll() async throws -> ScenicListAllResponse {
|
||
try await client.send(
|
||
APIRequest(
|
||
method: .get,
|
||
path: "/api/yf-handset-app/photog/scenic/list-all"
|
||
)
|
||
)
|
||
}
|
||
|
||
/// 获取省市区地区树。
|
||
func areas() async throws -> [ScenicAreaNode] {
|
||
try await client.send(
|
||
APIRequest(
|
||
method: .get,
|
||
path: "/api/app/config/areas"
|
||
)
|
||
)
|
||
}
|
||
|
||
/// 获取当前用户的景区申请记录。
|
||
func scenicApplicationPendingAll() async throws -> ScenicApplicationPendingsResponse {
|
||
try await client.send(
|
||
APIRequest(
|
||
method: .get,
|
||
path: "/api/yf-handset-app/photog/scenic-apply/all"
|
||
)
|
||
)
|
||
}
|
||
|
||
/// 提交新增景区入驻申请。
|
||
func scenicSubmit(_ request: ScenicApplicationSubmitRequest) async throws {
|
||
let _: EmptyPayload = try await client.send(
|
||
APIRequest(
|
||
method: .post,
|
||
path: "/api/yf-handset-app/photog/scenic-apply/submit",
|
||
body: request
|
||
)
|
||
)
|
||
}
|
||
|
||
/// 提交景区申请图片占位信息。
|
||
func scenicApplicationUploadPlaceholder(_ items: [ScenicApplicationUploadPlaceholder]) async throws {
|
||
let _: EmptyPayload = try await client.send(
|
||
APIRequest(
|
||
method: .post,
|
||
path: "/api/yf-handset-app/photog/scenic-apply/upload-placeholder",
|
||
body: ["files": items]
|
||
)
|
||
)
|
||
}
|
||
|
||
/// 获取当前用户的角色权限申请记录。
|
||
func roleApplyAll() async throws -> [RoleApplyPendingResponse] {
|
||
try await client.send(
|
||
APIRequest(
|
||
method: .get,
|
||
path: "/api/yf-handset-app/photog/role-apply/all"
|
||
)
|
||
)
|
||
}
|
||
|
||
/// 提交角色景区权限申请。
|
||
func roleApplySubmit(roleId: Int, scenicIds: [Int]) async throws {
|
||
let _: EmptyPayload = try await client.send(
|
||
APIRequest(
|
||
method: .post,
|
||
path: "/api/yf-handset-app/photog/role-apply/submit",
|
||
body: RoleApplySubmitRequest(scenicId: scenicIds, roleId: roleId)
|
||
)
|
||
)
|
||
}
|
||
}
|
||
|
||
extension ScenicPermissionAPI: ScenicPermissionServing {}
|