Files
vapor-po/Sources/SharedModels/User.swift

120 lines
2.6 KiB
Swift

import Dependencies
import Foundation
public struct User: Codable, Equatable, Identifiable, Sendable {
public var id: UUID
public var email: String
public var username: String
public var createdAt: Date?
public var updatedAt: Date?
public init(
id: UUID,
email: String,
username: String,
createdAt: Date? = nil,
updatedAt: Date? = nil
) {
self.id = id
self.createdAt = createdAt
self.email = email
self.updatedAt = updatedAt
self.username = username
}
}
public extension User {
struct Create: Codable, Sendable, Equatable {
public let username: String
public let email: String
public let password: String
public let confirmPassword: String
public init(
username: String,
email: String,
password: String,
confirmPassword: String
) {
self.username = username
self.email = email
self.password = password
self.confirmPassword = confirmPassword
}
}
struct Login: Codable, Sendable, Equatable {
public let username: String?
public let email: String?
public let password: String
public init(
username: String?,
email: String? = nil,
password: String
) {
self.username = username
self.email = email
self.password = password
}
}
struct ResetPassword: Codable, Equatable, Sendable {
public let password: String
public let confirmPassword: String
public init(
password: String,
confirmPassword: String
) {
self.password = password
self.confirmPassword = confirmPassword
}
}
struct Token: Codable, Equatable, Identifiable, Sendable {
public let id: UUID
public let userID: User.ID
public let value: String
public init(
id: UUID,
userID: User.ID,
value: String
) {
self.id = id
self.userID = userID
self.value = value
}
}
struct Update: Codable, Equatable, Sendable {
public let username: String?
public let email: String?
public init(username: String?, email: String?) {
self.username = username
self.email = email
}
}
}
#if DEBUG
public extension User.Create {
static func generateMocks(count: Int = 5) -> [Self] {
(0 ... count).reduce(into: [Self]()) { array, _ in
array.append(.init(
username: RandomNames.userNames.randomElement()! + String(RandomNames.characterString.randomElement()!),
email: String(RandomNames.characterString.randomElement()!) + RandomNames.emails.randomElement()!,
password: "super-secret",
confirmPassword: "super-secret"
))
}
}
}
#endif