Skip to content

Commit

Permalink
feat: add delete by selected mult
Browse files Browse the repository at this point in the history
  • Loading branch information
Fabio Brasileiro authored and Fabio Brasileiro committed Oct 28, 2024
1 parent ee6068f commit 1c1dba6
Show file tree
Hide file tree
Showing 7 changed files with 66 additions and 1 deletion.
Empty file added prisma/bv
Empty file.
3 changes: 3 additions & 0 deletions src/app.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import publicRouter from './routes/productRoutesPublic.js'
import cors from 'cors'
import express from 'express'
import authRoutes from './routes/authRoutes.js'
Expand Down Expand Up @@ -33,6 +34,7 @@ app.use((req, res, next) => {
app.get('/', (_req, res) => {
res.send('🚀 Api next payment funcionando atualizado?')
})

app.head('/', (req, res) => {
res.send(res)
})
Expand All @@ -45,6 +47,7 @@ app.use('/api', createUserRouter) // Adicione '/api' como prefixo para as rotas
app.use('/api', createUnitRouter) // Adicione '/api' como prefixo para as rotas de autenticação
app.use('/proposal', proposalRoutes) // Adicione '/api' como prefixo para as rotas de autenticação
app.use('/auth', validateToken) // Adicione '/api' como prefixo para as rotas de autenticação
app.use('/all', publicRouter) // Adicione '/api' como prefixo para as rotas de autenticação
// Importações necessárias
import { PrismaClient } from '@prisma/client'

Expand Down
12 changes: 12 additions & 0 deletions src/controllers/getAllCompaniesWithProducts.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import { PrismaClient } from "@prisma/client"

const prisma = new PrismaClient()

// Novo controlador para listar todas as empresas e seus produtos
export const getAllCompaniesWithProducts = async () => {
return prisma.company.findMany({
include: {
products: true, // Inclui os produtos associados a cada empresa
},
})
}
13 changes: 13 additions & 0 deletions src/controllers/productController.ts
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,19 @@ export const deleteProduct = async (req: Request, res: Response) => {
res.status(500).json({ message: (error as Error).message })
}
}
export const deleteProducts = async (req: Request, res: Response) => {
try {
const ids = req.body.ids; // Recebe o array de IDs
if (!ids || !Array.isArray(ids)) {
return res.status(400).json({ message: 'Array de IDs inválido' });
}

await productService.deleteProducts(ids);
res.status(204).end();
} catch (error) {
res.status(500).json({ message: (error as Error).message });
}
}

export const decrease = async (req: Request, res: Response) => {
const { id } = req.params
Expand Down
5 changes: 4 additions & 1 deletion src/routes/productRoutes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,8 @@ import {
increase,
stock,
updateProduct,
getProductsByCategory
getProductsByCategory,
deleteProducts
} from '../controllers/productController'
import authenticate from '../middleware/authenticate' // Middleware de autenticação
import authorize from '../middleware/authorize' // Middleware de autorização
Expand All @@ -26,6 +27,8 @@ router.get('/category/:categoryId', getProductsByCategory) // Rota para buscar p
router.get('/:id', getProductById) // Acesso público para obter um produto por ID
router.put('/:id', authorize([UserRole.ADMIN]), updateProduct) // Apenas ADMIN pode atualizar produtos
router.delete('/:id', authorize([UserRole.ADMIN]), deleteProduct) // Apenas ADMIN pode deletar produtos
router.delete('/', authorize([UserRole.ADMIN]),deleteProducts);


// Rotas para manipulação de estoque com autorização baseada em função de usuário (role)
router.post('/:id/decrease', authorize([UserRole.ADMIN]), decrease) // Apenas ADMIN pode diminuir o estoque
Expand Down
17 changes: 17 additions & 0 deletions src/routes/productRoutesPublic.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import express from 'express'
import { getAllCompaniesWithProducts } from '@/controllers/getAllCompaniesWithProducts'

const publicRouter = express.Router()

// Rota pública para listar todas as empresas e seus produtos
publicRouter.get('/companies', async (req, res) => {
try {
const companies = await getAllCompaniesWithProducts()
res.status(200).json(companies)
} catch (error) {
console.error('Erro ao buscar empresas e produtos:', error)
res.status(500).json({ message: 'Erro ao buscar empresas e produtos' })
}
})

export default publicRouter
17 changes: 17 additions & 0 deletions src/services/productService.ts
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,23 @@ export const deleteProduct = async (id: number) => {
})
}

export const deleteProducts = async (ids: number[]) => {
// Verifica se os produtos existem
const products = await prisma.product.findMany({
where: { id: { in: ids } },
});

if (products.length !== ids.length) {
throw new Error('Um ou mais produtos não foram encontrados');
}

// Deleta os produtos
return prisma.product.deleteMany({
where: { id: { in: ids } },
});
};



export const increaseProductQuantity = async (
productId: number,
Expand Down

0 comments on commit 1c1dba6

Please sign in to comment.