diff --git a/controllers/catalog.js b/controllers/catalog.js index 53bce39..8322db8 100644 --- a/controllers/catalog.js +++ b/controllers/catalog.js @@ -24,13 +24,13 @@ Application.post("/catalog/list", MiddlewareAuth, express.urlencoded({extended: */ async function CatalogsList(request, response) { - let start = request.body.start ?? 0; - let length = request.body.length ?? 100; - let term = request.body.search?.value ?? null; + let start = request.body?.start ?? 0; + let length = request.body?.length ?? 100; + let term = request.body?.search?.value ?? null; let count = await countCatalogs(request.session.user_id, term); let data = await getCatalogs(request.session.user_id,start,length, term); response.json({ - "draw": request.body.draw | 0, + "draw": request.body?.draw | 0, "recordsTotal": count, "recordsFiltered" : count, "length": 0, diff --git a/controllers/students.js b/controllers/students.js index 6298b16..5275621 100644 --- a/controllers/students.js +++ b/controllers/students.js @@ -3,7 +3,7 @@ const Joi = require("joi"); const { PostDataProcess } = require("../core/postdata"); const User = require("../database/user"); const { MiddlewareAuth } = require("./auth"); -const { createStudent, getStudents, countStudents, updateStudent, deleteStudent } = require("../database/student"); +const { createStudent, getStudents, countStudents, updateStudent, deleteStudent, createEvent, getEvents, countEvents } = require("../database/student"); const express = require("express"); @@ -182,4 +182,70 @@ function studentStoreValidation(body) }); const {error} = schema.validate(body); return error; +} + + + + +Application.get("/events", MiddlewareAuth, EventsPage); +/** + * @param {import("express").Request} request + * @param {import("express").Response} response + */ +async function EventsPage(request, response) +{ + response.render("panel/studentevents"); +} + +Application.post("/event/store", MiddlewareAuth, PostDataProcess(), EventsStore); +/** + * @param {import("express").Request} request + * @param {import("express").Response} response + */ +async function EventsStore(request, response) +{ + if(!request.body.student || !request.body.catalog) + { + return response.status(400).json({ + status: "fail" + }); + } + + try{ + await createEvent( + request.session.user_id, + request.body.student, + request.body.catalog + ); + return response.status(200).json({ + status: "success" + }); + }catch(err){ + console.log(err) + return response.status(500).json({ + status: "fail" + }); + } +} + +Application.post("/events/list", MiddlewareAuth, express.urlencoded({extended: true}), EventsList); +/** + * @param {import("express").Request} request + * @param {import("express").Response} response + */ +async function EventsList(request, response) +{ + let start = request.body.start ?? 0; + let length = request.body.length ?? 100; + let term = request.body.search?.value ?? null; + + let count = await countEvents(request.session.user_id, term); + let data = await getEvents(request.session.user_id,start,length, term); + + response.json({ + "draw": request.body.draw | 0, + "recordsTotal": count, + "recordsFiltered" : count, + "data": data + }); } \ No newline at end of file diff --git a/database/student.js b/database/student.js index 4598fe0..e6409d8 100644 --- a/database/student.js +++ b/database/student.js @@ -8,6 +8,11 @@ exports.countStudents = countStudents; exports.updateStudent = updateStudent; exports.deleteStudent = deleteStudent; +exports.createEvent = createEvent; +exports.countEvents = countEvents; +exports.getEvents = getEvents; + + async function createStudent( owner_id, @@ -96,4 +101,53 @@ async function deleteStudent(owner_id, id) .update({ deleted_at: DB.fn.now() }); +} + +async function createEvent(owner_id, studentid, catalogid) +{ + let student = await DB.table("students").where("owner_id",owner_id).where("id",studentid).whereNull("deleted_at").first(); + let catalog = await DB.table("events").where("owner_id",owner_id).where("id",catalogid).whereNull("deleted_at").first(); + + if(student == null){ + throw "Öğrenci yok" + } + + if(catalog == null){ + throw "Skor yok" + } + + await DB.table("student_events").insert({ + owner_id: owner_id, + student_id: student.id, + event_id: catalog.id, + score: catalog.score + }); +} + +async function countEvents() +{ + return 0 +} + +async function getEvents(owner_id,start,length,searchTerm) +{ + return await DB + .select([ + "students.name as studentname", + "students.surname as studentsurname", + "student_events.score", + "events.name as catalog", + "student_events.created_at", + ]) + .table("student_events") + .innerJoin("students","students.id","=","student_id") + .innerJoin("events","events.id","=","event_id") + .where("student_events.owner_id",owner_id) + .where(function(q){ + q.where("students.name","like",`%${searchTerm ?? ""}%`) + q.orWhere("events.name","like",`%${searchTerm ?? ""}%`) + }) + .orderBy("student_events.created_at","desc") + .limit(length) + .offset(start); } \ No newline at end of file diff --git a/views/panel/catalogs.ejs b/views/panel/catalogs.ejs index 7f47d44..deb5737 100644 --- a/views/panel/catalogs.ejs +++ b/views/panel/catalogs.ejs @@ -124,6 +124,12 @@ data: "score", name: "score" }, + { + title: "Tarih", + data: "created_at", + name: "created_at", + render: value => moment(value).format("DD.MM.YYYY HH:mm") + }, { width: "1%", title: "İşlemler", diff --git a/views/panel/studentevents.ejs b/views/panel/studentevents.ejs new file mode 100644 index 0000000..6c235b4 --- /dev/null +++ b/views/panel/studentevents.ejs @@ -0,0 +1,307 @@ +<%-include("../partials/header.ejs") %> +<%-include("../partials/sidebar.ejs") %> +
+ <%-include("../partials/navbar.ejs") %> + +
+
+ +
+
+

Öğrenci Skorları Geçmişi

+

+ Öğrencilere yeni değerler ekleyebilir ve silebilirsiniz +

+
+
+
+
+
+
+
+
+ Skor Geçmişi +
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + +<%-include("../partials/footer.ejs") %> \ No newline at end of file diff --git a/views/panel/students.ejs b/views/panel/students.ejs index fa4c674..88c5bba 100644 --- a/views/panel/students.ejs +++ b/views/panel/students.ejs @@ -190,6 +190,12 @@ data: "email", name: "email" }, + { + title: "Tarih", + data: "created_at", + name: "created_at", + render: value => moment(value).format("DD.MM.YYYY HH:mm") + }, { width: "1%", title: "İşlemler", diff --git a/views/partials/footer.ejs b/views/partials/footer.ejs index 39959ec..237c004 100644 --- a/views/partials/footer.ejs +++ b/views/partials/footer.ejs @@ -13,5 +13,7 @@ + + \ No newline at end of file diff --git a/views/partials/header.ejs b/views/partials/header.ejs index cfe297b..1e6da4d 100644 --- a/views/partials/header.ejs +++ b/views/partials/header.ejs @@ -22,6 +22,7 @@ +
diff --git a/views/partials/sidebar.ejs b/views/partials/sidebar.ejs index ed6d207..d62d64e 100644 --- a/views/partials/sidebar.ejs +++ b/views/partials/sidebar.ejs @@ -44,7 +44,13 @@ - +
  • + + + + Skor Verileri + +
  • @@ -59,13 +65,6 @@ Puan Katalogu
  • -