direccion unica añadida

This commit is contained in:
2025-10-28 14:05:22 +01:00
parent cecc0c0ea0
commit f770bd07d6
12 changed files with 357 additions and 241 deletions

View File

@ -3,13 +3,20 @@ package com.imprimelibros.erp.cart;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.server.ResponseStatusException;
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.context.MessageSource;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import com.imprimelibros.erp.common.Utils;
import com.imprimelibros.erp.direcciones.Direccion;
import com.imprimelibros.erp.direcciones.DireccionService;
import com.imprimelibros.erp.i18n.TranslationService;
import java.security.Principal;
import java.util.List;
import java.util.Locale;
import java.util.Map;
@ -17,18 +24,38 @@ import java.util.Map;
@RequestMapping("/cart")
public class CartController {
private final CartService service;
protected final CartService service;
protected DireccionService direccionService;
protected MessageSource messageSource;
protected TranslationService translationService;
public CartController(CartService service) {
public CartController(CartService service, DireccionService direccionService, MessageSource messageSource, TranslationService translationService) {
this.service = service;
this.direccionService = direccionService;
this.messageSource = messageSource;
this.translationService = translationService;
}
/** Vista del carrito */
@GetMapping
public String viewCart(Model model, Principal principal, Locale locale) {
List<String> keys = List.of(
"app.cancelar",
"app.seleccionar",
"cart.shipping.add.title",
"cart.shipping.select-placeholder",
"cart.shipping.new-address",
"cart.shipping.errors.noAddressSelected",
"app.yes",
"app.cancelar");
Map<String, String> translations = translationService.getTranslations(locale, keys);
model.addAttribute("languageBundle", translations);
var items = service.listItems(Utils.currentUserId(principal), locale);
model.addAttribute("items", items);
model.addAttribute("cartId", service.getOrCreateActiveCart(Utils.currentUserId(principal)));
return "imprimelibros/cart/cart"; // crea esta vista si quieres (tabla simple)
}
@ -82,4 +109,15 @@ public class CartController {
service.clear(Utils.currentUserId(principal));
return "redirect:/cart";
}
@GetMapping("/get-address/{id}")
public String getDireccionCard(@PathVariable Long id, Model model, Locale locale) {
Direccion dir = direccionService.findById(id)
.orElseThrow(() -> new ResponseStatusException(HttpStatus.NOT_FOUND));
model.addAttribute("pais", messageSource.getMessage("paises." + dir.getPais().getKeyword(), null,
dir.getPais().getKeyword(), locale));
model.addAttribute("direccion", dir);
return "imprimelibros/direcciones/direccionCard :: direccionCard(direccion=${direccion})";
}
}

View File

@ -72,15 +72,4 @@ public class CheckoutController {
model.addAttribute("items", items);
return "imprimelibros/checkout/checkout"; // crea esta vista si quieres (tabla simple)
}
@GetMapping("/get-address/{id}")
public String getDireccionCard(@PathVariable Long id, Model model, Locale locale) {
Direccion dir = direccionService.findById(id)
.orElseThrow(() -> new ResponseStatusException(HttpStatus.NOT_FOUND));
model.addAttribute("pais", messageSource.getMessage("paises." + dir.getPais().getKeyword(), null,
dir.getPais().getKeyword(), locale));
model.addAttribute("direccion", dir);
return "imprimelibros/direcciones/direccionCard :: direccionCard(direccion=${direccion})";
}
}

View File

@ -91,7 +91,6 @@ public class SecurityConfig {
// Ignora CSRF para tu recurso público (sin Ant/Mvc matchers)
.csrf(csrf -> csrf
.ignoringRequestMatchers(pathStartsWith("/presupuesto/public/")))
// ====== RequestCache: sólo navegaciones HTML reales ======
.requestCache(rc -> {
HttpSessionRequestCache cache = new HttpSessionRequestCache();