Skip to content
This repository has been archived by the owner on Sep 12, 2023. It is now read-only.

Commit

Permalink
types(share): declare the relationships of user to other documents
Browse files Browse the repository at this point in the history
  • Loading branch information
KennethTrecy committed Sep 13, 2022
1 parent f871ab2 commit 9e4e741
Showing 1 changed file with 68 additions and 8 deletions.
76 changes: 68 additions & 8 deletions shareable/types/documents/user.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,28 @@
import type { Serializable } from "$/types/general"
import type { DeserializedRoleListDocument } from "$/types/documents/role"
import type { DeserializedSignatureDocument } from "$/types/documents/signature"
import type { DeserializedDepartmentDocument } from "$/types/documents/department"
import type { DeserializedStudentDetailDocument } from "$/types/documents/student_detail"
import type { DeserializedProfilePictureDocument } from "$/types/documents/profile_picture"
import type { DeserializedEmployeeScheduleListDocument } from "$/types/documents/employee_schedule"
import type {
RoleIdentifierListDocument,
DeserializedRoleListDocument
} from "$/types/documents/role"
import type {
SignatureIdentifierDocument,
DeserializedSignatureDocument
} from "$/types/documents/signature"
import type {
DepartmentIdentifierDocument,
DeserializedDepartmentDocument
} from "$/types/documents/department"
import type {
StudentDetailIdentifierDocument,
DeserializedStudentDetailDocument
} from "$/types/documents/student_detail"
import type {
ProfilePictureIdentifierDocument,
DeserializedProfilePictureDocument
} from "$/types/documents/profile_picture"
import type {
EmployeeScheduleIdentifierListDocument,
DeserializedEmployeeScheduleListDocument
} from "$/types/documents/employee_schedule"
import type {
Completeness,
Format,
Expand All @@ -20,10 +38,52 @@ import type {
DeserializedResourceDocument,
DeserializedResourceListDocument,

DeriveRelationships,
DeriveRelationshipNames,
GeneralRelationshipData,
DeriveDeserializedRelationships,
PartialOrPickDeserializedRelationship,

IdentifierDocument,
IdentifierListDocument
} from "$/types/documents/base"

interface UserRelationshipData<T extends Completeness = "read">
extends GeneralRelationshipData {
department: {
serialized: DepartmentIdentifierDocument<T extends "create"|"update" ? "attached" : T>,
deserialized: DeserializedDepartmentDocument<"attached">
},
role: {
serialized: RoleIdentifierListDocument<T extends "create"|"update" ? "attached" : T>,
deserialized: DeserializedRoleListDocument<"attached">
},
profilePicture: {
serialized: ProfilePictureIdentifierDocument,
deserialized: DeserializedProfilePictureDocument
},
signature: {
serialized: SignatureIdentifierDocument,
deserialized: DeserializedSignatureDocument
},
studentDetail: {
serialized: StudentDetailIdentifierDocument,
deserialized: DeserializedStudentDetailDocument
},
employeeSchedule: {
serialized: EmployeeScheduleIdentifierListDocument,
deserialized: DeserializedEmployeeScheduleListDocument
}
}

export type UserRelationshipNames = DeriveRelationshipNames<UserRelationshipData>

export type UserRelationships<T extends Completeness = "read">
= DeriveRelationships<UserRelationshipData<T>>

export type DeserializedUserRelationships<T extends Completeness = "read">
= DeriveDeserializedRelationships<UserRelationshipData<T>>

export interface UserResourceIdentifier<T extends Completeness = "read">
extends ResourceIdentifier<T> {
type: "user"
Expand Down Expand Up @@ -56,8 +116,8 @@ export type UserAttributes<T extends Format = "serialized"> =
| UnreachableEmployeesAttributes<T>

interface DeserializedGeneralUserAttributes extends GeneralUserAttributes<"deserialized"> {
department: DeserializedDepartmentDocument<"attached">,
roles: DeserializedRoleListDocument<"attached">,
department?: DeserializedDepartmentDocument<"attached">,
roles?: DeserializedRoleListDocument<"attached">,
profilePicture?: DeserializedProfilePictureDocument,
signature?: DeserializedSignatureDocument
}
Expand Down

0 comments on commit 9e4e741

Please sign in to comment.