Browse Source

Grade CRUD and Relationships Setup

Eldar Mukhtarov 10 months ago
parent
commit
d52ae0d60c

+ 77 - 0
project/backend_springboot/src/main/java/pl/dmcs/eldarmuk/backend_springboot/controller/GradeController.java

@@ -0,0 +1,77 @@
+package pl.dmcs.eldarmuk.backend_springboot.controller;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+import pl.dmcs.eldarmuk.backend_springboot.model.Account;
+import pl.dmcs.eldarmuk.backend_springboot.model.Grade;
+import pl.dmcs.eldarmuk.backend_springboot.model.Student;
+import pl.dmcs.eldarmuk.backend_springboot.repository.AccountRepository;
+import pl.dmcs.eldarmuk.backend_springboot.repository.GradeRepository;
+import pl.dmcs.eldarmuk.backend_springboot.repository.StudentRepository;
+
+import java.util.List;
+
+@RestController
+@CrossOrigin(origins = "http://localhost:4200")
+@RequestMapping("/grades")
+public class GradeController {
+    private GradeRepository gradeRepository;
+    private AccountRepository accountRepository;
+    private StudentRepository studentRepository;
+
+    @Autowired
+    public GradeController(GradeRepository gradeRepository, AccountRepository accountRepository, StudentRepository studentRepository) {
+        this.gradeRepository = gradeRepository;
+        this.accountRepository = accountRepository;
+        this.studentRepository = studentRepository;
+    }
+
+    @GetMapping(value = "/subject/{id}")
+    public List<Grade> findGradesBySubject(@PathVariable("id") long id){
+        return gradeRepository.findGradesBySubjectId(id);
+    }
+
+    @GetMapping(value = "/student/{username}")
+    public ResponseEntity<List<Grade>> findGradesByStudent(@PathVariable("username") String username){
+        try {
+            Account account = accountRepository.findByUsername(username)
+                    .orElseThrow(() -> new RuntimeException("Error: User not found!"));
+            Student student = studentRepository.findByAccountUsername(account.getUsername());
+            List<Grade> grades = gradeRepository.findGradesByStudentId(student.getId());
+            return new ResponseEntity<>(grades, HttpStatus.OK);
+        } catch (Exception e) {
+            return new ResponseEntity<>(HttpStatus.NOT_FOUND);
+        }
+    }
+
+    @PostMapping
+    public ResponseEntity<Grade> addGrade(@RequestBody Grade grade){
+        try {
+            gradeRepository.save(grade);
+            return new ResponseEntity<>(grade, HttpStatus.CREATED);
+        } catch (Exception e) {
+            return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
+        }
+    }
+
+    @PatchMapping(value = "/edit/{id}")
+    public ResponseEntity<Grade> editGrade(@PathVariable("id") long id, @RequestBody java.util.Map<String, Integer> body){
+        try {
+            Grade currentGrade = gradeRepository.findById(id);
+            if (currentGrade == null){
+                return new ResponseEntity<>(HttpStatus.NOT_FOUND);
+            }
+            Integer grade = body.get("grade");
+            if (grade == null) {
+                return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
+            }
+            currentGrade.setGrade(grade);
+            gradeRepository.save(currentGrade);
+            return new ResponseEntity<>(currentGrade, HttpStatus.OK);
+        } catch (Exception e) {
+            return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
+        }
+    }
+}

+ 11 - 0
project/backend_springboot/src/main/java/pl/dmcs/eldarmuk/backend_springboot/controller/StudentController.java

@@ -1,6 +1,7 @@
 package pl.dmcs.eldarmuk.backend_springboot.controller;
 
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.*;
 
@@ -25,6 +26,16 @@ public class StudentController {
         return studentRepository.findAll();
     }
 
+    @PostMapping
+    public ResponseEntity<Student> createStudent(@RequestBody Student student) {
+        try {
+            Student savedStudent = studentRepository.save(student);
+            return new ResponseEntity<>(savedStudent, HttpStatus.CREATED);
+        } catch (Exception e) {
+            return new ResponseEntity<>(null, HttpStatus.INTERNAL_SERVER_ERROR);
+        }
+    }
+
     @DeleteMapping("/{id}")
     public ResponseEntity<?> deleteStudent(@PathVariable("id") long id) {
         try {

+ 55 - 0
project/backend_springboot/src/main/java/pl/dmcs/eldarmuk/backend_springboot/model/Grade.java

@@ -0,0 +1,55 @@
+package pl.dmcs.eldarmuk.backend_springboot.model;
+
+import jakarta.persistence.*;
+
+import jakarta.validation.constraints.Max;
+import jakarta.validation.constraints.Min;
+
+@Entity
+public class Grade {
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private long id;
+
+    @Min(2)
+    @Max(5)
+    private int grade;
+
+    @ManyToOne
+    private Student student;
+
+    @ManyToOne
+    private Subject subject;
+
+    public long getId() {
+        return id;
+    }
+
+    public void setId(long id) {
+        this.id = id;
+    }
+
+    public int getGrade() {
+        return grade;
+    }
+
+    public void setGrade(int grade) {
+        this.grade = grade;
+    }
+
+    public Student getStudent() {
+        return student;
+    }
+
+    public void setStudent(Student student) {
+        this.student = student;
+    }
+
+    public Subject getSubject() {
+        return subject;
+    }
+
+    public void setSubject(Subject subject) {
+        this.subject = subject;
+    }
+}

+ 14 - 0
project/backend_springboot/src/main/java/pl/dmcs/eldarmuk/backend_springboot/repository/GradeRepository.java

@@ -0,0 +1,14 @@
+package pl.dmcs.eldarmuk.backend_springboot.repository;
+
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+import pl.dmcs.eldarmuk.backend_springboot.model.Grade;
+
+import java.util.List;
+
+@Repository
+public interface GradeRepository extends JpaRepository<Grade, Long> {
+    Grade findById(long id);
+    List<Grade> findGradesByStudentId(long id);
+    List<Grade> findGradesBySubjectId(long id);
+}