@startuml authClass
!theme reddress-lightblue

skinparam classAttributeIconSize 0
class candidate.controller{
    - {field} candidateservice: object

    + {method} addCandidate(req: express.Request, res: express.Response): void
    + {method} getAllCandidate(req: express.Request, res: express.Response): void
    + {method} getCandidate(req: express.Request, res: express.Response): void
    + {method} editCandidate(req: express.Request, res: express.Response): void
    + {method} deleteCandidate(req: express.Request, res: express.Response): void
}

class candidate.service{
    + {method} createCandidate(candidatePayload: Object, cv: file): void
    + {method} getAllCandidate(filter: Object, options: Object): void
    + {method} getCandidateById(id: string): void
    + {method} editCandidateById(id: string, candidateData: Object): void
    + {method} deleteCandidateById(id: string): void
}

class candidate.router{
    + {field} router: express.Router
}

class schema.Candidate {
    + {field} jobId: ObjectId
    + {field} interviewId: [ObjectId]
    + {field} status: String
    + {field} stage:  String
    + {field} firstName:  String 
    + {field} midName: String
    + {field} lastName:  String 
    + {field} fullName: String 
    + {field} unsignedFullName:  String
    + {field} email:  String
    + {field} phone:  String
    + {field} sex: enum 
    + {field} referral: String 
    + {field} cv: Object
    + {field} hyperlink: String 
    + {field} employer: Object
    + {field} education: Object
    + {field} createdAt:  Date
    + {field} updatedAt: Date
}

class schema.Job {
    + {field} userId: ObjectId
    + {field} candidateId: [ObjectId]
    + {field} title: String
    + {field} unsignedTitle: String
    + {field} status:  enum 
    + {field} department: enum
    + {field} jobType:  String 
    + {field} location: String 
    + {field} jobDescription:  String
    + {field} jobDescription: String
    + {field} shortDes: String
    + {field} skill: String
    + {field} experience: String
    + {field} minSalary: Number
    + {field} maxSalary: Number
    + {field} currency: String
    + {field} createdAt: Date
    + {field} updatedAt: Date
}

candidate.router ..> candidate.controller
candidate.controller ..> candidate.service
candidate.service ..> schema.Candidate
candidate.service ..> schema.Job
@enduml