Jelajahi Sumber

Setup Subject CRUD and Teacher-Subject Relation

Eldar Mukhtarov 10 bulan lalu
induk
melakukan
b209e4391b

+ 80 - 0
project/backend_springboot/src/main/java/pl/dmcs/eldarmuk/backend_springboot/controller/SubjectController.java

@@ -0,0 +1,80 @@
+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.Subject;
+import pl.dmcs.eldarmuk.backend_springboot.model.Teacher;
+import pl.dmcs.eldarmuk.backend_springboot.repository.AccountRepository;
+import pl.dmcs.eldarmuk.backend_springboot.repository.SubjectRepository;
+import pl.dmcs.eldarmuk.backend_springboot.repository.TeacherRepository;
+
+import java.util.List;
+
+@RestController
+@CrossOrigin(origins = "http://localhost:4200")
+@RequestMapping("/subjects")
+public class SubjectController {
+    private SubjectRepository subjectRepository;
+    private AccountRepository accountRepository;
+    private TeacherRepository teacherRepository;
+
+    @Autowired
+    public SubjectController(SubjectRepository subjectRepository, AccountRepository accountRepository, TeacherRepository teacherRepository) {
+        this.subjectRepository = subjectRepository;
+        this.accountRepository = accountRepository;
+        this.teacherRepository = teacherRepository;
+    }
+
+    @GetMapping
+    public List<Subject> findAllSubjects() {
+        return subjectRepository.findAll();
+    }
+
+    @GetMapping(value = "/{id}")
+    public ResponseEntity<Subject> findSubject(@PathVariable("id") long id){
+        try {
+            Subject subject = subjectRepository.findById(id);
+            if (subject == null){
+                System.out.println("Subject with id " + id + " not found");
+                return new ResponseEntity<>(HttpStatus.NOT_FOUND);
+            }
+            return new ResponseEntity<>(subject, HttpStatus.OK);
+        } catch (Exception e) {
+            System.out.println("Error finding subject: " + e.getMessage());
+            return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
+        }
+    }
+
+    @PostMapping
+    public ResponseEntity<?> addSubject(@RequestBody Subject subject){
+        try {
+            if(subjectRepository.existsByName(subject.getName())){
+                return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
+            }
+            subjectRepository.save(subject);
+            return new ResponseEntity<>(subject, HttpStatus.CREATED);
+        } catch (Exception e) {
+            System.out.println("Error adding subject: " + e.getMessage());
+            return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
+        }
+    }
+
+    @DeleteMapping(value = "/{id}")
+    public ResponseEntity<Subject> deleteSubject(@PathVariable("id") long id){
+        try {
+            Subject subject = subjectRepository.findById(id);
+            if (subject == null){
+                System.out.println("Subject with id " + id + " not found");
+                return new ResponseEntity<>(HttpStatus.NOT_FOUND);
+            }
+            subjectRepository.delete(subject);
+            return new ResponseEntity<>(HttpStatus.NO_CONTENT);
+        } catch (Exception e) {
+            System.out.println("Error deleting subject: " + e.getMessage());
+            return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
+        }
+    }
+
+}

+ 10 - 0
project/backend_springboot/src/main/java/pl/dmcs/eldarmuk/backend_springboot/controller/TeacherController.java

@@ -37,6 +37,16 @@ public class TeacherController {
             return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
         }
     }
+    
+    @PostMapping
+    public ResponseEntity<Teacher> createTeacher(@RequestBody Teacher teacher) {
+        try {
+            Teacher savedTeacher = teacherRepository.save(teacher);
+            return new ResponseEntity<>(savedTeacher, HttpStatus.CREATED);
+        } catch (Exception e) {
+            return new ResponseEntity<>(null, HttpStatus.INTERNAL_SERVER_ERROR);
+        }
+    }
 
     @DeleteMapping("/{id}")
     public ResponseEntity<?> deleteTeacher(@PathVariable("id") long id) {

+ 0 - 9
project/backend_springboot/src/main/java/pl/dmcs/eldarmuk/backend_springboot/model/Account.java

@@ -21,7 +21,6 @@ public class Account {
     @NotBlank
     @Length(min = 6, max = 100)
     private String password;
-    private String email;
 
     public Account() {}
 
@@ -53,12 +52,4 @@ public class Account {
     public void setPassword(String password) {
         this.password = password;
     }
-
-    public String getEmail() {
-        return email;
-    }
-
-    public void setEmail(String email) {
-        this.email = email;
-    }
 }

+ 1 - 16
project/backend_springboot/src/main/java/pl/dmcs/eldarmuk/backend_springboot/model/Student.java

@@ -1,11 +1,6 @@
 package pl.dmcs.eldarmuk.backend_springboot.model;
 
-import jakarta.persistence.Entity;
-import jakarta.persistence.GeneratedValue;
-import jakarta.persistence.GenerationType;
-import jakarta.persistence.Id;
-import jakarta.persistence.OneToOne;
-import jakarta.persistence.CascadeType;
+import jakarta.persistence.*;
 
 @Entity
 public class Student {
@@ -14,7 +9,6 @@ public class Student {
     private Long id;
     private String firstName;
     private String lastName;
-    private String email;
 
     @OneToOne(cascade = CascadeType.ALL)
     private Account account;
@@ -25,7 +19,6 @@ public class Student {
         this.id = id;
         this.firstName = firstName;
         this.lastName = lastName;
-        this.email = email;
     }
 
     public Long getId() {
@@ -52,14 +45,6 @@ public class Student {
         this.lastName = lastName;
     }
 
-    public String getEmail() {
-        return email;
-    }
-
-    public void setEmail(String email) {
-        this.email = email;
-    }
-
     public Account getAccount() {
         return account;
     }

+ 39 - 0
project/backend_springboot/src/main/java/pl/dmcs/eldarmuk/backend_springboot/model/Subject.java

@@ -0,0 +1,39 @@
+package pl.dmcs.eldarmuk.backend_springboot.model;
+
+import jakarta.persistence.*;
+
+@Entity
+public class Subject {
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private long id;
+
+    private String name;
+
+    @ManyToOne
+    private Teacher teacher;
+
+    public long getId() {
+        return id;
+    }
+
+    public void setId(long id) {
+        this.id = id;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public Teacher getTeacher() {
+        return teacher;
+    }
+
+    public void setTeacher(Teacher teacher) {
+        this.teacher = teacher;
+    }
+}

+ 16 - 16
project/backend_springboot/src/main/java/pl/dmcs/eldarmuk/backend_springboot/model/Teacher.java

@@ -1,11 +1,9 @@
 package pl.dmcs.eldarmuk.backend_springboot.model;
 
-import jakarta.persistence.CascadeType;
-import jakarta.persistence.Entity;
-import jakarta.persistence.GeneratedValue;
-import jakarta.persistence.GenerationType;
-import jakarta.persistence.Id;
-import jakarta.persistence.OneToOne;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import jakarta.persistence.*;
+
+import java.util.List;
 
 @Entity
 public class Teacher {
@@ -14,18 +12,20 @@ public class Teacher {
     private Long id;
     private String firstName;
     private String lastName;
-    private String email;
 
     @OneToOne(cascade = CascadeType.ALL)
     private Account account;
 
+    @OneToMany(mappedBy="teacher", cascade = CascadeType.ALL)
+    @JsonIgnore
+    private List<Subject> subjects;
+
     public Teacher() {}
 
     public Teacher(Long id, String firstName, String lastName, String email) {
         this.id = id;
         this.firstName = firstName;
         this.lastName = lastName;
-        this.email = email;
     }
 
     public Long getId() {
@@ -52,14 +52,6 @@ public class Teacher {
         this.lastName = lastName;
     }
 
-    public String getEmail() {
-        return email;
-    }
-
-    public void setEmail(String email) {
-        this.email = email;
-    }
-
     public Account getAccount() {
         return account;
     }
@@ -67,4 +59,12 @@ public class Teacher {
     public void setAccount(Account account) {
         this.account = account;
     }
+
+    public List<Subject> getSubjects() {
+        return subjects;
+    }
+
+    public void setSubjects(List<Subject> subjects) {
+        this.subjects = subjects;
+    }
 }

+ 1 - 1
project/backend_springboot/src/main/java/pl/dmcs/eldarmuk/backend_springboot/repository/StudentRepository.java

@@ -1,8 +1,8 @@
 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.Student;
-import org.springframework.data.jpa.repository.JpaRepository;
 
 @Repository
 public interface StudentRepository extends JpaRepository<Student, Long> {

+ 11 - 0
project/backend_springboot/src/main/java/pl/dmcs/eldarmuk/backend_springboot/repository/SubjectRepository.java

@@ -0,0 +1,11 @@
+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.Subject;
+
+@Repository
+public interface SubjectRepository extends JpaRepository<Subject, Long> {
+    Subject findById(long id);
+    boolean existsByName(String name);
+}