Merge pull request 'Implements the RegNo feature' (#158) from Leo/masterRegNo into master
Reviewed-on: PGL/Clyde#158 Reviewed-by: Maxime <231026@umons.ac.be> Reviewed-by: Debucquoy Anthony <d.tonitch@gmail.com>
This commit is contained in:
		@ -23,7 +23,7 @@ import java.util.Date;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
public class MockController {
 | 
					public class MockController {
 | 
				
			||||||
    private final BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
 | 
					    private final BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
 | 
				
			||||||
 | 
					    public final UserService userService;
 | 
				
			||||||
    public final UserRepository userRepo;
 | 
					    public final UserRepository userRepo;
 | 
				
			||||||
    public final TokenRepository tokenRepo;
 | 
					    public final TokenRepository tokenRepo;
 | 
				
			||||||
    public final TokenService tokenService;
 | 
					    public final TokenService tokenService;
 | 
				
			||||||
@ -40,7 +40,8 @@ public class MockController {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    public final ScholarshipRequestRepository scholarshipRequestRepository;
 | 
					    public final ScholarshipRequestRepository scholarshipRequestRepository;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public MockController(UserRepository userRepo, TokenRepository tokenRepo, TokenService tokenService, CurriculumCourseService CurriculumCourseService, CurriculumService curriculumService, CourseService courseService, ExternalCurriculumRepository externalCurriculumRepository, InscriptionService inscriptionService, UserCurriculumRepository ucr, MinervalRepository minervalRepository, ScholarshipRequestRepository scholarshipRequestRepository){
 | 
					    public MockController(UserService userService, UserRepository userRepo, TokenRepository tokenRepo, TokenService tokenService, CurriculumCourseService CurriculumCourseService, CurriculumService curriculumService, CourseService courseService, ExternalCurriculumRepository externalCurriculumRepository, InscriptionService inscriptionService, UserCurriculumRepository ucr, MinervalRepository minervalRepository, ScholarshipRequestRepository scholarshipRequestRepository){
 | 
				
			||||||
 | 
					        this.userService = userService;
 | 
				
			||||||
        this.tokenRepo = tokenRepo;
 | 
					        this.tokenRepo = tokenRepo;
 | 
				
			||||||
        this.userRepo = userRepo;
 | 
					        this.userRepo = userRepo;
 | 
				
			||||||
        this.tokenService = tokenService;
 | 
					        this.tokenService = tokenService;
 | 
				
			||||||
@ -73,7 +74,7 @@ public class MockController {
 | 
				
			|||||||
        User popo = new User("Smith", "Paul", "paulsmith@gmail.com", "306 rue du poulet", "belgique", new Date(0), null, Role.Student, passwordEncoder.encode("jesuispaulleroi"));
 | 
					        User popo = new User("Smith", "Paul", "paulsmith@gmail.com", "306 rue du poulet", "belgique", new Date(0), null, Role.Student, passwordEncoder.encode("jesuispaulleroi"));
 | 
				
			||||||
        mockUsers = new ArrayList<>(Arrays.asList(herobrine,joe,meh,joke,lena,jojo, popo));
 | 
					        mockUsers = new ArrayList<>(Arrays.asList(herobrine,joe,meh,joke,lena,jojo, popo));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        userRepo.saveAll(mockUsers);
 | 
					        userService.saveAll(mockUsers);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        Minerval minerval = new Minerval(joe.getRegNo(), 0, 852, 2023);
 | 
					        Minerval minerval = new Minerval(joe.getRegNo(), 0, 852, 2023);
 | 
				
			||||||
        minervalRepository.save(minerval);
 | 
					        minervalRepository.save(minerval);
 | 
				
			||||||
 | 
				
			|||||||
@ -6,6 +6,7 @@ import ovh.herisson.Clyde.Repositories.*;
 | 
				
			|||||||
import ovh.herisson.Clyde.Repositories.Inscription.ExternalCurriculumRepository;
 | 
					import ovh.herisson.Clyde.Repositories.Inscription.ExternalCurriculumRepository;
 | 
				
			||||||
import ovh.herisson.Clyde.Repositories.Inscription.InscriptionRepository;
 | 
					import ovh.herisson.Clyde.Repositories.Inscription.InscriptionRepository;
 | 
				
			||||||
import ovh.herisson.Clyde.Repositories.Inscription.MinervalRepository;
 | 
					import ovh.herisson.Clyde.Repositories.Inscription.MinervalRepository;
 | 
				
			||||||
 | 
					import ovh.herisson.Clyde.Services.UserService;
 | 
				
			||||||
import ovh.herisson.Clyde.Tables.*;
 | 
					import ovh.herisson.Clyde.Tables.*;
 | 
				
			||||||
import ovh.herisson.Clyde.Tables.Inscription.ExternalCurriculum;
 | 
					import ovh.herisson.Clyde.Tables.Inscription.ExternalCurriculum;
 | 
				
			||||||
import ovh.herisson.Clyde.Tables.Inscription.InscriptionRequest;
 | 
					import ovh.herisson.Clyde.Tables.Inscription.InscriptionRequest;
 | 
				
			||||||
@ -27,14 +28,15 @@ public class InscriptionService {
 | 
				
			|||||||
    private final MinervalRepository minervalRepository;
 | 
					    private final MinervalRepository minervalRepository;
 | 
				
			||||||
    private final BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
 | 
					    private final BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
 | 
				
			||||||
    private final ExternalCurriculumRepository externalCurriculumRepository;
 | 
					    private final ExternalCurriculumRepository externalCurriculumRepository;
 | 
				
			||||||
 | 
					    private final UserService userService;
 | 
				
			||||||
    public InscriptionService(InscriptionRepository inscriptionRepo, UserRepository userRepo, UserCurriculumRepository userCurriculumRepo, CurriculumRepository curriculumRepo, MinervalRepository minervalRepository, ExternalCurriculumRepository externalCurriculumRepository){
 | 
					    public InscriptionService(InscriptionRepository inscriptionRepo, UserRepository userRepo, UserCurriculumRepository userCurriculumRepo, CurriculumRepository curriculumRepo, MinervalRepository minervalRepository, ExternalCurriculumRepository externalCurriculumRepository, UserService userService){
 | 
				
			||||||
        this.inscriptionRepo = inscriptionRepo;
 | 
					        this.inscriptionRepo = inscriptionRepo;
 | 
				
			||||||
        this.userRepo = userRepo;
 | 
					        this.userRepo = userRepo;
 | 
				
			||||||
        this.userCurriculumRepo = userCurriculumRepo;
 | 
					        this.userCurriculumRepo = userCurriculumRepo;
 | 
				
			||||||
        this.curriculumRepo = curriculumRepo;
 | 
					        this.curriculumRepo = curriculumRepo;
 | 
				
			||||||
        this.minervalRepository = minervalRepository;
 | 
					        this.minervalRepository = minervalRepository;
 | 
				
			||||||
        this.externalCurriculumRepository = externalCurriculumRepository;
 | 
					        this.externalCurriculumRepository = externalCurriculumRepository;
 | 
				
			||||||
 | 
					        this.userService = userService;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public InscriptionRequest save(InscriptionRequest inscriptionRequest){
 | 
					    public InscriptionRequest save(InscriptionRequest inscriptionRequest){
 | 
				
			||||||
@ -84,7 +86,7 @@ public class InscriptionService {
 | 
				
			|||||||
                inscrRequest.getPassword()
 | 
					                inscrRequest.getPassword()
 | 
				
			||||||
        );
 | 
					        );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        userRepo.save(userFromRequest);
 | 
					        userService.save(userFromRequest);
 | 
				
			||||||
        userCurriculumRepo.save(new UserCurriculum(userFromRequest, curriculumRepo.findById(inscrRequest.getCurriculumId()),0));
 | 
					        userCurriculumRepo.save(new UserCurriculum(userFromRequest, curriculumRepo.findById(inscrRequest.getCurriculumId()),0));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        //Create a minerval for the new student
 | 
					        //Create a minerval for the new student
 | 
				
			||||||
 | 
				
			|||||||
@ -2,6 +2,7 @@ package ovh.herisson.Clyde.Services;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
 | 
					import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
 | 
				
			||||||
import org.springframework.stereotype.Service;
 | 
					import org.springframework.stereotype.Service;
 | 
				
			||||||
 | 
					import ovh.herisson.Clyde.Tables.RegNoGenerator;
 | 
				
			||||||
import ovh.herisson.Clyde.Repositories.UserRepository;
 | 
					import ovh.herisson.Clyde.Repositories.UserRepository;
 | 
				
			||||||
import ovh.herisson.Clyde.Tables.Role;
 | 
					import ovh.herisson.Clyde.Tables.Role;
 | 
				
			||||||
import ovh.herisson.Clyde.Tables.User;
 | 
					import ovh.herisson.Clyde.Tables.User;
 | 
				
			||||||
@ -106,10 +107,17 @@ public class UserService {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public User save(User  user){
 | 
					    public User save(User  user){
 | 
				
			||||||
 | 
					        RegNoGenerator.resetCount();
 | 
				
			||||||
        user.setPassword(passwordEncoder.encode(user.getPassword()));
 | 
					        user.setPassword(passwordEncoder.encode(user.getPassword()));
 | 
				
			||||||
        return userRepo.save(user);
 | 
					        return userRepo.save(user);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public void saveAll(ArrayList<User> list){
 | 
				
			||||||
 | 
					        //S'assure que le compteur est bien a 0
 | 
				
			||||||
 | 
					        RegNoGenerator.resetCount();
 | 
				
			||||||
 | 
					        userRepo.saveAll(list);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public Iterable<User> getAll(){
 | 
					    public Iterable<User> getAll(){
 | 
				
			||||||
        return userRepo.findAll();
 | 
					        return userRepo.findAll();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
				
			|||||||
@ -0,0 +1,46 @@
 | 
				
			|||||||
 | 
					package ovh.herisson.Clyde.Tables;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import org.hibernate.engine.jdbc.connections.spi.JdbcConnectionAccess;
 | 
				
			||||||
 | 
					import org.hibernate.engine.spi.SharedSessionContractImplementor;
 | 
				
			||||||
 | 
					import org.hibernate.id.IdentifierGenerator;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.sql.*;
 | 
				
			||||||
 | 
					import java.util.Calendar;
 | 
				
			||||||
 | 
					import java.util.Date;
 | 
				
			||||||
 | 
					import java.util.GregorianCalendar;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class RegNoGenerator implements IdentifierGenerator {
 | 
				
			||||||
 | 
					    private static int count = 0;
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public Object generate(SharedSessionContractImplementor session, Object object) {
 | 
				
			||||||
 | 
					        try{
 | 
				
			||||||
 | 
					            JdbcConnectionAccess jdbccon = session.getJdbcConnectionAccess();
 | 
				
			||||||
 | 
					            Connection conn = jdbccon.obtainConnection();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            Statement statement = conn.createStatement();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            Calendar c = new GregorianCalendar();
 | 
				
			||||||
 | 
					            int y = c.get(Calendar.YEAR);
 | 
				
			||||||
 | 
					            String query = "select count(reg_no) + "+count+" from Users where reg_no/10000 = " + y%1000;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            ResultSet set = statement.executeQuery(query);
 | 
				
			||||||
 | 
					            long resp = 0;
 | 
				
			||||||
 | 
					            if(set.next()){
 | 
				
			||||||
 | 
					                resp = set.getLong(1)+((y%1000)*10000);
 | 
				
			||||||
 | 
					                count += 1;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            conn.close();
 | 
				
			||||||
 | 
					            statement.close();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            return resp;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        } catch (SQLException e) {
 | 
				
			||||||
 | 
					            throw new RuntimeException(e);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public static void resetCount(){
 | 
				
			||||||
 | 
					        count = 0;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -1,6 +1,7 @@
 | 
				
			|||||||
package ovh.herisson.Clyde.Tables;
 | 
					package ovh.herisson.Clyde.Tables;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import jakarta.persistence.*;
 | 
					import jakarta.persistence.*;
 | 
				
			||||||
 | 
					import org.hibernate.annotations.GenericGenerator;
 | 
				
			||||||
import ovh.herisson.Clyde.Tables.Msg.Discussion;
 | 
					import ovh.herisson.Clyde.Tables.Msg.Discussion;
 | 
				
			||||||
import ovh.herisson.Clyde.Tables.Msg.Message;
 | 
					import ovh.herisson.Clyde.Tables.Msg.Message;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -14,7 +15,8 @@ import com.fasterxml.jackson.annotation.JsonIgnore;
 | 
				
			|||||||
@Table(name = "Users")
 | 
					@Table(name = "Users")
 | 
				
			||||||
public class User {
 | 
					public class User {
 | 
				
			||||||
    @Id
 | 
					    @Id
 | 
				
			||||||
    @GeneratedValue(strategy = GenerationType.AUTO)
 | 
					    @GenericGenerator(name = "userGen", type = ovh.herisson.Clyde.Tables.RegNoGenerator.class)
 | 
				
			||||||
 | 
					    @GeneratedValue(generator = "userGen")
 | 
				
			||||||
    private Long regNo;
 | 
					    private Long regNo;
 | 
				
			||||||
    private String lastName;
 | 
					    private String lastName;
 | 
				
			||||||
    private String firstName;
 | 
					    private String firstName;
 | 
				
			||||||
 | 
				
			|||||||
@ -24,6 +24,7 @@ public class UserRepoTest {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    @BeforeEach
 | 
					    @BeforeEach
 | 
				
			||||||
    public void setup(){
 | 
					    public void setup(){
 | 
				
			||||||
 | 
					        userRepo.deleteAll();
 | 
				
			||||||
        User herobrine = new User("brine","hero","admin@admin.com","in your WalLs","ShadowsLand", new GregorianCalendar(2005, 4, 3).getTime(), null, Role.Admin,"admin");
 | 
					        User herobrine = new User("brine","hero","admin@admin.com","in your WalLs","ShadowsLand", new GregorianCalendar(2005, 4, 3).getTime(), null, Role.Admin,"admin");
 | 
				
			||||||
        userRepo.save(herobrine);
 | 
					        userRepo.save(herobrine);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@ -34,8 +35,8 @@ public class UserRepoTest {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
    @Test
 | 
					    @Test
 | 
				
			||||||
    public void usertest(){
 | 
					    public void usertest(){
 | 
				
			||||||
        Assert.assertEquals("brine", userRepo.findById(1).getLastName());
 | 
					        Assert.assertEquals("brine", userRepo.findByEmail("admin@admin.com").getLastName());
 | 
				
			||||||
        Assert.assertTrue(new GregorianCalendar(2005, 4, 3).getTime().equals(userRepo.findById(1).getBirthDate()));
 | 
					        Assert.assertTrue(new GregorianCalendar(2005, 4, 3).getTime().equals(userRepo.findByEmail("admin@admin.com").getBirthDate()));
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user