Sistema de gerenciamento de doações
Iniciamos a modelagem pelo Doador pois ele é o ator principal.
Doador:
- nome
- cpf
- endereço
- telefone
- histórico de doações
Doação:
- valor
- doador
- projeto
Projeto:
- nome
- cpf ou cnpj
- endereço
- telefone
- equipe
- custo mês
- orçamento
Orçamento:
- contas a pagar
- aluguel
- água
- luz
- internet
- equipe
- infra
- Definição das entidades
- Definição dos Átomos 2.1. Definição dos seus Quarks
- Definição das Moléculas
- Definição dos Organimos
- Definição das Rotas
Inicialmente definimos as entidades que fazem parte do sistema sem necessariamente modelar o banco.
Nesse passo não é definido qualquer tipo de ligação entre elas.
Entidades:
- Doador
- Doação
- Projeto
- Orçamento
- Fornecedor
- Meios de Pagamento
Nessa etapa definimos todos os Átomos(campos) necessários para o sistema, porém ainda sem ligarmos o Átomo à entidade, pois um mesmo átomo pode estar em mais de 1 Molécula.
Átomos (não finalizados):
- name
- password
- telefones
- tipo
- ddd
- numero
- endereço:
- logradouro
- nome
- numero
- complemento
- cep
- estado
- pais
- cpf
- cnpj
- razao_social
- responsavel_legal
- valor
- user_id
- doador_id
- doacao_id
- projeto_id
- fornecedor_id
Antes de definirmos quais Quarks fazem parte do Átomo precisamos criar todos eles.
Vamos começar pelos básicos:
- isEmpty
- isNumber
- isString
- isBoolean
- isDate
Depois deles podemos criar os Quarks específicos para campos:
- isUserID
- isName
- isEmail
- isPhone
- isPhoneDDD
- isPhoneNumber
- isCPF
- isCPNJ
- isRazaoSocial
- isAddress
- isAddressType //logradouro
- isAddressName
- isAddressNumber
- isAddressCEP
- isAddressCity
- isAddressState
- isAddressCountry
Após a criação de todos os Quarks podemos partir para os Átomos em si.
Vamos seguir o seguinte padrão para TODOS os Átomos do Mongoose:
const Atom = {
type: String
, get: require()
, set: require()
, validate: require()
}
module.exports = Atom;
Agora com um exemplo que aprendemos em aula:
const Atom = {
type: String
, get: require('./../quarks/toUpper')
, set: require('./../quarks/toLower')
, validate: require('./../quarks/isEmptyStringValidate')
, required: true
, index: true
}
module.exports = Atom;
Após a definição de TODOS os Átomos podemos iniciar as Moléculas.
A estrutura de uma Molécula do Mongoose é a seguinte:
const Molecule = {
nameAtom1: require('./../atoms/nameAtom1')
, nameAtom2: require('./../atoms/nameAtom2')
, ...
}
Ou seja, é um objeto que possui como atributo o nome do campo(Átomo) e como valor o módulo desse Átomo, ficando assim:
'use strict';
const mongoose = require('mongoose');
const Molecule = {
name: require('./../atoms/atom-name')
, email: require('./../atoms/atom-email')
, password: require('./../atoms/atom-password')
, phones: [
{ type: require('./../atoms/atom-phone-type')
, ddd: require('./../atoms/atom-phone-ddd')
, number: require('./../atoms/atom-phone-number')
}
]
}
module.exports = new mongoose.Schema(Molecule);
Criação dos Quarks, Átomos, Moléculas com testes.
Criação dos Organismos e seu CRUD. Criação das Rotas para o Express e por consequencia a API REST do CRUD de cada entidade. Criação dos testes da API.
Integração com Meio de Pagamento. Adição de regras de negócio específicas.
Testes de unidade, stress e integração.
Possíveis features:
- Escolha de fornecedores por licitação ou automático com parceiros
- Impressão para abate no IR
- Pedido de cpf/cnpj