feat: Adds equipment info to database and api routes.

This commit is contained in:
2025-12-29 16:31:57 -05:00
parent 31930cd399
commit a2514853a6
4 changed files with 246 additions and 4 deletions

View File

@@ -1,17 +1,52 @@
import Foundation
public struct EquipmentInfo: Codable, Equatable, Sendable {
public struct EquipmentInfo: Codable, Equatable, Identifiable, Sendable {
public let id: UUID
public let projectID: Project.ID
public let staticPressure: Double
public let heatingCFM: Int
public let coolingCFM: Int
public let createdAt: Date
public let updatedAt: Date
public init(
id: UUID,
projectID: Project.ID,
staticPressure: Double = 0.5,
heatingCFM: Int,
coolingCFM: Int
coolingCFM: Int,
createdAt: Date,
updatedAt: Date
) {
self.id = id
self.projectID = projectID
self.staticPressure = staticPressure
self.heatingCFM = heatingCFM
self.coolingCFM = coolingCFM
self.createdAt = createdAt
self.updatedAt = updatedAt
}
}
extension EquipmentInfo {
// TODO: Remove projectID and use dependency to lookup current project ??
public struct Create: Codable, Equatable, Sendable {
public let projectID: Project.ID
public let staticPressure: Double
public let heatingCFM: Int
public let coolingCFM: Int
public init(
projectID: Project.ID,
staticPressure: Double = 0.5,
heatingCFM: Int,
coolingCFM: Int
) {
self.projectID = projectID
self.staticPressure = staticPressure
self.heatingCFM = heatingCFM
self.coolingCFM = coolingCFM
}
}
}

View File

@@ -100,3 +100,44 @@ extension SiteRoute.Api {
}
}
}
extension SiteRoute.Api {
public enum EquipmentRoute: Sendable, Equatable {
case create(EquipmentInfo.Create)
case delete(id: EquipmentInfo.ID)
case fetch(projectID: Project.ID)
case get(id: EquipmentInfo.ID)
static let rootPath = "rooms"
public static let router = OneOf {
Route(.case(Self.create)) {
Path { rootPath }
Method.post
Body(.json(EquipmentInfo.Create.self))
}
Route(.case(Self.delete(id:))) {
Path {
rootPath
EquipmentInfo.ID.parser()
}
Method.delete
}
Route(.case(Self.fetch(projectID:))) {
Path { rootPath }
Method.get
Query {
Field("projectID") { Project.ID.parser() }
}
}
Route(.case(Self.get(id:))) {
Path {
rootPath
EquipmentInfo.ID.parser()
}
Method.get
}
}
}
}