Commit d6f663a1 authored by Usman Siddiqui's avatar Usman Siddiqui

Merge branch 'refactor' into 'master'

Adding Registration Service

See merge request !2
parents ba950a8f 69843208
<?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;
import com.school.project.dto.DepartmentDTO;
import com.school.project.dto.StudentDTO;
import com.school.project.model.Student;
import com.school.project.service.implementation.StudentServiceImp;
import com.school.project.service.interfaces.StudentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.NoSuchElementException;
import java.util.Optional;
@RestController
@RequestMapping("/student")
public class StudentController {
@Autowired(required = true)
public StudentServiceImp studentServiceImp;
@PostMapping("/save")
public ResponseEntity<StudentDTO> saveStudent(@RequestBody StudentDTO studentDTO) {
StudentDTO student = studentServiceImp.saveStudent(studentDTO);
if (student == null) {
return ResponseEntity.status(HttpStatus.UNPROCESSABLE_ENTITY).build();
} else {
return ResponseEntity.status(HttpStatus.OK).body(student);
}
}
@GetMapping("/findAll")
public ResponseEntity<List<StudentDTO>> readAllStudents() {
List<StudentDTO> studentsDTO = studentServiceImp.readAllStudents();
if (studentsDTO.size() <= 0) {
return ResponseEntity.status(HttpStatus.NOT_FOUND).build();
} else {
return ResponseEntity.status(HttpStatus.OK).body(studentsDTO);
}
}
@GetMapping("/find/{id}")
public ResponseEntity<StudentDTO> readStudentById(@PathVariable("id") Long id) {
try {
StudentDTO dto = studentServiceImp.readStudentById(id);
return ResponseEntity.status(HttpStatus.OK).body(dto);
} catch (NoSuchElementException e) {
return ResponseEntity.status(HttpStatus.NOT_FOUND).build();
}
}
@PutMapping("/update/{id}")
public ResponseEntity<StudentDTO> updateStudentById(@RequestBody StudentDTO studentDTO, @PathVariable("id") Long id) {
try {
StudentDTO updateStudent = studentServiceImp.updateStudentById(studentDTO, id);
return ResponseEntity.status(HttpStatus.OK).body(updateStudent);
} catch (NoSuchElementException e) {
return ResponseEntity.status(HttpStatus.UNPROCESSABLE_ENTITY).build();
}
}
@DeleteMapping("/delete/{id}")
public ResponseEntity deleteStudentById(@PathVariable("id") Long id) {
try {
studentServiceImp.deleteStudentById(id);
return ResponseEntity.status(HttpStatus.NO_CONTENT).build();
} catch (EmptyResultDataAccessException e) {
return ResponseEntity.status(HttpStatus.UNPROCESSABLE_ENTITY).build();
}
}
}
\ No newline at end of file
package com.school.project.controller;
import com.school.project.dto.DepartmentDTO;
import com.school.project.dto.TeacherDTO;
import com.school.project.model.Teacher;
import com.school.project.service.implementation.TeacherServiceImp;
import com.school.project.service.interfaces.TeacherService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.http.HttpRange;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.NoSuchElementException;
import java.util.Optional;
@RestController
@ComponentScan(basePackages = "com.school.project.service.interfaces.TeacherService")
@RequestMapping("/teacher")
public class TeacherController {
@Autowired(required = true)
public TeacherServiceImp teacherServiceImp;
@PostMapping("/save")
public ResponseEntity<TeacherDTO> saveTeacher(@RequestBody TeacherDTO teacherDTO) {
TeacherDTO dto = teacherServiceImp.saveTeacher(teacherDTO);
if (dto == null) {
return ResponseEntity.status(HttpStatus.UNPROCESSABLE_ENTITY).build();
} else {
return ResponseEntity.status(HttpStatus.OK).body(dto);
}
}
@GetMapping("/findAll")
public ResponseEntity<List<TeacherDTO>> readAllTeachers() {
List<TeacherDTO> teacherDTOS = teacherServiceImp.readAllTeachers();
if (teacherDTOS.size() <= 0) {
return ResponseEntity.status(HttpStatus.UNPROCESSABLE_ENTITY).build();
} else {
return ResponseEntity.status(HttpStatus.OK).body(teacherDTOS);
}
}
@GetMapping("/find/{id}")
public ResponseEntity<TeacherDTO> readTeacherById(@PathVariable("id") Long id) {
try {
TeacherDTO teacherDTO = teacherServiceImp.readTeacherById(id);
return ResponseEntity.status(HttpStatus.OK).body(teacherDTO);
} catch (NoSuchElementException e) {
return ResponseEntity.status(HttpStatus.UNPROCESSABLE_ENTITY).build();
}
}
@PutMapping("/update/{id}")
public ResponseEntity<TeacherDTO> updateTeacherById(@RequestBody TeacherDTO teacherDTO, @PathVariable("id") Long id) {
try {
TeacherDTO updateTeacher = teacherServiceImp.updateTeacher(teacherDTO, id);
return ResponseEntity.status(HttpStatus.OK).body(updateTeacher);
} catch (NoSuchElementException e) {
return ResponseEntity.status(HttpStatus.UNPROCESSABLE_ENTITY).build();
}
}
@DeleteMapping("/delete/{id}")
public ResponseEntity deleteTeacherById(@PathVariable("id") Long id) {
try {
teacherServiceImp.deleteTeacherById(id);
return ResponseEntity.status(HttpStatus.NO_CONTENT).build();
} catch (EmptyResultDataAccessException e) {
return ResponseEntity.status(HttpStatus.UNPROCESSABLE_ENTITY).build();
}
}
}
package com.school.project.controller;
import com.school.project.dto.UserDTO;
import com.school.project.mapper.UserMapper;
import com.school.project.service.implementation.UserServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired(required = true)
UserServiceImpl userService;
@Autowired(required = true)
UserMapper userMapper;
@PostMapping("/save")
public String saveUser(@ModelAttribute UserDTO userDTO) {
Integer id = userService.saveUser(userMapper.userDtoToUser(userDTO));
String message = "User '" + id + "' saved successfully !";
return message;
}
}
package com.school.project.controller.userRegistration;
import com.school.project.dto.userRegistration.AdminRegistrationDTO;
import com.school.project.dto.userRegistration.StudentRegistrationDTO;
import com.school.project.dto.userRegistration.TeacherRegistrationDTO;
import com.school.project.dto.userRegistration.UserDTO;
import com.school.project.service.userRegistration.admin.AdminRegistrationService;
import com.school.project.service.userRegistration.student.StudentRegistrationService;
import com.school.project.service.userRegistration.teacher.TeacherRegistrationService;
import lombok.AllArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
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.RestController;
import org.springframework.web.server.ResponseStatusException;
@RestController
@RequestMapping("/register")
public class RegistrationController {
@Autowired
private StudentRegistrationService studentRegistrationService;
@Autowired
private TeacherRegistrationService teacherRegistrationService;
@Autowired
private AdminRegistrationService adminRegistrationService;
@PostMapping("/student")
public ResponseEntity<UserDTO> registerStudent(@RequestBody StudentRegistrationDTO student) {
try {
UserDTO userDTO = studentRegistrationService.registerStudent(student);
return ResponseEntity.ok(userDTO);
} catch (Exception e) {
throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "Data is not correct", e);
}
}
@PostMapping("/teacher")
public ResponseEntity<UserDTO> registerTeacher(@RequestBody TeacherRegistrationDTO teacher) {
try {
UserDTO userDTO = teacherRegistrationService.registerTeacher(teacher);
return ResponseEntity.ok(userDTO);
} catch (Exception e) {
throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "Data is not correct", e);
}
}
@PostMapping("/admin")
public ResponseEntity<UserDTO> registerAdmin(@RequestBody AdminRegistrationDTO admin) {
try {
UserDTO userDTO = adminRegistrationService.registerAdmin(admin);
return ResponseEntity.ok(userDTO);
} catch (Exception e) {
throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "Data is not correct", e);
}
}
}
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;
import com.school.project.model.Course;
import lombok.Data;
import java.util.List;
@Data
public class StudentDTO {
private Long id;
private String name;
private Long age;
private List<Course> courseLists;
}
package com.school.project.dto;
import com.school.project.model.Course;
import com.school.project.model.Department;
import lombok.Data;
import java.util.List;
@Data
public class TeacherDTO {
private Long id;
private String name;
private String degree;
private List<Course> courseList;
private Department department;
}
package com.school.project.dto; package com.school.project.dto.userRegistration;
import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.RequiredArgsConstructor;
import java.util.List;
@Data @Data
public class UserDTO { @AllArgsConstructor
@RequiredArgsConstructor
private Long id; public class AdminRegistrationDTO {
private String name;
private String password;
private String email; private String email;
private String password;
private List<String> roles; private String name;
} }
package com.school.project.dto.userRegistration;
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.userRegistration;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.RequiredArgsConstructor;
@Data
@AllArgsConstructor
@RequiredArgsConstructor
@Builder
public class TeacherRegistrationDTO {
private String email;
private String password;
private String name;
private String teacherNumber;
private String degree;
}
package com.school.project.dto.userRegistration;
import lombok.AllArgsConstructor;
import lombok.Data;
@Data
@AllArgsConstructor
public class UserDTO {
private Long userId;
private String email;
}
...@@ -6,7 +6,6 @@ import org.mapstruct.Mapper; ...@@ -6,7 +6,6 @@ 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;
import com.school.project.dto.StudentDTO;
import com.school.project.model.Student;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
import java.util.List;
import java.util.Optional;
@Mapper(componentModel = "spring")
public interface StudentMapper {
StudentMapper INSTANCE = Mappers.getMapper(StudentMapper.class);
StudentDTO studentModelToDTO(Student student);
Student studentDTOToModel(StudentDTO studentDTO);
List<StudentDTO> studentModelToDTO(List<Student> all);
}
package com.school.project.mapper;
import com.school.project.dto.TeacherDTO;
import com.school.project.model.Teacher;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
import java.util.List;
@Mapper(componentModel = "spring")
public interface TeacherMapper {
TeacherMapper INSTANCE = Mappers.getMapper(TeacherMapper.class);
TeacherDTO teacherModelToDTo(Teacher teacher);
Teacher teacherDTOToModel(TeacherDTO teacherDTO);
List<TeacherDTO> teacherModelToDTo(List<Teacher> all);
}
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; package com.school.project.model;
import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import javax.persistence.*; import javax.persistence.*;
...@@ -8,6 +9,7 @@ import java.util.List; ...@@ -8,6 +9,7 @@ import java.util.List;
@Data @Data
@Entity() @Entity()
@AllArgsConstructor()
@Table(name = "Course") @Table(name = "Course")
public class Course { public class Course {
......
package com.school.project.model; package com.school.project.model;
import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnore;
import com.school.project.model.Course;
import com.school.project.model.userRegistration.User;
import com.sun.istack.NotNull;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.*; import javax.persistence.*;
import java.util.List; import java.util.List;
@Data @Data
@Entity() @Entity()
@NoArgsConstructor
@Table(name = "Student") @Table(name = "Student")
public class Student { public class Student {
@Id @Id
@Column(name = "id", nullable = false) @Column(name = "student_id")
@GeneratedValue(strategy = GenerationType.SEQUENCE) @GeneratedValue(strategy = GenerationType.SEQUENCE)
private Long id; private Long studentId;
@NotNull
@Column(name = "roll_no", unique = true)
private String rollNumber;
@NotNull
@Column(name = "name") @Column(name = "name")
private String name; private String name;
@NotNull
@Column(name = "age") @Column(name = "age")
private Long age; private Long age;
@JsonIgnore
@ManyToMany(fetch = FetchType.LAZY, cascade = {CascadeType.MERGE}) @ManyToMany(fetch = FetchType.LAZY, cascade = {CascadeType.MERGE})
@JoinTable( @JoinTable(
name = "studentsCourses", name = "studentsCourses",
joinColumns = {@JoinColumn(name = "student_id")}, joinColumns = {@JoinColumn(name = "student_id")},
inverseJoinColumns = {@JoinColumn(name = "course_id")} inverseJoinColumns = {@JoinColumn(name = "course_id")}
) )
@JsonIgnore
private List<Course> courseLists; private List<Course> courseLists;
@OneToOne
@MapsId
@JoinColumn(name = "student_id")
private User studentAppUser;
} }
package com.school.project.model; package com.school.project.model;
import com.school.project.model.Course;
import com.school.project.model.Department;
import com.school.project.model.userRegistration.User;
import com.sun.istack.NotNull;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor;
import org.codehaus.jackson.annotate.JsonIgnore; import org.codehaus.jackson.annotate.JsonIgnore;
import javax.persistence.*; import javax.persistence.*;
...@@ -8,31 +13,46 @@ import java.util.List; ...@@ -8,31 +13,46 @@ import java.util.List;
@Data @Data
@Entity @Entity
@NoArgsConstructor
@Table(name = "Teacher") @Table(name = "Teacher")
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 = "teacher_num")
private String teacherNumber;
@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) @OneToOne
@JoinColumn(name = "department_id") @MapsId
@JsonIgnore @JoinColumn(name = "teacher_id")
private Department department; private User teacherAppUser;
} }
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.userRegistration;
import com.sun.istack.NotNull;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.RequiredArgsConstructor;
import javax.persistence.*;
@Data
@Entity(name = "admin")
@NoArgsConstructor
public class Admin {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
@Column(name = "admin_id")
private Long adminId;
@NotNull
@Column(name = "admin_name")
private String name;
@OneToOne
@MapsId
@JoinColumn(name = "admin_id")
private User adminAppUser;
}
package com.school.project.model.userRegistration;
import com.sun.istack.NotNull;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.RequiredArgsConstructor;
import javax.persistence.*;
@Data
@Entity
@NoArgsConstructor
@AllArgsConstructor
@RequiredArgsConstructor
@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.userRegistration;
import com.school.project.model.Student;
import com.school.project.model.Teacher;
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.SEQUENCE)
@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 Student studentUser;
@OneToOne(mappedBy = "teacherAppUser", cascade = {CascadeType.MERGE})
@PrimaryKeyJoinColumn
private Teacher teacherUser;
@OneToOne(mappedBy = "adminAppUser", cascade = {CascadeType.MERGE})
@PrimaryKeyJoinColumn
private Admin adminUser;
}
package com.school.project.repository.modelRepositery;
import com.school.project.model.Course;
import org.springframework.data.jpa.repository.JpaRepository;
public interface CourseRepository extends JpaRepository<Course,Long> {
}
package com.school.project.repository; package com.school.project.repository.modelRepositery;
import com.school.project.model.Department; import com.school.project.model.Department;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
......
package com.school.project.repository; package com.school.project.repository.modelRepositery;
import com.school.project.model.Student; import com.school.project.model.Student;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface StudentRepository extends JpaRepository<Student, Long> {
public interface StudentRepository extends JpaRepository<Student,Long> {
} }
package com.school.project.repository; package com.school.project.repository.modelRepositery;
import com.school.project.model.Teacher; import com.school.project.model.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;
@Repository @Repository
public interface TeacherRepository extends JpaRepository<Teacher, Long> { public interface TeacherRepository extends JpaRepository<Teacher,Long> {
} }
package com.school.project.repository; package com.school.project.repository.userRegistration;
import com.school.project.model.Course; import com.school.project.model.userRegistration.Admin;
import lombok.RequiredArgsConstructor;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
@Repository @Repository
public interface CourseRepository extends JpaRepository<Course, Long> { public interface AdminRegRepository extends JpaRepository<Admin,Long> {
} }
package com.school.project.repository.userRegistration;
import com.school.project.model.userRegistration.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; package com.school.project.repository.userRegistration;
import com.school.project.model.User; import com.school.project.model.userRegistration.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;
...@@ -8,6 +8,5 @@ import java.util.Optional; ...@@ -8,6 +8,5 @@ import java.util.Optional;
@Repository @Repository
public interface UserRepository extends JpaRepository<User, Long> { public interface UserRepository extends JpaRepository<User, Long> {
Optional<User> findUserByEmail(String email); Optional<User> findUserByEmail(String email);
} }
package com.school.project.security; package com.school.project.security;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
...@@ -18,6 +17,7 @@ import org.springframework.security.oauth2.config.annotation.web.configurers.Aut ...@@ -18,6 +17,7 @@ import org.springframework.security.oauth2.config.annotation.web.configurers.Aut
import org.springframework.security.oauth2.config.annotation.web.configurers.ResourceServerSecurityConfigurer; import org.springframework.security.oauth2.config.annotation.web.configurers.ResourceServerSecurityConfigurer;
import org.springframework.security.oauth2.provider.token.store.InMemoryTokenStore; import org.springframework.security.oauth2.provider.token.store.InMemoryTokenStore;
@Configuration @Configuration
public class OAuth2ServerConfiguration { public class OAuth2ServerConfiguration {
...@@ -48,8 +48,8 @@ public class OAuth2ServerConfiguration { ...@@ -48,8 +48,8 @@ public class OAuth2ServerConfiguration {
.disable() .disable()
.and() .and()
.authorizeRequests() .authorizeRequests()
.antMatchers("/user/**").permitAll() .antMatchers("/register/**").permitAll()
.antMatchers("/course/**","/department/**","/student/**","/teacher/**").authenticated(); .antMatchers("/department/**","/course/**").hasAuthority("ADMIN");
} }
} }
...@@ -68,7 +68,6 @@ public class OAuth2ServerConfiguration { ...@@ -68,7 +68,6 @@ public class OAuth2ServerConfiguration {
endpoints endpoints
.authenticationManager(authenticationManager) .authenticationManager(authenticationManager)
.tokenStore(tokenStore); .tokenStore(tokenStore);
} }
......
package com.school.project.security; package com.school.project.security;
import com.school.project.service.userRegistration.UserServiceImpl;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
...@@ -7,7 +8,6 @@ import org.springframework.security.authentication.AuthenticationManager; ...@@ -7,7 +8,6 @@ import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.web.util.matcher.RequestMatcher; import org.springframework.security.web.util.matcher.RequestMatcher;
...@@ -17,7 +17,7 @@ import javax.servlet.http.HttpServletRequest; ...@@ -17,7 +17,7 @@ import javax.servlet.http.HttpServletRequest;
public class SecurityConfig extends WebSecurityConfigurerAdapter { public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired @Autowired
private UserDetailsService userService; private UserServiceImpl userService;
@Autowired @Autowired
BCryptPasswordEncoder encoder; BCryptPasswordEncoder encoder;
...@@ -36,7 +36,6 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter { ...@@ -36,7 +36,6 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter {
.httpBasic() .httpBasic()
.and() .and()
.csrf().disable().cors().disable(); .csrf().disable().cors().disable();
} }
private static class BasicRequestMatcher implements RequestMatcher { private static class BasicRequestMatcher implements RequestMatcher {
......
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.modelRepositery.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.modelRepositery.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.implementation;
import com.school.project.dto.StudentDTO;
import com.school.project.mapper.StudentMapper;
import com.school.project.repository.StudentRepository;
import com.school.project.service.interfaces.StudentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class StudentServiceImp implements StudentService {
@Autowired(required = true)
public StudentRepository studentRepository;
@Autowired
public StudentMapper studentMapper;
@Override
public StudentDTO saveStudent(StudentDTO studentDTO) {
return studentMapper.studentModelToDTO(
studentRepository.save(
studentMapper.studentDTOToModel(studentDTO)));
}
@Override
public List<StudentDTO> readAllStudents() {
return studentMapper.studentModelToDTO(studentRepository.findAll());
}
@Override
public StudentDTO readStudentById(Long id) {
return (studentMapper.studentModelToDTO(studentRepository.findById(id).get()));
}
@Override
public StudentDTO updateStudentById(StudentDTO studentDTO, Long id) {
StudentDTO dto = studentMapper.studentModelToDTO(studentRepository.findById(id).get());
if (studentDTO.getName() != null) {
dto.setName(studentDTO.getName());
}
if (studentDTO.getAge() != null) {
dto.setAge(studentDTO.getAge());
}
if (studentDTO.getCourseLists() != null) {
dto.setCourseLists(studentDTO.getCourseLists());
}
return studentMapper.studentModelToDTO(
studentRepository.save(
studentMapper.studentDTOToModel(dto)));
}
@Override
public void deleteStudentById(Long id) {
studentRepository.deleteById(id);
}
}
package com.school.project.service.implementation;
import com.school.project.dto.TeacherDTO;
import com.school.project.mapper.TeacherMapper;
import com.school.project.model.Teacher;
import com.school.project.repository.TeacherRepository;
import com.school.project.service.interfaces.TeacherService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Optional;
@Service
public class TeacherServiceImp implements TeacherService {
@Autowired(required = true)
private TeacherRepository teacherRepository;
@Autowired
private TeacherMapper teacherMapper;
@Override
public TeacherDTO saveTeacher(TeacherDTO teacherDTO) {
return teacherMapper.teacherModelToDTo(
teacherRepository.save(
teacherMapper.teacherDTOToModel(teacherDTO)));
}
@Override
public List<TeacherDTO> readAllTeachers() {
return teacherMapper.teacherModelToDTo(teacherRepository.findAll());
}
@Override
public TeacherDTO readTeacherById(Long id) {
return teacherMapper.teacherModelToDTo(teacherRepository.findById(id).get());
}
@Override
public TeacherDTO updateTeacher(TeacherDTO teacherDTO, Long id) {
TeacherDTO dto = readTeacherById(id);
if (teacherDTO.getName() != null) {
dto.setName(teacherDTO.getName());
}
if (teacherDTO.getDegree() != null) {
dto.setDegree(teacherDTO.getDegree());
}
if (teacherDTO.getCourseList() != null) {
dto.setCourseList(teacherDTO.getCourseList());
}
if (teacherDTO.getDepartment() != null) {
dto.setDepartment(teacherDTO.getDepartment());
}
return saveTeacher(dto);
}
@Override
public void deleteTeacherById(Long id) {
teacherRepository.deleteById(id);
}
}
package com.school.project.service.interfaces;
import com.school.project.dto.StudentDTO;
import com.school.project.model.Student;
import java.util.List;
public interface StudentService {
public StudentDTO saveStudent(StudentDTO studentDTO);
public List<StudentDTO> readAllStudents();
public StudentDTO readStudentById(Long id);
public StudentDTO updateStudentById(StudentDTO studentDTO, Long id);
public void deleteStudentById(Long id);
}
package com.school.project.service.interfaces;
import com.school.project.dto.TeacherDTO;
import com.school.project.model.Teacher;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Optional;
@Service
public interface TeacherService {
public TeacherDTO saveTeacher(TeacherDTO teacherDTO);
public List<TeacherDTO> readAllTeachers();
public TeacherDTO readTeacherById(Long id);
public TeacherDTO updateTeacher(TeacherDTO teacherDTO, Long id);
public void deleteTeacherById(Long id);
}
package com.school.project.service.interfaces;
import com.school.project.model.User;
import javax.persistence.criteria.CriteriaBuilder;
public interface UserService {
public Integer saveUser(User user);
}
package com.school.project.service.implementation; package com.school.project.service.userRegistration;
import com.school.project.model.User; import com.school.project.model.userRegistration.Role;
import com.school.project.repository.UserRepository; import com.school.project.model.userRegistration.User;
import com.school.project.service.interfaces.UserService; import com.school.project.repository.userRegistration.UserRepository;
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.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.HashSet; import java.util.HashSet;
import java.util.List;
import java.util.Optional; import java.util.Optional;
import java.util.Set; import java.util.Set;
@Service @Service
public class UserServiceImpl implements UserService, UserDetailsService { public class UserServiceImpl implements UserDetailsService {
@Autowired @Autowired
private UserRepository userRepository; 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 @Override
public UserDetails loadUserByUsername(String email) throws UsernameNotFoundException { public UserDetails loadUserByUsername(String email) throws UsernameNotFoundException {
...@@ -48,22 +29,20 @@ public class UserServiceImpl implements UserService, UserDetailsService { ...@@ -48,22 +29,20 @@ public class UserServiceImpl implements UserService, UserDetailsService {
org.springframework.security.core.userdetails.User springUser = null; org.springframework.security.core.userdetails.User springUser = null;
if (userEmail.isEmpty()) { if (userEmail.isEmpty()) {
throw new UsernameNotFoundException("User With Email=" + email + "Not Founnd"); throw new UsernameNotFoundException("User Not Found");
} else { } else {
User user = userEmail.get(); User userByEmail = userEmail.get();
Role userByRoles = userByEmail.getRole();
List<String> userRoles = user.getRoles(); String userSpecifiedRoles = userByRoles.getRole();
Set<GrantedAuthority> userAuthorities = new HashSet<>(); Set<GrantedAuthority> userAuthorities = new HashSet<>();
for (String userRole : userRoles) { userAuthorities.add(new SimpleGrantedAuthority(userSpecifiedRoles));
userAuthorities.add(new SimpleGrantedAuthority(userRole));
}
springUser = new org.springframework.security.core.userdetails.User( springUser = new org.springframework.security.core.userdetails.User(
email, email,
user.getPassword(), userByEmail.getPassword(),
userAuthorities); userAuthorities);
} }
......
package com.school.project.service.userRegistration.admin;
import com.school.project.dto.userRegistration.AdminRegistrationDTO;
import com.school.project.dto.userRegistration.UserDTO;
import org.springframework.stereotype.Service;
@Service
public interface AdminRegistrationService {
public UserDTO registerAdmin(AdminRegistrationDTO admin);
}
package com.school.project.service.userRegistration.admin;
import com.school.project.dto.userRegistration.AdminRegistrationDTO;
import com.school.project.dto.userRegistration.UserDTO;
import com.school.project.model.userRegistration.Admin;
import com.school.project.model.userRegistration.Role;
import com.school.project.model.userRegistration.User;
import com.school.project.repository.userRegistration.AdminRegRepository;
import com.school.project.repository.userRegistration.RoleRepository;
import com.school.project.repository.userRegistration.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service;
@Service
public class AdminRegistrationServiceImpl implements AdminRegistrationService {
@Autowired
private AdminRegRepository adminRegRepository;
@Autowired
private UserRepository userRepository;
@Autowired
private RoleRepository roleRepository;
@Autowired
private PasswordEncoder passwordEncoder;
public UserDTO registerAdmin(AdminRegistrationDTO admin) {
User newUser = new User();
newUser.setEmail(admin.getEmail());
newUser.setPassword(passwordEncoder.encode(admin.getPassword()));
newUser.setRole(roleRepository.findByRole(Role.ROLES.ADMIN.name()));
newUser = userRepository.save(newUser);
Admin newAdmin = new Admin();
newAdmin.setName(admin.getName());
newAdmin.setAdminAppUser(newUser);
return new UserDTO(newUser.getUserId(), newUser.getEmail());
}
}
package com.school.project.service.userRegistration.student;
import com.school.project.dto.userRegistration.StudentRegistrationDTO;
import com.school.project.dto.userRegistration.UserDTO;
public interface StudentRegistrationService {
public UserDTO registerStudent(StudentRegistrationDTO studentRegistrationDTO);
}
package com.school.project.service.userRegistration.student;
import com.school.project.dto.userRegistration.StudentRegistrationDTO;
import com.school.project.dto.userRegistration.UserDTO;
import com.school.project.model.userRegistration.Role;
import com.school.project.model.Student;
import com.school.project.model.userRegistration.User;
import com.school.project.repository.userRegistration.RoleRepository;
import com.school.project.repository.modelRepositery.StudentRepository;
import com.school.project.repository.userRegistration.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service;
import javax.transaction.Transactional;
@Service
public class StudentRegistrationServiceImpl implements StudentRegistrationService {
@Autowired
private StudentRepository studentRepository;
@Autowired
private UserRepository userRepository;
@Autowired
private RoleRepository roleRepository;
@Autowired
private PasswordEncoder passwordEncoder;
@Override
@Transactional
public UserDTO registerStudent(StudentRegistrationDTO studentRegistrationDTO) {
//Creating New User
User newUser = new User();
newUser.setEmail(studentRegistrationDTO.getEmail());
newUser.setRole(roleRepository.findByRole(Role.ROLES.STUDENT.name()));
newUser.setPassword(passwordEncoder.encode(studentRegistrationDTO.getPassword()));
newUser = userRepository.save(newUser);
//Creating New Student
Student newStudent = new Student();
newStudent.setName(studentRegistrationDTO.getName());
newStudent.setAge(studentRegistrationDTO.getAge());
newStudent.setStudentAppUser(newUser);
newStudent.setRollNumber(studentRegistrationDTO.getRollNumber());
studentRepository.save(newStudent);
return new UserDTO(newUser.getUserId(), newUser.getEmail());
}
}
package com.school.project.service.userRegistration.teacher;
import com.school.project.dto.userRegistration.TeacherRegistrationDTO;
import com.school.project.dto.userRegistration.UserDTO;
public interface TeacherRegistrationService {
public UserDTO registerTeacher(TeacherRegistrationDTO teacherRegistrationDTO);
}
package com.school.project.service.userRegistration.teacher;
import com.school.project.dto.userRegistration.TeacherRegistrationDTO;
import com.school.project.dto.userRegistration.UserDTO;
import com.school.project.model.userRegistration.Role;
import com.school.project.model.Teacher;
import com.school.project.model.userRegistration.User;
import com.school.project.repository.userRegistration.RoleRepository;
import com.school.project.repository.modelRepositery.TeacherRepository;
import com.school.project.repository.userRegistration.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service;
import javax.transaction.Transactional;
@Service
public class TeacherRegistrationServiceImpl implements TeacherRegistrationService {
@Autowired
private TeacherRepository teacherRepository;
@Autowired
private UserRepository userRepository;
@Autowired
private RoleRepository roleRepository;
@Autowired
private PasswordEncoder passwordEncoder;
@Override
@Transactional
public UserDTO registerTeacher(TeacherRegistrationDTO teacherRegistrationDTO) {
User newUser = new User();
newUser.setEmail(teacherRegistrationDTO.getEmail());
newUser.setRole(roleRepository.findByRole(Role.ROLES.TEACHER.name()));
newUser.setPassword(passwordEncoder.encode(teacherRegistrationDTO.getPassword()));
newUser = userRepository.save(newUser);
Teacher newTeacher = new Teacher();
newTeacher.setName(teacherRegistrationDTO.getName());
newTeacher.setDegree(teacherRegistrationDTO.getDegree());
newTeacher.setTeacherNumber(teacherRegistrationDTO.getTeacherNumber());
newTeacher.setTeacherAppUser(newUser);
teacherRepository.save(newTeacher);
return new UserDTO(newTeacher.getTeacherId(), newUser.getEmail());
}
}
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
#spring.jpa.hibernate.ddl-auto=update
#spring.datasource.url=jdbc:mysql://localhost:3306/schooldataBase
#spring.datasource.username=root
#spring.datasource.password=root
spring.security.user.name= sulemantalpur6@gmail.com 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
spring.datasource.data=data.sql
\ No newline at end of file
INSERT INTO role VALUES (1, 'ADMIN');
INSERT INTO role VALUES (2, 'STUDENT');
INSERT INTO role VALUES (3, 'TEACHER');
\ 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