Closed Karlito16 closed 3 weeks ago
Raw SQL query za prisutstva usera:
SELECT "CourseName",
"LectureStart",
"LectureEnd",
"ClassroomName",
SUM(CASE
WHEN (
"ScanIn"."ScanTime" BETWEEN "LectureStart" - INTERVAL '15 min' AND "LectureStart" + INTERVAL '15 min'
) AND (
"ScanOut"."ScanTime" BETWEEN "LectureEnd" - INTERVAL '15 min' AND "LectureEnd" + INTERVAL '15 min'
) THEN 1
ELSE
0
END) AS "Attendance"
FROM "Users"
JOIN "UsersCourses"
ON "Users"."Id" = "UsersCourses"."UserId" AND "Users"."Id" = 'e8a2ed0b-9e38-4ffe-b6fc-8465e3a61e7a'
JOIN "Courses"
ON "UsersCourses"."CourseId" = "Courses"."Id"
JOIN "Lectures"
ON "Courses"."Id" = "Lectures"."CourseId"
JOIN "Classrooms"
ON "Lectures"."ClassroomId" = "Classrooms"."Id"
LEFT OUTER JOIN "Telemetrys" AS "ScanIn"
ON "Classrooms"."Id" = "ScanIn"."ClassroomId"
AND "ScanIn"."UserId" = 'e8a2ed0b-9e38-4ffe-b6fc-8465e3a61e7a'
LEFT OUTER JOIN "Telemetrys" AS "ScanOut"
ON "Classrooms"."Id" = "ScanOut"."ClassroomId"
AND "ScanOut"."UserId" = 'e8a2ed0b-9e38-4ffe-b6fc-8465e3a61e7a'
GROUP BY "CourseName", "LectureStart", "LectureEnd", "ClassroomName"
ORDER BY "LectureStart" DESC
OFFSET 0
LIMIT 10;
Dakle, query vraća n-torke, svaka n-torka ima 5 zapisa:
Također, u queryju vidite user id, on je ovdje hardcodiran kao primjer, njega će trebat ubacit u query kao parametar (user id od aktivnog usera za kojeg se traži pregled prisutstva).
Također, ubacio sam template za paginaciju, to je ovaj dio sa OFFSET 0 LIMIT 10
, ovo također treba parametrizirati ako mislimo radit paginaciju (OFFSET je page, LIMIT je page size).
Preporučam da onda BACKEND generira sljedeć JSONi RESPONSE prema FRONTENDU:
{
"attendances": [
{
"courseName": "Internet Stvari",
"lectureStart": 2024-05-10T14:00:00+00:00,
"lectureEnd": 2024-05-10T16:00:00+00:00,
"classroom": "b2",
"attendance": true
},
{
...
},
...
]
}
Uočiti da se Attendance
mapira iz int
u boolean
:
Bacite oko na WhatsApp i primjer izvršavanja queryja. Happy coding!
Nice all
Student će imati screen na kojem može vidjeti svoja prisutstva. Vidi na kojim je predavanjima bio - početak predavanja, kraj predavanja, ime predmeta, učionica. Dodatno se možda može prikazat i vrijeme kad se skenirao za ulaz i kad se skenirao za izlaz.
Profesori imaju sličan screen. Imaju popis svih predavanja za sve svoje predmete, poredane kronološki po početku predavanja.
Admin ima isti screen kao i profesor, ali nema ograničenje na vidljive predmete - vidi sve predmete i sva predavanja iz svakog predmeta.
Za svaki screen se može napravit filter, tipa da se prikažu samo podaci iz dvorane B4, ili samo za predmet "Matematička analiza 1", ili samo prisutstva za odabrani vremenski interval, al to stavim u drugi ticket kao manji prioritet.