import DatabaseClient import Fluent import ManualDCore import Vapor // FIX: Remove these, not used currently. extension DatabaseClient.Projects { func fetchPage( userID: User.ID, page: Int = 1, limit: Int = 25 ) async throws -> Page { try await fetch(userID, .init(page: page, per: limit)) } func fetchPage( userID: User.ID, page: PageRequest ) async throws -> Page { try await fetch(userID, page) } } extension DatabaseClient { func designFrictionRate( projectID: Project.ID ) async throws -> (EquipmentInfo, EffectiveLength.MaxContainer, Double)? { guard let equipmentInfo = try await equipment.fetch(projectID) else { return nil } let equivalentLengths = try await effectiveLength.fetchMax(projectID) guard let tel = equivalentLengths.total else { return nil } let componentLosses = try await componentLoss.fetch(projectID) guard componentLosses.count > 0 else { return nil } let availableStaticPressure = equipmentInfo.staticPressure - componentLosses.totalComponentPressureLoss let designFrictionRate = (availableStaticPressure * 100) / tel return (equipmentInfo, equivalentLengths, designFrictionRate) } } extension DatabaseClient.ComponentLoss { func createDefaults(projectID: Project.ID) async throws { let defaults = ComponentPressureLoss.Create.default(projectID: projectID) for loss in defaults { _ = try await create(loss) } } } extension PageRequest { static func next(_ currentPage: Page) -> Self { .init(page: currentPage.metadata.page + 1, per: currentPage.metadata.per) } }