merge resolution(gitignore)

This commit is contained in:
Thomas Cardon 2022-03-11 16:18:36 +01:00
commit d947455bb7
30 changed files with 1802 additions and 176 deletions

View File

@ -13,10 +13,14 @@ repositories {
} }
dependencies { dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation group: 'io.jsonwebtoken', name: 'jjwt', version: '0.9.0'
implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
runtimeOnly 'mysql:mysql-connector-java' implementation 'org.springframework.boot:spring-boot-starter-web'
testImplementation 'org.springframework.boot:spring-boot-starter-test' implementation 'org.springframework.boot:spring-boot-starter-security'
developmentOnly 'org.springframework.boot:spring-boot-devtools'
runtimeOnly 'mysql:mysql-connector-java'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'org.springframework.security:spring-security-test'
} }
test { test {

View File

@ -1,13 +1,33 @@
package fr.cardon.simpleat; package fr.cardon.simpleat;
import java.util.ArrayList;
import java.util.Arrays;
import org.springframework.boot.SpringApplication; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import fr.cardon.simpleat.exception.ExistingUsernameException;
import fr.cardon.simpleat.model.EnumRole;
import fr.cardon.simpleat.model.Personne;
import fr.cardon.simpleat.service.PersonneService;
@SpringBootApplication @SpringBootApplication
public class SimpleatApplication { public class SimpleatApplication {
public static void main(String[] args) { public static void main(String[] args) {
SpringApplication.run(SimpleatApplication.class, args); SpringApplication.run(SimpleatApplication.class, args);
} }
@Bean
public BCryptPasswordEncoder bCryptPasswordEncoder() {
return new BCryptPasswordEncoder();
}
} }

View File

@ -5,6 +5,7 @@ import java.util.Collection;
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;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.CrossOrigin; import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
@ -12,16 +13,19 @@ import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import fr.cardon.simpleat.dto.JsonWebToken;
import fr.cardon.simpleat.exception.ExistingUsernameException;
import fr.cardon.simpleat.exception.InvalidCredentialsException;
import fr.cardon.simpleat.model.Personne; import fr.cardon.simpleat.model.Personne;
import fr.cardon.simpleat.model.Role;
import fr.cardon.simpleat.repository.PersonneRepository; import fr.cardon.simpleat.repository.PersonneRepository;
import fr.cardon.simpleat.repository.RoleRepository; import fr.cardon.simpleat.service.PersonneService;
@RestController @RestController
@CrossOrigin("*") @CrossOrigin("http://localhost:4200")
public class PersonneController { public class PersonneController {
@ -29,7 +33,9 @@ public class PersonneController {
private PersonneRepository personneRepository; private PersonneRepository personneRepository;
@Autowired @Autowired
private RoleRepository roleRepository; private PersonneService personneService;
@GetMapping("/") @GetMapping("/")
@ResponseBody @ResponseBody
@ -40,7 +46,6 @@ public class PersonneController {
p1.setPrenom("pouet"); p1.setPrenom("pouet");
p1.setEmail("pouetcoco@gmail.com"); p1.setEmail("pouetcoco@gmail.com");
p1.setPassword("hjfdzov"); p1.setPassword("hjfdzov");
p1.setRoles(findRoleById(2));
//ajoutPersonne(p1); //ajoutPersonne(p1);
@ -57,24 +62,28 @@ public class PersonneController {
@GetMapping("/users") @GetMapping("/users")
@PreAuthorize("hasRole('ROLE_ADMIN')")
public Collection<Personne> findAll(){ public Collection<Personne> findAll(){
return personneRepository.findAll(); return personneRepository.findAll();
} }
@GetMapping("/user/{id}") @GetMapping("/user/{id}")
@PreAuthorize("hasRole('ROLE_ADMIN') or hasRole('ROLE_READER')")
public Personne findPersonneById(@PathVariable int id){ public Personne findPersonneById(@PathVariable int id){
return personneRepository.findById(id); return personneRepository.findById(id);
} }
@PostMapping("/add-user") // @PostMapping("/add-user")
public ResponseEntity<?> ajoutPersonne(@RequestBody Personne personne){ // @PreAuthorize("hasRole('ROLE_ADMIN')")
return ResponseEntity.status(HttpStatus.OK).body(personneRepository.save(personne)); // public ResponseEntity<?> ajoutPersonne(@RequestBody Personne personne){
} // return ResponseEntity.status(HttpStatus.OK).body(personneRepository.save(personne));
// }
@PutMapping(value = "/update-user/{id}") @PutMapping(value = "/update-user/{id}")
@PreAuthorize("hasRole('ROLE_ADMIN')")
public ResponseEntity<?> modifPerso(@PathVariable int id, @RequestBody Personne personne){ public ResponseEntity<?> modifPerso(@PathVariable int id, @RequestBody Personne personne){
// Personne persoAModif= null; // Personne persoAModif= null;
@ -87,6 +96,7 @@ public class PersonneController {
} }
@DeleteMapping(value = "/delete-user/{id}") @DeleteMapping(value = "/delete-user/{id}")
@PreAuthorize("hasRole('ROLE_ADMIN')")
public void suppressionPerso(@PathVariable int id){ public void suppressionPerso(@PathVariable int id){
// Personne persoASuppr= new Personne(); // Personne persoASuppr= new Personne();
// persoASuppr = findById(id); // persoASuppr = findById(id);
@ -95,9 +105,28 @@ public class PersonneController {
} }
public Collection<Role> findRoleById(int idRole){ @PostMapping("/signin")
return roleRepository.findCollectionById(idRole); public ResponseEntity<JsonWebToken> signIn(@RequestBody Personne personne) {
} try {
// ici on créé un JWT en passant l'email et le mot de passe
// récupéré de l'objet user passé en paramètre.
return ResponseEntity.ok(new JsonWebToken(personneService.signin(personne.getEmail(), personne.getPassword())));
} catch (InvalidCredentialsException ex) {
// on renvoie une réponse négative
return ResponseEntity.badRequest().build();
}
}
@PostMapping("/signup")
@PreAuthorize("hasRole('ROLE_ADMIN')")
public ResponseEntity<JsonWebToken> signUp(@RequestBody Personne personne) {
try {
return ResponseEntity.ok(new JsonWebToken(personneService.signup(personne)));
} catch (ExistingUsernameException ex) {
return ResponseEntity.badRequest().build();
}
}
// public Personne findById(int id) { // public Personne findById(int id) {
// return personneRepository.getById(id); // return personneRepository.getById(id);

View File

@ -6,12 +6,12 @@ import java.util.Optional;
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;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.CrossOrigin; import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
@ -36,6 +36,7 @@ public class PreferenceController {
private RestaurantRepository restaurantRepository; private RestaurantRepository restaurantRepository;
@GetMapping("/preferences") @GetMapping("/preferences")
@PreAuthorize("hasRole('ROLE_ADMIN')")
public Collection<Preference> findAll(){ public Collection<Preference> findAll(){
return preferenceRepository.findAll(); return preferenceRepository.findAll();
@ -43,6 +44,7 @@ public class PreferenceController {
@GetMapping("/preference/{iduser}/{idrestau}") @GetMapping("/preference/{iduser}/{idrestau}")
@PreAuthorize("hasRole('ROLE_ADMIN')")
public Optional<Preference> findPreferenceById(@PathVariable int iduser, @PathVariable int idrestau ){ public Optional<Preference> findPreferenceById(@PathVariable int iduser, @PathVariable int idrestau ){
PreferencePK id = new PreferencePK(personneRepository.getById(iduser) ,restaurantRepository.getById(idrestau)); PreferencePK id = new PreferencePK(personneRepository.getById(iduser) ,restaurantRepository.getById(idrestau));
System.out.println(iduser); System.out.println(iduser);
@ -50,8 +52,18 @@ public class PreferenceController {
} }
@PostMapping("/add-preference") // @PostMapping("/add-preference")
public ResponseEntity<?> ajoutPreference(@RequestBody Preference preference){ // public ResponseEntity<?> ajoutPreference(@RequestBody Preference preference){
// System.out.println(preference);
// return ResponseEntity.status(HttpStatus.OK).body(preferenceRepository.save(preference));
// }
@PostMapping("/add-preference/{iduser}/{idrestau}")
@PreAuthorize("hasRole('ROLE_ADMIN') or hasRole('ROLE_READER')")
public ResponseEntity<?> ajoutPreference(@PathVariable int iduser, @PathVariable int idrestau ){
System.out.println("hello");
Preference preference = new Preference(new PreferencePK(personneRepository.getById(iduser) ,restaurantRepository.getById(idrestau)));
return ResponseEntity.status(HttpStatus.OK).body(preferenceRepository.save(preference)); return ResponseEntity.status(HttpStatus.OK).body(preferenceRepository.save(preference));
} }
@ -61,11 +73,10 @@ public class PreferenceController {
// return ResponseEntity.status(HttpStatus.OK).body(preferenceRepository.save(personne)); // return ResponseEntity.status(HttpStatus.OK).body(preferenceRepository.save(personne));
// } // }
// //
// @DeleteMapping(value = "/delete-restaurant/{id}") @DeleteMapping("/delete-preference/{iduser}/{idrestau}")
// public void suppressionPerso(@PathVariable int id){ @PreAuthorize("hasRole('ROLE_ADMIN') or hasRole('ROLE_READER')")
// public void deletePreferenceById(@PathVariable int iduser, @PathVariable int idrestau ){
// preferenceRepository.deleteById(id); PreferencePK id = new PreferencePK(personneRepository.getById(iduser) ,restaurantRepository.getById(idrestau));
// } preferenceRepository.deleteById(id);
}
} }

View File

@ -5,6 +5,7 @@ import java.util.Collection;
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;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.CrossOrigin; import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
@ -26,28 +27,33 @@ public class RestaurantController {
private RestaurantRepository restaurantRepository; private RestaurantRepository restaurantRepository;
@GetMapping("/restaurants") @GetMapping("/restaurants")
@PreAuthorize("hasRole('ROLE_ADMIN') or hasRole('ROLE_READER')")
public Collection<Restaurant> findAll(){ public Collection<Restaurant> findAll(){
return restaurantRepository.findAll(); return restaurantRepository.findAll();
} }
@GetMapping("/restaurant/{id}") @GetMapping("/restaurant/{id}")
@PreAuthorize("hasRole('ROLE_ADMIN') or hasRole('ROLE_READER')")
public Restaurant findRestaurantById(@PathVariable int id){ public Restaurant findRestaurantById(@PathVariable int id){
return restaurantRepository.findById(id); return restaurantRepository.findById(id);
} }
@PostMapping("/add-restaurant") @PostMapping("/add-restaurant")
@PreAuthorize("hasRole('ROLE_ADMIN')")
public ResponseEntity<?> ajoutRestaurant(@RequestBody Restaurant personne){ public ResponseEntity<?> ajoutRestaurant(@RequestBody Restaurant personne){
return ResponseEntity.status(HttpStatus.OK).body(restaurantRepository.save(personne)); return ResponseEntity.status(HttpStatus.OK).body(restaurantRepository.save(personne));
} }
@PutMapping(value = "/update-restaurant/{id}") @PutMapping(value = "/update-restaurant/{id}")
@PreAuthorize("hasRole('ROLE_ADMIN')")
public ResponseEntity<?> modifRestaurant(@PathVariable int id, @RequestBody Restaurant personne){ public ResponseEntity<?> modifRestaurant(@PathVariable int id, @RequestBody Restaurant personne){
return ResponseEntity.status(HttpStatus.OK).body(restaurantRepository.save(personne)); return ResponseEntity.status(HttpStatus.OK).body(restaurantRepository.save(personne));
} }
@DeleteMapping(value = "/delete-restaurant/{id}") @DeleteMapping(value = "/delete-restaurant/{id}")
@PreAuthorize("hasRole('ROLE_ADMIN')")
public void suppressionRestaurant(@PathVariable int id){ public void suppressionRestaurant(@PathVariable int id){
restaurantRepository.deleteById(id); restaurantRepository.deleteById(id);

View File

@ -2,10 +2,12 @@ package fr.cardon.simpleat.controller;
import java.util.Collection; import java.util.Collection;
import java.util.List;
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;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.CrossOrigin; import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
@ -15,6 +17,7 @@ import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import fr.cardon.simpleat.model.Restaurant;
import fr.cardon.simpleat.model.TypeRestau; import fr.cardon.simpleat.model.TypeRestau;
import fr.cardon.simpleat.repository.TypeRestauRepository; import fr.cardon.simpleat.repository.TypeRestauRepository;
@ -26,28 +29,39 @@ public class TypeRestauController {
private TypeRestauRepository typeRestauRepository; private TypeRestauRepository typeRestauRepository;
@GetMapping("/types") @GetMapping("/types")
@PreAuthorize("hasRole('ROLE_ADMIN') or hasRole('ROLE_READER')")
public Collection<TypeRestau> findAll(){ public Collection<TypeRestau> findAll(){
return typeRestauRepository.findAll(); return typeRestauRepository.findAll();
} }
@GetMapping("/type/{id}") @GetMapping("/type/{id}")
@PreAuthorize("hasRole('ROLE_ADMIN') or hasRole('ROLE_READER')")
public TypeRestau findTypetById(@PathVariable int id){ public TypeRestau findTypetById(@PathVariable int id){
return typeRestauRepository.findById(id); return typeRestauRepository.findById(id);
} }
@GetMapping("/restaurantbytype/{id}")
@PreAuthorize("hasRole('ROLE_ADMIN') or hasRole('ROLE_READER')")
public List<Restaurant> findRestauByType(@PathVariable int id){
return findTypetById(id).getRestaurants();
}
@PostMapping("/add-type") @PostMapping("/add-type")
@PreAuthorize("hasRole('ROLE_ADMIN')")
public ResponseEntity<?> ajoutType(@RequestBody TypeRestau type){ public ResponseEntity<?> ajoutType(@RequestBody TypeRestau type){
return ResponseEntity.status(HttpStatus.OK).body(typeRestauRepository.save(type)); return ResponseEntity.status(HttpStatus.OK).body(typeRestauRepository.save(type));
} }
@PutMapping(value = "/update-type/{id}") @PutMapping(value = "/update-type/{id}")
@PreAuthorize("hasRole('ROLE_ADMIN')")
public ResponseEntity<?> modifType(@PathVariable int id, @RequestBody TypeRestau type){ public ResponseEntity<?> modifType(@PathVariable int id, @RequestBody TypeRestau type){
return ResponseEntity.status(HttpStatus.OK).body(typeRestauRepository.save(type)); return ResponseEntity.status(HttpStatus.OK).body(typeRestauRepository.save(type));
} }
@DeleteMapping(value = "/delete-type/{id}") @DeleteMapping(value = "/delete-type/{id}")
@PreAuthorize("hasRole('ROLE_ADMIN')")
public void suppressionType(@PathVariable int id){ public void suppressionType(@PathVariable int id){
typeRestauRepository.deleteById(id); typeRestauRepository.deleteById(id);

View File

@ -0,0 +1,21 @@
package fr.cardon.simpleat.dto;
/**
* Classe spécifique DTO (Data Transfer Object) qui retourne un Jeton au format JSON (REST response)
*
*/
public class JsonWebToken {
private final String token;
public JsonWebToken(String token) {
this.token = token;
}
public String getToken() {
return token;
}
}

View File

@ -0,0 +1,36 @@
package fr.cardon.simpleat.dto;
import java.util.List;
import com.sun.istack.NotNull;
/**
* Specifique : AppUser DTO permet de renvoyer un User sans le mot de passe (REST response).
*/
public class PersonneDto {
private Long id;
private String email;
public PersonneDto() { }
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}

View File

@ -0,0 +1,15 @@
package fr.cardon.simpleat.exception;
/**
* Classe personnalisée pour gérer un message si l'utilisateur (User) existe en Base de données
*/
public class ExistingUsernameException extends Exception {
private static final long serialVersionUID = 1L;
@Override
public String getMessage()
{
return "Désolé, l'utilisateur existe déjà en Base de données !";
}
}

View File

@ -0,0 +1,15 @@
package fr.cardon.simpleat.exception;
/**
* Specific exception that should be thrown when user credentials are not valid.
*/
public class InvalidCredentialsException extends Exception {
private static final long serialVersionUID = -6483691380297851921L;
@Override
public String getMessage()
{
return "L'accréditation est invalide !";
}
}

View File

@ -0,0 +1,16 @@
package fr.cardon.simpleat.exception;
/**
* Specific exception that should be thrown when a JWT has an invalid format.
*/
public class InvalidJWTException extends Exception {
private static final long serialVersionUID = -6546999838071338632L;
@Override
public String getMessage()
{
return "Le format JWT est invalide !";
}
}

View File

@ -0,0 +1,14 @@
package fr.cardon.simpleat.model;
import org.springframework.security.core.GrantedAuthority;
public enum EnumRole implements GrantedAuthority {
ROLE_ADMIN, ROLE_READER;
@Override
public String getAuthority() {
return name();
}
}

View File

@ -3,18 +3,28 @@ package fr.cardon.simpleat.model;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Column; import javax.persistence.Column;
import javax.persistence.ElementCollection;
import javax.persistence.Entity; import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue; import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType; import javax.persistence.GenerationType;
import javax.persistence.Id; import javax.persistence.Id;
import javax.persistence.JoinColumn; import javax.persistence.JoinColumn;
import javax.persistence.JoinTable; import javax.persistence.JoinTable;
import javax.persistence.ManyToMany; import javax.persistence.ManyToMany;
import javax.persistence.OneToMany;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
@Entity @Entity
public class Personne { public class Personne {
@ -23,7 +33,8 @@ public class Personne {
private String prenom; private String prenom;
private String email; private String email;
private String password; private String password;
private Collection<Role> roles = new ArrayList<Role>(); private Collection<Preference> preference = new ArrayList<Preference>();
private List<EnumRole> roleList;
public Personne() { public Personne() {
@ -31,6 +42,30 @@ public class Personne {
// TODO Auto-generated constructor stub // TODO Auto-generated constructor stub
} }
public Personne(String nom, String prenom, String email, String password, List<EnumRole> roleList) {
super();
this.nom = nom;
this.prenom = prenom;
this.email = email;
this.password = password;
this.roleList = roleList;
}
public Personne(String email, String password, List<EnumRole> roleList) {
super();
this.email = email;
this.password = password;
this.roleList = roleList;
}
public Personne(String nom, String prenom, String email, String password) { public Personne(String nom, String prenom, String email, String password) {
super(); super();
@ -42,16 +77,6 @@ public class Personne {
public Personne(String nom, String prenom, String email, String password, Collection<Role> roles) {
super();
this.nom = nom;
this.prenom = prenom;
this.email = email;
this.password = password;
this.roles = roles;
}
@Id @Id
@GeneratedValue(strategy = GenerationType.IDENTITY) @GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id_personne") @Column(name = "id_personne")
@ -93,18 +118,30 @@ public class Personne {
public void setPassword(String password) { public void setPassword(String password) {
this.password = password; this.password = password;
} }
@ManyToMany @OneToMany(mappedBy = "preferencePK.personne", cascade = CascadeType.REMOVE)
@JoinTable(name="role_personne", //@JsonIgnore
joinColumns = @JoinColumn(name = "id_perso"/*nom créé dans table asso*/,referencedColumnName = "id_personne" /*classe en cours*/) ) public Collection<Preference> getPreference() {
@JsonIgnoreProperties("roles") return preference;
public Collection<Role> getRoles() {
return roles;
} }
public void setRoles(Collection<Role> roles) { public void setPreference(Collection<Preference> preference) {
this.roles = roles; this.preference = preference;
} }
@ElementCollection(fetch = FetchType.EAGER)
@Enumerated(EnumType.STRING)
public List<EnumRole> getRoleList() {
return roleList;
}
public void setRoleList(List<EnumRole> roleList) {
this.roleList = roleList;
}
} }

View File

@ -19,6 +19,13 @@ public class Preference {
} }
public Preference(PreferencePK preferencePK) {
super();
this.preferencePK = preferencePK;
}
public Preference(PreferencePK preferencePK, int note, boolean favoris) { public Preference(PreferencePK preferencePK, int note, boolean favoris) {
super(); super();
this.preferencePK = preferencePK; this.preferencePK = preferencePK;
@ -51,4 +58,4 @@ public class Preference {
} }

View File

@ -8,7 +8,10 @@ import javax.persistence.Embeddable;
import javax.persistence.FetchType; import javax.persistence.FetchType;
import javax.persistence.JoinColumn; import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne; import javax.persistence.ManyToOne;
import javax.persistence.PrimaryKeyJoinColumn;
import com.fasterxml.jackson.annotation.JsonBackReference;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
@ -37,8 +40,8 @@ public class PreferencePK implements Serializable {
@ManyToOne @ManyToOne
@JoinColumn(name="id_personne", referencedColumnName ="id_personne" ) @PrimaryKeyJoinColumn(name="id_personne", referencedColumnName ="id_personne" )
@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"}) @JsonBackReference("personne")
public Personne getPersonne() { public Personne getPersonne() {
return personne; return personne;
} }
@ -50,7 +53,7 @@ public class PreferencePK implements Serializable {
@ManyToOne // TODO mappedBy preferences dans restaurant @ManyToOne // TODO mappedBy preferences dans restaurant
@JoinColumn(name="id_restau",referencedColumnName ="id_restau" ) @PrimaryKeyJoinColumn(name="id_restau",referencedColumnName ="id_restau" )
@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"}) @JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
public Restaurant getRestau() { public Restaurant getRestau() {
return restau; return restau;
@ -63,4 +66,4 @@ public class PreferencePK implements Serializable {
} }

View File

@ -12,8 +12,9 @@ import javax.persistence.Id;
import javax.persistence.JoinColumn; import javax.persistence.JoinColumn;
import javax.persistence.JoinTable; import javax.persistence.JoinTable;
import javax.persistence.ManyToMany; import javax.persistence.ManyToMany;
import javax.persistence.OneToMany;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonIgnore;
@Entity @Entity
@ -23,25 +24,22 @@ public class Restaurant {
private String nom; private String nom;
private String adresse; private String adresse;
private String telephone; private String telephone;
private boolean aEmporter; private Boolean aEmporter;
private boolean surPlace; private Boolean surPlace;
private double prix; private Integer prix;
private boolean accesPMR; private Boolean accesPMR;
private String latitude; private String latitude;
private String longitude; private String longitude;
private String website; private String website;
private Collection<TypeRestau> typerestaus = new ArrayList<TypeRestau>(); private Collection<TypeRestau> typerestaus = new ArrayList<TypeRestau>();
private Collection<Preference> preference = new ArrayList<Preference>();
//TODO @OneToMany relier avec une collec de preferences
public Restaurant() { public Restaurant() {
super(); super();
// TODO Auto-generated constructor stub // TODO Auto-generated constructor stub
} }
public Restaurant(String nom, String adresse, String telephone, boolean aEmporter, boolean surPlace, double prix, public Restaurant(String nom, String adresse, String telephone, Boolean aEmporter, Boolean surPlace, int prix,
boolean accesPMR, String latitude, String longitude, String website, Collection<TypeRestau> typerestaus) { Boolean accesPMR, String latitude, String longitude, String website, Collection<TypeRestau> typerestaus) {
super(); super();
this.nom = nom; this.nom = nom;
this.adresse = adresse; this.adresse = adresse;
@ -89,31 +87,31 @@ public class Restaurant {
this.telephone = telephone; this.telephone = telephone;
} }
@Column(nullable = true) @Column(nullable = true)
public boolean isaEmporter() { public Boolean isaEmporter() {
return aEmporter; return aEmporter;
} }
public void setaEmporter(boolean aEmporter) { public void setaEmporter(Boolean aEmporter) {
this.aEmporter = aEmporter; this.aEmporter = aEmporter;
} }
@Column(nullable = true) @Column(nullable = true)
public boolean isSurPlace() { public Boolean isSurPlace() {
return surPlace; return surPlace;
} }
public void setSurPlace(boolean surPlace) { public void setSurPlace(Boolean surPlace) {
this.surPlace = surPlace; this.surPlace = surPlace;
} }
@Column(nullable = true) @Column(nullable = true)
public double getPrix() { public Integer getPrix() {
return prix; return prix;
} }
public void setPrix(double prixMin) { public void setPrix(Integer prix) {
this.prix = prixMin; this.prix = prix;
} }
@Column(nullable = true) @Column(nullable = true)
public boolean isAccesPMR() { public Boolean isAccesPMR() {
return accesPMR; return accesPMR;
} }
public void setAccesPMR(boolean accesPMR) { public void setAccesPMR(Boolean accesPMR) {
this.accesPMR = accesPMR; this.accesPMR = accesPMR;
} }
@Column(nullable = false) @Column(nullable = false)
@ -142,7 +140,6 @@ public class Restaurant {
@JoinTable(name="type_restau", @JoinTable(name="type_restau",
joinColumns = @JoinColumn(name = "id_restau"/*classe en cours*/,referencedColumnName = "id_restau" /*classe reliée*/) , joinColumns = @JoinColumn(name = "id_restau"/*classe en cours*/,referencedColumnName = "id_restau" /*classe reliée*/) ,
inverseJoinColumns = @JoinColumn(name = "id_type",referencedColumnName = "id_type")) inverseJoinColumns = @JoinColumn(name = "id_type",referencedColumnName = "id_type"))
@JsonIgnoreProperties("typerestaus")
public Collection<TypeRestau> getTyperestaus() { public Collection<TypeRestau> getTyperestaus() {
return typerestaus; return typerestaus;
} }
@ -150,5 +147,15 @@ public class Restaurant {
public void setTyperestaus(Collection<TypeRestau> typerestaus) { public void setTyperestaus(Collection<TypeRestau> typerestaus) {
this.typerestaus = typerestaus; this.typerestaus = typerestaus;
} }
@OneToMany(mappedBy = "preferencePK.restau", cascade = CascadeType.REMOVE)
@JsonIgnore
public Collection<Preference> getPreference() {
return preference;
}
public void setPreference(Collection<Preference> preference) {
this.preference = preference;
}
} }

View File

@ -1,41 +0,0 @@
package fr.cardon.simpleat.model;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
@Entity
public class Role {
private int id;
private String intitule;
public Role() {
super();
// TODO Auto-generated constructor stub
}
public Role(int id, String intitule) {
super();
this.id = id;
this.intitule = intitule;
}
@Id
@Column(name = "id_role")
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@Column(nullable = false)
public String getIntitule() {
return intitule;
}
public void setIntitule(String intitule) {
this.intitule = intitule;
}
}

View File

@ -10,7 +10,7 @@ import javax.persistence.Id;
import javax.persistence.ManyToMany; import javax.persistence.ManyToMany;
import javax.persistence.Table; import javax.persistence.Table;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonBackReference;
@Entity @Entity
@ -49,7 +49,7 @@ public class TypeRestau {
} }
@ManyToMany(mappedBy="typerestaus") @ManyToMany(mappedBy="typerestaus")
@JsonIgnoreProperties("typerestaus") @JsonBackReference("restaurants")
public List<Restaurant> getRestaurants() { public List<Restaurant> getRestaurants() {
return restaurants; return restaurants;
} }

View File

@ -1,5 +1,7 @@
package fr.cardon.simpleat.repository; package fr.cardon.simpleat.repository;
import java.util.Optional;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
@ -9,5 +11,11 @@ import fr.cardon.simpleat.model.Personne;
public interface PersonneRepository extends JpaRepository<Personne, Integer> { public interface PersonneRepository extends JpaRepository<Personne, Integer> {
Personne findById(int id); Personne findById(int id);
Optional<Personne> findByEmail(String email);
boolean existsByEmail(String email);
} }

View File

@ -1,16 +0,0 @@
package fr.cardon.simpleat.repository;
import java.util.Collection;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import fr.cardon.simpleat.model.Role;
@Repository
public interface RoleRepository extends JpaRepository<Role, Integer> {
Collection<Role> findCollectionById(int id);
}

View File

@ -0,0 +1,47 @@
package fr.cardon.simpleat.security;
import java.io.IOException;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.http.HttpStatus;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.web.filter.OncePerRequestFilter;
import fr.cardon.simpleat.exception.InvalidJWTException;
/**
* Filtre specifique en charge d'analyser la requête HTTP qui arrive vers notre Serveur et qui doit
* contenir un JWT valide.
*/
public class JwtTokenFilter extends OncePerRequestFilter {
private JwtTokenProvider jwtTokenProvider;
public JwtTokenFilter(JwtTokenProvider jwtTokenProvider) {
this.jwtTokenProvider = jwtTokenProvider;
}
@Override
protected void doFilterInternal(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, FilterChain filterChain) throws ServletException, IOException {
String token = jwtTokenProvider.resolveToken(httpServletRequest);
try {
if (token != null && jwtTokenProvider.validateToken(token)) {
Authentication auth = jwtTokenProvider.getAuthentication(token);
SecurityContextHolder.getContext().setAuthentication(auth);
}
} catch (InvalidJWTException ex) {
// permet de garantir que le AppUser n'est pas authentifié
SecurityContextHolder.clearContext();
httpServletResponse.sendError(HttpStatus.BAD_REQUEST.value(), "JWT invalide !");
return;
}
filterChain.doFilter(httpServletRequest, httpServletResponse);
}
}

View File

@ -0,0 +1,189 @@
package fr.cardon.simpleat.security;
import java.util.Base64;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
import javax.annotation.PostConstruct;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.stereotype.Component;
import com.fasterxml.jackson.core.JsonProcessingException;
import fr.cardon.simpleat.exception.InvalidJWTException;
import fr.cardon.simpleat.model.EnumRole;
import fr.cardon.simpleat.repository.PersonneRepository;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.JwtException;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
/**
* JWT : classe utilitaire chargée de fournir le Jeton (Token) et les vérifications
*/
@Component
public class JwtTokenProvider {
// on récupère le secret dans notre fichier application.properties
@Value("${security.jwt.token.secret-key:secret-key}")
private String secretKey;
// ici on met la valeur par défaut
@Value("${security.jwt.token.expire-length:3600000}")
private long validityInMilliseconds = 3600000; // 1h pour être pénard
@Autowired
private UserDetailsService userDetailsService;
@Autowired
private PersonneRepository personneRepository;
/**
* Cette méthode d'initialisation s'exécute avant le constructeur
* Elle encode notre code secret en base64 pour la transmission dans le header
*/
@PostConstruct
protected void init() {
secretKey = Base64.getEncoder().encodeToString(secretKey.getBytes());
}
/**
* Methode qui crée le Token avec :
* username comme un champ "sub",
* User Role comme champ "auth"
* "iat" comme date du jour ,
* "exp" as now date + validity time.
* claims = les droits
struture :
HEADER : Algo + Type de Token
{
"alg": "HS256",
"typ": "JWT"
}
PAYLOAD : data
{
"sub": "pbouget",
"auth": [
"ROLE_ADMIN",
"ROLE_CREATOR",
"ROLE_READER"
],
"iat": 1589817421,
"exp": 1589821021
}
Signature :
Signature avec code secret :
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
03888dd6ceb88c3fee410a70802fb93d483fd52d70349d8f7e7581ae346cf658
)
JWT génèrer avec cette info :
header = eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.
payload = eyJzdWIiOiJwYm91Z2V0IiwiYXV0aCI6WyJST0xFX0FETUlOIiwiUk9MRV9DUkVBVE9SIiwiUk9MRV9SRUFERVIiXSwiaWF0IjoxNTg5ODE3NDIxLCJleHAiOjE1ODk4MjEwMjF9.
signature = lrKQIkrCzNMwzTN-hs_EdoYYxrb59sAlku7nmaml0vk
vérifier sur https://jwt.io
* @param username the user username.
* @param roles the user roles.
* @return the created JWT as String.
* @throws JsonProcessingException
*/
public String createToken(String email, List<EnumRole> roleList){
Claims claims = Jwts.claims().setSubject(email);
claims.put("userId", personneRepository.findByEmail(email).get().getId());
claims.put("auth", roleList.stream().map(s -> new SimpleGrantedAuthority(s.getAuthority())).filter(Objects::nonNull).collect(Collectors.toList()));
System.out.println("claims = "+claims);
// claims = {sub=pbouget, auth=[ROLE_ADMIN, ROLE_CREATOR, ROLE_READER]}
Date now = new Date();
Date validity = new Date(now.getTime() + validityInMilliseconds);
String leToken = Jwts.builder()//
.setClaims(claims)// le username avec les roles ou setPayload()
.setIssuedAt(now)// 1589817421 pour le 18 mai 2020 à 17 heure 57
.setExpiration(validity)// 1589821021 même date avec 1 heure de plus
.signWith(SignatureAlgorithm.HS256, secretKey) // la signature avec la clef secrête.
.compact(); // concatène l'ensemble pour construire une chaîne
System.out.println(leToken); // pour test cela donne ceci
/*
site pour convertir une date en millisecondes : http://timestamp.fr/?
site structure du jeton : https://www.vaadata.com/blog/fr/jetons-jwt-et-securite-principes-et-cas-dutilisation/
site jwt encoder / décoder : https://jwt.io/
eyJhbGciOiJIUzI1NiJ9.
eyJzdWIiOiJwYm91Z2V0IiwiYXV0aCI6W3siYXV0aG9yaXR5IjoiUk9MRV9BRE1JTiJ9LHsiYXV0aG9yaXR5IjoiUk9MRV9DUkVBVE9SIn0seyJhdXRob3JpdHkiOiJST0xFX1JFQURFUiJ9XSwiaWF0IjoxNTg5ODE2OTIyLCJleHAiOjE1ODk4MjA1MjJ9.
Cn4_UTjZ2UpJ32FVT3Bd1-VN8K62DVBHQbWiK6MNZ04
*/
// https://www.codeflow.site/fr/article/java__how-to-convert-java-object-to-from-json-jackson
return leToken;
}
/**
* Methode qui retourne un objet Authentication basé sur JWT.
* @param token : le token pour l'authentification.
* @return the authentication si Username est trouvé.
*/
public Authentication getAuthentication(String token) {
UserDetails userDetails = userDetailsService.loadUserByUsername(getUsername(token));
return new UsernamePasswordAuthenticationToken(userDetails, "", userDetails.getAuthorities());
}
/**
* Methode qui extrait le userName du JWT.
* @param token : Token a analyser.
* @return le UserName comme chaîne de caractères.
*/
public String getUsername(String token) {
return Jwts.parser().setSigningKey(secretKey).parseClaimsJws(token).getBody().getSubject();
}
/**
* Méthode qui récupère la requete HTTP.
* L'entête doit contenir un champ d'autorisation ou JWT ajoute le token après le mot clef Bearer.
* @param requete : la requête à tester.
* @return le JWT depuis l'entête HTTP.
*/
public String resolveToken(HttpServletRequest requeteHttp) {
String bearerToken = requeteHttp.getHeader("Authorization");
if (bearerToken != null && bearerToken.startsWith("Bearer ")) {
return bearerToken.substring(7);
}
return null;
}
/**
* Methode qui v<EFBFBD>rifie que JWT est valide.
* La signature doit <EFBFBD>tre correcte et la dur<EFBFBD>e de validit<EFBFBD> du Token doit <EFBFBD>tre apr<EFBFBD>s "now" (maintenant)
* @param token : Token <EFBFBD> valider
* @return True si le Token est valide sinon on lance l'exception InvalidJWTException.
* @throws InvalidJWTException
*/
public boolean validateToken(String token) throws InvalidJWTException {
try {
Jwts.parser().setSigningKey(secretKey).parseClaimsJws(token);
return true;
} catch (JwtException | IllegalArgumentException e) {
throw new InvalidJWTException();
}
}
}

View File

@ -0,0 +1,78 @@
package fr.cardon.simpleat.security;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.config.BeanIds;
import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.builders.WebSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.config.http.SessionCreationPolicy;
import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
/**
* Configuration de Sécurité globale pour notre REST API.
*/
@Configuration
@EnableGlobalMethodSecurity(prePostEnabled = true)
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private JwtTokenProvider jwtTokenProvider;
@Bean(name = BeanIds.AUTHENTICATION_MANAGER)
@Override
public AuthenticationManager authenticationManagerBean() throws Exception {
return super.authenticationManagerBean();
}
/**
* Methode qui configure la sécurité HTTP.
* @param http the HttpSecurity object to configure.
* @throws Exception
*/
@Override
protected void configure(HttpSecurity http) throws Exception {
// Disable CSRF (Cross Site Request Forgery comme votre Token sera stocké dans le session storage)
http.cors();
http.csrf().disable()
.sessionManagement()
// Les sessions sont sans états et non créés ni utilisées par Spring security
.sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
// nos endpoints (points d'entrée de notre API)
.authorizeRequests()
// .anyRequest().authenticated()
.antMatchers("/v2/api-docs", "/configuration/**", "/swagger*/**", "/webjars/**")
.permitAll()
.antMatchers("**").permitAll() // se connecter
.antMatchers("**").permitAll() // s'inscrire
.antMatchers("api/user/all").hasAuthority("ROLE_ADMIN") // que pour le rôle admin
.antMatchers("/v2/api-docs", "/webjars/**", "/swagger-resources/**", "/configuration/**", "/swagger-ui.html/**").permitAll()
// .antMatchers("/api/admin/**").hasAuthority("ROLE_ADMIN") // que pour le rôle admin
// on désactive le reste...
.anyRequest().authenticated(); // tout le reste est autorisé.
// Appliquer JWT
http.addFilterBefore(new JwtTokenFilter(jwtTokenProvider), UsernamePasswordAuthenticationFilter.class);
}
/**
* Methode qui configure la sécurité web.
* Utilisé pour interdire l'accès à certains répertoires.
* @param web : WebSecurity
* @throws Exception
*/
@Override
public void configure(WebSecurity web) throws Exception {
web.ignoring().antMatchers("/resources/**");
}
}

View File

@ -0,0 +1,48 @@
package fr.cardon.simpleat.service;
import java.util.List;
import java.util.Optional;
import org.springframework.stereotype.Service;
import fr.cardon.simpleat.exception.ExistingUsernameException;
import fr.cardon.simpleat.exception.InvalidCredentialsException;
import fr.cardon.simpleat.model.Personne;
@Service
public interface PersonneService {
/**
* Methode qui permet à un utilisateur de se connecter.
* @param email : mail de l'utilisateur.
* @param password : mot de passe de l'utilisateur.
* @returnun JWT si credentials est valide, throws InvalidCredentialsException otherwise.
* @throws InvalidCredentialsException
*/
String signin(String email, String password) throws InvalidCredentialsException;
/**
* Methode qui permet de s'inscrire.
* @param user nouvel utilisateur.
* @return un JWT si user n'existe pas déjà !
* @throws ExistingUsernameException
*/
String signup(Personne personne) throws ExistingUsernameException;
/**
* Methode qui retourne tous les utilisateurs de la bd
* @return the list of all application users.
*/
List<Personne> findAllUsers();
/**
* Methode qui retourne un utilisateur à partir de son username
* @param username the username to look for.
* @return an Optional object containing user if found, empty otherwise.
*/
Optional<Personne> findUserByEmail(String email);
}

View File

@ -0,0 +1,75 @@
package fr.cardon.simpleat.service;
import java.util.List;
import java.util.Optional;
import org.hibernate.internal.build.AllowSysOut;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.AuthenticationException;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.Service;
import fr.cardon.simpleat.exception.ExistingUsernameException;
import fr.cardon.simpleat.exception.InvalidCredentialsException;
import fr.cardon.simpleat.model.Personne;
import fr.cardon.simpleat.repository.PersonneRepository;
import fr.cardon.simpleat.security.JwtTokenProvider;
@Service
public class PersonneServiceImpl implements PersonneService {
@Autowired
private PersonneRepository personneRepository; // permet communication avec la BD
@Autowired
private BCryptPasswordEncoder passwordEncoder; // permet l'encodage du mot de passe
@Autowired
private JwtTokenProvider jwtTokenProvider; // permet la fourniture du Jeton (Token)
@Autowired
private AuthenticationManager authenticationManager; // gestionnaire d'authentification
/**
* Permet de se connecter en encodant le mot de passe avec génération du token.
*/
@Override
public String signin(String email, String password) throws InvalidCredentialsException {
try {
authenticationManager.authenticate(new UsernamePasswordAuthenticationToken(email, password));
return jwtTokenProvider.createToken(email, personneRepository.findByEmail(email).get().getRoleList());
} catch (AuthenticationException e) {
throw new InvalidCredentialsException();
}
}
@Override
public String signup(Personne personne) throws ExistingUsernameException {
System.out.println(personne .getNom());
if (!personneRepository.existsByEmail(personne.getEmail())) {
System.out.println(personne .getEmail());
Personne personneToSave = new Personne(personne.getNom(),personne.getPrenom(),personne.getEmail(), passwordEncoder.encode(personne.getPassword()), personne.getRoleList());
personneRepository.save(personneToSave);
return jwtTokenProvider.createToken(personne.getEmail(), personne.getRoleList());
} else {
throw new ExistingUsernameException();
}
}
@Override
public List<Personne> findAllUsers() {
return personneRepository.findAll();
}
@Override
public Optional<Personne> findUserByEmail(String email) {
return personneRepository.findByEmail(email);
}
}

View File

@ -0,0 +1,42 @@
package fr.cardon.simpleat.service;
import java.util.Optional;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.stereotype.Service;
import fr.cardon.simpleat.model.Personne;
import fr.cardon.simpleat.repository.PersonneRepository;
@Service
public class UserDetailsServiceImpl implements UserDetailsService {
@Autowired
private PersonneRepository personneRepository;
@Override
public UserDetails loadUserByUsername(String email) {
final Optional<Personne> personne = personneRepository.findByEmail(email);
if (!personne.isPresent()) {
throw new UsernameNotFoundException("utilisateur '" + email + "' introuvable");
}
return User
.withUsername(email)
.password(personne.get().getPassword())
.authorities(personne.get().getRoleList())
.accountExpired(false)
.accountLocked(false)
.credentialsExpired(false)
.disabled(false)
.build();
}
}

View File

@ -0,0 +1,619 @@
{
"info": {
"_postman_id": "5edbac98-7561-4ccc-b517-87c01aef2a41",
"name": "Simpleat",
"schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
},
"item": [
{
"name": "Personne",
"item": [
{
"name": "Accueil",
"protocolProfileBehavior": {
"disableBodyPruning": true
},
"request": {
"method": "GET",
"header": [],
"body": {
"mode": "formdata",
"formdata": []
},
"url": {
"raw": "localhost:8080/",
"host": [
"localhost"
],
"port": "8080",
"path": [
""
]
}
},
"response": []
},
{
"name": "affichPersonnes",
"request": {
"method": "GET",
"header": [],
"url": {
"raw": "localhost:8080/users",
"host": [
"localhost"
],
"port": "8080",
"path": [
"users"
]
}
},
"response": []
},
{
"name": "AffichUnePersonne",
"request": {
"method": "GET",
"header": [],
"url": {
"raw": "localhost:8080/user/2",
"host": [
"localhost"
],
"port": "8080",
"path": [
"user",
"2"
]
}
},
"response": []
},
{
"name": "AjoutPersonne",
"request": {
"method": "POST",
"header": [],
"body": {
"mode": "raw",
"raw": "{\r\n \"nom\": \"Cardon\",\r\n \"prenom\": \"Thomas\",\r\n \"email\": \"thomas.cardon@gmail.com\",\r\n \"password\": \"SimplonTC\",\r\n \"roleList\": [\"ROLE_ADMIN\"]\r\n \r\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "http://localhost:8080/add-user",
"protocol": "http",
"host": [
"localhost"
],
"port": "8080",
"path": [
"add-user"
]
}
},
"response": []
},
{
"name": "UpdatePersonne",
"request": {
"method": "PUT",
"header": [],
"body": {
"mode": "raw",
"raw": "{\r\n \"id\": 2,\r\n \"nom\": \"salut\",\r\n \"prenom\": \"enleve\",\r\n \"email\": \"nouvel@ajout.fr\",\r\n \"password\": \"root\"\r\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "http://localhost:8080/update-user/2",
"protocol": "http",
"host": [
"localhost"
],
"port": "8080",
"path": [
"update-user",
"2"
]
}
},
"response": []
},
{
"name": "DeletePersonne",
"request": {
"method": "DELETE",
"header": [],
"url": {
"raw": "localhost:8080/delete-user/1",
"host": [
"localhost"
],
"port": "8080",
"path": [
"delete-user",
"1"
]
}
},
"response": []
},
{
"name": "Sign-up",
"request": {
"method": "POST",
"header": [],
"body": {
"mode": "raw",
"raw": "{\r\n \"nom\": \"Cardon\",\r\n \"prenom\": \"Thomas\",\r\n \"email\": \"thomas.cardon@gmail.com\",\r\n \"password\": \"SimplonTC\",\r\n \"roleList\": [\"ROLE_ADMIN\"]\r\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "localhost:8080/sign-up",
"host": [
"localhost"
],
"port": "8080",
"path": [
"sign-up"
]
}
},
"response": []
},
{
"name": "Sign-in",
"request": {
"method": "POST",
"header": [],
"body": {
"mode": "raw",
"raw": "{\r\n \"email\": \"thomas.cardon@gmail.com\",\r\n \"password\": \"SimplonTC\"\r\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "localhost:8080/signin",
"host": [
"localhost"
],
"port": "8080",
"path": [
"signin"
]
}
},
"response": []
}
]
},
{
"name": "Preference",
"item": [
{
"name": "AffichPreference",
"protocolProfileBehavior": {
"disableBodyPruning": true
},
"request": {
"method": "GET",
"header": [],
"body": {
"mode": "raw",
"raw": "",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "localhost:8080/preference/1/3",
"host": [
"localhost"
],
"port": "8080",
"path": [
"preference",
"1",
"3"
]
}
},
"response": []
},
{
"name": "AffichPreferences",
"request": {
"method": "GET",
"header": [],
"url": {
"raw": "localhost:8080/preferences",
"host": [
"localhost"
],
"port": "8080",
"path": [
"preferences"
]
}
},
"response": []
},
{
"name": "Ajout preferences",
"request": {
"method": "POST",
"header": [],
"body": {
"mode": "raw",
"raw": "{\r\n \"preferencePK\":{\r\n \"personne\": {\r\n \"id\": 1\r\n },\r\n \"restau\": {\r\n \"id\": 1\r\n }},\r\n \"note\": 5,\r\n \"favoris\": true\r\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "localhost:8080/add-preference",
"host": [
"localhost"
],
"port": "8080",
"path": [
"add-preference"
]
}
},
"response": []
},
{
"name": "Delete preferences",
"request": {
"method": "DELETE",
"header": [],
"url": {
"raw": "localhost:8080/delete-preference/:iduser/:idrestau",
"host": [
"localhost"
],
"port": "8080",
"path": [
"delete-preference",
":iduser",
":idrestau"
],
"variable": [
{
"key": "iduser",
"value": "1"
},
{
"key": "idrestau",
"value": null
}
]
}
},
"response": []
},
{
"name": "Del prefByRestau[OUT]",
"request": {
"method": "DELETE",
"header": [],
"url": {
"raw": "localhost:8080/delete-pref-byrestau/3",
"host": [
"localhost"
],
"port": "8080",
"path": [
"delete-pref-byrestau",
"3"
]
}
},
"response": []
}
]
},
{
"name": "Restaurant",
"item": [
{
"name": "AffichRestaurants",
"request": {
"method": "GET",
"header": [],
"url": {
"raw": "localhost:8080/restaurants",
"host": [
"localhost"
],
"port": "8080",
"path": [
"restaurants"
]
}
},
"response": []
},
{
"name": "AfficheUnRestaurant",
"request": {
"method": "GET",
"header": [],
"url": {
"raw": "localhost:8080/restaurant/2",
"host": [
"localhost"
],
"port": "8080",
"path": [
"restaurant",
"2"
]
}
},
"response": []
},
{
"name": "AfficheRestoParType",
"request": {
"method": "GET",
"header": [],
"url": {
"raw": "localhost:8080/restaurantbytype/1",
"host": [
"localhost"
],
"port": "8080",
"path": [
"restaurantbytype",
"1"
]
}
},
"response": []
},
{
"name": "New Request",
"request": {
"method": "GET",
"header": []
},
"response": []
},
{
"name": "AjoutRestaurant",
"request": {
"method": "POST",
"header": [],
"body": {
"mode": "raw",
"raw": " {\r\n \"nom\": \"gevaudan\",\r\n \"adresse\": \"Montreil\",\r\n \"latitude\": \"31.45571\",\r\n \"longitude\": \"34.43719\",\r\n \"typerestaus\": [\r\n {\r\n \"id\": 3\r\n },\r\n {\r\n \"id\": 4\r\n }\r\n ]\r\n }",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "http://localhost:8080/add-restaurant",
"protocol": "http",
"host": [
"localhost"
],
"port": "8080",
"path": [
"add-restaurant"
]
}
},
"response": []
},
{
"name": "UpdateRestaurant",
"request": {
"method": "PUT",
"header": [],
"body": {
"mode": "raw",
"raw": " {\r\n \"id\": 2,\r\n \"nom\": \"suepr\",\r\n \"adresse\": \"93100 Montreuil\",\r\n \"telephone\": \"6809964349\",\r\n \"aEmporter\": false,\r\n \"surPlace\": true,\r\n \"prixMin\": 1.0,\r\n \"prixMax\": 17.0,\r\n \"accesPMR\": false,\r\n \"latitude\": \"31.45571\",\r\n \"longitude\": \"34.43719\",\r\n \"typerestaus\": []\r\n }",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "http://localhost:8080/update-restaurant/2",
"protocol": "http",
"host": [
"localhost"
],
"port": "8080",
"path": [
"update-restaurant",
"2"
]
}
},
"response": []
},
{
"name": "DeleteRestaurant",
"request": {
"method": "DELETE",
"header": [],
"url": {
"raw": "localhost:8080/delete-restaurant/4",
"host": [
"localhost"
],
"port": "8080",
"path": [
"delete-restaurant",
"4"
]
}
},
"response": []
}
]
},
{
"name": "Type",
"item": [
{
"name": "AffichTypes",
"request": {
"method": "GET",
"header": [],
"url": {
"raw": "localhost:8080/types",
"host": [
"localhost"
],
"port": "8080",
"path": [
"types"
]
}
},
"response": []
},
{
"name": "Affich1Type",
"request": {
"method": "GET",
"header": [],
"url": {
"raw": "localhost:8080/type/2",
"host": [
"localhost"
],
"port": "8080",
"path": [
"type",
"2"
]
}
},
"response": []
},
{
"name": "UpdateType",
"request": {
"method": "PUT",
"header": [],
"body": {
"mode": "raw",
"raw": "{\r\n \"id\": 2,\r\n \"libelle\": \"creperie\"\r\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "localhost:8080/update-type/2",
"host": [
"localhost"
],
"port": "8080",
"path": [
"update-type",
"2"
]
}
},
"response": []
},
{
"name": "AddType",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
""
],
"type": "text/javascript"
}
}
],
"request": {
"method": "POST",
"header": [],
"body": {
"mode": "raw",
"raw": "{\r\n \"libelle\": \"coucou\"\r\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "localhost:8080/add-type",
"host": [
"localhost"
],
"port": "8080",
"path": [
"add-type"
]
}
},
"response": []
},
{
"name": "DeleteType",
"request": {
"method": "DELETE",
"header": [],
"body": {
"mode": "raw",
"raw": ""
},
"url": {
"raw": "localhost:8080/delete-type/:id",
"host": [
"localhost"
],
"port": "8080",
"path": [
"delete-type",
":id"
],
"variable": [
{
"key": "id",
"value": "2"
}
]
}
},
"response": []
}
]
}
]
}

View File

@ -1,3 +1,8 @@
#security.jwt.token.secret-key=03888dd6ceb88c3fee410a70802fb93d483fd52d70349d8f7e7581ae346cf658
security.jwt.token.secret-key=simpleat
spring.main.allow-circular-references=true
# pour comprendre le but de cette ligne ci-dessus : https://www.baeldung.com/circular-dependencies-in-spring
# ===============================
# =============================== # ===============================
# base de données MySQL # base de données MySQL
# =============================== # ===============================
@ -13,10 +18,11 @@ spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# JPA / HIBERNATE # JPA / HIBERNATE
# =============================== # ===============================
spring.jpa.show-sql=true spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=update ##spring.jpa.hibernate.ddl-auto=update
##spring.jpa.hibernate.ddl-auto=create-drop spring.jpa.hibernate.ddl-auto=create-drop
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5InnoDBDialect spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5InnoDBDialect
# =============================== # ===============================
# Permet d'exécuter le data.sql # Permet d'exécuter le data.sql
# =============================== # ===============================
##spring.sql.init.mode=always spring.sql.init.mode=always
spring.jpa.defer-datasource-initialization=true

View File

@ -1,38 +1,109 @@
insert into personne (nom, prenom, email, password) values ('Cardon', 'Thomas', 'thomas.cardon@gmail.com', '$2a$10$724bLjLyGOEKTBbHy.s3C.ETc.HuBnhEoCOuoO7.Ts7kyPbz6hkme');
insert into personne (nom, prenom, email, password) values ('Ramiere', 'Vincent', 'vincent.ramiere@gmail.com', '$2a$10$x6.VyO9PCMXSPsi5/m/Hze9xOP.IUdYbaye7cNFc.PfyuRuVLbG7e');
insert into personne (nom, prenom, email, password) values ('Verger', 'Romain', 'romain.verger@gmail.com', '$2a$10$oe/h0ZDpi6xFmTj8CvDMDe13hoEGv0DhHziY7GUatbb9ETcRw/8RG');
insert into personne (nom, prenom, email, password) values ('Ribardiere', 'Paul-Emmanuel', 'paul.ribardiere@gmail.com', '$2a$10$ArSe7TSUapTs9oGE8824fOv4PM6NJwu7mzcg72cSmHy0.ds585Oke');
insert into personne (nom, prenom, email, password) values ('Noris', 'William', 'william.noris@gmail.com', '$2a$10$6UbvPYBR2Ql09M1kgK0.HuoX3X1gxScmaOxI242EB2U7cXiylX3z.');
insert into personne (nom, prenom, email, password) values ('Harmand', 'Isabelle', 'isabelle.harmand@gmail.com', '$2a$10$at1EZABxNN32M5pCttV36OvzbUWx1myGisa36i3..vveO6j0Lk2Da');
insert into personne (nom, prenom, email, password) values ('Bajard', 'Blandine', 'blandine.bajard@gmail.com', '$2a$10$koeHn0Wg54MTc7iDb9hbsujy/Opfrhhu0uuhhBNA00rMXLeMpSl.m');
insert into personne (nom, prenom, email, password) values ('El Hiri', 'Sana', 'sana.el-hiri@gmail.com', '$2a$10$jBBk1RQrl5XOeSQYz3xdJ.Xl8hBIu/x3mqHpYyL10m6KjwfDsWGEW');
insert into personne (nom, prenom, email, password) values ('Lucas', 'Cecile', 'cecile.lucas@gmail.com', '$2a$10$HAUg8vlmtvS/YphJzWAPfuGJdLd/3SeSZ48JVvybK6Wh/AY3QirGG');
insert into personne (nom, prenom, email, password) values ('Kerkeb', 'Mohamed', 'mohamed.kerkeb@gmail.com', '$2a$10$BpWZMlDLKXA2qGMo9t6cxeS6G/6mvjdsdN4nIUOAjE2sr/0sJNiCW');
insert into personne (nom, prenom, email, password) values ('Rinquin', 'Aline', 'aline.rinquin@gmail.com', '$2a$10$FJKDTcipj/8PKos7AcCnZ.HHAmdDh6EjknpUWPLDcVfSXWPcHZI5O');
insert into personne (nom, prenom, email, password) values ('Keddar', 'Noreddine', 'noredinne.keddar@gmail.com', '$2a$10$5iowOIUv72hFVsT9B8K.nerA3YTPAyyUiqOAwKR55ZZcpiHT96LhG');
insert into personne (nom, prenom, email, password) values ('Tomczyk', 'Julian', 'julian.tomczyk@gmail.com', '$2a$10$vJ89S5CXjtO01NsYrwfLyudU/p2Cz1QNDm1dGUkfKD60Z23HLZM2.');
insert into personne (nom, prenom, email, password) values ('Mjid', 'Hedi', 'hedi.mjid@gmail.com', '$10$vJ89S5CXjtO01NsYrwfLyudU/p2Cz1QNDm1dGUkfKD60Z23HLZM2.');
insert into personne (nom, prenom, email, password) values ('BIDEN', 'Joe', 'joe@biden.fr', '$2a$10$NNfAnATNZf/MzIjrUFi5K.xqWizxv1Hil4/PyRAabKWK5DxsLPE6.');
insert into personne (nom, prenom, email, password) values ('Harmond', 'Ludvig', 'lharmond0@moonfruit.com', 'pjKxIN'); INSERT INTO `personne_role_list` (`personne_id_personne`,`role_list`) VALUES (1,'ROLE_ADMIN');
insert into personne (nom, prenom, email, password) values ('Fisbey', 'Jammal', 'jfisbey1@apache.org', 'YY0TuY6JH0di'); INSERT INTO `personne_role_list` (`personne_id_personne`,`role_list`) VALUES (2,'ROLE_ADMIN');
insert into personne (nom, prenom, email, password) values ('Scrivener', 'Anatol', 'ascrivener2@jugem.jp', 'C4sfAW4'); INSERT INTO `personne_role_list` (`personne_id_personne`,`role_list`) VALUES (3,'ROLE_ADMIN');
insert into personne (nom, prenom, email, password) values ('Berthelet', 'Oralla', 'oberthelet3@cnbc.com', 'ACdXxMr'); INSERT INTO `personne_role_list` (`personne_id_personne`,`role_list`) VALUES (4,'ROLE_ADMIN');
insert into personne (nom, prenom, email, password) values ('Towe', 'Homerus', 'htowe4@home.pl', 'pQGi41q5JHY'); INSERT INTO `personne_role_list` (`personne_id_personne`,`role_list`) VALUES (5,'ROLE_READER');
insert into personne (nom, prenom, email, password) values ('Viggers', 'Gaby', 'gviggers5@xing.com', 'Gbr2M5UU'); INSERT INTO `personne_role_list` (`personne_id_personne`,`role_list`) VALUES (6,'ROLE_READER');
insert into personne (nom, prenom, email, password) values ('Willshere', 'Sheba', 'swillshere6@tinyurl.com', 'yVJmjda'); INSERT INTO `personne_role_list` (`personne_id_personne`,`role_list`) VALUES (7,'ROLE_READER');
insert into personne (nom, prenom, email, password) values ('Docksey', 'Eula', 'edocksey7@mozilla.com', '6yS7lkFpuY'); INSERT INTO `personne_role_list` (`personne_id_personne`,`role_list`) VALUES (8,'ROLE_READER');
insert into personne (nom, prenom, email, password) values ('Iglesias', 'Christen', 'ciglesias8@ebay.com', 'ottn7Qb'); INSERT INTO `personne_role_list` (`personne_id_personne`,`role_list`) VALUES (9,'ROLE_READER');
insert into personne (nom, prenom, email, password) values ('Crick', 'Andris', 'acrick9@etsy.com', 'nkmUVBeKr'); INSERT INTO `personne_role_list` (`personne_id_personne`,`role_list`) VALUES (10,'ROLE_READER');
INSERT INTO `personne_role_list` (`personne_id_personne`,`role_list`) VALUES (11,'ROLE_READER');
INSERT INTO `personne_role_list` (`personne_id_personne`,`role_list`) VALUES (12,'ROLE_READER');
INSERT INTO `personne_role_list` (`personne_id_personne`,`role_list`) VALUES (13,'ROLE_READER');
INSERT INTO `personne_role_list` (`personne_id_personne`,`role_list`) VALUES (14,'ROLE_READER');
INSERT INTO `personne_role_list` (`personne_id_personne`,`role_list`) VALUES (15,'ROLE_ADMIN');
INSERT INTO `personne_role_list` (`personne_id_personne`,`role_list`) VALUES (15,'ROLE_READER');
insert into role (id_role, intitule) values (1, 'Admin');
insert into role (id_role, intitule) values (2, 'User');
insert into restaurant (nom, adresse, telephone, a_emporter, sur_place, prix_min, prix_max, accespmr, latitude, longitude) values ('L Perrigo Company', '301 Thierer Trail', '3092096786', false, true, 10, 16, false, '2.1961772', '22.4708685'); INSERT INTO restaurant(prix,a_emporter,sur_place,accespmr,nom,adresse,telephone,website,latitude,longitude) VALUES (2,0,1,1,'Le Jardin de Montreuil','1 Rue du Sergent Godefroy, 93100 Montreuil','01 41 63 92 66','http://www.lejardindemontreuil.fr/','48.853391599999995','2.4347358');
insert into restaurant (nom, adresse, telephone, a_emporter, sur_place, prix_min, prix_max, accespmr, latitude, longitude) values ('Sanofi Pasteur Inc.', '9 Barnett Terrace', '6809964349', false, true, 1, 17, false, '31.45571', '34.43719'); INSERT INTO restaurant(prix,a_emporter,sur_place,accespmr,nom,adresse,telephone,website,latitude,longitude) VALUES (2,1,1,0,'La CaVe','45 Rue de Paris, 93100 Montreuil','01 42 87 09 48','http://www.lacaveestrestaurant.com/','48.8576152','2.4342148999999997');
insert into restaurant (nom, adresse, telephone, a_emporter, sur_place, prix_min, prix_max, accespmr, latitude, longitude) values ('REMEDYREPACK INC.', '3 West Park', '4565542193', true, false, 2, 20, true, '49.817777', '19.785536'); INSERT INTO restaurant(prix,a_emporter,sur_place,accespmr,nom,adresse,telephone,website,latitude,longitude) VALUES (3,0,1,1,'Villa 9 Trois','71 Rue Hoche, 93100 Montreuil','01 48 58 17 37','http://www.villa9trois.com/','48.8638352','2.4331966');
insert into restaurant (nom, adresse, telephone, a_emporter, sur_place, prix_min, prix_max, accespmr, latitude, longitude) values ('Physicians Total Care, Inc.', '462 Mosinee Lane', '8521719889', false, false, 1, 22, true, '-13.5', '48.86667'); INSERT INTO restaurant(prix,a_emporter,sur_place,accespmr,nom,adresse,telephone,website,latitude,longitude) VALUES (2,1,1,1,'L''Amourette','54 Rue Robespierre, 93100 Montreuil','01 48 59 99 94','http://www.lamourette.fr/','48.853121599999994','2.4234494');
insert into restaurant (nom, adresse, telephone, a_emporter, sur_place, prix_min, prix_max, accespmr, latitude, longitude) values ('Triweld Industries, Inc.', '2482 Corscot Way', '7513208452', false, true, 5, 13, true, '34.326903', '108.117456'); INSERT INTO restaurant(prix,a_emporter,sur_place,accespmr,nom,adresse,telephone,website,latitude,longitude) VALUES (2,1,1,1,'La Maison Montreuil','31 Rue du Capitaine Dreyfus, 93100 Montreuil','09 87 18 18 81','https://www.lamaisonmontreuil.com/','48.859359700000006','2.4399254999999997');
INSERT INTO restaurant(prix,a_emporter,sur_place,accespmr,nom,adresse,telephone,website,latitude,longitude) VALUES (1,1,1,1,'le poulet en feu','63 Rue Danton, 93100 Montreuil','09 87 51 10 90','https://www.pouletenfeu.fr/','48.8653553','2.4514297');
INSERT INTO restaurant(prix,a_emporter,sur_place,accespmr,nom,adresse,telephone,website,latitude,longitude) VALUES (2,0,1,1,'Les Tonneaux','62 Rue Robespierre, 93100 Montreuil','01 48 58 95 01',NULL,'48.85205','2.4238472');
INSERT INTO restaurant(prix,a_emporter,sur_place,accespmr,nom,adresse,telephone,website,latitude,longitude) VALUES (2,1,1,1,'Les Pianos','26 Rue Robespierre, 93100 Montreuil','09 63 53 85 17','https://www.facebook.com/lespianosmontreuilofficiel/','48.854841799999996','2.4230319');
INSERT INTO restaurant(prix,a_emporter,sur_place,accespmr,nom,adresse,telephone,website,latitude,longitude) VALUES (2,0,1,1,'M I M','113 Rue Marceau, 93100 Montreuil','01 43 63 31 13',NULL,'48.849849999999996','2.4265312999999997');
INSERT INTO restaurant(prix,a_emporter,sur_place,accespmr,nom,adresse,telephone,website,latitude,longitude) VALUES (1,1,1,1,'Le Gévaudan','1 Bd Rouget de Lisle, 93100 Montreuil','01 42 87 42 83',NULL,'48.8617445','2.4412374');
INSERT INTO restaurant(prix,a_emporter,sur_place,accespmr,nom,adresse,telephone,website,latitude,longitude) VALUES (2,1,1,1,'Restaurant Filippo','6 Bd Chanzy, 93100 Montreuil','01 48 18 08 16',NULL,'48.8583964','2.4349743');
INSERT INTO restaurant(prix,a_emporter,sur_place,accespmr,nom,adresse,telephone,website,latitude,longitude) VALUES (1,0,1,1,'Le Mange Disc','50 Rue de Romainville, 93100 Montreuil','09 83 54 60 27','https://m.facebook.com/Le-Mange-Disc-102557926519195/?locale2=fr_FR','48.8658457','2.4466363');
INSERT INTO restaurant(prix,a_emporter,sur_place,accespmr,nom,adresse,telephone,website,latitude,longitude) VALUES (1,1,1,NULL,'Restaurant El Kahina','227 Rue de Paris, 93100 Montreuil','01 48 70 95 46',NULL,'48.8550124','2.4195686');
INSERT INTO restaurant(prix,a_emporter,sur_place,accespmr,nom,adresse,telephone,website,latitude,longitude) VALUES (NULL,1,1,1,'La Baraka','262 Rue de Paris, 93100 Montreuil','01 42 87 19 27','http://www.labarakamontreuil.fr/?lang=fr','48.8549268','2.4177603999999997');
INSERT INTO restaurant(prix,a_emporter,sur_place,accespmr,nom,adresse,telephone,website,latitude,longitude) VALUES (2,1,1,1,'La Bottega Della Pizza','34 Bd Rouget de Lisle, 93100 Montreuil','01 43 63 04 35','http://www.labottegadellapizza.fr/','48.860204200000005','2.4387626');
INSERT INTO restaurant(prix,a_emporter,sur_place,accespmr,nom,adresse,telephone,website,latitude,longitude) VALUES (2,0,1,NULL,'Restaurant de la Paix','11 Rue Armand Carrel, 93100 Montreuil','01 73 55 21 72',NULL,'48.853764','2.4177003999999997');
INSERT INTO restaurant(prix,a_emporter,sur_place,accespmr,nom,adresse,telephone,website,latitude,longitude) VALUES (2,1,1,1,'La Fontaine Bar Restaurant','47 Rue Armand Carrel, 93100 Montreuil','01 48 70 08 84','https://www.facebook.com/pages/la-fontaine-de-montreuil-Restaurant/213852528659590?fref=ts','48.8512132','2.4183881');
INSERT INTO restaurant(prix,a_emporter,sur_place,accespmr,nom,adresse,telephone,website,latitude,longitude) VALUES (3,1,1,NULL,'La Cantine Arkose Montreuil','33 Rue du Progrès, 93100 Montreuil','01 49 88 45 07','https://lacantine.arkose.com/montreuil/','48.8516335','2.419278');
INSERT INTO restaurant(prix,a_emporter,sur_place,accespmr,nom,adresse,telephone,website,latitude,longitude) VALUES (3,1,1,NULL,'Kashmir Café.','14 Rue du Capitaine Dreyfus, 93100 Montreuil','01 43 63 33 86','http://www.kashmircafe.fr/','48.8582843','2.4378471999999998');
INSERT INTO restaurant(prix,a_emporter,sur_place,accespmr,nom,adresse,telephone,website,latitude,longitude) VALUES (2,1,1,1,'W Lounge','37 Rue de Valmy, 93100 Montreuil','01 48 37 61 17','http://wlounge-montreuil.com/?utm_source=gmb&utm_medium=referral','48.8507208','2.4187186');
INSERT INTO restaurant(prix,a_emporter,sur_place,accespmr,nom,adresse,telephone,website,latitude,longitude) VALUES (1,1,1,1,'L''Oasis','171 Rue de Paris, 93100 Montreuil','01 48 70 70 52','https://loasis-montreuil.fr/fr','48.855555599999995','2.4230556');
INSERT INTO restaurant(prix,a_emporter,sur_place,accespmr,nom,adresse,telephone,website,latitude,longitude) VALUES (2,1,1,1,'Obrigado','8 Av. de la Prte de Montreuil, 75020 Paris','09 84 58 24 21','http://obrigado.paris/','48.8534995','2.4118692');
INSERT INTO restaurant(prix,a_emporter,sur_place,accespmr,nom,adresse,telephone,website,latitude,longitude) VALUES (2,1,1,1,'Le Xanthos','30 Rue du Capitaine Dreyfus, 93100 Montreuil','01 55 86 26 77',NULL,'48.858785','2.4388468999999997');
INSERT INTO restaurant(prix,a_emporter,sur_place,accespmr,nom,adresse,telephone,website,latitude,longitude) VALUES (2,1,1,1,'Thé Vert','43 Rue du Capitaine Dreyfus, 93100 Montreuil','01 42 87 79 57','http://www.thevertenligne.fr/','48.8596741','2.4405049');
INSERT INTO restaurant(prix,a_emporter,sur_place,accespmr,nom,adresse,telephone,website,latitude,longitude) VALUES (2,1,1,1,'Gramophone','1 Rue Pépin, 93100 Montreuil','01 49 88 74 56','http://www.restaurantlegramophone.com/','48.8641275','2.4449753');
INSERT INTO restaurant(prix,a_emporter,sur_place,accespmr,nom,adresse,telephone,website,latitude,longitude) VALUES (2,0,1,NULL,'La Grosse Mignonne','56 Rue Carnot, 93100 Montreuil','01 42 87 54 51','https://www.facebook.com/LaGrosseMignonne','48.855322','2.4413144');
INSERT INTO restaurant(prix,a_emporter,sur_place,accespmr,nom,adresse,telephone,website,latitude,longitude) VALUES (1,1,1,NULL,'La Galetiere','126 Rue de Paris, 93100 Montreuil','01 42 87 47 32','http://lagaletiere.eatbu.com/','48.8563999','2.4263293');
INSERT INTO restaurant(prix,a_emporter,sur_place,accespmr,nom,adresse,telephone,website,latitude,longitude) VALUES (3,1,1,1,'Le Mamaju','36 Rue de Lagny, 93100 Montreuil','01 83 74 02 26','https://mamaju-restaurant-montreuil.eatbu.com/','48.8490247','2.4265491');
INSERT INTO restaurant(prix,a_emporter,sur_place,accespmr,nom,adresse,telephone,website,latitude,longitude) VALUES (2,1,1,NULL,'Le Pizzo','15 Rue du Capitaine Dreyfus, 93100 Montreuil','09 88 46 71 29',NULL,'48.8588721','2.4385882999999997');
INSERT INTO restaurant(prix,a_emporter,sur_place,accespmr,nom,adresse,telephone,website,latitude,longitude) VALUES (2,1,1,NULL,'L''Olivier','211 Rue de Paris, 93100 Montreuil','06 47 82 43 41',NULL,'48.855081','2.4203481');
INSERT INTO restaurant(prix,a_emporter,sur_place,accespmr,nom,adresse,telephone,website,latitude,longitude) VALUES (2,1,1,1,'Louise','27 Rue du Capitaine Dreyfus, 93100 Montreuil','06 75 32 56 81','https://instagram.com/cafelouisemontreuil?utm_medium=copy_link','48.859237','2.4394462');
INSERT INTO restaurant(prix,a_emporter,sur_place,accespmr,nom,adresse,telephone,website,latitude,longitude) VALUES (1,1,1,1,'Ô Bar Lié','16 Rue de la République, 93100 Montreuil','01 48 58 71 95','http://www.obarlie.com/','48.8531155','2.4209562');
INSERT INTO restaurant(prix,a_emporter,sur_place,accespmr,nom,adresse,telephone,website,latitude,longitude) VALUES (1,1,1,NULL,'Gabycook','27 Rue du Progrès, 93100 Montreuil',NULL,NULL,'48.851772999999994','2.4202114');
INSERT INTO restaurant(prix,a_emporter,sur_place,accespmr,nom,adresse,telephone,website,latitude,longitude) VALUES (2,1,1,1,'L''ALEMBERT','268 Rue de Paris, 93100 Montreuil','01 42 87 29 61','http://www.lalembert.fr/','48.8549126','2.4174881999999998');
INSERT INTO restaurant(prix,a_emporter,sur_place,accespmr,nom,adresse,telephone,website,latitude,longitude) VALUES (2,1,1,NULL,'Gujarat','35 Bd Paul Vaillant Couturier, 93100 Montreuil','01 48 58 77 16','http://restaurantgujarat.fr/','48.865111','2.443053');
INSERT INTO restaurant(prix,a_emporter,sur_place,accespmr,nom,adresse,telephone,website,latitude,longitude) VALUES (2,1,1,NULL,'L''effiloché Montreuil','5 Rue du Centenaire, 93100 Montreuil',NULL,NULL,'48.8579636','2.4270348');
INSERT INTO restaurant(prix,a_emporter,sur_place,accespmr,nom,adresse,telephone,website,latitude,longitude) VALUES (2,1,1,NULL,'Famille-CMC','6 Av. Pasteur, 93100 Montreuil',NULL,NULL,'48.862999300000006','2.441328');
INSERT INTO restaurant(prix,a_emporter,sur_place,accespmr,nom,adresse,telephone,website,latitude,longitude) VALUES (2,1,1,NULL,'O''Villagio','28 Rue du Capitaine Dreyfus, 93100 Montreuil','01 57 42 63 82','https://ovillaggio93.wixsite.com/o-villaggio','48.858722','2.4386695');
INSERT INTO restaurant(prix,a_emporter,sur_place,accespmr,nom,adresse,telephone,website,latitude,longitude) VALUES (2,1,1,1,'La Brasserie des Laitières','38 Rue de Lagny, 93100 Montreuil','01 48 51 50 70','https://le-bl.metro.biz/','48.8490399','2.4262376999999997');
INSERT INTO restaurant(prix,a_emporter,sur_place,accespmr,nom,adresse,telephone,website,latitude,longitude) VALUES (1,1,1,1,'LE HAVANE','248 Rue de Paris, 93100 Montreuil','01 48 57 17 23',NULL,'48.855091599999994','2.4187965');
INSERT INTO restaurant(prix,a_emporter,sur_place,accespmr,nom,adresse,telephone,website,latitude,longitude) VALUES (2,1,1,1,'Chez Carla','6 Rue Claude Bernard, 93100 Montreuil','01 48 18 00 53','http://www.chezcarla.fr/','48.8699343','2.4507599');
INSERT INTO restaurant (`a_emporter`,`accespmr`,`adresse`,`latitude`,`longitude`,`nom`,`prix`,`sur_place`,`telephone`,`website`) VALUES (1,1,'2 Bd Chanzy, 93100 Montreuil','48.85847716355682','2.4358987134859515','Le Sultan',1,1,'0148180475','');
INSERT INTO restaurant (`a_emporter`,`accespmr`,`adresse`,`latitude`,`longitude`,`nom`,`prix`,`sur_place`,`telephone`,`website`) VALUES (1,1,'19 Av. de la Résistance, 93100 Montreuil','48.85945630168561','2.436446504305728','Monoprix',1,0,'0141720580','monoprix.fr');
INSERT INTO restaurant (`a_emporter`,`accespmr`,`adresse`,`latitude`,`longitude`,`nom`,`prix`,`sur_place`,`telephone`,`website`) VALUES (1,NULL,' 20, Avenue De La Resistance','48.859572881535506','2.43723868323233','Fournil du Perche',1,0,'','');
INSERT INTO restaurant (`a_emporter`,`accespmr`,`adresse`,`latitude`,`longitude`,`nom`,`prix`,`sur_place`,`telephone`,`website`) VALUES (1,1,'Place Jacques Duclot','48.85763987017326','2.4357752878301313','Street Wok',1,0,'','');
INSERT INTO restaurant (`a_emporter`,`accespmr`,`adresse`,`latitude`,`longitude`,`nom`,`prix`,`sur_place`,`telephone`,`website`) VALUES (1,NULL,'18 Bd Rouget de Lisle, 93100 Montreuil','48.86127664908431','2.440266447738863','La Casa',2,1,'0187004594','www.lacasa-pizza.fr/');
INSERT INTO restaurant (`a_emporter`,`accespmr`,`adresse`,`latitude`,`longitude`,`nom`,`prix`,`sur_place`,`telephone`,`website`) VALUES (1,1,'31 Rue Franklin, 93100 Montreuil','48.86373425237411','2.444081609130601','New Kyoto',2,1,'0142877365','https://newkyoto93.fr/');
INSERT INTO restaurant (`a_emporter`,`accespmr`,`adresse`,`latitude`,`longitude`,`nom`,`prix`,`sur_place`,`telephone`,`website`) VALUES (1,1,'86 Bd Henri Barbusse, 93100 Montreuil','48.868535950518506','2.4415787173758625','Cosa C E Da Mangiare',2,1,'0148510777','');
INSERT INTO restaurant (`a_emporter`,`accespmr`,`adresse`,`latitude`,`longitude`,`nom`,`prix`,`sur_place`,`telephone`,`website`) VALUES (1,1,'8 Av. Walwein, 93100 Montreuil','48.86227215595597','2.443526611143298','Bamboo & Sum',2,1,'0987366393','');
INSERT INTO restaurant (`a_emporter`,`accespmr`,`adresse`,`latitude`,`longitude`,`nom`,`prix`,`sur_place`,`telephone`,`website`) VALUES (1,NULL,'78 Av. de la Résistance, 93100 Montreuil','48.86260826926845','2.4370469579964404','O Bon Coin',1,1,'0953523586','');
INSERT INTO restaurant (`a_emporter`,`accespmr`,`adresse`,`latitude`,`longitude`,`nom`,`prix`,`sur_place`,`telephone`,`website`) VALUES (1,NULL,'14 Rue du Capitaine Dreyfus, 93100 Montreuil','48.85828992238344','2.437848545198565','Kashmir Café',2,1,'0143633386','http://www.kashmircafe.fr/');
INSERT INTO restaurant (`a_emporter`,`accespmr`,`adresse`,`latitude`,`longitude`,`nom`,`prix`,`sur_place`,`telephone`,`website`) VALUES (1,NULL,'45 Bd Paul Vaillant Couturier, 93100 Montreuil','48.86615467929139','2.4442899980905284','Le Marrakech',3,1,'0148589402','');
INSERT INTO restaurant (`a_emporter`,`accespmr`,`adresse`,`latitude`,`longitude`,`nom`,`prix`,`sur_place`,`telephone`,`website`) VALUES (1,NULL,'7 Bd Rouget de Lisle, 93100 Montreuil','48.86133951184523','2.4407883330629856','BOLKIRI Montreuil Street Food Viêt',2,1,'0184671708','http://bolkiri.fr/');
insert into preference (id_restau, id_personne, note, favori) values (2, 9, 1, false);
insert into preference (id_restau, id_personne, note, favori) values (3, 1, 5, false);
insert into preference (id_restau, id_personne, note, favori) values (1, 9, 3, true); insert into preference (restau_id_restau, personne_id_personne, note, favori) values (2, 9, 1, false);
insert into preference (id_restau, id_personne, note, favori) values (4, 6, 2, false); insert into preference (restau_id_restau, personne_id_personne, note, favori) values (3, 1, 5, false);
insert into preference (id_restau, id_personne, note, favori) values (5, 5, 5, false); insert into preference (restau_id_restau, personne_id_personne, note, favori) values (1, 9, 3, true);
insert into preference (id_restau, id_personne, note, favori) values (1, 10, 1, false); insert into preference (restau_id_restau, personne_id_personne, note, favori) values (4, 6, 2, false);
insert into preference (id_restau, id_personne, note, favori) values (5, 3, 5, false); insert into preference (restau_id_restau, personne_id_personne, note, favori) values (5, 5, 5, false);
insert into preference (id_restau, id_personne, note, favori) values (1, 7, 1, true); insert into preference (restau_id_restau, personne_id_personne, note, favori) values (1, 10, 1, false);
insert into preference (id_restau, id_personne, note, favori) values (4, 2, 1, false); insert into preference (restau_id_restau, personne_id_personne, note, favori) values (5, 3, 5, false);
insert into preference (id_restau, id_personne, note, favori) values (1, 3, 5, false); insert into preference (restau_id_restau, personne_id_personne, note, favori) values (1, 7, 1, true);
insert into preference (id_restau, id_personne, note, favori) values (3, 10, 4, false); insert into preference (restau_id_restau, personne_id_personne, note, favori) values (4, 2, 1, false);
insert into preference (id_restau, id_personne, note, favori) values (3, 3, 4, true); insert into preference (restau_id_restau, personne_id_personne, note, favori) values (1, 3, 5, false);
insert into preference (id_restau, id_personne, note, favori) values (2, 3, 3, false); insert into preference (restau_id_restau, personne_id_personne, note, favori) values (3, 10, 4, false);
insert into preference (id_restau, id_personne, note, favori) values (2, 8, 3, false); insert into preference (restau_id_restau, personne_id_personne, note, favori) values (3, 3, 4, true);
insert into preference (restau_id_restau, personne_id_personne, note, favori) values (2, 3, 3, false);
insert into preference (restau_id_restau, personne_id_personne, note, favori) values (2, 8, 3, false);
insert into preference (restau_id_restau, personne_id_personne, note, favori) values (5, 15, 3, false);
insert into preference (restau_id_restau, personne_id_personne, note, favori) values (8, 15, 3, false);
insert into type (id_type, libelle) values (1, 'Kebab'); insert into type (id_type, libelle) values (1, 'Kebab');
insert into type (id_type, libelle) values (2, 'Supermarché'); insert into type (id_type, libelle) values (2, 'Supermarché');
@ -43,22 +114,37 @@ insert into type (id_type, libelle) values (6, 'Pizza');
insert into type (id_type, libelle) values (7, 'Brasserie'); insert into type (id_type, libelle) values (7, 'Brasserie');
insert into type (id_type, libelle) values (8, 'Americain'); insert into type (id_type, libelle) values (8, 'Americain');
insert into type (id_type, libelle) values (9, 'Japonais'); insert into type (id_type, libelle) values (9, 'Japonais');
insert into type (id_type, libelle) values (10, 'Asiatique');
insert into type (id_type, libelle) values (11, 'Italien'); insert into type (id_type, libelle) values (11, 'Italien');
insert into type (id_type, libelle) values (12, 'Sushis');
insert into type (id_type, libelle) values (13, 'Chinois'); insert into type (id_type, libelle) values (13, 'Chinois');
insert into type (id_type, libelle) values (14, 'Crêperie');
insert into type (id_type, libelle) values (15, 'Hamburger'); insert into type (id_type, libelle) values (15, 'Hamburger');
insert into type (id_type, libelle) values (16, 'Indien'); insert into type (id_type, libelle) values (16, 'Indien');
insert into type (id_type, libelle) values (17, 'Marocain'); insert into type (id_type, libelle) values (17, 'Marocain');
insert into type (id_type, libelle) values (18, 'Fruits de Mer');
insert into type (id_type, libelle) values (19, 'Steack');
insert into type (id_type, libelle) values (20, 'Vietnamien'); insert into type (id_type, libelle) values (20, 'Vietnamien');
insert into type (id_type, libelle) values (21, 'Bistrot');
insert into type (id_type, libelle) values (22, 'Poulet');
INSERT INTO type_restau (`id_restau`,`id_type`) VALUES (1,5);
INSERT INTO type_restau (`id_restau`,`id_type`) VALUES (2,5);
INSERT INTO type_restau (`id_restau`,`id_type`) VALUES (3,5);
INSERT INTO type_restau (`id_restau`,`id_type`) VALUES (4,5);
INSERT INTO type_restau (`id_restau`,`id_type`) VALUES (5,5);
INSERT INTO type_restau (`id_restau`,`id_type`) VALUES (6,8);
INSERT INTO type_restau (`id_restau`,`id_type`) VALUES (6,22);
INSERT INTO type_restau (`id_restau`,`id_type`) VALUES (7,7);
INSERT INTO type_restau (`id_restau`,`id_type`) VALUES (8,5);
INSERT INTO type_restau (`id_restau`,`id_type`) VALUES (9,21);
INSERT INTO type_restau (`id_restau`,`id_type`) VALUES (10,7);
INSERT INTO type_restau (`id_restau`,`id_type`) VALUES (42,1);
INSERT INTO type_restau (`id_restau`,`id_type`) VALUES (43,2);
INSERT INTO type_restau (`id_restau`,`id_type`) VALUES (44,3);
INSERT INTO type_restau (`id_restau`,`id_type`) VALUES (45,4);
INSERT INTO type_restau (`id_restau`,`id_type`) VALUES (46,6);
INSERT INTO type_restau (`id_restau`,`id_type`) VALUES (47,9);
INSERT INTO type_restau (`id_restau`,`id_type`) VALUES (48,11);
INSERT INTO type_restau (`id_restau`,`id_type`) VALUES (49,13);
INSERT INTO type_restau (`id_restau`,`id_type`) VALUES (50,15);
INSERT INTO type_restau (`id_restau`,`id_type`) VALUES (51,16);
INSERT INTO type_restau (`id_restau`,`id_type`) VALUES (52,17);
INSERT INTO type_restau (`id_restau`,`id_type`) VALUES (53,20);
insert into type_restau (id_restau, id_type) values (1, 3);
insert into type_restau (id_restau, id_type) values (2, 1);
insert into type_restau (id_restau, id_type) values (3, 1);
insert into type_restau (id_restau, id_type) values (4, 2);
insert into type_restau (id_restau, id_type) values (5, 4);
insert into type_restau (id_restau, id_type) values (1, 2);

View File

@ -0,0 +1,230 @@
DROP SCHEMA IF EXISTS `simpleat`;
CREATE SCHEMA IF NOT EXISTS `simpleat` DEFAULT CHARACTER SET utf8mb4 ;
USE `simpleat` ;
CREATE TABLE IF NOT EXISTS `simpleat`.`personne` (
`id_personne` INT NOT NULL AUTO_INCREMENT,
`email` VARCHAR(255) NOT NULL,
`nom` VARCHAR(255) NOT NULL,
`password` VARCHAR(255) NOT NULL,
`prenom` VARCHAR(255) NOT NULL,
PRIMARY KEY (`id_personne`)
);
CREATE TABLE IF NOT EXISTS `simpleat`.`personne_role_list` (
`personne_id_personne` INT NOT NULL,
`role_list` VARCHAR(255) NULL DEFAULT NULL,
INDEX (`personne_id_personne`),
FOREIGN KEY (`personne_id_personne`)
REFERENCES `simpleat`.`personne` (`id_personne`)
);
CREATE TABLE IF NOT EXISTS `simpleat`.`restaurant` (
`id_restau` INT NOT NULL AUTO_INCREMENT,
`a_emporter` BOOLEAN NULL DEFAULT NULL,
`accespmr` BOOLEAN NULL DEFAULT NULL,
`adresse` VARCHAR(255) NOT NULL,
`latitude` VARCHAR(255) NOT NULL,
`longitude` VARCHAR(255) NOT NULL,
`nom` VARCHAR(255) NOT NULL,
`prix` INT NULL DEFAULT NULL,
`sur_place` BOOLEAN NULL DEFAULT NULL,
`telephone` VARCHAR(255) NULL DEFAULT NULL,
`website` VARCHAR(255) NULL DEFAULT NULL,
PRIMARY KEY (`id_restau`)
);
CREATE TABLE IF NOT EXISTS `simpleat`.`preference` (
`favori` BOOLEAN NULL DEFAULT NULL,
`note` INT NULL DEFAULT NULL,
`restau_id_restau` INT NOT NULL,
`personne_id_personne` INT NOT NULL,
PRIMARY KEY (`personne_id_personne`, `restau_id_restau`),
INDEX (`restau_id_restau`),
INDEX (`personne_id_personne`),
FOREIGN KEY (`restau_id_restau`)
REFERENCES `simpleat`.`restaurant` (`id_restau`),
FOREIGN KEY (`personne_id_personne`)
REFERENCES `simpleat`.`personne` (`id_personne`)
);
CREATE TABLE IF NOT EXISTS `simpleat`.`reservation` (
`date_resa` DATETIME NOT NULL,
`nb_personne` INT NOT NULL,
`id_restau` INT NOT NULL,
`id_personne` INT NOT NULL,
PRIMARY KEY (`date_resa`, `id_personne`, `id_restau`),
INDEX (`id_restau`),
INDEX (`id_personne`),
FOREIGN KEY (`id_restau`)
REFERENCES `simpleat`.`restaurant` (`id_restau`),
FOREIGN KEY (`id_personne`)
REFERENCES `simpleat`.`personne` (`id_personne`)
);
CREATE TABLE IF NOT EXISTS `simpleat`.`type` (
`id_type` INT NOT NULL AUTO_INCREMENT,
`libelle` VARCHAR(255) NOT NULL,
PRIMARY KEY (`id_type`)
);
CREATE TABLE IF NOT EXISTS `simpleat`.`type_restau` (
`id_restau` INT NOT NULL,
`id_type` INT NOT NULL,
INDEX (`id_type`) ,
INDEX (`id_restau` ) ,
FOREIGN KEY (`id_type`)
REFERENCES `simpleat`.`type` (`id_type`),
FOREIGN KEY (`id_restau`)
REFERENCES `simpleat`.`restaurant` (`id_restau`)
);
insert into personne (nom, prenom, email, password) values ('Cardon', 'Thomas', 'thomas.cardon@gmail.com', '$2a$10$724bLjLyGOEKTBbHy.s3C.ETc.HuBnhEoCOuoO7.Ts7kyPbz6hkme');
insert into personne (nom, prenom, email, password) values ('Ramiere', 'Vincent', 'vincent.ramiere@gmail.com', '$2a$10$x6.VyO9PCMXSPsi5/m/Hze9xOP.IUdYbaye7cNFc.PfyuRuVLbG7e');
insert into personne (nom, prenom, email, password) values ('Verger', 'Romain', 'romain.verger@gmail.com', '$2a$10$oe/h0ZDpi6xFmTj8CvDMDe13hoEGv0DhHziY7GUatbb9ETcRw/8RG');
insert into personne (nom, prenom, email, password) values ('Ribardiere', 'Paul-Emmanuel', 'paul.ribardiere@gmail.com', '$2a$10$ArSe7TSUapTs9oGE8824fOv4PM6NJwu7mzcg72cSmHy0.ds585Oke');
insert into personne (nom, prenom, email, password) values ('Noris', 'William', 'william.noris@gmail.com', '$2a$10$6UbvPYBR2Ql09M1kgK0.HuoX3X1gxScmaOxI242EB2U7cXiylX3z.');
insert into personne (nom, prenom, email, password) values ('Harmand', 'Isabelle', 'isabelle.harmand@gmail.com', '$2a$10$at1EZABxNN32M5pCttV36OvzbUWx1myGisa36i3..vveO6j0Lk2Da');
insert into personne (nom, prenom, email, password) values ('Bajard', 'Blandine', 'blandine.bajard@gmail.com', '$2a$10$koeHn0Wg54MTc7iDb9hbsujy/Opfrhhu0uuhhBNA00rMXLeMpSl.m');
insert into personne (nom, prenom, email, password) values ('El Hiri', 'Sana', 'sana.el-hiri@gmail.com', '$2a$10$jBBk1RQrl5XOeSQYz3xdJ.Xl8hBIu/x3mqHpYyL10m6KjwfDsWGEW');
insert into personne (nom, prenom, email, password) values ('Lucas', 'Cecile', 'cecile.lucas@gmail.com', '$2a$10$HAUg8vlmtvS/YphJzWAPfuGJdLd/3SeSZ48JVvybK6Wh/AY3QirGG');
insert into personne (nom, prenom, email, password) values ('Kerkeb', 'Mohamed', 'mohamed.kerkeb@gmail.com', '$2a$10$BpWZMlDLKXA2qGMo9t6cxeS6G/6mvjdsdN4nIUOAjE2sr/0sJNiCW');
insert into personne (nom, prenom, email, password) values ('Rinquin', 'Aline', 'aline.rinquin@gmail.com', '$2a$10$FJKDTcipj/8PKos7AcCnZ.HHAmdDh6EjknpUWPLDcVfSXWPcHZI5O');
insert into personne (nom, prenom, email, password) values ('Keddar', 'Noreddine', 'noredinne.keddar@gmail.com', '$2a$10$5iowOIUv72hFVsT9B8K.nerA3YTPAyyUiqOAwKR55ZZcpiHT96LhG');
insert into personne (nom, prenom, email, password) values ('Tomczyk', 'Julian', 'julian.tomczyk@gmail.com', '$2a$10$vJ89S5CXjtO01NsYrwfLyudU/p2Cz1QNDm1dGUkfKD60Z23HLZM2.');
insert into personne (nom, prenom, email, password) values ('Mjid', 'Hedi', 'hedi.mjid@gmail.com', '$10$vJ89S5CXjtO01NsYrwfLyudU/p2Cz1QNDm1dGUkfKD60Z23HLZM2.');
insert into personne (nom, prenom, email, password) values ('BIDEN', 'Joe', 'joe@biden.fr', '$2a$10$NNfAnATNZf/MzIjrUFi5K.xqWizxv1Hil4/PyRAabKWK5DxsLPE6.');
INSERT INTO `personne_role_list` (`personne_id_personne`,`role_list`) VALUES (1,'ROLE_ADMIN');
INSERT INTO `personne_role_list` (`personne_id_personne`,`role_list`) VALUES (2,'ROLE_ADMIN');
INSERT INTO `personne_role_list` (`personne_id_personne`,`role_list`) VALUES (3,'ROLE_ADMIN');
INSERT INTO `personne_role_list` (`personne_id_personne`,`role_list`) VALUES (4,'ROLE_ADMIN');
INSERT INTO `personne_role_list` (`personne_id_personne`,`role_list`) VALUES (5,'ROLE_READER');
INSERT INTO `personne_role_list` (`personne_id_personne`,`role_list`) VALUES (6,'ROLE_READER');
INSERT INTO `personne_role_list` (`personne_id_personne`,`role_list`) VALUES (7,'ROLE_READER');
INSERT INTO `personne_role_list` (`personne_id_personne`,`role_list`) VALUES (8,'ROLE_READER');
INSERT INTO `personne_role_list` (`personne_id_personne`,`role_list`) VALUES (9,'ROLE_READER');
INSERT INTO `personne_role_list` (`personne_id_personne`,`role_list`) VALUES (10,'ROLE_READER');
INSERT INTO `personne_role_list` (`personne_id_personne`,`role_list`) VALUES (11,'ROLE_READER');
INSERT INTO `personne_role_list` (`personne_id_personne`,`role_list`) VALUES (12,'ROLE_READER');
INSERT INTO `personne_role_list` (`personne_id_personne`,`role_list`) VALUES (13,'ROLE_READER');
INSERT INTO `personne_role_list` (`personne_id_personne`,`role_list`) VALUES (14,'ROLE_READER');
INSERT INTO `personne_role_list` (`personne_id_personne`,`role_list`) VALUES (15,'ROLE_ADMIN');
INSERT INTO `personne_role_list` (`personne_id_personne`,`role_list`) VALUES (15,'ROLE_READER');
INSERT INTO restaurant(prix,a_emporter,sur_place,accespmr,nom,adresse,telephone,website,latitude,longitude) VALUES (2,0,1,1,'Le Jardin de Montreuil','1 Rue du Sergent Godefroy, 93100 Montreuil','01 41 63 92 66','http://www.lejardindemontreuil.fr/','48.853391599999995','2.4347358');
INSERT INTO restaurant(prix,a_emporter,sur_place,accespmr,nom,adresse,telephone,website,latitude,longitude) VALUES (2,1,1,0,'La CaVe','45 Rue de Paris, 93100 Montreuil','01 42 87 09 48','http://www.lacaveestrestaurant.com/','48.8576152','2.4342148999999997');
INSERT INTO restaurant(prix,a_emporter,sur_place,accespmr,nom,adresse,telephone,website,latitude,longitude) VALUES (3,0,1,1,'Villa 9 Trois','71 Rue Hoche, 93100 Montreuil','01 48 58 17 37','http://www.villa9trois.com/','48.8638352','2.4331966');
INSERT INTO restaurant(prix,a_emporter,sur_place,accespmr,nom,adresse,telephone,website,latitude,longitude) VALUES (2,1,1,1,'L''Amourette','54 Rue Robespierre, 93100 Montreuil','01 48 59 99 94','http://www.lamourette.fr/','48.853121599999994','2.4234494');
INSERT INTO restaurant(prix,a_emporter,sur_place,accespmr,nom,adresse,telephone,website,latitude,longitude) VALUES (2,1,1,1,'La Maison Montreuil','31 Rue du Capitaine Dreyfus, 93100 Montreuil','09 87 18 18 81','https://www.lamaisonmontreuil.com/','48.859359700000006','2.4399254999999997');
INSERT INTO restaurant(prix,a_emporter,sur_place,accespmr,nom,adresse,telephone,website,latitude,longitude) VALUES (1,1,1,1,'le poulet en feu','63 Rue Danton, 93100 Montreuil','09 87 51 10 90','https://www.pouletenfeu.fr/','48.8653553','2.4514297');
INSERT INTO restaurant(prix,a_emporter,sur_place,accespmr,nom,adresse,telephone,website,latitude,longitude) VALUES (2,0,1,1,'Les Tonneaux','62 Rue Robespierre, 93100 Montreuil','01 48 58 95 01',NULL,'48.85205','2.4238472');
INSERT INTO restaurant(prix,a_emporter,sur_place,accespmr,nom,adresse,telephone,website,latitude,longitude) VALUES (2,1,1,1,'Les Pianos','26 Rue Robespierre, 93100 Montreuil','09 63 53 85 17','https://www.facebook.com/lespianosmontreuilofficiel/','48.854841799999996','2.4230319');
INSERT INTO restaurant(prix,a_emporter,sur_place,accespmr,nom,adresse,telephone,website,latitude,longitude) VALUES (2,0,1,1,'M I M','113 Rue Marceau, 93100 Montreuil','01 43 63 31 13',NULL,'48.849849999999996','2.4265312999999997');
INSERT INTO restaurant(prix,a_emporter,sur_place,accespmr,nom,adresse,telephone,website,latitude,longitude) VALUES (1,1,1,1,'Le Gévaudan','1 Bd Rouget de Lisle, 93100 Montreuil','01 42 87 42 83',NULL,'48.8617445','2.4412374');
INSERT INTO restaurant(prix,a_emporter,sur_place,accespmr,nom,adresse,telephone,website,latitude,longitude) VALUES (2,1,1,1,'Restaurant Filippo','6 Bd Chanzy, 93100 Montreuil','01 48 18 08 16',NULL,'48.8583964','2.4349743');
INSERT INTO restaurant(prix,a_emporter,sur_place,accespmr,nom,adresse,telephone,website,latitude,longitude) VALUES (1,0,1,1,'Le Mange Disc','50 Rue de Romainville, 93100 Montreuil','09 83 54 60 27','https://m.facebook.com/Le-Mange-Disc-102557926519195/?locale2=fr_FR','48.8658457','2.4466363');
INSERT INTO restaurant(prix,a_emporter,sur_place,accespmr,nom,adresse,telephone,website,latitude,longitude) VALUES (1,1,1,NULL,'Restaurant El Kahina','227 Rue de Paris, 93100 Montreuil','01 48 70 95 46',NULL,'48.8550124','2.4195686');
INSERT INTO restaurant(prix,a_emporter,sur_place,accespmr,nom,adresse,telephone,website,latitude,longitude) VALUES (NULL,1,1,1,'La Baraka','262 Rue de Paris, 93100 Montreuil','01 42 87 19 27','http://www.labarakamontreuil.fr/?lang=fr','48.8549268','2.4177603999999997');
INSERT INTO restaurant(prix,a_emporter,sur_place,accespmr,nom,adresse,telephone,website,latitude,longitude) VALUES (2,1,1,1,'La Bottega Della Pizza','34 Bd Rouget de Lisle, 93100 Montreuil','01 43 63 04 35','http://www.labottegadellapizza.fr/','48.860204200000005','2.4387626');
INSERT INTO restaurant(prix,a_emporter,sur_place,accespmr,nom,adresse,telephone,website,latitude,longitude) VALUES (2,0,1,NULL,'Restaurant de la Paix','11 Rue Armand Carrel, 93100 Montreuil','01 73 55 21 72',NULL,'48.853764','2.4177003999999997');
INSERT INTO restaurant(prix,a_emporter,sur_place,accespmr,nom,adresse,telephone,website,latitude,longitude) VALUES (2,1,1,1,'La Fontaine Bar Restaurant','47 Rue Armand Carrel, 93100 Montreuil','01 48 70 08 84','https://www.facebook.com/pages/la-fontaine-de-montreuil-Restaurant/213852528659590?fref=ts','48.8512132','2.4183881');
INSERT INTO restaurant(prix,a_emporter,sur_place,accespmr,nom,adresse,telephone,website,latitude,longitude) VALUES (3,1,1,NULL,'La Cantine Arkose Montreuil','33 Rue du Progrès, 93100 Montreuil','01 49 88 45 07','https://lacantine.arkose.com/montreuil/','48.8516335','2.419278');
INSERT INTO restaurant(prix,a_emporter,sur_place,accespmr,nom,adresse,telephone,website,latitude,longitude) VALUES (3,1,1,NULL,'Kashmir Café.','14 Rue du Capitaine Dreyfus, 93100 Montreuil','01 43 63 33 86','http://www.kashmircafe.fr/','48.8582843','2.4378471999999998');
INSERT INTO restaurant(prix,a_emporter,sur_place,accespmr,nom,adresse,telephone,website,latitude,longitude) VALUES (2,1,1,1,'W Lounge','37 Rue de Valmy, 93100 Montreuil','01 48 37 61 17','http://wlounge-montreuil.com/?utm_source=gmb&utm_medium=referral','48.8507208','2.4187186');
INSERT INTO restaurant(prix,a_emporter,sur_place,accespmr,nom,adresse,telephone,website,latitude,longitude) VALUES (1,1,1,1,'L''Oasis','171 Rue de Paris, 93100 Montreuil','01 48 70 70 52','https://loasis-montreuil.fr/fr','48.855555599999995','2.4230556');
INSERT INTO restaurant(prix,a_emporter,sur_place,accespmr,nom,adresse,telephone,website,latitude,longitude) VALUES (2,1,1,1,'Obrigado','8 Av. de la Prte de Montreuil, 75020 Paris','09 84 58 24 21','http://obrigado.paris/','48.8534995','2.4118692');
INSERT INTO restaurant(prix,a_emporter,sur_place,accespmr,nom,adresse,telephone,website,latitude,longitude) VALUES (2,1,1,1,'Le Xanthos','30 Rue du Capitaine Dreyfus, 93100 Montreuil','01 55 86 26 77',NULL,'48.858785','2.4388468999999997');
INSERT INTO restaurant(prix,a_emporter,sur_place,accespmr,nom,adresse,telephone,website,latitude,longitude) VALUES (2,1,1,1,'Thé Vert','43 Rue du Capitaine Dreyfus, 93100 Montreuil','01 42 87 79 57','http://www.thevertenligne.fr/','48.8596741','2.4405049');
INSERT INTO restaurant(prix,a_emporter,sur_place,accespmr,nom,adresse,telephone,website,latitude,longitude) VALUES (2,1,1,1,'Gramophone','1 Rue Pépin, 93100 Montreuil','01 49 88 74 56','http://www.restaurantlegramophone.com/','48.8641275','2.4449753');
INSERT INTO restaurant(prix,a_emporter,sur_place,accespmr,nom,adresse,telephone,website,latitude,longitude) VALUES (2,0,1,NULL,'La Grosse Mignonne','56 Rue Carnot, 93100 Montreuil','01 42 87 54 51','https://www.facebook.com/LaGrosseMignonne','48.855322','2.4413144');
INSERT INTO restaurant(prix,a_emporter,sur_place,accespmr,nom,adresse,telephone,website,latitude,longitude) VALUES (1,1,1,NULL,'La Galetiere','126 Rue de Paris, 93100 Montreuil','01 42 87 47 32','http://lagaletiere.eatbu.com/','48.8563999','2.4263293');
INSERT INTO restaurant(prix,a_emporter,sur_place,accespmr,nom,adresse,telephone,website,latitude,longitude) VALUES (3,1,1,1,'Le Mamaju','36 Rue de Lagny, 93100 Montreuil','01 83 74 02 26','https://mamaju-restaurant-montreuil.eatbu.com/','48.8490247','2.4265491');
INSERT INTO restaurant(prix,a_emporter,sur_place,accespmr,nom,adresse,telephone,website,latitude,longitude) VALUES (2,1,1,NULL,'Le Pizzo','15 Rue du Capitaine Dreyfus, 93100 Montreuil','09 88 46 71 29',NULL,'48.8588721','2.4385882999999997');
INSERT INTO restaurant(prix,a_emporter,sur_place,accespmr,nom,adresse,telephone,website,latitude,longitude) VALUES (2,1,1,NULL,'L''Olivier','211 Rue de Paris, 93100 Montreuil','06 47 82 43 41',NULL,'48.855081','2.4203481');
INSERT INTO restaurant(prix,a_emporter,sur_place,accespmr,nom,adresse,telephone,website,latitude,longitude) VALUES (2,1,1,1,'Louise','27 Rue du Capitaine Dreyfus, 93100 Montreuil','06 75 32 56 81','https://instagram.com/cafelouisemontreuil?utm_medium=copy_link','48.859237','2.4394462');
INSERT INTO restaurant(prix,a_emporter,sur_place,accespmr,nom,adresse,telephone,website,latitude,longitude) VALUES (1,1,1,1,'Ô Bar Lié','16 Rue de la République, 93100 Montreuil','01 48 58 71 95','http://www.obarlie.com/','48.8531155','2.4209562');
INSERT INTO restaurant(prix,a_emporter,sur_place,accespmr,nom,adresse,telephone,website,latitude,longitude) VALUES (1,1,1,NULL,'Gabycook','27 Rue du Progrès, 93100 Montreuil',NULL,NULL,'48.851772999999994','2.4202114');
INSERT INTO restaurant(prix,a_emporter,sur_place,accespmr,nom,adresse,telephone,website,latitude,longitude) VALUES (2,1,1,1,'L''ALEMBERT','268 Rue de Paris, 93100 Montreuil','01 42 87 29 61','http://www.lalembert.fr/','48.8549126','2.4174881999999998');
INSERT INTO restaurant(prix,a_emporter,sur_place,accespmr,nom,adresse,telephone,website,latitude,longitude) VALUES (2,1,1,NULL,'Gujarat','35 Bd Paul Vaillant Couturier, 93100 Montreuil','01 48 58 77 16','http://restaurantgujarat.fr/','48.865111','2.443053');
INSERT INTO restaurant(prix,a_emporter,sur_place,accespmr,nom,adresse,telephone,website,latitude,longitude) VALUES (2,1,1,NULL,'L''effiloché Montreuil','5 Rue du Centenaire, 93100 Montreuil',NULL,NULL,'48.8579636','2.4270348');
INSERT INTO restaurant(prix,a_emporter,sur_place,accespmr,nom,adresse,telephone,website,latitude,longitude) VALUES (2,1,1,NULL,'Famille-CMC','6 Av. Pasteur, 93100 Montreuil',NULL,NULL,'48.862999300000006','2.441328');
INSERT INTO restaurant(prix,a_emporter,sur_place,accespmr,nom,adresse,telephone,website,latitude,longitude) VALUES (2,1,1,NULL,'O''Villagio','28 Rue du Capitaine Dreyfus, 93100 Montreuil','01 57 42 63 82','https://ovillaggio93.wixsite.com/o-villaggio','48.858722','2.4386695');
INSERT INTO restaurant(prix,a_emporter,sur_place,accespmr,nom,adresse,telephone,website,latitude,longitude) VALUES (2,1,1,1,'La Brasserie des Laitières','38 Rue de Lagny, 93100 Montreuil','01 48 51 50 70','https://le-bl.metro.biz/','48.8490399','2.4262376999999997');
INSERT INTO restaurant(prix,a_emporter,sur_place,accespmr,nom,adresse,telephone,website,latitude,longitude) VALUES (1,1,1,1,'LE HAVANE','248 Rue de Paris, 93100 Montreuil','01 48 57 17 23',NULL,'48.855091599999994','2.4187965');
INSERT INTO restaurant(prix,a_emporter,sur_place,accespmr,nom,adresse,telephone,website,latitude,longitude) VALUES (2,1,1,1,'Chez Carla','6 Rue Claude Bernard, 93100 Montreuil','01 48 18 00 53','http://www.chezcarla.fr/','48.8699343','2.4507599');
INSERT INTO restaurant (`a_emporter`,`accespmr`,`adresse`,`latitude`,`longitude`,`nom`,`prix`,`sur_place`,`telephone`,`website`) VALUES (1,1,'2 Bd Chanzy, 93100 Montreuil','48.85847716355682','2.4358987134859515','Le Sultan',1,1,'0148180475','');
INSERT INTO restaurant (`a_emporter`,`accespmr`,`adresse`,`latitude`,`longitude`,`nom`,`prix`,`sur_place`,`telephone`,`website`) VALUES (1,1,'19 Av. de la Résistance, 93100 Montreuil','48.85945630168561','2.436446504305728','Monoprix',1,0,'0141720580','monoprix.fr');
INSERT INTO restaurant (`a_emporter`,`accespmr`,`adresse`,`latitude`,`longitude`,`nom`,`prix`,`sur_place`,`telephone`,`website`) VALUES (1,NULL,' 20, Avenue De La Resistance','48.859572881535506','2.43723868323233','Fournil du Perche',1,0,'','');
INSERT INTO restaurant (`a_emporter`,`accespmr`,`adresse`,`latitude`,`longitude`,`nom`,`prix`,`sur_place`,`telephone`,`website`) VALUES (1,1,'Place Jacques Duclot','48.85763987017326','2.4357752878301313','Street Wok',1,0,'','');
INSERT INTO restaurant (`a_emporter`,`accespmr`,`adresse`,`latitude`,`longitude`,`nom`,`prix`,`sur_place`,`telephone`,`website`) VALUES (1,NULL,'18 Bd Rouget de Lisle, 93100 Montreuil','48.86127664908431','2.440266447738863','La Casa',2,1,'0187004594','www.lacasa-pizza.fr/');
INSERT INTO restaurant (`a_emporter`,`accespmr`,`adresse`,`latitude`,`longitude`,`nom`,`prix`,`sur_place`,`telephone`,`website`) VALUES (1,1,'31 Rue Franklin, 93100 Montreuil','48.86373425237411','2.444081609130601','New Kyoto',2,1,'0142877365','https://newkyoto93.fr/');
INSERT INTO restaurant (`a_emporter`,`accespmr`,`adresse`,`latitude`,`longitude`,`nom`,`prix`,`sur_place`,`telephone`,`website`) VALUES (1,1,'86 Bd Henri Barbusse, 93100 Montreuil','48.868535950518506','2.4415787173758625','Cosa C E Da Mangiare',2,1,'0148510777','');
INSERT INTO restaurant (`a_emporter`,`accespmr`,`adresse`,`latitude`,`longitude`,`nom`,`prix`,`sur_place`,`telephone`,`website`) VALUES (1,1,'8 Av. Walwein, 93100 Montreuil','48.86227215595597','2.443526611143298','Bamboo & Sum',2,1,'0987366393','');
INSERT INTO restaurant (`a_emporter`,`accespmr`,`adresse`,`latitude`,`longitude`,`nom`,`prix`,`sur_place`,`telephone`,`website`) VALUES (1,NULL,'78 Av. de la Résistance, 93100 Montreuil','48.86260826926845','2.4370469579964404','O Bon Coin',1,1,'0953523586','');
INSERT INTO restaurant (`a_emporter`,`accespmr`,`adresse`,`latitude`,`longitude`,`nom`,`prix`,`sur_place`,`telephone`,`website`) VALUES (1,NULL,'14 Rue du Capitaine Dreyfus, 93100 Montreuil','48.85828992238344','2.437848545198565','Kashmir Café',2,1,'0143633386','http://www.kashmircafe.fr/');
INSERT INTO restaurant (`a_emporter`,`accespmr`,`adresse`,`latitude`,`longitude`,`nom`,`prix`,`sur_place`,`telephone`,`website`) VALUES (1,NULL,'45 Bd Paul Vaillant Couturier, 93100 Montreuil','48.86615467929139','2.4442899980905284','Le Marrakech',3,1,'0148589402','');
INSERT INTO restaurant (`a_emporter`,`accespmr`,`adresse`,`latitude`,`longitude`,`nom`,`prix`,`sur_place`,`telephone`,`website`) VALUES (1,NULL,'7 Bd Rouget de Lisle, 93100 Montreuil','48.86133951184523','2.4407883330629856','BOLKIRI Montreuil Street Food Viêt',2,1,'0184671708','http://bolkiri.fr/');
insert into preference (restau_id_restau, personne_id_personne, note, favori) values (2, 9, 1, false);
insert into preference (restau_id_restau, personne_id_personne, note, favori) values (3, 1, 5, false);
insert into preference (restau_id_restau, personne_id_personne, note, favori) values (1, 9, 3, true);
insert into preference (restau_id_restau, personne_id_personne, note, favori) values (4, 6, 2, false);
insert into preference (restau_id_restau, personne_id_personne, note, favori) values (5, 5, 5, false);
insert into preference (restau_id_restau, personne_id_personne, note, favori) values (1, 10, 1, false);
insert into preference (restau_id_restau, personne_id_personne, note, favori) values (5, 3, 5, false);
insert into preference (restau_id_restau, personne_id_personne, note, favori) values (1, 7, 1, true);
insert into preference (restau_id_restau, personne_id_personne, note, favori) values (4, 2, 1, false);
insert into preference (restau_id_restau, personne_id_personne, note, favori) values (1, 3, 5, false);
insert into preference (restau_id_restau, personne_id_personne, note, favori) values (3, 10, 4, false);
insert into preference (restau_id_restau, personne_id_personne, note, favori) values (3, 3, 4, true);
insert into preference (restau_id_restau, personne_id_personne, note, favori) values (2, 3, 3, false);
insert into preference (restau_id_restau, personne_id_personne, note, favori) values (2, 8, 3, false);
insert into preference (restau_id_restau, personne_id_personne, note, favori) values (5, 15, 3, false);
insert into preference (restau_id_restau, personne_id_personne, note, favori) values (8, 15, 3, false);
insert into type (id_type, libelle) values (1, 'Kebab');
insert into type (id_type, libelle) values (2, 'Supermarché');
insert into type (id_type, libelle) values (3, 'Boulangerie');
insert into type (id_type, libelle) values (4, 'Thaï');
insert into type (id_type, libelle) values (5, 'Français');
insert into type (id_type, libelle) values (6, 'Pizza');
insert into type (id_type, libelle) values (7, 'Brasserie');
insert into type (id_type, libelle) values (8, 'Americain');
insert into type (id_type, libelle) values (9, 'Japonais');
insert into type (id_type, libelle) values (11, 'Italien');
insert into type (id_type, libelle) values (13, 'Chinois');
insert into type (id_type, libelle) values (15, 'Hamburger');
insert into type (id_type, libelle) values (16, 'Indien');
insert into type (id_type, libelle) values (17, 'Marocain');
insert into type (id_type, libelle) values (20, 'Vietnamien');
insert into type (id_type, libelle) values (21, 'Bistrot');
insert into type (id_type, libelle) values (22, 'Poulet');
INSERT INTO type_restau (`id_restau`,`id_type`) VALUES (1,5);
INSERT INTO type_restau (`id_restau`,`id_type`) VALUES (2,5);
INSERT INTO type_restau (`id_restau`,`id_type`) VALUES (3,5);
INSERT INTO type_restau (`id_restau`,`id_type`) VALUES (4,5);
INSERT INTO type_restau (`id_restau`,`id_type`) VALUES (5,5);
INSERT INTO type_restau (`id_restau`,`id_type`) VALUES (6,8);
INSERT INTO type_restau (`id_restau`,`id_type`) VALUES (6,22);
INSERT INTO type_restau (`id_restau`,`id_type`) VALUES (7,7);
INSERT INTO type_restau (`id_restau`,`id_type`) VALUES (8,5);
INSERT INTO type_restau (`id_restau`,`id_type`) VALUES (9,21);
INSERT INTO type_restau (`id_restau`,`id_type`) VALUES (10,7);
INSERT INTO type_restau (`id_restau`,`id_type`) VALUES (42,1);
INSERT INTO type_restau (`id_restau`,`id_type`) VALUES (43,2);
INSERT INTO type_restau (`id_restau`,`id_type`) VALUES (44,3);
INSERT INTO type_restau (`id_restau`,`id_type`) VALUES (45,4);
INSERT INTO type_restau (`id_restau`,`id_type`) VALUES (46,6);
INSERT INTO type_restau (`id_restau`,`id_type`) VALUES (47,9);
INSERT INTO type_restau (`id_restau`,`id_type`) VALUES (48,11);
INSERT INTO type_restau (`id_restau`,`id_type`) VALUES (49,13);
INSERT INTO type_restau (`id_restau`,`id_type`) VALUES (50,15);
INSERT INTO type_restau (`id_restau`,`id_type`) VALUES (51,16);
INSERT INTO type_restau (`id_restau`,`id_type`) VALUES (52,17);
INSERT INTO type_restau (`id_restau`,`id_type`) VALUES (53,20);