Enviar arquivos para "/"

This commit is contained in:
2026-04-29 01:14:10 +00:00
parent 26ea826831
commit e324fdcec6
3 changed files with 1829 additions and 1416 deletions

292
DOCUMENTATION.md Normal file
View File

@@ -0,0 +1,292 @@
# Documentação de API - Biblioteca do Usuário (GameVerse)
> **Versão**: 1.0.0
> **Data**: 28/04/2026
> **Serviço**: Biblioteca do Usuário (Library Service)
---
## Base URLs
### Ambiente de Desenvolvimento
```
http://localhost:3005
```
### Ambiente de Produção
```
https://api.gameverse.com.br/library
```
---
## Endpoints
| Método | Endpoint | Descrição |
|--------|----------|------------|
| POST | `/library/add` | Adiciona item à biblioteca |
| GET | `/library/user/:user_id` | Lista itens do usuário |
| POST | `/library/integration/payment-approved` | Confirmação de pagamento |
---
## 1. Adicionar Item à Biblioteca
### POST `/library/add`
Adiciona um item manualmente à biblioteca do usuário.
**URL Completa (Produção)**:
```
POST https://api.gameverse.com.br/library/add
```
**Request Body**:
```json
{
"user_id": 1,
"type": "game",
"item_id": 123,
"title": "The Witcher 3",
"platform": "Steam"
}
```
**Parâmetros**:
| Campo | Tipo | Obrigatório | Descrição |
|-------|------|-------------|-----------|
| user_id | integer | ✅ | ID do usuário |
| type | string | ✅ | "game" ou "gift_card" |
| item_id | integer | ✅ | ID do item na loja |
| title | string | ✅ | Título do jogo/cartão |
| platform | string | ❌ | Plataforma (Steam, Epic, etc) |
**Response Sucesso (200)**:
```json
{
"success": true,
"message": "Item adicionado à biblioteca com sucesso",
"data": {
"id": 1,
"user_id": 1,
"type": "game",
"item_id": 123,
"title": "The Witcher 3",
"platform": "Steam",
"acquired_at": "2026-04-28T10:00:00.000Z"
}
}
```
**Response Erro (400/500)**:
```json
{
"success": false,
"message": "Erro ao adicionar item",
"error": "Mensagem de erro"
}
```
---
## 2. Listar Biblioteca do Usuário
### GET `/library/user/:user_id`
Retorna todos os itens da biblioteca de um usuário específico.
**URL Completa (Produção)**:
```
GET https://api.gameverse.com.br/library/user/1
```
**Parâmetros na URL**:
| Campo | Tipo | Descrição |
|-------|------|-----------|
| user_id | integer | ID do usuário (path param) |
**Response Sucesso (200)**:
```json
{
"success": true,
"message": "Biblioteca carregada com sucesso",
"data": [
{
"id": 1,
"user_id": 1,
"type": "game",
"item_id": 123,
"title": "The Witcher 3: Wild Hunt",
"platform": "Steam",
"acquired_at": "2026-04-28T10:00:00.000Z"
},
{
"id": 2,
"user_id": 1,
"type": "gift_card",
"item_id": 456,
"title": "Steam Gift Card $50",
"platform": "Steam",
"acquired_at": "2026-04-27T15:30:00.000Z"
}
]
}
```
**Response Erro (404)**:
```json
{
"success": false,
"message": "Usuário não encontrado",
"error": "Nenhum item na biblioteca"
}
```
---
## 3. Confirmação de Pagamento (Integração)
### POST `/library/integration/payment-approved`
Endpoint para integração com o serviço de pagamentos. Recebe confirmação de pagamento aprovado e adiciona o item automaticamente à biblioteca.
**URL Completa (Produção)**:
```
POST https://api.gameverse.com.br/library/integration/payment-approved
```
**Request Body**:
```json
{
"user_id": 1,
"type": "game",
"item_id": 789,
"title": "Cyberpunk 2077",
"platform": "GOG"
}
```
**Fluxo de Integração**:
1. Serviço de pagamentos envia dados após aprovação
2. Biblioteca verifica se item já existe
3. Se não existir, adiciona ao banco
4. Retorna confirmação de sucesso ou erro
**Response Sucesso (200)**:
```json
{
"success": true,
"message": "Pagamento confirmado e item adicionado à biblioteca",
"data": {
"user_id": 1,
"item_id": 789,
"title": "Cyberpunk 2077"
}
}
```
**Response Item Duplicado (200)**:
```json
{
"success": true,
"message": "Item já está na biblioteca do usuário",
"data": {
"user_id": 1,
"item_id": 789,
"title": "Cyberpunk 2077"
}
}
```
---
## Códigos de Status HTTP
| Código | Descrição |
|--------|-----------|
| 200 | Sucesso |
| 400 | Erro na requisição (dados inválidos) |
| 404 | Recurso não encontrado |
| 500 | Erro interno do servidor |
---
## Padrão de Respostas
Todas as respostas seguem este formato:
```json
{
"success": boolean,
"message": string,
"data": any,
"error": any
}
```
---
## Headers Obrigatórios
Para todas as requisições, incluir:
```
Content-Type: application/json
Authorization: Bearer <token_jwt>
```
---
## Exemplos de Uso
### cURL - Adicionar Item
```bash
curl -X POST https://api.gameverse.com.br/library/add \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <token>" \
-d '{
"user_id": 1,
"type": "game",
"item_id": 123,
"title": "The Witcher 3",
"platform": "Steam"
}'
```
### cURL - Listar Biblioteca
```bash
curl -X GET https://api.gameverse.com.br/library/user/1 \
-H "Authorization: Bearer <token>"
```
### JavaScript (Fetch)
```javascript
// Adicionar item
fetch('https://api.gameverse.com.br/library/add', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer <token>'
},
body: JSON.stringify({
user_id: 1,
type: 'game',
item_id: 123,
title: 'The Witcher 3',
platform: 'Steam'
})
})
.then(res => res.json())
.then(data => console.log(data));
```
---
## Contato
Desenvolvido por: André de Oliveira Braga e Izadora Lima de Mendonça
Projeto GameVerse - Microsserviços
Centro Universitário Uninorte - Curso de Sistemas de Informação

121
package-lock.json generated
View File

@@ -10,7 +10,9 @@
"license": "MIT",
"dependencies": {
"cors": "^2.8.5",
"dotenv": "^16.4.0",
"express": "^4.18.2",
"jsonwebtoken": "^9.0.2",
"mysql2": "^3.9.0"
},
"devDependencies": {
@@ -160,6 +162,12 @@
"node": ">=8"
}
},
"node_modules/buffer-equal-constant-time": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz",
"integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==",
"license": "BSD-3-Clause"
},
"node_modules/bytes": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
@@ -313,6 +321,18 @@
"npm": "1.2.8000 || >= 1.4.16"
}
},
"node_modules/dotenv": {
"version": "16.6.1",
"resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.6.1.tgz",
"integrity": "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==",
"license": "BSD-2-Clause",
"engines": {
"node": ">=12"
},
"funding": {
"url": "https://dotenvx.com"
}
},
"node_modules/dunder-proto": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
@@ -327,6 +347,15 @@
"node": ">= 0.4"
}
},
"node_modules/ecdsa-sig-formatter": {
"version": "1.0.11",
"resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz",
"integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==",
"license": "Apache-2.0",
"dependencies": {
"safe-buffer": "^5.0.1"
}
},
"node_modules/ee-first": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
@@ -717,6 +746,97 @@
"integrity": "sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==",
"license": "MIT"
},
"node_modules/jsonwebtoken": {
"version": "9.0.3",
"resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.3.tgz",
"integrity": "sha512-MT/xP0CrubFRNLNKvxJ2BYfy53Zkm++5bX9dtuPbqAeQpTVe0MQTFhao8+Cp//EmJp244xt6Drw/GVEGCUj40g==",
"license": "MIT",
"dependencies": {
"jws": "^4.0.1",
"lodash.includes": "^4.3.0",
"lodash.isboolean": "^3.0.3",
"lodash.isinteger": "^4.0.4",
"lodash.isnumber": "^3.0.3",
"lodash.isplainobject": "^4.0.6",
"lodash.isstring": "^4.0.1",
"lodash.once": "^4.0.0",
"ms": "^2.1.1",
"semver": "^7.5.4"
},
"engines": {
"node": ">=12",
"npm": ">=6"
}
},
"node_modules/jsonwebtoken/node_modules/ms": {
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
"license": "MIT"
},
"node_modules/jwa": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.1.tgz",
"integrity": "sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==",
"license": "MIT",
"dependencies": {
"buffer-equal-constant-time": "^1.0.1",
"ecdsa-sig-formatter": "1.0.11",
"safe-buffer": "^5.0.1"
}
},
"node_modules/jws": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/jws/-/jws-4.0.1.tgz",
"integrity": "sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA==",
"license": "MIT",
"dependencies": {
"jwa": "^2.0.1",
"safe-buffer": "^5.0.1"
}
},
"node_modules/lodash.includes": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz",
"integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==",
"license": "MIT"
},
"node_modules/lodash.isboolean": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz",
"integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==",
"license": "MIT"
},
"node_modules/lodash.isinteger": {
"version": "4.0.4",
"resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz",
"integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==",
"license": "MIT"
},
"node_modules/lodash.isnumber": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz",
"integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==",
"license": "MIT"
},
"node_modules/lodash.isplainobject": {
"version": "4.0.6",
"resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
"integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==",
"license": "MIT"
},
"node_modules/lodash.isstring": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz",
"integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==",
"license": "MIT"
},
"node_modules/lodash.once": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz",
"integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==",
"license": "MIT"
},
"node_modules/long": {
"version": "5.3.2",
"resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz",
@@ -1115,7 +1235,6 @@
"version": "7.7.4",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz",
"integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==",
"dev": true,
"license": "ISC",
"bin": {
"semver": "bin/semver.js"

View File

@@ -17,7 +17,9 @@
],
"license": "MIT",
"dependencies": {
"dotenv": "^16.4.0",
"express": "^4.18.2",
"jsonwebtoken": "^9.0.2",
"mysql2": "^3.9.0",
"cors": "^2.8.5"
},