diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000..a9114bd Binary files /dev/null and b/.DS_Store differ diff --git a/README.md b/README.md index 1530e9c..e69de29 100644 --- a/README.md +++ b/README.md @@ -1,33 +0,0 @@ -# Login Registration Backend - -Complete login registration backend system using Spring Boot. - -[![YouTube Video](https://user-images.githubusercontent.com/40702606/104790682-d62ac880-578f-11eb-8353-aa68739ffe42.png)](https://www.youtube.com/watch?v=QwQuro7ekvc) - -- [x] Spring Boot -- [x] Spring Security -- [x] Java Mail -- [x] Email verification with expiry -- [x] Spring Boot - -## Diagram -![Screenshot 2021-01-13 at 23 38 08](https://user-images.githubusercontent.com/40702606/104789980-15581a00-578e-11eb-998d-30f2e6a9f461.png) - -## Email verification link with expiry -![Screenshot 2021-01-13 at 23 37 33](https://user-images.githubusercontent.com/40702606/104789893-0c674880-578e-11eb-939a-2a1cd3a8dfd2.png) - -## Example requests -### Postman -![Screenshot 2021-01-13 at 23 37 57](https://user-images.githubusercontent.com/40702606/104790087-7a137480-578e-11eb-8141-307a8850c39e.png) - -### CURL -``` -curl --location --request POST 'localhost:8080/api/v1/registration' \ ---header 'Content-Type: application/json' \ ---data-raw '{ - "firstName": "Amigos", - "lastName": "Code", - "email": "hellow@amigoscode.com", - "password": "password" -}' -``` diff --git a/pom.xml b/pom.xml index 167df52..25a3a5d 100644 --- a/pom.xml +++ b/pom.xml @@ -19,6 +19,11 @@ + + mysql + mysql-connector-java + runtime + org.springframework.boot spring-boot-starter-data-jpa @@ -36,14 +41,15 @@ spring-boot-starter-web - + org.projectlombok lombok + 1.18.22 true @@ -51,15 +57,36 @@ spring-boot-starter-test test + + + commons-io + commons-io + 2.6 + + org.springframework.security spring-security-test test + + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.1 + + + org.apache.maven.plugins + maven-compiler-plugin + + 1.8 + 1.8 + + org.springframework.boot spring-boot-maven-plugin diff --git a/src/.DS_Store b/src/.DS_Store new file mode 100644 index 0000000..ec2d0fb Binary files /dev/null and b/src/.DS_Store differ diff --git a/src/main/.DS_Store b/src/main/.DS_Store new file mode 100644 index 0000000..c8daf0b Binary files /dev/null and b/src/main/.DS_Store differ diff --git a/src/main/java/.DS_Store b/src/main/java/.DS_Store new file mode 100644 index 0000000..e8fa240 Binary files /dev/null and b/src/main/java/.DS_Store differ diff --git a/src/main/java/com/example/demo/appuser/AppUserRole.java b/src/main/java/com/example/demo/appuser/AppUserRole.java deleted file mode 100644 index b05de93..0000000 --- a/src/main/java/com/example/demo/appuser/AppUserRole.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.example.demo.appuser; - -public enum AppUserRole { - USER, - ADMIN -} diff --git a/src/main/java/com/example/demo/email/EmailSender.java b/src/main/java/com/example/demo/email/EmailSender.java deleted file mode 100644 index 3b2c58b..0000000 --- a/src/main/java/com/example/demo/email/EmailSender.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.example.demo.email; - -public interface EmailSender { - void send(String to, String email); -} diff --git a/src/main/java/com/example/demo/email/EmailService.java b/src/main/java/com/example/demo/email/EmailService.java deleted file mode 100644 index 975c44f..0000000 --- a/src/main/java/com/example/demo/email/EmailService.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.example.demo.email; - -import lombok.AllArgsConstructor; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.mail.javamail.JavaMailSender; -import org.springframework.mail.javamail.MimeMessageHelper; -import org.springframework.scheduling.annotation.Async; -import org.springframework.stereotype.Service; - -import javax.mail.MessagingException; -import javax.mail.internet.MimeMessage; - -@Service -@AllArgsConstructor -public class EmailService implements EmailSender{ - - private final static Logger LOGGER = LoggerFactory - .getLogger(EmailService.class); - - private final JavaMailSender mailSender; - - @Override - @Async - public void send(String to, String email) { - try { - MimeMessage mimeMessage = mailSender.createMimeMessage(); - MimeMessageHelper helper = - new MimeMessageHelper(mimeMessage, "utf-8"); - helper.setText(email, true); - helper.setTo(to); - helper.setSubject("Confirm your email"); - helper.setFrom("hello@amigoscode.com"); - mailSender.send(mimeMessage); - } catch (MessagingException e) { - LOGGER.error("failed to send email", e); - throw new IllegalStateException("failed to send email"); - } - } -} diff --git a/src/main/java/com/example/demo/registration/RegistrationController.java b/src/main/java/com/example/demo/registration/RegistrationController.java deleted file mode 100644 index c8b12b8..0000000 --- a/src/main/java/com/example/demo/registration/RegistrationController.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.example.demo.registration; - -import lombok.AllArgsConstructor; -import org.springframework.web.bind.annotation.*; - -@RestController -@RequestMapping(path = "api/v1/registration") -@AllArgsConstructor -public class RegistrationController { - - private final RegistrationService registrationService; - - @PostMapping - public String register(@RequestBody RegistrationRequest request) { - return registrationService.register(request); - } - - @GetMapping(path = "confirm") - public String confirm(@RequestParam("token") String token) { - return registrationService.confirmToken(token); - } - -} diff --git a/src/main/java/com/example/demo/registration/RegistrationService.java b/src/main/java/com/example/demo/registration/RegistrationService.java deleted file mode 100644 index f505b11..0000000 --- a/src/main/java/com/example/demo/registration/RegistrationService.java +++ /dev/null @@ -1,142 +0,0 @@ -package com.example.demo.registration; - -import com.example.demo.appuser.AppUser; -import com.example.demo.appuser.AppUserRole; -import com.example.demo.appuser.AppUserService; -import com.example.demo.email.EmailSender; -import com.example.demo.registration.token.ConfirmationToken; -import com.example.demo.registration.token.ConfirmationTokenService; -import lombok.AllArgsConstructor; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.time.LocalDateTime; - -@Service -@AllArgsConstructor -public class RegistrationService { - - private final AppUserService appUserService; - private final EmailValidator emailValidator; - private final ConfirmationTokenService confirmationTokenService; - private final EmailSender emailSender; - - public String register(RegistrationRequest request) { - boolean isValidEmail = emailValidator. - test(request.getEmail()); - - if (!isValidEmail) { - throw new IllegalStateException("email not valid"); - } - - String token = appUserService.signUpUser( - new AppUser( - request.getFirstName(), - request.getLastName(), - request.getEmail(), - request.getPassword(), - AppUserRole.USER - - ) - ); - - String link = "http://localhost:8080/api/v1/registration/confirm?token=" + token; - emailSender.send( - request.getEmail(), - buildEmail(request.getFirstName(), link)); - - return token; - } - - @Transactional - public String confirmToken(String token) { - ConfirmationToken confirmationToken = confirmationTokenService - .getToken(token) - .orElseThrow(() -> - new IllegalStateException("token not found")); - - if (confirmationToken.getConfirmedAt() != null) { - throw new IllegalStateException("email already confirmed"); - } - - LocalDateTime expiredAt = confirmationToken.getExpiresAt(); - - if (expiredAt.isBefore(LocalDateTime.now())) { - throw new IllegalStateException("token expired"); - } - - confirmationTokenService.setConfirmedAt(token); - appUserService.enableAppUser( - confirmationToken.getAppUser().getEmail()); - return "confirmed"; - } - - private String buildEmail(String name, String link) { - return "
\n" + - "\n" + - "\n" + - "\n" + - " \n" + - " \n" + - " \n" + - " \n" + - "
\n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - "
\n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - "
\n" + - " \n" + - " \n" + - " Confirm your email\n" + - "
\n" + - " \n" + - "
\n" + - " \n" + - "
\n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - "
\n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - "
\n" + - " \n" + - "
\n" + - "\n" + - "\n" + - "\n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - "


\n" + - " \n" + - "

Hi " + name + ",

Thank you for registering. Please click on the below link to activate your account:

Activate Now

\n Link will expire in 15 minutes.

See you soon

" + - " \n" + - "


\n" + - "\n" + - "
"; - } -} diff --git a/src/main/java/ethniconnect_backend/.DS_Store b/src/main/java/ethniconnect_backend/.DS_Store new file mode 100644 index 0000000..f68ae55 Binary files /dev/null and b/src/main/java/ethniconnect_backend/.DS_Store differ diff --git a/src/main/java/ethniconnect_backend/ChefCreateMenu/ChefMenu.java b/src/main/java/ethniconnect_backend/ChefCreateMenu/ChefMenu.java new file mode 100644 index 0000000..f565e4c --- /dev/null +++ b/src/main/java/ethniconnect_backend/ChefCreateMenu/ChefMenu.java @@ -0,0 +1,51 @@ +package ethniconnect_backend.ChefCreateMenu; + +import ethniconnect_backend.ChefDetails.Chef; +import ethniconnect_backend.Cuisines.CuisineCategory; +import lombok.*; + +import javax.persistence.*; + +@Data +@NoArgsConstructor +@AllArgsConstructor +@Getter +@Setter +@Entity +@Table(name = "chefmenu") +public class ChefMenu { + @Id + @GeneratedValue + private int id; + @Enumerated(EnumType.STRING) + private MenuCategories menucategories; + //private int cuisine_id; + @Lob + @Column(columnDefinition = "MEDIUMBLOB") + private String menu_item_image; + private String item_name; + private double menu_item_price; + private String item_ingredients; + private String item_intresting_facts; + @Enumerated(EnumType.STRING) + private Week week; + private long loginid; + + //@ManyToOne + @ManyToOne + @JoinColumn(name = "cuisine_id") + private CuisineCategory cuisineCategory; +// @ManyToMany(mappedBy = "menu_items") +// Set orders; + + @ManyToOne + @JoinColumn (name="loginid", insertable = false, updatable = false) + private Chef chef; + /*@JoinTable( + name = "selected_cuisines", + joinColumns = @JoinColumn(name = "menu_item_id"), + inverseJoinColumns = @JoinColumn(name = "cuisine_id")) + Set selectedCuisines;*/ + + +} diff --git a/src/main/java/ethniconnect_backend/ChefCreateMenu/ChefMenuController.java b/src/main/java/ethniconnect_backend/ChefCreateMenu/ChefMenuController.java new file mode 100644 index 0000000..93bf311 --- /dev/null +++ b/src/main/java/ethniconnect_backend/ChefCreateMenu/ChefMenuController.java @@ -0,0 +1,75 @@ +package ethniconnect_backend.ChefCreateMenu; + +import ethniconnect_backend.ChefDetails.Chef; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@CrossOrigin() +@RestController +public class ChefMenuController { + + @Autowired + private ChefMenuService chefMenuService; + @Autowired + private ChefMenuRepository chefMenuRepository; + + @PostMapping("/chefmenu") + + public String addChefMenu(@RequestBody ChefMenuRequest chefMenuRequest) throws Exception { + + chefMenuService.saveChefMenuJson(chefMenuRequest); + + /*chefMenuService.saveChefMenu(file, login_id, menuCategories,cuisine_id, + item_name,menu_item_price,item_ingredients,item_intresting_facts,week);*/ + return "Menu details added"; + } + + /* public String addChefMenu(@RequestParam("file") MultipartFile file, + @RequestParam("login_id") long login_id, + @RequestParam("menucategories") MenuCategories menuCategories, + @RequestParam("cuisine_id") int cuisine_id, + @RequestParam("item_name") String item_name, + + @RequestParam("menu_item_price") double menu_item_price, + @RequestParam("item_ingredients") String item_ingredients, + @RequestParam("item_intresting_facts") String item_intresting_facts, + @RequestParam("week") Week week) throws Exception { + chefMenuService.saveChefMenu(file, login_id, menuCategories,cuisine_id, + item_name,menu_item_price,item_ingredients,item_intresting_facts,week); + return "chef details added"; + } +*/ + @GetMapping({"/ChefmenuByChefloginid/{id}"}) + public ChefMenuGETResponse findChefMenuById(@PathVariable int id) + { + Long loginidlong = new Long(id); + return chefMenuService.getChefMenuByLoginId(loginidlong.longValue()); + } + + @GetMapping({"/chefByCuisineId/{id}/{zipCode}"}) + public List findChefByCuisineId(@PathVariable int id, @PathVariable int zipCode) + { + return chefMenuService.getChefByCuisineId(id,zipCode); + } + + @PutMapping("/updatechefmenu") + public ChefMenu updateChefMenu(@RequestBody ChefMenu chefMenu) + { + return chefMenuService.updateChefMenu(chefMenu); + } +} + /*@GetMapping({"/chefByCuisineId/{cuisineId}"}) + public List getChefByCuisineId(@PathVariable String cuisineId) + { + return chefProfileService.getChefByCuisineId(cuisineId); + } + + @GetMapping({"/getCuisinesByZipCode/{zipCode}"}) + public List getCuisinesByZipCode(@PathVariable String zipCode) + { + return chefProfileService.getCuisinesByZipCode(zipCode); + }*/ + + diff --git a/src/main/java/ethniconnect_backend/ChefCreateMenu/ChefMenuGETResponse.java b/src/main/java/ethniconnect_backend/ChefCreateMenu/ChefMenuGETResponse.java new file mode 100644 index 0000000..50bac84 --- /dev/null +++ b/src/main/java/ethniconnect_backend/ChefCreateMenu/ChefMenuGETResponse.java @@ -0,0 +1,28 @@ +package ethniconnect_backend.ChefCreateMenu; + +import lombok.*; + +import java.util.List; + + +@Builder +@Getter +@Setter +@Data +@NoArgsConstructor +@AllArgsConstructor +public class ChefMenuGETResponse { + List chefMenuList; + + /* private long login_id; + private int cuisine_id; + private MenuCategories menucategories; + private String menu_item_image; + private String item_name; + private double menu_item_price; + private String item_ingredients; + private String item_intresting_facts; + private Week week;*/ + + +} diff --git a/src/main/java/ethniconnect_backend/ChefCreateMenu/ChefMenuItem.java b/src/main/java/ethniconnect_backend/ChefCreateMenu/ChefMenuItem.java new file mode 100644 index 0000000..4a8085e --- /dev/null +++ b/src/main/java/ethniconnect_backend/ChefCreateMenu/ChefMenuItem.java @@ -0,0 +1,23 @@ +package ethniconnect_backend.ChefCreateMenu; + +import lombok.*; + +import javax.persistence.EnumType; +import javax.persistence.Enumerated; + +@Data +@Builder +@Getter +@Setter +@AllArgsConstructor +@ToString +public class ChefMenuItem { + + @Enumerated(EnumType.STRING) + private MenuCategories menucategories; + private String menu_item_image; + private String item_name; + private double menu_item_price; + private String item_ingredients; + private String item_intresting_facts; +} diff --git a/src/main/java/ethniconnect_backend/ChefCreateMenu/ChefMenuRepository.java b/src/main/java/ethniconnect_backend/ChefCreateMenu/ChefMenuRepository.java new file mode 100644 index 0000000..1f555a6 --- /dev/null +++ b/src/main/java/ethniconnect_backend/ChefCreateMenu/ChefMenuRepository.java @@ -0,0 +1,16 @@ +package ethniconnect_backend.ChefCreateMenu; + +import ethniconnect_backend.ChefDetails.Chef; +import org.springframework.data.jpa.repository.JpaRepository; + + +import java.util.List; +import java.util.Optional; + +public interface ChefMenuRepository extends JpaRepository { + List findAllByChef(Chef chef); + + List findAllByCuisineCategory_Id(int cuisineId); + + +} diff --git a/src/main/java/ethniconnect_backend/ChefCreateMenu/ChefMenuRequest.java b/src/main/java/ethniconnect_backend/ChefCreateMenu/ChefMenuRequest.java new file mode 100644 index 0000000..9a066e8 --- /dev/null +++ b/src/main/java/ethniconnect_backend/ChefCreateMenu/ChefMenuRequest.java @@ -0,0 +1,28 @@ +package ethniconnect_backend.ChefCreateMenu; + +import ethniconnect_backend.Cuisines.CuisineCategory; +import lombok.*; + +import javax.persistence.*; +import java.util.List; + +@Data +@Builder +@Getter +@Setter +@AllArgsConstructor +@ToString +public class ChefMenuRequest { + private int id; + private long login_id; + private List menu; + private int cuisine_id; + private String item_name; + private int menu_item_price; + private String item_ingredients; + private String item_intresting_facts; + @Enumerated(EnumType.STRING) + private Week week; + + +} diff --git a/src/main/java/ethniconnect_backend/ChefCreateMenu/ChefMenuResponse.java b/src/main/java/ethniconnect_backend/ChefCreateMenu/ChefMenuResponse.java new file mode 100644 index 0000000..7e21b91 --- /dev/null +++ b/src/main/java/ethniconnect_backend/ChefCreateMenu/ChefMenuResponse.java @@ -0,0 +1,24 @@ +package ethniconnect_backend.ChefCreateMenu; + +import lombok.*; + +@Data +@Builder +@Getter +@Setter +@AllArgsConstructor +@ToString +public class ChefMenuResponse { + + private int menuid; + private String menucategory; + private String menu_item_image; + private String item_name; + private double menu_item_price; + private String item_ingredients; + private String item_intresting_facts; + private String week; + private String cuisineCategory; + + +} diff --git a/src/main/java/ethniconnect_backend/ChefCreateMenu/ChefMenuService.java b/src/main/java/ethniconnect_backend/ChefCreateMenu/ChefMenuService.java new file mode 100644 index 0000000..9ef09e2 --- /dev/null +++ b/src/main/java/ethniconnect_backend/ChefCreateMenu/ChefMenuService.java @@ -0,0 +1,254 @@ +package ethniconnect_backend.ChefCreateMenu; + +import ethniconnect_backend.ChefDetails.Chef; +import ethniconnect_backend.ChefDetails.ChefRepository; +import ethniconnect_backend.Cuisines.CuisineCategoriesRepository; +import ethniconnect_backend.Cuisines.CuisineCategory; +import ethniconnect_backend.UserCredentials.UserCredentials; +import ethniconnect_backend.UserCredentials.UserCredentialsRepository; +import ethniconnect_backend.Zip.ZipCode; +import ethniconnect_backend.Zip.Root; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.client.RestTemplate; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Base64; +import java.util.List; +import java.util.Optional; +import java.util.*; +import java.util.stream.Collectors; + +@Service +public class ChefMenuService { + + @Autowired + private ChefMenuRepository chefMenuRepository; + @Autowired + private UserCredentialsRepository userCredentialsRepository; + + @Autowired + CuisineCategoriesRepository cuisineCategoriesRepository; + @Autowired + private ChefRepository chefRepository; + @Autowired + private RestTemplate restTemplate; + public void saveChefMenuJson(ChefMenuRequest chefMenuRequest) throws Exception{ + + + ChefMenu chefMenu =null; + + Optional userData = userCredentialsRepository.findById(chefMenuRequest.getLogin_id()); + if(!userData.isPresent()) + throw new Exception("user Id doesn't exist"); + Optional cuisineCategory = cuisineCategoriesRepository.findById(chefMenuRequest.getCuisine_id()); + if(cuisineCategory == null) + throw new Exception("cuisine category doesn't exist"); + + Optional chef = chefRepository.findByLoginid(chefMenuRequest.getLogin_id()); + if(chef==null) + throw new Exception("chef doesn't exist"); + + for(ChefMenuItem chefMenuItem:chefMenuRequest.getMenu()) + { + // Long loginId = userData.get().getId(); + if(cuisineCategory == null) + throw new Exception("cuisine category doesn't exist"); + chefMenu =new ChefMenu(); + chefMenu.setCuisineCategory(cuisineCategory.get()); + chefMenu.setChef(chef.get()); + chefMenu.setItem_name(chefMenuRequest.getItem_name()); + chefMenu.setLoginid(chef.get().getLoginid()); + chefMenu.setMenu_item_image(chefMenuItem.getMenu_item_image()); + chefMenu.setItem_intresting_facts(chefMenuItem.getItem_intresting_facts()); + chefMenu.setItem_name(chefMenuItem.getItem_name()); + chefMenu.setMenucategories(chefMenuItem.getMenucategories()); + chefMenu.setItem_ingredients(chefMenuItem.getItem_ingredients()); + chefMenu.setMenu_item_price(chefMenuItem.getMenu_item_price()); + chefMenu.setWeek(chefMenuRequest.getWeek()); + chefMenuRepository.save(chefMenu); + } + + } + + /*public void saveChefMenu(MultipartFile file, int login_id,MenuCategories menucategories,int cuisine_id, + String item_name,double menu_item_price,String item_ingredients, + String item_intresting_facts,Week week + ) throws Exception + { + ChefMenu chefMenu =new ChefMenu(); + Optional userData = userCredentialsRepository.findByLoginid(login_id); + if(!userData.isPresent()) + throw new Exception("user Id doesn't exist"); + Optional cuisineCategory = cuisineCategoriesRepository.findById(cuisine_id); + // Long loginId = userData.get().getId(); + if(cuisineCategory == null) + throw new Exception("Cuisine doesn't exist"); + Optional chef = chefRepository.findByLoginid(login_id); + if(chef==null) + throw new Exception("chef doesn't exist"); + String fileName = StringUtils.cleanPath(file.getOriginalFilename()); + if(fileName.contains("..")) + { + System.out.println("not a a valid file"); + } + try { + chefMenu.setMenu_item_image(Base64.getEncoder().encodeToString(file.getBytes())); + } catch (IOException e) { + e.printStackTrace(); + } + chefMenu.setMenucategories(menucategories); + + chefMenu.setMenu_item_price(menu_item_price); + chefMenu.setItem_name(item_name); + chefMenu.setItem_intresting_facts(item_intresting_facts); + chefMenu.setItem_ingredients(item_ingredients); + chefMenu.setCuisineCategory(cuisineCategory.get()); + chefMenu.setWeek(week); + + chefMenuRepository.save(chefMenu); + }*/ + + public List saveChefMenus(List chefMenus){ + return chefMenuRepository.saveAll(chefMenus); + } + + public List getChefMenus() + { + return chefMenuRepository.findAll(); + } + public ChefMenuGETResponse getChefMenuById(int id) + { + ChefMenu chefMenu = chefMenuRepository.findById(id).get(); + + /*ChefMenuGETResponse chefMenuGETResponse = ChefMenuGETResponse.builder() + .cuisine_id(chefMenu.getCuisineCategory().getId()) + .login_id(chefMenu.getLogin_id()) + .menucategories(chefMenu.getMenucategories()) + .item_name(chefMenu.getItem_name()) + .menu_item_image(chefMenu.getMenu_item_image()) + .menu_item_price(chefMenu.getMenu_item_price()) + .item_ingredients(chefMenu.getItem_ingredients()) + .item_intresting_facts(chefMenu.getItem_intresting_facts()) + .week(chefMenu.getWeek()) + .build();*/ + return new ChefMenuGETResponse(); + + + } + public List getChefByCuisineId(int cuisineId, int zipCode) { + String url = "https://www.zipcodeapi.com/rest/pD8BE4nACZcPt5FtIIhB5n10wXpPERTDFeLyuBhQq2ueQzpSozsD5weTv6keaU6N/radius.json/"+zipCode+"/6/mile"; + List chefMenu = chefMenuRepository.findAllByCuisineCategory_Id(cuisineId); + Set chefSet = chefMenu.stream().map(ChefMenu::getChef).collect(Collectors.toSet()); + Root zipCodeApiResponse = restTemplate.getForObject(url, Root.class); + List zipCodes = zipCodeApiResponse.getZip_codes().stream().map(ZipCode::getZip_code).collect(Collectors.toList()); + List chefList = new ArrayList<>(); + for(Chef chef:chefSet){ + if(zipCodes.contains(chef.getChef_zip())){ + chefList.add(chef); + } + } + return chefList; + } + /*public ChefMenuGETResponse getChefMenuByLoginId(long login_id) { + Chef chef = new Chef(); + chef.setLoginid(login_id); + List chefMenuList = chefMenuRepository.findAllByChef(chef); + List chefMenuResponseList = new ArrayList<>(); + + *//* ChefMenuGETResponse chefMenuGETResponse = ChefMenuGETResponse.builder() + .cuisine_id(chefMenu.getCuisineCategory().getId()) + .login_id(chefMenu.getLogin_id()) + .menucategories(chefMenu.getMenucategories()) + .item_name(chefMenu.getItem_name()) + .menu_item_image(chefMenu.getMenu_item_image()) + .menu_item_price(chefMenu.getMenu_item_price()) + .item_ingredients(chefMenu.getItem_ingredients()) + .item_intresting_facts(chefMenu.getItem_intresting_facts()) + .week(chefMenu.getWeek()) + .build();*//* + for(ChefMenu chefMenu:chefMenuList) + { + chefMenuResponseList.add + ( ChefMenuResponse + .builder() + .menuid(chefMenu.getId()) + .menu_item_image(chefMenu.getMenu_item_image()!=null?chefMenu.getMenu_item_image():null) + .menucategory(chefMenu.getMenucategories().toString()) + .cuisineCategory(chefMenu.getCuisineCategory().getCuisine_name()) + .menu_item_price(chefMenu.getMenu_item_price()) + .item_name(chefMenu.getItem_name()) + .item_ingredients(chefMenu.getItem_ingredients()) + .item_intresting_facts(chefMenu.getItem_intresting_facts()) + .week(chefMenu.getWeek()!=null?chefMenu.getWeek().toString():null) + .build() + ); + } + return ChefMenuGETResponse.builder().chefMenuList(chefMenuResponseList).build(); + } + +*/ + public ChefMenuGETResponse getChefMenuByLoginId(long login_id) { + Chef chef = new Chef(); + chef.setLoginid(login_id); + List chefMenuList = chefMenuRepository.findAllByChef(chef); + List chefMenuResponseList = new ArrayList<>(); + + + for(ChefMenu chefMenu:chefMenuList) + { + chefMenuResponseList.add + ( ChefMenuResponse + .builder() + .menuid(chefMenu.getId()) + .menu_item_image(chefMenu.getMenu_item_image()!=null?chefMenu.getMenu_item_image():null) + .menucategory(chefMenu.getMenucategories().toString()) + .cuisineCategory(chefMenu.getCuisineCategory().getCuisine_name()) + .menu_item_price(chefMenu.getMenu_item_price()) + .item_name(chefMenu.getItem_name()) + .item_ingredients(chefMenu.getItem_ingredients()) + .item_intresting_facts(chefMenu.getItem_intresting_facts()) + .week(chefMenu.getWeek()!=null?chefMenu.getWeek().toString():null) + .build() + ); + } + return ChefMenuGETResponse.builder().chefMenuList(chefMenuResponseList).build(); + } + + // public String deleteChefMenu(int chefMenu_id) +// { +// chefMenuRepository.deleteById(chefMenu_id); +// return "chef Menu ietem removed !!" + chefMenu_id; +// } + public ChefMenu updateChefMenu(ChefMenu chefMenu) + { + ChefMenu existingChefMenu=chefMenuRepository.findById(chefMenu.getId()).orElse(null); + existingChefMenu.setMenucategories(chefMenu.getMenucategories()); + existingChefMenu.setMenu_item_image(chefMenu.getMenu_item_image()); + existingChefMenu.setItem_name(chefMenu.getItem_name()); + existingChefMenu.setMenu_item_price(chefMenu.getMenu_item_price()); + existingChefMenu.setItem_ingredients(chefMenu.getItem_ingredients()); + existingChefMenu.setItem_intresting_facts(chefMenu.getItem_intresting_facts()); + existingChefMenu.setWeek(chefMenu.getWeek()); + existingChefMenu.getCuisineCategory().setId(chefMenu.getCuisineCategory().getId()); + return chefMenuRepository.save(existingChefMenu); + + + } + + +// public List getChefByCuisineId(String cuisine_id){ +// +// return chefRepository.getChefsByPrefCuisine(Integer.getInteger(cuisine_id)); +// } + /*public List getCuisineCategoriesByZipCode(String zipCode){ + CuisineCategory cuisineCategory= new CuisineCategory(); + List chefs = chefRepository.getChefsByZip(zipCode); + Set categorieId = chefs.stream().map((chef)->chefMenuRepository.findByLogin_id(chef.getLogin_id())).map((chefMenu)->chefMenu.getCuisineCategory()).map((cuisineCategory)->cuisineCategory.getCuisine_name()).distinct().collect(Collectors.toSet()); + List cuisineCategories = cuisineCategoriesRepository.findAllById(cuisineId); + return cuisineCategories; + } +*/ +} diff --git a/src/main/java/ethniconnect_backend/ChefCreateMenu/MenuCategories.java b/src/main/java/ethniconnect_backend/ChefCreateMenu/MenuCategories.java new file mode 100644 index 0000000..88bfc8f --- /dev/null +++ b/src/main/java/ethniconnect_backend/ChefCreateMenu/MenuCategories.java @@ -0,0 +1,13 @@ +package ethniconnect_backend.ChefCreateMenu; + +public enum MenuCategories { + + + Breakfast, + Lunch, + Dinner, + breakfast, + lunch, + dinner + +} diff --git a/src/main/java/ethniconnect_backend/ChefCreateMenu/Week.java b/src/main/java/ethniconnect_backend/ChefCreateMenu/Week.java new file mode 100644 index 0000000..6d1e3ce --- /dev/null +++ b/src/main/java/ethniconnect_backend/ChefCreateMenu/Week.java @@ -0,0 +1,11 @@ +package ethniconnect_backend.ChefCreateMenu; + +public enum Week { + Monday, + Tuesday, + Wednesday, + Thursday, + Friday, + Saturday, + Sunday +} diff --git a/src/main/java/ethniconnect_backend/ChefDetails/Chef.java b/src/main/java/ethniconnect_backend/ChefDetails/Chef.java new file mode 100644 index 0000000..36a5195 --- /dev/null +++ b/src/main/java/ethniconnect_backend/ChefDetails/Chef.java @@ -0,0 +1,43 @@ +package ethniconnect_backend.ChefDetails; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.persistence.*; + +@Data +@NoArgsConstructor +@AllArgsConstructor +@Entity +@Table(name = "chef",uniqueConstraints= {@UniqueConstraint(columnNames = {"chef_emailid","chef_phone"})}) +public class Chef { + @Id + private long loginid; + private String chef_fname; + private String chef_lname; + private String chef_emailid; + private String chef_phone; + private String chef_street; + private String chef_city; + private String chef_state; + private String chef_zip; + private String chef_paymode; + private String chef_description; + private int chef_experience; + private String chef_fblink; + private String chef_linkdin; + /*@Lob + @Column(name = "Image", length = Integer.MAX_VALUE, nullable = true) + private byte[] chef_image;*/ + @Lob + @Column(columnDefinition = "MEDIUMBLOB") + private String chef_image; + + + + /* @OneToMany (targetEntity = ChefMenu.class, cascade = CascadeType.ALL) + @JoinColumn(name = "cm_fk" , referencedColumnName = "login_id") + private List chefmenus;*/ + +} diff --git a/src/main/java/ethniconnect_backend/ChefDetails/ChefController.java b/src/main/java/ethniconnect_backend/ChefDetails/ChefController.java new file mode 100644 index 0000000..99099b3 --- /dev/null +++ b/src/main/java/ethniconnect_backend/ChefDetails/ChefController.java @@ -0,0 +1,74 @@ +package ethniconnect_backend.ChefDetails; + +import org.springframework.beans.factory.annotation.Autowired; + +import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.print.attribute.standard.Media; + +@CrossOrigin() +@RestController +public class ChefController { + @Autowired + private ChefService chefProfileService; + @Autowired + private ChefRepository chefRepository; + + @PostMapping("/chef") + public void addchef(@RequestParam("file") MultipartFile file, + @RequestParam("chef_fname") String fname, + @RequestParam("chef_lname") String lname, + @RequestParam("chef_emailid") String emailid, + @RequestParam("chef_phone") String chef_phone, + @RequestParam("chef_street") String chef_street, + @RequestParam("chef_city") String chef_city, + @RequestParam("chef_state") String chef_state, + @RequestParam("chef_zip") String chef_zip, + @RequestParam("chef_paymode") String chef_paymode, + @RequestParam("chef_description") String chef_description, + @RequestParam("chef_experience") int chef_experience, + @RequestParam("chef_fblink") String chef_fblink, + @RequestParam("chef_linkdin") String chef_linkdin) throws Exception { + chefProfileService.saveChef(file, fname, lname, emailid, chef_phone, chef_street, + chef_city, chef_state, chef_zip, chef_paymode, chef_description, + chef_experience, chef_fblink, chef_linkdin); + //return "chef details added"; + } + + /* @PostMapping("/chef") + public Chef addChef(@RequestBody Chef chef) throws Exception + { + return chefProfileService.saveChef(chef); + }*/ + + + @GetMapping({"/chefByLoginId/{id}"}) + public Chef findChefById(@PathVariable int id) { + Long loginidlong = new Long(id); + return chefProfileService.getChefByLoginId(id); + } + + @PutMapping("/updatechef") + public Chef updateChef(@RequestBody ChefRequest chefRequest) { + return chefProfileService.updateChef(chefRequest); + } + + /* @GetMapping({"/chefprofile"}) + public List getChefProfileInfo() + { + return chefRepository.getChefProfileInfo(); + }*/ + + /*@PostMapping(value = "/chef", consumes = {MediaType.APPLICATION_JSON_VALUE, MediaType.MULTIPART_FORM_DATA_VALUE}) + public String upload(@RequestPart("chef") String chef, @RequestPart("chef_image") MultipartFile chef_image) throws Exception { + chefProfileService.getJson(chef,chef_image); + return "added";*/ + + + + + + +} diff --git a/src/main/java/ethniconnect_backend/ChefDetails/ChefRepository.java b/src/main/java/ethniconnect_backend/ChefDetails/ChefRepository.java new file mode 100644 index 0000000..9544195 --- /dev/null +++ b/src/main/java/ethniconnect_backend/ChefDetails/ChefRepository.java @@ -0,0 +1,15 @@ +package ethniconnect_backend.ChefDetails; + +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.Optional; + +public interface ChefRepository extends JpaRepository { + + Optional findByLoginid(long login_id); + + /* *//*@Query("SELECT new ethniconnect_backend.ChefDetails.ChefprofileResponse( c.chef_fname, m.menu_item_price)" + + " FROM Chef c join c.ChefMenu m")*//* + public List getChefProfileInfo();*/ + +} diff --git a/src/main/java/ethniconnect_backend/ChefDetails/ChefRequest.java b/src/main/java/ethniconnect_backend/ChefDetails/ChefRequest.java new file mode 100644 index 0000000..8d62682 --- /dev/null +++ b/src/main/java/ethniconnect_backend/ChefDetails/ChefRequest.java @@ -0,0 +1,27 @@ +package ethniconnect_backend.ChefDetails; + +import lombok.*; + +@Data +@Builder +@Getter +@Setter +@AllArgsConstructor +@ToString +public class ChefRequest { + private long login_id; + private String chef_fname; + private String chef_lname; + private String chef_emailid; + private String chef_phone; + private String chef_street; + private String chef_city; + private String chef_state; + private String chef_zip; + private String chef_paymode; + private String chef_description; + private int chef_experience; + private String chef_fblink; + private String chef_linkdin; + private String chef_image; +} diff --git a/src/main/java/ethniconnect_backend/ChefDetails/ChefService.java b/src/main/java/ethniconnect_backend/ChefDetails/ChefService.java new file mode 100644 index 0000000..26d3af0 --- /dev/null +++ b/src/main/java/ethniconnect_backend/ChefDetails/ChefService.java @@ -0,0 +1,167 @@ +package ethniconnect_backend.ChefDetails; + +import ethniconnect_backend.UserCredentials.UserCredentialsRepository; +import ethniconnect_backend.UserCredentials.UserCredentials; +import org.springframework.beans.factory.annotation.Autowired; + +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; +import org.springframework.web.multipart.MultipartFile; + +import java.io.IOException; +import java.util.Base64; +import java.util.List; +import java.util.Optional; + +@Service +public class ChefService { + @Autowired + private ChefRepository chefRepository; + @Autowired + private UserCredentialsRepository userCredentialsRepository; + + public void saveChef(MultipartFile file, String fname, String lname, String emailid, + String chef_phone, String chef_street, String chef_city, + String chef_state, String chef_zip, String chef_paymode, + String chef_description, int chef_experience, String chef_fblink, + String chef_linkdin) throws Exception { + Chef chef = new Chef(); + Optional userData = userCredentialsRepository.findByEmail(emailid); + if (!userData.isPresent()) + throw new Exception("user Id doesn't exist"); + + + Long loginId = userData.get().getLoginid(); + + chef.setLoginid(loginId); + String fileName = StringUtils.cleanPath(file.getOriginalFilename()); + if (fileName.contains("..")) { + System.out.println("not a a valid file"); + } + try { + chef.setChef_image(Base64.getEncoder().encodeToString(file.getBytes())); + } catch (IOException e) { + e.printStackTrace(); + } + chef.setChef_fname(fname); + + chef.setChef_lname(lname); + chef.setChef_emailid(emailid); + chef.setChef_city(chef_city); + chef.setChef_phone(chef_phone); + chef.setChef_street(chef_street); + chef.setChef_state(chef_state); + chef.setChef_zip(chef_zip); + chef.setChef_paymode(chef_paymode); + chef.setChef_description(chef_description); + chef.setChef_experience(chef_experience); + chef.setChef_fblink(chef_fblink); + chef.setChef_linkdin(chef_linkdin); + chefRepository.save(chef); + } + + /*public Chef saveChef(Chef chef) throws Exception{ + Optional userData = userCredentialsRepository.findByEmail(chef.getChef_emailid()); + if(!userData.isPresent()) + throw new Exception("user Id doesn't exist"); + Long loginId = userData.get().getId(); + + chef.setLogin_id(loginId); + + return chefRepository.save(chef); + }*/ + public List saveChefs(List chefs) { + return chefRepository.saveAll(chefs); + } + public Chef getChefByLoginId(long loginid) { + + Optional chef = chefRepository.findByLoginid(loginid); + return chef.get(); + } + public List getChefs() { + return chefRepository.findAll(); + } + + public Chef getChefById(int chef_id) { + return chefRepository.findById(chef_id).orElse(null); + } + + public String deleteChef(int chef_id) { + chefRepository.deleteById(chef_id); + return "chef removed !!" + chef_id; + } + + + + + /* public Chef updateChef(Chef chef) { + Chef existingChef = (Chef) chefRepository.findByLoginid(chef.getLoginid()).orElse(null); + existingChef.setChef_fname(chef.getChef_fname() != null ? chef.getChef_fname() : existingChef.getChef_fname()); + existingChef.setChef_lname(chef.getChef_lname() != null ? chef.getChef_lname() : existingChef.getChef_lname()); + existingChef.setChef_phone(chef.getChef_phone() != null ? chef.getChef_phone() : existingChef.getChef_phone()); + existingChef.setChef_city(chef.getChef_city() != null ? chef.getChef_city() : existingChef.getChef_city()); + existingChef.setChef_description(chef.getChef_description() != null ? chef.getChef_description() : existingChef.getChef_description()); + existingChef.setChef_fblink(chef.getChef_fblink() != null ? chef.getChef_fblink() : existingChef.getChef_fblink()); + existingChef.setChef_linkdin(chef.getChef_linkdin() != null ? chef.getChef_linkdin() : existingChef.getChef_linkdin()); + existingChef.setChef_image(chef.getChef_image() != null ? chef.getChef_image() : existingChef.getChef_image()); + existingChef.setChef_paymode(chef.getChef_paymode() != null ? chef.getChef_paymode() : existingChef.getChef_paymode()); + existingChef.setChef_state(chef.getChef_state() != null ? chef.getChef_state() : existingChef.getChef_state()); + existingChef.setChef_street(chef.getChef_street() != null ? chef.getChef_street() : existingChef.getChef_street()); + existingChef.setChef_zip(chef.getChef_zip() != null ? chef.getChef_zip() : existingChef.getChef_zip()); + existingChef.setChef_city(chef.getChef_city() != null ? chef.getChef_city() : existingChef.getChef_city()); + existingChef.setChef_experience(chef.getChef_experience() != 0 ? chef.getChef_experience() : existingChef.getChef_experience()); + return chefRepository.save(existingChef); + + }*/ + public Chef updateChef(ChefRequest chefRequest) { + Chef existingChef = (Chef) chefRepository.findByLoginid(chefRequest.getLogin_id()).orElse(null); + existingChef.setChef_fname(chefRequest.getChef_fname() != null ? chefRequest.getChef_fname() : existingChef.getChef_fname()); + existingChef.setChef_lname(chefRequest.getChef_lname() != null ? chefRequest.getChef_lname() : existingChef.getChef_lname()); + existingChef.setChef_phone(chefRequest.getChef_phone() != null ? chefRequest.getChef_phone() : existingChef.getChef_phone()); + existingChef.setChef_city(chefRequest.getChef_city() != null ? chefRequest.getChef_city() : existingChef.getChef_city()); + existingChef.setChef_description(chefRequest.getChef_description() != null ? chefRequest.getChef_description() : existingChef.getChef_description()); + existingChef.setChef_fblink(chefRequest.getChef_fblink() != null ? chefRequest.getChef_fblink() : existingChef.getChef_fblink()); + existingChef.setChef_linkdin(chefRequest.getChef_linkdin() != null ? chefRequest.getChef_linkdin() : existingChef.getChef_linkdin()); + existingChef.setChef_image(chefRequest.getChef_image() != null ? chefRequest.getChef_image() : existingChef.getChef_image()); + existingChef.setChef_paymode(chefRequest.getChef_paymode() != null ? chefRequest.getChef_paymode() : existingChef.getChef_paymode()); + existingChef.setChef_state(chefRequest.getChef_state() != null ? chefRequest.getChef_state() : existingChef.getChef_state()); + existingChef.setChef_street(chefRequest.getChef_street() != null ? chefRequest.getChef_street() : existingChef.getChef_street()); + existingChef.setChef_zip(chefRequest.getChef_zip() != null ? chefRequest.getChef_zip() : existingChef.getChef_zip()); + existingChef.setChef_city(chefRequest.getChef_city() != null ? chefRequest.getChef_city() : existingChef.getChef_city()); + existingChef.setChef_experience(chefRequest.getChef_experience() != 0 ? chefRequest.getChef_experience() : existingChef.getChef_experience()); + return chefRepository.save(existingChef); + + } + + /*public void getJson(String chef, MultipartFile chef_image) throws Exception { + Chef chefJson = new Chef(); + try { + ObjectMapper objectMapper = new ObjectMapper(); + chefJson = objectMapper.readValue(chef, Chef.class); + } catch (IOException err) + { + //return "error"; + System.out.printf("error", err.toString()); + } + Optional userData = userCredentialsRepository.findByEmail(chefJson.getChef_emailid()); + if (!userData.isPresent()) + throw new Exception("user Id doesn't exist"); + Long loginId = userData.get().getId(); + + chefJson.setLogin_id(loginId); + String fileName = StringUtils.cleanPath(chef_image.getOriginalFilename()); + if (fileName.contains("..")) { + System.out.println("not a a valid file"); + } + try { + chefJson.setChef_image(Base64.getEncoder().encodeToString(chef_image.getBytes())); + } catch (IOException e) { + e.printStackTrace(); + } + chefRepository.save(chefJson); + + }*/ +} + + + diff --git a/src/main/java/ethniconnect_backend/ChefDetails/ChefprofileResponse.java b/src/main/java/ethniconnect_backend/ChefDetails/ChefprofileResponse.java new file mode 100644 index 0000000..a577888 --- /dev/null +++ b/src/main/java/ethniconnect_backend/ChefDetails/ChefprofileResponse.java @@ -0,0 +1,15 @@ +package ethniconnect_backend.ChefDetails; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.ToString; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@ToString +public class ChefprofileResponse { + private String chef_name; + private int menu_item_price; +} diff --git a/src/main/java/ethniconnect_backend/ChefSignup/ChefSignupController.java b/src/main/java/ethniconnect_backend/ChefSignup/ChefSignupController.java new file mode 100644 index 0000000..0ccd31b --- /dev/null +++ b/src/main/java/ethniconnect_backend/ChefSignup/ChefSignupController.java @@ -0,0 +1,39 @@ +package ethniconnect_backend.ChefSignup; + +import lombok.AllArgsConstructor; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.servlet.view.RedirectView; + +@CrossOrigin() +@RestController +//@RequestMapping(path = "api/v1/registration") +@AllArgsConstructor +public class ChefSignupController { + + private final ChefSignupService registrationService; + + @PostMapping("api/v1/registration") + public void register( @RequestParam("email") String email, + @RequestParam("password") String password) + { + registrationService.register(email,password); + + } + + @GetMapping("api/v1/registration/confirm") + public String confirm(@RequestParam("token") String token) { + return registrationService.confirmToken(token); + } + + /* @GetMapping("api/v1/registration/confirm") + public RedirectView confirm(@RequestParam("token") String token) { + String email=registrationService.confirmToken(token); + RedirectView redirectView = new RedirectView(); + String redirectUrl = "http://localhost:4200/chefloginsetup?email="+email; + redirectView.setUrl(redirectUrl);*//* + + return redirectView; + }*/ + + } diff --git a/src/main/java/com/example/demo/registration/RegistrationRequest.java b/src/main/java/ethniconnect_backend/ChefSignup/ChefSignupRequest.java similarity index 61% rename from src/main/java/com/example/demo/registration/RegistrationRequest.java rename to src/main/java/ethniconnect_backend/ChefSignup/ChefSignupRequest.java index 2dd483a..e318c79 100644 --- a/src/main/java/com/example/demo/registration/RegistrationRequest.java +++ b/src/main/java/ethniconnect_backend/ChefSignup/ChefSignupRequest.java @@ -1,4 +1,4 @@ -package com.example.demo.registration; +package ethniconnect_backend.ChefSignup; import lombok.AllArgsConstructor; import lombok.EqualsAndHashCode; @@ -9,9 +9,9 @@ @AllArgsConstructor @EqualsAndHashCode @ToString -public class RegistrationRequest { - private final String firstName; - private final String lastName; +public class ChefSignupRequest { + //private final String firstName; + /* private final String lastName;*/ private final String email; private final String password; } diff --git a/src/main/java/ethniconnect_backend/ChefSignup/ChefSignupService.java b/src/main/java/ethniconnect_backend/ChefSignup/ChefSignupService.java new file mode 100644 index 0000000..f41845f --- /dev/null +++ b/src/main/java/ethniconnect_backend/ChefSignup/ChefSignupService.java @@ -0,0 +1,81 @@ +package ethniconnect_backend.ChefSignup; + +import ethniconnect_backend.UserCredentials.UserCredentials; +import ethniconnect_backend.UserCredentials.UserRole; +import ethniconnect_backend.UserCredentials.UserCredentialsService; +import ethniconnect_backend.email.EmailSender; +import ethniconnect_backend.email.EmailService; +import ethniconnect_backend.ChefSignup.token.ConfirmationToken; +import ethniconnect_backend.ChefSignup.token.ConfirmationTokenService; +import lombok.AllArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.time.LocalDateTime; + +@Service +@AllArgsConstructor +public class ChefSignupService { + + private final UserCredentialsService userCredentialsService; + private final EmailValidator emailValidator; + private final ConfirmationTokenService confirmationTokenService; + private final EmailSender emailSender; + private EmailService emailService; + + public void register(String email, String password) { + boolean isValidEmail = emailValidator. + test(email); + + if (!isValidEmail) { + throw new IllegalStateException("email not valid"); + } + + + + String token = userCredentialsService.signUpUser( + new UserCredentials( + email, + password, + UserRole.BUSINESS + + ) + ); + + /*String link = "www.google.com";*/ + String link = "http://localhost:8080/api/v1/registration/confirm?token=" + token; + emailSender.send( + email, + emailService.buildEmail("user", link)); + + //return token; + } + + @Transactional + public String confirmToken(String token) { + ConfirmationToken confirmationToken = confirmationTokenService + .getToken(token) + .orElseThrow(() -> + new IllegalStateException("token not found")); + + if (confirmationToken.getConfirmedAt() != null) { + throw new IllegalStateException("email already confirmed"); + } + + LocalDateTime expiredAt = confirmationToken.getExpiresAt(); + + if (expiredAt.isBefore(LocalDateTime.now())) { + throw new IllegalStateException("token expired"); + } + + confirmationTokenService.setConfirmedAt(token); + userCredentialsService.enableAppUser( + confirmationToken.getAppUser().getEmail()); + return "confirmed"; + } + + + + + +} diff --git a/src/main/java/com/example/demo/registration/EmailValidator.java b/src/main/java/ethniconnect_backend/ChefSignup/EmailValidator.java similarity index 86% rename from src/main/java/com/example/demo/registration/EmailValidator.java rename to src/main/java/ethniconnect_backend/ChefSignup/EmailValidator.java index 085cbe0..0225c8b 100644 --- a/src/main/java/com/example/demo/registration/EmailValidator.java +++ b/src/main/java/ethniconnect_backend/ChefSignup/EmailValidator.java @@ -1,4 +1,4 @@ -package com.example.demo.registration; +package ethniconnect_backend.ChefSignup; import org.springframework.stereotype.Service; diff --git a/src/main/java/com/example/demo/registration/token/ConfirmationToken.java b/src/main/java/ethniconnect_backend/ChefSignup/token/ConfirmationToken.java similarity index 82% rename from src/main/java/com/example/demo/registration/token/ConfirmationToken.java rename to src/main/java/ethniconnect_backend/ChefSignup/token/ConfirmationToken.java index fa90b09..e3a9afb 100644 --- a/src/main/java/com/example/demo/registration/token/ConfirmationToken.java +++ b/src/main/java/ethniconnect_backend/ChefSignup/token/ConfirmationToken.java @@ -1,6 +1,6 @@ -package com.example.demo.registration.token; +package ethniconnect_backend.ChefSignup.token; -import com.example.demo.appuser.AppUser; +import ethniconnect_backend.UserCredentials.UserCredentials; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; @@ -42,15 +42,15 @@ public class ConfirmationToken { nullable = false, name = "app_user_id" ) - private AppUser appUser; + private UserCredentials appUser; public ConfirmationToken(String token, LocalDateTime createdAt, LocalDateTime expiresAt, - AppUser appUser) { + UserCredentials userCredentials) { this.token = token; this.createdAt = createdAt; this.expiresAt = expiresAt; - this.appUser = appUser; + this.appUser = userCredentials; } } diff --git a/src/main/java/com/example/demo/registration/token/ConfirmationTokenRepository.java b/src/main/java/ethniconnect_backend/ChefSignup/token/ConfirmationTokenRepository.java similarity index 94% rename from src/main/java/com/example/demo/registration/token/ConfirmationTokenRepository.java rename to src/main/java/ethniconnect_backend/ChefSignup/token/ConfirmationTokenRepository.java index a9c7b0d..a78ec0b 100644 --- a/src/main/java/com/example/demo/registration/token/ConfirmationTokenRepository.java +++ b/src/main/java/ethniconnect_backend/ChefSignup/token/ConfirmationTokenRepository.java @@ -1,4 +1,4 @@ -package com.example.demo.registration.token; +package ethniconnect_backend.ChefSignup.token; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Modifying; diff --git a/src/main/java/com/example/demo/registration/token/ConfirmationTokenService.java b/src/main/java/ethniconnect_backend/ChefSignup/token/ConfirmationTokenService.java similarity index 93% rename from src/main/java/com/example/demo/registration/token/ConfirmationTokenService.java rename to src/main/java/ethniconnect_backend/ChefSignup/token/ConfirmationTokenService.java index 8d268a0..e52a4d6 100644 --- a/src/main/java/com/example/demo/registration/token/ConfirmationTokenService.java +++ b/src/main/java/ethniconnect_backend/ChefSignup/token/ConfirmationTokenService.java @@ -1,4 +1,4 @@ -package com.example.demo.registration.token; +package ethniconnect_backend.ChefSignup.token; import lombok.AllArgsConstructor; import org.springframework.stereotype.Service; diff --git a/src/main/java/ethniconnect_backend/ContactPage/Contact.java b/src/main/java/ethniconnect_backend/ContactPage/Contact.java new file mode 100644 index 0000000..34d396b --- /dev/null +++ b/src/main/java/ethniconnect_backend/ContactPage/Contact.java @@ -0,0 +1,25 @@ +package ethniconnect_backend.ContactPage; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Table; + +@Data +@NoArgsConstructor +@AllArgsConstructor +@Entity +@Table(name = "contact") +public class Contact { + @Id + @GeneratedValue + private int id; + private String name; + private String emailid; + private String message; + +} diff --git a/src/main/java/ethniconnect_backend/ContactPage/ContactController.java b/src/main/java/ethniconnect_backend/ContactPage/ContactController.java new file mode 100644 index 0000000..9211a5d --- /dev/null +++ b/src/main/java/ethniconnect_backend/ContactPage/ContactController.java @@ -0,0 +1,48 @@ +package ethniconnect_backend.ContactPage; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import java.util.List; +@CrossOrigin() +@RestController +public class ContactController { + @Autowired + private ContactService contactService; + @Autowired + private ContactRepository contactRepository; + @PostMapping("/ContactRequest") + public void addcontactrequest(@RequestBody Contact contact) + + { + contactService.saveContactRequest(contact); + + //return "request added"; + } + + /* @PostMapping("/ContactRequest") + public void addcontactrequest(@RequestParam("name") String name, + @RequestParam("email") String email, + @RequestParam("message") String message + ) + { + contactService.saveContactRequest(name,email,message); + + //return "request added"; + }*/ + + @GetMapping({"/ContactRequests"}) + public List findcontactrequests() + + { + return contactService.getContactRequets(); + } + + @GetMapping({"/ContactRequestById/{id}"}) + public Contact findcontactrequestbyId(@PathVariable int id) + { + return contactService.getContactRequestById(id); + } + +} diff --git a/src/main/java/ethniconnect_backend/ContactPage/ContactEmailValidator.java b/src/main/java/ethniconnect_backend/ContactPage/ContactEmailValidator.java new file mode 100644 index 0000000..c250901 --- /dev/null +++ b/src/main/java/ethniconnect_backend/ContactPage/ContactEmailValidator.java @@ -0,0 +1,14 @@ +package ethniconnect_backend.ContactPage; + +import org.springframework.stereotype.Service; + +import java.util.function.Predicate; + +@Service +public class ContactEmailValidator implements Predicate { + @Override + public boolean test(String s) { +// TODO: Regex to validate email + return true; + } +} diff --git a/src/main/java/ethniconnect_backend/ContactPage/ContactRepository.java b/src/main/java/ethniconnect_backend/ContactPage/ContactRepository.java new file mode 100644 index 0000000..324f2e4 --- /dev/null +++ b/src/main/java/ethniconnect_backend/ContactPage/ContactRepository.java @@ -0,0 +1,7 @@ +package ethniconnect_backend.ContactPage; + +import org.springframework.data.jpa.repository.JpaRepository; + +public interface ContactRepository extends JpaRepository +{ +} diff --git a/src/main/java/ethniconnect_backend/ContactPage/ContactService.java b/src/main/java/ethniconnect_backend/ContactPage/ContactService.java new file mode 100644 index 0000000..61bd22a --- /dev/null +++ b/src/main/java/ethniconnect_backend/ContactPage/ContactService.java @@ -0,0 +1,65 @@ +package ethniconnect_backend.ContactPage; + +import ethniconnect_backend.ChefSignup.EmailValidator; +import ethniconnect_backend.ChefSignup.token.ConfirmationTokenService; +import ethniconnect_backend.UserCredentials.UserCredentialsService; + +import ethniconnect_backend.email.EmailSender; +import ethniconnect_backend.email.EmailService; +import lombok.AllArgsConstructor; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +@AllArgsConstructor +public class ContactService { + private final UserCredentialsService userCredentialsService; + private final EmailValidator emailValidator; + private final ConfirmationTokenService confirmationTokenService; + private final EmailSender emailSender; + private EmailService emailService; + + @Autowired + public ContactRepository contactRepository; + + /* public Contact saveContact(Contact contact) + { + return contactRepository.save(contact); + }*/ + + + +public void saveContactRequest(Contact contact) { + boolean isValidEmail = emailValidator. + test(contact.getEmailid()); + + if (!isValidEmail) { + throw new IllegalStateException("email not valid"); + } + + + /*String link = "www.google.com";*/ + + + contactRepository.save(contact); + emailSender.Contactsend( + "ethniconnect@gmail.com", + emailService.buildContactEmail(contact.getMessage(),contact.getEmailid())); + contactRepository.save(contact); + + //return token; +} + + + public List getContactRequets() + { + return contactRepository.findAll(); + } + public Contact getContactRequestById(int id) + { + return contactRepository.findById(id).orElse(null); + } + +} diff --git a/src/main/java/ethniconnect_backend/Cuisines/CuisineCategoriesController.java b/src/main/java/ethniconnect_backend/Cuisines/CuisineCategoriesController.java new file mode 100644 index 0000000..7b5ebf1 --- /dev/null +++ b/src/main/java/ethniconnect_backend/Cuisines/CuisineCategoriesController.java @@ -0,0 +1,44 @@ +package ethniconnect_backend.Cuisines; + + +import ethniconnect_backend.ChefDetails.Chef; +import ethniconnect_backend.ChefDetails.ChefRequest; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +@CrossOrigin() +@RestController +public class CuisineCategoriesController { + + @Autowired + private CuisinesCategoriesService cuisinesCategoriesService; + + @PostMapping("/CuisineCategory") + public CuisineCategory addcuisinecategory(@RequestBody CuisineCategory cuisineCategories) + { + + return cuisinesCategoriesService.saveCuisineCatgeory(cuisineCategories); + } + + @GetMapping({"/CuisnesCategoryRequests"}) + public List findcontactrequests() + + { + return cuisinesCategoriesService.getCusineCategoriesRequets(); + } + + @GetMapping({"/ContactCategoryById/{id}"}) + public CuisineCategory findcuisinecategoryrequestbyId(@PathVariable int id) + { + return cuisinesCategoriesService.getCuisineCategoryById(id); + } + + @PutMapping("/updatecuisine") + public CuisineCategory updateChef(@RequestBody CuisineCategory cuisineCategory) { + return cuisinesCategoriesService.Updatecuisinecategory(cuisineCategory); + } + +} + + diff --git a/src/main/java/ethniconnect_backend/Cuisines/CuisineCategoriesRepository.java b/src/main/java/ethniconnect_backend/Cuisines/CuisineCategoriesRepository.java new file mode 100644 index 0000000..cec29c6 --- /dev/null +++ b/src/main/java/ethniconnect_backend/Cuisines/CuisineCategoriesRepository.java @@ -0,0 +1,9 @@ +package ethniconnect_backend.Cuisines; + +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.List; + +public interface CuisineCategoriesRepository extends JpaRepository { + +} diff --git a/src/main/java/ethniconnect_backend/Cuisines/CuisineCategory.java b/src/main/java/ethniconnect_backend/Cuisines/CuisineCategory.java new file mode 100644 index 0000000..dd4df85 --- /dev/null +++ b/src/main/java/ethniconnect_backend/Cuisines/CuisineCategory.java @@ -0,0 +1,33 @@ +package ethniconnect_backend.Cuisines; + +import ethniconnect_backend.ChefCreateMenu.ChefMenu; +import ethniconnect_backend.Zip.Zip; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + + +import javax.persistence.*; +import java.util.List; +import java.util.Set; + +@Data +@NoArgsConstructor +@AllArgsConstructor +@Entity +@Table(name = "cuisinecategory") +public class CuisineCategory { + @Id + @GeneratedValue + private int id; + @Column(unique = true) + private String cuisine_name; + @Lob + @Column(columnDefinition = "MEDIUMBLOB") + private String cuisine_image; + +// +// @OneToMany(fetch = FetchType.LAZY, mappedBy = "cuisineCategory") +// private List menus; + +} diff --git a/src/main/java/ethniconnect_backend/Cuisines/CuisinesCategoriesService.java b/src/main/java/ethniconnect_backend/Cuisines/CuisinesCategoriesService.java new file mode 100644 index 0000000..0f71f4e --- /dev/null +++ b/src/main/java/ethniconnect_backend/Cuisines/CuisinesCategoriesService.java @@ -0,0 +1,37 @@ +package ethniconnect_backend.Cuisines; + +import ethniconnect_backend.ChefDetails.Chef; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; +@Service +public class CuisinesCategoriesService { + + @Autowired + public CuisineCategoriesRepository cuisineCategoriesRepository; + public CuisineCategory saveCuisineCatgeory(CuisineCategory cuisineCategories) + { + return (CuisineCategory) cuisineCategoriesRepository.save(cuisineCategories); + } + + public List getCusineCategoriesRequets() + { + return cuisineCategoriesRepository.findAll(); + } + public CuisineCategory getCuisineCategoryById(int id) + { + return (CuisineCategory) cuisineCategoriesRepository.findById(id).orElse(null); + } + public CuisineCategory Updatecuisinecategory(CuisineCategory cuisineCategory) + { + CuisineCategory existingCuisine = (CuisineCategory) cuisineCategoriesRepository.findById(cuisineCategory.getId()).orElse(null); + existingCuisine.setCuisine_name(cuisineCategory.getCuisine_name() != null ? cuisineCategory.getCuisine_name() : existingCuisine.getCuisine_name()); + existingCuisine.setCuisine_image(cuisineCategory.getCuisine_image() != null ? cuisineCategory.getCuisine_image() : existingCuisine.getCuisine_image()); + + return cuisineCategoriesRepository.save(existingCuisine); + + } + +} + diff --git a/src/main/java/ethniconnect_backend/CustomerDetails/Customer.java b/src/main/java/ethniconnect_backend/CustomerDetails/Customer.java new file mode 100644 index 0000000..5b9428b --- /dev/null +++ b/src/main/java/ethniconnect_backend/CustomerDetails/Customer.java @@ -0,0 +1,36 @@ +package ethniconnect_backend.CustomerDetails; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.persistence.*; + +@Data +@NoArgsConstructor +@AllArgsConstructor +@Entity +@Table(name = "customer",uniqueConstraints= {@UniqueConstraint(columnNames = {"cust_emailid","cust_phone"})}) +public class Customer { + @Id + private long loginid; + private String cust_fname; + private String cust_lname; + private String cust_emailid; + private String cust_phone; + private String cust_street; + private String cust_city; + private String cust_state; + private String cust_zip; + + + @Lob + @Column(columnDefinition = "MEDIUMBLOB") + private String cust_image; + /*@OneToMany(fetch = FetchType.LAZY, mappedBy = "customer") + private List orders;*/ +// @OneToMany(mappedBy = "customer", fetch = FetchType.LAZY, +// cascade = CascadeType.ALL) +// private Set orders; + +} diff --git a/src/main/java/ethniconnect_backend/CustomerDetails/CustomerController.java b/src/main/java/ethniconnect_backend/CustomerDetails/CustomerController.java new file mode 100644 index 0000000..e7573e3 --- /dev/null +++ b/src/main/java/ethniconnect_backend/CustomerDetails/CustomerController.java @@ -0,0 +1,60 @@ +package ethniconnect_backend.CustomerDetails; + + +import ethniconnect_backend.ChefDetails.Chef; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +@CrossOrigin() + +@RestController +public class CustomerController { + + @Autowired + private CustomerService customerService; + + @PostMapping("/customer") + + public String addcustomer(@RequestParam("file") MultipartFile file, + @RequestParam("cust_fname") String fname, + @RequestParam("cust_lname") String lname, + @RequestParam("cust_emailid") String emailid, + @RequestParam("cust_phone") String phone, + @RequestParam("cust_street") String street, + @RequestParam("cust_city") String city, + @RequestParam("cust_state") String state, + @RequestParam("cust_zip") String zip + ) throws Exception { + customerService.saveCustomer(file, fname, lname,emailid,phone,street, + city,state,zip); + return "customer details added"; + } + + /* public Customer addCustomer(@RequestBody Customer customer) throws Exception + { + + return customerService.saveCustomer(customer); + } +*/ + + @GetMapping({"/custById/{id}"}) + public Customer findCustById(@PathVariable int id) + { + return customerService.getCustById(id); + } + + @GetMapping({"/custByLoginId/{id}"}) + + public Customer findCustomerByLoginId(@PathVariable int id) { + Long loginidlong = new Long(id); + return customerService.getCustomerByLoginId(id); + } + + + @PutMapping("/updatecust") + public Customer updateCust(@RequestBody Customer customer) + { + return customerService.updateCust(customer); + } +} diff --git a/src/main/java/ethniconnect_backend/CustomerDetails/CustomerRepository.java b/src/main/java/ethniconnect_backend/CustomerDetails/CustomerRepository.java new file mode 100644 index 0000000..142a5e5 --- /dev/null +++ b/src/main/java/ethniconnect_backend/CustomerDetails/CustomerRepository.java @@ -0,0 +1,14 @@ +package ethniconnect_backend.CustomerDetails; + +import ethniconnect_backend.ChefDetails.ChefprofileResponse; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; + +import java.util.List; +import java.util.Optional; + +public interface CustomerRepository extends JpaRepository { + + + Optional findByLoginid(long loginid); +} \ No newline at end of file diff --git a/src/main/java/ethniconnect_backend/CustomerDetails/CustomerService.java b/src/main/java/ethniconnect_backend/CustomerDetails/CustomerService.java new file mode 100644 index 0000000..484708f --- /dev/null +++ b/src/main/java/ethniconnect_backend/CustomerDetails/CustomerService.java @@ -0,0 +1,112 @@ +package ethniconnect_backend.CustomerDetails; + + +import ethniconnect_backend.ChefDetails.Chef; +import ethniconnect_backend.UserCredentials.UserCredentialsRepository; +import ethniconnect_backend.UserCredentials.UserCredentials; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; +import org.springframework.web.multipart.MultipartFile; + +import java.io.IOException; +import java.util.Base64; +import java.util.List; +import java.util.Optional; + +@Service +public class CustomerService { + @Autowired + private CustomerRepository customerRepository; + @Autowired + private UserCredentialsRepository userCredentialsRepository; + + public void saveCustomer(MultipartFile file, String fname, String lname, String emailid, + String phone, String street, String city, + String state, String zip) throws Exception + { + Customer customer =new Customer(); + Optional userData = userCredentialsRepository.findByEmail(emailid); + if(!userData.isPresent()) + throw new Exception("user Id doesn't exist"); + Long loginId = userData.get().getLoginid(); + + customer.setLoginid(loginId); + String fileName = StringUtils.cleanPath(file.getOriginalFilename()); + if(fileName.contains("..")) + { + System.out.println("not a a valid file"); + } + try { + customer.setCust_image(Base64.getEncoder().encodeToString(file.getBytes())); + } catch (IOException e) { + e.printStackTrace(); + } + + customer.setCust_fname(fname); + customer.setCust_lname(lname); + customer.setCust_emailid(emailid); + customer.setCust_city(city); + customer.setCust_phone(phone); + customer.setCust_street(street); + customer.setCust_state(state); + customer.setCust_city(city); + customer.setCust_zip(zip); + + customerRepository.save(customer); + } + + /*public Customer saveCustomer(Customer customer) throws Exception{ + Optional userData =appUserRepository.findByEmail(customer.getCust_emailid()); + if(!userData.isPresent()) + throw new Exception("user Id doesn't exist"); + Long loginId = userData.get().getId(); + + customer.setLogin_id(loginId); + return customerRepository.save(customer); + }*/ + public List saveChefs(List customers){ + return customerRepository.saveAll(customers); + } + + public List getCustomers() + { + return customerRepository.findAll(); + } + public Customer getCustById(int cust_id){ + return customerRepository.findById(cust_id).orElse(null); + } + + + public Customer getCustomerByLoginId(long loginid) { + + Optional customer = customerRepository.findByLoginid(loginid); + return customer.get(); + } + + /*public Chef getChefByEmailId(String chef_emailid){ + return chefProfileRepository.findByEmailId(chef_emailid); + }*/ + public String deleteCust(int cust_id) + { + customerRepository.deleteById(cust_id); + return "customer removed !!" + cust_id; + } + public Customer updateCust(Customer customer) + { + Customer existingCustomer=customerRepository.findByLoginid(customer.getLoginid()).orElse(null); + existingCustomer.setCust_fname(customer.getCust_fname()!=null?customer.getCust_fname():existingCustomer.getCust_fname()); + existingCustomer.setCust_lname(customer.getCust_lname()!=null?customer.getCust_lname():existingCustomer.getCust_lname()); + + existingCustomer.setCust_phone(customer.getCust_phone()!=null?customer.getCust_phone():existingCustomer.getCust_phone()); + existingCustomer.setCust_emailid(customer.getCust_emailid()!=null?customer.getCust_emailid():existingCustomer.getCust_emailid()); + existingCustomer.setCust_street(customer.getCust_street()!=null?customer.getCust_street():existingCustomer.getCust_street()); + existingCustomer.setCust_city(customer.getCust_city()!=null?customer.getCust_city():existingCustomer.getCust_city()); + existingCustomer.setCust_state(customer.getCust_state()!=null?customer.getCust_state():existingCustomer.getCust_state()); + existingCustomer.setCust_zip(customer.getCust_zip()!=null?customer.getCust_zip():existingCustomer.getCust_zip()); + existingCustomer.setCust_image(customer.getCust_image()!=null?customer.getCust_image():existingCustomer.getCust_image()); + + return customerRepository.save(existingCustomer); + + } +} \ No newline at end of file diff --git a/src/main/java/ethniconnect_backend/CustomerSignup/CustSignupController.java b/src/main/java/ethniconnect_backend/CustomerSignup/CustSignupController.java new file mode 100644 index 0000000..b82f3e5 --- /dev/null +++ b/src/main/java/ethniconnect_backend/CustomerSignup/CustSignupController.java @@ -0,0 +1,30 @@ +package ethniconnect_backend.CustomerSignup; + +import lombok.AllArgsConstructor; +import org.springframework.web.bind.annotation.*; + + + + + +@CrossOrigin() +@RestController +//@RequestMapping +@AllArgsConstructor +public class CustSignupController { + + private final CustSignupService custSignupService; + + @PostMapping("api/v1/CustSignup") + public void register(@RequestParam("email") String email, + @RequestParam("password") String password) { + custSignupService.register(email,password); + } + + @GetMapping("api/v1/CustSignup/confirm") + public String confirm(@RequestParam("token") String token) { + return custSignupService.confirmToken(token); + } + + +} diff --git a/src/main/java/ethniconnect_backend/CustomerSignup/CustSignupRequest.java b/src/main/java/ethniconnect_backend/CustomerSignup/CustSignupRequest.java new file mode 100644 index 0000000..f34e9eb --- /dev/null +++ b/src/main/java/ethniconnect_backend/CustomerSignup/CustSignupRequest.java @@ -0,0 +1,19 @@ +package ethniconnect_backend.CustomerSignup; + +import lombok.AllArgsConstructor; +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.ToString; + + +@Getter +@AllArgsConstructor +@EqualsAndHashCode +@ToString +public class CustSignupRequest { + + //private final String firstName; + /* private final String lastName;*/ + private final String email; + private final String password; +} diff --git a/src/main/java/ethniconnect_backend/CustomerSignup/CustSignupService.java b/src/main/java/ethniconnect_backend/CustomerSignup/CustSignupService.java new file mode 100644 index 0000000..e23e184 --- /dev/null +++ b/src/main/java/ethniconnect_backend/CustomerSignup/CustSignupService.java @@ -0,0 +1,80 @@ +package ethniconnect_backend.CustomerSignup; + +import ethniconnect_backend.UserCredentials.UserCredentialsService; +import ethniconnect_backend.UserCredentials.UserCredentials; +import ethniconnect_backend.UserCredentials.UserRole; +import ethniconnect_backend.email.EmailSender; +import ethniconnect_backend.email.EmailService; +import ethniconnect_backend.ChefSignup.EmailValidator; +import ethniconnect_backend.ChefSignup.token.ConfirmationToken; +import ethniconnect_backend.ChefSignup.token.ConfirmationTokenService; +import lombok.AllArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.time.LocalDateTime; + + @Service + @AllArgsConstructor + public class CustSignupService { + + private final UserCredentialsService appUserService; + private final EmailValidator emailValidator; + private final ConfirmationTokenService confirmationTokenService; + private final EmailSender emailSender; + private EmailService emailService; + + public void register(String email, String password) { + boolean isValidEmail = emailValidator. + test(email); + + if (!isValidEmail) { + throw new IllegalStateException("email not valid"); + } + + String token = appUserService.signUpUser( + new UserCredentials( + email, + password, + UserRole.PERSONAL + + ) + ); + + /*String link = "www.google.com";*/ + String link = "http://localhost:8080/api/v1/registration/confirm?token=" + token; + emailSender.send( + email, + emailService.buildEmail("user", link)); + + //return token; + } + + @Transactional + public String confirmToken(String token) { + ConfirmationToken confirmationToken = confirmationTokenService + .getToken(token) + .orElseThrow(() -> + new IllegalStateException("token not found")); + + if (confirmationToken.getConfirmedAt() != null) { + throw new IllegalStateException("email already confirmed"); + } + + LocalDateTime expiredAt = confirmationToken.getExpiresAt(); + + if (expiredAt.isBefore(LocalDateTime.now())) { + throw new IllegalStateException("token expired"); + } + + confirmationTokenService.setConfirmedAt(token); + appUserService.enableAppUser( + confirmationToken.getAppUser().getEmail()); + return "confirmed"; + } + + + + + + } diff --git a/src/main/java/com/example/demo/DemoApplication.java b/src/main/java/ethniconnect_backend/DemoApplication.java similarity index 56% rename from src/main/java/com/example/demo/DemoApplication.java rename to src/main/java/ethniconnect_backend/DemoApplication.java index 64b538a..07b26b8 100644 --- a/src/main/java/com/example/demo/DemoApplication.java +++ b/src/main/java/ethniconnect_backend/DemoApplication.java @@ -1,11 +1,17 @@ -package com.example.demo; +package ethniconnect_backend; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.annotation.Bean; +import org.springframework.web.client.RestTemplate; + @SpringBootApplication public class DemoApplication { - + @Bean + public RestTemplate restTemplate() { + return new RestTemplate(); + } public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } diff --git a/src/main/java/ethniconnect_backend/Login/Login.java b/src/main/java/ethniconnect_backend/Login/Login.java new file mode 100644 index 0000000..675098d --- /dev/null +++ b/src/main/java/ethniconnect_backend/Login/Login.java @@ -0,0 +1,16 @@ +package ethniconnect_backend.Login; + +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +@Getter +@EqualsAndHashCode +@ToString +@Setter +public class Login { + private String emailId; + private String password; +} + diff --git a/src/main/java/ethniconnect_backend/Login/LoginController.java b/src/main/java/ethniconnect_backend/Login/LoginController.java new file mode 100644 index 0000000..7197fd0 --- /dev/null +++ b/src/main/java/ethniconnect_backend/Login/LoginController.java @@ -0,0 +1,54 @@ +package ethniconnect_backend.Login; + +import ethniconnect_backend.UserCredentials.UserCredentials; +import ethniconnect_backend.UserCredentials.UserCredentialsRepository; +import ethniconnect_backend.UserCredentials.UserRole; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; +import org.springframework.web.bind.annotation.CrossOrigin; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; +@CrossOrigin() +@RestController +public class LoginController +{ + + @Autowired + public UserCredentialsRepository userCredentialsRepository; + + @Autowired + BCryptPasswordEncoder bCryptPasswordEncoder; + + + + @PostMapping("/signin") + public ResponseEntity authenticateUser(@RequestBody UserCredentials userCredentials) + { + UserCredentials userCredentialsFromDB = userCredentialsRepository.findByEmail(userCredentials.getEmail()).get(); + LoginResponse loginResponse = new LoginResponse(); + if(userCredentialsFromDB.getAppUserRole().toString().equalsIgnoreCase(UserRole.BUSINESS.toString())) + loginResponse.setChef(true); + if(userCredentialsFromDB.getAppUserRole().toString().equalsIgnoreCase(UserRole.PERSONAL.toString())) + loginResponse.setCustomer(true); + if(userCredentials.getEmail().equals(userCredentialsFromDB.getEmail()) + && bCryptPasswordEncoder.matches(userCredentials.getPassword(),userCredentialsFromDB.getPassword()) + && (userCredentialsFromDB.getEnabled().booleanValue() || userCredentialsFromDB.getEnabled() == true)) + { + //return new ResponseEntity<>("User signed-in successfully!.", HttpStatus.OK); + + loginResponse.setLoginId(userCredentialsFromDB.getLoginid()); + return new ResponseEntity<>(loginResponse, HttpStatus.OK); + } + loginResponse.setErrormessage("User credentials are wrong"); + if(!(userCredentialsFromDB.getEnabled().booleanValue() || userCredentialsFromDB.getEnabled() == true)) + { + loginResponse.setErrormessage("Account not activated"); + } + + //SecurityContextHolder.getContext().setAuthentication(authentication); + return new ResponseEntity<>(loginResponse, HttpStatus.UNAUTHORIZED); + } +} diff --git a/src/main/java/ethniconnect_backend/Login/LoginResponse.java b/src/main/java/ethniconnect_backend/Login/LoginResponse.java new file mode 100644 index 0000000..3846ac2 --- /dev/null +++ b/src/main/java/ethniconnect_backend/Login/LoginResponse.java @@ -0,0 +1,16 @@ +package ethniconnect_backend.Login; + +import lombok.Data; +import lombok.Getter; +import lombok.Setter; + +@Data +@Getter +@Setter +public class LoginResponse { + private long loginId; + private boolean isChef; + private boolean isCustomer; + private String errormessage; + +} diff --git a/src/main/java/ethniconnect_backend/Login/LoginService.java b/src/main/java/ethniconnect_backend/Login/LoginService.java new file mode 100644 index 0000000..64c88e7 --- /dev/null +++ b/src/main/java/ethniconnect_backend/Login/LoginService.java @@ -0,0 +1,7 @@ +package ethniconnect_backend.Login; + +import org.springframework.stereotype.Service; + + +public class LoginService { +} diff --git a/src/main/java/ethniconnect_backend/Order/OrderController.java b/src/main/java/ethniconnect_backend/Order/OrderController.java new file mode 100644 index 0000000..774ba0e --- /dev/null +++ b/src/main/java/ethniconnect_backend/Order/OrderController.java @@ -0,0 +1,29 @@ +package ethniconnect_backend.Order; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; +@CrossOrigin() +@RestController +public class OrderController { + + @Autowired + public OrderService orderService; + + @PostMapping("/placeOrder") + public ResponseEntity placeOrder(@RequestBody OrderRequest orderRequest) + { + int orderid= orderService.placeOrder(orderRequest); + return new ResponseEntity(orderid, HttpStatus.OK); + } + + + + @GetMapping("/order/{orderid}") + public ResponseEntity getOrder(@PathVariable int orderid) + { + + return new ResponseEntity(orderService.getOrder(orderid), HttpStatus.OK); + } +} diff --git a/src/main/java/ethniconnect_backend/Order/OrderItem.java b/src/main/java/ethniconnect_backend/Order/OrderItem.java new file mode 100644 index 0000000..8261d96 --- /dev/null +++ b/src/main/java/ethniconnect_backend/Order/OrderItem.java @@ -0,0 +1,48 @@ +package ethniconnect_backend.Order; + +import ethniconnect_backend.ChefCreateMenu.ChefMenu; +import lombok.*; +import org.springframework.format.annotation.DateTimeFormat; + +import javax.persistence.*; +import java.sql.Time; + +@Data +@NoArgsConstructor +@AllArgsConstructor +@Setter +@Getter +@Entity (name = "orderitems") +public class OrderItem { + @Id + @GeneratedValue + private int orderitemid; + private int menu_id; + private String special_instructions; + private int quantity; + private int orderid; + private Time pickuptime; + + @ManyToOne + @JoinColumn(name = "menu_id",insertable = false, updatable=false) + private ChefMenu chefMenu; + +// +// @ManyToOne(fetch = FetchType.LAZY) +// @JoinColumn(name = "orderid",insertable = false,updatable = false) +// private Orders order; +// +// +// public void setOrder(Orders order) { +// this.order = order; +// } +// +// public Orders getOrder(Orders order) { +// this.order = order; +// return this.order; +// } + + + +} + diff --git a/src/main/java/ethniconnect_backend/Order/OrderItemsRepository.java b/src/main/java/ethniconnect_backend/Order/OrderItemsRepository.java new file mode 100644 index 0000000..0dc729f --- /dev/null +++ b/src/main/java/ethniconnect_backend/Order/OrderItemsRepository.java @@ -0,0 +1,10 @@ +package ethniconnect_backend.Order; + +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.List; +import java.util.Optional; + +public interface OrderItemsRepository extends JpaRepository { + public List findOrderItemByOrderid(int orderid); +} diff --git a/src/main/java/ethniconnect_backend/Order/OrderItemsRequest.java b/src/main/java/ethniconnect_backend/Order/OrderItemsRequest.java new file mode 100644 index 0000000..77eacc6 --- /dev/null +++ b/src/main/java/ethniconnect_backend/Order/OrderItemsRequest.java @@ -0,0 +1,18 @@ +package ethniconnect_backend.Order; + +import lombok.*; + +@Data +@Builder +@Getter +@Setter +@AllArgsConstructor +@ToString +public class OrderItemsRequest { + + private double price; + private int quantity; + private int order_id; + private int menu_id; + +} diff --git a/src/main/java/ethniconnect_backend/Order/OrderItemsService.java b/src/main/java/ethniconnect_backend/Order/OrderItemsService.java new file mode 100644 index 0000000..d0237c9 --- /dev/null +++ b/src/main/java/ethniconnect_backend/Order/OrderItemsService.java @@ -0,0 +1,18 @@ +package ethniconnect_backend.Order; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + + +@Service +public class OrderItemsService { + + @Autowired + private OrderItemsRepository orderItemsRepository; + + public void addOrderedProducts(OrderItem orderItem) { + Orders order = new Orders(); + //orderItem.setOrderid(order.getOrderid()); + orderItemsRepository.save(orderItem); + } +} \ No newline at end of file diff --git a/src/main/java/ethniconnect_backend/Order/OrderRepository.java b/src/main/java/ethniconnect_backend/Order/OrderRepository.java new file mode 100644 index 0000000..dce6922 --- /dev/null +++ b/src/main/java/ethniconnect_backend/Order/OrderRepository.java @@ -0,0 +1,11 @@ +package ethniconnect_backend.Order; + +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.Optional; + + +public interface OrderRepository extends JpaRepository { + + Optional findByOrderid(int id); +} diff --git a/src/main/java/ethniconnect_backend/Order/OrderRequest.java b/src/main/java/ethniconnect_backend/Order/OrderRequest.java new file mode 100644 index 0000000..8069ec7 --- /dev/null +++ b/src/main/java/ethniconnect_backend/Order/OrderRequest.java @@ -0,0 +1,22 @@ +package ethniconnect_backend.Order; + +import lombok.*; + +import java.util.List; +@Data +@Builder +@Getter +@Setter +@AllArgsConstructor +@ToString +public class OrderRequest { + + //private long chefLoginid; + private long customerLoginid; + private int orderid; + private double totalprice; + private List orderItems; + +} + + diff --git a/src/main/java/ethniconnect_backend/Order/OrderService.java b/src/main/java/ethniconnect_backend/Order/OrderService.java new file mode 100644 index 0000000..7ebe0cb --- /dev/null +++ b/src/main/java/ethniconnect_backend/Order/OrderService.java @@ -0,0 +1,124 @@ +package ethniconnect_backend.Order; + +import ethniconnect_backend.ChefCreateMenu.*; +import ethniconnect_backend.ChefDetails.Chef; +import ethniconnect_backend.ChefDetails.ChefRepository; +import ethniconnect_backend.Cuisines.CuisineCategoriesRepository; +import ethniconnect_backend.CustomerDetails.Customer; +import ethniconnect_backend.CustomerDetails.CustomerRepository; +import ethniconnect_backend.UserCredentials.UserCredentialsRepository; +import ethniconnect_backend.email.EmailSender; +import ethniconnect_backend.email.EmailService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.time.Instant; +import java.time.LocalDateTime; +import java.time.ZoneOffset; +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; + +@Service +public class OrderService { + + @Autowired + private EmailService emailService; + @Autowired + private EmailSender emailSender; + + @Autowired + private ChefMenuRepository chefMenuRepository; + @Autowired + private UserCredentialsRepository userCredentialsRepository; + @Autowired + private CustomerRepository customerRepository; + @Autowired + CuisineCategoriesRepository cuisineCategoriesRepository; + @Autowired + private ChefRepository chefRepository; + @Autowired + private OrderRepository orderRepository; + + + @Autowired + private OrderItemsRepository orderItemsRepository; + + + @Autowired + OrderItemsService orderItemsService; + + public Integer placeOrder(OrderRequest orderRequest) { + + + + Orders order = new Orders(); + + //orderRequest.setOrderid(order.getOrderid()); + order.setOrder_amount(orderRequest.getTotalprice()); + //order.setChef_loginid(orderRequest.getChefLoginid()); + order.setCust_loginid(orderRequest.getCustomerLoginid()); + order.setOrderItems(orderRequest.getOrderItems()); + + order.setOrder_date(LocalDateTime.ofInstant(Instant.now(), ZoneOffset.UTC)); + + Orders savedOrder = orderRepository.save(order); + Optional customer = customerRepository.findByLoginid(orderRequest.getCustomerLoginid()); + + + for(OrderItem orderItem:orderRequest.getOrderItems()) + { + orderItem.setOrderid(savedOrder.getOrderid()); + OrderItem saved=orderItemsRepository.save(orderItem); + + //Optional chef= chefRepository.findByLoginid(saved.getChefMenu().getChef().getLoginid()); + //String chefemail = chef.get().getChef_emailid(); + /*emailSender.orderRequest( + chefemail, + //"ethniconnect@gmail.com", + emailService.buildOrderRequestEmail(savedOrder.getOrderid(), + customer.get().getCust_emailid(), + savedOrder.getOrderItems().toString()));*/ + } + List orderSummary = new ArrayList<>(); + OrderSummaryEmail orderSummaryEmail=null; + List orderItems = orderItemsRepository.findOrderItemByOrderid(savedOrder.getOrderid()); + for(int i=0;i chef = chefRepository.findByLoginid(chefMenu.getLoginid()); + String chefEmailId= chef.get().getChef_emailid(); + String itemname = chefMenu.getItem_name(); + int quantity = orderItems.get(0).getQuantity(); + + emailSender.emailChefOrderDetails( + chefEmailId, + //"ethniconnect@gmail.com", + emailService.buildOrderRequestEmail(savedOrder.getOrderid(), + customer.get().getCust_emailid() ,orderSummary)); + emailSender.emailCustomerOrderDetails( + customer.get().getCust_emailid(), + //"ethniconnect@gmail.com", + emailService.buildOrderDetailsEmail(savedOrder.getOrderid(), + chefEmailId,orderSummary)); + + /*savedOrder.getOrderItems().toString())*/ + return savedOrder.getOrderid(); + + } + + + public Orders getOrder(int orderid) { + + Orders order= orderRepository.findByOrderid(orderid).get(); + return order; + } + + +} \ No newline at end of file diff --git a/src/main/java/ethniconnect_backend/Order/OrderSummaryEmail.java b/src/main/java/ethniconnect_backend/Order/OrderSummaryEmail.java new file mode 100644 index 0000000..523b600 --- /dev/null +++ b/src/main/java/ethniconnect_backend/Order/OrderSummaryEmail.java @@ -0,0 +1,25 @@ +package ethniconnect_backend.Order; + +import lombok.Data; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +@Data +public class OrderSummaryEmail { + + @Override + public String toString() { + return + " itemname='" + itemname + '\'' + + "quantity=" + quantity + + ", specialInstructions='" + specialInstructions + '\'' + + ", totalPrice=" + totalPrice; + } + + private int quantity; + private String itemname; + private String specialInstructions; + private double totalPrice; +} diff --git a/src/main/java/ethniconnect_backend/Order/Orders.java b/src/main/java/ethniconnect_backend/Order/Orders.java new file mode 100644 index 0000000..97bb548 --- /dev/null +++ b/src/main/java/ethniconnect_backend/Order/Orders.java @@ -0,0 +1,59 @@ +package ethniconnect_backend.Order; + +import ethniconnect_backend.ChefDetails.Chef; +import ethniconnect_backend.CustomerDetails.Customer; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + + +import javax.persistence.*; +import javax.transaction.Transactional; + +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +@Data +@NoArgsConstructor +@AllArgsConstructor +@Entity +@Table(name = "orders") +@Transactional +public class Orders { + + @Id + @GeneratedValue + private int orderid; + private LocalDateTime order_date; + private double order_amount; + private long cust_loginid; + + + + @OneToMany + @JoinColumn(name = "orderid", referencedColumnName = "orderid", insertable = false, updatable = false) + private List orderItems = new ArrayList<>(); + + + + /*@ManyToOne(cascade = CascadeType.ALL) + @JoinColumn(name = "cust_loginid", referencedColumnName = "loginid", insertable = false, updatable = false) + private Customer customer;*/ + + +// public void addOrderItems(OrderItem orderItem) { +// orderItems.add(orderItem); +// orderItem.setOrder(this); +// } + + /* public void removeOrderItems(OrderItem orderItem) { + orderItems.remove(orderItem); + orderItem.setOrder(null); + }*/ + + + +} diff --git a/src/main/java/ethniconnect_backend/Order/PlaceOrderRequest.java b/src/main/java/ethniconnect_backend/Order/PlaceOrderRequest.java new file mode 100644 index 0000000..1fbabea --- /dev/null +++ b/src/main/java/ethniconnect_backend/Order/PlaceOrderRequest.java @@ -0,0 +1,16 @@ +package ethniconnect_backend.Order; + +import lombok.*; + +@Data +@Builder +@Getter +@Setter +@AllArgsConstructor +@ToString +public class PlaceOrderRequest { + private int id; + private long cust_loginid; + private double totalPrice; + +} diff --git a/src/main/java/ethniconnect_backend/Resetpassword/ResetPasswordController.java b/src/main/java/ethniconnect_backend/Resetpassword/ResetPasswordController.java new file mode 100644 index 0000000..20e3dc3 --- /dev/null +++ b/src/main/java/ethniconnect_backend/Resetpassword/ResetPasswordController.java @@ -0,0 +1,41 @@ +package ethniconnect_backend.Resetpassword; + +import ethniconnect_backend.UserCredentials.UserCredentials; +import lombok.AllArgsConstructor; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.servlet.view.RedirectView; +@CrossOrigin() +@RestController +@RequestMapping(path = "api/v1") +@AllArgsConstructor +public class ResetPasswordController { + + @Autowired + ResetPasswordService resetPasswordService; + + @PostMapping(path="resetpassword") + public String restpassword(@RequestBody ResetPasswordRequest resetPasswordRequest) + { + resetPasswordService.resetPassword(resetPasswordRequest); + return resetPasswordRequest.getEmailId(); + } + + @GetMapping(path = "/resetpassword/confirm") + public RedirectView confirm(@RequestParam("token") String token) { + String email=resetPasswordService.confirmToken(token); + RedirectView redirectView = new RedirectView(); + String redirectUrl = "http://localhost:4200/resetpassword?email="+email; + redirectView.setUrl(redirectUrl); + + return redirectView; + } + + @PutMapping(path="updatepassword") + public String updatepassword(@RequestBody UpdatePassword updatePassword) + { + resetPasswordService.updatePassword(updatePassword); + return "Updated Password"; + } + +} diff --git a/src/main/java/ethniconnect_backend/Resetpassword/ResetPasswordRequest.java b/src/main/java/ethniconnect_backend/Resetpassword/ResetPasswordRequest.java new file mode 100644 index 0000000..cfb2b87 --- /dev/null +++ b/src/main/java/ethniconnect_backend/Resetpassword/ResetPasswordRequest.java @@ -0,0 +1,20 @@ +package ethniconnect_backend.Resetpassword; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.*; + +@Getter +@EqualsAndHashCode +@ToString +@Setter +public class ResetPasswordRequest { + + private String emailId; + @JsonCreator + ResetPasswordRequest(@JsonProperty("emailId") String emailId) { + this.emailId = emailId; + } + + +} diff --git a/src/main/java/ethniconnect_backend/Resetpassword/ResetPasswordService.java b/src/main/java/ethniconnect_backend/Resetpassword/ResetPasswordService.java new file mode 100644 index 0000000..cc8ecd4 --- /dev/null +++ b/src/main/java/ethniconnect_backend/Resetpassword/ResetPasswordService.java @@ -0,0 +1,77 @@ +package ethniconnect_backend.Resetpassword; + +import ethniconnect_backend.UserCredentials.UserCredentialsRepository; +import ethniconnect_backend.UserCredentials.UserCredentialsService; +import ethniconnect_backend.UserCredentials.UserCredentials; +import ethniconnect_backend.email.EmailSender; +import ethniconnect_backend.email.EmailService; +import ethniconnect_backend.ChefSignup.token.ConfirmationToken; +import ethniconnect_backend.ChefSignup.token.ConfirmationTokenService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.time.LocalDateTime; + +@Service +public class ResetPasswordService { + + @Autowired + UserCredentialsService userCredentialsService; + @Autowired + UserCredentialsRepository userCredentialsRepository; + @Autowired + EmailSender emailSender; + @Autowired + EmailService emailService; + @Autowired + ConfirmationTokenService confirmationTokenService; + + public void resetPassword(ResetPasswordRequest resetPasswordRequest) { + UserCredentials userCredentials = userCredentialsRepository.findByEmail(resetPasswordRequest.getEmailId()).get(); + + if(userCredentialsService.isEmailIdExist(resetPasswordRequest.getEmailId())) + { + String token = userCredentialsService.getToken(userCredentials); + String link = "http://localhost:8080/api/v1/resetpassword/confirm?token=" + token; + emailSender.ResentPwdSend( + resetPasswordRequest.getEmailId(), + emailService.buildResetPasswordEmail("User", link)); + } + + } + + @Transactional + public String confirmToken(String token) { + ConfirmationToken confirmationToken = confirmationTokenService + .getToken(token) + .orElseThrow(() -> + new IllegalStateException("token not found")); + + if (confirmationToken.getConfirmedAt() != null) { + throw new IllegalStateException("email already confirmed"); + } + + LocalDateTime expiredAt = confirmationToken.getExpiresAt(); + + if (expiredAt.isBefore(LocalDateTime.now())) { + throw new IllegalStateException("token expired"); + } + + confirmationTokenService.setConfirmedAt(token); + + return confirmationToken.getAppUser().getEmail(); + + } + public void updatePassword(UpdatePassword updatePassword) { + BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder(); + String encodedPassword = passwordEncoder.encode(updatePassword.getNewPwd()); + + //UserCredentials userCredentials = userCredentialsRepository.findByEmail(resetPasswordRequest.getEmailId()).get() + UserCredentials userCredentials = userCredentialsRepository.findByEmail(updatePassword.getEmailId()).get(); + userCredentials.setPassword(encodedPassword); + userCredentials.setResetpasswordtoken(null); + userCredentialsRepository.save(userCredentials); + } +} diff --git a/src/main/java/ethniconnect_backend/Resetpassword/UpdatePassword.java b/src/main/java/ethniconnect_backend/Resetpassword/UpdatePassword.java new file mode 100644 index 0000000..e0ce6b2 --- /dev/null +++ b/src/main/java/ethniconnect_backend/Resetpassword/UpdatePassword.java @@ -0,0 +1,15 @@ +package ethniconnect_backend.Resetpassword; + +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +@Getter +@EqualsAndHashCode +@ToString +@Setter +public class UpdatePassword { + private String emailId; + private String newPwd; +} diff --git a/src/main/java/com/example/demo/appuser/AppUser.java b/src/main/java/ethniconnect_backend/UserCredentials/UserCredentials.java similarity index 69% rename from src/main/java/com/example/demo/appuser/AppUser.java rename to src/main/java/ethniconnect_backend/UserCredentials/UserCredentials.java index 793a3ef..daa0d93 100644 --- a/src/main/java/com/example/demo/appuser/AppUser.java +++ b/src/main/java/ethniconnect_backend/UserCredentials/UserCredentials.java @@ -1,4 +1,4 @@ -package com.example.demo.appuser; +package ethniconnect_backend.UserCredentials; import lombok.EqualsAndHashCode; import lombok.Getter; @@ -17,36 +17,34 @@ @EqualsAndHashCode @NoArgsConstructor @Entity -public class AppUser implements UserDetails { +public class UserCredentials implements UserDetails { @SequenceGenerator( - name = "student_sequence", - sequenceName = "student_sequence", + name = "chef_sequence", + sequenceName = "chef_sequence", allocationSize = 1 ) @Id @GeneratedValue( strategy = GenerationType.SEQUENCE, - generator = "student_sequence" + generator = "chef_sequence" ) - private Long id; - private String firstName; - private String lastName; + + private long loginid; private String email; private String password; @Enumerated(EnumType.STRING) - private AppUserRole appUserRole; + private UserRole appUserRole; + private String resetpasswordtoken; private Boolean locked = false; private Boolean enabled = false; - public AppUser(String firstName, - String lastName, - String email, - String password, - AppUserRole appUserRole) { - this.firstName = firstName; - this.lastName = lastName; + public UserCredentials( + String email, + String password, + UserRole appUserRole) { + this.email = email; this.password = password; this.appUserRole = appUserRole; @@ -69,13 +67,6 @@ public String getUsername() { return email; } - public String getFirstName() { - return firstName; - } - - public String getLastName() { - return lastName; - } @Override public boolean isAccountNonExpired() { diff --git a/src/main/java/com/example/demo/appuser/AppUserRepository.java b/src/main/java/ethniconnect_backend/UserCredentials/UserCredentialsRepository.java similarity index 57% rename from src/main/java/com/example/demo/appuser/AppUserRepository.java rename to src/main/java/ethniconnect_backend/UserCredentials/UserCredentialsRepository.java index d8eaa8f..41caa0d 100644 --- a/src/main/java/com/example/demo/appuser/AppUserRepository.java +++ b/src/main/java/ethniconnect_backend/UserCredentials/UserCredentialsRepository.java @@ -1,4 +1,4 @@ -package com.example.demo.appuser; +package ethniconnect_backend.UserCredentials; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Modifying; @@ -10,15 +10,20 @@ @Repository @Transactional(readOnly = true) -public interface AppUserRepository - extends JpaRepository { +public interface UserCredentialsRepository + extends JpaRepository { - Optional findByEmail(String email); + Optional findByLoginid(long login_id); + Optional findByEmail(String email); + public UserCredentials findByResetpasswordtoken(String token); @Transactional @Modifying - @Query("UPDATE AppUser a " + + @Query("UPDATE UserCredentials a " + "SET a.enabled = TRUE WHERE a.email = ?1") int enableAppUser(String email); + + + } diff --git a/src/main/java/com/example/demo/appuser/AppUserService.java b/src/main/java/ethniconnect_backend/UserCredentials/UserCredentialsService.java similarity index 51% rename from src/main/java/com/example/demo/appuser/AppUserService.java rename to src/main/java/ethniconnect_backend/UserCredentials/UserCredentialsService.java index aa23eb5..e621047 100644 --- a/src/main/java/com/example/demo/appuser/AppUserService.java +++ b/src/main/java/ethniconnect_backend/UserCredentials/UserCredentialsService.java @@ -1,28 +1,37 @@ -package com.example.demo.appuser; +package ethniconnect_backend.UserCredentials; -import com.example.demo.registration.token.ConfirmationToken; -import com.example.demo.registration.token.ConfirmationTokenService; +import ethniconnect_backend.ChefSignup.token.ConfirmationToken; +import ethniconnect_backend.ChefSignup.token.ConfirmationTokenService; import lombok.AllArgsConstructor; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.core.userdetails.UsernameNotFoundException; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.time.LocalDateTime; +import java.util.Optional; import java.util.UUID; - +@Transactional @Service @AllArgsConstructor -public class AppUserService implements UserDetailsService { +public class UserCredentialsService implements UserDetailsService { private final static String USER_NOT_FOUND_MSG = "user with email %s not found"; - private final AppUserRepository appUserRepository; + private final UserCredentialsRepository appUserRepository; private final BCryptPasswordEncoder bCryptPasswordEncoder; private final ConfirmationTokenService confirmationTokenService; + public boolean isEmailIdExist(String emailId) + { + if(appUserRepository.findByEmail(emailId).isPresent()) + return true; + return false; + } + @Override public UserDetails loadUserByUsername(String email) throws UsernameNotFoundException { @@ -32,25 +41,48 @@ public UserDetails loadUserByUsername(String email) String.format(USER_NOT_FOUND_MSG, email))); } - public String signUpUser(AppUser appUser) { + public String signUpUser(UserCredentials inputUser) { + + Optional existingUserCredentials = appUserRepository.findByEmail(inputUser.getEmail()); boolean userExists = appUserRepository - .findByEmail(appUser.getEmail()) + .findByEmail(inputUser.getEmail()) .isPresent(); - if (userExists) { + if (existingUserCredentials.isPresent() ) { // TODO check of attributes are the same and // TODO if email not confirmed send confirmation email. - - throw new IllegalStateException("email already taken"); + if(existingUserCredentials.get().isEnabled()) + { + throw new IllegalStateException("email already taken"); + } } + else + { + existingUserCredentials= Optional.of(inputUser); + } + + + String encodedPassword = bCryptPasswordEncoder + .encode(inputUser.getPassword()); + + if(!existingUserCredentials.isPresent()) + { + + } + existingUserCredentials.get().setPassword(encodedPassword); + existingUserCredentials.get().setEmail(inputUser.getEmail()); - String encodedPassword = bCryptPasswordEncoder - .encode(appUser.getPassword()); - appUser.setPassword(encodedPassword); + appUserRepository.save(existingUserCredentials.get()); - appUserRepository.save(appUser); + String token = getToken(existingUserCredentials.get()); +// TODO: SEND EMAIL + + return token; + } + + public String getToken(UserCredentials appUser) { String token = UUID.randomUUID().toString(); ConfirmationToken confirmationToken = new ConfirmationToken( @@ -62,13 +94,12 @@ public String signUpUser(AppUser appUser) { confirmationTokenService.saveConfirmationToken( confirmationToken); - -// TODO: SEND EMAIL - return token; } public int enableAppUser(String email) { return appUserRepository.enableAppUser(email); } + + } diff --git a/src/main/java/ethniconnect_backend/UserCredentials/UserRole.java b/src/main/java/ethniconnect_backend/UserCredentials/UserRole.java new file mode 100644 index 0000000..087751e --- /dev/null +++ b/src/main/java/ethniconnect_backend/UserCredentials/UserRole.java @@ -0,0 +1,7 @@ +package ethniconnect_backend.UserCredentials; + +public enum UserRole { + PERSONAL, + ADMIN, + BUSINESS +} diff --git a/src/main/java/ethniconnect_backend/Zip/Root.java b/src/main/java/ethniconnect_backend/Zip/Root.java new file mode 100644 index 0000000..2d4443b --- /dev/null +++ b/src/main/java/ethniconnect_backend/Zip/Root.java @@ -0,0 +1,14 @@ +package ethniconnect_backend.Zip; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.ArrayList; +import java.util.List; +@Data +@NoArgsConstructor +@AllArgsConstructor +public class Root { + public ArrayList zip_codes; +} diff --git a/src/main/java/ethniconnect_backend/Zip/Zip.java b/src/main/java/ethniconnect_backend/Zip/Zip.java new file mode 100644 index 0000000..f44865a --- /dev/null +++ b/src/main/java/ethniconnect_backend/Zip/Zip.java @@ -0,0 +1,24 @@ +package ethniconnect_backend.Zip; + +import ethniconnect_backend.Cuisines.CuisineCategory; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.persistence.*; +import java.util.Set; + +@Entity +@Data +@NoArgsConstructor +@AllArgsConstructor +public class Zip { + @Id + private int id; + private int zipCode; + + @ManyToMany(cascade = CascadeType.ALL) + @JoinTable(name = "ZIP_CUISINE", joinColumns = { @JoinColumn(name = "zip_id") }, + inverseJoinColumns = { @JoinColumn(name = "cuisine_id") }) + private Set cuisineCategory; +} diff --git a/src/main/java/ethniconnect_backend/Zip/ZipCode.java b/src/main/java/ethniconnect_backend/Zip/ZipCode.java new file mode 100644 index 0000000..93f8fdd --- /dev/null +++ b/src/main/java/ethniconnect_backend/Zip/ZipCode.java @@ -0,0 +1,16 @@ +package ethniconnect_backend.Zip; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class ZipCode { + private String zip_code; + private Integer distance; + private String city; + private String state; + +} diff --git a/src/main/java/ethniconnect_backend/Zip/ZipController.java b/src/main/java/ethniconnect_backend/Zip/ZipController.java new file mode 100644 index 0000000..2584bca --- /dev/null +++ b/src/main/java/ethniconnect_backend/Zip/ZipController.java @@ -0,0 +1,27 @@ +package ethniconnect_backend.Zip; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.CrossOrigin; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +@CrossOrigin() +@RestController +public class ZipController { + @Autowired + ZipService zipService; + @GetMapping(path = "/getAllZip/") + public List getAllZip(){ + return zipService.getAllZip(); + + } + @GetMapping(path = "/getCuisinesByZip/{zipCode}") + public Zip getCuisinesByZip(@PathVariable int zipCode){ + return zipService.getCuisineByZipCode(zipCode); + + } + +} diff --git a/src/main/java/ethniconnect_backend/Zip/ZipRepository.java b/src/main/java/ethniconnect_backend/Zip/ZipRepository.java new file mode 100644 index 0000000..a31ed42 --- /dev/null +++ b/src/main/java/ethniconnect_backend/Zip/ZipRepository.java @@ -0,0 +1,14 @@ +package ethniconnect_backend.Zip; + +import ethniconnect_backend.Cuisines.CuisineCategory; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.List; +import java.util.Set; + +@Repository +public interface ZipRepository extends JpaRepository { + +public Zip getZipByZipCode(int zipCode); +} diff --git a/src/main/java/ethniconnect_backend/Zip/ZipRequest.java b/src/main/java/ethniconnect_backend/Zip/ZipRequest.java new file mode 100644 index 0000000..f3e1eae --- /dev/null +++ b/src/main/java/ethniconnect_backend/Zip/ZipRequest.java @@ -0,0 +1,4 @@ +package ethniconnect_backend.Zip; + +public class ZipRequest { +} diff --git a/src/main/java/ethniconnect_backend/Zip/ZipService.java b/src/main/java/ethniconnect_backend/Zip/ZipService.java new file mode 100644 index 0000000..921cb21 --- /dev/null +++ b/src/main/java/ethniconnect_backend/Zip/ZipService.java @@ -0,0 +1,19 @@ +package ethniconnect_backend.Zip; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +public class ZipService { + @Autowired + ZipRepository zipRepository; + public List getAllZip(){ + return zipRepository.findAll(); + } + + public Zip getCuisineByZipCode(int zipCode){ + return zipRepository.getZipByZipCode(zipCode); + } +} diff --git a/src/main/java/ethniconnect_backend/email/EmailSender.java b/src/main/java/ethniconnect_backend/email/EmailSender.java new file mode 100644 index 0000000..cd2b42d --- /dev/null +++ b/src/main/java/ethniconnect_backend/email/EmailSender.java @@ -0,0 +1,10 @@ +package ethniconnect_backend.email; + +public interface EmailSender { + void send(String to, String emailContent); + void Contactsend(String to, String emailContent); + void ResentPwdSend(String to, String emailContent); + void emailChefOrderDetails(String to, String emailContent); + + void emailCustomerOrderDetails(String to, String emailContent); +} diff --git a/src/main/java/ethniconnect_backend/email/EmailService.java b/src/main/java/ethniconnect_backend/email/EmailService.java new file mode 100644 index 0000000..a672bfe --- /dev/null +++ b/src/main/java/ethniconnect_backend/email/EmailService.java @@ -0,0 +1,505 @@ +package ethniconnect_backend.email; + +import ethniconnect_backend.ChefCreateMenu.ChefMenu; +import ethniconnect_backend.Order.OrderItem; +import ethniconnect_backend.Order.OrderSummaryEmail; +import lombok.AllArgsConstructor; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.mail.javamail.JavaMailSender; +import org.springframework.mail.javamail.MimeMessageHelper; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; + +import javax.mail.MessagingException; +import javax.mail.internet.MimeMessage; +import java.util.List; + +@Service +@AllArgsConstructor +public class EmailService implements EmailSender{ + + private final static Logger LOGGER = LoggerFactory + .getLogger(EmailService.class); + + private final JavaMailSender mailSender; + public String buildContactEmail(String message,String useremailid) { + + return "
\n" + + "\n" + + "\n" + + "\n" + + " \n" + + " \n" + + " \n" + + " \n" + + "
\n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + "
\n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + "
\n" + + " \n" + + " \n" + + " Contact Request from User\n" + + "
\n" + + " \n" + + "
\n" + + " \n" + + "
\n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + "
\n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + "
\n" + + " \n" + + "
\n" + + "\n" + + "\n" + + "\n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + "


\n" + + " \n" + + "

Hi Admin,

You received an contact request from "+useremailid+"

\n

Message : "+message+"

" + + " \n" + + + " \n" + + "


\n" + + "\n" + + "
"; + } + + public String buildEmail(String name, String link) { + return "
\n" + + "\n" + + "\n" + + "\n" + + " \n" + + " \n" + + " \n" + + " \n" + + "
\n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + "
\n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + "
\n" + + " \n" + + " \n" + + " Confirm your email\n" + + "
\n" + + " \n" + + "
\n" + + " \n" + + "
\n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + "
\n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + "
\n" + + " \n" + + "
\n" + + "\n" + + "\n" + + "\n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + "


\n" + + " \n" + + "

Hi " + name + ",

Thank you for registering to Ethniconnect. Please click on the below link to activate your account:

Activate Now

\n Link will expire in 15 minutes.

See you soon

" + + " \n" + + "


\n" + + "\n" + + "
"; + } + + + public String buildResetPasswordEmail(String name, String link) { + + return "
\n" + + "\n" + + "\n" + + "\n" + + " \n" + + " \n" + + " \n" + + " \n" + + "
\n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + "
\n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + "
\n" + + " \n" + + " \n" + + " Reset Password\n" + + "
\n" + + " \n" + + "
\n" + + " \n" + + "
\n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + "
\n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + "
\n" + + " \n" + + "
\n" + + "\n" + + "\n" + + "\n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + "


\n" + + " \n" + + "

Hi " + name + ",

Please click on the below link to reset your password:

Reset Password

\n Link will expire in 15 minutes.

See you soon

" + + " \n" + + "


\n" + + "\n" + + "
"; + } + + public String buildOrderRequestEmail(int orderid, String useremailid, List orderSummary) { + + return "
\n" + + "\n" + + "\n" + + "\n" + + " \n" + + " \n" + + " \n" + + " \n" + + "
\n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + "
\n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + "
\n" + + " \n" + + " \n" + + " New Order Request Details\n" + + "
\n" + + " \n" + + "
\n" + + " \n" + + "
\n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + "
\n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + "
\n" + + " \n" + + "
\n" + + "\n" + + "\n" + + "\n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + "


\n" + + " \n" + + "

Hi Chef,

" + + "

" + + "You received an Order request from "+useremailid+"

" + + "

\n

Order Number : "+orderid+"

" + + "

" + + "Order Details:"+buildOrderSummaryHtml(orderSummary)+"

" + + "

\n

" + + " \n" + + + " \n" + + "


\n" + + "\n" + + "
"; + } + public String buildOrderDetailsEmail(int orderid, String chefemailid, List orderSummary) { + + + + return "
\n" + + "\n" + + "\n" + + "\n" + + " \n" + + " \n" + + " \n" + + " \n" + + "
\n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + "
\n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + "
\n" + + " \n" + + " \n" + + " Order Details\n" + + "
\n" + + " \n" + + "
\n" + + " \n" + + "
\n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + "
\n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + "
\n" + + " \n" + + "
\n" + + "\n" + + "\n" + + "\n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + "


\n" + + " \n" + + "

Hi Customer,

" + + "

" + + "You order request has been sent to Chef :"+chefemailid+"

" + + "

\n

Order Number : "+orderid+"

" + + "

" + + "Order Details :"+buildOrderSummaryHtml(orderSummary)+"

" + + "

\n

" + + " \n" + + + " \n" + + "


\n" + + "\n" + + "
"; + } + + private String buildOrderSummaryHtml(List orderSummary) { + + StringBuilder buf = new StringBuilder(); + buf.append("" + + "" + + "" + + "" + + "" + + "" + + "" + + ""); + for (int i = 0; i < orderSummary.size(); i++) { + buf.append(""); + } + buf.append("
Item nameQuantitySpecial instructions
") + .append(orderSummary.get(i).getItemname()) + .append("") + .append(orderSummary.get(i).getQuantity()) + .append("") + .append(orderSummary.get(i).getSpecialInstructions()) + .append("
" + + "" + + ""); + String html = buf.toString(); + return html; + + } + + @Override + @Async + public void send(String to, String email) { + try { + MimeMessage mimeMessage = mailSender.createMimeMessage(); + MimeMessageHelper helper = + new MimeMessageHelper(mimeMessage, "utf-8"); + helper.setText(email, true); + helper.setTo(to); + helper.setSubject("Confirm your email"); + helper.setFrom("ethniconnect@gmail.com"); + mailSender.send(mimeMessage); + } catch (MessagingException e) { + LOGGER.error("failed to send email", e); + throw new IllegalStateException("failed to send email"); + } + } + public void Contactsend(String to, String email) { + try { + MimeMessage mimeMessage = mailSender.createMimeMessage(); + MimeMessageHelper helper = + new MimeMessageHelper(mimeMessage, "utf-8"); + helper.setText(email, true); + helper.setTo(to); + helper.setSubject("Contact Request"); + helper.setFrom("ethniconnect@gmail.com"); + mailSender.send(mimeMessage); + } catch (MessagingException e) { + LOGGER.error("failed to send email", e); + throw new IllegalStateException("failed to send email"); + } + } + public void ResentPwdSend(String to, String email) { + try { + MimeMessage mimeMessage = mailSender.createMimeMessage(); + MimeMessageHelper helper = + new MimeMessageHelper(mimeMessage, "utf-8"); + helper.setText(email, true); + helper.setTo(to); + helper.setSubject("Reset Password"); + helper.setFrom("ethniconnect@gmail.com"); + mailSender.send(mimeMessage); + } catch (MessagingException e) { + LOGGER.error("failed to send email", e); + throw new IllegalStateException("failed to send email"); + } + } + + public void emailChefOrderDetails(String to, String email) { + try { + MimeMessage mimeMessage = mailSender.createMimeMessage(); + MimeMessageHelper helper = + new MimeMessageHelper(mimeMessage, "utf-8"); + helper.setText(email, true); + helper.setTo(to); + helper.setSubject("Order Request"); + helper.setFrom("ethniconnect@gmail.com"); + mailSender.send(mimeMessage); + } catch (MessagingException e) { + LOGGER.error("failed to send email", e); + throw new IllegalStateException("failed to send email"); + } + } + + public void emailCustomerOrderDetails(String to, String email) { + try { + MimeMessage mimeMessage = mailSender.createMimeMessage(); + MimeMessageHelper helper = + new MimeMessageHelper(mimeMessage, "utf-8"); + helper.setText(email, true); + helper.setTo(to); + helper.setSubject("Order Details"); + helper.setFrom("ethniconnect@gmail.com"); + mailSender.send(mimeMessage); + } catch (MessagingException e) { + LOGGER.error("failed to send email", e); + throw new IllegalStateException("failed to send email"); + } + } + + +} diff --git a/src/main/java/com/example/demo/security/PasswordEncoder.java b/src/main/java/ethniconnect_backend/security/PasswordEncoder.java similarity index 90% rename from src/main/java/com/example/demo/security/PasswordEncoder.java rename to src/main/java/ethniconnect_backend/security/PasswordEncoder.java index b4f4291..dfb329b 100644 --- a/src/main/java/com/example/demo/security/PasswordEncoder.java +++ b/src/main/java/ethniconnect_backend/security/PasswordEncoder.java @@ -1,4 +1,4 @@ -package com.example.demo.security; +package ethniconnect_backend.security; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; diff --git a/src/main/java/com/example/demo/security/config/WebSecurityConfig.java b/src/main/java/ethniconnect_backend/security/config/WebSecurityConfig.java similarity index 88% rename from src/main/java/com/example/demo/security/config/WebSecurityConfig.java rename to src/main/java/ethniconnect_backend/security/config/WebSecurityConfig.java index 72b110d..9ad8142 100644 --- a/src/main/java/com/example/demo/security/config/WebSecurityConfig.java +++ b/src/main/java/ethniconnect_backend/security/config/WebSecurityConfig.java @@ -1,6 +1,6 @@ -package com.example.demo.security.config; +package ethniconnect_backend.security.config; -import com.example.demo.appuser.AppUserService; +import ethniconnect_backend.UserCredentials.UserCredentialsService; import lombok.AllArgsConstructor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -16,7 +16,7 @@ @EnableWebSecurity public class WebSecurityConfig extends WebSecurityConfigurerAdapter { - private final AppUserService appUserService; + private final UserCredentialsService appUserService; private final BCryptPasswordEncoder bCryptPasswordEncoder; @Override @@ -24,7 +24,7 @@ protected void configure(HttpSecurity http) throws Exception { http .csrf().disable() .authorizeRequests() - .antMatchers("/api/v*/registration/**") + .antMatchers("/**") .permitAll() .anyRequest() .authenticated().and() diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index c270e3e..cc77a13 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -1,27 +1,52 @@ server: + port: 8080 + + + error: include-message: always include-binding-errors: always + + + spring: datasource: - password: - url: jdbc:postgresql://localhost:5432/registration - username: + driver-class-name: com.mysql.cj.jdbc.Driver + password: bharani16 + initialization-mode: ALWAYS + url: #jdbc:mysql://ethniconnect.chakxnfle4p3.us-east-2.rds.amazonaws.com:3306/ethniconnect?serverTimezone=UTC + jdbc:mysql://localhost:3306/ethniconnect?serverTimezone=UTC + + #url: jdbc:mysql://ethniconnectdb.cs03gfixeofo.us-east-2.rds.amazonaws.com:3306/ethniconnect + #ethni-connect.ciff6u6uo7qd.us-east-2.rds.amazonaws.com (new updated saranya's) + username: root jpa: hibernate: - ddl-auto: create-drop + ddl-auto: update properties: hibernate: - dialect: org.hibernate.dialect.PostgreSQLDialect + dialect: org.hibernate.dialect.MySQL8Dialect format_sql: true show-sql: true + # mail: + # host: smtp.gmail.com + # port: 587 + #username: + #password: + #properties: + #mail: + #smtp: + #auth: true + #starttls: + #enable: true mail: - host: localhost - port: 1025 - username: hello - password: hello + host: smtp.gmail.com + port: 587 + username: ethniconnect@gmail.com + password: jbjkxybezpvligxn + properties: mail: @@ -35,3 +60,7 @@ spring: timeout: 3000 writetimeout: 5000 + servlet : + multipart : + max-file-size: 15MB + max-request-size: 15MB diff --git a/src/test/java/com/example/demo/DemoApplicationTests.java b/src/test/java/ethniconnect_backend/DemoApplicationTests.java similarity index 85% rename from src/test/java/com/example/demo/DemoApplicationTests.java rename to src/test/java/ethniconnect_backend/DemoApplicationTests.java index 2778a6a..fa62e2c 100644 --- a/src/test/java/com/example/demo/DemoApplicationTests.java +++ b/src/test/java/ethniconnect_backend/DemoApplicationTests.java @@ -1,4 +1,4 @@ -package com.example.demo; +package ethniconnect_backend; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest;