Skip to content

šŸ’„ Back-end do BeautyManager, um sistema web no modelo SaaS (Software as a Service) desenvolvido para facilitar a gestĆ£o de salƵes de beleza, otimizando o controle de clientes, agendamentos e serviƧos.

License

Notifications You must be signed in to change notification settings

Antonio-Savio/BeautyManager-back-end

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Ā 

History

10 Commits
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 

Repository files navigation

BeautyManager - Back-End

Node.js Express.js TypeScript Prisma PostgreSQL Stripe Vercel License: MIT

šŸ’” Sobre

Este repositório contém a API Back-End para o sistema BeautyManager, uma plataforma SaaS (Software as a Service) desenvolvida para a gestão eficiente de salões de beleza. Construída com Node.js, Express e TypeScript, esta API é o núcleo do sistema, responsÔvel por:

  • Gerenciar dados de usuĆ”rios, clientes, serviƧos (assignments) e agendamentos.
  • Implementar a lógica de negócios e regras de acesso.
  • Gerenciar autenticação e autorização de usuĆ”rios via JWT.
  • Integrar-se com o Stripe para processar pagamentos, gerenciar assinaturas (planos gratuito e premium) e lidar com webhooks.

A API serve como a fonte de dados e lógica para o Front-End do BeautyManager.


🌐 Sistema em funcionamento

  • Aplicação Front-End Consumindo esta API:

demonstração de funcionalidades do BeautyManager


šŸ”— Links da aplicação


āœ… Funcionalidades Principais e Destaques

  • Modelo SaaS com Gerenciamento de Assinaturas: Lógica para lidar com diferentes nĆ­veis de acesso (gratuito e premium) baseados no status da assinatura do usuĆ”rio, gerenciada via Stripe.
  • Autenticação Segura (JWT): Implementação de autenticação stateless usando JSON Web Tokens, com middleware (isAuthenticated) para proteger rotas.
  • Autorização Baseada em Assinatura: Verificação do status da assinatura do usuĆ”rio para liberar acesso a funcionalidades premium.
  • API RESTful: Endpoints bem definidos para operaƧƵes CRUD em UsuĆ”rios, Clientes, ServiƧos (Assignments) e Agendamentos.
  • ORM Moderno: Utilização do Prisma para interação com o banco de dados PostgreSQL, garantindo type-safety, migraƧƵes simplificadas e alta produtividade no desenvolvimento.
  • Integração Completa com Stripe:
    • Criação de sessƵes de checkout do Stripe.
    • Manipulação de webhooks do Stripe para atualizar o status das assinaturas em tempo real.
    • Criação de links para o Portal do Cliente Stripe.
  • Código Tipado (TypeScript): Desenvolvimento 100% em TypeScript para maior robustez, manutenibilidade e prevenção de erros em tempo de desenvolvimento.
  • Arquitetura EscalĆ”vel: Design modular com separação de responsabilidades (controllers, services, middlewares) e uso de banco de dados relacional eficiente, preparado para crescimento.

āš™ļø Tecnologias Utilizadas

  • Runtime: Node.js
  • Framework: Express.js
  • Linguagem: TypeScript
  • Banco de Dados: PostgreSQL
  • ORM: Prisma
  • Autenticação: bcryptjs (Hashing de Senha), jsonwebtoken (JWT)
  • Pagamentos: Stripe
  • Middleware: CORS, Body-Parser
  • Implantação: Vercel

šŸ—ŗļø Endpoints da API

Autenticação (isAuthenticated) necessÔria para rotas marcadas com (auth).

UsuƔrios (User)

  • POST /users - Cadastra um novo usuĆ”rio (requer name, email, password no body).
  • POST /session - Realiza login (requer email, password no body), retorna token JWT.
  • GET /user - ObtĆ©m detalhes do usuĆ”rio autenticado. (auth)
  • PUT /user - Atualiza dados do usuĆ”rio autenticado (requer dados como name, address no body). (auth)
  • GET /status - Verifica o status da assinatura (ativo/inativo) do usuĆ”rio autenticado. (auth)

ServiƧos (Assignment)

  • POST /assignment - Cria um novo serviƧo (requer name, price no body). (auth)
  • GET /assignments - Lista os serviƧos do usuĆ”rio. (auth)
  • DELETE /assignment - Deleta um serviƧo (requer assignment_id como query parameter). (auth)
  • GET /assignmentsnumber - Conta o nĆŗmero de serviƧos do usuĆ”rio. (auth)
  • GET /assignment - ObtĆ©m detalhes de um serviƧo especĆ­fico (requer assignment_id como query parameter). (auth)
  • PUT /assignment - Atualiza um serviƧo (requer assignment_id como query parameter e name, price no body). (auth)

Clientes (Customer)

  • POST /customer - Cria um novo cliente (requer name, phone no body). (auth)
  • GET /customers - Busca clientes do usuĆ”rio pelo nome, ou telefone (aceita name ou phone como query parameter para busca). (auth)
  • GET /customerlist - Lista todos os clientes do usuĆ”rio autenticado. (auth)
  • GET /customer - ObtĆ©m detalhes de um cliente especĆ­fico (requer customer_id como query parameter). (auth)
  • DELETE /customer - Deleta um cliente (requer customer_id como query parameter). (auth)
  • PUT /customer - Atualiza um cliente (requer customer_id como query parameter e name, phone no body). (auth)

Agendamentos (Scheduling)

  • POST /schedule - Cria um novo agendamento (requer customer_id, assignment_id, time no body). (auth)
  • GET /schedule - Lista os agendamentos do usuĆ”rio. (auth)
  • DELETE /schedule - Deleta um agendamento (requer schedule_id como query parameter). (auth)

Assinaturas (Subscription - Stripe)

  • POST /subscribe - Cria uma sessĆ£o de checkout do Stripe para o usuĆ”rio iniciar/alterar assinatura. (auth)
  • POST /webhooks - Endpoint pĆŗblico para receber eventos do Stripe (requer bodyParser.raw, assinatura verificada).
  • POST /create-portal - Cria uma sessĆ£o do Portal do Cliente Stripe para o usuĆ”rio gerenciar sua assinatura. (auth)

⇅ Relação entre tabelas do banco

relação entre as tabelas do banco de dados

A interação com o banco de dados PostgreSQL é gerenciada pelo Prisma ORM. O schema (prisma/schema.prisma) define os seguintes modelos principais:

  • User: Representa os usuĆ”rios do sistema (proprietĆ”rios/gerentes de salĆ£o). ContĆ©m informaƧƵes de login, dados pessoais e relacionamento com assinaturas, serviƧos, clientes e agendamentos.
  • Subscription: Armazena o status e detalhes da assinatura Stripe de cada usuĆ”rio.
  • Assignment: Representa os serviƧos oferecidos pelo salĆ£o (ex: corte, manicure).
  • Customer: Armazena os dados dos clientes do salĆ£o.
  • Scheduling: Registra os agendamentos, relacionando UsuĆ”rio, Cliente e ServiƧo.

šŸ“ Estrutura do Projeto

O projeto estĆ” organizado na seguinte estrutura:

/prisma
  ā”œā”€ā”€ schema.prisma   # modelos do banco de dados
/src
  ā”œā”€ā”€ @types/express/ # Extenção da tipagem do express para incluir o user_id
  ā”œā”€ā”€ controllers/    # Controladores da aplicação
  ā”œā”€ā”€ middlewares/    # Middleware para autenticação de rotas
  ā”œā”€ā”€ prisma/         # Instancia o PrismaClient para se comunicar com o banco
  ā”œā”€ā”€ services/       # Lógica de negócios
  ā”œā”€ā”€ utils           # FunƧƵes utilitĆ”rias do stripe
  ā”œā”€ā”€ routes.ts       # Definição das rotas
  └── server.ts       # Parte mais alta da aplicação para definição de middlewares globais

šŸš€ Como Executar Localmente

PrƩ-requisitos

  • Node.js
  • NPM ou Yarn
  • Git
  • Banco de Dados PostgreSQL
  • Conta na Stripe configurada com:
    • Chaves de API (Secret Key).
    • Um produto e um preƧo criados para a assinatura premium.
    • Um endpoint de Webhook configurado para apontar para sua API local.

Instalação e Configuração

Siga os passos abaixo para rodar o projeto localmente:

# Clone o repositório
git clone https://github.com/Antonio-Savio/BeautyManager-back-end.git

# Acesse o diretório do projeto
cd BeautyManager

# Instale as dependĆŖncias
npm install

Configuração do Ambiente

Crie um arquivo .env e adicione as variƔveis de ambiente necessƔrias, como:

# Conexão com o Banco de Dados PostgreSQL
DATABASE_URL="postgresql://USER:PASSWORD@HOST:PORT/DATABASE?schema=public"

# Segredo para assinatura e verificação do JWT
JWT_SECRET="SEU_SEGREDO_PARA_JWT"

#Porta do seu servidor local
PORT=SUA_PORTA

# Chave PĆŗblica da API Stripe
NEXT_PUBLIC_STRIPE_PUBLIC_KEY="SUA_CHAVE_PUBLICA_STRIPE"

# Chave Secreta da API Stripe
STRIPE_API_KEY="SUA_CHAVE_SECRETA_STRIPE"

# ID do PreƧo (Price ID) do seu plano de assinatura no Stripe
STRIPE_PRICE="SEU_PRICE_ID_STRIPE"

# URL para onde o Stripe redirecionarÔ após sucesso/falha no checkout
STRIPE_REDIRECT_URL="http://localhost:3000/dashboard" # Ajuste conforme seu front-end

# Chave Secreta do Endpoint de Webhook (Webhook Signing Secret) (whsec_...)
STRIPE_WEBHOOK_SECRET="SUA_CHAVE_SECRETA_WEBHOOK_STRIPE"

Configuração do Banco de Dados

Certifique-se de que seu PostgreSQL esteja rodando e as credenciais no DATABASE_URL estejam corretas. Execute as migraƧƵes do Prisma:

# Aplica as migraƧƵes para criar/atualizar as tabelas no banco
npx prisma migrate dev
# ou
yarn prisma migrate dev

# (Opcional) Gera o Prisma Client se necessƔrio
npx prisma generate
# ou
yarn prisma generate

Execute em sua mƔquina

yarn dev
# ou
npm run dev

ā˜ļø Implantação / Deploy

Este projeto estÔ configurado para implantação na Vercel.

  • O arquivo vercel.json fornece a configuração bĆ”sica.
  • O script vercel-build no package.json ("tsc --build && prisma generate && prisma migrate deploy") lida com o processo de build:
    1. Compila TypeScript para JavaScript.
    2. Gera o Prisma Client.
    3. Aplica as migraƧƵes do banco de dados.
  • Configuração Essencial: Ɖ crucial configurar todas as variĆ”veis de ambiente listadas na seção .env nas configuraƧƵes da plataforma de hospedagem.
  • Webhook: O endpoint de webhook (/webhooks) na URL de produção deve ser configurado corretamente no dashboard do Stripe.
  • Banco de Dados: Utilize um serviƧo de banco de dados PostgreSQL hospedado (ex: Neon, Supabase, ElephantSQL) e configure a DATABASE_URL de acordo.

šŸ¤ Contribuição

Contribuições são bem-vindas! Siga os passos abaixo:

  1. FaƧa um fork do projeto.
  2. Crie uma branch para sua feature (git checkout -b feature/nova-feature).
  3. Commit suas mudanƧas (git commit -m 'Adiciona nova feature').
  4. Push para a branch (git push origin feature/nova-feature).
  5. Abra um Pull Request.

šŸ“„ LicenƧa

Este projeto estƔ sob a licenƧa MIT. Consulte o arquivo LICENSE para mais detalhes.


šŸ“§ Contato

Se tiver dúvidas ou sugestões, entre em contato:

About

šŸ’„ Back-end do BeautyManager, um sistema web no modelo SaaS (Software as a Service) desenvolvido para facilitar a gestĆ£o de salƵes de beleza, otimizando o controle de clientes, agendamentos e serviƧos.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published