Skip to content

Commit 11ef724

Browse files
Adicionei validação de associação de produto e aprimorar detalhes de resposta
Evitei adicionar um produto a várias categorias verificando associações existentes antes de adicionar. Aprimorei mensagens de resposta para incluir detalhes de categoria para operações de adicionar e remover produtos. Adicionei um novo arquivo de dados de teste para produtos.
1 parent d16eaad commit 11ef724

File tree

2 files changed

+126
-2
lines changed

2 files changed

+126
-2
lines changed

‎src/api/controllers/category.controller.js‎

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -198,10 +198,26 @@ exports.addProduct = async (req, res) =>{
198198
returnres.status(404).json({message: 'Produto não encontrado'});
199199
}
200200

201+
// Verifica se o produto já está associado a alguma categoria
202+
constexistingCategories=awaitproduct.getCategories();
203+
if(existingCategories&&existingCategories.length>0){
204+
returnres.status(400).json({
205+
message: 'Este produto já está associado a uma categoria',
206+
currentCategory: {
207+
id: existingCategories[0].id_categoria,
208+
nome: existingCategories[0].nome
209+
}
210+
});
211+
}
212+
201213
awaitcategory.addProduct(product);
202214

203215
res.status(200).json({
204-
message: 'Produto adicionado à categoria com sucesso!'
216+
message: 'Produto adicionado à categoria com sucesso!',
217+
category: {
218+
id: category.id_categoria,
219+
nome: category.nome
220+
}
205221
});
206222
}catch(error){
207223
res.status(500).json({
@@ -230,7 +246,11 @@ exports.removeProduct = async (req, res) =>{
230246
awaitcategory.removeProduct(product);
231247

232248
res.status(200).json({
233-
message: 'Produto removido da categoria com sucesso!'
249+
message: 'Produto removido da categoria com sucesso!',
250+
category: {
251+
id: category.id_categoria,
252+
nome: category.nome
253+
}
234254
});
235255
}catch(error){
236256
res.status(500).json({

‎src/api/tests/products.json‎

Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
[
2+
{
3+
"nome": "Processador AMD Ryzen 7 5800X",
4+
"descricao": "Processador AMD Ryzen 7 5800X, 8-Core, 16-Threads, 3.8GHz (4.7GHz Max Turbo), Cache 36MB, AM4, Sem Vídeo",
5+
"preco": 1899.90,
6+
"estoque": 15
7+
},
8+
{
9+
"nome": "Placa de Vídeo RTX 3060 Ti",
10+
"descricao": "Placa de Vídeo NVIDIA GeForce RTX 3060 Ti, 8GB GDDR6, Ray Tracing, DLSS, PCI-Express 4.0",
11+
"preco": 2499.90,
12+
"estoque": 8
13+
},
14+
{
15+
"nome": "Memória RAM Corsair Vengeance",
16+
"descricao": "Memória RAM Corsair Vengeance RGB Pro, 16GB (2x8GB), 3200MHz, DDR4, CL16",
17+
"preco": 459.90,
18+
"estoque": 30
19+
},
20+
{
21+
"nome": "SSD Samsung 970 EVO Plus",
22+
"descricao": "SSD Samsung 970 EVO Plus, 1TB, M.2 NVMe, Leitura 3500MB/s, Gravação 3300MB/s",
23+
"preco": 799.90,
24+
"estoque": 25
25+
},
26+
{
27+
"nome": "Monitor Gamer LG UltraGear",
28+
"descricao": "Monitor Gamer LG UltraGear 27\" IPS, Wide, 144 Hz, 2K QHD, 1ms, FreeSync Premium, HDR 10, 99% sRGB",
29+
"preco": 2299.90,
30+
"estoque": 12
31+
},
32+
{
33+
"nome": "Teclado Mecânico Redragon Kumara",
34+
"descricao": "Teclado Mecânico Redragon Kumara RGB, Switch Blue, ABNT2, Preto",
35+
"preco": 289.90,
36+
"estoque": 40
37+
},
38+
{
39+
"nome": "Mouse Gamer Logitech G502",
40+
"descricao": "Mouse Gamer Logitech G502 HERO, RGB Lightsync, 16000 DPI, 11 Botões, Ajuste de Peso",
41+
"preco": 349.90,
42+
"estoque": 35
43+
},
44+
{
45+
"nome": "Headset Gamer HyperX Cloud Alpha",
46+
"descricao": "Headset Gamer HyperX Cloud Alpha, Drivers Dual Chamber, Multi Plataforma, P2, Preto/Vermelho",
47+
"preco": 599.90,
48+
"estoque": 20
49+
},
50+
{
51+
"nome": "Placa-Mãe ASUS ROG STRIX B550-F",
52+
"descricao": "Placa-Mãe ASUS ROG STRIX B550-F GAMING, AMD AM4, ATX, DDR4",
53+
"preco": 1599.90,
54+
"estoque": 10
55+
},
56+
{
57+
"nome": "Fonte de Alimentação Corsair RM750x",
58+
"descricao": "Fonte de Alimentação Corsair RM750x, 750W, 80 Plus Gold, Modular",
59+
"preco": 899.90,
60+
"estoque": 18
61+
},
62+
{
63+
"nome": "PC Gamer High-End Montado",
64+
"descricao": "PC Gamer completo com Ryzen 9 5950X, RTX 4090, 64GB RAM, SSD 2TB NVMe, Water Cooler, Gabinete Premium",
65+
"preco": 25999.90,
66+
"estoque": 5
67+
},
68+
{
69+
"nome": "PC Office Básico",
70+
"descricao": "Computador para escritório com Intel i3 12100, 8GB RAM, SSD 256GB, Monitor 21.5\", Teclado e Mouse",
71+
"preco": 2899.90,
72+
"estoque": 25
73+
},
74+
{
75+
"nome": "Licença Microsoft Windows 11 Pro",
76+
"descricao": "Licença digital perpétua Windows 11 Pro 64 bits, ativação online",
77+
"preco": 999.90,
78+
"estoque": 50
79+
},
80+
{
81+
"nome": "Microsoft Office 365 Business",
82+
"descricao": "Assinatura anual Microsoft 365 Business com Word, Excel, PowerPoint, Teams e 1TB OneDrive",
83+
"preco": 499.90,
84+
"estoque": 100
85+
},
86+
{
87+
"nome": "Impressora Multifuncional HP Smart Tank",
88+
"descricao": "Impressora Multifuncional Tanque de Tinta, Wi-Fi, USB, Cópia, Digitalização, Impressão Frente e Verso",
89+
"preco": 1299.90,
90+
"estoque": 15
91+
},
92+
{
93+
"nome": "Scanner Profissional Epson WorkForce",
94+
"descricao": "Scanner de mesa com alimentador automático, digitalização duplex, 35ppm, resolução 600dpi",
95+
"preco": 2499.90,
96+
"estoque": 8
97+
},
98+
{
99+
"nome": "No-Break APC 1500VA",
100+
"descricao": "No-Break APC Back-UPS 1500VA, Bivolt, 8 tomadas, proteção contra surtos",
101+
"preco": 899.90,
102+
"estoque": 20
103+
}
104+
]

0 commit comments

Comments
(0)