added absence endpoints
This commit is contained in:
6 files changed
+183
-47
No files matched your search
@@ -1,43 +0,0 @@
|
||||
use chrono::FixedOffset;
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
#[serde(rename_all = "PascalCase")]
|
||||
pub struct StudentAbsenceOverviewResponse {
|
||||
pub percentage_threshold: f64, //TODO: cutom type (u8)
|
||||
pub absences: Vec<AbsenceDay>,
|
||||
pub absences_per_subject: Option<Vec<SubjectAbsence>>,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
#[serde(rename_all = "PascalCase")]
|
||||
pub struct AbsenceDay {
|
||||
pub date: chrono::DateTime<FixedOffset>,
|
||||
pub unsolved: u16,
|
||||
pub ok: u16,
|
||||
pub missed: u16,
|
||||
pub late: u16,
|
||||
pub soon: u16,
|
||||
pub school: u16,
|
||||
pub distance_teaching: u16,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
#[serde(rename_all = "PascalCase")]
|
||||
pub struct SubjectAbsence {
|
||||
pub subject_name: String,
|
||||
pub lessons_count: u16,
|
||||
pub base: u16,
|
||||
pub late: u16,
|
||||
pub soon: u16,
|
||||
pub school: u16,
|
||||
pub distance_teaching: u16,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
#[serde(rename_all = "PascalCase")]
|
||||
pub struct SubjectAbsenceOverviewResponse {
|
||||
pub percentage_threshold: f64,
|
||||
pub absences: Option<Vec<AbsenceDay>>,
|
||||
pub absences_per_subject: Option<Vec<SubjectAbsence>>,
|
||||
}
|
||||
@@ -0,0 +1,132 @@
|
||||
use chrono::{DateTime, FixedOffset};
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
use crate::{Hour, StdType, StdTypeNullable};
|
||||
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
#[serde(rename_all = "PascalCase")]
|
||||
pub struct StudentAbsenceOverviewResponse {
|
||||
pub percentage_threshold: f64, //TODO: cutom type (u8)
|
||||
pub absences: Vec<AbsenceDay>,
|
||||
pub absences_per_subject: Option<Vec<SubjectAbsence>>,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
#[serde(rename_all = "PascalCase")]
|
||||
pub struct AbsenceDay {
|
||||
pub date: chrono::DateTime<FixedOffset>,
|
||||
pub unsolved: u16,
|
||||
pub ok: u16,
|
||||
pub missed: u16,
|
||||
pub late: u16,
|
||||
pub soon: u16,
|
||||
pub school: u16,
|
||||
pub distance_teaching: u16,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
#[serde(rename_all = "PascalCase")]
|
||||
pub struct SubjectAbsence {
|
||||
pub subject_name: String,
|
||||
pub lessons_count: u16,
|
||||
pub base: u16,
|
||||
pub late: u16,
|
||||
pub soon: u16,
|
||||
pub school: u16,
|
||||
pub distance_teaching: u16,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
#[serde(rename_all = "PascalCase")]
|
||||
pub struct SubjectAbsenceOverviewResponse {
|
||||
pub percentage_threshold: f64,
|
||||
pub absences: Option<Vec<AbsenceDay>>,
|
||||
pub absences_per_subject: Option<Vec<SubjectAbsence>>,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
#[serde(rename_all = "PascalCase")]
|
||||
pub struct StudentTimetableAbsenceResponse {
|
||||
pub student: Option<StudentInfo>,
|
||||
pub days: Vec<AbsenceDayResponse>,
|
||||
pub absent_type_options: Vec<AbsenceTypeOption>,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
#[serde(rename_all = "PascalCase")]
|
||||
pub struct AbsenceTypeOption {
|
||||
pub absent_type: AbsentType,
|
||||
pub absent_kind_enabled: bool,
|
||||
pub absent_kind_required: bool,
|
||||
pub absent_note_enabled: bool,
|
||||
pub next_absent_type: AbsentType,
|
||||
pub absent_kinds: Vec<AbsenceKind>,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
#[serde(rename_all = "PascalCase")]
|
||||
pub enum AbsentType {
|
||||
Absent,
|
||||
AbsentLate,
|
||||
AbsentMiss,
|
||||
AbsentOk,
|
||||
AbsentSchool,
|
||||
AbsentSoon,
|
||||
DistanceTeaching,
|
||||
NoAbsent,
|
||||
}
|
||||
|
||||
type StudentInfo = StdTypeNullable;
|
||||
type AbsenceKind = StdType;
|
||||
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
#[serde(rename_all = "PascalCase")]
|
||||
pub struct AbsenceSubject {
|
||||
pub id: String,
|
||||
pub abbrev: Option<String>,
|
||||
pub name: String,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
#[serde(rename_all = "PascalCase")]
|
||||
pub struct AbsenceDayResponse {
|
||||
pub date: DateTime<FixedOffset>,
|
||||
pub absences: Vec<Absence>,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
#[serde(rename_all = "PascalCase")]
|
||||
pub struct Absence {
|
||||
pub minutes: i64,
|
||||
pub absent_type: AbsentType,
|
||||
pub hour_id: String,
|
||||
pub start: i64,
|
||||
pub duration: i64,
|
||||
pub hour_index: Option<i64>,
|
||||
pub absent_kind_id: Option<String>,
|
||||
pub notice: Option<String>,
|
||||
pub student_id: Option<String>,
|
||||
pub subject: Option<AbsenceSubject>,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
#[serde(rename_all = "PascalCase")]
|
||||
pub struct ExcuseAbsenceResponse {
|
||||
pub absences: Vec<AbsenceRecord>,
|
||||
pub hours: Vec<Hour>,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
#[serde(rename_all = "PascalCase")]
|
||||
pub struct AbsenceRecord {
|
||||
pub minutes: i64,
|
||||
pub absent_type: AbsentType,
|
||||
pub hour_id: Option<String>,
|
||||
pub date: DateTime<FixedOffset>,
|
||||
pub start: i64,
|
||||
pub duration: i64,
|
||||
pub absent_kind_id: Option<String>,
|
||||
pub notice: Option<String>,
|
||||
pub student_id: Option<String>,
|
||||
pub apology_id: Option<String>,
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
use std::marker::PhantomData;
|
||||
|
||||
use crate::{
|
||||
ContentType, Endpoint, ExcuseAbsenceResponse, StudentAbsenceOverviewResponse,
|
||||
StudentTimetableAbsenceResponse,
|
||||
};
|
||||
|
||||
pub const CAN_STUDENT_EXCUSE_ABSENCE_ENDPOINT: Endpoint<bool, ()> = Endpoint::Get {
|
||||
url: "/api/3/absence/canexcuse/{studentId}",
|
||||
auth: true,
|
||||
_types: PhantomData,
|
||||
};
|
||||
|
||||
pub const GET_STUDENT_ABSENCE_ENDPOINT: Endpoint<StudentAbsenceOverviewResponse, ()> =
|
||||
Endpoint::Get {
|
||||
url: "/api/3/absence/student",
|
||||
auth: true,
|
||||
_types: PhantomData,
|
||||
};
|
||||
|
||||
pub const GET_STUDENT_TIMETABLE_WITH_ABSENCES_ENDPOINT: Endpoint<
|
||||
StudentTimetableAbsenceResponse,
|
||||
(),
|
||||
> = Endpoint::Get {
|
||||
url: "/api/3/timetable/student/{studentId}",
|
||||
auth: true,
|
||||
_types: PhantomData,
|
||||
};
|
||||
|
||||
pub const EXCUSE_KOMENS_ABSENCE_ENDPOINT: Endpoint<ExcuseAbsenceResponse, ()> = Endpoint::Put {
|
||||
//TODO unknown behaviour (and request type) // probably bsenceRecord or AbsenceRecordWithSubject
|
||||
url: "/api/3/absence",
|
||||
auth: true,
|
||||
content_type: ContentType::Json,
|
||||
_types: PhantomData,
|
||||
};
|
||||
@@ -0,0 +1,5 @@
|
||||
mod absence;
|
||||
mod endpoints;
|
||||
|
||||
pub use absence::*;
|
||||
pub use endpoints::*;
|
||||
@@ -12,6 +12,12 @@ pub enum Endpoint<Response, Request> {
|
||||
content_type: ContentType,
|
||||
_types: PhantomData<fn() -> (Response, Request)>,
|
||||
},
|
||||
Put {
|
||||
url: &'static str,
|
||||
auth: bool,
|
||||
content_type: ContentType,
|
||||
_types: PhantomData<fn() -> (Response, Request)>,
|
||||
},
|
||||
}
|
||||
|
||||
pub enum ContentType {
|
||||
|
||||
+4
-4
@@ -34,7 +34,7 @@
|
||||
- [x] /api/3/payments/classfund/teacher/students/:classId
|
||||
- [ ] /api/3/classbook/lessonTags
|
||||
- [ ] /api/3/komens/messages/rating/:messageId
|
||||
- [ ] /api/3/absence/student
|
||||
- [x] /api/3/absence/student
|
||||
- [ ] /api/3/webmodule
|
||||
- [ ] /api/3/timetable/actual
|
||||
- [x] /api/3/payments/classfund/teacher/document/detail/:documentId
|
||||
@@ -67,7 +67,7 @@
|
||||
- [ ] /api/3/komens/message/:messageId/mark-as-unhidden
|
||||
- [ ] /api/3/lesson/:lessonId/studentsTimetable
|
||||
- [ ] /api/3/marks/final
|
||||
- [ ] /api/3/timetable/student/:studentId
|
||||
- [x] /api/3/timetable/student/:studentId
|
||||
- [ ] /api/3/marking/atom/:atomId/headerOptions
|
||||
- [ ] /api/3/gdpr/consent/:id/disagree
|
||||
- [ ] /api/3/komens/messages/sent
|
||||
@@ -84,7 +84,7 @@
|
||||
- [ ] /api/3/timetable/actual/class/:classId
|
||||
- [ ] /api/3/gdpr/consents/person
|
||||
- [ ] /api/3/komens/messages/unread
|
||||
- [ ] /api/3/absence
|
||||
- [x] /api/3/absence
|
||||
- [ ] /api/3/komens/message/:messageId/mark-as-confirmed
|
||||
- [ ] /api/3/komens/messages/apology
|
||||
- [x] /api/3/events
|
||||
@@ -99,7 +99,7 @@
|
||||
- [ ] /api/3/gdpr/consent/:id/revoke-request
|
||||
- [x] /api/3/payments/regularpayments/teacher/prescriptions/:prescriptionId/students/:studentId
|
||||
- [ ] /api/3/marking/atoms
|
||||
- [ ] /api/3/absence/canexcuse/:studentId
|
||||
- [x] /api/3/absence/canexcuse/:studentId
|
||||
- [ ] /api/3/komens/rating-templates
|
||||
- [ ] /api/3/emergency/participantsselection
|
||||
- [ ] /api/3/komens/messages/noticeboard/unread
|
||||
|
||||
Reference in new issue
Block a user