Files
suixinkan_ios_new/suixinkan/Features/Orders/API/OrdersAPI.swift

135 lines
4.4 KiB
Swift
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// OrdersAPI.swift
// suixinkan
//
// Created by Codex on 2026/6/22.
//
import Foundation
import Observation
@MainActor
/// 便
protocol OrderServing {
///
func orderList(
scenicId: Int,
page: Int,
pageSize: Int,
orderStatus: Int?,
userPhone: String?,
startTime: String?,
endTime: String?,
isRefined: Int?,
isScenicAdmin: Bool
) async throws -> ListPayload<OrderEntity>
///
func writeOffList(scenicId: Int, storeId: Int?, page: Int, pageSize: Int) async throws -> ListPayload<WriteOffOrderItem>
///
func writeOff(orderNumber: String) async throws
///
func storeOrderDetail(storeId: Int, orderNumber: String) async throws -> StoreOrderDetailResponse
}
@MainActor
@Observable
/// API
final class OrdersAPI: OrderServing {
@ObservationIgnored private let client: APIClient
/// API
init(client: APIClient) {
self.client = client
}
///
func orderList(
scenicId: Int,
page: Int = 1,
pageSize: Int = 20,
orderStatus: Int? = nil,
userPhone: String? = nil,
startTime: String? = nil,
endTime: String? = nil,
isRefined: Int? = nil,
isScenicAdmin: Bool = false
) async throws -> ListPayload<OrderEntity> {
var query = [
URLQueryItem(name: "scenic_id", value: "\(scenicId)"),
URLQueryItem(name: "page", value: "\(max(page, 1))"),
URLQueryItem(name: "page_size", value: "\(max(pageSize, 1))")
]
if let orderStatus, orderStatus > 0 {
query.append(URLQueryItem(name: "order_status", value: "\(orderStatus)"))
}
if let userPhone, !userPhone.isEmpty {
query.append(URLQueryItem(name: "user_phone", value: userPhone))
}
if let startTime, !startTime.isEmpty {
query.append(URLQueryItem(name: "start_time", value: startTime))
}
if let endTime, !endTime.isEmpty {
query.append(URLQueryItem(name: "end_time", value: endTime))
}
if let isRefined, isRefined > 0 {
query.append(URLQueryItem(name: "is_refined", value: "\(isRefined)"))
}
return try await client.send(
APIRequest(
method: .get,
path: isScenicAdmin ? "/api/app/scenic-admin/order/list" : "/api/yf-handset-app/photog/order/listv2",
queryItems: query
)
)
}
///
func writeOffList(scenicId: Int, storeId: Int? = nil, page: Int = 1, pageSize: Int = 20) async throws -> ListPayload<WriteOffOrderItem> {
var queryItems = [
URLQueryItem(name: "scenic_id", value: "\(scenicId)"),
URLQueryItem(name: "page", value: "\(max(page, 1))"),
URLQueryItem(name: "page_size", value: "\(max(pageSize, 1))")
]
if let storeId, storeId > 0 {
queryItems.append(URLQueryItem(name: "store_id", value: "\(storeId)"))
}
return try await client.send(
APIRequest(
method: .get,
path: "/api/yf-handset-app/photog/order/order-verification-list",
queryItems: queryItems
)
)
}
///
func writeOff(orderNumber: String) async throws {
let _: EmptyPayload = try await client.send(
APIRequest(
method: .post,
path: "/api/yf-handset-app/photog/order/order-verify",
body: WriteOffRequest(orderNumber: orderNumber)
)
)
}
///
func storeOrderDetail(storeId: Int, orderNumber: String) async throws -> StoreOrderDetailResponse {
try await client.send(
APIRequest(
method: .get,
path: "/api/app/store/order/detail",
queryItems: [
URLQueryItem(name: "store_id", value: "\(storeId)"),
URLQueryItem(name: "order_number", value: orderNumber)
]
)
)
}
}