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

90 lines
2.2 KiB
Swift

import Dependencies
import Foundation
/// Represents an employee database model.
///
/// Employee's are who purchase orders can be generated for.
public struct Employee: Codable, Equatable, Identifiable, Sendable {
public var id: UUID
public var active: Bool
public var createdAt: Date
public var firstName: String
public var lastName: String
public var updatedAt: Date
public init(
id: UUID,
active: Bool = true,
createdAt: Date,
firstName: String,
lastName: String,
updatedAt: Date
) {
self.id = id
self.active = active
self.createdAt = createdAt
self.firstName = firstName
self.lastName = lastName
self.updatedAt = updatedAt
}
public var fullName: String {
"\(firstName.capitalized) \(lastName.capitalized)"
}
}
public extension Employee {
/// Represents the required fields for generating a new employee in the
/// database.
struct Create: Codable, Sendable, Equatable {
public let firstName: String
public let lastName: String
public let active: Bool?
public init(
firstName: String,
lastName: String,
active: Bool? = nil
) {
self.firstName = firstName
self.lastName = lastName
self.active = active
}
}
/// Represents the required fields for updating an existing employee in the
/// database.
struct Update: Codable, Sendable, Equatable {
public let firstName: String?
public let lastName: String?
public let active: Bool?
public init(
firstName: String? = nil,
lastName: String? = nil,
active: Bool? = nil
) {
self.firstName = firstName
self.lastName = lastName
self.active = active
}
}
}
#if DEBUG
public extension Employee.Create {
static func generateMocks(count: Int = 5) -> [Self] {
(0 ... count).reduce(into: [Self]()) { array, _ in
array.append(.init(
firstName: RandomNames.firstNames.randomElement()! + String(RandomNames.characterString.randomElement()!),
lastName: RandomNames.lastNames.randomElement()! + String(RandomNames.characterString.randomElement()!),
active: Bool.random()
))
}
}
}
#endif