Initial commit
This commit is contained in:
@@ -0,0 +1,83 @@
|
||||
//
|
||||
// PurchaseModel.swift
|
||||
// ExodaiAcademy
|
||||
//
|
||||
// Created by Exodai on 24/01/2026.
|
||||
//
|
||||
|
||||
import Fluent
|
||||
|
||||
final class PurchaseModel: Model, @unchecked Sendable {
|
||||
static let schema: String = Database.purchases.rawValue
|
||||
|
||||
@ID(key: .id)
|
||||
var id: UUID?
|
||||
|
||||
@Field(key: FieldKeys.userID)
|
||||
var userID: UserModel.IDValue
|
||||
|
||||
@Field(key: FieldKeys.courseID)
|
||||
var courseID: CourseModel.IDValue
|
||||
|
||||
@Field(key: FieldKeys.pricePaid)
|
||||
var pricePaid: Double
|
||||
|
||||
@Field(key: FieldKeys.currency)
|
||||
var currency: String
|
||||
|
||||
@Field(key: FieldKeys.paymentProvider)
|
||||
var paymentProvider: String
|
||||
|
||||
@Field(key: FieldKeys.paymentReference)
|
||||
var paymentReference: String
|
||||
|
||||
@Timestamp(key: FieldKeys.purchasedAt, on: .create)
|
||||
var purchasedAt: Date?
|
||||
|
||||
@OptionalField(key: FieldKeys.refundedAt)
|
||||
var refundedAt: Date?
|
||||
|
||||
@Field(key: FieldKeys.grantedByAdmin)
|
||||
var grantedByAdmin: Bool
|
||||
|
||||
init() {}
|
||||
}
|
||||
|
||||
extension PurchaseModel {
|
||||
struct FieldKeys {
|
||||
static var userID: FieldKey { "userID" }
|
||||
static var courseID: FieldKey { "courseID" }
|
||||
static var pricePaid: FieldKey { "pricePaid" }
|
||||
static var currency: FieldKey { "currency" }
|
||||
static var paymentProvider: FieldKey { "paymentProvider" }
|
||||
static var paymentReference: FieldKey { "paymentReference" }
|
||||
static var purchasedAt: FieldKey { "purchasedAt" }
|
||||
static var refundedAt: FieldKey { "refundedAt" }
|
||||
static var grantedByAdmin: FieldKey { "grantedByAdmin" }
|
||||
}
|
||||
}
|
||||
|
||||
extension PurchaseModel {
|
||||
struct Migration: AsyncMigration {
|
||||
|
||||
func prepare(on database: any FluentKit.Database) async throws {
|
||||
try await database.schema(PurchaseModel.schema)
|
||||
.id()
|
||||
.field(FieldKeys.userID, .uuid, .required)
|
||||
.field(FieldKeys.courseID, .uuid, .required)
|
||||
.field(FieldKeys.pricePaid, .double, .required)
|
||||
.field(FieldKeys.currency, .string, .required)
|
||||
.field(FieldKeys.paymentProvider, .string, .required)
|
||||
.field(FieldKeys.paymentReference, .string, .required)
|
||||
.field(FieldKeys.purchasedAt, .datetime)
|
||||
.field(FieldKeys.refundedAt, .datetime)
|
||||
.field(FieldKeys.grantedByAdmin, .bool, .required)
|
||||
.unique(on: FieldKeys.userID, FieldKeys.courseID)
|
||||
.create()
|
||||
}
|
||||
|
||||
func revert(on database: any FluentKit.Database) async throws {
|
||||
try await database.schema(PurchaseModel.schema).delete()
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user