41 lines
916 B
Swift
41 lines
916 B
Swift
import Fluent
|
|
|
|
final class Session: Model, @unchecked Sendable {
|
|
static let schema: String = "sessions"
|
|
|
|
@ID(custom: "token", generatedBy: .random)
|
|
var id: String?
|
|
|
|
@Parent(key: "accountId")
|
|
var account: Account
|
|
|
|
@Field(key: "expires")
|
|
var expires: Date
|
|
|
|
@Field(key: "type")
|
|
var type: SessionType
|
|
|
|
init() { }
|
|
|
|
convenience init(account: Account, expires: Date, type: SessionType) throws {
|
|
self.init(accountId: try account.requireID(), expires: expires, type: type)
|
|
}
|
|
|
|
init(accountId: Int, expires: Date, type: SessionType) {
|
|
self.$account.id = accountId
|
|
self.expires = expires
|
|
self.type = type
|
|
if (type != .VIEWER) {
|
|
self.id = UUID().uuidString
|
|
} else {
|
|
self.id = String(Int.random())
|
|
}
|
|
}
|
|
}
|
|
|
|
enum SessionType: Int, Codable {
|
|
case ZAT = 0
|
|
case ZRT = 1
|
|
case VIEWER = 2
|
|
}
|