Commit a783d72b authored by Muhammad Suleman's avatar Muhammad Suleman

Added Registration Service

parent 314744c1
package com.school.project.controller.registration; package com.school.project.controller.userRegistration;
import com.school.project.dto.registrationDTO.StudentRegistrationDTO; import com.school.project.dto.userRegistration.AdminRegistrationDTO;
import com.school.project.dto.registrationDTO.TeacherRegistrationDTO; import com.school.project.dto.userRegistration.StudentRegistrationDTO;
import com.school.project.dto.registrationDTO.UserDTO; import com.school.project.dto.userRegistration.TeacherRegistrationDTO;
import com.school.project.model.registration.Teacher; 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.student.StudentRegistrationService;
import com.school.project.service.userRegistration.teacher.TeacherRegistrationService; import com.school.project.service.userRegistration.teacher.TeacherRegistrationService;
import lombok.AllArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
...@@ -26,6 +28,9 @@ public class RegistrationController { ...@@ -26,6 +28,9 @@ public class RegistrationController {
@Autowired @Autowired
private TeacherRegistrationService teacherRegistrationService; private TeacherRegistrationService teacherRegistrationService;
@Autowired
private AdminRegistrationService adminRegistrationService;
@PostMapping("/student") @PostMapping("/student")
public ResponseEntity<UserDTO> registerStudent(@RequestBody StudentRegistrationDTO student) { public ResponseEntity<UserDTO> registerStudent(@RequestBody StudentRegistrationDTO student) {
try { try {
...@@ -45,4 +50,14 @@ public class RegistrationController { ...@@ -45,4 +50,14 @@ public class RegistrationController {
throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "Data is not correct", 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.modelDTO; package com.school.project.dto.modelDTO;
import com.school.project.model.registration.Student; import com.school.project.model.userRegistration.Student;
import com.school.project.model.registration.Teacher; import com.school.project.model.userRegistration.Teacher;
import lombok.Data; import lombok.Data;
import java.util.List; import java.util.List;
......
package com.school.project.dto.userRegistration;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.RequiredArgsConstructor;
@Data
@AllArgsConstructor
@RequiredArgsConstructor
public class AdminRegistrationDTO {
private String email;
private String password;
private String name;
}
package com.school.project.dto.registrationDTO; package com.school.project.dto.userRegistration;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Builder; import lombok.Builder;
......
package com.school.project.dto.registrationDTO; package com.school.project.dto.userRegistration;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
......
package com.school.project.dto.registrationDTO; package com.school.project.dto.userRegistration;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import java.util.List;
@Data @Data
@AllArgsConstructor @AllArgsConstructor
public class UserDTO { public class UserDTO {
......
package com.school.project.model.school; package com.school.project.model.school;
import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnore;
import com.school.project.model.registration.Student; import com.school.project.model.userRegistration.Student;
import com.school.project.model.registration.Teacher; import com.school.project.model.userRegistration.Teacher;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
......
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.registration; package com.school.project.model.userRegistration;
import com.sun.istack.NotNull; import com.sun.istack.NotNull;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
...@@ -6,7 +6,6 @@ import lombok.Data; ...@@ -6,7 +6,6 @@ import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import javax.persistence.*; import javax.persistence.*;
@Data @Data
...@@ -31,5 +30,5 @@ public class Role { ...@@ -31,5 +30,5 @@ public class Role {
@NotNull @NotNull
@Column(name = "role_type", unique = true) @Column(name = "role_type", unique = true)
private String role; private String role;
} }
package com.school.project.model.registration; package com.school.project.model.userRegistration;
import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnore;
import com.school.project.model.school.Course; import com.school.project.model.school.Course;
...@@ -21,7 +21,7 @@ public class Student { ...@@ -21,7 +21,7 @@ public class Student {
private Long studentId; private Long studentId;
@NotNull @NotNull
@Column(name = "roll_no",unique = true) @Column(name = "roll_no", unique = true)
private String rollNumber; private String rollNumber;
@NotNull @NotNull
......
package com.school.project.model.registration; package com.school.project.model.userRegistration;
import com.school.project.model.school.Course; import com.school.project.model.school.Course;
import com.school.project.model.school.Department; import com.school.project.model.school.Department;
......
package com.school.project.model.registration; package com.school.project.model.userRegistration;
import com.sun.istack.NotNull; import com.sun.istack.NotNull;
...@@ -39,5 +39,8 @@ public class User { ...@@ -39,5 +39,8 @@ public class User {
@PrimaryKeyJoinColumn @PrimaryKeyJoinColumn
private Teacher teacherUser; private Teacher teacherUser;
@OneToOne(mappedBy = "adminAppUser", cascade = {CascadeType.MERGE})
@PrimaryKeyJoinColumn
private Admin adminUser;
} }
package com.school.project.repository.userRegistration;
import com.school.project.model.userRegistration.Admin;
import lombok.RequiredArgsConstructor;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface AdminRegRepository extends JpaRepository<Admin,Long> {
}
package com.school.project.repository.registrationRepositery; package com.school.project.repository.userRegistration;
import com.school.project.model.registration.Role; import com.school.project.model.userRegistration.Role;
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.registrationRepositery; package com.school.project.repository.userRegistration;
import com.school.project.model.registration.Student; import com.school.project.model.userRegistration.Student;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
public interface StudentRegRepository extends JpaRepository<Student,Long> { public interface StudentRegRepository extends JpaRepository<Student,Long> {
......
package com.school.project.repository.registrationRepositery; package com.school.project.repository.userRegistration;
import com.school.project.model.registration.Teacher; import com.school.project.model.userRegistration.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.registrationRepositery; package com.school.project.repository.userRegistration;
import com.school.project.model.registration.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;
......
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,7 +17,6 @@ import org.springframework.security.oauth2.config.annotation.web.configurers.Aut ...@@ -18,7 +17,6 @@ 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;
import static com.school.project.model.registration.Role.ROLES.STUDENT;
@Configuration @Configuration
public class OAuth2ServerConfiguration { public class OAuth2ServerConfiguration {
...@@ -50,9 +48,8 @@ public class OAuth2ServerConfiguration { ...@@ -50,9 +48,8 @@ public class OAuth2ServerConfiguration {
.disable() .disable()
.and() .and()
.authorizeRequests() .authorizeRequests()
.antMatchers("/user/**").permitAll() .antMatchers("/register/**").permitAll()
.antMatchers("/department/**").hasAuthority("STUDENT") .antMatchers("/department/**","/course/**").hasAuthority("ADMIN");
.antMatchers("/course/**", "/student/**", "/teacher/**").hasAuthority("TEACHER");
} }
} }
...@@ -71,7 +68,6 @@ public class OAuth2ServerConfiguration { ...@@ -71,7 +68,6 @@ public class OAuth2ServerConfiguration {
endpoints endpoints
.authenticationManager(authenticationManager) .authenticationManager(authenticationManager)
.tokenStore(tokenStore); .tokenStore(tokenStore);
} }
......
...@@ -8,7 +8,6 @@ import org.springframework.security.authentication.AuthenticationManager; ...@@ -8,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;
...@@ -37,7 +36,6 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter { ...@@ -37,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.userRegistration; package com.school.project.service.userRegistration;
import com.school.project.model.registration.Role; import com.school.project.model.userRegistration.Role;
import com.school.project.model.registration.User; import com.school.project.model.userRegistration.User;
import com.school.project.repository.registrationRepositery.UserRepository; 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;
......
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; package com.school.project.service.userRegistration.student;
import com.school.project.dto.registrationDTO.StudentRegistrationDTO; import com.school.project.dto.userRegistration.StudentRegistrationDTO;
import com.school.project.dto.registrationDTO.UserDTO; import com.school.project.dto.userRegistration.UserDTO;
public interface StudentRegistrationService { public interface StudentRegistrationService {
......
package com.school.project.service.userRegistration.student; package com.school.project.service.userRegistration.student;
import com.school.project.dto.registrationDTO.StudentRegistrationDTO; import com.school.project.dto.userRegistration.StudentRegistrationDTO;
import com.school.project.dto.registrationDTO.UserDTO; import com.school.project.dto.userRegistration.UserDTO;
import com.school.project.model.registration.Role; import com.school.project.model.userRegistration.Role;
import com.school.project.model.registration.Student; import com.school.project.model.userRegistration.Student;
import com.school.project.model.registration.User; import com.school.project.model.userRegistration.User;
import com.school.project.repository.registrationRepositery.RoleRepository; import com.school.project.repository.userRegistration.RoleRepository;
import com.school.project.repository.registrationRepositery.StudentRegRepository; import com.school.project.repository.userRegistration.StudentRegRepository;
import com.school.project.repository.registrationRepositery.UserRepository; 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.crypto.password.PasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -49,7 +49,7 @@ public class StudentRegistrationServiceImpl implements StudentRegistrationServic ...@@ -49,7 +49,7 @@ public class StudentRegistrationServiceImpl implements StudentRegistrationServic
newStudent.setName(studentRegistrationDTO.getName()); newStudent.setName(studentRegistrationDTO.getName());
newStudent.setAge(studentRegistrationDTO.getAge()); newStudent.setAge(studentRegistrationDTO.getAge());
newStudent.setStudentAppUser(newUser); newStudent.setStudentAppUser(newUser);
newStudent.setRollNumber(UUID.randomUUID().toString()); newStudent.setRollNumber(studentRegistrationDTO.getRollNumber());
studentRegRepository.save(newStudent); studentRegRepository.save(newStudent);
......
package com.school.project.service.userRegistration.teacher; package com.school.project.service.userRegistration.teacher;
import com.school.project.dto.registrationDTO.TeacherRegistrationDTO; import com.school.project.dto.userRegistration.TeacherRegistrationDTO;
import com.school.project.dto.registrationDTO.UserDTO; import com.school.project.dto.userRegistration.UserDTO;
public interface TeacherRegistrationService { public interface TeacherRegistrationService {
public UserDTO registerTeacher(TeacherRegistrationDTO teacherRegistrationDTO); public UserDTO registerTeacher(TeacherRegistrationDTO teacherRegistrationDTO);
......
package com.school.project.service.userRegistration.teacher; package com.school.project.service.userRegistration.teacher;
import com.school.project.dto.registrationDTO.TeacherRegistrationDTO; import com.school.project.dto.userRegistration.TeacherRegistrationDTO;
import com.school.project.dto.registrationDTO.UserDTO; import com.school.project.dto.userRegistration.UserDTO;
import com.school.project.model.registration.Role; import com.school.project.model.userRegistration.Role;
import com.school.project.model.registration.Teacher; import com.school.project.model.userRegistration.Teacher;
import com.school.project.model.registration.User; import com.school.project.model.userRegistration.User;
import com.school.project.repository.registrationRepositery.RoleRepository; import com.school.project.repository.userRegistration.RoleRepository;
import com.school.project.repository.registrationRepositery.TeacherRegRepository; import com.school.project.repository.userRegistration.TeacherRegRepository;
import com.school.project.repository.registrationRepositery.UserRepository; 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.crypto.password.PasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
......
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