MailerController.java 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. package es.uv.garcosda.controllers;
  2. import java.util.List;
  3. import org.springframework.amqp.rabbit.core.RabbitTemplate;
  4. import org.springframework.beans.factory.annotation.Autowired;
  5. import org.springframework.beans.factory.annotation.Value;
  6. import org.springframework.http.HttpStatus;
  7. import org.springframework.http.ResponseEntity;
  8. import org.springframework.web.bind.annotation.GetMapping;
  9. import org.springframework.web.bind.annotation.PathVariable;
  10. import org.springframework.web.bind.annotation.PostMapping;
  11. import org.springframework.web.bind.annotation.RequestBody;
  12. import org.springframework.web.bind.annotation.RequestMapping;
  13. import org.springframework.web.bind.annotation.RestController;
  14. import es.uv.garcosda.domain.Mail;
  15. import es.uv.garcosda.domain.Mailbox;
  16. import es.uv.garcosda.domain.User;
  17. import es.uv.garcosda.objects.MailDTO;
  18. import es.uv.garcosda.services.UserService;
  19. @RestController
  20. @RequestMapping("/api/v1")
  21. public class MailerController {
  22. @Autowired
  23. UserService us;
  24. @Autowired
  25. RabbitTemplate rabitt;
  26. @Value("${rabbitmq.exchange.name}")
  27. private String exchange;
  28. @Value("${rabbitmq.routing.key.user}")
  29. private String routingKeyUser;
  30. @Value("${rabbitmq.routing.key.recover}")
  31. private String routingKeyRecover;
  32. @GetMapping("users")
  33. public ResponseEntity<?> getUsers() {
  34. List<User> u = this.us.findAll();
  35. return new ResponseEntity<List<User>>(u, HttpStatus.OK);
  36. }
  37. @GetMapping("users/{email}")
  38. public ResponseEntity<?> getUser(@PathVariable("email") String email) {
  39. User u = this.us.findByEmail(email);
  40. if(u.getEmail() == null) {
  41. return new ResponseEntity<String>("No user found with email "+email, HttpStatus.NOT_FOUND);
  42. }
  43. else {
  44. return new ResponseEntity<User>(u, HttpStatus.OK);
  45. }
  46. }
  47. @GetMapping("mailbox/{email}")
  48. public ResponseEntity<?> getMailbox(@PathVariable("email") String email) {
  49. User u = this.us.findByEmail(email);
  50. if(u.getEmail() == null) {
  51. return new ResponseEntity<String>("No mailbox found for email "+email, HttpStatus.NOT_FOUND);
  52. }
  53. else {
  54. Mailbox m = this.us.findMailboxByEmail(u.getEmail());
  55. if(m.getUser() == null) {
  56. return new ResponseEntity<String>("No mailbox found for email "+email, HttpStatus.NOT_FOUND);
  57. }
  58. return new ResponseEntity<Mailbox>(m, HttpStatus.OK);
  59. }
  60. }
  61. @PostMapping("mailbox")
  62. public ResponseEntity<?> sendMail(@RequestBody MailDTO mail){
  63. User from = this.us.findByEmail(mail.getFrom());
  64. User to = this.us.findByEmail(mail.getTo());
  65. if(from.getEmail() == null) {
  66. return new ResponseEntity<String>("No origin user found with email "+mail.getFrom(), HttpStatus.NOT_FOUND);
  67. }
  68. else if(to.getEmail() == null) {
  69. return new ResponseEntity<String>("No destination user found with email "+mail.getTo(), HttpStatus.NOT_FOUND);
  70. }
  71. else {
  72. Mail m = new Mail(from, to, mail.getSubject(), mail.getBody());
  73. us.addMail(m);
  74. return new ResponseEntity<Mail>(m, HttpStatus.OK);
  75. }
  76. }
  77. @PostMapping("users")
  78. public ResponseEntity<?> addUser(@RequestBody User user){
  79. if(this.us.addUser(user)) {
  80. this.rabitt.convertAndSend(this.exchange, this.routingKeyUser, user);
  81. return new ResponseEntity<String>("User created", HttpStatus.CREATED);
  82. }
  83. else{
  84. return new ResponseEntity<String>("Cannot create user", HttpStatus.CONFLICT);
  85. }
  86. }
  87. @PostMapping("users/{email}/passwd")
  88. public ResponseEntity<?> recoverUserPasswd(@PathVariable("email") String email){
  89. User user = this.us.findByEmail(email);
  90. if(user.getEmail() == null) {
  91. return new ResponseEntity<String>("No user found with email "+email, HttpStatus.NOT_FOUND);
  92. }
  93. this.rabitt.convertAndSend(this.exchange, this.routingKeyRecover, user);
  94. return new ResponseEntity<String>("New password sent", HttpStatus.CREATED);
  95. }
  96. }