import DatabaseClient import Dependencies import Fluent import SharedModels import Vapor // TODO: Add update route. struct PurchaseOrderApiController: RouteCollection { @Dependency(\.database.purchaseOrders) var purchaseOrders func boot(routes: any RoutesBuilder) throws { let protected = routes.apiProtected(route: "purchase-orders") protected.get(use: index(req:)) protected.post(use: create(req:)) protected.group(":id") { $0.get(use: get(req:)) $0.delete(use: delete(req:)) } } @Sendable func index(req: Request) async throws -> [PurchaseOrder] { try await purchaseOrders.fetchAll() } @Sendable func create(req: Request) async throws -> PurchaseOrder { try await purchaseOrders.create( req.content.decode(PurchaseOrder.Create.self), req.auth.require(User.self).id ) } @Sendable func get(req: Request) async throws -> PurchaseOrder { guard let purchaseOrder = try await purchaseOrders.get(req.ensureIDPathComponent(as: Int.self)) else { throw Abort(.notFound) } return purchaseOrder } @Sendable func delete(req: Request) async throws -> HTTPStatus { try await purchaseOrders.delete(req.ensureIDPathComponent(as: Int.self)) return .ok } // @Sendable // func update(req: Request) async throws -> PurchaseOrder.DTO { // guard let id = req.parameters.get("id", as: PurchaseOrder.ID.self) else { // throw Abort(.badRequest, reason: "Purchase order id not provided.") // } // try await purchaseOrders.delete(id: id, on: req.db) // return .ok // } }