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);
}
};