diff --git a/src/main/java/org/springframework/cheapy/configuration/SecurityConfiguration.java b/src/main/java/org/springframework/cheapy/configuration/SecurityConfiguration.java index e2c866bb3..542e41f26 100644 --- a/src/main/java/org/springframework/cheapy/configuration/SecurityConfiguration.java +++ b/src/main/java/org/springframework/cheapy/configuration/SecurityConfiguration.java @@ -37,7 +37,7 @@ public class SecurityConfiguration extends WebSecurityConfigurerAdapter { .antMatchers("/users/new").permitAll() .antMatchers("/login/**").anonymous() - .antMatchers("/logout").permitAll() + .antMatchers("/logout").authenticated() .antMatchers("/usuarios/new").permitAll() .antMatchers("/admin/**").hasAnyAuthority("admin") @@ -53,11 +53,12 @@ public class SecurityConfiguration extends WebSecurityConfigurerAdapter { .antMatchers("/offersCreate").hasAuthority("client") + .antMatchers("/reviews/**").authenticated() .and().formLogin() - .loginPage("/login").permitAll() + .loginPage("/login") .failureUrl("/login?error") - .and().logout().logoutSuccessUrl("/login"); + .and().logout().logoutSuccessUrl("/"); // Configuración para que funcione la consola de administración // de la BD H2 (deshabilitar las cabeceras de protección contra diff --git a/src/main/java/org/springframework/cheapy/model/Review.java b/src/main/java/org/springframework/cheapy/model/Review.java new file mode 100644 index 000000000..b8cf0b6d4 --- /dev/null +++ b/src/main/java/org/springframework/cheapy/model/Review.java @@ -0,0 +1,56 @@ +package org.springframework.cheapy.model; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; +import javax.persistence.Table; +import javax.validation.constraints.NotBlank; + +import org.hibernate.validator.constraints.Range; + +import com.sun.istack.NotNull; + +@Entity +@Table(name = "review") +public class Review extends BaseEntity{ + + private static final long serialVersionUID = 1L; + + @NotBlank(message = "Debe rellenar la valoración de Cheapy") + @Column(length=16777215) + private String opinion; + + @NotNull + @Range(min = 1, max = 5) + private Integer stars; + + @ManyToOne + @JoinColumn(name = "username", referencedColumnName = "username") + private User escritor; + + public User getEscritor() { + return escritor; + } + + public void setEscritor(User escritor) { + this.escritor = escritor; + } + + public String getOpinion() { + return opinion; + } + + public void setOpinion(String opinion) { + this.opinion = opinion; + } + + public Integer getStars() { + return stars; + } + + public void setStars(Integer stars) { + this.stars = stars; + } + +} diff --git a/src/main/java/org/springframework/cheapy/repository/FoodOfferRepository.java b/src/main/java/org/springframework/cheapy/repository/FoodOfferRepository.java index 2e9ca093b..099f6788c 100644 --- a/src/main/java/org/springframework/cheapy/repository/FoodOfferRepository.java +++ b/src/main/java/org/springframework/cheapy/repository/FoodOfferRepository.java @@ -28,4 +28,8 @@ public interface FoodOfferRepository extends Repository { @Query("SELECT foodOffer FROM FoodOffer foodOffer WHERE foodOffer.client.id =:id") @Transactional(readOnly = true) List findByUserId(@Param("id") Integer id); + + @Query("SELECT foodOffer FROM FoodOffer foodOffer WHERE foodOffer.client.id =:id AND foodOffer.status!= 'inactive'") + @Transactional(readOnly = true) + List findFoodOfferActOclByUserId(@Param("id") Integer id); } diff --git a/src/main/java/org/springframework/cheapy/repository/NuOfferRepository.java b/src/main/java/org/springframework/cheapy/repository/NuOfferRepository.java index 8e59df4dc..d895c5916 100644 --- a/src/main/java/org/springframework/cheapy/repository/NuOfferRepository.java +++ b/src/main/java/org/springframework/cheapy/repository/NuOfferRepository.java @@ -27,4 +27,8 @@ public interface NuOfferRepository extends Repository { @Query("SELECT nuOffer FROM NuOffer nuOffer WHERE nuOffer.client.id =:id") @Transactional(readOnly = true) List findByUserId(@Param("id") Integer id); + + @Query("SELECT nuOffer FROM NuOffer nuOffer WHERE nuOffer.client.id =:id AND nuOffer.status!= 'inactive'") + @Transactional(readOnly = true) + List findNuOfferActOclByUserId(@Param("id") Integer id); } diff --git a/src/main/java/org/springframework/cheapy/repository/ReviewRepository.java b/src/main/java/org/springframework/cheapy/repository/ReviewRepository.java new file mode 100644 index 000000000..754e2650f --- /dev/null +++ b/src/main/java/org/springframework/cheapy/repository/ReviewRepository.java @@ -0,0 +1,22 @@ +package org.springframework.cheapy.repository; + +import java.util.List; + +import org.springframework.cheapy.model.Review; +import org.springframework.data.repository.Repository; +import org.springframework.data.repository.query.Param; +import org.springframework.data.jpa.repository.Query; +import org.springframework.transaction.annotation.Transactional; + +public interface ReviewRepository extends Repository { + + @Query("SELECT r FROM Review r") + @Transactional(readOnly = true) + List findAllReviews(); + + void save(Review review); + + @Query("SELECT r FROM Review r WHERE id =:id") + @Transactional(readOnly = true) + Review findReviewById(@Param("id") Integer id); +} diff --git a/src/main/java/org/springframework/cheapy/repository/SpeedOfferRepository.java b/src/main/java/org/springframework/cheapy/repository/SpeedOfferRepository.java index e4df0426c..4c7465368 100644 --- a/src/main/java/org/springframework/cheapy/repository/SpeedOfferRepository.java +++ b/src/main/java/org/springframework/cheapy/repository/SpeedOfferRepository.java @@ -29,4 +29,8 @@ public interface SpeedOfferRepository extends Repository { @Query("SELECT speedOffer FROM SpeedOffer speedOffer WHERE speedOffer.client.id =:id") @Transactional(readOnly = true) List findByUserId(@Param("id") Integer id); + + @Query("SELECT speedOffer FROM SpeedOffer speedOffer WHERE speedOffer.client.id =:id AND speedOffer.status!= 'inactive'") + @Transactional(readOnly = true) + List findSpeedOfferActOclByUserId(@Param("id") Integer id); } diff --git a/src/main/java/org/springframework/cheapy/repository/TimeOfferRepository.java b/src/main/java/org/springframework/cheapy/repository/TimeOfferRepository.java index 1cd4c5e34..d891e0953 100644 --- a/src/main/java/org/springframework/cheapy/repository/TimeOfferRepository.java +++ b/src/main/java/org/springframework/cheapy/repository/TimeOfferRepository.java @@ -26,4 +26,8 @@ public interface TimeOfferRepository extends Repository { @Query("SELECT timeOffer FROM TimeOffer timeOffer WHERE timeOffer.client.id =:id") @Transactional(readOnly = true) List findByUserId(@Param("id") Integer id); + + @Query("SELECT timeOffer FROM TimeOffer timeOffer WHERE timeOffer.client.id =:id AND timeOffer.status!= 'inactive'") + @Transactional(readOnly = true) + List findTimeOfferActOclByUserId(@Param("id") Integer id); } diff --git a/src/main/java/org/springframework/cheapy/repository/UserRepository.java b/src/main/java/org/springframework/cheapy/repository/UserRepository.java new file mode 100644 index 000000000..0c29a7bf6 --- /dev/null +++ b/src/main/java/org/springframework/cheapy/repository/UserRepository.java @@ -0,0 +1,15 @@ + +package org.springframework.cheapy.repository; + +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.CrudRepository; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.cheapy.model.User; +import org.springframework.cheapy.model.Usuario; + +public interface UserRepository extends CrudRepository { + + @Query("SELECT u FROM User u WHERE username =:username") + @Transactional(readOnly = true) + User findByUsername(String username); +} diff --git a/src/main/java/org/springframework/cheapy/repository/UsuarioRepository.java b/src/main/java/org/springframework/cheapy/repository/UsuarioRepository.java deleted file mode 100644 index 1bd7c8ee2..000000000 --- a/src/main/java/org/springframework/cheapy/repository/UsuarioRepository.java +++ /dev/null @@ -1,11 +0,0 @@ - -package org.springframework.cheapy.repository; - -import org.springframework.data.repository.CrudRepository; -import org.springframework.cheapy.model.Usuario; - -public interface UsuarioRepository extends CrudRepository { - - //Usuario findByUsername(String currentPrincipalName); - -} diff --git a/src/main/java/org/springframework/cheapy/service/FoodOfferService.java b/src/main/java/org/springframework/cheapy/service/FoodOfferService.java index c11c9e8a6..a555e5c6c 100644 --- a/src/main/java/org/springframework/cheapy/service/FoodOfferService.java +++ b/src/main/java/org/springframework/cheapy/service/FoodOfferService.java @@ -37,4 +37,8 @@ public class FoodOfferService { public List findFoodOfferByUserId(final int id) { return this.foodOfferRepository.findByUserId(id); } + + public List findFoodOfferActOclByUserId(final int id) { + return this.foodOfferRepository.findFoodOfferActOclByUserId(id); + } } diff --git a/src/main/java/org/springframework/cheapy/service/NuOfferService.java b/src/main/java/org/springframework/cheapy/service/NuOfferService.java index 5268ac2db..7bbb48aaa 100644 --- a/src/main/java/org/springframework/cheapy/service/NuOfferService.java +++ b/src/main/java/org/springframework/cheapy/service/NuOfferService.java @@ -47,4 +47,8 @@ public class NuOfferService { public List findNuOfferByUserId(final int id) { return this.nuOfferRepository.findByUserId(id); } + + public List findNuOfferActOclByUserId(final int id) { + return this.nuOfferRepository.findNuOfferActOclByUserId(id); + } } diff --git a/src/main/java/org/springframework/cheapy/service/ReviewService.java b/src/main/java/org/springframework/cheapy/service/ReviewService.java new file mode 100644 index 000000000..2b7bc9301 --- /dev/null +++ b/src/main/java/org/springframework/cheapy/service/ReviewService.java @@ -0,0 +1,40 @@ +package org.springframework.cheapy.service; + +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cheapy.model.Review; +import org.springframework.cheapy.model.StatusOffer; +import org.springframework.cheapy.model.TimeOffer; +import org.springframework.cheapy.repository.ReviewRepository; +import org.springframework.cheapy.repository.TimeOfferRepository; + +import org.springframework.dao.DataAccessException; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +public class ReviewService { + private ReviewRepository reviewRepository; + + @Autowired + public ReviewService(final ReviewRepository reviewRepository) { + this.reviewRepository = reviewRepository; + } + + @Transactional + public Review findReviewById(final int id) { + return this.reviewRepository.findReviewById(id); + } + + @Transactional + public List findAllReviews() { + return this.reviewRepository.findAllReviews(); + } + + @Transactional + public void saveReview(final Review Review) throws DataAccessException { + this.reviewRepository.save(Review); + } + +} diff --git a/src/main/java/org/springframework/cheapy/service/SpeedOfferService.java b/src/main/java/org/springframework/cheapy/service/SpeedOfferService.java index 6063b7426..384ec046c 100644 --- a/src/main/java/org/springframework/cheapy/service/SpeedOfferService.java +++ b/src/main/java/org/springframework/cheapy/service/SpeedOfferService.java @@ -44,4 +44,8 @@ public class SpeedOfferService { public List findSpeedOfferByUserId(final int id) { return this.speedOfferRepository.findByUserId(id); } + + public List findSpeedOfferActOclByUserId(final int id) { + return this.speedOfferRepository.findSpeedOfferActOclByUserId(id); + } } diff --git a/src/main/java/org/springframework/cheapy/service/TimeOfferService.java b/src/main/java/org/springframework/cheapy/service/TimeOfferService.java index e23fa5151..154fb9bc8 100644 --- a/src/main/java/org/springframework/cheapy/service/TimeOfferService.java +++ b/src/main/java/org/springframework/cheapy/service/TimeOfferService.java @@ -40,4 +40,8 @@ public class TimeOfferService { public List findTimeOfferByUserId(final int id) { return this.timeOfferRepository.findByUserId(id); } + + public List findTimeOfferActOclByUserId(final int id) { + return this.timeOfferRepository.findTimeOfferActOclByUserId(id); + } } diff --git a/src/main/java/org/springframework/cheapy/service/UserService.java b/src/main/java/org/springframework/cheapy/service/UserService.java new file mode 100644 index 000000000..92b896e7f --- /dev/null +++ b/src/main/java/org/springframework/cheapy/service/UserService.java @@ -0,0 +1,29 @@ +package org.springframework.cheapy.service; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cheapy.model.User; +import org.springframework.cheapy.repository.UserRepository; +import org.springframework.dao.DataAccessException; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +public class UserService { + + private UserRepository userRepository; + + @Autowired + public UserService(final UserRepository userRepository) { + this.userRepository = userRepository; + } + + @Transactional + public User getCurrentUser() throws DataAccessException { + Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); + String username = authentication.getName(); + return this.userRepository.findByUsername(username); + } + +} diff --git a/src/main/java/org/springframework/cheapy/web/FoodOfferController.java b/src/main/java/org/springframework/cheapy/web/FoodOfferController.java index 3cd695532..99bc97f66 100644 --- a/src/main/java/org/springframework/cheapy/web/FoodOfferController.java +++ b/src/main/java/org/springframework/cheapy/web/FoodOfferController.java @@ -104,13 +104,15 @@ public class FoodOfferController { public String processShowForm(@PathVariable("foodOfferId") int foodOfferId, Map model) { FoodOffer foodOffer = this.foodOfferService.findFoodOfferById(foodOfferId); - + if(!foodOffer.getStatus().equals(StatusOffer.active)) { + return "error"; + }else { model.put("foodOffer", foodOffer); model.put("localDateTimeFormat", DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm")); return "offers/food/foodOffersShow"; - + } } @GetMapping(value = "/offers/food/{foodOfferId}/edit") diff --git a/src/main/java/org/springframework/cheapy/web/NuOfferController.java b/src/main/java/org/springframework/cheapy/web/NuOfferController.java index 7c8826521..ef89c552f 100644 --- a/src/main/java/org/springframework/cheapy/web/NuOfferController.java +++ b/src/main/java/org/springframework/cheapy/web/NuOfferController.java @@ -133,10 +133,14 @@ public class NuOfferController { @GetMapping("/offers/nu/{nuOfferId}") public String processShowForm(@PathVariable("nuOfferId") int nuOfferId, Map model) { NuOffer nuOffer = this.nuOfferService.findNuOfferById(nuOfferId); + if(!nuOffer.getStatus().equals(StatusOffer.active)) { + return "error"; + }else { model.put("nuOffer", nuOffer); model.put("localDateTimeFormat", DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm")); return "offers/nu/nuOffersShow"; + } } @@ -174,15 +178,15 @@ public class NuOfferController { return NuOfferController.VIEWS_NU_OFFER_CREATE_OR_UPDATE_FORM; } else { - if(!this.checkDates(nuOffer)) { + if(!this.checkDates(nuOfferEdit)) { //Poner aqui mensaje de error return VIEWS_NU_OFFER_CREATE_OR_UPDATE_FORM; } - if(!this.checkConditions(nuOffer)) { + if(!this.checkConditions(nuOfferEdit)) { //Poner aqui mensaje de error return VIEWS_NU_OFFER_CREATE_OR_UPDATE_FORM; } - if(!this.checkDiscounts(nuOffer)) { + if(!this.checkDiscounts(nuOfferEdit)) { //Poner aqui mensaje de error return VIEWS_NU_OFFER_CREATE_OR_UPDATE_FORM; } diff --git a/src/main/java/org/springframework/cheapy/web/OfertaController.java b/src/main/java/org/springframework/cheapy/web/OfertaController.java index 2ae80261c..60567c491 100644 --- a/src/main/java/org/springframework/cheapy/web/OfertaController.java +++ b/src/main/java/org/springframework/cheapy/web/OfertaController.java @@ -64,10 +64,10 @@ public class OfertaController { int actual = this.clientService.getCurrentClient().getId(); - List foodOfferLs = this.foodOfferService.findFoodOfferByUserId(actual); - List nuOfferLs = this.nuOfferService.findNuOfferByUserId(actual); - List speedOfferLs = this.speedOfferService.findSpeedOfferByUserId(actual); - List timeOfferLs = this.timeOfferService.findTimeOfferByUserId(actual); + List foodOfferLs = this.foodOfferService.findFoodOfferActOclByUserId(actual); + List nuOfferLs = this.nuOfferService.findNuOfferActOclByUserId(actual); + List speedOfferLs = this.speedOfferService.findSpeedOfferActOclByUserId(actual); + List timeOfferLs = this.timeOfferService.findTimeOfferActOclByUserId(actual); model.put("foodOfferLs", foodOfferLs); model.put("nuOfferLs", nuOfferLs); diff --git a/src/main/java/org/springframework/cheapy/web/ReviewController.java b/src/main/java/org/springframework/cheapy/web/ReviewController.java new file mode 100644 index 000000000..0412db3cb --- /dev/null +++ b/src/main/java/org/springframework/cheapy/web/ReviewController.java @@ -0,0 +1,115 @@ +package org.springframework.cheapy.web; + +import java.util.List; +import java.util.Map; + +import javax.validation.Valid; + +import org.springframework.cheapy.model.Review; +import org.springframework.cheapy.model.User; +import org.springframework.cheapy.service.ReviewService; +import org.springframework.cheapy.service.UserService; +import org.springframework.stereotype.Controller; +import org.springframework.ui.ModelMap; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; + +@Controller +public class ReviewController { + + + private static final String VIEWS_REVIEWS_CREATE_OR_UPDATE_FORM = "reviews/createOrUpdateReviewForm"; + private final ReviewService reviewService; + private final UserService userService; + + public ReviewController(final ReviewService reviewService, final UserService userService) { + this.reviewService = reviewService; + this.userService = userService; + } + private boolean checkIdentity(final int reviewId) { + boolean res = false; + User user = this.userService.getCurrentUser(); + Review review = this.reviewService.findReviewById(reviewId); + User reviewsAuthor = review.getEscritor(); + if (user.equals(reviewsAuthor)) { + res = true; + } + return res; + } + @GetMapping("/reviews") + public String processFindForm( Map model) { + + List reviewsLs=this.reviewService.findAllReviews(); + model.put("reviewsLs", reviewsLs); + + return "reviews/reviewsList"; + + } + + @GetMapping("/reviews/new") + public String initCreationForm(Map model) { + Review review = new Review(); + model.put("review", review); + return VIEWS_REVIEWS_CREATE_OR_UPDATE_FORM; + } + + @PostMapping("/reviews/new") + public String processCreationForm(@Valid Review review, BindingResult result) { + if (result.hasErrors()) { + return VIEWS_REVIEWS_CREATE_OR_UPDATE_FORM; + } else { + User escritor = this.userService.getCurrentUser(); + review.setEscritor(escritor); + + this.reviewService.saveReview(review); + return "redirect:/reviews/" + review.getId(); + } + } + + + + @GetMapping("/reviews/{reviewId}") + public String processShowForm(@PathVariable("reviewId") int reviewId, Map model) { + + Review review = this.reviewService.findReviewById(reviewId); + + model.put("review", review); + + + return "reviews/reviewsShow"; + + } + + @GetMapping(value = "/reviews/{reviewId}/edit") + public String updateReview(@PathVariable("reviewId") final int reviewId, final ModelMap model) { + if (!this.checkIdentity(reviewId)) { + return "error"; + } + + Review review = this.reviewService.findReviewById(reviewId); + model.addAttribute("review", review); + return ReviewController.VIEWS_REVIEWS_CREATE_OR_UPDATE_FORM; + } + + @PostMapping(value = "/reviews/{reviewId}/edit") + public String updateReview(@Valid final Review reviewEdit, final BindingResult result, final ModelMap model) { + if (!this.checkIdentity(reviewEdit.getId())) { + return "error"; + } + if (result.hasErrors()) { + model.addAttribute("review", reviewEdit); + return ReviewController.VIEWS_REVIEWS_CREATE_OR_UPDATE_FORM; + + } else { + User escritor = this.userService.getCurrentUser(); + reviewEdit.setEscritor(escritor); + + this.reviewService.saveReview(reviewEdit); + return "redirect:/reviews/" + reviewEdit.getId(); + } + + } + +} diff --git a/src/main/java/org/springframework/cheapy/web/SpeedOfferController.java b/src/main/java/org/springframework/cheapy/web/SpeedOfferController.java index 5b7e5aada..77a6e448e 100644 --- a/src/main/java/org/springframework/cheapy/web/SpeedOfferController.java +++ b/src/main/java/org/springframework/cheapy/web/SpeedOfferController.java @@ -125,12 +125,15 @@ public class SpeedOfferController { @GetMapping("/offers/speed/{speedOfferId}") public String processShowForm(@PathVariable("speedOfferId") int speedOfferId, Map model) { - SpeedOffer speedOffer = this.speedOfferService.findSpeedOfferById(speedOfferId); + if(!speedOffer.getStatus().equals(StatusOffer.active)) { + return "error"; + }else { model.put("speedOffer", speedOffer); model.put("localDateTimeFormat", DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm")); return "offers/speed/speedOffersShow"; + } } @GetMapping(value = "/offers/speed/{speedOfferId}/edit") @@ -167,15 +170,15 @@ public class SpeedOfferController { return SpeedOfferController.VIEWS_SPEED_OFFER_CREATE_OR_UPDATE_FORM; } else { - if(!this.checkDates(speedOffer)) { + if(!this.checkDates(speedOfferEdit)) { //Poner aqui mensaje de error return VIEWS_SPEED_OFFER_CREATE_OR_UPDATE_FORM; } - if(!this.checkConditions(speedOffer)) { + if(!this.checkConditions(speedOfferEdit)) { //Poner aqui mensaje de error return VIEWS_SPEED_OFFER_CREATE_OR_UPDATE_FORM; } - if(!this.checkDiscounts(speedOffer)) { + if(!this.checkDiscounts(speedOfferEdit)) { //Poner aqui mensaje de error return VIEWS_SPEED_OFFER_CREATE_OR_UPDATE_FORM; } diff --git a/src/main/java/org/springframework/cheapy/web/TimeOfferController.java b/src/main/java/org/springframework/cheapy/web/TimeOfferController.java index 5b58bed76..56b745b01 100644 --- a/src/main/java/org/springframework/cheapy/web/TimeOfferController.java +++ b/src/main/java/org/springframework/cheapy/web/TimeOfferController.java @@ -121,12 +121,15 @@ public class TimeOfferController { public String processShowForm(@PathVariable("timeOfferId") int timeOfferId, Map model) { TimeOffer timeOffer = this.timeOfferService.findTimeOfferById(timeOfferId); - + if(!timeOffer.getStatus().equals(StatusOffer.active)) { + return "error"; + }else { model.put("timeOffer", timeOffer); model.put("localDateTimeFormat", DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm")); return "offers/time/timeOffersShow"; + } } @@ -165,11 +168,11 @@ public class TimeOfferController { return TimeOfferController.VIEWS_TIME_OFFER_CREATE_OR_UPDATE_FORM; } else { - if(!this.checkDates(timeOffer)) { + if(!this.checkDates(timeOfferEdit)) { //Poner aqui mensaje de error return VIEWS_TIME_OFFER_CREATE_OR_UPDATE_FORM; } - if(!this.checkTimes(timeOffer)) { + if(!this.checkTimes(timeOfferEdit)) { //Poner aqui mensaje de error return VIEWS_TIME_OFFER_CREATE_OR_UPDATE_FORM; } diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 5f1cb5d17..afee236bf 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -18,7 +18,7 @@ spring.jpa.properties.javax.persistence.schema-generation.drop-script-source=dro # Internationalization spring.messages.basename=messages/messages - +spring.messages.encoding=UTF-8 # Views spring.mvc.view.prefix: /WEB-INF/jsp/ @@ -35,4 +35,4 @@ logging.level.org.springframework=INFO # logging.level.org.springframework.context.annotation=TRACE # Maximum time static resources should be cached -spring.resources.cache.cachecontrol.max-age=12h \ No newline at end of file +spring.resources.cache.cachecontrol.max-age=12h diff --git a/src/main/resources/messages/messages_es.properties b/src/main/resources/messages/messages_es.properties index dc3680cfd..a4aebbe00 100644 --- a/src/main/resources/messages/messages_es.properties +++ b/src/main/resources/messages/messages_es.properties @@ -37,8 +37,13 @@ nonNumeric=Solo debe contener números duplicateFormSubmission=No se permite el envío de formularios duplicados typeMismatch.date=Fecha inválida typeMismatch.birthDate=Fecha inválida -createFoodOffers= Crear ofertas por plato espec�fico -createNuOffers= Crear ofertas por n�mero de comensales +review= Reseña +reviews= Reseñas +stars= Estrellas +opinion= Opinión +user = Nombre de usuario +createFoodOffers= Crear ofertas por plato específico +createNuOffers= Crear ofertas por número de comensales createSpeedOffers= Crear ofertas por rapidez comiendo createTimeOffers= Crear ofertas por franja horaria init= Inicio del intervalo diff --git a/src/main/webapp/WEB-INF/jsp/error.jsp b/src/main/webapp/WEB-INF/jsp/error.jsp index a1fcc6296..44cc60e51 100644 --- a/src/main/webapp/WEB-INF/jsp/error.jsp +++ b/src/main/webapp/WEB-INF/jsp/error.jsp @@ -4,8 +4,7 @@ - -

Algo malo ha pasado...

+

Algo malo ha pasado...

diff --git a/src/main/webapp/WEB-INF/jsp/login.jsp b/src/main/webapp/WEB-INF/jsp/login.jsp index 7c1b61609..5c2ecff60 100644 --- a/src/main/webapp/WEB-INF/jsp/login.jsp +++ b/src/main/webapp/WEB-INF/jsp/login.jsp @@ -282,26 +282,24 @@
-

El usuario y/o la contraseña son incorrectos

+

El usuario y/o la contraseña son incorrectos

-
-

Nombre de usuario o contraseña inválido

-
+
diff --git a/src/main/webapp/WEB-INF/jsp/offers/nu/nuOffersShow.jsp b/src/main/webapp/WEB-INF/jsp/offers/nu/nuOffersShow.jsp index fbeffec81..ba76384d7 100644 --- a/src/main/webapp/WEB-INF/jsp/offers/nu/nuOffersShow.jsp +++ b/src/main/webapp/WEB-INF/jsp/offers/nu/nuOffersShow.jsp @@ -66,7 +66,7 @@ - + @@ -84,8 +84,8 @@ Desactivar oferta + - diff --git a/src/main/webapp/WEB-INF/jsp/offers/speed/speedOffersShow.jsp b/src/main/webapp/WEB-INF/jsp/offers/speed/speedOffersShow.jsp index a2147de9d..f7065d80c 100644 --- a/src/main/webapp/WEB-INF/jsp/offers/speed/speedOffersShow.jsp +++ b/src/main/webapp/WEB-INF/jsp/offers/speed/speedOffersShow.jsp @@ -67,7 +67,7 @@ Editar oferta - + @@ -85,8 +85,9 @@ Desactivar oferta + - + diff --git a/src/main/webapp/WEB-INF/jsp/offers/time/timeOffersShow.jsp b/src/main/webapp/WEB-INF/jsp/offers/time/timeOffersShow.jsp index fa76b0e56..df891e271 100644 --- a/src/main/webapp/WEB-INF/jsp/offers/time/timeOffersShow.jsp +++ b/src/main/webapp/WEB-INF/jsp/offers/time/timeOffersShow.jsp @@ -56,7 +56,7 @@ Editar oferta - + @@ -75,8 +75,9 @@ + - + + + diff --git a/src/main/webapp/WEB-INF/tags/menu.tag b/src/main/webapp/WEB-INF/tags/menu.tag index df3b03161..40f426e7e 100644 --- a/src/main/webapp/WEB-INF/tags/menu.tag +++ b/src/main/webapp/WEB-INF/tags/menu.tag @@ -34,30 +34,30 @@ - - - Mis ofertas - - - - - - - Valóranos - + + + Mis ofertas + - - + + + + Reseñas + + + + Valóranos + + - - - - diff --git a/src/main/webapp/WEB-INF/tags/textAreaField.tag b/src/main/webapp/WEB-INF/tags/textAreaField.tag new file mode 100644 index 000000000..37d94fbde --- /dev/null +++ b/src/main/webapp/WEB-INF/tags/textAreaField.tag @@ -0,0 +1,28 @@ +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %> +<%@ attribute name="name" required="true" rtexprvalue="true" + description="Name of corresponding property in bean object" %> +<%@ attribute name="label" required="true" rtexprvalue="true" + description="Label appears in red color if input is considered as invalid after submission" %> +<%@ attribute name="placeholder" required="false" rtexprvalue="true" + description="Example for input field" %> + + + + +
+ + +
+ + + + + + + ${status.errorMessage} + +
+
+
diff --git a/src/test/java/org/springframework/cheapy/web/NuOfferControllerTests.java b/src/test/java/org/springframework/cheapy/web/NuOfferControllerTests.java index 7b0b80f77..31ec0d75b 100644 --- a/src/test/java/org/springframework/cheapy/web/NuOfferControllerTests.java +++ b/src/test/java/org/springframework/cheapy/web/NuOfferControllerTests.java @@ -97,11 +97,11 @@ class NuOfferControllerTest { .with(SecurityMockMvcRequestPostProcessors.csrf()) .param("start", "23/12/2021 12:30") .param("end", "23/12/2022 12:30") - .param("gold", "5") + .param("gold", "15") .param("discountGold", "15") .param("silver", "10") .param("discountSilver", "10") - .param("bronze", "15") + .param("bronze", "5") .param("discountBronze", "5")) .andExpect(status().is3xxRedirection()); }