@@ -13,6 +13,7 @@ const {
1313 getProgressDateTimestamp,
1414 buildQueryToSearchProgressByDay,
1515} = require ( "../utils/progresses" ) ;
16+ const { fetchUser } = require ( "./users" ) ;
1617const { PROGRESS_ALREADY_CREATED , PROGRESS_DOCUMENT_NOT_FOUND } = PROGRESSES_RESPONSE_MESSAGES ;
1718
1819/**
@@ -47,9 +48,31 @@ const createProgressDocument = async (progressData) => {
4748 * @throws {Error } If the userId or taskId is invalid or does not exist.
4849 **/
4950const getProgressDocument = async ( queryParams ) => {
51+ const { dev } = queryParams ;
5052 await assertUserOrTaskExists ( queryParams ) ;
5153 const query = buildQueryToFetchDocs ( queryParams ) ;
5254 const progressDocs = await getProgressDocs ( query ) ;
55+
56+ if ( dev ) {
57+ try {
58+ const uniqueUserIds = [ ...new Set ( progressDocs . map ( ( doc ) => doc . userId ) ) ] ;
59+ const usersData = await Promise . all ( uniqueUserIds . map ( ( userId ) => fetchUser ( { userId } ) ) ) ;
60+
61+ const userLookupMap = usersData . reduce ( ( lookup , { user } ) => {
62+ if ( user ) lookup [ user . id ] = user ;
63+ return lookup ;
64+ } , { } ) ;
65+
66+ const progressDocsWithUserDetails = progressDocs . map ( ( doc ) => {
67+ const userDetails = userLookupMap [ doc . userId ] || null ;
68+ return { ...doc , userData : userDetails } ;
69+ } ) ;
70+
71+ return progressDocsWithUserDetails ;
72+ } catch ( err ) {
73+ return progressDocs . map ( ( doc ) => ( { ...doc , userData : null } ) ) ;
74+ }
75+ }
5376 return progressDocs ;
5477} ;
5578
@@ -77,16 +100,23 @@ const getRangeProgressData = async (queryParams) => {
77100 * @returns {Promise<object> } A Promise that resolves with the progress records of the queried user or task.
78101 * @throws {Error } If the userId or taskId is invalid or does not exist.
79102 **/
80- async function getProgressByDate ( pathParams ) {
103+ async function getProgressByDate ( pathParams , queryParams ) {
81104 const { type, typeId, date } = pathParams ;
105+ const { dev } = queryParams ;
82106 await assertUserOrTaskExists ( { [ TYPE_MAP [ type ] ] : typeId } ) ;
83107 const query = buildQueryToSearchProgressByDay ( { [ TYPE_MAP [ type ] ] : typeId , date } ) ;
84108 const result = await query . get ( ) ;
85109 if ( ! result . size ) {
86110 throw new NotFound ( PROGRESS_DOCUMENT_NOT_FOUND ) ;
87111 }
88112 const doc = result . docs [ 0 ] ;
89- return { id : doc . id , ...doc . data ( ) } ;
113+ const docData = doc . data ( ) ;
114+ if ( dev ) {
115+ const { user : userData } = await fetchUser ( { userId : docData . userId } ) ;
116+ return { id : doc . id , ...docData , userData } ;
117+ }
118+
119+ return { id : doc . id , ...docData } ;
90120}
91121
92122module . exports = { createProgressDocument, getProgressDocument, getRangeProgressData, getProgressByDate } ;
0 commit comments