66 lines
1.2 KiB
Swift
66 lines
1.2 KiB
Swift
import CasePathsCore
|
|
import Foundation
|
|
@preconcurrency import URLRouting
|
|
|
|
extension SiteRoute {
|
|
/// Represents api routes.
|
|
///
|
|
/// The routes return json as opposed to view routes that return html.
|
|
public enum Api: Sendable, Equatable {
|
|
|
|
case project(Self.ProjectRoute)
|
|
|
|
public static let rootPath = Path {
|
|
"api"
|
|
"v1"
|
|
}
|
|
|
|
public static let router = OneOf {
|
|
Route(.case(Self.project)) {
|
|
rootPath
|
|
ProjectRoute.router
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
extension SiteRoute.Api {
|
|
public enum ProjectRoute: Sendable, Equatable {
|
|
case create(Project.Create)
|
|
case delete(id: Project.ID)
|
|
case get(id: Project.ID)
|
|
case index
|
|
|
|
static let rootPath = "projects"
|
|
|
|
public static let router = OneOf {
|
|
Route(.case(Self.create)) {
|
|
Path { rootPath }
|
|
Method.post
|
|
Body(.json(Project.Create.self))
|
|
}
|
|
Route(.case(Self.delete(id:))) {
|
|
Path {
|
|
rootPath
|
|
Project.ID.parser()
|
|
}
|
|
Method.delete
|
|
}
|
|
Route(.case(Self.get(id:))) {
|
|
Path {
|
|
rootPath
|
|
Project.ID.parser()
|
|
}
|
|
Method.get
|
|
}
|
|
Route(.case(Self.index)) {
|
|
Path { rootPath }
|
|
Method.get
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|