Main model:
@Model
class ResidentInfo: Codable {
@Attribute(.unique)
var id: UUID
var status: Status = Status.incomplete
var date: Date = Date()
var completingStaffMember: StaffMember? = nil
@Attribute(.unique)
var residentNumber: Int? = nil
var personalInfo: PersonalInfo
var identifyingInformation: IdentifyingInformation
var presentingProblems: String
var emergencyNeeds: EmergencyNeeds
var medicalInfo: MedicalInfo
var riskAssessment: RiskAssessment
var psychAssessment: PsychAssessment
var legal: Legal
var homelessHistory: HomelessHistory
var employment: EmploymentDetails
var education: EducationDetails
var substanceUse: SubstanceUse
var sexualBehavior: SexualBehavior
var independenceAssessment: IndependentLivingAssessment
var consentForServices: ConsentForServices
var photoVideoRelease: PhotoVideoRelease
var suicideAssessment: SuicideAssessment
var healthAssessment: HealthAssessment
@Attribute(.externalStorage)
var profilePhoto: Data? = nil
var _updatedDate: Date
init() {
id = UUID()
personalInfo = PersonalInfo()
identifyingInformation = IdentifyingInformation()
presentingProblems = ""
emergencyNeeds = EmergencyNeeds()
medicalInfo = MedicalInfo()
riskAssessment = RiskAssessment()
psychAssessment = PsychAssessment()
legal = Legal()
homelessHistory = HomelessHistory()
employment = EmploymentDetails()
education = EducationDetails()
substanceUse = SubstanceUse()
sexualBehavior = SexualBehavior()
independenceAssessment = IndependentLivingAssessment()
consentForServices = ConsentForServices()
photoVideoRelease = PhotoVideoRelease()
suicideAssessment = SuicideAssessment()
healthAssessment = HealthAssessment()
_updatedDate = Date()
}
private enum CodingKeys: String, CodingKey {
case id = "_id"
case status, date, completingStaffMember, residentNumber, personalInfo, identifyingInformation, presentingProblems, emergencyNeeds, medicalInfo, riskAssessment, psychAssessment, legal, homelessHistory, employment, education, substanceUse, sexualBehavior, independenceAssessment, consentForServices, photoVideoRelease, suicideAssessment, healthAssessment, profilePhoto, _updatedDate
}
public required init(from decoder: Decoder) throws {
do {
let container = try decoder.container(keyedBy: CodingKeys.self)
id = try container.decode(UUID.self, forKey: .id)
status = try container.decode(Status.self, forKey: .status)
date = try container.decode(Date.self, forKey: .date)
completingStaffMember = try container.decodeIfPresent(StaffMember.self, forKey: .completingStaffMember)!
residentNumber = try container.decodeIfPresent(Int.self, forKey: .residentNumber)
personalInfo = try container.decode(PersonalInfo.self, forKey: .personalInfo)
identifyingInformation = try container.decode(IdentifyingInformation.self, forKey: .identifyingInformation)
presentingProblems = try container.decode(String.self, forKey: .presentingProblems)
emergencyNeeds = try container.decode(EmergencyNeeds.self, forKey: .emergencyNeeds)
medicalInfo = try container.decode(MedicalInfo.self, forKey: .medicalInfo)
riskAssessment = try container.decode(RiskAssessment.self, forKey: .riskAssessment)
psychAssessment = try container.decode(PsychAssessment.self, forKey: .psychAssessment)
legal = try container.decode(Legal.self, forKey: .legal)
homelessHistory = try container.decode(HomelessHistory.self, forKey: .homelessHistory)
employment = try container.decode(EmploymentDetails.self, forKey: .employment)
education = try container.decode(EducationDetails.self, forKey: .education)
substanceUse = try container.decode(SubstanceUse.self, forKey: .substanceUse)
sexualBehavior = try container.decode(SexualBehavior.self, forKey: .sexualBehavior)
independenceAssessment = try container.decode(IndependentLivingAssessment.self, forKey: .independenceAssessment)
consentForServices = try container.decode(ConsentForServices.self, forKey: .consentForServices)
photoVideoRelease = try container.decode(PhotoVideoRelease.self, forKey: .photoVideoRelease)
suicideAssessment = try container.decode(SuicideAssessment.self, forKey: .suicideAssessment)
healthAssessment = try container.decode(HealthAssessment.self, forKey: .healthAssessment)
profilePhoto = try container.decodeIfPresent(Data.self, forKey: .profilePhoto)
_updatedDate = try container.decode(Date.self, forKey: ._updatedDate)
} catch {
throw error
}
}
func encode(to encoder: Encoder) {
do {
var container = encoder.container(keyedBy: CodingKeys.self)
try container.encode(id, forKey: .id)
try container.encode(status, forKey: .status)
try container.encode(date, forKey: .date)
try container.encodeIfPresent(completingStaffMember, forKey: .completingStaffMember)
try container.encodeIfPresent(residentNumber, forKey: .residentNumber)
try container.encode(personalInfo, forKey: .personalInfo)
try container.encode(identifyingInformation, forKey: .identifyingInformation)
try container.encode(presentingProblems, forKey: .presentingProblems)
try container.encode(emergencyNeeds, forKey: .emergencyNeeds)
try container.encode(medicalInfo, forKey: .medicalInfo)
try container.encode(riskAssessment, forKey: .riskAssessment)
try container.encode(psychAssessment, forKey: .psychAssessment)
try container.encode(legal, forKey: .legal)
try container.encode(homelessHistory, forKey: .homelessHistory)
try container.encode(employment, forKey: .employment)
try container.encode(education, forKey: .education)
try container.encode(substanceUse, forKey: .substanceUse)
try container.encode(sexualBehavior, forKey: .sexualBehavior)
try container.encode(independenceAssessment, forKey: .independenceAssessment)
try container.encode(consentForServices, forKey: .consentForServices)
try container.encode(photoVideoRelease, forKey: .photoVideoRelease)
try container.encode(suicideAssessment, forKey: .suicideAssessment)
try container.encode(healthAssessment, forKey: .healthAssessment)
try container.encodeIfPresent(profilePhoto, forKey: .profilePhoto)
try container.encode(_updatedDate, forKey: ._updatedDate)
} catch {
fatalError()
}
}