Skip to content

Serviço principal de uma sistema de assinaturas construído com NestJS, Typescript, PrismaORM e Postgresql. Estruturado para seguir os princípios de Clean Architecture

Notifications You must be signed in to change notification settings

RenanFachin/PUCRS_subscription-control-system

Repository files navigation

Subscription Control System

Considerando mundo de hoje, o problema propõem a criação de uma aplicação que trabalha com o modelo de assinaturas.O cliente poderá baixar os aplicativos gratuitamente na loja, porém eles só devem estar disponíveis caso o cliente tenha um assinatura paga.

Com isto, é necessário um sistema para manter o controle das assinaturas, este sistema deve ser capaz de, periodicamente, verificar se a assinatura continua válida. Ao assinar um aplicativo, o sistema deve automaticamente gerar um código, que juntamente com o código de identificação do cliente, fazem a liberação do aplicativo.

Índice

Arquitetura

Diagrama do Clean Arch

A escolha da arquitetura para o projeto foi a arquitetura de microsserviços em conjunto com o framework NestJS, que é altamente opinativo e que propõe a fácil implementação de princípios de SOLID, Clean Architecture, e DDD na elaboração do projeto back-end.

Uma arquitetura de microsserviços nos permite uma arquitetura modular e escalável, onde podemos desenvolver diversos módulos de forma independente e apenas acoplar em um serviço principal. Pode ser entendida também como uma arquitetura em 4 camadas, porém, unificando as camadas de Infraestrutura e Apresentação.

Este padrão de 4 camadas, basicamente é o DDD, que não nos impõe uma maneira específica de escrever nossas aplicações, mas oferece um conjunto de conceitos e práticas que podem ser traduzidos para código (entidades, casos de uso, etc.).

Rotas

Rotas

Cliente

  • POST /servcad/clientes

    • Descrição: Cria um cliente.
    • Dados necessários:
      • Body:
        {
          "nome": "string",
          "email": "string"
        }
  • GET /servcad/clientes

    • Descrição: Retorna uma lista de todos os clientes cadastrados.
  • GET /servcad/client/{id}

    • Descrição: Retorna os dados de um usuário específico.
    • Parâmetros:
      • id (UUID): Identificador único do cliente.
  • PATCH /servcad/client/{id}

    • Descrição: Edita os dados cadastrados por um cliente.
    • Parâmetros:
      • id (UUID): Identificador único do cliente.
    • Dados necessários:
      • Body:
        {
          "nome": "string",
          "email": "string"
        }

Aplicativos

  • POST /servcad/aplicativos

    • Descrição: Cria um aplicativo.
    • Dados necessários:
      • Body:
        {
          "nome": "string",
          "custoMensal": "number"
        }
  • GET /servcad/aplicativos

    • Descrição: Retorna uma lista de todos os aplicativos cadastrados.
  • GET /servcad/aplicativos/{id}

    • Descrição: Retorna os detalhes de um aplicativo específico.
    • Parâmetros:
      • id (UUID): Identificador único do aplicativo.
  • PATCH /servcad/aplicativos/{id} - Atualiza o custo mensal do aplicativo.

    • Parâmetros:
      • id: UUID do aplicativo
    • Body:
      {
        "custoMensal": "number"
      }

Assinaturas

  • POST /servcad/assinaturas - Cria uma assinatura válida.

    • Body:
      {
        "codApp": "UUID",
        "codCli": "UUID",
      }
  • GET /servcad/assinaturas/{tipo} - Retorna uma lista das assinaturas ativas, canceladas e de todas cadastradas.

    • Parâmetros:
      • tipo: string (ativos, cancelados, todos)
  • GET /servcad/asscli/{codcli} - Retorna a lista de assinaturas de um cliente.

    • Parâmetros:
      • codcli: UUID do cliente
  • GET /servcad/assapp/{codapp} - Retorna a lista de assinaturas por aplicativo.

    • Parâmetros:
      • codapp: UUID do aplicativo
  • GET /verifica/{id} - Retorna, a partir de o código de uma assinatura, se a assinatura é ativa ou cancelada.

    • Parâmetros:
      • id: UUID da assinatura

Também disponível em http://localhost:3333/docs após a inicialização do projeto.

Requisitos

Requisitos funcionais

ServicoCadastramento

  • Deve ser possível gerar uma lista com todos os clientes cadastrados;
  • Deve ser possível gerar uma lista com todos os aplicativos cadatrados;
  • Deve ser possível criar uma assinatura;
  • Deve ser possível realizar uma atualização no custo mensal dos aplicativos;
  • Deve ser possível retornar uma lista com todos as assinaturas vigentes;
  • O cliente deve ser capaz de retornar uma lista com as suas assinaturas;
  • Deve ser possível retornar uma lista de assinaturas por aplicativos;

ServicoPagamentos

  • Deve ser possível solicitar o registro de um pagamento;

ServicoAssinaturasValidas

  • Deve ser possível retornar a validade de uma assinatura específica

Requisitos não-funcionais

  • Deve ser previsto um script para popular o bando de dados;
  • Deve ser possível adicionar novos microserviços conforme necessário para atender à demanda crescente;
  • Todos os dados sensíveis, como informações de pagamento, devem ser armazenados de forma segura;
  • O sistema deve estar disponível para acesso e uso dos usuários 24 horas por dia, 7 dias por semana, com um tempo de inatividade mínimo planejado para manutenção e atualizações;
  • Deve haver documentação abrangente disponível para orientar os usuários sobre como utilizar o sistema de forma eficaz;

Entidades

A aplicação deve conter as seguintes entidades: Aplicativo,Cliente,Assinatura,Pagamento,Usuário

Atributos

Aplicativo

Atributo Descrição Tipo
codigo Código identificador do aplicativo UUID
nome Nome fantasia pelo qual o aplicativo é conhecido String
custoMensal Valor da assinatura mensal Float

Cliente

Atributo Descrição Tipo
codigo Código identificador do cliente UUID
nome Nome do cliente String
email E-mail do cliente String

Assinatura

Atributo Descrição Tipo
codigo Código identificador da assinatura UUID
codApp Código do aplicativo assinado UUID
codCli Código do cliente UUID
inicioVigencia Início da vigência da assinatura Date
fimVigencia Fim da vigência da assinatura Date

Pagamento

Atributo Descrição Tipo
codigo Identificador único do pagamento UUID
codAssinatura Código da assinatura paga UUID
valorPago Valor pago Float
dataPagamento Data em que o pagamento foi efetivado Date

Usuário

Atributo Descrição Tipo
usuario Identificador do usuário para login String
senha Senha de acesso do usuário String

Diagrama UML (FASE 1)

Diagrama UML

Executando o projeto

Realizar o clone da aplicação

git clone https://github.com/RenanFachin/PUCRS_subscription-control-system.git

Instalar dependências

npm i

Subir o banco de dados PostgreSQL via docker

docker compose up -d

Copiar o arquivo com os dados de conexão e demais variáveis ambiente

cp .env.example .env

Criar as tabelas do banco de dados (em desenvolvimento)

npx prisma migrate dev

Execute o projeto

npm run start:dev

Populando o banco de dados

npx prisma db seed

Visualizando o banco de dados

npx prisma studio

Visualizando a documentação do projeto

http://localhost:3333/docs

Testes

npm run test

📘 Ferramentas Utilizadas para Construção da Aplicação

Tecnologias Principais

Módulos do NestJS

About

Serviço principal de uma sistema de assinaturas construído com NestJS, Typescript, PrismaORM e Postgresql. Estruturado para seguir os princípios de Clean Architecture

Topics

Resources

Stars

Watchers

Forks