Weitere backend kommentare

This commit is contained in:
brausjonas
2023-07-09 00:42:44 +02:00
parent 86f9e559b5
commit 68e2d553f9
15 changed files with 77 additions and 7 deletions
@@ -10,6 +10,16 @@ import java.sql.*;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
//kleiner hinweis zur Datenbank:
//die datenkbank H2 benötigt die beiden dateien database.mv.db und database.trace.db
//um die datenbank verwenden zu können muss der jdbc driver in das projekt eingebunden sein.
//dieser driver liegt im ordner als h2jdbcdriver als .jar datei
//der nutzername für die datenbank ist: adm
//das passwort für die datenbank ist: 73bgjfdsfJ!934
//die datenbank als einzelnes kann entweder über die h2console (windows) oder jetbrains datagrip (alle systeme) editiert werden.
//oder über jedes weitere tool welches h2 datenbanken unterstützt.
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
public class DataBaseHandler { public class DataBaseHandler {
//singleton instance of database handler //singleton instance of database handler
private static DataBaseHandler instance = null; private static DataBaseHandler instance = null;
@@ -267,6 +277,7 @@ public class DataBaseHandler {
} }
} }
//ist dafür da, um ein semester anhand seiner id aus der datenbank zu löschen
public void deleteSemester(int id) { public void deleteSemester(int id) {
try { try {
st.executeUpdate("DELETE FROM modules WHERE semesterid=" + id); st.executeUpdate("DELETE FROM modules WHERE semesterid=" + id);
@@ -277,6 +288,7 @@ public class DataBaseHandler {
} }
} }
//kann ein resultset der datenbank in ein internes semester objekt umwandeln.
public Semester resultSetToSemester(ResultSet rs) { public Semester resultSetToSemester(ResultSet rs) {
try { try {
rs.next(); rs.next();
@@ -308,6 +320,7 @@ public class DataBaseHandler {
} }
} }
//ein modul anhand der zuweisung von dozent und semester bekommen.
public Module getModule(int userid, int semesterid) { public Module getModule(int userid, int semesterid) {
try { try {
ResultSet rs = st.executeQuery("select * from modules where userid=" + userid + " and semesterid=" + semesterid); ResultSet rs = st.executeQuery("select * from modules where userid=" + userid + " and semesterid=" + semesterid);
@@ -318,7 +331,7 @@ public class DataBaseHandler {
} }
} }
//get module objects by its semester and its lecturer //bekomme alle modulzuweisungen, die zu einem dozenten gehören.
public Module[] getModules(int userid) { public Module[] getModules(int userid) {
try { try {
ResultSet rs = st.executeQuery("SELECT * FROM modules WHERE userid = " + userid); ResultSet rs = st.executeQuery("SELECT * FROM modules WHERE userid = " + userid);
@@ -335,6 +348,7 @@ public class DataBaseHandler {
} }
} }
//füge eine neue modulzuweisung zwischen dozenten und fächern hinzu
public Module addModule(Module m) { public Module addModule(Module m) {
try { try {
st.executeUpdate("insert into modules (userid, semesterid, name, activated) " + st.executeUpdate("insert into modules (userid, semesterid, name, activated) " +
@@ -347,6 +361,7 @@ public class DataBaseHandler {
} }
} }
//gibt alle zuweisungen zurück.
public Module[] getAllModules() { public Module[] getAllModules() {
try { try {
ResultSet rs = st.executeQuery("SELECT * FROM modules"); ResultSet rs = st.executeQuery("SELECT * FROM modules");
@@ -362,6 +377,7 @@ public class DataBaseHandler {
} }
} }
//updatet eine zuweisung anhand ihrer id
public Module updateModule(Module m) { public Module updateModule(Module m) {
try { try {
@@ -377,6 +393,7 @@ public class DataBaseHandler {
} }
} }
//setzt die aktivierung einer modulzuweisung zurück.
public void submitModule(int id) public void submitModule(int id)
{ {
try try
@@ -389,6 +406,8 @@ public class DataBaseHandler {
} }
} }
//kann alle modulzuweisungen innerhalb eines semesters löschen.
//hierbei werden auch alle termine mit gelöscht.
public boolean deleteModuleBySemesterID(int id) { public boolean deleteModuleBySemesterID(int id) {
try { try {
st.executeUpdate("delete from modules where semesterid=" + id); st.executeUpdate("delete from modules where semesterid=" + id);
@@ -399,6 +418,8 @@ public class DataBaseHandler {
} }
} }
//kann eine einzelne modulzuweisung anhand ihrer id löschen.
//hierbei werden auch alle zu dieser zuweisung gehörigen termine gelöscht
public boolean deleteModule(int id) { public boolean deleteModule(int id) {
try { try {
st.executeUpdate("delete from modules where id=" + id); st.executeUpdate("delete from modules where id=" + id);
@@ -409,6 +430,7 @@ public class DataBaseHandler {
} }
} }
//kann ein result set der datenbank in ein internes modul objekt umwandeln.
public Module resultSetToModule(ResultSet rs) { public Module resultSetToModule(ResultSet rs) {
try { try {
rs.next(); rs.next();
@@ -447,7 +469,7 @@ public class DataBaseHandler {
} }
} }
//einen User //einen User anhand seiner email und passwort zurückgeben.
public User getUser(String mail, String password) { public User getUser(String mail, String password) {
try { try {
@@ -460,6 +482,8 @@ public class DataBaseHandler {
return null; return null;
} }
//einen nutzer andhand seiner id zurückgeben.
//diese funktion sollte nur für admins verfügbar sein.
public User getUser(int id) { public User getUser(int id) {
try { try {
ResultSet rs = st.executeQuery("select * from users where id=" + id); ResultSet rs = st.executeQuery("select * from users where id=" + id);
@@ -469,6 +493,7 @@ public class DataBaseHandler {
} }
} }
//ein nutzer anhand seiner mail zurückgeben. diese funktion sollte nur für admins erreichbar sein.
public User getUser(String mail) { public User getUser(String mail) {
try { try {
ResultSet rs = st.executeQuery("select * from users where mail='" + mail + "'"); ResultSet rs = st.executeQuery("select * from users where mail='" + mail + "'");
@@ -482,6 +507,8 @@ public class DataBaseHandler {
} }
} }
//kann ein result set der datenbank in ein internes nutzer objekt umwandeln.
public User resultSetToUser(ResultSet rs) { public User resultSetToUser(ResultSet rs) {
try { try {
rs.next(); rs.next();
@@ -524,6 +551,8 @@ public class DataBaseHandler {
} }
//kann einen nutzer updaten, aber auch dessen rechte verändern, hierbei werden die rechte nur angepasst,
//wenn der boolean elevationRequestByAdmin true ist
public User updateUser(User user, int id, boolean elevationRequestByAdmin) { public User updateUser(User user, int id, boolean elevationRequestByAdmin) {
try { try {
String password = user.getPassword(); String password = user.getPassword();
@@ -561,6 +590,8 @@ public class DataBaseHandler {
} }
} }
//hier kann ein nutzer anhand seiner email addresse gelöscht werden.
//diese funktion sollte nur für den eigenen nutzer oder für admins verfügbar sein.
public boolean deleteUser(String mail) { public boolean deleteUser(String mail) {
try { try {
ResultSet rs = st.executeQuery("SELECT id FROM user WHERE mail='" + mail + "'"); ResultSet rs = st.executeQuery("SELECT id FROM user WHERE mail='" + mail + "'");
@@ -1,6 +1,6 @@
package com.example.backend.anwprj.Entries; package com.example.backend.anwprj.Entries;
//entry data class //interne klasse für die darstellung von terminen
public class Entry public class Entry
{ {
private int id; private int id;
@@ -1,6 +1,6 @@
package com.example.backend.anwprj.Module; package com.example.backend.anwprj.Module;
//module data class //klasse für die interne darstellungen für die zuweisungen zwischen dozenten und fächern.
public class Module { public class Module {
private int id; private int id;
private int userid; private int userid;
@@ -1,6 +1,6 @@
package com.example.backend.anwprj.Semesters; package com.example.backend.anwprj.Semesters;
//semester data class //klasse für die interne darstellung von semestern.
public class Semester public class Semester
{ {
private int id; private int id;
@@ -1,6 +1,6 @@
package com.example.backend.anwprj.Users; package com.example.backend.anwprj.Users;
//user data class //klasse für die darstellung von benutzerobjekten.
public class User public class User
{ {
private int id; private int id;
@@ -1,6 +1,6 @@
package com.example.backend.anwprj.Users; package com.example.backend.anwprj.Users;
//mapping of the integer rights to enum // zuweisung der zahlen 0 für normaler user / dozenten und 1 für admin.
public enum UserPermissions public enum UserPermissions
{ {
self(0), self(0),
@@ -5,6 +5,9 @@ import com.example.backend.anwprj.Database.DataBaseHandler;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.util.HashMap; import java.util.HashMap;
//diese klasse kümmert sich um die zuweisungen von nutzern und deren sessionids.
//wird für alle möglichen anfragen der nutzer an das backend verwendet um eine sessionid
//in ein benutzerobjekt aufzulösen.
public class UserSessionIDHandler public class UserSessionIDHandler
{ {
//stores mapping of session ids to users //stores mapping of session ids to users
@@ -43,6 +43,7 @@ public class SemesterController
return new ResponseEntity<>(HttpStatus.FORBIDDEN); return new ResponseEntity<>(HttpStatus.FORBIDDEN);
} }
//get a semester object by its id
@CrossOrigin @CrossOrigin
@GetMapping("/semester/id") @GetMapping("/semester/id")
public ResponseEntity<Semester> getSemester(@RequestParam(name="id") int id, @RequestParam(name="sessionid") String sessionID) public ResponseEntity<Semester> getSemester(@RequestParam(name="id") int id, @RequestParam(name="sessionid") String sessionID)
@@ -63,6 +64,7 @@ public class SemesterController
return new ResponseEntity<>(HttpStatus.FORBIDDEN); return new ResponseEntity<>(HttpStatus.FORBIDDEN);
} }
//takes in a list of semester ids seperatet by an a as list seperator
@CrossOrigin @CrossOrigin
@GetMapping("/semester/id/all") @GetMapping("/semester/id/all")
public ResponseEntity<Semester[]> getSemestersAll(@RequestParam(name="ids") String ids, @RequestParam(name="sessionid") String sessionid) public ResponseEntity<Semester[]> getSemestersAll(@RequestParam(name="ids") String ids, @RequestParam(name="sessionid") String sessionid)
@@ -80,6 +82,7 @@ public class SemesterController
return new ResponseEntity<>(resultList.toArray(new Semester[0]), HttpStatus.OK); return new ResponseEntity<>(resultList.toArray(new Semester[0]), HttpStatus.OK);
} }
//gibt alle semester zurück
@CrossOrigin @CrossOrigin
@GetMapping("/semester/all") @GetMapping("/semester/all")
public ResponseEntity<Semester[]> getSemester(@RequestParam(name="sessionid") String sessionid) public ResponseEntity<Semester[]> getSemester(@RequestParam(name="sessionid") String sessionid)
@@ -122,6 +125,7 @@ public class SemesterController
} }
//updatet ein semester
@CrossOrigin @CrossOrigin
@PutMapping("/semester") @PutMapping("/semester")
public ResponseEntity<Semester> updateSemester(@RequestBody Semester semester, @RequestParam(name="sessionid") String sessionID) public ResponseEntity<Semester> updateSemester(@RequestBody Semester semester, @RequestParam(name="sessionid") String sessionID)
@@ -142,6 +146,7 @@ public class SemesterController
return new ResponseEntity<>(HttpStatus.FORBIDDEN); return new ResponseEntity<>(HttpStatus.FORBIDDEN);
} }
//löscht ein semester anhand seiner id
@CrossOrigin @CrossOrigin
@DeleteMapping("/semester") @DeleteMapping("/semester")
public void deleteSemester(@RequestParam(name="sessionid") String sessionid, @RequestParam(name="id") int id) public void deleteSemester(@RequestParam(name="sessionid") String sessionid, @RequestParam(name="id") int id)
@@ -9,6 +9,11 @@ import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
/*
Hier sind einige nutzer funktionen mehr, als für das tool benötigt werden. Diese dienen nur testzwecken
zum verwalten von nutzer z.b. über postman.
*/
@RestController @RestController
public class UserController { public class UserController {
//reference to the database handler //reference to the database handler
@@ -18,6 +23,7 @@ public class UserController {
db = DataBaseHandler.getInstance(); db = DataBaseHandler.getInstance();
} }
//hole alle user, nur erlaubt für admins
@CrossOrigin @CrossOrigin
@GetMapping("/users/all") @GetMapping("/users/all")
public ResponseEntity<User[]> getAllUsers(@RequestParam(name = "sessionid") String sessionid) public ResponseEntity<User[]> getAllUsers(@RequestParam(name = "sessionid") String sessionid)
@@ -57,6 +63,7 @@ public class UserController {
return new ResponseEntity<>(sessionID, HttpStatus.OK); return new ResponseEntity<>(sessionID, HttpStatus.OK);
} }
//ein nutzer möchte sich ausloggen, damit sollte seinen sessionid entfernt werden.
@CrossOrigin @CrossOrigin
@GetMapping("/users/logout") @GetMapping("/users/logout")
public ResponseEntity<Boolean> logout(@RequestParam(name = "sessionid") String sessionID) { public ResponseEntity<Boolean> logout(@RequestParam(name = "sessionid") String sessionID) {
@@ -64,6 +71,7 @@ public class UserController {
return new ResponseEntity<>(success, HttpStatus.OK); return new ResponseEntity<>(success, HttpStatus.OK);
} }
//admins können hier die daten eiens nutzer anfordern.
@CrossOrigin @CrossOrigin
@GetMapping("/users/data") @GetMapping("/users/data")
public ResponseEntity<User> getUserData( public ResponseEntity<User> getUserData(
@@ -141,6 +149,7 @@ public class UserController {
return new ResponseEntity<>(false, HttpStatus.FORBIDDEN); return new ResponseEntity<>(false, HttpStatus.FORBIDDEN);
} }
//rechte eines nutzers erhöhen, kann nur von admins ausgeführt werden.
@CrossOrigin @CrossOrigin
@PutMapping("/users/elevate") @PutMapping("/users/elevate")
public ResponseEntity<Boolean> elevateUser( public ResponseEntity<Boolean> elevateUser(
@@ -9,6 +9,7 @@ import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
//alte verworfenen klasse für die funktionalität nicht wichtig
@RestController @RestController
public class DayController public class DayController
{ {
@@ -1,5 +1,6 @@
package com.example.backend.discard.Days; package com.example.backend.discard.Days;
//alte verworfene klasse nicht wichtig für die funktionalität
public class Day public class Day
{ {
private int id; private int id;
@@ -5,6 +5,8 @@ import java.io.*;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.security.*; import java.security.*;
//hier ein versuch für die übertragung von vertraulichen daten wie nutzername und passwörtern RSA verschlüsselung anzuwenden.
//finde aktuell keine anwendung im projekt.
public class RSA { public class RSA {
private PublicKey publicKey; private PublicKey publicKey;
@@ -1,3 +1,19 @@
!!!!!!!!!
!!!!!!!!!
hier sieht man eine sammlung alter databasehandler funktionen,
welche nicht benötigt wurden. Von deren Verwendung ist abzuraten,
die Funkionalität dieser bei erneutem einfügen in den Databasehandler
kann nicht gewährleistet werden
!!!!!!!!
!!!!!!!!
!!!!!!!!
/** /**
* WEEKS * WEEKS
*/ */
@@ -1,5 +1,6 @@
package com.example.backend.discard.Week; package com.example.backend.discard.Week;
//alte verworfene klasse, nicht wichtig für die funktionalität
public class Week { public class Week {
private int id; private int id;
@@ -11,6 +11,7 @@ import org.springframework.web.bind.annotation.*;
import java.sql.SQLException; import java.sql.SQLException;
//alte verworfene klassen, für die funktionalität des tools nicht wichtig
@RestController @RestController
public class WeekController public class WeekController
{ {