Parabéns por ter chegado até aqui. Estamos empenhados dentro de nosso possível para que toda nossa equipe possa chegar junto a um novo conhecimento de forma a crescer como equipe e time.
Avisos antes de começar
[x] - Crie um repositório no seu GitHub sem citar nada relacionado ao eSistem.
[x] - Faça seus commits no seu repositório.
[x] - Você poderá consultar o Google, Stackoverflow ou algum projeto particular na sua máquina.
[x] - Pode assistir as aulas novamente para esclarecer dúvidas.
[x] - Fique tranquilo, respire, assim como você, também já passamos por essa etapa. Boa sorte! :)
Sobre o ambiente da aplicação:
[x] - Deve ser utilizado Framework .net 7 ou superior, em contraponto com nossos estudos.
[x] - Lembre-se que valorizamos um bom padrão de projeto.
Objetvo: eSistem Simplificado
Temos 3 (três) tipos de usuários, Administradores, Gerentes e Vendedores, todos tem acesso ao sistema, podem se utilizar de vários pontos, mas vamos atentar somente em alguns fluxos de alguns tipos de usuários.
Requisitos:
Usuários
[x] - Para todos usuários deveremos ter Nome completo, Apelido, e-mail, CPF, Senha. CPF/CNPJ, e-mail e apelido, devem ser únicos no sistema. Sendo assim, seu sistema deverá permitir apenas um cadastro com estes dados.
[x] - Usuários do tipo Administriadores podem logar no sistema, cadastrar novos usuários e trocar senha de qualquer usuário. Claro que usuários Administradores podem acessar qualquer outra parte do sistema.
[x] - Usuários do tipo Gerentes, podem listar usuários. Além de listar outros todos usuários, este tipo de usuário, poderá acessar todas as partes do sistema. Exceto criar novos usuários.
[x] - Usuários do tipo Vendedores poderam acessar o sistema, listar pessoas do tipo cliente, mas não podem alterar seus dados e efetuar cadastros.
[x] - Todos usuários podem logar no sistema e listar seus próprios dados.
[x] - A senha é um segredo que após ser definida, nem mesmo seu dono poderá acessar.
[x] - Somente usuários que não são Vendedores podem liberar o cadastro de pessoas do tipo Cliente.
[x] - Ao cadastrar um usuário o sistema deverá avaliar se sua senha é forte e deverá conter no mínimo 8 caracteres, contendo letras Maíusclas, Minusculas, Números e Símbolos.
[x] - Para se cadastrar um usuário a senha deverá ser verificada se está válida e bate com a repetição da mesma.
Pessoas
[x] - Teremos um cadastro de pessoas que terá os campos, Nome completo, documento, nome da cidade. ativo, liberado venda, observações, código alternativo.
[x] - Código Alternativo e Documento que deverá ser aceito somente CPF ou CNPJ válidos e não poderam se repetir. Ou seja cada pessoa somente poderá ter um número de documento e um código alternativo. Ambos podem ser vazios.
[x] - A pessoa a ser incluida deve ter sua propriedade ativo como verdadeiro e sua propriedade liberado venda como falso.
[x] - Nome completo e nome da cidade não podem ser vazios.
[x] - Poderá existir pessoa homonimas no cadastro.
[x] - Somente usuários que não sejam Vendedores podem excluir uma pessoa, desde que liberado venda esteja como false.
[x] - Somente usuários do tipo Administradores ou Gerentes podem liberar a pessoa para venda.
[x] - Somente usuários do tipo Administradores ou Gerentes podem desativar uma pessoa.
[x] - Toda pessoa já será considaderada um cliente desde que liberado para venda.
Produtos
[x] - Teremos um cadastro de produtos com os campos, Descricao Completa, Descricao Resumida, Unidade, Preco de venda, Quantidade em Estoque, Ativo, Vendável, Código Barras.
[x] - Código Barras não poderam se repeti ou podem ser vazios.
[x] - Descrição completa, descrição resumida e unidade não poderam ser vazias.
[x] - Ao se cadastrar um produto, sua unidade deverá ser cadastrada e na tabela produto deverá ser armazenada a sigla da unidade, que deverá existir na tabela de unidades.
[x] - Ao se cadastrar um produto a propriedade Ativo deverá ser true e vendável false.
[x] - Somente usuários que não sejam Vendedores podem excluir um produto.
[x] - Somente usuários do tipo Administradores ou Gerentes podem liberar o produto para venda.
[x] - Somente usuários do tipo Administradores ou Gerentes podem desativar um produto.
[x] - o Preço de venda não pode ser negativo.
Unidades
[x] - O cadastro de unidade deverá constar Sigla, descrição.
[x] - Sigla e descrição deverão ser preenchidas.
[x] - Sigla não poderá se repetir em toda base, ou seja, somente haverá um sigla para cada unidade.
[x] - Somente usuários que não sejam Vendedores podem incluir, alterar, excluir unidades.
[x] - Unidades que já foram utilizadas em um produto não podem ser excluidas.
Endpoints
Deveremos ter todos endpoints de Create Read Update e Delete com suas validações, permissões e autorizações.
Para pessoas
[x] - Endpoint que lista os clientes
[x] - Endpoint que lista todas pessoas
[x] - Endpoint que lista uma pessoa
[x] - Endpoint que lista um cliente
Produtos
[x] - Endpoint que lista todos produtos
[x] - Endpoint que lista todos produtos vendáveis.
Usuários
[x] - Endpoint que lista todos usuários
[x] - Endpoint que lista todos usuários do Tipo Vendedores
[x] - Endpoint que lista todos usuários do Tipo Gerentes
[x] - Entpoint que lista todos usuários do Tipo Administradores
Permissões de acesso
[ ] - Endpoint que lista todas as permissões de acesso para cada login de usuário
Diretrizes principais para projeto
[x] - Não deverá ser função do banco de dados validções do domínio.
[x] - Não deverá ser função do banco de dados o controle de sequência de registros.
[x] - O sistema deverá rodar para 3 (três) bancos de dados, Sqlite, PostGresql e InMemory
[x] - A base de dados de usuários a qual iremos chamar de eSistem_Identidade, deverá ficar em uma base separada da base de dados que conterá as demais tabelas e iremos chamar de eSistem. Escolham a melhor abordagem.
[x] - Deveremos utiliza EF 7, FluentValidation, MediatR (Este caso se sintam confortáveis), padrões projeto CQRS e Clean code devem ser prioridade.
[x] - Todo registro no banco de dados deverá ter uma chave primária sendo um GUID único.
[x] - Todo registro no banco de dados deverá ter um indice único de nome short_id que deverá ser gerado em base64 e ter no maximo 10 dígitos, podendo ser letras e números e não conter caracteres especiais, nem espaço em branco.
[x] - Poderam ser criados quantos projetos acharem necessários.
[x] - Tudo que foi passado aqui, não cabe discussão se pode ser melhorado ou feito de outra forma, para o todo, temos de usar o que aprendemos até o momento e criar de acordo com a necessidade.
Caso encontre algo que não vá funcionar e tenham certeza de uma melhor abordagem nos entregue a melhoria. A ideia aqui é ter um cadastro de usuário e cadatro de pessoas e produtos, para que possamos logar e consultar produtos e clientes para vendas
O que será avaliado e valorizamos :heart:
[x] - Documentação
[x] - desenho de arquitetura
[x] - Código limpo e organizado (nomenclatura, etc)
[x] - Conhecimento de padrões (CQRS, design patterns, SOLID)
[x] - Ser consistente e saber argumentar suas escolhas
[x] - Apresentar soluções que domina
[x] - Modelagem de Dados
[x] - Manutenibilidade do Código
[x] - Tratamento de erros
[x] - Cuidado com itens de segurança
[x] - Arquitetura (estruturar o pensamento antes de escrever)
[x] - Carinho em desacoplar componentes (outras camadas, service, repository)
[x] - Proposta de melhoria na arquitetura e no projeto
Tempo para desenvolvimento
Para desenvolvimento deste projeto será dado 36 (Trinta e Seis) horas para o desenvolvimento do todo, desde a criação dos bancos de dados em todos os 3 tipos, assim como a estrutura de todo o projeto. O projeto em si poderá ser discutido entre os envolvidos, exceto Hélio e Eduardo por motivos óbivos. Cabe a cada um desenvolver seu projeto, dar sua melhor proposta como passado.
Ao final faremos uma call com todos para apresentação e explicação de cada projeto e apresentaremos a melhor proposta de funcionamento.
A melhor proposta, codficação e aplicação será bem recebida.
esistem_curso_D01
Desafio Back-end eSistemCurso
Parabéns por ter chegado até aqui. Estamos empenhados dentro de nosso possível para que toda nossa equipe possa chegar junto a um novo conhecimento de forma a crescer como equipe e time.
Avisos antes de começar
Sobre o ambiente da aplicação:
Objetvo: eSistem Simplificado
Temos 3 (três) tipos de usuários, Administradores, Gerentes e Vendedores, todos tem acesso ao sistema, podem se utilizar de vários pontos, mas vamos atentar somente em alguns fluxos de alguns tipos de usuários.
Requisitos:
Usuários
Pessoas
Produtos
Unidades
Endpoints
Diretrizes principais para projeto
O que será avaliado e valorizamos :heart:
O que NÃO será avaliado :warning:
O que será um Diferencial
Tempo para desenvolvimento
Para desenvolvimento deste projeto será dado 36 (Trinta e Seis) horas para o desenvolvimento do todo, desde a criação dos bancos de dados em todos os 3 tipos, assim como a estrutura de todo o projeto. O projeto em si poderá ser discutido entre os envolvidos, exceto Hélio e Eduardo por motivos óbivos. Cabe a cada um desenvolver seu projeto, dar sua melhor proposta como passado.
Ao final faremos uma call com todos para apresentação e explicação de cada projeto e apresentaremos a melhor proposta de funcionamento.
A melhor proposta, codficação e aplicação será bem recebida.
Boas festas.