fix: Fixes purchase order view generation to use the intermediate request and the logged in user as the created by id.
This commit is contained in:
@@ -10,7 +10,10 @@ extension ViewController {
|
|||||||
for: route,
|
for: route,
|
||||||
isHtmxRequest: request.isHtmxRequest,
|
isHtmxRequest: request.isHtmxRequest,
|
||||||
logger: request.logger,
|
logger: request.logger,
|
||||||
authenticate: { request.session.authenticate($0) }
|
authenticate: { request.session.authenticate($0) },
|
||||||
|
currentUser: {
|
||||||
|
try request.auth.require(User.self)
|
||||||
|
}
|
||||||
)
|
)
|
||||||
return AnyHTMLResponse(value: html)
|
return AnyHTMLResponse(value: html)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -135,7 +135,7 @@ public extension SiteRoute {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public enum PurchaseOrderRoute: Sendable, Equatable {
|
public enum PurchaseOrderRoute: Sendable, Equatable {
|
||||||
case create(PurchaseOrder.Create)
|
case create(PurchaseOrder.CreateIntermediate)
|
||||||
case form
|
case form
|
||||||
case get(id: PurchaseOrder.ID)
|
case get(id: PurchaseOrder.ID)
|
||||||
case index
|
case index
|
||||||
@@ -155,11 +155,10 @@ public extension SiteRoute {
|
|||||||
Field("materials", .string)
|
Field("materials", .string)
|
||||||
Field("customer", .string)
|
Field("customer", .string)
|
||||||
Optionally { Field("truckStock") { Bool.parser() } }
|
Optionally { Field("truckStock") { Bool.parser() } }
|
||||||
Field("createdByID") { User.ID.parser() }
|
|
||||||
Field("createdForID") { Employee.ID.parser() }
|
Field("createdForID") { Employee.ID.parser() }
|
||||||
Field("vendorBranchID") { VendorBranch.ID.parser() }
|
Field("vendorBranchID") { VendorBranch.ID.parser() }
|
||||||
}
|
}
|
||||||
.map(.memberwise(PurchaseOrder.Create.init))
|
.map(.memberwise(PurchaseOrder.CreateIntermediate.init))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Route(.case(Self.form)) {
|
Route(.case(Self.form)) {
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ public typealias AnySendableHTML = (any HTML & Sendable)
|
|||||||
@DependencyClient
|
@DependencyClient
|
||||||
public struct ViewController: Sendable {
|
public struct ViewController: Sendable {
|
||||||
public typealias AuthenticateHandler = @Sendable (User) -> Void
|
public typealias AuthenticateHandler = @Sendable (User) -> Void
|
||||||
|
public typealias CurrentUserHandler = @Sendable () throws -> User
|
||||||
|
|
||||||
public var view: @Sendable (Request) async throws -> AnySendableHTML
|
public var view: @Sendable (Request) async throws -> AnySendableHTML
|
||||||
|
|
||||||
@@ -24,9 +25,16 @@ public struct ViewController: Sendable {
|
|||||||
for route: SiteRoute.View,
|
for route: SiteRoute.View,
|
||||||
isHtmxRequest: Bool,
|
isHtmxRequest: Bool,
|
||||||
logger: Logger,
|
logger: Logger,
|
||||||
authenticate: @escaping AuthenticateHandler
|
authenticate: @escaping AuthenticateHandler,
|
||||||
|
currentUser: @escaping CurrentUserHandler
|
||||||
) async throws -> AnySendableHTML {
|
) async throws -> AnySendableHTML {
|
||||||
try await view(.init(route, isHtmxRequest: isHtmxRequest, authenticate: authenticate, logger: logger))
|
try await view(.init(
|
||||||
|
route,
|
||||||
|
isHtmxRequest: isHtmxRequest,
|
||||||
|
authenticate: authenticate,
|
||||||
|
logger: logger,
|
||||||
|
currentUser: currentUser
|
||||||
|
))
|
||||||
}
|
}
|
||||||
|
|
||||||
public struct Request: Sendable {
|
public struct Request: Sendable {
|
||||||
@@ -34,17 +42,20 @@ public struct ViewController: Sendable {
|
|||||||
public let isHtmxRequest: Bool
|
public let isHtmxRequest: Bool
|
||||||
public let authenticate: AuthenticateHandler
|
public let authenticate: AuthenticateHandler
|
||||||
public let logger: Logger
|
public let logger: Logger
|
||||||
|
public let currentUser: CurrentUserHandler
|
||||||
|
|
||||||
public init(
|
public init(
|
||||||
_ route: SiteRoute.View,
|
_ route: SiteRoute.View,
|
||||||
isHtmxRequest: Bool,
|
isHtmxRequest: Bool,
|
||||||
authenticate: @escaping AuthenticateHandler,
|
authenticate: @escaping AuthenticateHandler,
|
||||||
logger: Logger
|
logger: Logger,
|
||||||
|
currentUser: @escaping CurrentUserHandler
|
||||||
) {
|
) {
|
||||||
self.route = route
|
self.route = route
|
||||||
self.isHtmxRequest = isHtmxRequest
|
self.isHtmxRequest = isHtmxRequest
|
||||||
self.authenticate = authenticate
|
self.authenticate = authenticate
|
||||||
self.logger = logger
|
self.logger = logger
|
||||||
|
self.currentUser = currentUser
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,8 @@ extension ViewController: DependencyKey {
|
|||||||
try await request.route.view(
|
try await request.route.view(
|
||||||
isHtmxRequest: request.isHtmxRequest,
|
isHtmxRequest: request.isHtmxRequest,
|
||||||
logger: request.logger,
|
logger: request.logger,
|
||||||
authenticate: request.authenticate
|
authenticate: request.authenticate,
|
||||||
|
currentUser: request.currentUser
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,14 +12,11 @@ public extension SiteRoute.View {
|
|||||||
func view(
|
func view(
|
||||||
isHtmxRequest: Bool,
|
isHtmxRequest: Bool,
|
||||||
logger: Logger,
|
logger: Logger,
|
||||||
authenticate: @escaping @Sendable (User) -> Void
|
authenticate: @escaping @Sendable (User) -> Void,
|
||||||
|
currentUser: @escaping @Sendable () throws -> User
|
||||||
) async throws -> AnySendableHTML {
|
) async throws -> AnySendableHTML {
|
||||||
@Dependency(\.database.users) var users
|
@Dependency(\.database.users) var users
|
||||||
switch self {
|
switch self {
|
||||||
// case .index:
|
|
||||||
// // This get's redirected to purchase-orders route in the app / site handler.
|
|
||||||
// return nil
|
|
||||||
|
|
||||||
case let .employee(route):
|
case let .employee(route):
|
||||||
return try await route.view(isHtmxRequest: isHtmxRequest)
|
return try await route.view(isHtmxRequest: isHtmxRequest)
|
||||||
|
|
||||||
@@ -38,7 +35,7 @@ public extension SiteRoute.View {
|
|||||||
}
|
}
|
||||||
|
|
||||||
case let .purchaseOrder(route):
|
case let .purchaseOrder(route):
|
||||||
return try await route.view(isHtmxRequest: isHtmxRequest)
|
return try await route.view(isHtmxRequest: isHtmxRequest, currentUser: currentUser)
|
||||||
|
|
||||||
case let .resetPassword(route):
|
case let .resetPassword(route):
|
||||||
return try await route.view(isHtmxRequest: isHtmxRequest)
|
return try await route.view(isHtmxRequest: isHtmxRequest)
|
||||||
@@ -116,7 +113,10 @@ extension SiteRoute.View.PurchaseOrderRoute {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Sendable
|
@Sendable
|
||||||
func view(isHtmxRequest: Bool) async throws -> AnySendableHTML {
|
func view(
|
||||||
|
isHtmxRequest: Bool,
|
||||||
|
currentUser: @escaping @Sendable () throws -> User
|
||||||
|
) async throws -> AnySendableHTML {
|
||||||
@Dependency(\.database.purchaseOrders) var purchaseOrders
|
@Dependency(\.database.purchaseOrders) var purchaseOrders
|
||||||
|
|
||||||
switch self {
|
switch self {
|
||||||
@@ -129,7 +129,9 @@ extension SiteRoute.View.PurchaseOrderRoute {
|
|||||||
return try await route.view(isHtmxRequest: isHtmxRequest)
|
return try await route.view(isHtmxRequest: isHtmxRequest)
|
||||||
|
|
||||||
case let .create(purchaseOrder):
|
case let .create(purchaseOrder):
|
||||||
return try await PurchaseOrderTable.Row(purchaseOrder: purchaseOrders.create(purchaseOrder))
|
return try await PurchaseOrderTable.Row(
|
||||||
|
purchaseOrder: purchaseOrders.create(purchaseOrder.toCreate(createdByID: currentUser().id))
|
||||||
|
)
|
||||||
|
|
||||||
case .index:
|
case .index:
|
||||||
return try await mainPage(PurchaseOrderForm())
|
return try await mainPage(PurchaseOrderForm())
|
||||||
|
|||||||
Reference in New Issue
Block a user