feat: Refactoring route declarations.
This commit is contained in:
115
Sources/SharedModels/Routes/ApiRoute.swift
Normal file
115
Sources/SharedModels/Routes/ApiRoute.swift
Normal file
@@ -0,0 +1,115 @@
|
||||
import CasePathsCore
|
||||
import Foundation
|
||||
@preconcurrency import URLRouting
|
||||
|
||||
// TODO: Switch shared to be on API routes not view routes??
|
||||
|
||||
public enum ApiRoute: Sendable {
|
||||
|
||||
case employee(EmployeeApiRoute)
|
||||
case purchaseOrder(PurchaseOrderApiRoute)
|
||||
case user(UserApiRoute)
|
||||
case vendor(VendorApiRoute)
|
||||
case vendorBranch(VendorBranchApiRoute)
|
||||
|
||||
static let rootPath = Path { "api"; "v1" }
|
||||
|
||||
public static let router = OneOf {
|
||||
Route(.case(Self.employee)) {
|
||||
rootPath
|
||||
EmployeeApiRoute.router
|
||||
}
|
||||
Route(.case(Self.purchaseOrder)) {
|
||||
rootPath
|
||||
PurchaseOrderApiRoute.router
|
||||
}
|
||||
Route(.case(Self.user)) {
|
||||
rootPath
|
||||
UserApiRoute.router
|
||||
}
|
||||
Route(.case(Self.vendor)) {
|
||||
rootPath
|
||||
VendorApiRoute.router
|
||||
}
|
||||
Route(.case(Self.vendorBranch)) {
|
||||
rootPath
|
||||
VendorBranchApiRoute.router
|
||||
}
|
||||
}
|
||||
|
||||
public enum EmployeeApiRoute: Sendable {
|
||||
case shared(SharedEmployeeRoute)
|
||||
|
||||
public static let router = Route(.case(Self.shared)) {
|
||||
SharedEmployeeRoute.router
|
||||
}
|
||||
}
|
||||
|
||||
public enum PurchaseOrderApiRoute: Sendable {
|
||||
case shared(SharedPurchaseOrderRoute)
|
||||
|
||||
public static let router = Route(.case(Self.shared)) {
|
||||
SharedPurchaseOrderRoute.router
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: Add logout.
|
||||
public enum UserApiRoute: Sendable {
|
||||
case shared(SharedUserRoute)
|
||||
|
||||
public static let router = Route(.case(Self.shared)) {
|
||||
SharedUserRoute.router
|
||||
}
|
||||
}
|
||||
|
||||
public enum VendorApiRoute: Sendable {
|
||||
case index(withBranches: Bool?)
|
||||
case shared(SharedVendorRoute)
|
||||
|
||||
static let rootPath = "vendors"
|
||||
|
||||
public static let router = OneOf {
|
||||
Route(.case(Self.index(withBranches:))) {
|
||||
Path { rootPath }
|
||||
Method.get
|
||||
Query {
|
||||
Field("branches", default: nil) {
|
||||
Optionally { Bool.parser() }
|
||||
}
|
||||
}
|
||||
}
|
||||
Route(.case(Self.shared)) {
|
||||
SharedVendorRoute.router
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public enum VendorBranchApiRoute: Sendable {
|
||||
case get(id: VendorBranch.ID)
|
||||
case index(for: Vendor.ID? = nil)
|
||||
case shared(SharedVendorBranchRoute)
|
||||
case update(id: VendorBranch.ID, updates: VendorBranch.Update)
|
||||
|
||||
public static let router = OneOf {
|
||||
Route(.case(Self.get(id:))) {
|
||||
Path { "vendors"; "branches"; VendorBranch.ID.parser() }
|
||||
Method.get
|
||||
}
|
||||
Route(.case(Self.index(for:))) {
|
||||
Path { "vendors"; "branches" }
|
||||
Method.get
|
||||
Query {
|
||||
Field("vendorID", default: nil) { Optionally { VendorBranch.ID.parser() } }
|
||||
}
|
||||
}
|
||||
Route(.case(Self.shared)) {
|
||||
SharedVendorBranchRoute.router
|
||||
}
|
||||
Route(.case(Self.update(id:updates:))) {
|
||||
Path { "vendors"; "branches"; VendorBranch.ID.parser() }
|
||||
Method.put
|
||||
Body(.json(VendorBranch.Update.self))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user