Skip to content

Commit

Permalink
feat: adicionar produtos por categoria e filtrar por categoria
Browse files Browse the repository at this point in the history
  • Loading branch information
fabiobrasileiroo committed Oct 19, 2024
1 parent 34a3d59 commit 4a94559
Show file tree
Hide file tree
Showing 19 changed files with 380 additions and 209 deletions.
10 changes: 5 additions & 5 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
# Use uma imagem base do Node.js
# Use a imagem base do Node.js
FROM node:22

# Defina o diretório de trabalho no container
WORKDIR /usr/src/app

# Copie o package.json e package-lock.json
# Copie o package.json e package-lock.json para o diretório de trabalho
COPY package*.json ./

# Instale as dependências da aplicação
Expand All @@ -13,11 +13,11 @@ RUN npm install
# Copie o restante do código da aplicação
COPY . .

# Compile o código TypeScript (se aplicável)
# RUN npm run build
# Gere o Prisma Client e compile o código TypeScript
RUN npx prisma generate && npm run build

# Exponha a porta que a aplicação irá usar
EXPOSE 3000

# Defina o comando para iniciar a aplicação
CMD ["node", "src/server.js"]
CMD ["node", "build/server.cjs"]
14 changes: 12 additions & 2 deletions docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,20 @@ services:
build: .
container_name: node_app-api-gateway
environment:
- DATABASE_URL=postgresql://api-gateway_owner:[email protected]/api-gateway?sslmode=require
- PORT=3000
- DATABASE_URL
- PORT
- SANDBOX_ACCESS_TOKEN
- JWT_SECRET
- SMTP_HOST
- SMTP_PORT
- SMTP_USER
- SMTP_PASS
ports:
- "3000:3000"
volumes:
- .:/usr/src/app
- /usr/src/app/node_modules # Evita sobrescrever a pasta node_modules no container
command: ["npm", "start"]
# Dependências de serviço, caso tenha banco de dados, pode adicionar aqui
# depends_on:
# - postgres
9 changes: 5 additions & 4 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

7 changes: 4 additions & 3 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
"start:dev": "tsx watch src/server.ts",
"start": "node build/server.cjs",
"build": "tsup src --out-dir build",
"build:cloud": " npx prisma generate && npx tsup src --out-dir build && node build/server.cjs",
"lint:format": "npx @biomejs/biome format --write ./",
"lint": "npx @biomejs/biome lint --write ./",
"lint:check": "npx @biomejs/biome check --write ./"
Expand All @@ -29,7 +30,9 @@
"imgbb-uploader": "1.5.1",
"jsonwebtoken": "9.0.2",
"mercadopago": "^2.0.15",
"nodemailer": "6.9.15",
"nodemailer": "6.9.15"
},
"devDependencies": {
"prisma": "^5.19.1",
"zod": "3.23.8",
"@types/bcrypt": "5.0.2",
Expand All @@ -41,7 +44,5 @@
"tsup": "8.2.4",
"tsx": "4.17.0",
"typescript": "5.5.4"
},
"devDependencies": {
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
-- AlterTable
ALTER TABLE "Product" ADD COLUMN "categoryId" INTEGER;

-- CreateTable
CREATE TABLE "Category" (
"id" SERIAL NOT NULL,
"name" TEXT NOT NULL,

CONSTRAINT "Category_pkey" PRIMARY KEY ("id")
);

-- CreateIndex
CREATE UNIQUE INDEX "Category_name_key" ON "Category"("name");

-- AddForeignKey
ALTER TABLE "Product" ADD CONSTRAINT "Product_categoryId_fkey" FOREIGN KEY ("categoryId") REFERENCES "Category"("id") ON DELETE SET NULL ON UPDATE CASCADE;
14 changes: 11 additions & 3 deletions prisma/schema.prisma
Original file line number Diff line number Diff line change
Expand Up @@ -16,14 +16,22 @@ generator client {
}

model Product {
id Int @id @default(autoincrement())
id Int @id @default(autoincrement())
name String
price Float
description String?
imageUrl String? // Campo opcional para o link da imagem
imageUrl String? // Campo opcional para o link da imagem
companyId Int
company Company @relation(fields: [companyId], references: [id])
company Company @relation(fields: [companyId], references: [id])
quantity Int
categoryId Int?
category Category? @relation(fields: [categoryId], references: [id])
}

model Category {
id Int @id @default(autoincrement())
name String @unique
products Product[]
}

model Payment {
Expand Down
34 changes: 17 additions & 17 deletions src/@types/PaymentData.ts
Original file line number Diff line number Diff line change
@@ -1,23 +1,23 @@
export interface PaymentData {
document: string | undefined;
last_name: string | undefined;
first_name: string | undefined;
email: string | undefined;
transaction_amount: number; // Valor da transação
description: string; // Descrição do pagamento
payment_method_id: string; // ID do método de pagamento (ex: 'pix')
document: string | undefined
last_name: string | undefined
first_name: string | undefined
email: string | undefined
transaction_amount: number // Valor da transação
description: string // Descrição do pagamento
payment_method_id: string // ID do método de pagamento (ex: 'pix')
payer: {
email: string; // Email do pagador
first_name: string; // Primeiro nome do pagador
last_name: string; // Sobrenome do pagador
email: string // Email do pagador
first_name: string // Primeiro nome do pagador
last_name: string // Sobrenome do pagador
identification: {
type: string; // Tipo de documento (ex: 'CPF' ou 'CNPJ')
number: string; // Número do documento (CPF ou CNPJ)
};
};
notification_url?: string; // URL de notificação opcional para callbacks de status do pagamento
external_reference?: string; // Referência externa opcional, útil para rastrear pedidos no seu sistema
type: string // Tipo de documento (ex: 'CPF' ou 'CNPJ')
number: string // Número do documento (CPF ou CNPJ)
}
}
notification_url?: string // URL de notificação opcional para callbacks de status do pagamento
external_reference?: string // Referência externa opcional, útil para rastrear pedidos no seu sistema

// Add the productId property here
productId: number; // ID of the associated product
productId: number // ID of the associated product
}
6 changes: 5 additions & 1 deletion src/@types/productTypes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,9 @@ export interface Product {
id?: number
name: string
price: number
// Adicione outros campos conforme necessário
description?: string
imageUrl?: string
quantity: number
companyId: number
categoryId?: number
}
49 changes: 34 additions & 15 deletions src/app.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,22 @@ app.use(express.json())

app.use(cors())


// Middleware para rastrear requisições
app.use((req, res, next) => {
console.log(`[${new Date().toISOString()}] ${req.method} ${req.url}`);
next();
});

// Middleware para rastrear respostas
app.use((req, res, next) => {
res.on('finish', () => {
console.log(`[${new Date().toISOString()}] ${res.statusCode} ${req.method} ${req.url}`);
});
next();
});


app.get('/', (_req, res) => {
res.send('🚀 Api next payment funcionando atualizado?')
})
Expand All @@ -33,23 +49,26 @@ app.use('/auth', validateToken) // Adicione '/api' como prefixo para as rotas de
import { PrismaClient } from '@prisma/client'

// Inicialize o Prisma Client
const prisma = new PrismaClient();
const prisma = new PrismaClient()

// Rota para testar a conexão com o banco de dados
app.get('/test-db', async (req, res) => {
try {
// Tente realizar uma consulta simples para verificar a conexão
await prisma.$connect();
res.status(200).json({ message: 'Conexão com o banco de dados foi bem-sucedida!' });
} catch (error) {
console.error('Erro ao conectar com o banco de dados:', error);
res.status(500).json({ message: 'Falha na conexão com o banco de dados.', error: (error as Error).message });
} finally {
// Feche a conexão do Prisma
await prisma.$disconnect();
}
});


try {
// Tente realizar uma consulta simples para verificar a conexão
await prisma.$connect()
res
.status(200)
.json({ message: 'Conexão com o banco de dados foi bem-sucedida!' })
} catch (error) {
console.error('Erro ao conectar com o banco de dados:', error)
res.status(500).json({
message: 'Falha na conexão com o banco de dados.',
error: (error as Error).message,
})
} finally {
// Feche a conexão do Prisma
await prisma.$disconnect()
}
})

export default app
1 change: 1 addition & 0 deletions src/assets/noImage.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export const DEFAULT_IMAGE_URL = 'https://i.ibb.co/dMNVYBj/noImae.png' // Substitua pelo link da sua imagem padrão
40 changes: 15 additions & 25 deletions src/controllers/companyController.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,9 @@ export const createCompany = async (req: Request, res: Response) => {

const createdCompany = await companyService.createCompany(companyData)
} catch (error) {
res
.status(500)
.json({
message: `Erro ao salvar company no banco de dados ${(error as Error).message}`,
})
res.status(500).json({
message: `Erro ao salvar company no banco de dados ${(error as Error).message}`,
})
}
}

Expand All @@ -21,11 +19,9 @@ export const getCompany = async (req: Request, res: Response) => {
const company = await companyService.getCompany()
res.status(200).json(company)
} catch (error) {
res
.status(500)
.json({
message: `Erro ao consultar listagem no banco de dados ${(error as Error).message}`,
})
res.status(500).json({
message: `Erro ao consultar listagem no banco de dados ${(error as Error).message}`,
})
}
}

Expand All @@ -40,11 +36,9 @@ export const getCompanyById = async (req: Request, res: Response) => {
res.status(404).json({ message: `Company not found` })
}
} catch (error) {
res
.status(500)
.json({
message: `Erro ao consultar banco de dados ${(error as Error).message}`,
})
res.status(500).json({
message: `Erro ao consultar banco de dados ${(error as Error).message}`,
})
}
}

Expand All @@ -54,11 +48,9 @@ export const updateProduct = async (req: Request, res: Response) => {
const companyData: Partial<companyType> = req.body
const updatedCompany = await companyService.updateCompany(id, companyData)
} catch (error) {
res
.status(500)
.json({
message: `Erro no banco de dados ao realizar update ${(error as Error).message}`,
})
res.status(500).json({
message: `Erro no banco de dados ao realizar update ${(error as Error).message}`,
})
}
}

Expand All @@ -67,10 +59,8 @@ export const deleteCompany = async (req: Request, res: Response) => {
const id = Number.parseInt(req.params.id, 10)
await companyService.deleteCompany(id)
} catch (error) {
res
.status(500)
.json({
message: `Erro no banco de dados ao deletar company ${(error as Error).message}`,
})
res.status(500).json({
message: `Erro no banco de dados ao deletar company ${(error as Error).message}`,
})
}
}
Loading

0 comments on commit 4a94559

Please sign in to comment.