54 lines
1.5 KiB
Swift
54 lines
1.5 KiB
Swift
import Dependencies
|
|
import DependenciesMacros
|
|
import SharedModels
|
|
import Vapor
|
|
|
|
public extension DatabaseClient {
|
|
@DependencyClient
|
|
struct Vendors: Sendable {
|
|
public var create: @Sendable (Vendor.Create) async throws -> Vendor
|
|
public var delete: @Sendable (Vendor.ID) async throws -> Void
|
|
public var fetchAll: @Sendable (FetchRequest) async throws -> [Vendor]
|
|
public var get: @Sendable (Vendor.ID, GetRequest?) async throws -> Vendor?
|
|
public var update: @Sendable (Vendor.ID, Vendor.Update, GetRequest?) async throws -> Vendor
|
|
|
|
public enum FetchRequest: Sendable {
|
|
case all
|
|
case withBranches
|
|
}
|
|
|
|
public enum GetRequest: Sendable {
|
|
case withBranches
|
|
}
|
|
|
|
@Sendable
|
|
public func fetchAll() async throws -> [Vendor] {
|
|
try await fetchAll(.all)
|
|
}
|
|
|
|
@Sendable
|
|
public func get(_ id: Vendor.ID) async throws -> Vendor? {
|
|
try await get(id, nil)
|
|
}
|
|
|
|
@Sendable
|
|
public func update(
|
|
_ id: Vendor.ID,
|
|
with updates: Vendor.Update,
|
|
returnWithBranches: Bool = false
|
|
) async throws -> Vendor {
|
|
try await update(id, updates, returnWithBranches ? GetRequest.withBranches : nil)
|
|
}
|
|
}
|
|
}
|
|
|
|
extension Vendor: Content {}
|
|
extension Vendor.Create: Content {}
|
|
extension Vendor.Update: Content {}
|
|
extension DatabaseClient.Vendors.FetchRequest: Content {}
|
|
extension DatabaseClient.Vendors.GetRequest: Content {}
|
|
|
|
extension DatabaseClient.Vendors: TestDependencyKey {
|
|
public static let testValue: DatabaseClient.Vendors = Self()
|
|
}
|