diff --git a/src/config/.gitkeep b/src/config/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/src/index.js b/src/index.js index 8822def..55012b8 100644 --- a/src/index.js +++ b/src/index.js @@ -9,7 +9,6 @@ import productCategoryRoutes from "./modules/commerce/product-categories/product import productTagRoutes from "./modules/commerce/product-tags/product-tag.routes.js"; import userRoutes from "./modules/users/users/routes/users.routes.js"; import sessionRoutes from "./modules/session/routes/session.routes.js"; -import addressesRoutes from "./modules/users/addresses/routes/addresses.routes.js"; dotenv.config(); const app = express(); @@ -31,7 +30,6 @@ app.use("/products", productRoutes); app.use("/products/categories", productCategoryRoutes); app.use("/products/tags", productTagRoutes); app.use("/api/users", userRoutes); -app.use("/api/addresses", addressesRoutes); app.listen(PORT, () => { console.log(`Servidor corriendo en http://localhost:${PORT}`); diff --git a/src/modules/commerce/commerces/.gitkeep b/src/modules/commerce/commerces/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/src/modules/commerce/commerces/store.controller.js b/src/modules/commerce/commerces/store.controller.js index 3c80fe0..734b939 100644 --- a/src/modules/commerce/commerces/store.controller.js +++ b/src/modules/commerce/commerces/store.controller.js @@ -37,8 +37,8 @@ export const createStore = async (req, res) => { */ export const getStoreById = async (req, res) => { try { - const { id } = req.params; - const store = await getStoreByIdService(id); + const { id_store } = req.params; + const store = await getStoreByIdService(id_store); return res.status(200).json(store); } catch (error) { return res.status(error.status || 500).json({ @@ -55,8 +55,8 @@ export const getStoreById = async (req, res) => { */ export const getAllProductsByStore = async (req, res) => { try { - const { id } = req.params; - const products = await getAllProductsByStoreService(id); + const { id_store } = req.params; + const products = await getAllProductsByStoreService(id_store); return res.status(200).json(products); } catch (error) { return res.status(error.status || 500).json({ @@ -73,9 +73,9 @@ export const getAllProductsByStore = async (req, res) => { */ export const filterStoreProducts = async (req, res) => { try { - const { id } = req.params; + const { id_store } = req.params; const { category, price_min, price_max } = req.query; - const products = await filterStorePriductsService(id, { category, price_min, price_max }); + const products = await filterStorePriductsService(id_store, { category, price_min, price_max }); return res.status(200).json(products); } catch (error) { return res.status(error.status || 500).json({ diff --git a/src/modules/commerce/commerces/store.routes.js b/src/modules/commerce/commerces/store.routes.js index 0b08cd6..4012e43 100644 --- a/src/modules/commerce/commerces/store.routes.js +++ b/src/modules/commerce/commerces/store.routes.js @@ -11,8 +11,8 @@ import { const router = Router(); router.post("/", createStore); -router.get("/:id", getStoreById); -router.get("/products/:id", getAllProductsByStore); -router.get("/products/filter/:id", filterStoreProducts); +router.get("/:id_store", getStoreById); +router.get("/:id_store/products", getAllProductsByStore); +router.get("/:id_store/products/filter", filterStoreProducts); export default router; \ No newline at end of file diff --git a/src/modules/commerce/commerces/store.service.js b/src/modules/commerce/commerces/store.service.js index a6a7d99..c0c67ee 100644 --- a/src/modules/commerce/commerces/store.service.js +++ b/src/modules/commerce/commerces/store.service.js @@ -86,10 +86,10 @@ export const createStoreService = async (data) => { throw { status: 404, message: "Usuario no encontrado" }; } - // Verificar que sea SELLER - // if (usuario.role !== "SELLER") { - // throw { status: 403, message: "El usuario no es vendedor" }; - // } + // vrificar que sea SELLER + if (usuario.role !== "SELLER") { + throw { status: 403, message: "El usuario no es vendedor" }; + } // verificar que no tenga tienda const tiendaExistente = await prisma.stores.findUnique({ @@ -130,7 +130,7 @@ export const createStoreService = async (data) => { await tx.addresses.create({ data: { fk_user, - fk_store: store.id, + fk_store: store.id_store, address: address.trim(), city: city.trim(), region: region.trim(), @@ -138,12 +138,6 @@ export const createStoreService = async (data) => { } }); - // Actualizamos rol del usuario a SELLER al crearse el comercio - await tx.users.update({ - where: { id_user: fk_user }, - data: { role: "SELLER" } - }); - return store; }); @@ -161,22 +155,22 @@ export const createStoreService = async (data) => { /** * Obtiene un comercio por su ID, incluyendo datos del vendedor, categoría, productos visibles y direcciones activas. Realiza validaciones básicas y maneja errores. - * @param {*} id + * @param {*} id_store * @returns */ -export const getStoreByIdService = async (id) => { +export const getStoreByIdService = async (id_store) => { try { // validaciones básicas - if (!id) { + if (!id_store) { throw { status: 400, message: "ID de tienda es requerido" }; } - if (isNaN(Number(id))) { + if (isNaN(Number(id_store))) { throw { status: 400, message: "ID de tienda debe ser un número" }; } // Buscar comercio const store = await prisma.stores.findUnique({ - where: { id_store: Number(id) }, + where: { id_store: Number(id_store) }, // Datos del comercio select: { id_store: true, @@ -237,21 +231,21 @@ export const getStoreByIdService = async (id) => { /** * Obtiene todos los productos de una tienda específica, filtrando por productos activos y visibles. Realiza validaciones básicas y maneja errores. - * @param {*} id + * @param {*} id_store * @returns */ -export const getAllProductsByStoreService = async (id) => { +export const getAllProductsByStoreService = async (id_store) => { try { // validaciones básicas - if (!id) { + if (!id_store) { throw { status: 400, message: "ID de tienda es requerido" }; } - if (isNaN(Number(id))) { + if (isNaN(Number(id_store))) { throw { status: 400, message: "ID de tienda debe ser un número" }; } // Verificar que la tienda exista const store = await prisma.stores.findUnique({ - where: { id_store: Number(id) }, + where: { id_store: Number(id_store) }, select: { id_store: true } }); // Si no se encuentra la tienda, lanzar error 404 @@ -261,7 +255,7 @@ export const getAllProductsByStoreService = async (id) => { // Obtener productos activos y visibles de la tienda const products = await prisma.products.findMany({ where: { - fk_store: Number(id), + fk_store: Number(id_store), status: true }, select: { @@ -299,22 +293,22 @@ export const getAllProductsByStoreService = async (id) => { /** * Obtiene productos de una tienda específica aplicando filtros dinámicos como nombre, categoría, visibilidad y rango de precios. Realiza validaciones básicas y maneja errores. - * @param {*} id + * @param {*} id_store * @param {*} filters * @returns */ -export const filterStorePriductsService = async (id, filters) => { +export const filterStorePriductsService = async (id_store, filters) => { try { // validaciones básicas - if (!id) { + if (!id_store) { throw { status: 400, message: "ID de tienda es requerido" }; } - if (isNaN(Number(id))) { + if (isNaN(Number(id_store))) { throw { status: 400, message: "ID de tienda debe ser un número" }; } // Verificar que la tienda exista const store = await prisma.stores.findUnique({ - where: { id_store: Number(id) }, + where: { id_store: Number(id_store) }, select: { id_store: true } }); // Si no se encuentra la tienda, lanzar error 404 @@ -325,7 +319,7 @@ export const filterStorePriductsService = async (id, filters) => { const { name, category, visible, minPrice, maxPrice, sortBy, sortOrder } = filters; // Condiciones base para productos activos de la tienda const whereConditions = { - fk_store: Number(id), + fk_store: Number(id_store), status: true }; if (name) { diff --git a/src/modules/users/addresses/.gitkeep b/src/modules/users/addresses/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/src/modules/users/addresses/controllers/addresses.controller.js b/src/modules/users/addresses/controllers/addresses.controller.js deleted file mode 100644 index 5ee276e..0000000 --- a/src/modules/users/addresses/controllers/addresses.controller.js +++ /dev/null @@ -1,50 +0,0 @@ -import { createAddressService, updateAddressService, getAddressByIdService, getAddressesByUserService, deleteAddressService } from "../services/addresses.service.js"; - -export const createAddress = async (req, res) => { - try { - const address = await createAddressService(req.body, req.user); - res.status(201).json(address); - } catch (error) { - res.status(error.statusCode || 500).json({ message: error.message }); - } -}; - -export const getAddressesByUser = async (req, res) => { - try { - const fk_user = parseInt(req.params.fk_user); - const addresses = await getAddressesByUserService(fk_user); - res.status(200).json(addresses); - } catch (error) { - res.status(error.statusCode || 500).json({ message: error.message }); - } -}; - -export const getAddressById = async (req, res) => { - try { - const id_address = parseInt(req.params.id); - const address = await getAddressByIdService(id_address); - res.status(200).json(address); - } catch (error) { - res.status(error.statusCode || 500).json({ message: error.message }); - } -}; - -export const updateAddress = async (req, res) => { - try { - const id_address = parseInt(req.params.id); - const address = await updateAddressService(id_address, req.body); - res.status(200).json(address); - } catch (error) { - res.status(error.statusCode || 500).json({ message: error.message }); - } -}; - -export const deleteAddress = async (req, res) => { - try { - const id_address = parseInt(req.params.id); - const address = await deleteAddressService(id_address); - res.status(200).json({ message: "Dirección desactivada correctamente", address }); - } catch (error) { - res.status(error.statusCode || 500).json({ message: error.message }); - } -}; \ No newline at end of file diff --git a/src/modules/users/addresses/routes/addresses.routes.js b/src/modules/users/addresses/routes/addresses.routes.js deleted file mode 100644 index bdf95a9..0000000 --- a/src/modules/users/addresses/routes/addresses.routes.js +++ /dev/null @@ -1,12 +0,0 @@ -import { Router } from "express"; -import { createAddress, updateAddress, deleteAddress, getAddressById, getAddressesByUser } from "../controllers/addresses.controller.js"; - -const router = new Router(); - -router.post("/", createAddress); -router.get("/user/:fk_user", getAddressesByUser); -router.get(":id", getAddressById); -router.patch(":id", updateAddress); -router.delete(":id", deleteAddress); - -export default router; \ No newline at end of file diff --git a/src/modules/users/addresses/services/addresses.service.js b/src/modules/users/addresses/services/addresses.service.js deleted file mode 100644 index 44ca9e6..0000000 --- a/src/modules/users/addresses/services/addresses.service.js +++ /dev/null @@ -1,177 +0,0 @@ -import { prisma } from "../../../../../src/lib/prisma.js"; - -// Faltaria agregar una validacion de cantidad de direcciones que puede tener un usuario (5 direcciones) -export const createAddressService = async (data, authUser) => { - const { fk_user, fk_store, address, city, region, postal_code } = data; - - // Verificar que sea el mismo usuario de la cuenta el que esta realizando la peticion - if (authUser.id_user !== fk_user) { - const error = new Error("Permisos insuficientes para crear direcciones en esta cuenta"); - error.statusCode = 403; - throw error; - } - - const user = await prisma.users.findUnique({ - where: { id_user: fk_user }, - }); - - if (!user) { - const error = new Error("El usuario no existe"); - error.statusCode = 404; - throw error; - } - - //Validacion de limite de direcciones (5) - const addressesFromUser = await prisma.addresses.count({ - where: { fk_user, satus: true } - }); - - if (addressesFromUser >= 5) { - const error = new Error("El usuario ya alcanzo el limite de direcciones"); - error.statusCode = 403; - throw error; - } - - const newAddress = await prisma.addresses.create({ - data : { - fk_user, - fk_store: fk_store ?? null, - address, - city, - region, - postal_code: postal_code ?? null, - }, - select: { - id_address: true, - fk_user: true, - fk_store: true, - address: true, - city: true, - region: true, - postal_code: true, - status: true, - created_at: true, - }, - }); - - return newAddress; -} - -export const getAddressesByUserService = async (fk_user) => { - const user = await prisma.users.findUnique({ - where: { id_user: fk_user }, - }); - - if (!user) { - const error = new Error("El usuario no existe"); - error.statusCode = 404; - throw error; - } - - const addresses = await prisma.addresses.findMany({ - where: { fk_user, status: true }, - select: { - id_address: true, - fk_user: true, - fk_store: true, - address: true, - city: true, - region: true, - postal_code: true, - status: true, - created_at: true, - }, - }); - - return addresses; -}; - -export const getAddressByIdService = async (id_address) => { - const address = await prisma.addresses.findUnique({ - where: { id_address, status: true }, - select: { - id_address: true, - fk_user: true, - fk_store: true, - address: true, - city: true, - region: true, - postal_code: true, - status: true, - created_at: true, - updated_at: true, - }, - }); - - if (!address) { - const error = new Error("La dirección no existe"); - error.statusCode = 404; - throw error; - } - - return address; -}; - -export const updateAddressService = async (id_address, data) => { - const { fk_store, address, city, region, postal_code } = data; - - const existingAddress = await prisma.addresses.findUnique({ - where: {id_address, status: true } - }); - - if (!existingAddress) { - const error = new Error("La dirección no existe"); - error.statusCode = 404; - throw error; - } - - const updatedAddress = await prisma.addresses.update({ - where: { id_address }, - data: { - fk_store: fk_store ?? existingAddress.fk_store, - address: address ?? existingAddress.address, - city: city ?? existingAddress.city, - region: region ?? existingAddress.region, - postal_code: postal_code ?? existingAddress.postal_code, - }, - select: { - id_address: true, - fk_user: true, - fk_store: true, - address: true, - city: true, - region: true, - postal_code: true, - status: true, - updated_at: true, - }, - }); - - return updatedAddress; -} - -export const deleteAddressService = async (id_address) => { - - const existingAddress = await prisma.addresses.findUnique({ - where: { id_address, status: true }, - }); - - if (!existingAddress) { - const error = new Error("La dirección no existe"); - error.statusCode = 404; - throw error; - } - - // Aplicando borrado logico - const deletedAddress = await prisma.addresses.update({ - where: { id_address }, - data: { status: false }, - select: { - id_address: true, - status: true, - updated_at: true, - }, - }); - - return deletedAddress; -}; \ No newline at end of file