From 387b55017106e5b7d4788fe20959cbd46e570fc4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Kan=C4=9Bra?= Date: Sat, 27 Feb 2021 12:08:09 +0100 Subject: [PATCH] feat(admin): ui --- components/student/student.vue | 12 +++++++++--- functions/src/index.ts | 13 ++++++++++++- pages/admin.vue | 9 +++++++-- pages/myproject.vue | 8 ++++++++ server/api/review/list.ts | 6 +----- server/api/student/update.ts | 9 +++++++++ 6 files changed, 46 insertions(+), 11 deletions(-) diff --git a/components/student/student.vue b/components/student/student.vue index 92ee92e2..958744d5 100644 --- a/components/student/student.vue +++ b/components/student/student.vue @@ -3,12 +3,10 @@ .flex.items-center.flex-1 img.border-2.border-solid.border-ps-green.rounded-full(:src='profilePicture', width='48') .flex.flex-col.ml-2.leading-4 - span.text-ps-green.font-bold.block {{ displayName }} + span.text-ps-green.font-bold.block {{ displayName }} - {{ schoolYear === year ? "aktuální" : year }} .actions ps-btn.text-ps-white(text, @click='settingsModal = !settingsModal') settings-icon(:size='20')/ - //- ps-btn.text-ps-white(text) - //- bin-icon(:size='20')/ ps-modal(v-model='settingsModal') span.text-ps-green.text-lg {{ studentToUpdate.displayName }} ps-text-field.mt-8.mb-4(v-model='studentToUpdate.displayName', name='displayName', label='Jméno') @@ -49,6 +47,14 @@ export default defineComponent({ type: firebase.firestore.Timestamp, required: true, }, + year: { + type: Number, + required: true, + }, + schoolYear: { + type: Number, + required: true, + }, }, setup({ studentId, displayName, currentYear }) { const studentToUpdate = ref({ displayName, year: currentYear.toDate().getFullYear().toString() }); diff --git a/functions/src/index.ts b/functions/src/index.ts index bff1a9cd..3d7f9f2b 100644 --- a/functions/src/index.ts +++ b/functions/src/index.ts @@ -8,6 +8,7 @@ const db = admin.firestore(); exports.projectsHooks = functions.firestore.document('projects/{projectId}').onWrite(async (snap, context) => { const statisticsRef = db.collection('system').doc('statistics'); + const currentYearRef = db.collection('system').doc('schoolYear'); const runTransaction = async (difference: number) => { return await db.runTransaction(async (transaction) => { @@ -27,7 +28,11 @@ exports.projectsHooks = functions.firestore.document('projects/{projectId}').onW }); } - if (!snap.before.data() && snap.after.data()) return await runTransaction(1); + if (!snap.before.data() && snap.after.data()) { + const yearInfo = await currentYearRef.get(); + if (!(snap.after.data()?.currentYear as admin.firestore.Timestamp).isEqual(yearInfo.data()?.currentYear)) return; + return await runTransaction(1); + }; if (!snap.after.data()) return await runTransaction(-1); if (snap.before.data() && snap.after.data()) { @@ -72,6 +77,12 @@ exports.projectsHooks = functions.firestore.document('projects/{projectId}').onW if (!currentSchoolYear.isEqual(snap.after.data()?.currentYear)) await runTransaction(-1) } + + if(snap.before.data() && !snap.after.data()) { + const yearInfo = await currentYearRef.get(); + if (!(snap.after.data()?.currentYear as admin.firestore.Timestamp).isEqual(yearInfo.data()?.currentYear)) return; + return await runTransaction(-1); + } }; return; diff --git a/pages/admin.vue b/pages/admin.vue index 63cebe3a..c1363545 100644 --- a/pages/admin.vue +++ b/pages/admin.vue @@ -62,7 +62,9 @@ :studentId='student.id', :displayName='student.displayName', :profilePicture='student.profilePicture', - :currentYear='student.currentYear' + :currentYear='student.currentYear', + :year='student.year', + :schoolYear='currentSchoolYear.toDate().getFullYear()' ) ps-tab(:active='selectedTab == "učitelé"') ps-teacher.mt-4( @@ -158,6 +160,7 @@ type Student = { displayName: String; profilePicture: String; currentYear: firebase.firestore.Timestamp; + year: Number; }; export default defineComponent({ @@ -531,7 +534,7 @@ export default defineComponent({ .firestore() .collection('users') .where('student', '==', true) - .where('currentYear', '==', currentSchoolYear.value) + .orderBy('currentYear', 'desc') .limit(10) .onSnapshot((snapshots) => { const studentsDocs = snapshots.docs; @@ -544,6 +547,7 @@ export default defineComponent({ displayName: studentDoc.data()?.displayName, profilePicture: studentDoc.data()?.profilePicture, currentYear: studentDoc.data()?.currentYear, + year: (studentDoc.data()?.currentYear as firebase.firestore.Timestamp).toDate().getFullYear(), }; }); @@ -652,6 +656,7 @@ export default defineComponent({ updatingDeadline, query, searchedProjects, + currentSchoolYear, }; }, }); diff --git a/pages/myproject.vue b/pages/myproject.vue index f398f2c9..e8128fa7 100644 --- a/pages/myproject.vue +++ b/pages/myproject.vue @@ -2,3 +2,11 @@ .h-auto.m-4 ps-my-project + + diff --git a/server/api/review/list.ts b/server/api/review/list.ts index 11f68064..d98a4e66 100644 --- a/server/api/review/list.ts +++ b/server/api/review/list.ts @@ -37,16 +37,12 @@ const getReviewsUrls = async (projectData: any, authorized = false) => { ); const strippedReviews: Array = response.filter((el: any) => el != null); - const nigger = result.map((teacher) => { + return result.map((teacher) => { return { ...teacher, reviews: strippedReviews.filter((review) => review.teacherId === teacher.teacherId), }; }); - - console.log(nigger); - - return nigger; }; export default async (req: Request, res: Response) => { diff --git a/server/api/student/update.ts b/server/api/student/update.ts index ff6245e9..d330d49f 100644 --- a/server/api/student/update.ts +++ b/server/api/student/update.ts @@ -23,13 +23,21 @@ export default async (req: Request, res: Response) => { } const studentRef = admin.firestore().collection('users').doc(studentId); + const projectRef = admin.firestore().collection('projects').where('studentId', '==', studentId).limit(1); try { await admin.firestore().runTransaction(async (transaction) => { const sfDoc = await transaction.get(studentRef); + const project = await transaction.get(projectRef); if (!sfDoc.data()?.student) return res.status(404).send('No student with this id found'); + if (project.docs[0]?.exists) { + transaction.update(project.docs[0].ref, { + currentYear, + }); + } + transaction.update(studentRef, { displayName, currentYear, @@ -40,6 +48,7 @@ export default async (req: Request, res: Response) => { return res.status(200).send(); } catch (e) { + console.log(e); return res.status(500).send(e); } };