diff --git a/EmployeeDirectory/Models/Employee.swift b/EmployeeDirectory/Models/Employee.swift new file mode 100644 index 0000000..08e4b82 --- /dev/null +++ b/EmployeeDirectory/Models/Employee.swift @@ -0,0 +1,70 @@ +// +// Employee.swift +// EmployeeDirectory +// +// Created by Matt Bruce on 1/20/25. +// + +import Foundation + +/// EmployeeType enum +/// - How the employee is classified. +public enum EmployeeType: String, Codable, CustomStringConvertible { + case fullTime = "FULL_TIME" + case partTime = "PART_TIME" + case contractor = "CONTRACTOR" + + /// Format the employee type for display + public var description: String { + switch self { + case .fullTime: return "Full-Time" + case .partTime: return "Part-Time" + case .contractor: return "Contractor" + } + } +} + +/// Employee Object +/// JSON Object defintion +/// - https://square.github.io/microsite/mobile-interview-project/ +public struct Employee: Codable { + + /// The unique identifier for the employee. Represented as a UUID. + public let uuid: UUID + + /// The full name of the employee. + public let fullName: String + + /// The phone number of the employee, sent as an unformatted string (eg, 5556661234). + public let phoneNumber: String? + + /// The email address of the employee. + public let emailAddress: String + + /// A short, tweet-length (~300 chars) string that the employee provided to describe themselves. + public let biography: String? + + /// The URL of the employee’s small photo. Useful for list view. + public let photoURLSmall: String? + + /// The URL of the employee’s full-size photo. + public let photoURLLarge: String? + + /// The team they are on, represented as a human readable string. + public let team: String + + /// How the employee is classified. + public let employeeType: EmployeeType + + private enum CodingKeys: String, CodingKey { + case uuid + case fullName = "full_name" + case phoneNumber = "phone_number" + case emailAddress = "email_address" + case biography + case photoURLSmall = "photo_url_small" + case photoURLLarge = "photo_url_large" + case team + case employeeType = "employee_type" + } +} diff --git a/EmployeeDirectory/Models/Employees.swift b/EmployeeDirectory/Models/Employees.swift new file mode 100644 index 0000000..2f2ebaa --- /dev/null +++ b/EmployeeDirectory/Models/Employees.swift @@ -0,0 +1,16 @@ +// +// Employees.swift +// EmployeeDirectory +// +// Created by Matt Bruce on 1/20/25. +// +import Foundation + +/// Wrapper JSON Class for the Employees +public struct Employees: Codable { + public var employees: [Employee] + + private enum CodingKeys: String, CodingKey { + case employees + } +}