From 2d596b93ad3c32422d20668628bc3b1fc642a847 Mon Sep 17 00:00:00 2001 From: Sergio Ramirez Date: Wed, 27 Aug 2025 14:52:47 -0400 Subject: [PATCH] editar, modificar, ver y crear productos listo --- .gitignore | 2 + .../inventory/inventory.controller.ts | 23 ++-- .../features/inventory/inventory.service.ts | 117 ++++++++---------- .../web/app/dashboard/productos/[id]/page.tsx | 25 ++-- apps/web/app/dashboard/productos/page.tsx | 4 +- .../feactures/inventory/actions/actions.ts | 28 +++-- .../inventory/create-product-form.tsx | 4 +- .../components/inventory/inventory-modal.tsx | 4 +- .../inventory/product-tables/cell-action.tsx | 26 +++- .../inventory/product-tables/columns.tsx | 6 +- .../inventory/update-product-form.tsx | 6 +- .../components/inventory/users-header.tsx | 4 +- .../components/products/product-list.tsx | 12 +- .../components/products/see-product.tsx | 63 ++++++---- .../feactures/inventory/hooks/use-mutation.ts | 18 +-- .../feactures/inventory/schemas/inventory.ts | 65 +++++++--- apps/web/lib/auth.config.ts | 16 +-- apps/web/lib/fetch.api.ts | 2 +- .../inventory/1/1/1-17102590731691.jpg | Bin 57341 -> 0 bytes .../uploads/inventory/1/1/2-MANZNA-ROJA.jpg | Bin 15953 -> 0 bytes 20 files changed, 242 insertions(+), 183 deletions(-) delete mode 100644 apps/web/public/uploads/inventory/1/1/1-17102590731691.jpg delete mode 100644 apps/web/public/uploads/inventory/1/1/2-MANZNA-ROJA.jpg diff --git a/.gitignore b/.gitignore index cae925f..da91704 100644 --- a/.gitignore +++ b/.gitignore @@ -37,3 +37,5 @@ yarn-error.log* # Misc .DS_Store *.pem + +apps/web/public/uploads \ No newline at end of file diff --git a/apps/api/src/features/inventory/inventory.controller.ts b/apps/api/src/features/inventory/inventory.controller.ts index 98f7400..0a2dbfb 100644 --- a/apps/api/src/features/inventory/inventory.controller.ts +++ b/apps/api/src/features/inventory/inventory.controller.ts @@ -47,7 +47,8 @@ export class UsersController { @ApiResponse({ status: 200, description: 'Return the product.' }) @ApiResponse({ status: 404, description: 'product not found.' }) async findOne(@Param('id') id: string) { - const data = await this.inventoryService.findOne(id); + const productId = Number(id) + const data = await this.inventoryService.findOne(productId); return { message: 'product fetched successfully', data }; } @@ -60,7 +61,7 @@ export class UsersController { @Req() req: Request, @Body() createUserDto: CreateProductDto, @UploadedFiles() files: Express.Multer.File[], - @Query('roleId') roleId?: string, + // @Query('roleId') roleId?: string, ) { const id = Number(req['user'].id); const data = await this.inventoryService.create(files,createUserDto,id) @@ -79,18 +80,20 @@ export class UsersController { @Body() body: any ) { const id = Number(req['user'].id); - const result = await this.inventoryService.saveImages(files,body,id); + const result = await this.inventoryService.update(files,body,id); return { data: result }; } - // @Delete(':id') + @Delete(':id') // @Roles('admin') - // @ApiOperation({ summary: 'Delete a user' }) - // @ApiResponse({ status: 200, description: 'User deleted successfully.' }) - // @ApiResponse({ status: 404, description: 'User not found.' }) - // async remove(@Param('id') id: string) { - // return await this.inventoryService.remove(id); - // } + @ApiOperation({ summary: 'Delete a Product' }) + @ApiResponse({ status: 200, description: 'Product deleted successfully.' }) + @ApiResponse({ status: 404, description: 'Product not found.' }) + async remove(@Req() req: Request, @Param('id') id: string) { + const productId = Number(id); + const userId = Number(req['user'].id); + return await this.inventoryService.remove(productId,userId); + } } diff --git a/apps/api/src/features/inventory/inventory.service.ts b/apps/api/src/features/inventory/inventory.service.ts index 4d3eac5..75ed217 100644 --- a/apps/api/src/features/inventory/inventory.service.ts +++ b/apps/api/src/features/inventory/inventory.service.ts @@ -159,7 +159,7 @@ export class InventoryService { return { data, meta }; } - async findOne(id: string): Promise { + async findOne(id: number): Promise { const find = await this.drizzle .select({ id: viewProductsStore.id, @@ -168,6 +168,7 @@ export class InventoryService { price: viewProductsStore.price, address: viewProductsStore.address, urlImg: viewProductsStore.urlImg, + gallery: viewProductsStore.gallery, stock: viewProductsStore.stock, status: viewProductsStore.status, userId: viewProductsStore.userId, @@ -176,10 +177,10 @@ export class InventoryService { phone: viewProductsStore.phone }) .from(viewProductsStore) - .where(eq(viewProductsStore.id, parseInt(id))); + .where(eq(viewProductsStore.id, id)); if (find.length === 0) { - throw new HttpException('Product does not exist', HttpStatus.BAD_REQUEST); + throw new HttpException('Product does not exist', HttpStatus.NOT_FOUND); } return find[0]; @@ -200,7 +201,7 @@ export class InventoryService { gallery.push(fileName); })); - console.log(gallery); + // console.log(gallery); // Start a transaction @@ -217,7 +218,7 @@ export class InventoryService { userId: userId, gallery: gallery } - console.log(productValue); + // console.log(productValue); const [newProduct] = await tx @@ -240,63 +241,38 @@ export class InventoryService { }) } - // async update(id: string, updateProductDto: UpdateProductDto): Promise { - // const productId = parseInt(id); - // // console.log(updateProductDto); - - // // Check if exists - // await this.findOne(id); - - // // Prepare update data - // const updateData: any = {}; - // if (updateProductDto.title) updateData.title = updateProductDto.title; - // if (updateProductDto.description) updateData.description = updateProductDto.description; - // if (updateProductDto.price) updateData.price = updateProductDto.price; - // if (updateProductDto.address) updateData.address = updateProductDto.address; - // if (updateProductDto.status) updateData.status = updateProductDto.status; - // if (updateProductDto.stock) updateData.stock = updateProductDto.stock; - // if (updateProductDto.urlImg) updateData.urlImg = updateProductDto.urlImg; - - // const [updatedProduct] = await this.drizzle.update(products).set(updateData).where(eq(products.id, productId)).returning(); - // return updatedProduct - // // Return updated user - // // return this.findOne(id); - // } - - /** - * Guarda una imagen en el directorio de imágenes. - * @param file - El archivo de imagen a guardar. - * @returns La ruta de la imagen guardada. - */ - async saveImages(file: Express.Multer.File[], updateProductDto: UpdateProductDto, userId: number): Promise { + async update(file: Express.Multer.File[], updateProductDto: UpdateProductDto, userId: number): Promise { const productId = parseInt(updateProductDto.id); - // Construye la ruta al directorio de imágenes. - const picturesPath = join(__dirname, '..', '..', '..', '..', 'web', 'public', 'uploads', 'inventory', userId.toString() , productId.toString()); - - // --- NUEVA LÓGICA: Borrar el directorio anterior --- - try { - // Borra el directorio y todos sus contenidos de forma recursiva y forzada. - await rm(picturesPath, { recursive: true, force: true }); - } catch (error) { - // Es buena práctica manejar el error, aunque `force: true` lo hace menos probable. - // Podrías registrar el error, pero no detener la ejecución. - console.error(`No se pudo eliminar el directorio ${picturesPath}:`, error); - } - // --- FIN DE LA NUEVA LÓGICA --- - - // Crea el directorio si no existe (ya que lo acabamos de borrar o no existía). - await mkdir(picturesPath, { recursive: true }); + // Check if exists + await this.findOne(productId); let gallery: string[] = []; - // Usamos `Promise.all` para manejar las operaciones asíncronas de forma correcta. - await Promise.all(file.map(async (f, index) => { - const fileName = `${index + 1}-${f.originalname}`; - gallery.push(fileName); - const filePath = join(picturesPath, fileName); - await writeFile(filePath, f.buffer); - })); + // check if product exist + if (file && file.length > 0) { + // Construye la ruta al directorio de imágenes. + const picturesPath = join(__dirname, '..', '..', '..', '..', 'web', 'public', 'uploads', 'inventory', userId.toString() , productId.toString()); + + try { + // Borra el directorio y todos sus contenidos de forma recursiva y forzada. + await rm(picturesPath, { recursive: true, force: true }); + } catch (error) { + // Es buena práctica manejar el error, aunque `force: true` lo hace menos probable. + // Podrías registrar el error, pero no detener la ejecución. + console.error(`No se pudo eliminar el directorio ${picturesPath}:`, error); + } + // Crea el directorio si no existe (ya que lo acabamos de borrar o no existía). + await mkdir(picturesPath, { recursive: true }); + + // Usamos `Promise.all` para manejar las operaciones asíncronas de forma correcta. + await Promise.all(file.map(async (f, index) => { + const fileName = `${index + 1}-${f.originalname}`; + gallery.push(fileName); + const filePath = join(picturesPath, fileName); + await writeFile(filePath, f.buffer); + })); + } // Prepare update data const updateData: any = {}; @@ -313,17 +289,26 @@ export class InventoryService { return updatedProduct; } - // async remove(id: string): Promise<{ message: string, data: User }> { - // const userId = parseInt(id); + async remove(productId: number, userId: number): Promise<{ message: string }> { + const picturesPath = join(__dirname, '..', '..', '..', '..', 'web', 'public', 'uploads', 'inventory', userId.toString() , productId.toString()); + + try { + // Borra el directorio y todos sus contenidos de forma recursiva y forzada. + await rm(picturesPath, { recursive: true, force: true }); + } catch (error) { + // Es buena práctica manejar el error, aunque `force: true` lo hace menos probable. + // Podrías registrar el error, pero no detener la ejecución. + console.error(`No se pudo eliminar el directorio ${picturesPath}:`, error); + } - // // Check if user exists - // const user = await this.findOne(id); + // Check if exists + await this.findOne(productId); - // // Delete user (this will cascade delete related records due to foreign key constraints) - // // await this.drizzle.delete(users).where(eq(users.id, userId)); - // await this.drizzle.update(users).set({ isActive: false }).where(eq(users.id, userId)); + // Delete user (this will cascade delete related records due to foreign key constraints) + await this.drizzle.delete(products).where(eq(products.id, productId)); + // await this.drizzle.update(products).set({ status: 'ELIMINADO' }).where(eq(products.id, productId)); - // return { message: 'User deleted successfully', data: user }; - // } + return { message: 'Product deleted successfully' }; + } } diff --git a/apps/web/app/dashboard/productos/[id]/page.tsx b/apps/web/app/dashboard/productos/[id]/page.tsx index aa0bcd4..6091bbe 100644 --- a/apps/web/app/dashboard/productos/[id]/page.tsx +++ b/apps/web/app/dashboard/productos/[id]/page.tsx @@ -1,15 +1,4 @@ -// 'use client'; - -// import PageContainer from '@/components/layout/page-container'; import { getProductById } from '@/feactures/inventory/actions/actions'; -// import { SurveyResponse } from '@/feactures/surveys/components/survey-response'; -import { - Card, - CardContent, - CardFooter, - CardHeader, - CardTitle, -} from '@repo/shadcn/card'; import {ProductList} from '@/feactures/inventory/components/products/see-product' export default async function SurveyResponsePage({ @@ -19,16 +8,18 @@ export default async function SurveyResponsePage({ }) { const { id } = await params; // You can still destructure id from params - if (!id || id === '') { - // Handle the case where no id is provided - return null; - } - + if (!id || id === '') return null; + // Call the function passing the dynamic id const data = await getProductById(Number(id)); if (!data?.data) { - return
Encuesta no encontrada
; + return ( +
+

Lo siento...

+

Producto no encontrado

+
+ ) } return ( diff --git a/apps/web/app/dashboard/productos/page.tsx b/apps/web/app/dashboard/productos/page.tsx index 5d96c70..254c9c6 100644 --- a/apps/web/app/dashboard/productos/page.tsx +++ b/apps/web/app/dashboard/productos/page.tsx @@ -1,4 +1,4 @@ -import PageContainer from '@/components/layout/page-container'; +// import PageContainer from '@/components/layout/page-container'; import { ProductList } from '@/feactures/inventory/components/products/product-list'; import { Button } from '@repo/shadcn/components/ui/button'; import { Metadata } from 'next'; @@ -13,7 +13,7 @@ export default function SurveysPage() { //
-

Productos Disponibles

+

Productos disponibles

diff --git a/apps/web/feactures/inventory/actions/actions.ts b/apps/web/feactures/inventory/actions/actions.ts index 914034a..0974bf4 100644 --- a/apps/web/feactures/inventory/actions/actions.ts +++ b/apps/web/feactures/inventory/actions/actions.ts @@ -4,14 +4,11 @@ import { ApiResponseSchema, InventoryTable, productMutate, - test, - // editInventory, productApiResponseSchema, - getProduct + getProduct, + deleteProduct } from '../schemas/inventory'; -import { auth } from '@/lib/auth'; - export const getInventoryAction = async (params: { page?: number; limit?: number; @@ -53,7 +50,7 @@ export const getInventoryAction = async (params: { nextPage: null, previousPage: null, }, - }; + } } export const getAllProducts = async (params: { @@ -100,9 +97,12 @@ export const getAllProducts = async (params: { previousPage: null, }, }; -}; +} export const getProductById = async (id: number) => { + if (!id) { + return null; + } const [error, data] = await safeFetchApi( getProduct, `/products/id/${id}`, @@ -110,12 +110,15 @@ export const getProductById = async (id: number) => { ); if (error) { + if (error.details.status === 404){ + return null + } console.error('❌ Error en la API:', error); throw new Error(error.message); } return data; -}; +} export const createProductAction = async (payload: FormData) => { const [error, data] = await safeFetchApi( @@ -131,7 +134,7 @@ export const createProductAction = async (payload: FormData) => { } return data; -}; +} export const updateProductAction = async (payload: InventoryTable) => { try { @@ -155,13 +158,16 @@ export const updateProductAction = async (payload: InventoryTable) => { } export const deleteProductAction = async (id: Number) => { + if (!id) { + throw new Error('Error al eliminar el producto') + } const [error] = await safeFetchApi( - productMutate, + deleteProduct, `/products/${id}`, 'DELETE' ) console.log(error); - if (error) throw new Error(error.message || 'Error al eliminar el usuario') + if (error) throw new Error(error.message || 'Error al eliminar el producto') return true; } \ No newline at end of file diff --git a/apps/web/feactures/inventory/components/inventory/create-product-form.tsx b/apps/web/feactures/inventory/components/inventory/create-product-form.tsx index a32d05d..953c4b3 100644 --- a/apps/web/feactures/inventory/components/inventory/create-product-form.tsx +++ b/apps/web/feactures/inventory/components/inventory/create-product-form.tsx @@ -19,7 +19,7 @@ import { import { Input } from '@repo/shadcn/input'; import { useForm } from 'react-hook-form'; import { useCreateProduct } from "@/feactures/inventory/hooks/use-mutation"; -import { editInventory, EditInventory } from '@/feactures/inventory/schemas/inventory'; +import { createProduct, EditInventory } from '@/feactures/inventory/schemas/inventory'; import { Textarea } from '@repo/shadcn/textarea'; import { STATUS } from '@/constants/status' import { useState, useEffect } from 'react'; @@ -59,7 +59,7 @@ export function CreateForm({ }; const form = useForm({ - resolver: zodResolver(editInventory), + resolver: zodResolver(createProduct), defaultValues: defaultformValues, mode: 'onChange', }); diff --git a/apps/web/feactures/inventory/components/inventory/inventory-modal.tsx b/apps/web/feactures/inventory/components/inventory/inventory-modal.tsx index 41a36c6..70aabe7 100644 --- a/apps/web/feactures/inventory/components/inventory/inventory-modal.tsx +++ b/apps/web/feactures/inventory/components/inventory/inventory-modal.tsx @@ -8,14 +8,14 @@ import { DialogTitle, } from '@repo/shadcn/dialog'; // import { AccountPlan } from '@/feactures/users/schemas/account-plan.schema'; -import { EditInventory, editInventory } from '../../schemas/inventory'; +import { EditInventory, InventoryTable } from '../../schemas/inventory'; import { CreateForm } from './create-product-form'; import { UpdateForm } from './update-product-form'; interface ModalProps { open: boolean; onOpenChange: (open: boolean) => void; - defaultValues?: Partial; + defaultValues?: Partial; } export function AccountPlanModal({ diff --git a/apps/web/feactures/inventory/components/inventory/product-tables/cell-action.tsx b/apps/web/feactures/inventory/components/inventory/product-tables/cell-action.tsx index 0e682ec..8cd7bb4 100644 --- a/apps/web/feactures/inventory/components/inventory/product-tables/cell-action.tsx +++ b/apps/web/feactures/inventory/components/inventory/product-tables/cell-action.tsx @@ -9,9 +9,10 @@ import { TooltipProvider, TooltipTrigger, } from '@repo/shadcn/tooltip'; -import { Edit, Trash, User } from 'lucide-react'; +import { Edit, Trash, Eye } from 'lucide-react'; import { InventoryTable } from '@/feactures/inventory/schemas/inventory'; -import { useDeleteUser } from '@/feactures/users/hooks/use-mutation-users'; +// import { useDeleteUser } from '@/feactures/users/hooks/use-mutation-users'; +import { useDeleteProduct } from "@/feactures/inventory/hooks/use-mutation"; import { AccountPlanModal } from '../inventory-modal'; interface CellActionProps { @@ -22,7 +23,7 @@ export const CellAction: React.FC = ({ data }) => { const [loading, setLoading] = useState(false); const [open, setOpen] = useState(false); const [edit, setEdit] = useState(false); - const { mutate: deleteUser } = useDeleteUser(); + const { mutate: deleteUser } = useDeleteProduct(); const router = useRouter(); const onConfirm = async () => { @@ -51,6 +52,23 @@ export const CellAction: React.FC = ({ data }) => {
+ + + + + + +

Ver

+
+
+
+ @@ -80,7 +98,7 @@ export const CellAction: React.FC = ({ data }) => { -

Deshabilitar

+

Eliminar

diff --git a/apps/web/feactures/inventory/components/inventory/product-tables/columns.tsx b/apps/web/feactures/inventory/components/inventory/product-tables/columns.tsx index 539fd27..75fdd83 100644 --- a/apps/web/feactures/inventory/components/inventory/product-tables/columns.tsx +++ b/apps/web/feactures/inventory/components/inventory/product-tables/columns.tsx @@ -5,16 +5,12 @@ import { CellAction } from './cell-action'; import { InventoryTable } from '../../../schemas/inventory'; export const columns: ColumnDef[] = [ - { - accessorKey: 'userId', - header: 'ID', - }, { accessorKey: 'urlImg', header: 'img', cell: ({ row }) => { return ( - + ) }, }, diff --git a/apps/web/feactures/inventory/components/inventory/update-product-form.tsx b/apps/web/feactures/inventory/components/inventory/update-product-form.tsx index d8133e8..7d6b4e8 100644 --- a/apps/web/feactures/inventory/components/inventory/update-product-form.tsx +++ b/apps/web/feactures/inventory/components/inventory/update-product-form.tsx @@ -19,7 +19,7 @@ import { import { Input } from '@repo/shadcn/input'; import { useForm } from 'react-hook-form'; import { useUpdateProduct } from "@/feactures/inventory/hooks/use-mutation"; -import { editInventory, EditInventory } from '@/feactures/inventory/schemas/inventory'; // Renombrado EditInventory para claridad +import { updateInventory, EditInventory, InventoryTable } from '@/feactures/inventory/schemas/inventory'; // Renombrado EditInventory para claridad import { Textarea } from '@repo/shadcn/components/ui/textarea'; import {STATUS} from '@/constants/status' import { useState, useEffect } from 'react'; @@ -43,7 +43,7 @@ import { z } from 'zod'; // Asegúrate de importar Zod interface UpdateFormProps { onSuccess?: () => void; onCancel?: () => void; - defaultValues?: Partial; + defaultValues?: Partial; } export function UpdateForm({ @@ -78,7 +78,7 @@ export function UpdateForm({ }; const form = useForm({ // Usamos el nuevo tipo aquí - resolver: zodResolver(editInventory), // Usamos el esquema extendido + resolver: zodResolver(updateInventory), // Usamos el esquema extendido defaultValues: defaultformValues, mode: 'onChange', }); diff --git a/apps/web/feactures/inventory/components/inventory/users-header.tsx b/apps/web/feactures/inventory/components/inventory/users-header.tsx index ad1229b..cb8c83d 100644 --- a/apps/web/feactures/inventory/components/inventory/users-header.tsx +++ b/apps/web/feactures/inventory/components/inventory/users-header.tsx @@ -13,8 +13,8 @@ export function UsersHeader() { <>
- + {product.title.charAt(0).toUpperCase() + product.title.slice(1)} -

$ {product.price}

- {product.status === 'AGOTADO' ? ( -

AGOTADO

- ) : ('')} +

{product.price}$ + {product.status === 'AGOTADO' ? ( + AGOTADO + ) : ('')} +

- -
-

Descripción

+ +
+

• Descripción

{product.description}

- {/*

{lorem+lorem+lorem+lorem}

*/} -
+ -
-

Dirección

+
+

• Dirección

{product.address}

-
+
-

Información del vendedor

+

• Información del vendedor

{product.fullname}

{product.phone}

{product.email}

diff --git a/apps/web/feactures/inventory/hooks/use-mutation.ts b/apps/web/feactures/inventory/hooks/use-mutation.ts index 98e9797..a21cf9e 100644 --- a/apps/web/feactures/inventory/hooks/use-mutation.ts +++ b/apps/web/feactures/inventory/hooks/use-mutation.ts @@ -1,6 +1,6 @@ import { useMutation, useQueryClient } from "@tanstack/react-query"; // import { EditInventory } from "../schemas/inventory"; -import { updateProductAction, createProductAction, } from "../actions/actions"; +import { updateProductAction, createProductAction,deleteProductAction } from "../actions/actions"; // Create mutation export function useCreateProduct() { @@ -25,11 +25,11 @@ export function useUpdateProduct() { } // Delete mutation -// export function useDeleteUser() { -// const queryClient = useQueryClient(); -// return useMutation({ -// mutationFn: (id: number) => deleteUserAction(id), -// onSuccess: () => queryClient.invalidateQueries({ queryKey: ['users'] }), -// onError: (e) => console.error('Error:', e) -// }) -// } \ No newline at end of file +export function useDeleteProduct() { + const queryClient = useQueryClient(); + return useMutation({ + mutationFn: (id: number) => deleteProductAction(id), + onSuccess: () => queryClient.invalidateQueries({ queryKey: ['product'] }), + onError: (e) => console.error('Error:', e) + }) +} \ No newline at end of file diff --git a/apps/web/feactures/inventory/schemas/inventory.ts b/apps/web/feactures/inventory/schemas/inventory.ts index 0d02265..d9deee5 100644 --- a/apps/web/feactures/inventory/schemas/inventory.ts +++ b/apps/web/feactures/inventory/schemas/inventory.ts @@ -4,7 +4,8 @@ import { url } from 'inspector'; import { z } from 'zod'; export type InventoryTable = z.infer; -export type EditInventory = z.infer; +export type EditInventory = z.infer; +export type CreateInventory = z.infer; export type ProductApiResponseSchema = z.infer; export type allProducts = z.infer; @@ -35,19 +36,58 @@ export const productDetails = seeProduct.extend({ email: z.string().email().nullable() }) -export const editInventory = z.object({ +const validateProduct = z.object({ id: z.number().optional(), title: z.string().min(5, { message: "Debe de tener 5 o más caracteres" }), description: z.string().min(10, { message: "Debe de tener 10 o más caracteres" }), stock: z.number(), address: z.string().min(5, { message: "Debe de tener 5 o más caracteres" }), - price: z.string(), + price: z.string().min(1, { message: "Debe de tener 1 o más caracteres" }), + urlImg: z.custom(), + status: z.string().min(1, { message: "Debe de seleccionar un valor" }), + userId: z.number().optional(), +}) + +export const updateInventory = validateProduct.extend({ + urlImg: z.custom() + .refine((files) => (files && files.length <= 10) || files === undefined, "Máximo 10 imágenes") + .refine((files) => + // (files && Array.from(files).every(file => file.size <= MAX_FILE_SIZE)) || files === undefined + { + if (files) { + let size = 0; + Array.from(files).map(file => { + size += file.size; + }) + if (size <= MAX_FILE_SIZE) return true; + return false + } + return true + } + , + `El tamaño máximo entre toda las imagenes es de 5MB` + ).refine((files) => + (files && Array.from(files).every(file => ACCEPTED_IMAGE_TYPES.includes(file.type))) || files === undefined, + "Solo se aceptan archivos .jpg, .jpeg, .png y .webp" + ).refine((files) => + (files && Array.from(files).every(file => file.name.length <= MAX_FILENAME_LENGTH)) || files === undefined, + `El nombre de cada archivo no puede superar los ${MAX_FILENAME_LENGTH} caracteres` + ), +}) + +export const createProduct = validateProduct.extend({ urlImg: z.custom() .refine((files) => files && files.length > 0, "Se requiere al menos una imagen") .refine((files) => files && files.length <= 10, "Máximo 10 imágenes") - .refine((files) => - files && Array.from(files).every(file => file.size <= MAX_FILE_SIZE), - `El tamaño máximo de cada imagen es de 5MB` + .refine((files) => { + let size = 0; + if (files) Array.from(files).map(file => { + size += file.size; + }) + if (size <= MAX_FILE_SIZE) return true; + return false + }, + `El tamaño máximo entre toda las imagenes es de 5MB` ).refine((files) => files && Array.from(files).every(file => ACCEPTED_IMAGE_TYPES.includes(file.type)), "Solo se aceptan archivos .jpg, .jpeg, .png y .webp" @@ -55,13 +95,11 @@ export const editInventory = z.object({ files && Array.from(files).every(file => file.name.length <= MAX_FILENAME_LENGTH), `El nombre de cada archivo no puede superar los ${MAX_FILENAME_LENGTH} caracteres` ), - status: z.string().min(1, { message: "Debe de seleccionar un valor" }), - userId: z.number().optional(), }) export const ApiResponseSchema = z.object({ message: z.string(), - data: z.array(product), + data: z.array(seeProduct), meta: z.object({ page: z.number(), limit: z.number(), @@ -89,11 +127,6 @@ export const productApiResponseSchema = z.object({ }), }) -export const test = z.object({ - // message: z.string(), - data: z.array(z.string()), -}) - export const productMutate = z.object({ message: z.string(), data: seeProduct, @@ -102,4 +135,8 @@ export const productMutate = z.object({ export const getProduct = z.object({ message: z.string(), data: productDetails, +}) + +export const deleteProduct = z.object({ + message: z.string(), }) \ No newline at end of file diff --git a/apps/web/lib/auth.config.ts b/apps/web/lib/auth.config.ts index 23985bb..247df61 100644 --- a/apps/web/lib/auth.config.ts +++ b/apps/web/lib/auth.config.ts @@ -130,21 +130,21 @@ const authConfig: NextAuthConfig = { return token; // Si no ha expirado, no hacer nada y devolver el token actual } - console.log("Now Access Expire:",token.access_expire_in); + // console.log("Now Access Expire:",token.access_expire_in); // 3. Si el token de acceso ha expirado, verificar el refresh token - console.log("Access token ha expirado. Verificando refresh token..."); + // console.log("Access token ha expirado. Verificando refresh token..."); if (now > (token.refresh_expire_in as number)) { - console.log("Refresh token ha expirado. Forzando logout."); + // console.log("Refresh token ha expirado. Forzando logout."); return null; // Forzar el logout al devolver null } - console.log("token:", token.refresh_token); + // console.log("token:", token.refresh_token); // 4. Si el token de acceso ha expirado pero el refresh token es válido, renovar - console.log("Renovando token de acceso..."); + // console.log("Renovando token de acceso..."); try { const res = await resfreshTokenAction({ token: token.refresh_token as string }); @@ -152,10 +152,10 @@ const authConfig: NextAuthConfig = { throw new Error('Fallo en la respuesta de la API de refresco.'); } - console.log("Old Access Expire:", token.access_expire_in); - console.log("New Access Expire:", res.tokens.access_expire_in); + // console.log("Old Access Expire:", token.access_expire_in); + // console.log("New Access Expire:", res.tokens.access_expire_in); - console.log("token:", token.refresh_token); + // console.log("token:", token.refresh_token); // Actualizar el token directamente con los nuevos valores diff --git a/apps/web/lib/fetch.api.ts b/apps/web/lib/fetch.api.ts index 56681e3..e0c6583 100644 --- a/apps/web/lib/fetch.api.ts +++ b/apps/web/lib/fetch.api.ts @@ -12,7 +12,7 @@ const fetchApi = axios.create({ // ESTE INTERCEPTOR ESTÁ BIEN PARA EL RESTO DE LAS PETICIONES AUTENTICADAS fetchApi.interceptors.request.use(async (config: any) => { try { - console.log("Solicitando autenticación..."); + // console.log("Solicitando autenticación..."); const { auth } = await import('@/lib/auth'); // Importación dinámica const session = await auth(); diff --git a/apps/web/public/uploads/inventory/1/1/1-17102590731691.jpg b/apps/web/public/uploads/inventory/1/1/1-17102590731691.jpg deleted file mode 100644 index a6d0c548b346b1f1435f6c92374f3f4efc30e475..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 57341 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 CC;CeO diff --git a/apps/web/public/uploads/inventory/1/1/2-MANZNA-ROJA.jpg b/apps/web/public/uploads/inventory/1/1/2-MANZNA-ROJA.jpg deleted file mode 100644 index b24c76f6babdd9f9fc9b07b73641ab8aee45ceb0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15953 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