From 40f130cb824f1e42b11891b4e83e51c072269a3e Mon Sep 17 00:00:00 2001 From: mike Date: Mon, 1 Sep 2025 06:59:39 -0500 Subject: [PATCH] refactor: update product model and related services to use single variant attribute and improve type definitions --- src/lib/utils.tests.ts | 15 ++++++++++++--- src/models/product.model.ts | 10 ++++++---- src/services/chat-system-prompt.ts | 21 +++++++++++---------- src/services/product.service.ts | 4 ++-- 4 files changed, 31 insertions(+), 19 deletions(-) diff --git a/src/lib/utils.tests.ts b/src/lib/utils.tests.ts index 895766b..b7d7472 100644 --- a/src/lib/utils.tests.ts +++ b/src/lib/utils.tests.ts @@ -125,7 +125,7 @@ export const createTestVariantAttributeValue = ( price: 100, // ya es number createdAt: new Date(), updatedAt: new Date(), - variantAttribute: [{ id: 1, name: "Talla", createdAt: new Date(), updatedAt: new Date() }], + variantAttribute: { id: 1, name: "Talla", createdAt: new Date(), updatedAt: new Date() }, ...overrides, }); @@ -151,13 +151,22 @@ export const createTestOrderItem = ( ({ id: 1, orderId: 1, - productId: 1, + attributeValueId: 1, quantity: 1, title: "Test Product", price: 100, imgSrc: "test-image.jpg", createdAt: new Date(), updatedAt: new Date(), + variantAttributeValue: { + id: 1, + attributeId: 1, + productId: 1, + value: "Default", + price: new Decimal(100), + createdAt: new Date(), + updatedAt: new Date(), + }, ...overrides, } satisfies OrderItem); @@ -167,7 +176,7 @@ export const createTestDBOrderItem = ( ({ id: 1, orderId: 1, - productId: 1, + attributeValueId: 1, quantity: 1, title: "Test Product", price: new Decimal(100), diff --git a/src/models/product.model.ts b/src/models/product.model.ts index ab58c43..3a282e2 100644 --- a/src/models/product.model.ts +++ b/src/models/product.model.ts @@ -8,9 +8,11 @@ export type Product = PrismaProduct & { variantAttributeValues?: VariantAttributeValueWithNumber[]; }; - - export type VariantAttributeValueWithNumber = Omit & { price: number - variantAttribute: VariantAttribute[] -} \ No newline at end of file + variantAttribute: VariantAttribute +} + +export type ProductDTO = PrismaProduct & { + variantAttributeValues: PrismaVariantAttributeValue[]; +}; \ No newline at end of file diff --git a/src/services/chat-system-prompt.ts b/src/services/chat-system-prompt.ts index 26f826c..0313ad6 100644 --- a/src/services/chat-system-prompt.ts +++ b/src/services/chat-system-prompt.ts @@ -1,6 +1,6 @@ import type { CartWithItems } from "@/models/cart.model"; import type { Category } from "@/models/category.model"; -import type { Product } from "@/models/product.model"; +import type { Product, VariantAttributeValueWithNumber } from "@/models/product.model"; interface SystemPromptConfig { categories: Category[]; @@ -31,24 +31,25 @@ export function generateSystemPrompt({ if (product.variantAttributeValues && product.variantAttributeValues.length > 0) { const variantType = product.variantAttributeValues[0]?.variantAttribute?.name; - if (variantType && variantType !== 'único') { - switch (variantType) { - case 'talla': - const sizes = product.variantAttributeValues.map((v: any) => v.value).join(", "); + switch (variantType) { + case 'talla': { + const sizes = product.variantAttributeValues.map((v: VariantAttributeValueWithNumber) => v.value).join(", "); variantDisplay = `\n- 👕 Tallas disponibles: ${sizes}`; break; - case 'dimensión': + } + case 'dimensión': { const dimensions = product.variantAttributeValues - .map((v: any) => `${v.value} (S/${v.price})`) + .map((v: VariantAttributeValueWithNumber) => `${v.value} (S/${v.price})`) .join(", "); variantDisplay = `\n- 📐 Dimensiones: ${dimensions}`; break; - default: + } + default: { const options = product.variantAttributeValues - .map((v: any) => `${v.value} (S/${v.price})`) + .map((v: VariantAttributeValueWithNumber) => `${v.value} (S/${v.price})`) .join(", "); variantDisplay = `\n- ⚙️ Opciones: ${options}`; - } + } } } diff --git a/src/services/product.service.ts b/src/services/product.service.ts index 5b22cea..983a43d 100644 --- a/src/services/product.service.ts +++ b/src/services/product.service.ts @@ -1,11 +1,11 @@ import { prisma } from "@/db/prisma"; import type { Category } from "@/models/category.model"; -import type { Product } from "@/models/product.model"; +import type { Product, ProductDTO } from "@/models/product.model"; import type { VariantAttributeValue } from "@/models/variant-attribute.model"; import { getCategoryBySlug } from "./category.service"; -export const formattedProduct = (product: any): Product => { +export const formattedProduct = (product: ProductDTO): Product => { const { variantAttributeValues, ...rest } = product; const prices = variantAttributeValues.map((v: VariantAttributeValue) => v.price.toNumber()