From a61c772f7bfad720412dc6f7fd6b2b45b9ed3f37 Mon Sep 17 00:00:00 2001 From: Michael Housh Date: Sat, 3 Jan 2026 19:03:04 -0500 Subject: [PATCH] WIP: Exploring different routes. --- Sources/ManualDCore/Room.swift | 33 ++++++++++++++++++- Sources/ManualDCore/Routes/ViewRoute.swift | 23 ++++++------- Sources/ViewController/Live.swift | 10 +++--- .../ViewController/Views/Rooms/RoomForm.swift | 3 -- 4 files changed, 49 insertions(+), 20 deletions(-) diff --git a/Sources/ManualDCore/Room.swift b/Sources/ManualDCore/Room.swift index 28513e9..c6add53 100644 --- a/Sources/ManualDCore/Room.swift +++ b/Sources/ManualDCore/Room.swift @@ -34,7 +34,6 @@ public struct Room: Codable, Equatable, Identifiable, Sendable { extension Room { - // TODO: Maybe remove project ID, and make dependencies that retrieves current project id?? public struct Create: Codable, Equatable, Sendable { public let projectID: Project.ID public let name: String @@ -55,6 +54,38 @@ extension Room { self.coolingLoad = coolingLoad self.registerCount = registerCount } + + public init( + form: Room.Form, + projectID: Project.ID + ) { + self.init( + projectID: projectID, + name: form.name, + heatingLoad: form.heatingLoad, + coolingLoad: form.coolingLoad, + registerCount: form.registerCount + ) + } + } + + public struct Form: Codable, Equatable, Sendable { + public let name: String + public let heatingLoad: Double + public let coolingLoad: Double + public let registerCount: Int + + public init( + name: String, + heatingLoad: Double, + coolingLoad: Double, + registerCount: Int + ) { + self.name = name + self.heatingLoad = heatingLoad + self.coolingLoad = coolingLoad + self.registerCount = registerCount + } } } diff --git a/Sources/ManualDCore/Routes/ViewRoute.swift b/Sources/ManualDCore/Routes/ViewRoute.swift index 845a440..51e0914 100644 --- a/Sources/ManualDCore/Routes/ViewRoute.swift +++ b/Sources/ManualDCore/Routes/ViewRoute.swift @@ -106,41 +106,42 @@ extension SiteRoute.View { public enum RoomRoute: Equatable, Sendable { case form(Project.ID, dismiss: Bool = false) case index(Project.ID) - case submit(Room.Create) + case submit(Project.ID, Room.Form) - static let rootPath = "rooms" + static let rootPath = Path { + ProjectRoute.rootPath + Project.ID.parser() + "rooms" + } public static let router = OneOf { Route(.case(Self.form)) { Path { - rootPath + ProjectRoute.rootPath + Project.ID.parser() + "rooms" "create" } Method.get Query { - Field("projectID") { Project.ID.parser() } Field("dismiss", default: false) { Bool.parser() } } } Route(.case(Self.index)) { - Path { rootPath } + rootPath Method.get - Query { - Field("projectID") { Project.ID.parser() } - } } Route(.case(Self.submit)) { - Path { rootPath } + rootPath Method.post Body { FormData { - Field("projectID") { Project.ID.parser() } Field("name", .string) Field("heatingLoad") { Double.parser() } Field("coolingLoad") { Double.parser() } Field("registerCount") { Digits() } } - .map(.memberwise(Room.Create.init)) + .map(.memberwise(Room.Form.init)) } } } diff --git a/Sources/ViewController/Live.swift b/Sources/ViewController/Live.swift index d8849eb..4bea322 100644 --- a/Sources/ViewController/Live.swift +++ b/Sources/ViewController/Live.swift @@ -132,13 +132,13 @@ extension SiteRoute.View.RoomRoute { } } - case .submit(let form): + case .submit(let projectID, let form): request.logger.debug("New room form submitted.") - let _ = try await database.rooms.create(form) - let rooms = try await database.rooms.fetch(form.projectID) + let _ = try await database.rooms.create(.init(form: form, projectID: projectID)) + let rooms = try await database.rooms.fetch(projectID) return request.view { - ProjectView(projectID: form.projectID, activeTab: .rooms) { - RoomsView(projectID: form.projectID, rooms: rooms) + ProjectView(projectID: projectID, activeTab: .rooms) { + RoomsView(projectID: projectID, rooms: rooms) } } } diff --git a/Sources/ViewController/Views/Rooms/RoomForm.swift b/Sources/ViewController/Views/Rooms/RoomForm.swift index 25902df..45e745c 100644 --- a/Sources/ViewController/Views/Rooms/RoomForm.swift +++ b/Sources/ViewController/Views/Rooms/RoomForm.swift @@ -19,9 +19,6 @@ struct RoomForm: HTML, Sendable { .method(.post), .action(route: .room(.index(projectID))) ) { - div(.class("hidden")) { - input(.name("projectID"), .id("projectID"), .value("\(projectID)")) - } div { label(.for("name")) { "Name:" } Input(id: "name", placeholder: "Room Name")