Esta seção deve:
● Este texto auxilia no entendimento e aprendizado do sistema “Aprendizado Online”. A função deste documento é apresentar as funções e as descrições do sistema, apresentar também suas restrições de operação de propriedades gerais. O objetivo é ilustrar a descrição detalhada do documento, para auxiliar no uso e entendimento do sistema. O documento especifica todos os requisitos e foi preparado baseando-se na fase de concepção do sistema.
O documento está organizado da seguinte forma:
Nesta seção é explicada para quem este documento é destinado e sua função.
Nesta seção é explicada o problema que o sistema deve resolver.
Nesta seção é explicada o escopo do sistema, e a proposta de resolução para o problema apresentado na seção 1.2.
Nesta seção são explicadas as tecnologias utilizadas e o porque de cada uma delas.
Nesta seção é explicado o funcionamento da aplicação.
Nesta seção é explicado os recursos da aplicação.
Nesta seção são mostrados os diagramas de classes, tanto das entidades quanto da aplicação.
Nesta seção são dadas definições de todos os termos, acrônimos e abreviaturas usadas neste documento.
Nesta seção são apresentadas as restrições do sistema (até onde o sistema vai).
Nesta seção são apresentadas as regras de negócio do mercado que o software está inserido.
Nesta seção são apresentadas as possíveis características dos nossos usuários.
Nesta seção é apresentado o diagrama de casos de uso e os próprios casos de uso.
Nesta seção é feita uma correlação entre os casos de uso e os requisitos funcionais.
Este software está inserido em um problema relacionado a educação. Há muito tempo a educação é um problema principalmente no Brasil, isto por diversos fatores tais como: locomoção, classe financeira, acessibilidade, dentre outros. Pessoas diversas vezes deixam de estudar por não terem tempo ou não terem liberdade de mudanças de horários, não terem acesso fisicamente aquele curso, ou mesmo por serem obrigadas a se locomover fisicamente a alguma instituição. O ensino presencial também possui alguns problemas que podem dificultar a acessibilidade, tais como: limite de vagas, padronização do ensino, e na maioria das vezes, preços mais altos (haja vista de que para manter uma instituição física é muito mais caro do que uma online). Ao mesmo tempo, temos diversos profissionais excelentes em suas áreas que estão desempregados e que precisam de alguma renda, ou mesmo profissionais que estão empregados mas que gostariam de uma renda extra, ou ainda profissionais que adorariam ensinar pelo prazer de fazê-lo.
Baseando-se nos problemas apresentados na seção acima, este protótipo (Aprendizado Online) foi pensado, seu intuito é simular uma plataforma de cursos online, onde usuários podem criar, comprar e vender cursos de diferentes áreas para diferentes propósitos.
OBS: O sistema criado é um PROTÓTIPO cujo o intuito é mostrar minhas habilidades em JAVA e Spring Boot atreladas a um contexto fictício baseado em uma necessidade real, focado APENAS no backend da aplicação.
JAVA:
Java é uma linguagem de programação orientada a objetos que foi criada em 1995 por uma equipe de programadores liderada por James Gosling na empresa Sun Microsystems, adquirido pela empresa Oracle Corporation em 2008.
A linguagem Java, além de ser muito robusta e consolidada, é uma linguagem de tipagem forte que garante solidez e robustez para o software, um ponto que foi levado em consideração na construção deste sistema.
Spring Boot:
O Java Spring Framework (Spring Framework) é um framework bastante conhecido de nível empresarial, de software livre, para criar aplicativos independentes de nível de produção que são executados na Java Virtual Machine (JVM).
O Java Spring Boot (Spring Boot) é uma ferramenta que facilita e agiliza o desenvolvimento de aplicativos da web e de microsserviços com o Spring Framework por meio de três principais recursos:
1. AutoConfiguração
2. Uma abordagem opinativa a configuração
3. A capacidade de criar aplicativos independentes
Esses recursos trabalham juntos para oferecer uma ferramenta que permite configurar um aplicativo baseado em Spring com poucos requisitos de instalação e configuração.
Além disso, o Spring Boot é extremamente conhecido e utilizado dentro da comunidade Java, o que nos dá maior segurança em utiliza-lo, tanto de uma perspectiva técnica quanto de uma perspectiva de aprendizado
MySQL:
O MySQL é o banco de dados de código aberto mais conhecido no mundo. De acordo com o DB-Engines, o MySQL é o segundo banco de dados mais popular, ficando atrás do Oracle Database. O MySQL alimenta muitas das aplicações mais acessadas, como Facebook, Twitter, Netflix, Uber, Airbnb, Shopify e Booking.com.
Além disso, é altamente eficiente em operações de leitura e escrita, com suporte a sharding e replicação para escalabilidade horizontal.
É um banco de dados extremamente popular e possui uma comunidade grande a ativa, além de ter suporte comercial oferecido pela Oracle
A combinação destas ferramentas garantem facilidade de integração (haja vista que o Spring Data JPA facilita a integração com MySQL, oferecendo uma camada de abstração que simplifica as operações de banco de dados), performance e escabalidade (já que a combinação do Java e o Spring Boot permitem a criação de aplicações robustas e de alto desempenho que podem escalar horizontalmente com MySQL) e um ecosistema completo (Juntos, eles oferecem um ecossistema completo para o desenvolvimento de aplicações web modernas, desde a lógica de negócios até a persistência de dados).
O sistema consiste em uma API REST que funciona como uma página administrativa (Admin Page) de um software que simula a criação, compra e venda de cursos, além de exibir todas as relações possíveis entre as entidades, como por exemplo: exibir todas as compras e vendas de um usuário / curso, exibir todos os cursos de um usuário, etc.
Todas as requisições, GET, POST, PUT e DELETE (CRUD) são feitas a partir de arquivos js e todo o front da aplicação é feito utilizando arquivos html (o sistema é focado no backend porém, para demonstrar seu funcionamento alguns arquivos do front são necessários)
Todos os dados criados no sistema (salvo os dados primários criados) são persistidos por APENAS 24 horas no banco de dados, como a ideia é apenas ser um protótipo simulativo, esta abordagem foi implementada a fim de manter a quantidade de dados pequena e também facilitar o uso do sistema.
Os dados primários não podem ser deletados ou alterados, o intuito disso é que, apesar de termos uma preferência por uma quantidade pequena de dados no sistema, queremos que sempre haja alguns dados disponíveis para o uso (os detalhes deste fluxo de exceção são mostrados em seções posteriores). Portanto, para alterar / deletar dados de qualquer uma das entidades, é necessário criar (POST) registros novos (salvo os casos onde já haja recursos não primários criados).
Para facilitar a usabilidade (e por ser apenas um protótipo), optamos por não implementar autenticação no sistema, portanto, o sistema pode ser usado por qualquer pessoa sem a necessidade de cadastrar-se / autenticar-se
Screenshot da aplicação
Essa é uma screenshot tela inicial do sistema, que começa pela tabela de usuários. Aqui, você pode ver todos os usuários cadastrados e fazer alterações (CRUD) além de pegar informações dos usuários.
Abaixo, esta uma explicação de como utilizar os recursos da aplicação, todos os padrões se repetem para todas as entidades (Usuários, Cursos, Compras e Vendas).
Para adicionar um registro, você pode clicar no botão "Adicionar Novo(Nome da entidade)" no canto superior direito (contornado de vermelho).
Ao clicar neste botão, um modal aparecerá onde você pode inserir as informações de cadastro
Como você pode observar na imagem abaixo, todos os registros possuem alguns ícones ao lado, todos eles tem alguma função com os dados, podendo ser deletar, editar, ou pegar informações dos objetos
✏️ Ícone de edição (PUT)
Este ícone é responsável por editar algum registro, ao clicar nele, um modal aparecerá com os campos para a edição do registro.
🗑️ Ícone de deletar (DELETE)
Este ícone é responsável por deletar um registro, ao clicar nele, um modal aparecerá para que você confirme a deleção (todos os registros são deletados a partir de uma técnica chamada softdelete, ou seja, eles não são deletados físicamente do banco).
🛒 Ícone de compras
Este ícone é responsável por mostrar todas as compras de alguma entidade que seja relacionada com purchases (no caso, cursos e usuários). Em outras palavras, pega todas as compras de algum usuário/curso.
💲 Ícone de vendas
Este ícone é responsável por mostrar todas as vendas de alguma entidade que seja relacionada com sales (no caso, cursos e usuários). Em outras palavras, pega todas as vendas de algum usuário/curso.
🎓 Ícone de cursos
Este é um ícone específico da tabela de usuários, que mostra todos os cursos cadastrados por algum usuário.
↩️ Ícone de recover
Este é um ícone específico da tabela de cursos, que reativa algum curso desativado.
Cursos, quando deletados, ficam como "inativos". Porem podem ser recuperados através deste ícone, você vai encontrá-lo na parte de "cursos inativos" explicada abaixo.
Usuários e Cursos podem estar "ativos" ou "inativos", e isso vai ser segmentado pela exclusão destes registros, ou seja, toda vez que um usuário ou curso é deletado, ele é setado como "inativo". O intuito disto é manter todo o histórico de ações já que compras e vendas não podem ser alteradas ou deletadas.
Você pode alterar entre recursos ativos ou inativos nos botões contornados de vermelho na imagem abaixo:
Na parte esquerda da tela, você possui a sidebar, onde você pode alternar entre as tabelas existentes ou, assim como neste portfolio, traduzir a aplicação.
Diagrama de classes e classes de projeto
Termo/Acrônimo/Abreviatura | Descrição |
ERS | Especificação de Requisitos do Sistema |
UC | Casos de Uso |
Casos de Uso | Descrição de todas as funcionalidades do sistema. |
Restrições | Todas as delimitações para que o software seja construído |
Requisitos Funcionais (RF) | Tudo aquilo que o Software tem que fazer |
Requisitos Não Funcionais | Requisitos que dizem respeito aos aspectos técnicos do Software que são a base dos Requisitos Funcionais |
Diagrama de Classes | Todas as classes do código mostradas em formas de diagrama |
CST01 – O Projeto deve ser feito na linguagem Java.
CST02 - O Projeto deve ser feito utilizando Spring Boot.
RNG01 – O valor mínimo de um curso deve ser de $5,00.
RNG01 – O valor máximo de um curso deve ser de $1.000,00.
Na sua grande maioria usuários jovens e adultos, com alguma aptidão com aparelhos tecnológicos, buscando aprender ou complementar seus conhecimentos sobre um determinado assunto.
Descrição: Sistema deve permitir o usuário criar algum tipo de curso.
Justificativa: Usuário deseja ensinar usando os recursos da nossa plataforma.
Pré condição: Nenhuma
Pós condição: Criar e salvar o curso
Fluxo Normal:
1. Usuário solicita Criar Cursos
2.Sistema solicita informações do curso (Nome, descrição, categoria, preço, autor)
3.Usuário fornece as informações
4.Sistema valida as informações
5.Sistema retorna um status http "204"
2.a Usuário tenta ir para o próximo passo sem fornecer alguma das informações
1.Sistema exibe a mensagem “nome(s)_da(s)_field(s)_em_braco não deve estar em branco.”
2.b Usuário tenta ir para o próximo passo fornecendo alguma palavra considerada ruim
1. Sistema retorna um status http 400 e exibe a mensagem “Conteúdo indesejado detectado”
2.c Usuário tenta ir para o próximo passo fornecendo um valor negativo no preço
1. Sistema retorna um status http 422 e exibe a mensagem “price deve ser maior que 0.”
2.d Usuário tenta ir para o próximo passo com o nome ou a descrição menor que 2 ou maior que 100 letras
1. Sistema retorna um status http 422 e exibe a mensagem “name/description tamanho deve ser entre 2 e 100”
2.e Usuário tenta ir para o próximo passo adicionando um autor inativo
1. Sistema retorna um status http 403 e exibe a mensagem “Você não pode criar um curso para um usuário inativo.”
2.f Usuário tenta ir para o próximo passo fornecendo um valor menor que $5 no preço
1. Sistema retorna um status http 422 e exibe a mensagem “price deve ser maior que ou igual à 5.”
2.g Usuário tenta ir para o próximo passo fornecendo um valor maior que $1000 no preço
1. Sistema retorna um status http 422 e exibe a mensagem “price deve ser menor que ou igual à 1000.”
Descrição: Sistema deve permitir a criação de usuários.
Justificativa: Usuário deseja usar o sistema.
Pré condição: Nenhuma
Pós condição: Criar e salvar o usuário
Fluxo Normal:
1. Usuário solicita cadastrar no sistema
2. Sistema solicita os dados do usuário
3. Usuário fornece os dados ao sistema.
5. Sistema retorna um status http "204"
2.a Usuário tenta ir para o próximo passo sem fornecer alguma das informações
1.Sistema exibe a mensagem “nome(s)_da(s)_field(s)_em_braco" não deve estar em branco.”
2.b Usuário tenta ir para o próximo passo passando alguma palavra considerada ruim
1. Sistema retorna um status http 400 e exibe a mensagem “Conteúdo indesejado detectado”
2.c Usuário tenta ir para o próximo passo com o nome menor que 2 ou maior que 100 letras
1. Sistema retorna um status http 422 e exibe a mensagem “name, tamanho deve ser entre 2 e 100”
2.d Usuário tenta ir para o próximo passo com o email fora do padrão correto
1. Sistema retorna um status http 422 e exibe a mensagem “deve ser um endereço de e-mail bem formado.”
Descrição: Sistema deve permitir que o usuário compre produtos.
Justificativa: Usuário quer aprender sobre aquele assunto.
Pré condição: Nenhuma
Pós condição: Criar e salvar a compra
Fluxo Normal:
1. Usuário solicita comprar no sistema
2. Sistema solicita os dados da compra
3. Usuário fornece os dados ao sistema.
5. Sistema retorna um status http "204"
2.a Usuário tenta ir para o próximo passo sem fornecer alguma das informações
1.Sistema exibe a mensagem “nome(s)_da(s)_field(s)_em_braco" não deve estar em branco.”
2.b Usuário tenta ir para o próximo passo inserindo o comprador sendo o mesmo usuário dono do curso
1. Sistema retorna um status http 403 e exibe a mensagem “O autor do curso não pode comprar o próprio curso.”
2.c Usuário tenta ir para o próximo passo inserindo uma compra já existente
1. Sistema retorna um status http 409 e exibe a mensagem “Este usuário já possui este curso.”
2.d Usuário tenta ir para o próximo passo criando uma compra para um usuário inativo
1. Sistema retorna um status http 403 e exibe a mensagem “Você não pode criar uma compra para um usuário inativo.”
2.e Usuário tenta ir para o próximo passo criando uma compra para um curso inativo
1. Sistema retorna um status http 403 e exibe a mensagem “Você não pode criar uma compra para um curso inativo.”
Descrição: Sistema deve permitir que o usuário venda produtos.
Justificativa: Usuário deseja ensinar sobre algum assunto.
Pré condição: Nenhuma
Pós condição: Criar e salvar a venda
Fluxo Normal:
1. Usuário solicita vender no sistema
2. Sistema solicita os dados da venda
3. Usuário fornece os dados ao sistema.
5. Sistema retorna um status http "204"
2.a Usuário tenta ir para o próximo passo sem fornecer alguma das informações
1.Sistema exibe a mensagem “nome(s)_da(s)_field(s)_em_braco" não deve estar em branco.”
2.b Usuário tenta ir para o próximo passo inserindo um vendedor diferente do autor do curso
1. Sistema retorna um status http 403 e exibe a mensagem “O vendedor não é o autor do curso..”
2.c Usuário tenta ir para o próximo passo criando uma venda para um usuário inativo
1. Sistema retorna um status http 403 e exibe a mensagem “Você não pode criar uma venda para um usuário inativo.”
2.d Usuário tenta ir para o próximo passo criando uma venda para um curso inativo
1. Sistema retorna um status http 403 e exibe a mensagem “Você não pode criar uma venda para um curso inativo.”
Descrição: Sistema deve permitir que o usuário desative algum curso.
Justificativa: Usuário deseja parar de vender algum curso.
Pré condição: Nenhuma
Pós condição: Desativar Curso
Fluxo Normal:
1. Usuário solicita excluir curso no sistema
2. Sistema exibe modal para a confirmação da exclusão
3. Sistema desativa o curso.
Descrição: Sistema deve permitir que o usuário seja desativado.
Justificativa: Usuário deseja ser desativado.
Pré condição: Nenhuma
Pós condição: Desativa o usuário
Fluxo Normal:
1. Usuário solicita excluir user no sistema
2. Sistema exibe modal para a confirmação da exclusão
3. Sistema desativa o usuário.
Descrição: Sistema deve permitir que o usuário reative cursos.
Justificativa: Usuário deseja recuperar algum curso.
Pré condição: Ter um autor ativo
Pós condição: Reativar o curso
Fluxo Normal:
1. Usuário solicita recuperar curso no sistema
2. Sistema reativa o curso
2.a Usuário tenta reativar um curso com o autor inativo
1.Sistema exibe a mensagem “Você não pode criar/recuperar um curso para um usuário inativo.”
RF01 –<Recuperar Curso> O Sistema deve permitir que um curso seja recuperado após sua exclusão.
RF02 –<Guardar Histórico> O Sistema deve guardar todo o histórico de transações entre as entidades (implementado um soft delete).
RF03 –<Criar Compras> O Sistema deve permitir a criação de compras
RF04 –<Criar Vendas> O Sistema deve permitir a criação de vendas
RF05 –<Criar Curso> O Sistema deve permitir a criação de cursos
RF07 –<Validação de Autores> O Sistema deve garantir que apenas os autores dos cursos possam vendê-los.