Commit fc4efb2b authored by Muhammad Suleman's avatar Muhammad Suleman

Initial Commit

parent 98075e37
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<parent> <parent>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId> <artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.0</version> <version>2.7.0</version>
<relativePath/> <!-- lookup parent from repository --> <relativePath/> <!-- lookup parent from repository -->
</parent> </parent>
<groupId>com.school</groupId> <groupId>com.school</groupId>
<artifactId>school</artifactId> <artifactId>school</artifactId>
<version>0.0.1-SNAPSHOT</version> <version>0.0.1-SNAPSHOT</version>
<name>school</name> <name>school</name>
<description>Spring Project for School</description> <description>Spring Project for School</description>
<properties> <properties>
<java.version>17</java.version> <java.version>17</java.version>
</properties> </properties>
<dependencies> <dependencies>
<dependency> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId> <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency> </dependency>
<dependency> <dependency>
<groupId>mysql</groupId> <groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId> <artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope> <scope>runtime</scope>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.mapstruct</groupId> <groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId> <artifactId>mapstruct</artifactId>
<version>1.4.2.Final</version> <version>1.4.2.Final</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId> <artifactId>spring-boot-starter-web</artifactId>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId> <artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.mindrot</groupId> <groupId>org.mindrot</groupId>
<artifactId>jbcrypt</artifactId> <artifactId>jbcrypt</artifactId>
<version>0.3m</version> <version>0.3m</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.projectlombok</groupId> <groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId> <artifactId>lombok</artifactId>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.springframework.security</groupId> <groupId>org.springframework.security</groupId>
<artifactId>spring-security-core</artifactId> <artifactId>spring-security-core</artifactId>
<version>5.7.1</version> <version>5.7.1</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.springframework.security</groupId> <groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId> <artifactId>spring-security-config</artifactId>
<version>5.7.1</version> <version>5.7.1</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.springframework.security</groupId> <groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId> <artifactId>spring-security-web</artifactId>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.junit.vintage</groupId> <groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId> <artifactId>junit-vintage-engine</artifactId>
<scope>test</scope> <scope>test</scope>
<exclusions> <exclusions>
<exclusion> <exclusion>
<groupId>org.hamcrest</groupId> <groupId>org.hamcrest</groupId>
<artifactId>hamcrest-core</artifactId> <artifactId>hamcrest-core</artifactId>
</exclusion> </exclusion>
</exclusions> </exclusions>
</dependency> </dependency>
<dependency> <dependency>
<groupId>io.jsonwebtoken</groupId> <groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId> <artifactId>jjwt</artifactId>
<version>0.9.1</version> <version>0.9.1</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.springframework.security</groupId> <groupId>org.springframework.security</groupId>
<artifactId>spring-security-jwt</artifactId> <artifactId>spring-security-jwt</artifactId>
<version>1.1.1.RELEASE</version> <version>1.1.1.RELEASE</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.springframework.security.oauth</groupId> <groupId>org.springframework.security.oauth</groupId>
<artifactId>spring-security-oauth2</artifactId> <artifactId>spring-security-oauth2</artifactId>
<version>2.0.14.RELEASE</version> <version>2.0.14.RELEASE</version>
</dependency> </dependency>
</dependencies> <dependency>
<groupId>org.mockito</groupId>
<build> <artifactId>mockito-all</artifactId>
<plugins> <version>1.9.5</version>
<plugin> <scope>test</scope>
<groupId>org.apache.maven.plugins</groupId> </dependency>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version> </dependencies>
<configuration>
<source>11</source> <build>
<target>11</target> <plugins>
<annotationProcessorPaths> <plugin>
<path> <groupId>org.apache.maven.plugins</groupId>
<groupId>org.mapstruct</groupId> <artifactId>maven-compiler-plugin</artifactId>
<artifactId>mapstruct-processor</artifactId> <version>3.5.1</version>
<version>1.4.2.Final</version> <configuration>
</path> <source>11</source>
<target>11</target>
<path> <annotationProcessorPaths>
<groupId>org.projectlombok</groupId> <path>
<artifactId>lombok</artifactId> <groupId>org.mapstruct</groupId>
<version>1.18.24</version> <artifactId>mapstruct-processor</artifactId>
</path> <version>1.4.2.Final</version>
</path>
<path>
<groupId>org.projectlombok</groupId> <path>
<artifactId>lombok-mapstruct-binding</artifactId> <groupId>org.projectlombok</groupId>
<version>0.2.0</version> <artifactId>lombok</artifactId>
</path> <version>1.18.24</version>
</path>
</annotationProcessorPaths>
<path>
</configuration> <groupId>org.projectlombok</groupId>
</plugin> <artifactId>lombok-mapstruct-binding</artifactId>
<version>0.2.0</version>
</plugins> </path>
</build>
</annotationProcessorPaths>
</configuration>
</plugin>
</plugins>
</build>
</project> </project>
package com.school.project.controller; package com.school.project.controller;
import com.school.project.dto.CourseDTO; import com.school.project.dto.CourseDTO;
import com.school.project.mapper.CourseMapper; import com.school.project.service.course.CourseServiceImp;
import com.school.project.model.Course;
import com.school.project.service.implementation.CourseServiceImp;
import com.school.project.service.interfaces.CourseService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.EmptyResultDataAccessException; import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
...@@ -12,10 +9,8 @@ import org.springframework.http.ResponseEntity; ...@@ -12,10 +9,8 @@ import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.sql.SQLIntegrityConstraintViolationException;
import java.util.List; import java.util.List;
import java.util.NoSuchElementException; import java.util.NoSuchElementException;
import java.util.Optional;
@Controller @Controller
@RequestMapping("/course") @RequestMapping("/course")
......
package com.school.project.controller; package com.school.project.controller;
import com.school.project.dto.CourseDTO;
import com.school.project.dto.DepartmentDTO; import com.school.project.dto.DepartmentDTO;
import com.school.project.service.implementation.DepartmentServiceImp; import com.school.project.service.department.DepartmentServiceImp;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.EmptyResultDataAccessException; import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.http.HttpStatus; 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.*;
import org.springframework.web.server.ResponseStatusException;
import java.sql.SQLIntegrityConstraintViolationException;
import java.util.List; import java.util.List;
import java.util.NoSuchElementException; import java.util.NoSuchElementException;
import java.util.Optional; import java.util.Optional;
...@@ -20,7 +19,7 @@ public class DepartmentController { ...@@ -20,7 +19,7 @@ public class DepartmentController {
@Autowired(required = true) @Autowired(required = true)
public DepartmentServiceImp departmentServiceImp; public DepartmentServiceImp departmentServiceImp;
@GetMapping("/findAll") @GetMapping("")
public ResponseEntity<List<DepartmentDTO>> readAllDepartments() { public ResponseEntity<List<DepartmentDTO>> readAllDepartments() {
List<DepartmentDTO> departmentDTO = departmentServiceImp.readDepartment(); List<DepartmentDTO> departmentDTO = departmentServiceImp.readDepartment();
...@@ -31,21 +30,16 @@ public class DepartmentController { ...@@ -31,21 +30,16 @@ public class DepartmentController {
} }
} }
@GetMapping("/find/{id}") @GetMapping("/findId/{id}")
public ResponseEntity<DepartmentDTO> readDepartmentById(@PathVariable("id") Long id) { public DepartmentDTO readDepartmentById(@PathVariable("id") Long id) {
try { try {
DepartmentDTO departmentDTO = departmentServiceImp.readDepartmentById(id); return departmentServiceImp.readDepartmentById(id);
} catch (NoSuchElementException ex) {
return ResponseEntity.of(Optional.of(departmentDTO)); throw new ResponseStatusException(HttpStatus.NOT_FOUND, "Department Not Found With This Id", ex);
} catch (NoSuchElementException e) {
return ResponseEntity.status(HttpStatus.NOT_FOUND).build();
} }
} }
@GetMapping("/find/{name}") @GetMapping("/findName/{name}")
public ResponseEntity<DepartmentDTO> findDepartmentByName(@PathVariable("name") String name) { public ResponseEntity<DepartmentDTO> findDepartmentByName(@PathVariable("name") String name) {
DepartmentDTO departmentDTO = departmentServiceImp.findDepartmentByName(name); DepartmentDTO departmentDTO = departmentServiceImp.findDepartmentByName(name);
......
package com.school.project.controller; package com.school.project.controller;
import com.school.project.dto.DepartmentDTO;
import com.school.project.dto.StudentDTO; import com.school.project.dto.StudentDTO;
import com.school.project.model.Student; import com.school.project.service.student.StudentServiceImp;
import com.school.project.service.implementation.StudentServiceImp;
import com.school.project.service.interfaces.StudentService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.EmptyResultDataAccessException; import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
...@@ -13,7 +10,6 @@ import org.springframework.web.bind.annotation.*; ...@@ -13,7 +10,6 @@ import org.springframework.web.bind.annotation.*;
import java.util.List; import java.util.List;
import java.util.NoSuchElementException; import java.util.NoSuchElementException;
import java.util.Optional;
@RestController @RestController
@RequestMapping("/student") @RequestMapping("/student")
...@@ -21,6 +17,8 @@ public class StudentController { ...@@ -21,6 +17,8 @@ public class StudentController {
@Autowired(required = true) @Autowired(required = true)
public StudentServiceImp studentServiceImp; public StudentServiceImp studentServiceImp;
@PostMapping("/save") @PostMapping("/save")
public ResponseEntity<StudentDTO> saveStudent(@RequestBody StudentDTO studentDTO) { public ResponseEntity<StudentDTO> saveStudent(@RequestBody StudentDTO studentDTO) {
......
package com.school.project.controller; package com.school.project.controller;
import com.school.project.dto.DepartmentDTO;
import com.school.project.dto.TeacherDTO; import com.school.project.dto.TeacherDTO;
import com.school.project.model.Teacher; import com.school.project.service.teacher.TeacherServiceImp;
import com.school.project.service.implementation.TeacherServiceImp;
import com.school.project.service.interfaces.TeacherService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.ComponentScan;
import org.springframework.dao.EmptyResultDataAccessException; import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.http.HttpRange;
import org.springframework.http.HttpStatus; 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.*;
import java.util.List; import java.util.List;
import java.util.NoSuchElementException; import java.util.NoSuchElementException;
import java.util.Optional;
@RestController @RestController
@ComponentScan(basePackages = "com.school.project.service.interfaces.TeacherService") @ComponentScan(basePackages = "com.school.project.service.teacher.TeacherService")
@RequestMapping("/teacher") @RequestMapping("/teacher")
public class TeacherController { public class TeacherController {
......
package com.school.project.controller; package com.school.project.controller.registration;
import com.school.project.dto.StudentRegistrationDTO;
import com.school.project.dto.UserDTO; import com.school.project.dto.UserDTO;
import com.school.project.mapper.UserMapper; import com.school.project.service.userRegistration.StudentRegistrationService;
import com.school.project.service.implementation.UserServiceImpl;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller; import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
@RestController @RestController
@RequestMapping("/user") @RequestMapping("/register")
public class UserController { public class StudentRegistrationController {
@Autowired(required = true)
UserServiceImpl userService;
@Autowired(required = true) @Autowired
UserMapper userMapper; private StudentRegistrationService studentRegistrationService;
@PostMapping("/save") @PostMapping("/student")
public String saveUser(@ModelAttribute UserDTO userDTO) { public ResponseEntity<UserDTO> registerStudent(@RequestBody StudentRegistrationDTO student) {
Integer id = userService.saveUser(userMapper.userDtoToUser(userDTO)); UserDTO userDTO = studentRegistrationService.registerStudent(student);
return ResponseEntity.ok(userDTO);
String message = "User '" + id + "' saved successfully !";
return message;
} }
} }
package com.school.project.dto; package com.school.project.dto;
import com.school.project.model.Student; import com.school.project.model.registration.StudentReg;
import com.school.project.model.Teacher; import com.school.project.model.registration.Teacher;
import lombok.Data; import lombok.Data;
import java.util.List; import java.util.List;
...@@ -13,7 +13,7 @@ public class CourseDTO { ...@@ -13,7 +13,7 @@ public class CourseDTO {
private String title; private String title;
List<Student> studentList; List<StudentReg> studentList;
private List<Teacher> teacherList; private List<Teacher> teacherList;
......
package com.school.project.dto; package com.school.project.dto;
import com.school.project.model.Teacher;
import lombok.Data; import lombok.Data;
import java.util.List;
@Data @Data
public class DepartmentDTO { public class DepartmentDTO {
......
package com.school.project.dto; package com.school.project.dto;
import com.school.project.model.Course; import com.school.project.model.school.Course;
import lombok.Data; import lombok.Data;
import java.util.List; import java.util.List;
......
package com.school.project.dto;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.RequiredArgsConstructor;
@Data
@AllArgsConstructor
@RequiredArgsConstructor
@Builder
public class StudentRegistrationDTO {
private String email;
private String password;
private String rollNumber;
private String name;
private Long age;
}
package com.school.project.dto; package com.school.project.dto;
import com.school.project.model.Course; import com.school.project.model.school.Course;
import com.school.project.model.Department; import com.school.project.model.school.Department;
import lombok.Data; import lombok.Data;
import java.util.List; import java.util.List;
......
package com.school.project.dto; package com.school.project.dto;
import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import java.util.List; import java.util.List;
@Data @Data
@AllArgsConstructor
public class UserDTO { public class UserDTO {
private Long id; private Long userId;
private String name;
private String password;
private String email; private String email;
private List<String> roles;
} }
...@@ -2,7 +2,7 @@ package com.school.project.mapper; ...@@ -2,7 +2,7 @@ package com.school.project.mapper;
import com.school.project.dto.CourseDTO; import com.school.project.dto.CourseDTO;
import com.school.project.model.Course; import com.school.project.model.school.Course;
import org.mapstruct.Mapper; import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers; import org.mapstruct.factory.Mappers;
......
package com.school.project.mapper; package com.school.project.mapper;
import com.school.project.dto.DepartmentDTO; import com.school.project.dto.DepartmentDTO;
import com.school.project.model.Department; import com.school.project.model.school.Department;
import org.mapstruct.Mapper; import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers; import org.mapstruct.factory.Mappers;
import java.util.List; import java.util.List;
import java.util.Optional;
@Mapper(componentModel = "spring") @Mapper(componentModel = "spring")
public interface DepartmentMapper { public interface DepartmentMapper {
......
package com.school.project.mapper; package com.school.project.mapper;
import com.school.project.dto.StudentDTO; import com.school.project.dto.StudentDTO;
import com.school.project.model.Student; import com.school.project.model.registration.Student;
import org.mapstruct.Mapper; import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers; import org.mapstruct.factory.Mappers;
import java.util.List; import java.util.List;
import java.util.Optional;
@Mapper(componentModel = "spring") @Mapper(componentModel = "spring")
public interface StudentMapper { public interface StudentMapper {
......
package com.school.project.mapper; package com.school.project.mapper;
import com.school.project.dto.TeacherDTO; import com.school.project.dto.TeacherDTO;
import com.school.project.model.Teacher; import com.school.project.model.registration.Teacher;
import org.mapstruct.Mapper; import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers; import org.mapstruct.factory.Mappers;
......
package com.school.project.mapper;
import com.school.project.dto.UserDTO;
import com.school.project.model.User;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
@Mapper(componentModel = "spring")
public interface UserMapper {
UserMapper INSTANCE = Mappers.getMapper(UserMapper.class);
User userDtoToUser(UserDTO userDTO);
UserDTO userToUserDto(User user);
}
package com.school.project.model;
import lombok.Data;
import org.hibernate.annotations.Fetch;
import javax.persistence.*;
import java.util.List;
@Data
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "user_id")
private Long id;
@Column(name = "username")
private String name;
@Column(name = "user_password")
private String password;
@Column(name = "user_email")
private String email;
@ElementCollection(fetch = FetchType.EAGER)
@CollectionTable(
name = "roles",
joinColumns = @JoinColumn(name = "user_id")
)
@Column(name = "user_role")
private List<String> roles;
}
package com.school.project.model.registration;
import com.sun.istack.NotNull;
import lombok.Data;
import javax.persistence.*;
@Data
@Entity
@Table(name = "Role")
public class Role {
public static enum ROLES {
ADMIN,
STUDENT,
TEACHER
}
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
@Column(name = "role_id")
private Long roleId;
@NotNull
@Column(name = "role_type", unique = true)
private String role;
}
package com.school.project.model; package com.school.project.model.registration;
import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnore;
import com.school.project.model.school.Course;
import lombok.Data; import lombok.Data;
import javax.persistence.*; import javax.persistence.*;
......
package com.school.project.model.registration;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.school.project.model.school.Course;
import com.sun.istack.NotNull;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.*;
import java.util.List;
@Data
@Entity()
@NoArgsConstructor
@Table(name = "StudentReg")
public class StudentReg {
@Id
@Column(name = "student_id")
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private Long studentId;
@Column(name = "roll_no",unique = true)
private String rollNumber;
@NotNull
@Column(name = "name")
private String name;
@NotNull
@Column(name = "age")
private Long age;
@JsonIgnore
@ManyToMany(fetch = FetchType.LAZY, cascade = {CascadeType.MERGE})
@JoinTable(
name = "studentsCourses",
joinColumns = {@JoinColumn(name = "student_id")},
inverseJoinColumns = {@JoinColumn(name = "course_id")}
)
private List<Course> courseLists;
@OneToOne
@MapsId
@JoinColumn(name = "student_id")
private User studentAppUser;
}
package com.school.project.model; package com.school.project.model.registration;
import com.school.project.model.school.Course;
import com.school.project.model.school.Department;
import com.sun.istack.NotNull;
import lombok.Data; import lombok.Data;
import org.codehaus.jackson.annotate.JsonIgnore; import org.codehaus.jackson.annotate.JsonIgnore;
...@@ -12,27 +15,32 @@ import java.util.List; ...@@ -12,27 +15,32 @@ import java.util.List;
public class Teacher { public class Teacher {
@Id @Id
@Column(name = "teacher_id")
@GeneratedValue(strategy = GenerationType.AUTO) @GeneratedValue(strategy = GenerationType.AUTO)
private Long id; private Long teacherId;
@NotNull
@Column(name = "name") @Column(name = "name")
private String name; private String name;
@NotNull
@Column(name = "degree") @Column(name = "degree")
private String degree; private String degree;
@NotNull
@JsonIgnore
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "department_id")
private Department department;
@JsonIgnore
@ManyToMany(fetch = FetchType.EAGER, cascade = {CascadeType.MERGE}) @ManyToMany(fetch = FetchType.EAGER, cascade = {CascadeType.MERGE})
@JoinTable( @JoinTable(
name = "teachersCourses", name = "teachersCourses",
joinColumns = {@JoinColumn(name = "teacher_id")}, joinColumns = {@JoinColumn(name = "teacher_id")},
inverseJoinColumns = {@JoinColumn(name = "course_id")} inverseJoinColumns = {@JoinColumn(name = "course_id")}
) )
@JsonIgnore
private List<Course> courseList; private List<Course> courseList;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "department_id")
@JsonIgnore
private Department department;
} }
package com.school.project.model.registration;
import com.sun.istack.NotNull;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.*;
@Data
@Entity
@NoArgsConstructor
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "user_id")
private Long userId;
@NotNull
@Column(name = "user_email", unique = true)
private String email;
@NotNull
@Column(name = "user_password")
private String password;
@ManyToOne
@JoinColumn(name = "role_id")
@NotNull
private Role role;
@OneToOne(mappedBy = "studentAppUser", cascade = {CascadeType.MERGE})
@PrimaryKeyJoinColumn
private StudentReg studentUser;
// @ElementCollection(fetch = FetchType.EAGER)
// @CollectionTable(
// name = "roles",
// joinColumns = @JoinColumn(name = "user_id")
// )
// @Column(name = "user_role")
// private List<String> roles; StudentReg
}
package com.school.project.model; package com.school.project.model.school;
import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnore;
import com.school.project.model.registration.StudentReg;
import com.school.project.model.registration.Teacher;
import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import javax.persistence.*; import javax.persistence.*;
...@@ -8,6 +11,7 @@ import java.util.List; ...@@ -8,6 +11,7 @@ import java.util.List;
@Data @Data
@Entity() @Entity()
@AllArgsConstructor()
@Table(name = "Course") @Table(name = "Course")
public class Course { public class Course {
...@@ -20,7 +24,7 @@ public class Course { ...@@ -20,7 +24,7 @@ public class Course {
@ManyToMany(fetch = FetchType.LAZY, mappedBy = "courseLists") @ManyToMany(fetch = FetchType.LAZY, mappedBy = "courseLists")
@JsonIgnore @JsonIgnore
private List<Student> studentList; private List<StudentReg> studentList;
@ManyToMany(fetch = FetchType.LAZY, mappedBy = "courseList") @ManyToMany(fetch = FetchType.LAZY, mappedBy = "courseList")
@JsonIgnore @JsonIgnore
......
package com.school.project.model; package com.school.project.model.school;
import lombok.Data; import lombok.Data;
......
package com.school.project.repository; package com.school.project.repository;
import com.school.project.model.Course; import com.school.project.model.school.Course;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository public interface CourseRepository extends JpaRepository<Course,Long> {
public interface CourseRepository extends JpaRepository<Course, Long> {
} }
package com.school.project.repository; package com.school.project.repository;
import com.school.project.model.Department; import com.school.project.model.school.Department;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
......
package com.school.project.repository;
import com.school.project.model.registration.Role;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface RoleRepository extends JpaRepository<Role, Long> {
Role findByRole(String role);
}
package com.school.project.repository;
import com.school.project.model.registration.StudentReg;
import org.springframework.data.jpa.repository.JpaRepository;
public interface StudentRegRepository extends JpaRepository<StudentReg,Long> {
}
package com.school.project.repository; package com.school.project.repository;
import com.school.project.model.Student; import com.school.project.model.registration.Student;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
......
package com.school.project.repository; package com.school.project.repository;
import com.school.project.model.Teacher; import com.school.project.model.registration.Teacher;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
......
package com.school.project.repository; package com.school.project.repository;
import com.school.project.model.User; import com.school.project.model.registration.User;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
......
...@@ -49,6 +49,7 @@ public class OAuth2ServerConfiguration { ...@@ -49,6 +49,7 @@ public class OAuth2ServerConfiguration {
.and() .and()
.authorizeRequests() .authorizeRequests()
.antMatchers("/user/**").permitAll() .antMatchers("/user/**").permitAll()
.antMatchers("/registerCourse").hasRole("teacher")
.antMatchers("/course/**","/department/**","/student/**","/teacher/**").authenticated(); .antMatchers("/course/**","/department/**","/student/**","/teacher/**").authenticated();
} }
} }
......
package com.school.project.service.interfaces; package com.school.project.service.course;
import com.school.project.dto.CourseDTO; import com.school.project.dto.CourseDTO;
import com.school.project.model.Course;
import java.util.List; import java.util.List;
import java.util.Optional;
public interface CourseService { public interface CourseService {
......
package com.school.project.service.implementation; package com.school.project.service.course;
import com.school.project.dto.CourseDTO; import com.school.project.dto.CourseDTO;
import com.school.project.mapper.CourseMapper; import com.school.project.mapper.CourseMapper;
import com.school.project.model.Course;
import com.school.project.repository.CourseRepository; import com.school.project.repository.CourseRepository;
import com.school.project.service.interfaces.CourseService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.transaction.Transactional; import javax.transaction.Transactional;
import java.util.List; import java.util.List;
import java.util.Optional;
@Service @Service
public class CourseServiceImp implements CourseService { public class CourseServiceImp implements CourseService {
......
package com.school.project.service.interfaces; package com.school.project.service.department;
import com.school.project.dto.DepartmentDTO; import com.school.project.dto.DepartmentDTO;
......
package com.school.project.service.implementation; package com.school.project.service.department;
import com.school.project.dto.DepartmentDTO; import com.school.project.dto.DepartmentDTO;
import com.school.project.mapper.DepartmentMapper; import com.school.project.mapper.DepartmentMapper;
import com.school.project.repository.DepartmentRepository; import com.school.project.repository.DepartmentRepository;
import com.school.project.service.interfaces.DepartmentService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
......
package com.school.project.service.interfaces; package com.school.project.service.student;
import com.school.project.dto.StudentDTO; import com.school.project.dto.StudentDTO;
import com.school.project.model.Student;
import java.util.List; import java.util.List;
......
package com.school.project.service.implementation; package com.school.project.service.student;
import com.school.project.dto.StudentDTO; import com.school.project.dto.StudentDTO;
import com.school.project.mapper.StudentMapper; import com.school.project.mapper.StudentMapper;
import com.school.project.repository.StudentRepository; import com.school.project.repository.StudentRepository;
import com.school.project.service.interfaces.StudentService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
......
package com.school.project.service.interfaces; package com.school.project.service.teacher;
import com.school.project.dto.TeacherDTO; import com.school.project.dto.TeacherDTO;
import com.school.project.model.Teacher;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.List; import java.util.List;
import java.util.Optional;
@Service @Service
public interface TeacherService { public interface TeacherService {
......
package com.school.project.service.implementation; package com.school.project.service.teacher;
import com.school.project.dto.TeacherDTO; import com.school.project.dto.TeacherDTO;
import com.school.project.mapper.TeacherMapper; import com.school.project.mapper.TeacherMapper;
import com.school.project.model.Teacher;
import com.school.project.repository.TeacherRepository; import com.school.project.repository.TeacherRepository;
import com.school.project.service.interfaces.TeacherService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.List; import java.util.List;
import java.util.Optional;
@Service @Service
public class TeacherServiceImp implements TeacherService { public class TeacherServiceImp implements TeacherService {
......
package com.school.project.service.userRegistration;
import com.school.project.dto.StudentRegistrationDTO;
import com.school.project.dto.UserDTO;
public interface StudentRegistrationService {
public UserDTO registerStudent(StudentRegistrationDTO studentRegistrationDTO);
}
package com.school.project.service.userRegistration;
import com.school.project.dto.StudentRegistrationDTO;
import com.school.project.dto.UserDTO;
import com.school.project.model.registration.Role;
import com.school.project.model.registration.StudentReg;
import com.school.project.model.registration.User;
import com.school.project.repository.RoleRepository;
import com.school.project.repository.StudentRegRepository;
import com.school.project.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service;
import javax.transaction.Transactional;
import java.util.UUID;
@Service
public class StudentRegistrationServiceImpl implements StudentRegistrationService{
@Autowired
private StudentRegRepository studentRegRepository;
@Autowired
private UserRepository userRepository;
@Autowired
private RoleRepository roleRepository;
@Autowired
private PasswordEncoder passwordEncoder;
@Override
@Transactional
public UserDTO registerStudent(StudentRegistrationDTO studentRegistrationDTO) {
User newUser = new User();
newUser.setEmail(studentRegistrationDTO.getEmail());
newUser.setRole(roleRepository.findByRole(Role.ROLES.ADMIN.name()));
newUser.setPassword(passwordEncoder.encode(studentRegistrationDTO.getPassword()));
newUser = userRepository.save(newUser);
StudentReg newStudentReg = new StudentReg();
newStudentReg.setStudentAppUser(newUser);
newStudentReg.setRollNumber(UUID.randomUUID().toString());
studentRegRepository.save(newStudentReg);
return new UserDTO(newUser.getUserId(), newUser.getEmail());
}
}
package com.school.project.service.interfaces; package com.school.project.service.userRegistration;
import com.school.project.model.User; import com.school.project.model.registration.User;
import javax.persistence.criteria.CriteriaBuilder;
public interface UserService { public interface UserService {
......
package com.school.project.service.implementation; package com.school.project.service.userRegistration;
import com.school.project.model.User; import com.school.project.model.registration.User;
import com.school.project.repository.UserRepository; import com.school.project.repository.UserRepository;
import com.school.project.service.interfaces.UserService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException; import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -21,52 +19,61 @@ import java.util.Set; ...@@ -21,52 +19,61 @@ import java.util.Set;
@Service @Service
public class UserServiceImpl implements UserService, UserDetailsService { public class UserServiceImpl implements UserService, UserDetailsService {
@Autowired
private UserRepository userRepository;
@Autowired
private PasswordEncoder passwordEncoder;
@Override @Override
public Integer saveUser(User user) { public Integer saveUser(User user) {
String password = user.getPassword(); return null;
String encodedPassword = passwordEncoder.encode(password);
user.setPassword(encodedPassword);
user = userRepository.save(user);
return Math.toIntExact(user.getId());
} }
@Override @Override
public UserDetails loadUserByUsername(String email) throws UsernameNotFoundException { public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
return null;
Optional<User> userEmail = userRepository.findUserByEmail(email);
org.springframework.security.core.userdetails.User springUser = null;
if (userEmail.isEmpty()) {
throw new UsernameNotFoundException("User With Email=" + email + "Not Founnd");
} else {
User user = userEmail.get();
List<String> userRoles = user.getRoles();
Set<GrantedAuthority> userAuthorities = new HashSet<>();
for (String userRole : userRoles) {
userAuthorities.add(new SimpleGrantedAuthority(userRole));
}
springUser = new org.springframework.security.core.userdetails.User(
email,
user.getPassword(),
userAuthorities);
}
return springUser;
} }
//
// @Autowired
// private UserRepository userRepository;
//
// @Autowired
// private PasswordEncoder passwordEncoder;
//
// @Override
// public Integer saveUser(User user) {
// String password = user.getPassword();
// String encodedPassword = passwordEncoder.encode(password);
//
// user.setPassword(encodedPassword);
//
// user = userRepository.save(user);
//
// return Math.toIntExact(user.getId());
// }
//
// @Override
// public UserDetails loadUserByUsername(String email) throws UsernameNotFoundException {
//
// Optional<User> userEmail = userRepository.findUserByEmail(email);
//
// org.springframework.security.core.userdetails.User springUser = null;
//
// if (userEmail.isEmpty()) {
// throw new UsernameNotFoundException("User With Email=" + email + "Not Founnd");
// } else {
//
// User user = userEmail.get();
//
// List<String> userRoles = user.getRoles();
//
// Set<GrantedAuthority> userAuthorities = new HashSet<>();
//
// for (String userRole : userRoles) {
// userAuthorities.add(new SimpleGrantedAuthority(userRole));
// }
//
// springUser = new org.springframework.security.core.userdetails.User(
// email,
// user.getPassword(),
// userAuthorities);
// }
//
// return springUser;
// }
} }
spring.jpa.hibernate.ddl-auto=update spring.jpa.hibernate.ddl-auto=update
spring.datasource.url=jdbc:mysql://localhost:3306/schoolDataBase spring.datasource.url=jdbc:mysql://localhost:3306/school-portal
spring.datasource.username=root spring.datasource.username=root
spring.datasource.password=charlie123 spring.datasource.password=charlie123
...@@ -13,4 +13,6 @@ spring.security.user.name= sulemantalpur6@gmail.com ...@@ -13,4 +13,6 @@ spring.security.user.name= sulemantalpur6@gmail.com
spring.security.user.password=charlie spring.security.user.password=charlie
spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.security.SecurityAutoConfiguration spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.security.SecurityAutoConfiguration
spring.mvc.view.prefix=/static spring.mvc.view.prefix=/static
\ No newline at end of file
server.error.include-message=always
\ No newline at end of file
package com.school.project; package com.school.project;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest @SpringBootTest
@SpringBootApplication(exclude={DataSourceAutoConfiguration.class})
class SchoolApplicationTests { class SchoolApplicationTests {
@Test @Test
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment