Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/mauriciohidani/dscommerce
Devsuperior Course Spring Professional - DSCommerce
https://github.com/mauriciohidani/dscommerce
Last synced: 4 days ago
JSON representation
Devsuperior Course Spring Professional - DSCommerce
- Host: GitHub
- URL: https://github.com/mauriciohidani/dscommerce
- Owner: mauricioHidani
- Created: 2023-09-18T22:31:34.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2023-09-18T22:34:39.000Z (over 1 year ago)
- Last Synced: 2024-11-19T02:55:59.566Z (2 months ago)
- Language: Java
- Size: 114 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# đź“ť DSCOMMERCE
đź“Ť [DESVSUPERIOR](https://br.linkedin.com/school/devsuperior/) / JAVA SPRING PROFESSIONAL
📅 September 17, 2023 - 🚩 [São Paulo, Brazil](https://maps.app.goo.gl/sSHp7htS6yY8repe7) - 🧑‍💻 [Mauricio Mityo Hidani](https://www.linkedin.com/in/mauricio-hidani/)Versões utilizadas no desafio:
- [Java 17](https://www.oracle.com/java/technologies/javase/jdk17-archive-downloads.html)
- [Maven 3.9.4](https://maven.apache.org/docs/3.9.4/release-notes.html)
- [Spring 3.1.2](https://spring.io/projects/spring-boot)## 1. Premissas
Deseja-se fazer um sistema para ser utilizado em cursos da Devsuperior no processo de aprendizado dos alunos. Para isto, a concepção do sistema partiu das seguintes premissas:
- Deve ser um sistema que possua um modelo de domĂnio relativamente simples, porĂ©m abrangente, ou seja, que explore vários tipos de relacionamentos entre as entidades de negĂłcio (muitos-para-um, muitos-para-muitos, etc.).
- O sistema deve possibilitar a aplicação de vários conhecimentos importantes das disciplinas de fundamentos.
- O sistema deve conter as principais funcionalidades que se espera de um profissional iniciante deve saber construir, tais como telas de cadastro e fluxos de caso de uso.## 2. VisĂŁo geral do sistema
O sistema deve manter um cadastro de usuário, produtos e suas categorias. Cada usuário possui nome, email, telefone, data de nascimento e uma senha de acesso. Os dados dos produtos são: nome, descrição, preço e imagem. O sistema deve apresentar um catálogo de produtos, os quais podem ser filtrados pelo nome do produto. A partir desse catálogo, o usuário pode selecionar um produto para ver seus detalhes e para decidir se o adiciona a um carrinho de compras. O usuário pode incluir e remover itens do carrinho de compra, bem como alterar as quantidades de cada item. Uma vez que o usuário decida encerrar o pedido, o pedido deve então ser salvo no sistema com o status de "aguardando pagamento". Os dados de um pedido são: instante em que ele foi salvo, status, e uma lista de itens, onde cada item se refere a um produto e sua quantidade no pedido. O status de um pedido pode ser: aguardando pagamento, pago, enviado, entregue e cancelado. Quando o usuário paga por um pedido, o instante do pagamento deve ser registrado. Os usuários do sistema podem ser clientes ou administradores, sendo que todo usuário cadastrado por padrão é cliente. Usuários não identificados podem se cadastrar no sistema, navegar no catálogo de produtos e no carrinho de compras. Clientes podem atualizar seu cadastro no sistema, registrar pedidos e visualizar seus próprios pedidos. Usuários administradores tem acesso à área administrativa onde pode acessar os cadastros de usuários, produtos e categorias.
## 3. ProtĂłtipos de tela:
[https://www.figma.com/file/ZrGNVNG0kZL6txDv4G8P6s/DSCommerce](https://www.figma.com/file/ZrGNVNG0kZL6txDv4G8P6s/DSCommerce)
## 4. Modelo conceitual
Este é o modelo conceitual do sistema DSCommerce. Considerações:
- Cada item de pedido (OrderItem) corresponde a um produto no pedido, com uma quantidade. Sendo que o preço também é armazenado no item de pedido por questões de histórico (se o preço do produto mudar no futuro, o preço do item de pedido continua registrado com o preço real que foi vendido na época).
- Um usuário pode ter um ou mais "roles", que são os perfis de acesso deste usuário no sistema (client, admin).```mermaid
erDiagram
User ||--o{ Order : ""
Order |o--|| Payment : ""
Order }|--|{ Product : "OrderItem"
Product }o--|{ Category : ""User {
Long id PK
String name
String email
String phone
LocalDate birth
String password
Strin[] roles
}
Product {
Long id PK
String name
String description
Double price
String imgUrl
}
Category {
Long id PK
String name
}
OrderItem {
Integer quantity
Double price
}
Order {
Long id PK
Instant moment
OrderStatus status
}
Payment {
Long id PK
Instant moment
}
"OrderStatus <>" {
int WAITING_PAYMENT
int PAID
int SHIPPED
int DELIVERED
int CANCELED
}
```## 5. Casos de uso (visĂŁo geral)
O escopo funcional do sistema consiste nos seguintes casos de uso:
| Caso de uso | VisĂŁo geral | Acesso |
|:--------------------|:--------------------------------------------------------------------------------------------------------|:---------------|
| Manter produtos | CRUD de produtos, podendo filtrar itens pelo nome | Somente Admin |
| Manter categorias | CRUD de categorias, podendo filtrar itens pelo nome | Somente Admin |
| Manter usuários | CRUD de usuários, podendo filtrar itens pelo nome | Somente Admin |
| Gerenciar carrinho | Incluir e remover itens do carrinho de compras, bem como alterar as quantidades do produto em cada item | PĂşblico |
| Consultar catálogo | Listar produtos disponĂveis, podendo filtrar produtos pelo nome | PĂşblico |
| Sign up | Cadastrar-se no sistema | PĂşblico |
| Login | Efetuar login no sistema | PĂşblico |
| Registrar pedido | Salvar no sistema um pedido a partir dos dados do carrinho de compras informado | Usuário logado |
| Atualizar perfil | Atualizar o próprio cadastro | Usuário logado |
| Visualizar pedidos | Visualizar os pedidos que o próprio usuário já fez | Usuário logado |
| Registrar pagamento | Salvar no sistema os dados do pagamento de um pedido | Somente Admin |
| Reportar pedidos | RelatĂłrio de pedidos, podendo ser filtrados por data | Somente Admin |```mermaid
flowchart
UsuarioAnonimo["Usuário anônimo"] -.- GerenciarCarrinho["Gerenciar carrinho"]
UsuarioAnonimo["Usuário anônimo"] -.- SingUp["Sing up"]
UsuarioAnonimo["Usuário anônimo"] -.- Login["Login"]
GerenciarCarrinho["Gerenciar carrinho"] -. "<<include>>" .-> ConsultarCatalogo["Consultar catálogo"]
Cliente["Cliente"] -.- RegistrarPedido["Registrar pedido"]
Cliente["Cliente"] -.- AtualizarPerfil["Atualizar perfil"]
Cliente["Cliente"] -.- VisualizarPedidos["Visualizar pedidos"]
Admin["Admin"] -.-> Cliente["Cliente"]
Admin["Admin"] -.- ManterProdutos["Manter produtos"]
Admin["Admin"] -.- ManterCategorias["Manter categorias"]
Admin["Admin"] -.- ManterUsuarios["Manter usuarios"]
Admin["Admin"] -.- RegistrarPagamentos["Registrar pagamentos"]
Admin["Admin"] -.- ReportarVendas["Reportar vendas"]
ManterProdutos["Manter produtos"] -. "<<include>>" .-> ConsultarCatalogo["Consultar catálogo"]
```## Atores
| Ator | Responsabilidade |
|:-----------------|:--------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Usuário anônimo | Pode realizar casos de uso das áreas públicas do sistema, como catálogo, carrinho de compras, login e sign up. |
| Cliente | Responsável por manter seu próprios dados pessoais no sistema, e pode visualizar histórico dos seus pedidos. Todo usuário cadastrado por padrão é um Cliente. |
| Admin | Responsável por acessar a área administrativa do sistema com cadastros e relatórios. Admin também pode fazer tudo que Cliente faz. |### 6. Casos de uso (detalhamento)
#### Consultar catálogo
| Atores | Usuário anônimo, Cliente, Admin |
|:--------------|:----------------------------------------------------------------|
| Precondições | - |
| Pós-condições | - |
| VisĂŁo geral | Listar produtos disponĂveis, podendo filtrar produtos pelo nome || **Cenário principal de sucesso** |
|:----------------------------------------------------------------------------------------------------------|
| 1. [OUT] O sistema informa uma listagem paginada de nome, imagem e preço dos produtos, ordenada por nome. |
| 2. [IN] O usuário informa, opcionalmente, parte do nome de um produto |
| 3. [OUT] O sistema informa a listagem atualizada || Informações complementares |
|:------------------------------------------------------------------------------------------------------------------------------|
| O número padrão de registros por página deve ser 12. Como a listagem é paginada, o usuário pode navegar nas próximas páginas. |#### Manter produtos
| Atores | Admin |
|:--------------|:--------------------------------------------------|
| Precondições | Usuário logado |
| Pós-condições | - |
| Visão geral | CRUD de produtos, podendo filtrar itens pelo nome || Cenário principal de sucesso |
|:---------------------------------------------|
| 1. Executar caso de uso: Consultar catálogo. |
| 2. O admin seleciona uma das opções |
| 2.1. Variante Inserir |
| 2.2. Variante Atualizar |
| 2.3. Variante Deletar |
| Cenário alternativos: variantes |
|:---------------------------------------------------------------------------------------------------------------------------|
| 2.1. Variante Inserir |
| 2.1.1. [IN] O admin informa nome, preço, descrição e URL da imagem e categorias do produto. |
| 2.2. Variante Atualizar |
| 2.2.1. [IN] O admin seleciona um produto para editar. |
| 2.2.2. [OUT] O sistema informa nome, preço, descrição, URL da imagem e categorias do produto selecionado. |
| 2.2.3. [IN] O admin informa novos valores para nome, preço, descrição, URL da imagem e categorias do produto selecionado. |
| 2.3. Variante Deletar |
| 2.3.1. [IN] O admin seleciona um produto para deletar. || Cenário alternativos: exceções |
|:---------------------------------------------------------------------------------------------------------------------|
| 2.1.1a. Dados inválidos |
| 2.1.1a.1. [OUT] O sistema informa os erros nos campos inválidos [1]. |
| 2.1.1a.2. Vai para passo 2.1.1. |
| 2.2.3a. Dados inválidos |
| 2.2.3a.1. [OUT] O sistema informa os erros nos campos inválidos [1]. |
| 2.2.3a.2. Vai para passo 2.2.1. |
| 2.2.3b. Id nĂŁo encontrado |
| 2.2.3b.1. [OUT] O sistema informa que o id nĂŁo existe. |
| 2.2.3b.2. Vai para passo 2.2.1. |
| 2.3.1a. Id nĂŁo encontrado |
| 2.3.1a.1. [OUT] O sistema informa que o id nĂŁo existe. |
| 2.3.1a.2. Vai para passo 2.3.1. |
| 2.3.1b. Integridade referencial violada |
| 2.3.1b.1. [OUT] O sistema informa que a deleção não pode ser feita porque viola a integridade referencial dos dados. |
| 2.3.1b.2. Vai para passo 2.3.1. |
| Informações complementares |
|:--------------------------------------------------|
| [1] Validação dos dados: |
| * Nome: deve ter entre 3 e 80 caracteres |
| * Preço: deve ser positivo |
| * Descrição: não pode ter menos que 10 caracteres |
| * Deve haver pelo menos 1 categoria |#### Login
| Atores | Usuário anônimo |
|:--------------|:-------------------------|
| Precondições | - |
| Pós-condições | Usuário logado |
| Visão geral | Efetuar login no sistema || Cenário principal de sucesso |
|:-------------------------------------------------------------------|
| 1. [IN] O usuário anônimo informa suas credenciais (nome e senha). |
| 2. [OUT] O sistema informa um token válido. |
| Cenário alternativos: exceções |
|:------------------------------------------------------------------|
| 1a. Credenciais inválidas |
| 1a.1. [OUT] O sistema informa que as credenciais são inválidas. |
| 1a.2. Vai para passo 1. |
#### Gerenciar carrinho
| Atores | Usuário anônimo |
|:---------------|:--------------------------------------------------------------------------------------------------------|
| Precondições | - |
| Pós-condições | - |
| Visão geral | Incluir e remover itens do carrinho de compras, bem como alterar as quantidades do produto em cada item || Cenário principal de sucesso |
|:----------------------------------------------------------------------------------------------------------------------------------------|
| 1. Executar caso de uso: **Consultar catálogo**. |
| 2. [IN] O Usuário anônimo seleciona um produto. |
| 3. [OUT] O sistema informa nome, preço, descrição, imagem, e nomes das categorias do produto selecionado. |
| 4. [IN] O Usuário anônimo informa que deseja adicionar o produto ao carrinho. |
| 5. [OUT] O sistema informa os dados do carrinho de compras [1]. |
| 6. [IN] O Usuário anônimo informa, opcionalmente, que deseja incrementar ou decrementar a quantidade de um item no carrinho de compras. |
| 7. [ OUT] O sistema informa os dados atualizados do carrinho de compras [1]. |
| Informações complementares |
|:--------------------------------------|
| [1] **Dados do carrinho de compras:** |
| * lista de itens de carrinho |
| * valor total do carrinho de compras |
| **Dados do item de carrinho:** |
| * id do produto |
| * nome do produto |
| * preço do produto |
| * quantidade |
| * subtotal |#### Registrar pedido
| Atores | Cliente |
|:--------------|:---------------------------------------------------------------------------------|
| Precondições | - Usuário logado |
| | - Carrinho de compras nĂŁo vazio |
| Pós-condições | Carrinho de compras vazio |
| VisĂŁo geral | Salvar no sistema um pedido a partir dos dados do carrinho de compras informado. |
| Cenário principal de sucesso |
|:--------------------------------------------------------------------------------|
| 1. [IN] O cliente informa os dados do carrinho de compras [1]. |
| 2. [OUT] O sistema informa os dados do carrinho de compras[1] e o id do pedido. || Informações complementares |
|:-----------------------------------------------------------------------|
| [1] Dados do carrinho de compras: vide caso de uso Gerenciar carrinho. |## Documentação
- [Postman](https://documenter.getpostman.com/view/11829765/2s9YC7TC81) : https://documenter.getpostman.com/view/11829765/2s9YC7TC81
- [Postman Json](https://github.com/mauricioHidani/dscommerce/blob/main/postmanCollection/DSCommerce.postman_collection.json) : https://github.com/mauricioHidani/dscommerce/blob/main/postmanCollection/DSCommerce.postman_collection.json