96 lines
2.6 KiB
Swift
96 lines
2.6 KiB
Swift
import Dependencies
|
|
import DependenciesMacros
|
|
import Fluent
|
|
import SharedModels
|
|
import Vapor
|
|
|
|
public extension DatabaseClient {
|
|
@DependencyClient
|
|
struct PurchaseOrders: Sendable {
|
|
public var create: @Sendable (PurchaseOrder.Create, User.ID) async throws -> PurchaseOrder
|
|
public var fetchAll: @Sendable () async throws -> [PurchaseOrder]
|
|
public var fetchPage: @Sendable (PageRequest) async throws -> Page<PurchaseOrder>
|
|
public var get: @Sendable (PurchaseOrder.ID) async throws -> PurchaseOrder?
|
|
// var update: @Sendable (PurchaseOrder.ID, PurchaseOrder.Update) async throws -> PurchaseOrder
|
|
public var delete: @Sendable (PurchaseOrder.ID) async throws -> Void
|
|
}
|
|
}
|
|
|
|
extension PurchaseOrder: Content {}
|
|
extension PurchaseOrder.Create: Content {}
|
|
|
|
extension DatabaseClient.PurchaseOrders: TestDependencyKey {
|
|
public static let testValue: DatabaseClient.PurchaseOrders = Self()
|
|
}
|
|
|
|
#if DEBUG
|
|
typealias PurchaseOrderMockStorage = MockStorage<
|
|
PurchaseOrder,
|
|
PurchaseOrder.Create,
|
|
Void,
|
|
Void,
|
|
Void
|
|
>
|
|
|
|
public extension DependencyValues {
|
|
var purchaseOrderID: PurchaseOrderIDGenerator {
|
|
get { self[PurchaseOrderIDGenerator.self] }
|
|
set { self[PurchaseOrderIDGenerator.self] = newValue }
|
|
}
|
|
}
|
|
|
|
@DependencyClient
|
|
public struct PurchaseOrderIDGenerator: Sendable {
|
|
var nextID: @Sendable () async throws -> Int
|
|
}
|
|
|
|
extension PurchaseOrderIDGenerator: DependencyKey {
|
|
public static let testValue: PurchaseOrderIDGenerator = .liveValue
|
|
|
|
public static var liveValue: Self {
|
|
let counter = Counter()
|
|
return .init(nextID: { await counter.nextID() })
|
|
}
|
|
|
|
actor Counter {
|
|
private var count: Int
|
|
|
|
init(starting: Int = 1) {
|
|
self.count = starting
|
|
}
|
|
|
|
func nextID() async -> Int {
|
|
count += 1
|
|
return count
|
|
}
|
|
}
|
|
}
|
|
|
|
// private extension PurchaseOrderMockStorage {
|
|
// static func make(_ mocks: [PurchaseOrder]) -> Self {
|
|
// @Dependency(\.date.now) var now
|
|
// @Dependency(\.purchaseOrderID) var purchaseOrderID
|
|
//
|
|
// return .init(
|
|
// mocks,
|
|
// create: { model in
|
|
// try await PurchaseOrder(
|
|
// id: purchaseOrderID.nextID(),
|
|
// workOrder: model.workOrder,
|
|
// materials: model.materials,
|
|
// customer: model.customer,
|
|
// truckStock: model.truckStock,
|
|
// createdBy: model.createdForID,
|
|
// createdFor: model.createdForID,
|
|
// vendorBranch: .i
|
|
//
|
|
// )
|
|
// },
|
|
// update: { _, _ in
|
|
// fatalError()
|
|
// }
|
|
// )
|
|
// }
|
|
// }
|
|
#endif
|