import FluentKit /// Creates and drops the `listings` table backing ``ListingRecord``. struct CreateListing: AsyncMigration { // MARK: Methods func prepare(on database: Database) async throws { try await database.schema(ListingRecord.schema) .id() .field("shop_id", .uuid, .required, .references(ShopRecord.schema, "id", onDelete: .cascade)) .field("slug", .string, .required) .field("title", .string, .required) .field("series_title", .string, .required) .field("issue_label", .string, .required) .field("publisher", .string, .required) .field("year", .int, .required) .field("format", .string, .required) .field("printing", .string, .required) .field("printing_detail", .string, .required) .field("is_first_print", .bool, .required) .field("grader", .string) .field("grade", .double) .field("condition", .string, .required) .field("cert_number", .string) .field("page_quality", .string) .field("key_notes", .string) .field("seller_notes", .string, .required) .field("price_cents", .int, .required) .field("shipping_cents", .int, .required) .field("accepts_offers", .bool, .required) .field("cover_tone", .string, .required) .field("cover_title", .string, .required) .field("cover_imprint", .string, .required) .field("cover_number", .string, .required) .field("listed_at", .datetime, .required) .unique(on: "slug") .create() } func revert(on database: Database) async throws { try await database.schema(ListingRecord.schema) .delete() } }