vapor/vapor

PSQLError when I try to save model with enum property

Fa1zer opened this issue · 1 comments

When I save a model with enum property I get following PSQLError:
Снимок экрана 2023-08-04 в 16 04 42
My code:

@Enum(key: "gender")
var gender: Gender
enum Gender: String, Codable, CaseIterable {
    case Man, Woman, Other, notStated
    
    static func migrate(_ db: Database) async throws {
        _ = try await db.enum("gender")
            .case(Gender.Man.rawValue)
            .case(Gender.Woman.rawValue)
            .case(Gender.Other.rawValue)
            .case("notStated")
            .create()
    }
}
func prepare(on database: Database) async throws {
        try await database.schema(User.schema)
            .id()
            .field("phone", .string, .required)
            .field("gender", try await database.enum("gender").read(), .required)
            .field("name", .string, .required)
            .field("birth_date", .double)
            .field("height", .int16)
            .field("orientation", try await database.enum("orientation").read())
            .field("alcohol_attitude_score", .int16)
            .field("smoking_attitude_score", .int16)
            .field("family_status", try await database.enum("family_status").read())
            .field("pets_availability", try await database.enum("pets_availability").read())
            .field("children_attitude_score", .int16)
            .field("mood_type", try await database.enum("mood_type").read())
            .field("known_languages", .array(of: .string), .required)
            .field("zodiac_sign", try await database.enum("zodiac_sign").read())
            .field("verify_photo_id", .uuid)
            .field("is_verifyed", .bool, .required)
            .field("about_me", .string)
            .field("interests", .array(of: .string), .required)
            .field("location", .geographicPoint2D)
            .field("online_date", .double)
            .field("left_likes_count", .int16)
            .field("created_at", .double)
            .field("chat_rooms_id", .array(of: .string), .required)
            .field("is_admin", .bool, .required)
            .create()
    }
func create(req: Request) async throws -> HTTPStatus {
        guard let phone = req.parameters.get("phone"), NSPredicate(format: "SELF MATCHES %@", "^[0-9+]{0,1}+[0-9]{5,16}$").evaluate(with: phone) else {
            throw Abort(.badRequest)
        }
        
        try await User(phone: phone, gender: .notStated, name: .init(), isAdmin: try await User.query(on: req.db).count() == .zero).save(on: req.db)
        
        return .ok
    }

How can I fix this error?

I forgot to assign the gender value in init. This is the stupidest mistake I've ever made...