Skip to content

Estrutura de Pastas

O projeto segue uma estrutura organizada baseada em Clean Architecture, com separação clara entre camadas.

Visão Geral

csgoflip/
├── src/                          # Código fonte do backend
├── client/                       # Frontend (Next.js 14)
├── next-shadcn-admin-dashboard/  # Admin Panel (Next.js 16)
├── docs/                         # Esta documentação
├── prisma/                       # Schema e migrações do banco
├── docker/                       # Configurações Docker
├── test/                         # Testes automatizados
└── scripts/                      # Scripts utilitários

Backend (src/)

Camada de Domínio

src/domain/
├── entities/                     # Entidades do domínio
│   ├── user.entity.ts           # Usuário
│   ├── case.entity.ts           # Caixa
│   ├── item.entity.ts           # Item
│   ├── case-opening.entity.ts   # Abertura de caixa
│   ├── battle.entity.ts         # Batalha
│   ├── battle-player.entity.ts  # Jogador de batalha
│   ├── battle-round.entity.ts   # Rodada de batalha
│   ├── battle-settlement.entity.ts # Distribuição de batalha
│   ├── transaction.entity.ts    # Transação financeira
│   ├── deposit.entity.ts        # Depósito
│   ├── withdrawal.entity.ts     # Saque
│   ├── user-inventory.entity.ts # Inventário do usuário
│   ├── upgrade.entity.ts        # Upgrade
│   ├── swap.entity.ts           # Troca
│   ├── raffle.entity.ts         # Sorteio
│   ├── raffle-ticket.entity.ts  # Ticket de sorteio
│   ├── event.entity.ts          # Evento/Battle Pass
│   ├── notification.entity.ts   # Notificação
│   └── audit-log.entity.ts      # Log de auditoria

└── repositories/                 # Interfaces dos repositórios
    ├── user.repository.interface.ts
    ├── case.repository.interface.ts
    ├── case-opening.repository.interface.ts
    ├── battle.repository.interface.ts
    ├── transaction.repository.interface.ts
    ├── deposit.repository.interface.ts
    ├── withdrawal.repository.interface.ts
    ├── user-inventory.repository.interface.ts
    ├── upgrade.repository.interface.ts
    ├── swap.repository.interface.ts
    ├── raffle.repository.interface.ts
    ├── event.repository.interface.ts
    └── notification.repository.interface.ts

Camada de Aplicação

src/application/
├── dto/                          # Data Transfer Objects
│   ├── auth.dto.ts              # DTOs de autenticação
│   ├── case.dto.ts              # DTOs de caixa
│   ├── case-opening.dto.ts      # DTOs de abertura
│   ├── battle.dto.ts            # DTOs de batalha
│   ├── payment.dto.ts           # DTOs de pagamento
│   ├── inventory.dto.ts         # DTOs de inventário
│   ├── upgrade.dto.ts           # DTOs de upgrade
│   ├── swap.dto.ts              # DTOs de swap
│   ├── raffle.dto.ts            # DTOs de sorteio
│   ├── event.dto.ts             # DTOs de evento
│   ├── notification.dto.ts      # DTOs de notificação
│   ├── admin.dto.ts             # DTOs do admin
│   └── provably-fair.dto.ts     # DTOs de verificação

├── services/                     # Serviços de aplicação
│   ├── transaction.service.ts   # Double-entry bookkeeping
│   ├── provably-fair.service.ts # Cálculo de rolls
│   ├── flip.service.ts          # Sistema FLIP
│   ├── notification.service.ts  # Envio de notificações
│   ├── probability.service.ts   # Cálculo de probabilidades
│   └── money.service.ts         # Formatação monetária

├── interfaces/                   # Interfaces de serviços externos
│   ├── payment-provider.interface.ts
│   ├── storage.interface.ts
│   └── email.interface.ts

└── use-cases/                    # Casos de uso
    ├── auth/
    │   ├── steam-callback.use-case.ts
    │   ├── logout.use-case.ts
    │   └── get-me.use-case.ts

    ├── case/
    │   ├── get-cases.use-case.ts
    │   ├── get-case-by-id.use-case.ts
    │   └── get-case-items.use-case.ts

    ├── case-opening/
    │   ├── open-case.use-case.ts
    │   ├── open-multiple-cases.use-case.ts
    │   ├── get-opening-history.use-case.ts
    │   ├── verify-opening.use-case.ts
    │   └── get-recent-openings.use-case.ts

    ├── battle/
    │   ├── create-battle.use-case.ts
    │   ├── join-battle.use-case.ts
    │   ├── get-battle.use-case.ts
    │   ├── get-active-battles.use-case.ts
    │   ├── execute-battle.use-case.ts
    │   └── cancel-battle.use-case.ts

    ├── inventory/
    │   ├── get-user-inventory.use-case.ts
    │   ├── sell-item.use-case.ts
    │   └── sell-multiple-items.use-case.ts

    ├── payment/
    │   ├── initiate-deposit.use-case.ts
    │   ├── confirm-deposit.use-case.ts
    │   ├── request-withdrawal.use-case.ts
    │   ├── approve-withdrawal.use-case.ts
    │   └── get-transactions.use-case.ts

    ├── upgrade/
    │   ├── perform-upgrade.use-case.ts
    │   ├── calculate-upgrade-chance.use-case.ts
    │   └── verify-upgrade.use-case.ts

    ├── swap/
    │   ├── create-swap.use-case.ts
    │   ├── accept-swap.use-case.ts
    │   ├── cancel-swap.use-case.ts
    │   └── get-swaps.use-case.ts

    ├── raffle/
    │   ├── get-active-raffles.use-case.ts
    │   ├── buy-tickets.use-case.ts
    │   └── draw-raffle.use-case.ts

    ├── event/
    │   ├── get-active-events.use-case.ts
    │   ├── get-event-progress.use-case.ts
    │   ├── add-event-xp.use-case.ts
    │   └── claim-reward.use-case.ts

    ├── notification/
    │   ├── get-notifications.use-case.ts
    │   ├── mark-as-read.use-case.ts
    │   └── get-unread-count.use-case.ts

    └── admin/
        ├── get-dashboard-stats.use-case.ts
        ├── get-revenue-chart.use-case.ts
        ├── get-users.use-case.ts
        ├── ban-user.use-case.ts
        ├── get-cases.use-case.ts
        ├── create-case.use-case.ts
        ├── update-case.use-case.ts
        ├── delete-case.use-case.ts
        ├── get-items.use-case.ts
        ├── create-item.use-case.ts
        ├── get-deposits.use-case.ts
        ├── confirm-deposit.use-case.ts
        ├── get-withdrawals.use-case.ts
        ├── approve-withdrawal.use-case.ts
        └── ... (40+ use cases admin)

Camada de Infraestrutura

src/infrastructure/
├── database/
│   ├── prisma.service.ts        # Serviço Prisma
│   └── repositories/            # Implementações dos repositórios
│       ├── user.repository.ts
│       ├── case.repository.ts
│       ├── case-opening.repository.ts
│       ├── battle.repository.ts
│       ├── transaction.repository.ts
│       ├── deposit.repository.ts
│       ├── withdrawal.repository.ts
│       ├── user-inventory.repository.ts
│       ├── upgrade.repository.ts
│       ├── swap.repository.ts
│       ├── raffle.repository.ts
│       ├── event.repository.ts
│       └── notification.repository.ts

├── auth/
│   ├── session.service.ts       # Gestão de sessões Redis
│   ├── steam-oauth.service.ts   # Steam OAuth
│   └── two-factor.service.ts    # 2FA TOTP

├── redis/
│   ├── redis.module.ts          # Módulo Redis
│   ├── redis.service.ts         # Operações Redis
│   └── cache.service.ts         # Cache de dados

├── locks/
│   ├── lock.module.ts           # Módulo de locks
│   └── lock.service.ts          # Distributed locks (Redlock)

├── queue/
│   ├── queue.module.ts          # Módulo BullMQ
│   └── processors/
│       ├── battle.processor.ts  # Processador de batalhas
│       └── notification.processor.ts

├── websocket/
│   ├── websocket.module.ts      # Módulo WebSocket
│   ├── websocket.gateway.ts     # Gateway Socket.io
│   └── redis-io.adapter.ts      # Adapter Redis para scaling

├── audit/
│   ├── audit.module.ts          # Módulo de auditoria
│   └── audit.service.ts         # Serviço de audit logs

├── external-apis/
│   ├── steam.service.ts         # API Steam
│   ├── payment/
│   │   ├── stripe.provider.ts   # Provider Stripe
│   │   └── pix.provider.ts      # Provider PIX
│   └── storage/
│       └── s3.service.ts        # AWS S3

├── snowflake/
│   ├── snowflake.module.ts      # Módulo Snowflake
│   └── snowflake.service.ts     # Geração de IDs

└── security/
    ├── rate-limiter.service.ts  # Rate limiting customizado
    └── ip-blacklist.service.ts  # Blacklist de IPs

Camada de Apresentação

src/presentation/
├── controllers/
│   ├── auth.controller.ts       # /api/auth/*
│   ├── case.controller.ts       # /api/cases/*
│   ├── case-opening.controller.ts # /api/cases/:id/open
│   ├── battle.controller.ts     # /api/battles/*
│   ├── inventory.controller.ts  # /api/inventory/*
│   ├── payment.controller.ts    # /api/payment/*
│   ├── upgrade.controller.ts    # /api/upgrades/*
│   ├── swap.controller.ts       # /api/swaps/*
│   ├── raffle.controller.ts     # /api/raffles/*
│   ├── event.controller.ts      # /api/events/*
│   ├── notification.controller.ts # /api/notifications/*
│   ├── live-drops.controller.ts # /api/live-drops/*
│   ├── provably-fair.controller.ts # /api/provably-fair/*
│   ├── admin.controller.ts      # /api/admin/*
│   ├── health.controller.ts     # /api/health
│   └── webhook.controller.ts    # /api/webhooks/*

├── guards/
│   ├── auth.guard.ts            # Guard de autenticação
│   └── admin.guard.ts           # Guard de admin

├── pipes/
│   ├── validation.pipe.ts       # Validação global
│   └── sanitize.pipe.ts         # Sanitização de input

├── decorators/
│   ├── current-user.decorator.ts # @CurrentUser()
│   └── public.decorator.ts      # @Public()

├── filters/
│   └── http-exception.filter.ts # Tratamento de erros

├── interceptors/
│   └── logging.interceptor.ts   # Log de requisições

└── modules/
    ├── auth.module.ts
    ├── case.module.ts
    ├── case-opening.module.ts
    ├── battle.module.ts
    ├── inventory.module.ts
    ├── payment.module.ts
    ├── upgrade.module.ts
    ├── swap.module.ts
    ├── raffle.module.ts
    ├── event.module.ts
    ├── notification.module.ts
    ├── live-drops.module.ts
    ├── provably-fair.module.ts
    ├── admin.module.ts
    └── shared.module.ts

Frontend (client/)

client/
├── app/                          # App Router (Next.js 14)
│   ├── layout.tsx               # Layout raiz
│   ├── page.tsx                 # Home (listagem de caixas)
│   │
│   ├── case/[id]/
│   │   └── page.tsx             # Abertura de caixa
│   │
│   ├── batalha/[id]/
│   │   └── page.tsx             # Visualização de batalha
│   │
│   ├── batalhas/
│   │   └── page.tsx             # Lista de batalhas
│   │
│   ├── battles/create/
│   │   └── page.tsx             # Criar batalha
│   │
│   ├── upgrade/
│   │   └── page.tsx             # Sistema de upgrade
│   │
│   ├── swap/
│   │   └── page.tsx             # Sistema de swap
│   │
│   ├── perfil/
│   │   └── page.tsx             # Perfil do usuário
│   │
│   ├── sorteios/
│   │   ├── page.tsx             # Lista de sorteios
│   │   └── [id]/page.tsx        # Detalhes do sorteio
│   │
│   ├── evento/
│   │   └── page.tsx             # Battle Pass
│   │
│   ├── auth/callback/
│   │   └── page.tsx             # Callback OAuth
│   │
│   ├── components/              # Componentes React
│   │   ├── Header.tsx           # Cabeçalho
│   │   ├── Footer.tsx           # Rodapé
│   │   ├── CaseCard.tsx         # Card de caixa
│   │   ├── CaseRoulette.tsx     # Roleta de caixa
│   │   ├── BattleRoulette.tsx   # Roleta de batalha
│   │   ├── LiveDrops.tsx        # Live drops
│   │   ├── AnimatedBalance.tsx  # Saldo animado
│   │   ├── WinScreen.tsx        # Tela de vitória
│   │   └── ui/                  # Componentes UI genéricos
│   │       ├── Button.tsx
│   │       ├── Input.tsx
│   │       ├── Modal.tsx
│   │       └── Tooltip.tsx
│   │
│   ├── lib/                     # Utilitários
│   │   ├── api.ts               # Cliente API
│   │   ├── auth-context.tsx     # Contexto de autenticação
│   │   ├── websocket-context.tsx # Contexto WebSocket
│   │   ├── toast-context.tsx    # Contexto de toasts
│   │   ├── use-user-balance.tsx # Hook de saldo
│   │   ├── use-battle-socket.tsx # Hook de batalha
│   │   └── use-live-drops.tsx   # Hook de live drops
│   │
│   └── globals.css              # Estilos globais

├── public/                       # Assets estáticos
│   ├── cases/                   # Imagens de caixas
│   ├── items/                   # Imagens de itens
│   └── icons/                   # Ícones

├── tailwind.config.ts           # Config Tailwind
├── next.config.js               # Config Next.js
└── package.json

Admin Dashboard (next-shadcn-admin-dashboard/)

next-shadcn-admin-dashboard/
├── src/
│   ├── app/                     # App Router (Next.js 16)
│   │   ├── layout.tsx           # Layout raiz
│   │   │
│   │   └── (main)/
│   │       ├── login/           # Login do admin
│   │       ├── auth/callback/   # Callback OAuth
│   │       ├── unauthorized/    # Acesso negado
│   │       │
│   │       └── dashboard/       # Área protegida
│   │           ├── layout.tsx   # Layout do dashboard
│   │           ├── page.tsx     # Home (KPIs)
│   │           │
│   │           ├── users/       # Gestão de usuários
│   │           │   ├── page.tsx
│   │           │   └── [id]/page.tsx
│   │           │
│   │           ├── cases/       # Gestão de caixas
│   │           │   └── page.tsx
│   │           │
│   │           ├── items/       # Gestão de itens
│   │           │   └── page.tsx
│   │           │
│   │           ├── battles/     # Gestão de batalhas
│   │           │   └── page.tsx
│   │           │
│   │           ├── deposits/    # Gestão de depósitos
│   │           │   └── page.tsx
│   │           │
│   │           ├── withdrawals/ # Gestão de saques
│   │           │   └── page.tsx
│   │           │
│   │           └── transactions/ # Histórico
│   │               └── page.tsx
│   │
│   ├── components/
│   │   ├── ui/                  # shadcn/ui components
│   │   │   ├── button.tsx
│   │   │   ├── card.tsx
│   │   │   ├── table.tsx
│   │   │   ├── dialog.tsx
│   │   │   └── ... (50+ componentes)
│   │   │
│   │   └── data-table/          # Tabela de dados avançada
│   │       ├── data-table.tsx
│   │       ├── columns.tsx
│   │       └── pagination.tsx
│   │
│   ├── hooks/
│   │   └── use-admin-api.ts     # Hooks React Query
│   │
│   ├── lib/
│   │   ├── api.ts               # Cliente API
│   │   └── utils.ts             # Utilitários
│   │
│   ├── contexts/
│   │   └── auth-context.tsx     # Autenticação admin
│   │
│   └── stores/
│       └── preferences/         # Preferências (tema, layout)

└── package.json

Banco de Dados (prisma/)

prisma/
├── schema.prisma                # Schema completo
├── migrations/                  # Migrações versionadas
│   ├── 20240101_init/
│   │   └── migration.sql
│   ├── 20240115_add_battles/
│   │   └── migration.sql
│   └── ...
└── seed.ts                      # Seed de dados iniciais

Docker (docker/)

docker/
├── api/                         # Docker para API
│   ├── Dockerfile
│   └── nginx/
│       └── nginx.conf

├── infra/                       # Infraestrutura local (dev)
│   ├── docker-compose.yml
│   ├── postgres/
│   │   └── init.sql
│   ├── redis/
│   │   └── redis.conf
│   ├── prometheus/
│   │   └── prometheus.yml
│   └── grafana/
│       └── dashboards/

└── production/                  # Configurações de produção
    ├── server1-infra/           # Servidor de infra
    │   ├── docker-compose.yml
    │   ├── nginx/
    │   ├── ssl/
    │   └── systemd/

    └── server2-api/             # Servidor de API
        ├── docker-compose.yml
        ├── nginx/
        └── pm2/

Testes (test/)

test/
├── unit/                        # Testes unitários
│   ├── application/
│   │   └── use-cases/
│   │       ├── open-case.use-case.spec.ts
│   │       └── create-battle.use-case.spec.ts
│   │
│   └── infrastructure/
│       └── services/
│           ├── provably-fair.service.spec.ts
│           └── transaction.service.spec.ts

├── integration/                 # Testes de integração
│   └── api/
│       ├── auth.spec.ts
│       ├── cases.spec.ts
│       └── battles.spec.ts

├── e2e/                         # Testes end-to-end
│   └── case-opening.e2e.spec.ts

└── __mocks__/                   # Mocks compartilhados
    ├── prisma.mock.ts
    └── redis.mock.ts

Convenções de Nomenclatura

TipoConvençãoExemplo
EntidadesPascalCase, singularUser, CaseOpening
Repositórios InterfaceI + Nome + RepositoryIUserRepository
Repositórios ImplNome + RepositoryUserRepository
Use CasesVerbo + Substantivo + UseCaseOpenCaseUseCase
DTOsNome + DtoCreateBattleDto
ControllersNome + ControllerBattleController
ServicesNome + ServiceTransactionService
GuardsNome + GuardAuthGuard
MódulosNome + ModuleBattleModule
Arquivoskebab-caseopen-case.use-case.ts

Documentação Técnica CSGOFlip