Commit fc4efb2b authored by Muhammad Suleman's avatar Muhammad Suleman

Initial Commit

parent 98075e37
<?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"
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>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.0</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.school</groupId>
<artifactId>school</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>school</name>
<description>Spring Project for School</description>
<properties>
<java.version>17</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
<version>1.4.2.Final</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mindrot</groupId>
<artifactId>jbcrypt</artifactId>
<version>0.3m</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-core</artifactId>
<version>5.7.1</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
<version>5.7.1</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
</dependency>
<dependency>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-core</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.1</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-jwt</artifactId>
<version>1.1.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.security.oauth</groupId>
<artifactId>spring-security-oauth2</artifactId>
<version>2.0.14.RELEASE</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
<configuration>
<source>11</source>
<target>11</target>
<annotationProcessorPaths>
<path>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>1.4.2.Final</version>
</path>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.24</version>
</path>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok-mapstruct-binding</artifactId>
<version>0.2.0</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
</plugins>
</build>
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>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.0</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.school</groupId>
<artifactId>school</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>school</name>
<description>Spring Project for School</description>
<properties>
<java.version>17</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
<version>1.4.2.Final</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mindrot</groupId>
<artifactId>jbcrypt</artifactId>
<version>0.3m</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-core</artifactId>
<version>5.7.1</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
<version>5.7.1</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
</dependency>
<dependency>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-core</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.1</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-jwt</artifactId>
<version>1.1.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.security.oauth</groupId>
<artifactId>spring-security-oauth2</artifactId>
<version>2.0.14.RELEASE</version>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-all</artifactId>
<version>1.9.5</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
<configuration>
<source>11</source>
<target>11</target>
<annotationProcessorPaths>
<path>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>1.4.2.Final</version>
</path>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.24</version>
</path>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok-mapstruct-binding</artifactId>
<version>0.2.0</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
</plugins>
</build>
</project>
package com.school.project.controller;
import com.school.project.dto.CourseDTO;
import com.school.project.mapper.CourseMapper;
import com.school.project.model.Course;
import com.school.project.service.implementation.CourseServiceImp;
import com.school.project.service.interfaces.CourseService;
import com.school.project.service.course.CourseServiceImp;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.http.HttpStatus;
......@@ -12,10 +9,8 @@ import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import java.sql.SQLIntegrityConstraintViolationException;
import java.util.List;
import java.util.NoSuchElementException;
import java.util.Optional;
@Controller
@RequestMapping("/course")
......
package com.school.project.controller;
import com.school.project.dto.CourseDTO;
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.dao.EmptyResultDataAccessException;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.server.ResponseStatusException;
import java.sql.SQLIntegrityConstraintViolationException;
import java.util.List;
import java.util.NoSuchElementException;
import java.util.Optional;
......@@ -20,7 +19,7 @@ public class DepartmentController {
@Autowired(required = true)
public DepartmentServiceImp departmentServiceImp;
@GetMapping("/findAll")
@GetMapping("")
public ResponseEntity<List<DepartmentDTO>> readAllDepartments() {
List<DepartmentDTO> departmentDTO = departmentServiceImp.readDepartment();
......@@ -31,21 +30,16 @@ public class DepartmentController {
}
}
@GetMapping("/find/{id}")
public ResponseEntity<DepartmentDTO> readDepartmentById(@PathVariable("id") Long id) {
@GetMapping("/findId/{id}")
public DepartmentDTO readDepartmentById(@PathVariable("id") Long id) {
try {
DepartmentDTO departmentDTO = departmentServiceImp.readDepartmentById(id);
return ResponseEntity.of(Optional.of(departmentDTO));
} catch (NoSuchElementException e) {
return ResponseEntity.status(HttpStatus.NOT_FOUND).build();
return departmentServiceImp.readDepartmentById(id);
} catch (NoSuchElementException ex) {
throw new ResponseStatusException(HttpStatus.NOT_FOUND, "Department Not Found With This Id", ex);
}
}
@GetMapping("/find/{name}")
@GetMapping("/findName/{name}")
public ResponseEntity<DepartmentDTO> findDepartmentByName(@PathVariable("name") String 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 com.school.project.service.student.StudentServiceImp;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.http.HttpStatus;
......@@ -13,7 +10,6 @@ import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.NoSuchElementException;
import java.util.Optional;
@RestController
@RequestMapping("/student")
......@@ -21,6 +17,8 @@ public class StudentController {
@Autowired(required = true)
public StudentServiceImp studentServiceImp;
@PostMapping("/save")
public ResponseEntity<StudentDTO> saveStudent(@RequestBody StudentDTO studentDTO) {
......
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 com.school.project.service.teacher.TeacherServiceImp;
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")
@ComponentScan(basePackages = "com.school.project.service.teacher.TeacherService")
@RequestMapping("/teacher")
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.mapper.UserMapper;
import com.school.project.service.implementation.UserServiceImpl;
import com.school.project.service.userRegistration.StudentRegistrationService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
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;
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired(required = true)
UserServiceImpl userService;
@RequestMapping("/register")
public class StudentRegistrationController {
@Autowired(required = true)
UserMapper userMapper;
@Autowired
private StudentRegistrationService studentRegistrationService;
@PostMapping("/save")
public String saveUser(@ModelAttribute UserDTO userDTO) {
@PostMapping("/student")
public ResponseEntity<UserDTO> registerStudent(@RequestBody StudentRegistrationDTO student) {
Integer id = userService.saveUser(userMapper.userDtoToUser(userDTO));
String message = "User '" + id + "' saved successfully !";
return message;
UserDTO userDTO = studentRegistrationService.registerStudent(student);
return ResponseEntity.ok(userDTO);
}
}
package com.school.project.dto;
import com.school.project.model.Student;
import com.school.project.model.Teacher;
import com.school.project.model.registration.StudentReg;
import com.school.project.model.registration.Teacher;
import lombok.Data;
import java.util.List;
......@@ -13,7 +13,7 @@ public class CourseDTO {
private String title;
List<Student> studentList;
List<StudentReg> studentList;
private List<Teacher> teacherList;
......
package com.school.project.dto;
import com.school.project.model.Teacher;
import lombok.Data;
import java.util.List;
@Data
public class DepartmentDTO {
......
package com.school.project.dto;
import com.school.project.model.Course;
import com.school.project.model.school.Course;
import lombok.Data;
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;
import com.school.project.model.Course;
import com.school.project.model.Department;
import com.school.project.model.school.Course;
import com.school.project.model.school.Department;
import lombok.Data;
import java.util.List;
......
package com.school.project.dto;
import lombok.AllArgsConstructor;
import lombok.Data;
import java.util.List;
@Data
@AllArgsConstructor
public class UserDTO {
private Long id;
private String name;
private String password;
private Long userId;
private String email;
private List<String> roles;
}
......@@ -2,7 +2,7 @@ package com.school.project.mapper;
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.factory.Mappers;
......
package com.school.project.mapper;
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.factory.Mappers;
import java.util.List;
import java.util.Optional;
@Mapper(componentModel = "spring")
public interface DepartmentMapper {
......
package com.school.project.mapper;
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.factory.Mappers;
import java.util.List;
import java.util.Optional;
@Mapper(componentModel = "spring")
public interface StudentMapper {
......
package com.school.project.mapper;
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.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.school.project.model.school.Course;
import lombok.Data;
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 org.codehaus.jackson.annotate.JsonIgnore;
......@@ -12,27 +15,32 @@ import java.util.List;
public class Teacher {
@Id
@Column(name = "teacher_id")
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private Long teacherId;
@NotNull
@Column(name = "name")
private String name;
@NotNull
@Column(name = "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})
@JoinTable(
name = "teachersCourses",
joinColumns = {@JoinColumn(name = "teacher_id")},
inverseJoinColumns = {@JoinColumn(name = "course_id")}
)
@JsonIgnore
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.school.project.model.registration.StudentReg;
import com.school.project.model.registration.Teacher;
import lombok.AllArgsConstructor;
import lombok.Data;
import javax.persistence.*;
......@@ -8,6 +11,7 @@ import java.util.List;
@Data
@Entity()
@AllArgsConstructor()
@Table(name = "Course")
public class Course {
......@@ -20,7 +24,7 @@ public class Course {
@ManyToMany(fetch = FetchType.LAZY, mappedBy = "courseLists")
@JsonIgnore
private List<Student> studentList;
private List<StudentReg> studentList;
@ManyToMany(fetch = FetchType.LAZY, mappedBy = "courseList")
@JsonIgnore
......
package com.school.project.model;
package com.school.project.model.school;
import lombok.Data;
......
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.stereotype.Repository;
@Repository
public interface CourseRepository extends JpaRepository<Course, Long> {
public interface CourseRepository extends JpaRepository<Course,Long> {
}
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.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;
import com.school.project.model.Student;
import com.school.project.model.registration.Student;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.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.stereotype.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.stereotype.Repository;
......
......@@ -49,6 +49,7 @@ public class OAuth2ServerConfiguration {
.and()
.authorizeRequests()
.antMatchers("/user/**").permitAll()
.antMatchers("/registerCourse").hasRole("teacher")
.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.model.Course;
import java.util.List;
import java.util.Optional;
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.mapper.CourseMapper;
import com.school.project.model.Course;
import com.school.project.repository.CourseRepository;
import com.school.project.service.interfaces.CourseService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.transaction.Transactional;
import java.util.List;
import java.util.Optional;
@Service
public class CourseServiceImp implements CourseService {
......
package com.school.project.service.interfaces;
package com.school.project.service.department;
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.mapper.DepartmentMapper;
import com.school.project.repository.DepartmentRepository;
import com.school.project.service.interfaces.DepartmentService;
import org.springframework.beans.factory.annotation.Autowired;
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.model.Student;
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.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;
......
package com.school.project.service.interfaces;
package com.school.project.service.teacher;
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 {
......
package com.school.project.service.implementation;
package com.school.project.service.teacher;
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 {
......
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 javax.persistence.criteria.CriteriaBuilder;
import com.school.project.model.registration.User;
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.service.interfaces.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
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;
......@@ -21,52 +19,61 @@ import java.util.Set;
@Service
public class UserServiceImpl implements UserService, UserDetailsService {
@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());
return null;
}
@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;
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
return null;
}
//
// @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.datasource.url=jdbc:mysql://localhost:3306/schoolDataBase
spring.datasource.url=jdbc:mysql://localhost:3306/school-portal
spring.datasource.username=root
spring.datasource.password=charlie123
......@@ -13,4 +13,6 @@ spring.security.user.name= sulemantalpur6@gmail.com
spring.security.user.password=charlie
spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.security.SecurityAutoConfiguration
spring.mvc.view.prefix=/static
\ No newline at end of file
spring.mvc.view.prefix=/static
server.error.include-message=always
\ No newline at end of file
package com.school.project;
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;
@SpringBootTest
@SpringBootApplication(exclude={DataSourceAutoConfiguration.class})
class SchoolApplicationTests {
@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