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));
|
||||
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 {
|
||||
|
||||
@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;
|
||||
|
il manque pas le pdf du CESS dedans ?
(je dirais que dans un premier temps sans l'upload on peut très bien commit ainsi ? Peut être mettre un todo)
oui tout à fait mais il faut pas oublier le champs d'où le comm
Je penses que c'est dans mon extension donc je l'ai pas mis ! Peut être mb ?
dans le doute mets le nan ?(du moins au moins le todo)