From bea9ba2a591408a302a1013ba33facb4777909ad Mon Sep 17 00:00:00 2001 From: buuwie Date: Mon, 4 Mar 2024 17:33:52 +0700 Subject: [PATCH] changes on db initializing, add pipevalidation for status --- cartier_catalog1.csv | 40 ++++++++++++++++++++++++ package-lock.json | 2 +- package.json | 2 +- src/csv/csv.controller.ts | 13 +++++--- src/csv/csv.service.ts | 35 +++++++++++++++------ src/dto/createProduct.dto.ts | 17 ++++++++-- src/dto/editProduct.dto.ts | 22 +++++++++++++ src/entity/csv.entity.ts | 24 ++++++++++++-- src/productStatusValidation.pipe.ts | 22 +++++++++++++ uploads/2878a4961cf985939bb451259c5e84bf | 26 +++++++++++++++ uploads/99d1a675242916ac0df3d1dc7a61669d | 26 +++++++++++++++ uploads/a133887a374d6f28990de27f74f6980c | 40 ++++++++++++++++++++++++ 12 files changed, 249 insertions(+), 20 deletions(-) create mode 100644 cartier_catalog1.csv create mode 100644 src/dto/editProduct.dto.ts create mode 100644 src/productStatusValidation.pipe.ts create mode 100644 uploads/2878a4961cf985939bb451259c5e84bf create mode 100644 uploads/99d1a675242916ac0df3d1dc7a61669d create mode 100644 uploads/a133887a374d6f28990de27f74f6980c diff --git a/cartier_catalog1.csv b/cartier_catalog1.csv new file mode 100644 index 0000000..5d08614 --- /dev/null +++ b/cartier_catalog1.csv @@ -0,0 +1,40 @@ +serial,name,category,size,description,status,manufactureDate,warranty +B4084600,Love ring,rings,Pair/Single,"Love ring, 18K yellow gold. Width: 5.5mm.",Available,19-02-2024,Lorem ipsum +B4084900,Love ring,rings,Single,"Love ring, 950/1000 platinum. Width: 5.5mm.",Available,19-02-2024,Lorem ipsum +B4084800,Love ring,rings,Single,"Love ring, 18K rose gold. Width: 5.5mm.",Available,19-02-2024,Lorem ipsum +B4084700,Love ring,rings,Pair/Single,"Love ring, 18K white gold. Width: 5.5mm.",Available,19-02-2024,Lorem ipsum +B4085000,Love wedding band,rings,Pair,"Love wedding band, 18K yellow gold. Width: 3.6mm.",Out of stock,19-02-2024,Lorem ipsum +B4085200,Love wedding band,rings,Pair,"Love wedding band, 18K rose gold. Width: 3.6mm.",Available,19-02-2024,Lorem ipsum +B4085100,Love wedding band,rings,Pair/Single,"Love wedding band, 18K white gold. Width: 3.6mm.",Out of stock,19-02-2024,Lorem ipsum +B4085300,Love wedding band,rings,Pair/Single,"Love wedding band, 950/1000 platinum. Width: 3.6mm.",Available,19-02-2024,Lorem ipsum +B4032400,"Love ring, 3 diamonds",rings,Single,"Love ring, 18K yellow gold, set with 3 brilliant-cut diamonds totaling 0.22 carats. Width: 5.5mm.",Out of stock,19-02-2024,Lorem ipsum +B6044017,"Amulette de Cartier bracelet, XS model",bracelets,Single,"Amulette de Cartier bracelet, XS model, 18K yellow gold, set with a brilliant-cut diamond of 0.02 carats, white mother-of-pearl. Diameter of motif: 12 mm.",Available,19-02-2024,Lorem ipsum +B6047117,"Amulette de Cartier bracelet, XS model",bracelets,Pair/Single,"Amulette de Cartier bracelet, XS model, 18K pink gold, malachite, set with a brilliant-cut diamond of 0.02 carats. Diameter of motif: 12 mm.",Out of stock,19-02-2024,Lorem ipsum +B6044117,"Amulette de Cartier bracelet, XS model",bracelets,Single,"Amulette de Cartier bracelet, XS model, 18K pink gold, set with a brilliant-cut diamond of 0.02 carats, onyx. Diameter of motif: 12 mm.",Available,19-02-2024,Lorem ipsum +B6050717,"Amulette de Cartier bracelet, XS model",bracelets,Pair/Single,"Amulette de Cartier bracelet, extra-small model, 18K pink gold, onyx, white mother-of-pearl, set with 2 brilliant-cut diamonds totaling 0.05 carats. Diameter of the motifs: 12 mm.",Out of stock,19-02-2024,Lorem ipsum +B6035517,Love bracelet,bracelets,Single,"Love bracelet, 18K yellow gold. Sold with a screwdriver. Width: 6.1mm.",Available,19-02-2024,Lorem ipsum +N6036917,"Love bracelet, diamond-paved",bracelets,Pair/Single,"Love bracelet, 18K pink gold, set with 204 brilliant-cut diamonds totaling 1.99 carats.",Available,19-02-2024,Lorem ipsum +B6035617,Love bracelet,bracelets,Pair/Single,"Love bracelet, 18K rose gold. Sold with a screwdriver. Width: 6.1mm.",Available,19-02-2024,Lorem ipsum +B6035417,Love bracelet,bracelets,Pair/Single,"Love bracelet, 18K white gold. Sold with a screwdriver. Width: 6.1mm.",Out of stock,19-02-2024,Lorem ipsum +B6047517,"Love bracelet, SM",bracelets,Single,"Love bracelet, small model, 18K yellow gold. Sold with a screwdriver. Width: 3.65mm.",Available,19-02-2024,Lorem ipsum +B6047317,"Love bracelet, SM",bracelets,Pair/Single,"Love bracelet, small model, 18K rose gold. Sold with a screwdriver. Width: 3.65mm.",Out of stock,19-02-2024,Lorem ipsum +B3047100,"Amulette de Cartier necklace, XS model",necklaces,Single,"Amulette de Cartier necklace, XS model, 18K yellow gold, set with a brilliant-cut diamond of 0.02 carats, white mother-of-pearl. Diameter of motif: 12 mm. Adjustable chain: 38-41 cm.",Available,19-02-2024,Lorem ipsum +B3047200,"Amulette de Cartier necklace, XS model",necklaces,Single,"Amulette de Cartier necklace, XS model, 18K pink gold, onyx, set with a brilliant-cut diamond of 0.02 carats. Diameter of motif: 12 mm. Adjustable chain: 38-41 cm.",Out of stock,19-02-2024,Lorem ipsum +B7224550,"Amulette de Cartier necklace, XS model",necklaces,Single,"Amulette de Cartier necklace, XS model, 18K pink gold, malachite, set with a brilliant-cut diamond of 0.02 carats. Diameter of motif: 12 mm. Adjustable chain: 38-41 cm.",Available,19-02-2024,Lorem ipsum +B7224569,"Amulette de Cartier necklace, XS model",necklaces,Single,"Amulette de Cartier necklace, extra-small model, 18K pink gold, onyx, white mother-of-pearl, set with 2 brilliant-cut diamonds totaling 0.05 carats. Diameter of the motifs: 12 mm. Adjustable chain.",Out of stock,19-02-2024,Lorem ipsum +B7224558,"Amulette de Cartier necklace, small model",necklaces,Single,"Amulette de Cartier necklace, small model, 18K pink gold, set with a brilliant-cut diamond of 0.09 carats, onyx.",Available,19-02-2024,Lorem ipsum +B7224521,"Amulette de Cartier necklace, small model",necklaces,Single,"Amulette de Cartier necklace, small model, 18K yellow gold, lapis lazuli, set with a brilliant-cut diamond of 0.09 carats. Diameter of motif: 17 mm. Chain: 60 cm.",Available,19-02-2024,Lorem ipsum +B7224518,"Amulette de Cartier necklace, XS model",necklaces,Single,"Amulette de Cartier necklace, XS model, 18K pink gold, carnelian, set with a brilliant-cut diamond of 0.02 carats. Diameter of motif: 12 mm. Adjustable chain: 38-41 cm.",Available,19-02-2024,Lorem ipsum +B3153108,"Amulette de Cartier necklace, XS model",necklaces,Single,"Amulette de Cartier necklace, XS model, 18K yellow gold, lapis lazuli, set with a brilliant-cut diamond of 0.02 carats. Diameter of motif: 12 mm. Adjustable chain: 38-41 cm.",Out of stock,19-02-2024,Lorem ipsum +B7224520,"Amulette de Cartier necklace, XS model",necklaces,Single,"Amulette de Cartier necklace, XS model, 18K yellow gold, chrysoprase, set with a brilliant-cut diamond of 0.02 carats. Diameter of motif: 12 mm. Adjustable chain: 38-41 cm.",Available,19-02-2024,Lorem ipsum +B7224542,"Amulette de Cartier necklace, small model",necklaces,Single,"Amulette de Cartier necklace, small model, 18K pink gold, malachite, set with a brilliant-cut diamond of 0.09 carats. Diameter of motif: 17 mm. Chain: 60 cm.",Out of stock,19-02-2024,Lorem ipsum +B8301238,"Amulette de Cartier earrings, XS model",earrings,Pair/Single,"Amulette de Cartier earrings, XS model, 18K yellow gold, white mother-of-pearl, set with 2 brilliant-cut diamonds totaling 0.05 carats. Diameter of motifs: 12 mm.",Available,19-02-2024,Lorem ipsum +B8301230,"Amulette de Cartier earrings, XS model",earrings,Pair/Single,"Amulette de Cartier earrings, XS model, 18K pink gold, onyx, set with 4 brilliant-cut diamonds totaling 0.14 carats. Diameter of motifs: 12 mm.",Out of stock,19-02-2024,Lorem ipsum +B8301239,"Amulette de Cartier earrings, XS model",earrings,Pair/Single,"Amulette de Cartier earrings, XS model, 18K pink gold, onyx, set with 2 brilliant-cut diamonds totaling 0.05 carats. Diameter of motifs: 12 mm.",Available,19-02-2024,Lorem ipsum +B8301229,"Amulette de Cartier earrings, XS model",earrings,Pair/Single,"Amulette de Cartier earrings, XS model, 18K yellow gold, white mother-of-pearl, set with 4 brilliant-cut diamonds totaling 0.14 carats. Diameter of motifs: 12 mm.",Available,19-02-2024,Lorem ipsum +B8301251,"Amulette de Cartier earrings, XS model",earrings,Pair/Single,"Amulette de Cartier earrings, extra-small model, 18K pink gold, onyx, white mother-of-pearl, each set with 2 brilliant-cut diamond totaling 0.11 carat. Motif diameter: 12 mm.",Out of stock,19-02-2024,Lorem ipsum +B8301421,Love single earring,earrings,Pair/Single,"Love single earring, 18K yellow gold. Diameter 6 mm. Sold individually.",Available,19-02-2024,Lorem ipsum +B8301422,Love single earring,earrings,Pair/Single,"Love single earring, 18K pink gold. Diameter 12mm. Sold individually.",Available,19-02-2024,Lorem ipsum +B8301254,Love earrings,earrings,Pair/Single,"Love earrings, 18K rose gold. Inner diameter 7.2mm.",Out of stock,19-02-2024,Lorem ipsum +B8301255,Love earrings,earrings,Pair/Single,"Love earrings, 18K yellow gold. Inner diameter 7.2mm.",Available,19-02-2024,Lorem ipsum +B8301256,Love earrings,earrings,Pair/Single,"Love earrings, 18K white gold. Inner diameter 7.2mm.",Available,19-02-2024,Lorem ipsum diff --git a/package-lock.json b/package-lock.json index b77225b..f46f0ff 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,5 +1,5 @@ { - "name": "csv-import", + "name": "csvimport", "version": "0.0.1", "lockfileVersion": 3, "requires": true, diff --git a/package.json b/package.json index 8356d52..a9e799e 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "csv-import", + "name": "csvimport", "version": "0.0.1", "description": "", "author": "", diff --git a/src/csv/csv.controller.ts b/src/csv/csv.controller.ts index 317bf45..232da27 100644 --- a/src/csv/csv.controller.ts +++ b/src/csv/csv.controller.ts @@ -5,6 +5,9 @@ import * as csv from 'csv-parser'; import { CsvService } from './csv.service'; import { CreateProductDto } from 'src/dto/createProduct.dto'; import { AuthGuard } from '@nestjs/passport'; +import { productStatus } from 'src/entity/csv.entity'; +import { EditProductDto } from 'src/dto/editProduct.dto'; +import { ProductStatusValidationPipe } from 'src/productStatusValidation.pipe'; @Controller('file') @@ -34,17 +37,17 @@ export class CsvController { return this.csvService.getOneData(id); } - @Post('data/create') + @Post('data') createProduct (@Body(ValidationPipe) data: CreateProductDto) { return this.csvService.createData(data); } - @Patch('data/edit/:id') - updateProduct (@Param('id') id: number, @Body('name') name: string, @Body('sku') sku: string, @Body('price') price: string) { - return this.csvService.editData(id, name, sku, price); + @Patch('data/:id') + updateProduct (@Param('id') id: number, @Body(ValidationPipe) data: EditProductDto, @Body("status", ProductStatusValidationPipe) status: productStatus) { + return this.csvService.editData(id, data, status); } - @Delete('data/delete/:id') + @Delete('data/:id') deleteProduct(@Param('id') id: number) { return this.csvService.deleteData(id); } diff --git a/src/csv/csv.service.ts b/src/csv/csv.service.ts index 9653f9f..eb38248 100644 --- a/src/csv/csv.service.ts +++ b/src/csv/csv.service.ts @@ -3,7 +3,8 @@ import { InjectRepository } from '@nestjs/typeorm'; import * as csv from 'csv-parser'; import { createReadStream } from 'fs'; import { CreateProductDto } from 'src/dto/createProduct.dto'; -import { CsvEntity } from 'src/entity/csv.entity'; +import { EditProductDto } from 'src/dto/editProduct.dto'; +import { CsvEntity, productStatus } from 'src/entity/csv.entity'; import { UserEntity } from 'src/entity/user.entity'; import { Repository } from 'typeorm'; @@ -20,8 +21,13 @@ export class CsvService { for (const result of results) { const csvData = new CsvEntity(); csvData.name = result.name; - csvData.sku = result.sku; - csvData.price = result.price; + csvData.serial = result.serial; + csvData.category = result.category; + csvData.size = result.size; + csvData.description = result.description; + csvData.status = result.status; + csvData.manufactureDate = result.manufactureDate; + csvData.warranty = result.warranty; await this.repo.save(csvData); } console.log(results); @@ -39,21 +45,32 @@ export class CsvService { async createData (CreateProductDto: CreateProductDto) { const product = new CsvEntity(); - const { name, sku, price} = CreateProductDto; + const { name, serial, category, size, description, manufactureDate, warranty } = CreateProductDto; product.name = name; - product.sku = sku; - product.price = price; + product.serial = serial; + product.category = category; + product.size = size; + product.description = description; + product.status = productStatus.AVAILABLE; + product.manufactureDate = new Date().toLocaleString(); + product.warranty = warranty; this.repo.create(product); return await this.repo.save(product); } - async editData (id: number, name: string, sku: string, price: string) { + async editData (id: number, EditProductDto: EditProductDto, status: productStatus) { const product = await this.repo.findOne({where: {id: id}}); + const { name, serial, category, size, description, manufactureDate, warranty } = EditProductDto; if (product) { product.name = name; - product.sku = sku; - product.price = price; + product.serial = serial; + product.category = category; + product.size = size; + product.description = description; + product.manufactureDate = manufactureDate; + product.status = status; + product.warranty = warranty; return this.repo.save(product); } else throw new InternalServerErrorException('Product not found'); diff --git a/src/dto/createProduct.dto.ts b/src/dto/createProduct.dto.ts index 969c769..c29e164 100644 --- a/src/dto/createProduct.dto.ts +++ b/src/dto/createProduct.dto.ts @@ -1,4 +1,5 @@ import { IsNotEmpty } from "class-validator" +import { productStatus } from "src/entity/csv.entity"; export class CreateProductDto { @@ -6,8 +7,20 @@ export class CreateProductDto { name: string; @IsNotEmpty() - sku: string; + serial: string; @IsNotEmpty() - price: string; + category: string; + + @IsNotEmpty() + size: string; + + @IsNotEmpty() + description: string; + + @IsNotEmpty() + manufactureDate: string; + + @IsNotEmpty() + warranty: string; } \ No newline at end of file diff --git a/src/dto/editProduct.dto.ts b/src/dto/editProduct.dto.ts new file mode 100644 index 0000000..6239575 --- /dev/null +++ b/src/dto/editProduct.dto.ts @@ -0,0 +1,22 @@ +import { IsNotEmpty } from "class-validator" +import { productStatus } from "src/entity/csv.entity"; + +export class EditProductDto { + + name: string; + + serial: string; + + category: string; + + size: string; + + description: string; + + @IsNotEmpty() + status: productStatus; + + manufactureDate: string; + + warranty: string; +} \ No newline at end of file diff --git a/src/entity/csv.entity.ts b/src/entity/csv.entity.ts index f774ba4..5a93660 100644 --- a/src/entity/csv.entity.ts +++ b/src/entity/csv.entity.ts @@ -5,12 +5,32 @@ export class CsvEntity { @PrimaryGeneratedColumn() id: number; + @Column({nullable: true}) + serial: string; + @Column({nullable: true}) name: string; @Column({nullable: true}) - sku: string; + category: string; + + @Column({nullable: true}) + size: string; + + @Column({nullable: true}) + description: string; @Column({nullable: true}) - price: string; + status: productStatus; + + @Column({nullable: true}) + manufactureDate: string; + + @Column({nullable: true}) + warranty: string; +} + +export enum productStatus { + AVAILABLE = 'AVAILABLE', + OUT_OF_STOCK = 'OUT_OF_STOCK' } \ No newline at end of file diff --git a/src/productStatusValidation.pipe.ts b/src/productStatusValidation.pipe.ts new file mode 100644 index 0000000..4e8e45e --- /dev/null +++ b/src/productStatusValidation.pipe.ts @@ -0,0 +1,22 @@ +import { ArgumentMetadata, BadRequestException, PipeTransform } from "@nestjs/common"; +import { productStatus } from "./entity/csv.entity"; + +export class ProductStatusValidationPipe implements PipeTransform { + readonly allowedStatus = [productStatus.AVAILABLE, productStatus.OUT_OF_STOCK]; + + transform(value: any, metadata: ArgumentMetadata): any { + value = value.toUpperCase(); + + if (!this.isStatusValid(value)) { + throw new BadRequestException(`${value} is an invalid status.`); + } + return value; + } + + private isStatusValid(status : any) { + const index = this.allowedStatus.indexOf(status); + + return index !== -1; + } + +} \ No newline at end of file diff --git a/uploads/2878a4961cf985939bb451259c5e84bf b/uploads/2878a4961cf985939bb451259c5e84bf new file mode 100644 index 0000000..395c18a --- /dev/null +++ b/uploads/2878a4961cf985939bb451259c5e84bf @@ -0,0 +1,26 @@ +Name,SKU,Regular price +V-Neck T-Shirt,woo-vneck-tee, +Hoodie,woo-hoodie, +Hoodie with Logo,woo-hoodie-with-logo,45 +T-Shirt,woo-tshirt,18 +Beanie,woo-beanie,20 +Belt,woo-belt,65 +Cap,woo-cap,18 +Sunglasses,woo-sunglasses,90 +Hoodie with Pocket,woo-hoodie-with-pocket,45 +Hoodie with Zipper,woo-hoodie-with-zipper,45 +Long Sleeve Tee,woo-long-sleeve-tee,25 +Polo,woo-polo,20 +Album,woo-album,15 +Single,woo-single,3 +V-Neck T-Shirt - Red,woo-vneck-tee-red,20 +V-Neck T-Shirt - Green,woo-vneck-tee-green,20 +V-Neck T-Shirt - Blue,woo-vneck-tee-blue,15 +"Hoodie - Red, No",woo-hoodie-red,45 +"Hoodie - Green, No",woo-hoodie-green,45 +"Hoodie - Blue, No",woo-hoodie-blue,45 +T-Shirt with Logo,Woo-tshirt-logo,18 +Beanie with Logo,Woo-beanie-logo,20 +Logo Collection,logo-collection, +WordPress Pennant,wp-pennant,11.05 +"Hoodie - Blue, Yes",woo-hoodie-blue-logo,45 diff --git a/uploads/99d1a675242916ac0df3d1dc7a61669d b/uploads/99d1a675242916ac0df3d1dc7a61669d new file mode 100644 index 0000000..395c18a --- /dev/null +++ b/uploads/99d1a675242916ac0df3d1dc7a61669d @@ -0,0 +1,26 @@ +Name,SKU,Regular price +V-Neck T-Shirt,woo-vneck-tee, +Hoodie,woo-hoodie, +Hoodie with Logo,woo-hoodie-with-logo,45 +T-Shirt,woo-tshirt,18 +Beanie,woo-beanie,20 +Belt,woo-belt,65 +Cap,woo-cap,18 +Sunglasses,woo-sunglasses,90 +Hoodie with Pocket,woo-hoodie-with-pocket,45 +Hoodie with Zipper,woo-hoodie-with-zipper,45 +Long Sleeve Tee,woo-long-sleeve-tee,25 +Polo,woo-polo,20 +Album,woo-album,15 +Single,woo-single,3 +V-Neck T-Shirt - Red,woo-vneck-tee-red,20 +V-Neck T-Shirt - Green,woo-vneck-tee-green,20 +V-Neck T-Shirt - Blue,woo-vneck-tee-blue,15 +"Hoodie - Red, No",woo-hoodie-red,45 +"Hoodie - Green, No",woo-hoodie-green,45 +"Hoodie - Blue, No",woo-hoodie-blue,45 +T-Shirt with Logo,Woo-tshirt-logo,18 +Beanie with Logo,Woo-beanie-logo,20 +Logo Collection,logo-collection, +WordPress Pennant,wp-pennant,11.05 +"Hoodie - Blue, Yes",woo-hoodie-blue-logo,45 diff --git a/uploads/a133887a374d6f28990de27f74f6980c b/uploads/a133887a374d6f28990de27f74f6980c new file mode 100644 index 0000000..5d08614 --- /dev/null +++ b/uploads/a133887a374d6f28990de27f74f6980c @@ -0,0 +1,40 @@ +serial,name,category,size,description,status,manufactureDate,warranty +B4084600,Love ring,rings,Pair/Single,"Love ring, 18K yellow gold. Width: 5.5mm.",Available,19-02-2024,Lorem ipsum +B4084900,Love ring,rings,Single,"Love ring, 950/1000 platinum. Width: 5.5mm.",Available,19-02-2024,Lorem ipsum +B4084800,Love ring,rings,Single,"Love ring, 18K rose gold. Width: 5.5mm.",Available,19-02-2024,Lorem ipsum +B4084700,Love ring,rings,Pair/Single,"Love ring, 18K white gold. Width: 5.5mm.",Available,19-02-2024,Lorem ipsum +B4085000,Love wedding band,rings,Pair,"Love wedding band, 18K yellow gold. Width: 3.6mm.",Out of stock,19-02-2024,Lorem ipsum +B4085200,Love wedding band,rings,Pair,"Love wedding band, 18K rose gold. Width: 3.6mm.",Available,19-02-2024,Lorem ipsum +B4085100,Love wedding band,rings,Pair/Single,"Love wedding band, 18K white gold. Width: 3.6mm.",Out of stock,19-02-2024,Lorem ipsum +B4085300,Love wedding band,rings,Pair/Single,"Love wedding band, 950/1000 platinum. Width: 3.6mm.",Available,19-02-2024,Lorem ipsum +B4032400,"Love ring, 3 diamonds",rings,Single,"Love ring, 18K yellow gold, set with 3 brilliant-cut diamonds totaling 0.22 carats. Width: 5.5mm.",Out of stock,19-02-2024,Lorem ipsum +B6044017,"Amulette de Cartier bracelet, XS model",bracelets,Single,"Amulette de Cartier bracelet, XS model, 18K yellow gold, set with a brilliant-cut diamond of 0.02 carats, white mother-of-pearl. Diameter of motif: 12 mm.",Available,19-02-2024,Lorem ipsum +B6047117,"Amulette de Cartier bracelet, XS model",bracelets,Pair/Single,"Amulette de Cartier bracelet, XS model, 18K pink gold, malachite, set with a brilliant-cut diamond of 0.02 carats. Diameter of motif: 12 mm.",Out of stock,19-02-2024,Lorem ipsum +B6044117,"Amulette de Cartier bracelet, XS model",bracelets,Single,"Amulette de Cartier bracelet, XS model, 18K pink gold, set with a brilliant-cut diamond of 0.02 carats, onyx. Diameter of motif: 12 mm.",Available,19-02-2024,Lorem ipsum +B6050717,"Amulette de Cartier bracelet, XS model",bracelets,Pair/Single,"Amulette de Cartier bracelet, extra-small model, 18K pink gold, onyx, white mother-of-pearl, set with 2 brilliant-cut diamonds totaling 0.05 carats. Diameter of the motifs: 12 mm.",Out of stock,19-02-2024,Lorem ipsum +B6035517,Love bracelet,bracelets,Single,"Love bracelet, 18K yellow gold. Sold with a screwdriver. Width: 6.1mm.",Available,19-02-2024,Lorem ipsum +N6036917,"Love bracelet, diamond-paved",bracelets,Pair/Single,"Love bracelet, 18K pink gold, set with 204 brilliant-cut diamonds totaling 1.99 carats.",Available,19-02-2024,Lorem ipsum +B6035617,Love bracelet,bracelets,Pair/Single,"Love bracelet, 18K rose gold. Sold with a screwdriver. Width: 6.1mm.",Available,19-02-2024,Lorem ipsum +B6035417,Love bracelet,bracelets,Pair/Single,"Love bracelet, 18K white gold. Sold with a screwdriver. Width: 6.1mm.",Out of stock,19-02-2024,Lorem ipsum +B6047517,"Love bracelet, SM",bracelets,Single,"Love bracelet, small model, 18K yellow gold. Sold with a screwdriver. Width: 3.65mm.",Available,19-02-2024,Lorem ipsum +B6047317,"Love bracelet, SM",bracelets,Pair/Single,"Love bracelet, small model, 18K rose gold. Sold with a screwdriver. Width: 3.65mm.",Out of stock,19-02-2024,Lorem ipsum +B3047100,"Amulette de Cartier necklace, XS model",necklaces,Single,"Amulette de Cartier necklace, XS model, 18K yellow gold, set with a brilliant-cut diamond of 0.02 carats, white mother-of-pearl. Diameter of motif: 12 mm. Adjustable chain: 38-41 cm.",Available,19-02-2024,Lorem ipsum +B3047200,"Amulette de Cartier necklace, XS model",necklaces,Single,"Amulette de Cartier necklace, XS model, 18K pink gold, onyx, set with a brilliant-cut diamond of 0.02 carats. Diameter of motif: 12 mm. Adjustable chain: 38-41 cm.",Out of stock,19-02-2024,Lorem ipsum +B7224550,"Amulette de Cartier necklace, XS model",necklaces,Single,"Amulette de Cartier necklace, XS model, 18K pink gold, malachite, set with a brilliant-cut diamond of 0.02 carats. Diameter of motif: 12 mm. Adjustable chain: 38-41 cm.",Available,19-02-2024,Lorem ipsum +B7224569,"Amulette de Cartier necklace, XS model",necklaces,Single,"Amulette de Cartier necklace, extra-small model, 18K pink gold, onyx, white mother-of-pearl, set with 2 brilliant-cut diamonds totaling 0.05 carats. Diameter of the motifs: 12 mm. Adjustable chain.",Out of stock,19-02-2024,Lorem ipsum +B7224558,"Amulette de Cartier necklace, small model",necklaces,Single,"Amulette de Cartier necklace, small model, 18K pink gold, set with a brilliant-cut diamond of 0.09 carats, onyx.",Available,19-02-2024,Lorem ipsum +B7224521,"Amulette de Cartier necklace, small model",necklaces,Single,"Amulette de Cartier necklace, small model, 18K yellow gold, lapis lazuli, set with a brilliant-cut diamond of 0.09 carats. Diameter of motif: 17 mm. Chain: 60 cm.",Available,19-02-2024,Lorem ipsum +B7224518,"Amulette de Cartier necklace, XS model",necklaces,Single,"Amulette de Cartier necklace, XS model, 18K pink gold, carnelian, set with a brilliant-cut diamond of 0.02 carats. Diameter of motif: 12 mm. Adjustable chain: 38-41 cm.",Available,19-02-2024,Lorem ipsum +B3153108,"Amulette de Cartier necklace, XS model",necklaces,Single,"Amulette de Cartier necklace, XS model, 18K yellow gold, lapis lazuli, set with a brilliant-cut diamond of 0.02 carats. Diameter of motif: 12 mm. Adjustable chain: 38-41 cm.",Out of stock,19-02-2024,Lorem ipsum +B7224520,"Amulette de Cartier necklace, XS model",necklaces,Single,"Amulette de Cartier necklace, XS model, 18K yellow gold, chrysoprase, set with a brilliant-cut diamond of 0.02 carats. Diameter of motif: 12 mm. Adjustable chain: 38-41 cm.",Available,19-02-2024,Lorem ipsum +B7224542,"Amulette de Cartier necklace, small model",necklaces,Single,"Amulette de Cartier necklace, small model, 18K pink gold, malachite, set with a brilliant-cut diamond of 0.09 carats. Diameter of motif: 17 mm. Chain: 60 cm.",Out of stock,19-02-2024,Lorem ipsum +B8301238,"Amulette de Cartier earrings, XS model",earrings,Pair/Single,"Amulette de Cartier earrings, XS model, 18K yellow gold, white mother-of-pearl, set with 2 brilliant-cut diamonds totaling 0.05 carats. Diameter of motifs: 12 mm.",Available,19-02-2024,Lorem ipsum +B8301230,"Amulette de Cartier earrings, XS model",earrings,Pair/Single,"Amulette de Cartier earrings, XS model, 18K pink gold, onyx, set with 4 brilliant-cut diamonds totaling 0.14 carats. Diameter of motifs: 12 mm.",Out of stock,19-02-2024,Lorem ipsum +B8301239,"Amulette de Cartier earrings, XS model",earrings,Pair/Single,"Amulette de Cartier earrings, XS model, 18K pink gold, onyx, set with 2 brilliant-cut diamonds totaling 0.05 carats. Diameter of motifs: 12 mm.",Available,19-02-2024,Lorem ipsum +B8301229,"Amulette de Cartier earrings, XS model",earrings,Pair/Single,"Amulette de Cartier earrings, XS model, 18K yellow gold, white mother-of-pearl, set with 4 brilliant-cut diamonds totaling 0.14 carats. Diameter of motifs: 12 mm.",Available,19-02-2024,Lorem ipsum +B8301251,"Amulette de Cartier earrings, XS model",earrings,Pair/Single,"Amulette de Cartier earrings, extra-small model, 18K pink gold, onyx, white mother-of-pearl, each set with 2 brilliant-cut diamond totaling 0.11 carat. Motif diameter: 12 mm.",Out of stock,19-02-2024,Lorem ipsum +B8301421,Love single earring,earrings,Pair/Single,"Love single earring, 18K yellow gold. Diameter 6 mm. Sold individually.",Available,19-02-2024,Lorem ipsum +B8301422,Love single earring,earrings,Pair/Single,"Love single earring, 18K pink gold. Diameter 12mm. Sold individually.",Available,19-02-2024,Lorem ipsum +B8301254,Love earrings,earrings,Pair/Single,"Love earrings, 18K rose gold. Inner diameter 7.2mm.",Out of stock,19-02-2024,Lorem ipsum +B8301255,Love earrings,earrings,Pair/Single,"Love earrings, 18K yellow gold. Inner diameter 7.2mm.",Available,19-02-2024,Lorem ipsum +B8301256,Love earrings,earrings,Pair/Single,"Love earrings, 18K white gold. Inner diameter 7.2mm.",Available,19-02-2024,Lorem ipsum