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.
- Arquitetura
- Rotas
- Requisitos
- Entidades
- Atributos
- Diagrama UML (FASE 1)
- Executando o projeto
- Ferramentas Utilizadas para Construção da Aplicação
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.).
-
POST
/servcad/clientes
- Descrição: Cria um cliente.
- Dados necessários:
- Body:
{ "nome": "string", "email": "string" }
- Body:
-
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" }
- Body:
-
POST
/servcad/aplicativos
- Descrição: Cria um aplicativo.
- Dados necessários:
- Body:
{ "nome": "string", "custoMensal": "number" }
- Body:
-
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" }
- Parâmetros:
-
POST
/servcad/assinaturas
- Cria uma assinatura válida.- Body:
{ "codApp": "UUID", "codCli": "UUID", }
- Body:
-
GET
/servcad/assinaturas/{tipo}
- Retorna uma lista das assinaturas ativas, canceladas e de todas cadastradas.- Parâmetros:
tipo
: string (ativos, cancelados, todos)
- Parâmetros:
-
GET
/servcad/asscli/{codcli}
- Retorna a lista de assinaturas de um cliente.- Parâmetros:
codcli
: UUID do cliente
- Parâmetros:
-
GET
/servcad/assapp/{codapp}
- Retorna a lista de assinaturas por aplicativo.- Parâmetros:
codapp
: UUID do aplicativo
- Parâmetros:
-
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
- Parâmetros:
Também disponível em http://localhost:3333/docs após a inicialização do projeto.
- 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;
- Deve ser possível solicitar o registro de um pagamento;
- Deve ser possível retornar a validade de uma assinatura específica
- 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;
A aplicação deve conter as seguintes entidades: Aplicativo
,Cliente
,Assinatura
,Pagamento
,Usuário
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 |
Atributo | Descrição | Tipo |
---|---|---|
codigo | Código identificador do cliente | UUID |
nome | Nome do cliente | String |
E-mail do cliente | String |
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 |
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 |
Atributo | Descrição | Tipo |
---|---|---|
usuario | Identificador do usuário para login | String |
senha | Senha de acesso do usuário | String |
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