Skip to content
Extraits de code Groupes Projets
Valider f871e670 rédigé par Mohamed Lemine BAILLAHI's avatar Mohamed Lemine BAILLAHI
Parcourir les fichiers

Merge branch 'feature/MYD-608' into 'develop'

Duplicate Product (variable and simple)

Closes MYD-608

See merge request mydressin/mydressin-stock-management-service!83
Aucune requête de fusion associée trouvée
## [1.0.30-RELEASE]
### Added
- add endpoint to duplicate product (simple and variable)
### Changed
- Changes in existing functionality.
### Deprecated
- Soon-to-be removed features.
### Removed
- Features that have been removed.
### Fixed
- Any bug fixes.
## [1.0.29-RELEASE]
### Added
- add product details with variation details
......
......@@ -55,6 +55,7 @@ public class Paths {
//
public static final String API_PRODUCT_AND_VARIATION = "/ProductWithVariations";
public static final String DUPLICATE_PRODUCT = "/duplicate/{id}";
}
......@@ -229,4 +229,18 @@ public class ProductController {
return ResponseEntity.ok(products);
}
@PostMapping("/duplicate/{id}")
public ResponseEntity<ProductDTO> duplicateProduct(@PathVariable Long id) {
try {
ProductDTO duplicatedProduct = productService.duplicateProduct(id);
return ResponseEntity.status(HttpStatus.CREATED).body(duplicatedProduct);
} catch (ResourceNotFoundException e) {
return ResponseEntity.status(HttpStatus.NOT_FOUND)
.body(null);
} catch (Exception e) {
logger.error("Error duplicating product with ID {}: ", id, e);
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
.body(null);
}
}
}
\ No newline at end of file
......@@ -13,4 +13,18 @@ public class VariationAttributeDTO {
private Long termLabelId;
private Long termImageId;
private Long termChoixId;
// Rendre le constructeur public
public VariationAttributeDTO(Long id, Long attributeId, Long termColorId, Long termLabelId, Long termImageId, Long termChoixId) {
this.id = id;
this.attributeId = attributeId;
this.termColorId = termColorId;
this.termLabelId = termLabelId;
this.termImageId = termImageId;
this.termChoixId = termChoixId;
}
public VariationAttributeDTO() {
}
}
......@@ -53,4 +53,6 @@ public interface ProductService {
List<ProductSearchResult> searchProductByName(String name);
Page<CustomProductRequest> getProductsByName(String name, Pageable pageable);
ProductDTO duplicateProduct(Long id);
}
......@@ -11,6 +11,7 @@ import com.marketingconfort.mydressin.mappers.*;
import com.marketingconfort.mydressin.mappers.CompleteProductDetails.CompleteProductDetailsMapper;
import com.marketingconfort.mydressin.repositories.*;
import com.marketingconfort.mydressin.services.ProductService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.dao.DataIntegrityViolationException;
import org.springframework.data.domain.Page;
......@@ -765,6 +766,55 @@ public class ProductServiceImpl implements ProductService {
.build());
}
@Override
@Transactional
public ProductDTO duplicateProduct(Long id) {
Product existingProduct = productRepository.findById(id)
.orElseThrow(() -> new ResourceNotFoundException("Product not found with id: " + id));
ProductDTO productDTO = productMapper.toDto(existingProduct);
productDTO.setId(null); // Reset ID for new product
productDTO.setName(productDTO.getName() + " (Copy)");
productDTO.setNameUri(generateUniqueUri(productDTO.getName()));
// Create new instances of collections to avoid shared references
productDTO.setImagesIDs(new HashSet<>(productDTO.getImagesIDs()));
productDTO.setImagesPaths(new HashSet<>(productDTO.getImagesPaths()));
productDTO.setCategoryIds(new HashSet<>(productDTO.getCategoryIds()));
productDTO.setTagIds(new HashSet<>(productDTO.getTagIds()));
productDTO.setVariations(productDTO.getVariations().stream()
.map(variationDTO -> {
VariationDTO newVariation = new VariationDTO();
BeanUtils.copyProperties(variationDTO, newVariation);
newVariation.setId(null); // Reset ID for new variation
// Handle VariationAttributes
newVariation.setVariationAttributes(variationDTO.getVariationAttributes().stream()
.map(attributeDTO -> {
VariationAttributeDTO newAttribute = new VariationAttributeDTO();
newAttribute.setId(null); // Reset ID for new attribute
newAttribute.setAttributeId(attributeDTO.getAttributeId());
newAttribute.setTermColorId(attributeDTO.getTermColorId());
newAttribute.setTermLabelId(attributeDTO.getTermLabelId());
newAttribute.setTermImageId(attributeDTO.getTermImageId());
newAttribute.setTermChoixId(attributeDTO.getTermChoixId());
return newAttribute;
})
.collect(Collectors.toSet()));
return newVariation;
})
.collect(Collectors.toSet()));
Product newProduct = productMapper.toEntity(productDTO);
Product savedProduct = productRepository.save(newProduct);
return productMapper.toDto(savedProduct);
}
......
trace: false
server:
port: 8083
jetty:
idle-timeout: 60000
spring:
application:
name: mydressin-stock-management-service
......@@ -48,4 +49,4 @@ sale-order:
logging:
level:
root=TRACE:
\ No newline at end of file
root=TRACE:
0% ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter