diff --git a/Sources/App/Controllers/FuelEntryV2Controller.swift b/Sources/App/Controllers/FuelEntryV2Controller.swift index 5165d8d..923a1c8 100644 --- a/Sources/App/Controllers/FuelEntryV2Controller.swift +++ b/Sources/App/Controllers/FuelEntryV2Controller.swift @@ -11,6 +11,7 @@ struct FuelEntryV2Controller: RouteCollection { func boot(routes: RoutesBuilder) throws { let fuelEntries = routes.grouped("fuel_entries") fuelEntries.get(use: index) + fuelEntries.get("with-images", use: getAllEntriesWithImages) fuelEntries.post(use: create) fuelEntries.post("upload-image", use: uploadImage) fuelEntries.group(":fuelEntryID") { fuelEntry in @@ -22,11 +23,31 @@ struct FuelEntryV2Controller: RouteCollection { try await FuelEntry.query(on: req.db).all() } - //Need to create image file path at time of FuelEntry creation. UploadImage to store file appropriately + func getAllEntriesWithImages(req: Request) async throws -> [FuelEntry] { + let fuelEntries = try await FuelEntry.query(on: req.db).all() + + for var fuelEntry in fuelEntries { + if let imagePath = fuelEntry.image { + let fileURL = URL(fileURLWithPath: imagePath) + if let imageData = try? Data(contentsOf: fileURL) { + fuelEntry.imageData = imageData + } + } + } + return fuelEntries + } + func create(req: Request) async throws -> [FuelEntry] { - let fuelEntry = try req.content.decode([FuelEntry].self) - try await fuelEntry.create(on: req.db) - return fuelEntry + var fuelEntries = try req.content.decode([FuelEntry].self) + let directory = DirectoryConfiguration.detect().workingDirectory + "Images/" + + for index in fuelEntries.indices { + let imagePath = directory + (fuelEntries[index].id?.uuidString ?? "Unknown") + ".png" + fuelEntries[index].image = imagePath + } + + try await fuelEntries.create(on: req.db) + return fuelEntries } func delete(req: Request) async throws -> HTTPStatus { diff --git a/Sources/App/Models/FuelEntry.swift b/Sources/App/Models/FuelEntry.swift index 036b1c8..d152ab3 100755 --- a/Sources/App/Models/FuelEntry.swift +++ b/Sources/App/Models/FuelEntry.swift @@ -52,10 +52,13 @@ final class FuelEntry: Model, Content { @Field(key: "is_override") var isOverride: Bool + + @Field(key: "imageData") + var imageData: Data? init() {} - init(id: UUID? = nil, timestamp: Date, userID: String, latitude: Double, longitude: Double, image: String?, product: String, make: String, model: String, serialNumber: String, tankID: String, fuelAmount: Double, fuelType: String, isOverride: Bool) { + init(id: UUID? = nil, timestamp: Date, userID: String, latitude: Double, longitude: Double, image: String?, product: String, make: String, model: String, serialNumber: String, tankID: String, fuelAmount: Double, fuelType: String, isOverride: Bool, imageData: Data?) { self.id = id self.timestamp = timestamp self.userID = userID @@ -70,5 +73,6 @@ final class FuelEntry: Model, Content { self.fuelAmount = fuelAmount self.fuelType = fuelType self.isOverride = isOverride + self.imageData = imageData } }