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() }