diff --git a/src/main/java/com/outfitlab/project/domain/interfaces/repositories/GarmentRepository.java b/src/main/java/com/outfitlab/project/domain/interfaces/repositories/GarmentRepository.java index 4e9726c..3e11237 100644 --- a/src/main/java/com/outfitlab/project/domain/interfaces/repositories/GarmentRepository.java +++ b/src/main/java/com/outfitlab/project/domain/interfaces/repositories/GarmentRepository.java @@ -25,14 +25,15 @@ void createGarment( String brandCode, String imageUrl, String climaNombre, - List ocasionesNombres + List ocasionesNombres, + String genero ); @Transactional void deleteGarment(String garmentCode); @Transactional - void updateGarment(String name, String type, String colorNombre, String event, String garmentCode, String imageUrl, String newGarmentCode, String climaNombre, List ocasionesNombres); + void updateGarment(String name, String type, String colorNombre, String event, String garmentCode, String imageUrl, String newGarmentCode, String climaNombre, List ocasionesNombres, String genero); List findByClimaAndOcasion(String climaNombre, String ocasionNombre); diff --git a/src/main/java/com/outfitlab/project/domain/model/PrendaModel.java b/src/main/java/com/outfitlab/project/domain/model/PrendaModel.java index ca44fe7..79a7e93 100644 --- a/src/main/java/com/outfitlab/project/domain/model/PrendaModel.java +++ b/src/main/java/com/outfitlab/project/domain/model/PrendaModel.java @@ -12,6 +12,7 @@ public class PrendaModel { private ColorModel color; private ClimaModel climaAdecuado; private Set ocasiones; + private String genero; public PrendaModel() {} @@ -34,6 +35,18 @@ public PrendaModel(Long id, String nombre, String imagenUrl, BrandModel marca) { this.marca = marca; } + public PrendaModel(String nombre, BrandModel marcaModel, String tipo, String imagenUrl, String garmentCode, ColorModel colorModel, ClimaModel climaModel, Set ocasionesModels, String genero) { + this.nombre = nombre; + this.marca = marcaModel; + this.tipo = tipo; + this.imagenUrl = imagenUrl; + this.garmentCode = garmentCode; + this.color = colorModel; + this.climaAdecuado = climaModel; + this.ocasiones = ocasionesModels; + this.genero = genero; + } + public Long getId() {return id;} public void setId(Long id) {this.id = id;} @@ -100,4 +113,12 @@ public Set getOcasiones() { public void setOcasiones(Set ocasiones) { this.ocasiones = ocasiones; } + + public String getGenero() { + return genero; + } + + public void setGenero(String genero) { + this.genero = genero; + } } \ No newline at end of file diff --git a/src/main/java/com/outfitlab/project/domain/model/dto/GarmentDTO.java b/src/main/java/com/outfitlab/project/domain/model/dto/GarmentDTO.java index ee1ad12..2cc1aa9 100644 --- a/src/main/java/com/outfitlab/project/domain/model/dto/GarmentDTO.java +++ b/src/main/java/com/outfitlab/project/domain/model/dto/GarmentDTO.java @@ -11,6 +11,7 @@ public class GarmentDTO { private String evento; private String color; private String clima; + private String genero; public GarmentDTO(String nombre, String tipo, String imagenUrl, String garmentCode, String marcaNombre, String color, String clima) { this.nombre = nombre; @@ -22,10 +23,29 @@ public GarmentDTO(String nombre, String tipo, String imagenUrl, String garmentCo this.clima = clima; } + public GarmentDTO(String nombre, String tipo, String imagenUrl, String garmentCode, String marcaNombre, String color, String clima, String genero) { + this.nombre = nombre; + this.tipo = tipo; + this.imagenUrl = imagenUrl; + this.garmentCode = garmentCode; + this.marcaNombre = marcaNombre; + this.color = color; + this.clima = clima; + this.genero = genero; + } + public String getGarmentCode() { return garmentCode; } + public String getGenero() { + return genero; + } + + public void setGenero(String genero) { + this.genero = genero; + } + public void setGarmentCode(String garmentCode) { this.garmentCode = garmentCode; } @@ -90,7 +110,23 @@ public static GarmentDTO convertModelToDTO(PrendaModel prendaModel) { prendaModel.getGarmentCode(), prendaModel.getMarca().getNombre(), prendaModel.getColor().getNombre(), - prendaModel.getClimaAdecuado().getNombre() + prendaModel.getClimaAdecuado().getNombre(), + prendaModel.getGenero() ); } + + @Override + public String toString() { + return "GarmentDTO{" + + "nombre='" + nombre + '\'' + + ", tipo='" + tipo + '\'' + + ", imagenUrl='" + imagenUrl + '\'' + + ", garmentCode='" + garmentCode + '\'' + + ", marcaNombre='" + marcaNombre + '\'' + + ", evento='" + evento + '\'' + + ", color='" + color + '\'' + + ", clima='" + clima + '\'' + + ", genero='" + genero + '\'' + + '}'; + } } diff --git a/src/main/java/com/outfitlab/project/domain/useCases/garment/CreateGarment.java b/src/main/java/com/outfitlab/project/domain/useCases/garment/CreateGarment.java index 521da34..fe95dca 100644 --- a/src/main/java/com/outfitlab/project/domain/useCases/garment/CreateGarment.java +++ b/src/main/java/com/outfitlab/project/domain/useCases/garment/CreateGarment.java @@ -12,7 +12,7 @@ public CreateGarment(GarmentRepository garmentRepository) { this.garmentRepository = garmentRepository; } - public void execute(String name, String type, String color, String brandCode, String imageUrl, String climaNombre, List ocasionesNombres) { + public void execute(String name, String type, String color, String brandCode, String imageUrl, String climaNombre, List ocasionesNombres, String genero) { this.garmentRepository.createGarment( name, formatGarmentCode(name), @@ -21,7 +21,8 @@ public void execute(String name, String type, String color, String brandCode, St brandCode, imageUrl, climaNombre, - ocasionesNombres + ocasionesNombres, + genero ); } diff --git a/src/main/java/com/outfitlab/project/domain/useCases/garment/UpdateGarment.java b/src/main/java/com/outfitlab/project/domain/useCases/garment/UpdateGarment.java index b1d4f79..4d1d960 100644 --- a/src/main/java/com/outfitlab/project/domain/useCases/garment/UpdateGarment.java +++ b/src/main/java/com/outfitlab/project/domain/useCases/garment/UpdateGarment.java @@ -18,10 +18,10 @@ public UpdateGarment(GarmentRepository garmentRepository, BrandRepository brandR this.brandRepository = brandRepository; } - public void execute(String name, String type, String color, String event, String garmentCode, String brandCode, String imageUrl, String clima, List ocasionesNombres) { + public void execute(String name, String type, String color, String event, String garmentCode, String brandCode, String imageUrl, String clima, List ocasionesNombres, String genero) { checkIfBrandExists(brandCode); checkIfCanUpdateGarment(this.garmentRepository.findByGarmentCode(garmentCode), brandCode); - this.garmentRepository.updateGarment(name, type, color, event, garmentCode, imageUrl, this.formatGarmentCode(name), clima, ocasionesNombres); + this.garmentRepository.updateGarment(name, type, color, event, garmentCode, imageUrl, this.formatGarmentCode(name), clima, ocasionesNombres, genero); } private static void checkIfCanUpdateGarment(PrendaModel garment, String brandCode) { diff --git a/src/main/java/com/outfitlab/project/domain/useCases/user/LoginUser.java b/src/main/java/com/outfitlab/project/domain/useCases/user/LoginUser.java index 08fc844..80452d3 100644 --- a/src/main/java/com/outfitlab/project/domain/useCases/user/LoginUser.java +++ b/src/main/java/com/outfitlab/project/domain/useCases/user/LoginUser.java @@ -46,12 +46,12 @@ public ResponseEntity execute(LoginDTO loginDTO) { loginDTO.getEmail(), loginDTO.getPassword())); } catch (AuthenticationException ex) { - throw new UserNotFoundException("Email o contraseña incorrecta. Vuelva a intentarlo."); + throw new UserNotFoundException("Email o contraseña incorrecta, vuelva a intentarlo."); } UserEntity userEntity = userJpaRepository.findByEmail(loginDTO.getEmail()); if (!userEntity.isVerified()) { - throw new UserNotFoundException("La cuenta no ha sido verificada. Revisa tu correo electrónico."); + throw new UserNotFoundException("La cuenta aún no ha sido verificada. Puedes consultar el estado de la gesión en soporte@outfitlab.com."); } var user = userJpaRepository.getByEmail(loginDTO.getEmail()) diff --git a/src/main/java/com/outfitlab/project/infrastructure/model/PrendaEntity.java b/src/main/java/com/outfitlab/project/infrastructure/model/PrendaEntity.java index ce1f2dd..8309102 100644 --- a/src/main/java/com/outfitlab/project/infrastructure/model/PrendaEntity.java +++ b/src/main/java/com/outfitlab/project/infrastructure/model/PrendaEntity.java @@ -55,6 +55,8 @@ public class PrendaEntity { ) private Set ocasiones; + private String genero = "hombre"; + public PrendaEntity(){} public PrendaEntity(String nombre, MarcaEntity marca, String tipo, String imagenUrl, String garmentCode, ColorEntity color, ClimaEntity climaAdecuado, Set ocasiones) { @@ -86,6 +88,18 @@ public PrendaEntity(String name, MarcaEntity brandEntity, String type, String im this.ocasiones = ocasionesEntities; } + public PrendaEntity(String name, MarcaEntity brandEntity, String type, String imageUrl, String garmentCode, ColorEntity colorEntity, ClimaEntity climaEntity, Set ocasionesEntities, String genero) { + this.nombre = name; + this.marca = brandEntity; + this.tipo = type; + this.imagenUrl = imageUrl; + this.garmentCode = garmentCode; + this.color = colorEntity; + this.climaAdecuado = climaEntity; + this.ocasiones = ocasionesEntities; + this.genero = genero; + } + public static PrendaModel convertToModel(PrendaEntity prendaEntity) { BrandModel marcaModel = MarcaEntity.convertToModelWithoutPrendas(prendaEntity.getMarca()); @@ -117,7 +131,8 @@ public static PrendaModel convertToModel(PrendaEntity prendaEntity) { prendaEntity.getGarmentCode(), colorModel, climaModel, - ocasionesModels + ocasionesModels, + prendaEntity.getGenero() ); model.setId(prendaEntity.getId()); diff --git a/src/main/java/com/outfitlab/project/infrastructure/model/SubscriptionEntity.java b/src/main/java/com/outfitlab/project/infrastructure/model/SubscriptionEntity.java index 408d182..07be44c 100644 --- a/src/main/java/com/outfitlab/project/infrastructure/model/SubscriptionEntity.java +++ b/src/main/java/com/outfitlab/project/infrastructure/model/SubscriptionEntity.java @@ -35,7 +35,7 @@ public class SubscriptionEntity { private boolean isPopular; - @Column(name = "plan_type", nullable = false, columnDefinition = "VARCHAR(10) DEFAULT 'USER'") + @Column(name = "plan_type", nullable = false) private String planType = "USER"; @Column(name = "max_garments") diff --git a/src/main/java/com/outfitlab/project/infrastructure/repositories/GarmentRepositoryImpl.java b/src/main/java/com/outfitlab/project/infrastructure/repositories/GarmentRepositoryImpl.java index b69364c..cda1ca7 100644 --- a/src/main/java/com/outfitlab/project/infrastructure/repositories/GarmentRepositoryImpl.java +++ b/src/main/java/com/outfitlab/project/infrastructure/repositories/GarmentRepositoryImpl.java @@ -20,7 +20,7 @@ public class GarmentRepositoryImpl implements GarmentRepository { - private final int PAGE_SIZE = 10; + private final int PAGE_SIZE = 20; private final GarmentJpaRepository garmentJpaRepository; private final BrandJpaRepository brandJpaRepository; private final ColorJpaRepository colorJpaRepository; @@ -79,7 +79,8 @@ public void createGarment( String brandCode, String imageUrl, String climaNombre, - List ocasionesNombres + List ocasionesNombres, + String genero ) { MarcaEntity brandEntity = this.brandJpaRepository.findByCodigoMarca(brandCode); @@ -104,7 +105,8 @@ public void createGarment( garmentCode, colorEntity, climaEntity, - ocasionesEntities + ocasionesEntities, + genero )); } @@ -114,7 +116,7 @@ public void deleteGarment(String garmentCode) { } @Override - public void updateGarment(String name, String type, String colorNombre, String event, String garmentCode, String imageUrl, String newGarmentCode, String climaNombre, List ocasionesNombres) { + public void updateGarment(String name, String type, String colorNombre, String event, String garmentCode, String imageUrl, String newGarmentCode, String climaNombre, List ocasionesNombres, String genero) { PrendaEntity garmentEntity = this.garmentJpaRepository.findByGarmentCode(garmentCode); if (garmentEntity == null) throw new GarmentNotFoundException("No encontramos la prenda: " + garmentCode); ColorEntity colorEntity = this.colorJpaRepository.findColorEntityByNombre(colorNombre) @@ -133,6 +135,7 @@ public void updateGarment(String name, String type, String colorNombre, String e garmentEntity.setGarmentCode(newGarmentCode); garmentEntity.setOcasiones(ocasionesEntities); garmentEntity.setClimaAdecuado(climaEntity); + garmentEntity.setGenero(genero.toLowerCase()); if (!imageUrl.isEmpty()) garmentEntity.setImagenUrl(imageUrl); // la voy a actualizar solo si vino algo, si vino empty es pq no le actualizaron la img diff --git a/src/main/java/com/outfitlab/project/presentation/GarmentController.java b/src/main/java/com/outfitlab/project/presentation/GarmentController.java index 01e1d37..4a75e0d 100644 --- a/src/main/java/com/outfitlab/project/presentation/GarmentController.java +++ b/src/main/java/com/outfitlab/project/presentation/GarmentController.java @@ -133,7 +133,8 @@ public ResponseEntity newGarment(@ModelAttribute GarmentRequestDTO request, @ brandCode, saveImageAndGetUrl(request.getImagen(), "garment_images"), request.getClimaNombre(), - request.getOcasionesNombres() + request.getOcasionesNombres(), + request.getGenero() ); return ResponseEntity.ok("Prenda creada correctamente."); @@ -162,7 +163,8 @@ public ResponseEntity updateGarment(@PathVariable String garmentCode, @ModelA brandCode, checkIfImageIsEmptyToSaveAndGetUrl(request), request.getClimaNombre(), - request.getOcasionesNombres() + request.getOcasionesNombres(), + request.getGenero() ); deleteImage(oldImageUrl); diff --git a/src/main/java/com/outfitlab/project/presentation/dto/GarmentRequestDTO.java b/src/main/java/com/outfitlab/project/presentation/dto/GarmentRequestDTO.java index bd76dd2..61ef85a 100644 --- a/src/main/java/com/outfitlab/project/presentation/dto/GarmentRequestDTO.java +++ b/src/main/java/com/outfitlab/project/presentation/dto/GarmentRequestDTO.java @@ -14,6 +14,7 @@ public class GarmentRequestDTO { private String climaNombre; private List ocasionesNombres; private String codigoMarca; + private String genero; public String getNombre() { return nombre; @@ -78,6 +79,14 @@ public void setCodigoMarca(String codigoMarca) { this.codigoMarca = codigoMarca; } + public String getGenero() { + return genero; + } + + public void setGenero(String genero) { + this.genero = genero; + } + @Override public String toString() { return "GarmentRequestDTO{" + diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 3166a31..88c13b6 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -13,6 +13,7 @@ spring.jpa.show-sql=true spring.jpa.properties.hibernate.format_sql=true # == julian -> tripo.api.key=tsk_IDtE_QEJ0ZCwQJDvy7HEotADi6auStMdj5dka5Z3LpV +# == tripo.api.key=tsk_IBWdYCmaC-WBnLQBGu0BPe2fNbGoWt2gdB4I8Lrh0Cn tripo.api.key=${TRIPO_API_KEY:tsk_U_8I8sOhJ_ZtIu382BfLBPZcnrT7fNpqRsBQnwGqTLZ} # ===== Development Configuration =====