Leo/Backend #82
@ -7,12 +7,14 @@ import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
import ovh.herisson.Clyde.Repositories.TokenRepository;
|
||||
import ovh.herisson.Clyde.Repositories.UserRepository;
|
||||
import ovh.herisson.Clyde.Services.TokenService;
|
||||
import ovh.herisson.Clyde.Tables.Role;
|
||||
import ovh.herisson.Clyde.Tables.Token;
|
||||
import ovh.herisson.Clyde.Tables.User;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Calendar;
|
||||
import java.util.Date;
|
||||
|
||||
@RestController
|
||||
@ -23,13 +25,14 @@ public class MockController {
|
||||
|
||||
public final UserRepository userRepo;
|
||||
public final TokenRepository tokenRepo;
|
||||
|
||||
public final TokenService tokenService;
|
||||
ArrayList<User> mockUsers;
|
||||
|
||||
|
||||
public MockController(UserRepository userRepo, TokenRepository tokenRepo){
|
||||
public MockController(UserRepository userRepo, TokenRepository tokenRepo, TokenService tokenService){
|
||||
this.tokenRepo = tokenRepo;
|
||||
this.userRepo = userRepo;
|
||||
this.tokenService = tokenService;
|
||||
}
|
||||
|
||||
/** Saves an example of each user type by :
|
||||
@ -41,10 +44,10 @@ public class MockController {
|
||||
@PostMapping("/mock")
|
||||
public void postMock(){
|
||||
|
||||
User herobrine = new User("brine","hero","admin@admin.com","in your WalLs","ShadowsLand",new Date(0), "none",Role.Admin,passwordEncoder.encode("admin"));
|
||||
User joe = new User("Mama","Joe","student@student.com","roundabout","DaWarudo",new Date(0), "None",Role.Student,passwordEncoder.encode("student"));
|
||||
User meh = new User("Inspiration","lackOf","secretary@secretary.com","a Box","the street",new Date(0),"none", Role.Teacher,passwordEncoder.encode("secretary"));
|
||||
User joke = new User("CthemBalls","Lemme","teacher@teacher.com","lab","faculty",new Date(0), "none",Role.Teacher,passwordEncoder.encode("teacher"));
|
||||
User herobrine = new User("brine","hero","admin@admin.com","in your WalLs","ShadowsLand",new Date(0), null,Role.Admin,passwordEncoder.encode("admin"));
|
||||
User joe = new User("Mama","Joe","student@student.com","roundabout","DaWarudo",new Date(0), null,Role.Student,passwordEncoder.encode("student"));
|
||||
User meh = new User("Inspiration","lackOf","secretary@secretary.com","a Box","the street",new Date(0), null,Role.Teacher,passwordEncoder.encode("secretary"));
|
||||
User joke = new User("CthemBalls","Lemme","teacher@teacher.com","lab","faculty",new Date(0), null,Role.Teacher,passwordEncoder.encode("teacher"));
|
||||
|
||||
mockUsers = new ArrayList<User>(Arrays.asList(herobrine,joe,meh,joke));
|
||||
|
||||
|
@ -6,8 +6,10 @@ import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.context.annotation.Profile;
|
||||
import org.springframework.jdbc.datasource.DriverManagerDataSource;
|
||||
import org.springframework.scheduling.annotation.EnableScheduling;
|
||||
|
||||
@Configuration
|
||||
@EnableScheduling
|
||||
public class JdbcConfig {
|
||||
|
||||
@Bean
|
||||
|
@ -4,10 +4,13 @@ import org.springframework.data.repository.CrudRepository;
|
||||
import ovh.herisson.Clyde.Tables.Token;
|
||||
import ovh.herisson.Clyde.Tables.User;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
public interface TokenRepository extends CrudRepository<Token,Long> {
|
||||
|
||||
Token getByToken(String token);
|
||||
|
||||
Iterable<Token> getByUser(User user);
|
||||
|
||||
ArrayList <Token> getByUserOrderByExpirationDate(User user);
|
||||
}
|
||||
|
@ -1,6 +1,7 @@
|
||||
package ovh.herisson.Clyde.Services;
|
||||
|
||||
import org.springframework.stereotype.Service;
|
||||
import ovh.herisson.Clyde.Tables.Token;
|
||||
import ovh.herisson.Clyde.Tables.User;
|
||||
|
||||
import java.util.Date;
|
||||
@ -26,7 +27,7 @@ public class AuthenticatorService {
|
||||
if (user == null){return null;}
|
||||
if (!userService.checkPassword(user,password)){return null;}
|
||||
String token = tokenService.generateNewToken();
|
||||
tokenService.saveToken(token,user,expirationDate);
|
||||
tokenService.saveToken(new Token(user, token,expirationDate));
|
||||
return token;
|
||||
}
|
||||
}
|
||||
|
@ -1,19 +1,19 @@
|
||||
package ovh.herisson.Clyde.Services;
|
||||
|
||||
|
||||
import org.springframework.scheduling.annotation.Scheduled;
|
||||
import org.springframework.stereotype.Service;
|
||||
import ovh.herisson.Clyde.Repositories.TokenRepository;
|
||||
import ovh.herisson.Clyde.Tables.Token;
|
||||
import ovh.herisson.Clyde.Tables.User;
|
||||
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.security.SecureRandom;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Calendar;
|
||||
import java.util.Date;
|
||||
|
||||
@Service
|
||||
public class TokenService {
|
||||
|
||||
TokenRepository tokenRepo;
|
||||
|
||||
public TokenService(TokenRepository tokenRepo){
|
||||
@ -48,7 +48,28 @@ public class TokenService {
|
||||
return tokenRep.getUser();
|
||||
}
|
||||
|
||||
public void saveToken(String token, User user, Date expirationDate){// todo faire qlq chose de l'expDate
|
||||
tokenRepo.save(new Token(user,token));
|
||||
public void saveToken(Token token){
|
||||
|
||||
//Si l'utilisateur a déja 5 token delete celui qui devait expirer le plus vite
|
||||
ArrayList<Token> tokenList = tokenRepo.getByUserOrderByExpirationDate(token.getUser());
|
||||
while(tokenList.size() >= 5){
|
||||
tokenRepo.delete(tokenList.get(0));
|
||||
Maxime marked this conversation as resolved
Outdated
tonitch
commented
peut être faire des >= au lieu des == pour éviter que le programme ne passe au dessus si imaginons le serveur est fermé pendant 2 jours Mais encore mieux tu pourrais comparer les deux peut être faire des >= au lieu des == pour éviter que le programme ne passe au dessus si imaginons le serveur est fermé pendant 2 jours
Mais encore mieux tu pourrais comparer les deux `Calendar` avec la fonction ´.compareTo(Calendar)`
https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/util/Calendar.html#compareTo(java.util.Calendar) et juste voir si le résultat est négatif
LeoMoulin
commented
Excellente remarque ! Ca sera changé dans mon prochain commit ! Excellente remarque ! Ca sera changé dans mon prochain commit !
|
||||
tokenList.remove(tokenList.get(0));
|
||||
}
|
||||
tokenRepo.save(token);
|
||||
}
|
||||
|
||||
//Tous les jours a minuit
|
||||
@Scheduled(cron = "0 0 0 * * ?")
|
||||
public void autoDeleteToken() {
|
||||
for (Token t: tokenRepo.findAll()){
|
||||
Calendar cal = Calendar.getInstance();
|
||||
|
||||
Calendar cal2 = Calendar.getInstance();
|
||||
cal2.setTime(t.getExpirationDate());
|
||||
|
||||
if (cal.compareTo(cal2) >= 0){
|
||||
tokenRepo.delete(t);
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
@ -0,0 +1,108 @@
|
||||
package ovh.herisson.Clyde.Tables;
|
||||
|
||||
import jakarta.persistence.*;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
public class InscriptionRequest {
|
||||
Maxime
commented
il manque pas le pdf du CESS dedans ? il manque pas le pdf du CESS dedans ?
tonitch
commented
(je dirais que dans un premier temps sans l'upload on peut très bien commit ainsi ? Peut être mettre un todo) (je dirais que dans un premier temps sans l'upload on peut très bien commit ainsi ? Peut être mettre un todo)
Maxime
commented
oui tout à fait mais il faut pas oublier le champs d'où le comm oui tout à fait mais il faut pas oublier le champs d'où le comm
LeoMoulin
commented
Je penses que c'est dans mon extension donc je l'ai pas mis ! Peut être mb ? Je penses que c'est dans mon extension donc je l'ai pas mis ! Peut être mb ?
Maxime
commented
dans le doute mets le nan ?(du moins au moins le todo) dans le doute mets le nan ?(du moins au moins le todo)
|
||||
@GeneratedValue(strategy = GenerationType.AUTO)
|
||||
private int id;
|
||||
private String firstName;
|
||||
private String lastName;
|
||||
private String adress;
|
||||
private String email;
|
||||
private String country;
|
||||
private Date birthDate;
|
||||
|
||||
@ManyToOne
|
||||
@JoinColumn(name="Cursus")
|
||||
private Cursus cursus;
|
||||
private RequestState state;
|
||||
private String profilePicture;
|
||||
public InscriptionRequest(){}
|
||||
public InscriptionRequest(String lastName, String firstName, String adress, String email, String country, Date birthDate, RequestState state, String profilePicture){
|
||||
this.lastName = lastName;
|
||||
this.firstName = firstName;
|
||||
this.adress = adress;
|
||||
this.email = email;
|
||||
this.country = country;
|
||||
this.birthDate = birthDate;
|
||||
this.state = state;
|
||||
}
|
||||
|
||||
public int getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public String getFirstName() {
|
||||
return firstName;
|
||||
}
|
||||
|
||||
public void setFirstName(String firstName) {
|
||||
this.firstName = firstName;
|
||||
}
|
||||
|
||||
public String getLastName() {
|
||||
return lastName;
|
||||
}
|
||||
|
||||
public void setLastName(String lastName) {
|
||||
this.lastName = lastName;
|
||||
}
|
||||
|
||||
public String getAdress() {
|
||||
return adress;
|
||||
}
|
||||
|
||||
public void setAdress(String adress) {
|
||||
this.adress = adress;
|
||||
}
|
||||
|
||||
public String getEmail() {
|
||||
return email;
|
||||
}
|
||||
|
||||
public void setEmail(String email) {
|
||||
this.email = email;
|
||||
}
|
||||
|
||||
public String getCountry() {
|
||||
return country;
|
||||
}
|
||||
|
||||
public void setCountry(String country) {
|
||||
this.country = country;
|
||||
}
|
||||
|
||||
public Date getBirthDate() {
|
||||
return birthDate;
|
||||
}
|
||||
|
||||
public void setBirthDate(Date birthDate) {
|
||||
this.birthDate = birthDate;
|
||||
}
|
||||
|
||||
public Cursus getCursus() {
|
||||
return cursus;
|
||||
}
|
||||
|
||||
public void setCursus(Cursus cursus) {
|
||||
this.cursus = cursus;
|
||||
}
|
||||
|
||||
public RequestState getState() {
|
||||
return state;
|
||||
}
|
||||
|
||||
public void setState(RequestState state) {
|
||||
this.state = state;
|
||||
}
|
||||
|
||||
public String getProfilePicture() {
|
||||
return profilePicture;
|
||||
}
|
||||
|
||||
public void setProfilePicture(String profilePicture) {
|
||||
this.profilePicture = profilePicture;
|
||||
}
|
||||
}
|
@ -0,0 +1,69 @@
|
||||
package ovh.herisson.Clyde.Tables;
|
||||
|
||||
import jakarta.persistence.GeneratedValue;
|
||||
import jakarta.persistence.GenerationType;
|
||||
import jakarta.persistence.JoinColumn;
|
||||
import jakarta.persistence.ManyToOne;
|
||||
|
||||
public class ReinscriptionRequest {
|
||||
@GeneratedValue(strategy = GenerationType.AUTO)
|
||||
private int id;
|
||||
|
||||
@ManyToOne
|
||||
@JoinColumn(name = "User")
|
||||
private User user;
|
||||
|
||||
@ManyToOne
|
||||
@JoinColumn(name = "Cursus")
|
||||
private Cursus newCursus;
|
||||
private RequestState state;
|
||||
|
||||
//Permet de différencier les demandes de changement et une réinscription dans le même cursus
|
||||
//Pour la réinscription on va le mettre a 0
|
||||
private boolean type;
|
||||
Maxime
commented
je comprends pas à quoi type sert (dans le sens où : pourquoi on devrai différencier les demande de réinscriptions dans le même cursus ou non ?) et le nom " type" est fort abstrait je comprends pas à quoi type sert (dans le sens où : pourquoi on devrai différencier les demande de réinscriptions dans le même cursus ou non ?)
et le nom " type" est fort abstrait
LeoMoulin
commented
parceque que j'aimerai bien pouvoir séparer les deux dans l'interface par la suite mais que leurs données sont similaires donc j'ai utilisé ca pour les différencier dans la même table ! Je suis d'accord que le nom est fort abstrait on pourrait envisager un truc comme isCursusChange. parceque que j'aimerai bien pouvoir séparer les deux dans l'interface par la suite mais que leurs données sont similaires donc j'ai utilisé ca pour les différencier dans la même table ! Je suis d'accord que le nom est fort abstrait on pourrait envisager un truc comme isCursusChange.
Maxime
commented
par pitié fais de l'héritage alors en séparant cursus change et réorientation par pitié fais de l'héritage alors en séparant cursus change et réorientation
LeoMoulin
commented
mais le but c'est justement de pas avoir deux tables pour deux données qui ont les mêmes attributs mais le but c'est justement de pas avoir deux tables pour deux données qui ont les mêmes attributs
tonitch
commented
https://www.baeldung.com/hibernate-inheritance
|
||||
|
||||
public ReinscriptionRequest(){}
|
||||
|
||||
public ReinscriptionRequest(User user, Cursus newCursus, RequestState state, boolean type){
|
||||
this.user = user;
|
||||
this.newCursus = newCursus;
|
||||
this.state = state;
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
public int getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public User getUser() {
|
||||
return user;
|
||||
}
|
||||
|
||||
public void setUser(User user) {
|
||||
this.user = user;
|
||||
}
|
||||
|
||||
public Cursus getNewCursus() {
|
||||
return newCursus;
|
||||
}
|
||||
|
||||
public void setNewCursus(Cursus newCursus) {
|
||||
this.newCursus = newCursus;
|
||||
}
|
||||
|
||||
public RequestState getState() {
|
||||
return state;
|
||||
}
|
||||
|
||||
public void setState(RequestState state) {
|
||||
this.state = state;
|
||||
}
|
||||
|
||||
public boolean isType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
public void setType(boolean type) {
|
||||
this.type = type;
|
||||
}
|
||||
}
|
@ -0,0 +1,7 @@
|
||||
package ovh.herisson.Clyde.Tables;
|
||||
|
||||
public enum RequestState {
|
||||
Accepted,
|
||||
Refused,
|
||||
Pending;
|
||||
}
|
@ -1,6 +1,10 @@
|
||||
package ovh.herisson.Clyde.Tables;
|
||||
|
||||
import jakarta.persistence.*;
|
||||
import org.springframework.scheduling.annotation.Scheduled;
|
||||
import ovh.herisson.Clyde.Repositories.TokenRepository;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
@Entity
|
||||
public class Token {
|
||||
@ -12,13 +16,16 @@ public class Token {
|
||||
@JoinColumn(name ="Users")
|
||||
private User user;
|
||||
private String token;
|
||||
private Date expirationDate;
|
||||
|
||||
public Token(User user, String token){
|
||||
public Token(User user, String token, Date expirationDate){
|
||||
tonitch
commented
ça serrait cool de donner une valeur par défault, comme ça on ne doit pas toujours l'envoyer quand on se connecte ça serrait cool de donner une valeur par défault, comme ça on ne doit pas toujours l'envoyer quand on se connecte
Maxime
commented
c'est le frontend qui doit nous la donner cette valeur par défaut. (en fct de si leuser veux rester connecté ou non c'est le frontend qui doit nous la donner cette valeur par défaut. (en fct de si leuser veux rester connecté ou non
)
tonitch
commented
Cringe... but ok Cringe... but ok
|
||||
this.user = user;
|
||||
this.token = token;
|
||||
this.expirationDate = expirationDate;
|
||||
}
|
||||
|
||||
public Token(){}
|
||||
|
||||
public int getId() {
|
||||
return id;
|
||||
}
|
||||
@ -37,4 +44,12 @@ public class Token {
|
||||
public void setToken(String data) {
|
||||
this.token = data;
|
||||
}
|
||||
|
||||
public void setExpirationDate(Date date){
|
||||
this.expirationDate = date;
|
||||
}
|
||||
|
||||
public Date getExpirationDate(){
|
||||
return expirationDate;
|
||||
}
|
||||
}
|
||||
|
@ -16,6 +16,7 @@ public class User {
|
||||
private int regNo;
|
||||
private String lastName;
|
||||
private String firstName;
|
||||
@Column(unique = true)
|
||||
private String email;
|
||||
private String address;
|
||||
private String country;
|
||||
|
Calendar.getInstance retourne déjà l'instant ou il est crée
https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/util/Calendar.html
C'est bien vu ca