merge resolution(gitignore)
This commit is contained in:
commit
d947455bb7
12
build.gradle
12
build.gradle
@ -13,10 +13,14 @@ repositories {
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
|
||||
implementation 'org.springframework.boot:spring-boot-starter-web'
|
||||
runtimeOnly 'mysql:mysql-connector-java'
|
||||
testImplementation 'org.springframework.boot:spring-boot-starter-test'
|
||||
implementation group: 'io.jsonwebtoken', name: 'jjwt', version: '0.9.0'
|
||||
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
|
||||
implementation 'org.springframework.boot:spring-boot-starter-web'
|
||||
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 {
|
||||
|
@ -1,13 +1,33 @@
|
||||
package fr.cardon.simpleat;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
|
||||
import org.springframework.boot.SpringApplication;
|
||||
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
|
||||
public class SimpleatApplication {
|
||||
|
||||
|
||||
|
||||
public static void main(String[] args) {
|
||||
SpringApplication.run(SimpleatApplication.class, args);
|
||||
}
|
||||
@Bean
|
||||
public BCryptPasswordEncoder bCryptPasswordEncoder() {
|
||||
return new BCryptPasswordEncoder();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
@ -5,6 +5,7 @@ import java.util.Collection;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.http.HttpStatus;
|
||||
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.DeleteMapping;
|
||||
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.PutMapping;
|
||||
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.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.Role;
|
||||
import fr.cardon.simpleat.repository.PersonneRepository;
|
||||
import fr.cardon.simpleat.repository.RoleRepository;
|
||||
import fr.cardon.simpleat.service.PersonneService;
|
||||
|
||||
@RestController
|
||||
@CrossOrigin("*")
|
||||
@CrossOrigin("http://localhost:4200")
|
||||
public class PersonneController {
|
||||
|
||||
|
||||
@ -29,7 +33,9 @@ public class PersonneController {
|
||||
private PersonneRepository personneRepository;
|
||||
|
||||
@Autowired
|
||||
private RoleRepository roleRepository;
|
||||
private PersonneService personneService;
|
||||
|
||||
|
||||
|
||||
@GetMapping("/")
|
||||
@ResponseBody
|
||||
@ -40,7 +46,6 @@ public class PersonneController {
|
||||
p1.setPrenom("pouet");
|
||||
p1.setEmail("pouetcoco@gmail.com");
|
||||
p1.setPassword("hjfdzov");
|
||||
p1.setRoles(findRoleById(2));
|
||||
|
||||
//ajoutPersonne(p1);
|
||||
|
||||
@ -57,24 +62,28 @@ public class PersonneController {
|
||||
|
||||
|
||||
@GetMapping("/users")
|
||||
@PreAuthorize("hasRole('ROLE_ADMIN')")
|
||||
public Collection<Personne> findAll(){
|
||||
|
||||
return personneRepository.findAll();
|
||||
}
|
||||
|
||||
@GetMapping("/user/{id}")
|
||||
@PreAuthorize("hasRole('ROLE_ADMIN') or hasRole('ROLE_READER')")
|
||||
public Personne findPersonneById(@PathVariable int id){
|
||||
|
||||
return personneRepository.findById(id);
|
||||
}
|
||||
|
||||
@PostMapping("/add-user")
|
||||
public ResponseEntity<?> ajoutPersonne(@RequestBody Personne personne){
|
||||
return ResponseEntity.status(HttpStatus.OK).body(personneRepository.save(personne));
|
||||
}
|
||||
// @PostMapping("/add-user")
|
||||
// @PreAuthorize("hasRole('ROLE_ADMIN')")
|
||||
// public ResponseEntity<?> ajoutPersonne(@RequestBody Personne personne){
|
||||
// return ResponseEntity.status(HttpStatus.OK).body(personneRepository.save(personne));
|
||||
// }
|
||||
|
||||
|
||||
@PutMapping(value = "/update-user/{id}")
|
||||
@PreAuthorize("hasRole('ROLE_ADMIN')")
|
||||
public ResponseEntity<?> modifPerso(@PathVariable int id, @RequestBody Personne personne){
|
||||
|
||||
// Personne persoAModif= null;
|
||||
@ -87,6 +96,7 @@ public class PersonneController {
|
||||
}
|
||||
|
||||
@DeleteMapping(value = "/delete-user/{id}")
|
||||
@PreAuthorize("hasRole('ROLE_ADMIN')")
|
||||
public void suppressionPerso(@PathVariable int id){
|
||||
// Personne persoASuppr= new Personne();
|
||||
// persoASuppr = findById(id);
|
||||
@ -95,9 +105,28 @@ public class PersonneController {
|
||||
}
|
||||
|
||||
|
||||
public Collection<Role> findRoleById(int idRole){
|
||||
return roleRepository.findCollectionById(idRole);
|
||||
}
|
||||
@PostMapping("/signin")
|
||||
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) {
|
||||
// return personneRepository.getById(id);
|
||||
|
@ -6,12 +6,12 @@ import java.util.Optional;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.http.HttpStatus;
|
||||
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.DeleteMapping;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PathVariable;
|
||||
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.RestController;
|
||||
|
||||
@ -36,6 +36,7 @@ public class PreferenceController {
|
||||
private RestaurantRepository restaurantRepository;
|
||||
|
||||
@GetMapping("/preferences")
|
||||
@PreAuthorize("hasRole('ROLE_ADMIN')")
|
||||
public Collection<Preference> findAll(){
|
||||
|
||||
return preferenceRepository.findAll();
|
||||
@ -43,6 +44,7 @@ public class PreferenceController {
|
||||
|
||||
|
||||
@GetMapping("/preference/{iduser}/{idrestau}")
|
||||
@PreAuthorize("hasRole('ROLE_ADMIN')")
|
||||
public Optional<Preference> findPreferenceById(@PathVariable int iduser, @PathVariable int idrestau ){
|
||||
PreferencePK id = new PreferencePK(personneRepository.getById(iduser) ,restaurantRepository.getById(idrestau));
|
||||
System.out.println(iduser);
|
||||
@ -50,8 +52,18 @@ public class PreferenceController {
|
||||
}
|
||||
|
||||
|
||||
@PostMapping("/add-preference")
|
||||
public ResponseEntity<?> ajoutPreference(@RequestBody Preference preference){
|
||||
// @PostMapping("/add-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));
|
||||
}
|
||||
|
||||
@ -61,11 +73,10 @@ public class PreferenceController {
|
||||
// return ResponseEntity.status(HttpStatus.OK).body(preferenceRepository.save(personne));
|
||||
// }
|
||||
//
|
||||
// @DeleteMapping(value = "/delete-restaurant/{id}")
|
||||
// public void suppressionPerso(@PathVariable int id){
|
||||
//
|
||||
// preferenceRepository.deleteById(id);
|
||||
// }
|
||||
|
||||
|
||||
@DeleteMapping("/delete-preference/{iduser}/{idrestau}")
|
||||
@PreAuthorize("hasRole('ROLE_ADMIN') or hasRole('ROLE_READER')")
|
||||
public void deletePreferenceById(@PathVariable int iduser, @PathVariable int idrestau ){
|
||||
PreferencePK id = new PreferencePK(personneRepository.getById(iduser) ,restaurantRepository.getById(idrestau));
|
||||
preferenceRepository.deleteById(id);
|
||||
}
|
||||
}
|
||||
|
@ -5,6 +5,7 @@ import java.util.Collection;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.http.HttpStatus;
|
||||
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.DeleteMapping;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
@ -26,28 +27,33 @@ public class RestaurantController {
|
||||
private RestaurantRepository restaurantRepository;
|
||||
|
||||
@GetMapping("/restaurants")
|
||||
@PreAuthorize("hasRole('ROLE_ADMIN') or hasRole('ROLE_READER')")
|
||||
public Collection<Restaurant> findAll(){
|
||||
|
||||
return restaurantRepository.findAll();
|
||||
}
|
||||
|
||||
@GetMapping("/restaurant/{id}")
|
||||
@PreAuthorize("hasRole('ROLE_ADMIN') or hasRole('ROLE_READER')")
|
||||
public Restaurant findRestaurantById(@PathVariable int id){
|
||||
return restaurantRepository.findById(id);
|
||||
}
|
||||
|
||||
@PostMapping("/add-restaurant")
|
||||
@PreAuthorize("hasRole('ROLE_ADMIN')")
|
||||
public ResponseEntity<?> ajoutRestaurant(@RequestBody Restaurant personne){
|
||||
return ResponseEntity.status(HttpStatus.OK).body(restaurantRepository.save(personne));
|
||||
}
|
||||
|
||||
|
||||
@PutMapping(value = "/update-restaurant/{id}")
|
||||
@PreAuthorize("hasRole('ROLE_ADMIN')")
|
||||
public ResponseEntity<?> modifRestaurant(@PathVariable int id, @RequestBody Restaurant personne){
|
||||
return ResponseEntity.status(HttpStatus.OK).body(restaurantRepository.save(personne));
|
||||
}
|
||||
|
||||
@DeleteMapping(value = "/delete-restaurant/{id}")
|
||||
@PreAuthorize("hasRole('ROLE_ADMIN')")
|
||||
public void suppressionRestaurant(@PathVariable int id){
|
||||
|
||||
restaurantRepository.deleteById(id);
|
||||
|
@ -2,10 +2,12 @@ package fr.cardon.simpleat.controller;
|
||||
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.http.HttpStatus;
|
||||
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.DeleteMapping;
|
||||
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.RestController;
|
||||
|
||||
import fr.cardon.simpleat.model.Restaurant;
|
||||
import fr.cardon.simpleat.model.TypeRestau;
|
||||
import fr.cardon.simpleat.repository.TypeRestauRepository;
|
||||
|
||||
@ -26,28 +29,39 @@ public class TypeRestauController {
|
||||
private TypeRestauRepository typeRestauRepository;
|
||||
|
||||
@GetMapping("/types")
|
||||
@PreAuthorize("hasRole('ROLE_ADMIN') or hasRole('ROLE_READER')")
|
||||
public Collection<TypeRestau> findAll(){
|
||||
|
||||
return typeRestauRepository.findAll();
|
||||
}
|
||||
|
||||
@GetMapping("/type/{id}")
|
||||
@PreAuthorize("hasRole('ROLE_ADMIN') or hasRole('ROLE_READER')")
|
||||
public TypeRestau findTypetById(@PathVariable int 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")
|
||||
@PreAuthorize("hasRole('ROLE_ADMIN')")
|
||||
public ResponseEntity<?> ajoutType(@RequestBody TypeRestau type){
|
||||
return ResponseEntity.status(HttpStatus.OK).body(typeRestauRepository.save(type));
|
||||
}
|
||||
|
||||
|
||||
@PutMapping(value = "/update-type/{id}")
|
||||
@PreAuthorize("hasRole('ROLE_ADMIN')")
|
||||
public ResponseEntity<?> modifType(@PathVariable int id, @RequestBody TypeRestau type){
|
||||
return ResponseEntity.status(HttpStatus.OK).body(typeRestauRepository.save(type));
|
||||
}
|
||||
|
||||
@DeleteMapping(value = "/delete-type/{id}")
|
||||
@PreAuthorize("hasRole('ROLE_ADMIN')")
|
||||
public void suppressionType(@PathVariable int id){
|
||||
|
||||
typeRestauRepository.deleteById(id);
|
||||
|
21
src/main/java/fr/cardon/simpleat/dto/JsonWebToken.java
Normal file
21
src/main/java/fr/cardon/simpleat/dto/JsonWebToken.java
Normal 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;
|
||||
}
|
||||
}
|
||||
|
||||
|
36
src/main/java/fr/cardon/simpleat/dto/PersonneDto.java
Normal file
36
src/main/java/fr/cardon/simpleat/dto/PersonneDto.java
Normal 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;
|
||||
}
|
||||
|
||||
}
|
@ -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 !";
|
||||
}
|
||||
}
|
@ -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 !";
|
||||
}
|
||||
}
|
@ -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 !";
|
||||
}
|
||||
|
||||
}
|
14
src/main/java/fr/cardon/simpleat/model/EnumRole.java
Normal file
14
src/main/java/fr/cardon/simpleat/model/EnumRole.java
Normal 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();
|
||||
}
|
||||
|
||||
}
|
@ -3,18 +3,28 @@ package fr.cardon.simpleat.model;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
import javax.persistence.CascadeType;
|
||||
import javax.persistence.Column;
|
||||
import javax.persistence.ElementCollection;
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.EnumType;
|
||||
import javax.persistence.Enumerated;
|
||||
import javax.persistence.FetchType;
|
||||
import javax.persistence.GeneratedValue;
|
||||
import javax.persistence.GenerationType;
|
||||
import javax.persistence.Id;
|
||||
import javax.persistence.JoinColumn;
|
||||
import javax.persistence.JoinTable;
|
||||
import javax.persistence.ManyToMany;
|
||||
import javax.persistence.OneToMany;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
||||
|
||||
|
||||
|
||||
@Entity
|
||||
public class Personne {
|
||||
|
||||
@ -23,7 +33,8 @@ public class Personne {
|
||||
private String prenom;
|
||||
private String email;
|
||||
private String password;
|
||||
private Collection<Role> roles = new ArrayList<Role>();
|
||||
private Collection<Preference> preference = new ArrayList<Preference>();
|
||||
private List<EnumRole> roleList;
|
||||
|
||||
|
||||
public Personne() {
|
||||
@ -31,6 +42,30 @@ public class Personne {
|
||||
// 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) {
|
||||
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
|
||||
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||
@Column(name = "id_personne")
|
||||
@ -93,18 +118,30 @@ public class Personne {
|
||||
public void setPassword(String password) {
|
||||
this.password = password;
|
||||
}
|
||||
|
||||
|
||||
@ManyToMany
|
||||
@JoinTable(name="role_personne",
|
||||
joinColumns = @JoinColumn(name = "id_perso"/*nom créé dans table asso*/,referencedColumnName = "id_personne" /*classe en cours*/) )
|
||||
@JsonIgnoreProperties("roles")
|
||||
public Collection<Role> getRoles() {
|
||||
return roles;
|
||||
@OneToMany(mappedBy = "preferencePK.personne", cascade = CascadeType.REMOVE)
|
||||
//@JsonIgnore
|
||||
public Collection<Preference> getPreference() {
|
||||
return preference;
|
||||
}
|
||||
|
||||
|
||||
public void setRoles(Collection<Role> roles) {
|
||||
this.roles = roles;
|
||||
public void setPreference(Collection<Preference> preference) {
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
@ -19,6 +19,13 @@ public class Preference {
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
public Preference(PreferencePK preferencePK) {
|
||||
super();
|
||||
this.preferencePK = preferencePK;
|
||||
}
|
||||
|
||||
public Preference(PreferencePK preferencePK, int note, boolean favoris) {
|
||||
super();
|
||||
this.preferencePK = preferencePK;
|
||||
@ -51,4 +58,4 @@ public class Preference {
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
@ -8,7 +8,10 @@ import javax.persistence.Embeddable;
|
||||
import javax.persistence.FetchType;
|
||||
import javax.persistence.JoinColumn;
|
||||
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;
|
||||
|
||||
|
||||
@ -37,8 +40,8 @@ public class PreferencePK implements Serializable {
|
||||
|
||||
|
||||
@ManyToOne
|
||||
@JoinColumn(name="id_personne", referencedColumnName ="id_personne" )
|
||||
@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
|
||||
@PrimaryKeyJoinColumn(name="id_personne", referencedColumnName ="id_personne" )
|
||||
@JsonBackReference("personne")
|
||||
public Personne getPersonne() {
|
||||
return personne;
|
||||
}
|
||||
@ -50,7 +53,7 @@ public class PreferencePK implements Serializable {
|
||||
|
||||
|
||||
@ManyToOne // TODO mappedBy preferences dans restaurant
|
||||
@JoinColumn(name="id_restau",referencedColumnName ="id_restau" )
|
||||
@PrimaryKeyJoinColumn(name="id_restau",referencedColumnName ="id_restau" )
|
||||
@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
|
||||
public Restaurant getRestau() {
|
||||
return restau;
|
||||
@ -63,4 +66,4 @@ public class PreferencePK implements Serializable {
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
@ -12,8 +12,9 @@ import javax.persistence.Id;
|
||||
import javax.persistence.JoinColumn;
|
||||
import javax.persistence.JoinTable;
|
||||
import javax.persistence.ManyToMany;
|
||||
import javax.persistence.OneToMany;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
||||
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||
|
||||
|
||||
@Entity
|
||||
@ -23,25 +24,22 @@ public class Restaurant {
|
||||
private String nom;
|
||||
private String adresse;
|
||||
private String telephone;
|
||||
private boolean aEmporter;
|
||||
private boolean surPlace;
|
||||
private double prix;
|
||||
private boolean accesPMR;
|
||||
private Boolean aEmporter;
|
||||
private Boolean surPlace;
|
||||
private Integer prix;
|
||||
private Boolean accesPMR;
|
||||
private String latitude;
|
||||
private String longitude;
|
||||
private String website;
|
||||
private Collection<TypeRestau> typerestaus = new ArrayList<TypeRestau>();
|
||||
|
||||
//TODO @OneToMany relier avec une collec de preferences
|
||||
|
||||
private Collection<Preference> preference = new ArrayList<Preference>();
|
||||
public Restaurant() {
|
||||
super();
|
||||
// TODO Auto-generated constructor stub
|
||||
}
|
||||
|
||||
|
||||
public Restaurant(String nom, String adresse, String telephone, boolean aEmporter, boolean surPlace, double prix,
|
||||
boolean accesPMR, String latitude, String longitude, String website, Collection<TypeRestau> typerestaus) {
|
||||
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) {
|
||||
super();
|
||||
this.nom = nom;
|
||||
this.adresse = adresse;
|
||||
@ -89,31 +87,31 @@ public class Restaurant {
|
||||
this.telephone = telephone;
|
||||
}
|
||||
@Column(nullable = true)
|
||||
public boolean isaEmporter() {
|
||||
public Boolean isaEmporter() {
|
||||
return aEmporter;
|
||||
}
|
||||
public void setaEmporter(boolean aEmporter) {
|
||||
public void setaEmporter(Boolean aEmporter) {
|
||||
this.aEmporter = aEmporter;
|
||||
}
|
||||
@Column(nullable = true)
|
||||
public boolean isSurPlace() {
|
||||
public Boolean isSurPlace() {
|
||||
return surPlace;
|
||||
}
|
||||
public void setSurPlace(boolean surPlace) {
|
||||
public void setSurPlace(Boolean surPlace) {
|
||||
this.surPlace = surPlace;
|
||||
}
|
||||
@Column(nullable = true)
|
||||
public double getPrix() {
|
||||
public Integer getPrix() {
|
||||
return prix;
|
||||
}
|
||||
public void setPrix(double prixMin) {
|
||||
this.prix = prixMin;
|
||||
public void setPrix(Integer prix) {
|
||||
this.prix = prix;
|
||||
}
|
||||
@Column(nullable = true)
|
||||
public boolean isAccesPMR() {
|
||||
public Boolean isAccesPMR() {
|
||||
return accesPMR;
|
||||
}
|
||||
public void setAccesPMR(boolean accesPMR) {
|
||||
public void setAccesPMR(Boolean accesPMR) {
|
||||
this.accesPMR = accesPMR;
|
||||
}
|
||||
@Column(nullable = false)
|
||||
@ -142,7 +140,6 @@ public class Restaurant {
|
||||
@JoinTable(name="type_restau",
|
||||
joinColumns = @JoinColumn(name = "id_restau"/*classe en cours*/,referencedColumnName = "id_restau" /*classe reliée*/) ,
|
||||
inverseJoinColumns = @JoinColumn(name = "id_type",referencedColumnName = "id_type"))
|
||||
@JsonIgnoreProperties("typerestaus")
|
||||
public Collection<TypeRestau> getTyperestaus() {
|
||||
return typerestaus;
|
||||
}
|
||||
@ -150,5 +147,15 @@ public class Restaurant {
|
||||
public void setTyperestaus(Collection<TypeRestau> 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;
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
@ -10,7 +10,7 @@ import javax.persistence.Id;
|
||||
import javax.persistence.ManyToMany;
|
||||
import javax.persistence.Table;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
||||
import com.fasterxml.jackson.annotation.JsonBackReference;
|
||||
|
||||
|
||||
@Entity
|
||||
@ -49,7 +49,7 @@ public class TypeRestau {
|
||||
}
|
||||
|
||||
@ManyToMany(mappedBy="typerestaus")
|
||||
@JsonIgnoreProperties("typerestaus")
|
||||
@JsonBackReference("restaurants")
|
||||
public List<Restaurant> getRestaurants() {
|
||||
return restaurants;
|
||||
}
|
||||
|
@ -1,5 +1,7 @@
|
||||
package fr.cardon.simpleat.repository;
|
||||
|
||||
import java.util.Optional;
|
||||
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
@ -9,5 +11,11 @@ import fr.cardon.simpleat.model.Personne;
|
||||
public interface PersonneRepository extends JpaRepository<Personne, Integer> {
|
||||
|
||||
Personne findById(int id);
|
||||
|
||||
Optional<Personne> findByEmail(String email);
|
||||
|
||||
boolean existsByEmail(String email);
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
@ -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);
|
||||
|
||||
}
|
@ -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);
|
||||
}
|
||||
}
|
189
src/main/java/fr/cardon/simpleat/security/JwtTokenProvider.java
Normal file
189
src/main/java/fr/cardon/simpleat/security/JwtTokenProvider.java
Normal 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();
|
||||
}
|
||||
}
|
||||
}
|
@ -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/**");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
}
|
@ -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);
|
||||
}
|
||||
}
|
@ -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();
|
||||
}
|
||||
}
|
619
src/main/resources/PostmanV2
Normal file
619
src/main/resources/PostmanV2
Normal 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": []
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
@ -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
|
||||
# ===============================
|
||||
@ -13,10 +18,11 @@ spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
|
||||
# JPA / HIBERNATE
|
||||
# ===============================
|
||||
spring.jpa.show-sql=true
|
||||
spring.jpa.hibernate.ddl-auto=update
|
||||
##spring.jpa.hibernate.ddl-auto=create-drop
|
||||
##spring.jpa.hibernate.ddl-auto=update
|
||||
spring.jpa.hibernate.ddl-auto=create-drop
|
||||
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5InnoDBDialect
|
||||
# ===============================
|
||||
# Permet d'exécuter le data.sql
|
||||
# ===============================
|
||||
##spring.sql.init.mode=always
|
||||
spring.sql.init.mode=always
|
||||
spring.jpa.defer-datasource-initialization=true
|
@ -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 (nom, prenom, email, password) values ('Fisbey', 'Jammal', 'jfisbey1@apache.org', 'YY0TuY6JH0di');
|
||||
insert into personne (nom, prenom, email, password) values ('Scrivener', 'Anatol', 'ascrivener2@jugem.jp', 'C4sfAW4');
|
||||
insert into personne (nom, prenom, email, password) values ('Berthelet', 'Oralla', 'oberthelet3@cnbc.com', 'ACdXxMr');
|
||||
insert into personne (nom, prenom, email, password) values ('Towe', 'Homerus', 'htowe4@home.pl', 'pQGi41q5JHY');
|
||||
insert into personne (nom, prenom, email, password) values ('Viggers', 'Gaby', 'gviggers5@xing.com', 'Gbr2M5UU');
|
||||
insert into personne (nom, prenom, email, password) values ('Willshere', 'Sheba', 'swillshere6@tinyurl.com', 'yVJmjda');
|
||||
insert into personne (nom, prenom, email, password) values ('Docksey', 'Eula', 'edocksey7@mozilla.com', '6yS7lkFpuY');
|
||||
insert into personne (nom, prenom, email, password) values ('Iglesias', 'Christen', 'ciglesias8@ebay.com', 'ottn7Qb');
|
||||
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 (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 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 (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 (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 (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 (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,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 (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 (id_restau, id_personne, note, favori) values (4, 6, 2, false);
|
||||
insert into preference (id_restau, id_personne, note, favori) values (5, 5, 5, false);
|
||||
insert into preference (id_restau, id_personne, note, favori) values (1, 10, 1, false);
|
||||
insert into preference (id_restau, id_personne, note, favori) values (5, 3, 5, false);
|
||||
insert into preference (id_restau, id_personne, note, favori) values (1, 7, 1, true);
|
||||
insert into preference (id_restau, id_personne, note, favori) values (4, 2, 1, false);
|
||||
insert into preference (id_restau, id_personne, note, favori) values (1, 3, 5, false);
|
||||
insert into preference (id_restau, id_personne, note, favori) values (3, 10, 4, false);
|
||||
insert into preference (id_restau, id_personne, note, favori) values (3, 3, 4, true);
|
||||
insert into preference (id_restau, id_personne, note, favori) values (2, 3, 3, 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 (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é');
|
||||
@ -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 (8, 'Americain');
|
||||
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 (12, 'Sushis');
|
||||
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 (16, 'Indien');
|
||||
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 (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);
|
230
src/main/resources/script-simpleat.sql
Normal file
230
src/main/resources/script-simpleat.sql
Normal 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);
|
Loading…
Reference in New Issue
Block a user