11const { db } = require ( '../config/firebaseAdmin' ) ;
2+ const PositionModel = require ( './positionModel' ) ;
3+ const ProfileModel = require ( './profileModel' ) ;
24
35const collection = db . collection ( 'applications' ) ;
46
@@ -11,7 +13,18 @@ class ApplicationModel {
1113 static async getApplicationById ( id ) {
1214 const application = await collection . doc ( id ) . get ( ) ;
1315 if ( application . exists ) {
14- return application ;
16+ const position = await application . data ( ) . positionId ;
17+ const positionData = await PositionModel . getPositionById ( position ) ;
18+ const candidate = await application . data ( ) . candidateId ;
19+ const candidateData = await ProfileModel . getProfileById ( candidate ) ;
20+ const candidateDetails = candidateData . data ( ) ;
21+ const applicationDetails = application . data ( ) ;
22+ return {
23+ id : application . id ,
24+ ...applicationDetails ,
25+ candidate : candidateDetails ,
26+ position : positionData ,
27+ } ;
1528 }
1629 return null ;
1730 }
@@ -21,11 +34,43 @@ class ApplicationModel {
2134 if ( applications . empty ) {
2235 return null ;
2336 }
24- const applicationList = [ ] ;
25- applications . forEach ( ( application ) => {
26- applicationList . push ( { id : application . id , ...application . data ( ) } ) ;
37+ const applicationsData = applications . docs . map ( async ( application ) => {
38+ const position = await application . data ( ) . positionId ;
39+ const positionData = await PositionModel . getPositionById ( position ) ;
40+ const candidate = await application . data ( ) . candidateId ;
41+ const candidateData = await ProfileModel . getProfileById ( candidate ) ;
42+ const candidateDetails = candidateData . data ( ) ;
43+ const applicationDetails = application . data ( ) ;
44+ return {
45+ id : application . id ,
46+ ...applicationDetails ,
47+ candidate : candidateDetails ,
48+ position : positionData ,
49+ } ;
2750 } ) ;
28- return applicationList ;
51+ return Promise . all ( applicationsData ) ;
52+ }
53+
54+ static async getApplicationByCandidateId ( candidateId ) {
55+ const applications = await collection . where ( 'candidateId' , '==' , candidateId ) . get ( ) ;
56+ if ( applications . empty ) {
57+ return null ;
58+ }
59+ const applicationsData = applications . docs . map ( async ( application ) => {
60+ const position = await application . data ( ) . positionId ;
61+ const positionData = await PositionModel . getPositionById ( position ) ;
62+ const candidate = await application . data ( ) . candidateId ;
63+ const candidateData = await ProfileModel . getProfileById ( candidate ) ;
64+ const candidateDetails = candidateData . data ( ) ;
65+ const applicationDetails = application . data ( ) ;
66+ return {
67+ id : application . id ,
68+ ...applicationDetails ,
69+ candidate : candidateDetails ,
70+ position : positionData ,
71+ } ;
72+ } ) ;
73+ return Promise . all ( applicationsData ) ;
2974 }
3075
3176 static async updateApplication ( id , data ) {
0 commit comments