#Postgres Error

1 messages · Page 1 of 1 (latest)

ivory burrow
#
final class BudgetItem: Model {
    static let schema = "budget_items"

    @ID(key: .id)
    var id: UUID?

    @Field(key: "name")
    var name: String

    @Parent(key: "budget_category_id")
    var budgetCategory: BudgetCategory
    
    @Field(key: "planned")
    var planned: Double
    
    @Field(key: "note")
    var note: String
    
    @OptionalField(key: "due_date")
    var dueDate: Date?
    
    @Children(for: \.$budgetItem)
    var transactions: [Transaction]
    
    init() {}

    init(
        id: UUID? = nil,
        name: String,
        budgetCategoryID: UUID,
        planned: Double,
        note: String,
        dueDate: Date?
    ) {
        self.id = id
        self.name = name
        self.$budgetCategory.id = budgetCategoryID
        self.planned = planned
        self.note = note
        self.dueDate = dueDate
    }
}

Then I have my Transaction object like so:

final class Transaction: Model {
    static var schema: String = "transactions"
    
    @ID(key: .id)
    var id: UUID?
    
    @Field(key: "name")
    var name: String
    
    @Parent(key: "budget_item_id")
    var budgetItem: BudgetItem
    
    @Field(key: "amount")
    var amount: Double
    
    @Field(key: "date")
    var date: Date
    
    @Enum(key: "transaction_type")
    var transactionType: TransactionType
        
    init() { }

    init(
        id: UUID? = nil,
        name: String,
        budgetItemID: UUID,
        amount: Double,
        date: Date,
        transactionType: TransactionType
    ) {
        self.id = id
        self.name = name
        self.$budgetItem.id = budgetItemID
        self.date = date
        self.transactionType = transactionType
    }
}

My migrations work as expected, and my tables and columns look like they should.

#
func test_PostBudgetItems_Success() throws {
        /** Given */
        var budgetCategory1 = FFBudgetCategory(id: UUID(), userID: user.id!, name: "Test Category 1", budgetItems: [], categoryType: .expense)
        let body = FFPostBudgetCategoriesRequestBody(budgetCategories: [budgetCategory1], userID: user.id!)
        let budgetItem1 = FFBudgetItem(id: UUID(), name: "Test Budget Item 1", budgetCategoryID: budgetCategory1.id!, planned: 100.00, transactions: [], note: "With Note", dueDate: nil)
        let budgetItem2 = FFBudgetItem(id: UUID(), name: "Test Budget Item 2", budgetCategoryID: budgetCategory1.id!, planned: 100.00, transactions: [], note: "With Note", dueDate: nil)
        let budgetItems = [budgetItem1, budgetItem2]
        
        /** When */
        // We post the budgetCategories
        try app.test(
            .POST, budgetingCategoryPath, headers: authHeaders,
            beforeRequest: { req in
                try req.content.encode(body)
            }, afterResponse: { res in
                
                /** Then */
                XCTAssertEqual(res.status, .ok)
            })
        
        let postBudgetItemsBody = FFPostBudgetItemsRequestBody(budgetItems: budgetItems, categoryID: budgetCategory1.id!)

        /** When */
        try app.test(
            .POST, budgetingItemsPath, headers: authHeaders,
            beforeRequest: { req in
                try req.content.encode(postBudgetItemsBody)
            }, afterResponse: { res in

                /** Then */
                XCTAssertEqual(res.status, .ok)

                let responseBody = try res.content.decode(FFBudgetItemsResponse.self)
                    // Verify response body is not empty
                    XCTAssertFalse(responseBody.budgetItems.isEmpty)
                    // Verify matches expected
                    XCTAssertEqual(responseBody.budgetItems, 

            })
    }
#

Apologies for the formatting

left dirge
#

@ivory burrow It looks like you need to update your PostgresNIO, PostgresKit, and/or FluentPostgresDriver dependencies; you're not getting proper error descriptions. Running swift package update (or "File -> Packages -> Update to Latest Package Versions" in Xcode) should do that for you.

ivory burrow
#

Ahhh nice, this helped. Updated the packages, added String(reflecting: error) where needed. Which exposed I was missing a column in my migrations.

Thanks! @left dirge