Git Product home page Git Product logo

sistemas-viagem's Introduction

CI

Sistemas REST para gerenciamento de companhias aéreas, hotéis, locadoras de veículos e agências de viagens

1. Introdução

O objetivo deste projeto é desenvolver um sistema distribuído formado por 4 outros sistemas, que interoperam por meio de web services REST (web API). Os projetos são apenas aplicações backend e devem ser desenvolvidas em Java 17 utilizando as melhores práticas como:

1.1 Projetos

O repositório é composto de 4 sistemas:

  1. sistema-companhia-aerea
  2. sistema-hotelaria
  3. sistema-locadora-veiculo
  4. sistema-agencia-viagem: sistema de agência de viagens que se integra com os dois sistemas anteriores para permitir a venda de pacotes de viagem com passagem aérea, reserva de veículo e de hotel.

2. Banco de Dados

Como os sistemas são independentes, cada um terá seu próprio banco de dados.

Todos os sistemas que possuem tabelas de cidades e estados devem utilizar os códigos do IBGE para permitir que eles funcionem em conjunto. Se em um sistema uma cidade tiver um código e em outro sistema tiver outro código, obteremos dados errados ao integrar estes sistemas.

3. Baixando os fontes do projeto

Para baixar os fontes você deve executar uma operação de clone do projeto usando git. Pra isso, clique no botão "Code" no canto superior direito, depois em HTTPS e copie a URL lá, executando no terminal:

git clone URL-copiada

4. Configurações do Ambiente de Desenvolvimento

O projeto requer o JDK 17. Após clonar o repositório git na sua máquina, você deve copiar o arquivo .env.example na pasta de cada um dos 4 projetos mostrados acima e colar como .env. Você não pode renomear o arquivo, deve criar uma cópia. O arquivo .env é ignorado e não é incluído no repositório, pois pode conter informações sensíveis como senhas.

Para alterar e rodar um projeto específico, você não deve abrir a pasta raiz onde estão todos os projetos. Deve abrir no seu IDE apenas a pasta do projeto específico que deseja ver/alterar (pastas indicadas na seção 1.1). Se abrir a pasta raiz dos 4 projetos e tentar rodar um projeto específico, a aplicação não irá encontrar o arquivo .env, pois na pasta principal não tem nenhum arquivo deste tipo (e não deve ter).

5. Como contribuir com o projeto

Veja o guia de contribuição aqui.

sistemas-viagem's People

Contributors

manoelcampos avatar bernardcarvalho avatar nunesvictor avatar guilherme-fcm avatar viniiciusmoura avatar huan-carlos avatar erick-macedo-costa avatar luanluz avatar lucasmmsouza avatar hadisbra avatar flaviomouracarvalho avatar eliel1998 avatar danilonilo11 avatar arttanjeiro avatar okalil avatar charlesanjos avatar fom-png avatar uandersonferreira avatar lucastheodoro18 avatar wprotheus avatar taldomula777 avatar luanalb avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar Mauro Henrique Lima de Boni avatar  avatar

sistemas-viagem's Issues

Criar entidade (classe) cliente e endereço no sistema de veículos

Sugestões de atributos:

Cliente

  • cpf: String // anotações: @Colunm(unique=true), @Cpf, @NotNull @NotBlank
  • nome @NotNull @NotBlank
  • dataNascimento: LocalDate @NotNull
  • endereco: Endereco @NotNull
  • telefone: String @NotNull @NotBlank
  • email: String @Colunm(unique=true), @NotNull @NotBlank @Email

Endereco

  • logradouro: String @NotNull @NotBlank
  • cep: String @NotNull @NotBlank
  • cidade: Cidade @NotNull @NotBlank

Criar entidade (classe) cliente e relacionadas no sistema aéreo

Sugestões de atributos:

Cliente

  • id: Long
  • cpf: String // anotações: @Colunm(unique=true), @Cpf, @NotNull @NotBlank
  • nome @NotNull @NotBlank
  • dataNascimento: LocalDate @NotNull
  • endereco: Endereco @NotNull
  • telefone: String @NotNull @NotBlank
  • email: String @Colunm(unique=true), @NotNull @NotBlank @Email
  • contatoSeguranca: ContatoSeguranca

Endereco

  • id: Long
  • logradouro: String @NotNull @NotBlank
  • cep: String @NotNull @NotBlank
  • cidade: Cidade @NotNull @NotBlank
  • bairro: String
  • numero: String

ContatoSeguranca

  • grauParentesco: GrauParentesco @NotNull
  • telefone: String @NotNull @NotBlank
  • nome: String @NotNull @NotBlank

GrauParentesco

  • id: Long
  • descricao @Colunm(unique=true), @NotNull @NotBlank @Email

Criar classe Reserva no sistema veículos

Reserva

  • dataHoraCadastro: LocalDateTime (anotações @NotNull) com valor padrão igual a data/hora atual (definido no construtor)
  • dataHoraRetiradaEsperada: LocalDateTime @NotNull (data/hora de retirar o carro na locadora)
  • dataHoraDevolucaoEsperada: LocalDateTime @NotNull
  • cliente: Cliente @NotNull

Se a #54 não estiver resolvida, comentar o campo e adicionar comentário TODO: Depende de #54

  • locadoraRetirada: Locadora @NotNull
  • locadoraDevolucao: Locadora @NotNull

Notas

Não precisa criar getters e setters, pois estamos usando Lombok para criar automaticamente.
Basta anotar a classe com @Getters @Setters

PRs relacionadas

Criar API REST para gerenciar Cidades no sistema aéreo

Usar a biblioteca Spring Data REST seguindo este tutorial para implementar automaticamente: o acesso ao BD (a partir de uma interface Repository criada por você) e a classe Rest Resource que conterá os métodos para gerenciar Cidades a partir de uma API Web.

A interface Repository (a ser criada em um pacote repositories) deve fornecer métodos para:

  • localizar cidade pelo id
  • localizar cidades pelo nome
  • listar cidades pela sigla UF

Criar API REST para gerenciar Reserva no sistema veículos

Usar a biblioteca Spring Data REST seguindo este tutorial para implementar automaticamente: o acesso ao BD (a partir de uma interface Repository criada por você) e a classe Rest Resource que conterá os métodos para gerenciar Reserva a partir de uma API Web.

Descomentar os atributos na classe Reserva e adicionar um atributo Veiculo.

A interface Repository (a ser criada em um pacote repositories) deve fornecer métodos para:

  • localizar Reserva pelo ID
  • localizar Reserva pela ID do cliente
  • cadastrar, alterar, excluir e listar MarcaAviao
  • listar reserva pelo ID da locadora de retirada
  • listar reserva pelo ID da locadora de devolução

Criar entidade (classe) Aeroporto e CompanhiaAerea

Aeroporto

  • nome @NotBlank @column(unique = true)
  • cidade: Cidade @NotNull
  • codigoIata @NotBlank @column(unique = true) (sigla de 3 letras do aeroporto) @NotBlank

CompanhiaAerea

  • nome @NotBlank @column(unique = true)
  • programaMilhas: String @NotNull

Adicionar Lombok em todos os 4 projetos

Os principais editores e IDEs como VSCode e IntelliJ já suportam lombok nativamente.
Incluir a dependências nos pom.xml dos 4 projetos.
O Lombok possui a anotação @Data para criar getters, setters, toString, equals e hashCode para a classe.
Isto agiliza enormemente o desenvolvimento do projeto e reduz o total de código clichê/repetitivo (boilerplate code).

Mas existem alguns problemas que podem surgir ao usar @Data do Lombok.
O ideal é usar @Getter @Setter no lugar, mesmo que seja mais extenso.
Se desejar entender os problemas, veja este artigo.

Criar API REST para gerenciar Voo no sistema aéreo

Usar a biblioteca Spring Data REST seguindo este tutorial para implementar automaticamente: o acesso ao BD (a partir de uma interface Repository criada por você) e a classe Rest Resource que conterá os métodos para gerenciar Voo a partir de uma API Web.

Incluir atributo CompanhiaAerea no Voo.

A interface Repository (a ser criada em um pacote repositories) deve fornecer métodos para:

  • localizar Voo pelo ID
  • localizar Voo pelo número
  • cadastrar, alterar, excluir Voo
  • listar Voos por codigoIATA aeroporto de origem
  • listar Voos por codigoIATA aeroporto de destino
  • listar Voos pelo ID da companhia aérea

Criar hierarquia de classes Pessoa e PessoaFisica no sistema veículos

Pessoa

  • Os atributos id e nome devem ser movidos da classe Cliente para pessoa
  • adicionar endereco: endereco (anotaçãoes @NotNull)

PessoaFisica extends Pessoa

  • Os atributos cpf e dataNascimento devem ser movidos de cliente para PessoaFisica

Criar Funcionario e alterar Cliente

Estas classes fazem composição com Pessoa ou PessoaFisica por meio do atributo indicado abaixo.
Como um cliente pode ser Funcionario ou vice-versa em momentos diferentes,
não dá pra usar herança daqui pra baixo.

Funcionario

  • pessoaFisica: PessoaFisica
  • numeroCarteiraTrabalho: String

Cliente

  • pessoa: Pessoa (o cliente é uma pessoa que pode ser PF ou PJ)
  • dataCadatro: LocalDate = LocalDate.now() @NotNull (não está na pessoa pois se a pessoa já existir e apenas for cadastrada como cliente ou funcionario, não teremos a data exata do cadastro daquele cliente ou funcionário)

Configurar plugin do dependabot no build.yml

O workflow do GitHub Action .github/build.yml tinha as seguintes linhas no final:

     # Optional: Uploads the full dependency graph to GitHub to improve the quality of Dependabot alerts this repository can receive
     - name: Update dependency graph
       uses: advanced-security/maven-dependency-submission-action@571e99aab1055c2e71a1e2309b9691de18d6b7d6

Isto habilita o plugin do dependabot para detectar falhas de segurança nas libs do projeto.
No entanto, como não temos um projeto na raiz do repositório, isso não funciona.
Seria preciso criar um workflow para cada projeto.

Veja a página da action se precisar de detalhes. Possivelmente, criando múltiplos workflows para cada projeto, não precisa configurar nada na action do dependabot.

Criar API REST para gerenciar Veículos no sistema de locadora

Usar a biblioteca Spring Data REST seguindo este tutorial para implementar automaticamente: o acesso ao BD (a partir de uma interface Repository criada por você) e a classe Rest Resource que conterá os métodos para gerenciar Veículo a partir de uma API Web.

A interface Repository (a ser criada em um pacote repositories) deve fornecer métodos para:

  • localizar Veículo pelo ID
  • localizar pela placa
  • localizar veículos pelo ID da locadora
  • localizar veículos pelo ID da locadora e categoria
  • localizar veículos pelo ID do modelo

Criar entidade (classe) PessoaJuridica e Locadora no sistema de veículos

PessoaJuridica: a locadora é uma PJ e podem existir clientes deste tipo também

Esta classe deve estender Pessoa.
Assim, a maioria dos atributo virão de Pessoa.
Os atributos adicionais são:

  • cnpj: String (anotações @CNPJ @NotBlank @Column(unique=true))
  • razaoSocial: String @NotBlank

Locadora extends PessoaJuridica

  • matriz: boolean @NotNull
  • codigoIataAeroporto: String = "" (indica se a locadora está situada em um aeroporto e qual o código de 3 letras dele) @NotNull

Notas

Não precisa criar getters e setters, pois estamos usando Lombok para criar automaticamente.
Basta anotar a classe com @Getters @Setters

PRs relacionadas

Criar API REST para gerenciar Aviões no sistema aéreo

Usar a biblioteca Spring Data REST seguindo este tutorial para implementar automaticamente: o acesso ao BD (a partir de uma interface Repository criada por você) e a classe Rest Resource que conterá os métodos para gerenciar Aviões a partir de uma API Web.

A interface Repository (a ser criada em um pacote repositories) deve fornecer métodos para:

  • localizar Avião pelo id
  • listar Aviões pelo prefixo
  • cadastrar avião
  • alterar Avião

Criar API REST para gerenciar MarcaAviao no sistema aéreo

Usar a biblioteca Spring Data REST seguindo este tutorial para implementar automaticamente: o acesso ao BD (a partir de uma interface Repository criada por você) e a classe Rest Resource que conterá os métodos para gerenciar MarcaAviao a partir de uma API Web.

A interface Repository (a ser criada em um pacote repositories) deve fornecer métodos para:

  • localizar MarcaAviao pelo ID
  • localizar MarcaAviao pela descricao
  • cadastrar, alterar, excluir e listar MarcaAviao

Criar classes Veiculo e relacionadas no sistema locadora

Adicionar as anotações de relacionamento da JPA

Marca

  • descricao: String @NotBlank @Column(unique = true)

Modelo

  • descricao: String @NotBlank @Column(unique = true)
  • marca: Marca @NotNull

CategoriaVeiculo

  • descricao: String @NotBlank @Column(unique = true)
  • detalhes: String @NotBlank (detalhes sobre a categoria de veículo, como que tipo de acessários o veículo tem ou benefícios que clientes que alugam carros desta categoria ganham)

Veiculo

  • placa: String @NotBlank @Column(unique = true)
  • modelo: Modelo
  • categoria: CategoriaVeiculo @NotNull
  • locadora: Locadora. Depende de #54: se não estiver concluída, comentar este atributo e adicionar comentário abaixo:

//TODO depende de #54

Criar hierarquia de herança para as classes de Pessoa no sistema aéreo

Depende da finalização da PR #49

Pessoa

  • Os atributos id, endereco e nome devem ser movidos da classe Cliente para pessoa

PessoaFisica extends Pessoa

  • Os atributos cpf e dataNascimento devem ser movidos de cliente para PessoaFisica

Criar Piloto e alterar Cliente

Fazem composição com PessoaFisica por meio do atributo indicado abaixo.
Como um cliente pode ser piloto ou vice-versa em momentos diferentes,
não dá pra usar herança daqui pra baixo.

Piloto

  • pessoaFisica: PessoaFisica
  • numeroBreve: String (número do brevê do piloto)
  • validateBreve: LocalDate

Cliente

  • pessoaFisica: PessoaFisica
  • numeroFidelidade: String = "" @NotNull (aceita blank)

Criar classes relacionadas a Voo

Voo

  • numero: String @NotBlank @Column(unique=true)
  • dataHoraPartidaEsperada: LocalDateTime @NotNull
  • dataHoraChegadaEsperada: LocalDateTime @NotNull

Se #39 não estiver concluída, comentar campo e adicionar comentário na frente dele TODO: Depende de #39

  • aviao: Aviao @NotNull

Se #51 não estiver concluída, comentar campo e adicionar comentário na frente dele TODO: Depende de #51

  • piloto: Piloto @NotNull

Se #52 não estiver concluída, comentar campo e adicionar comentário na frente dele TODO: Depende de #52

  • aeroportoOrigem: Aeroporto @NotNull
  • aeroportoDestino: Aeroporto @NotNull (não pode ser igual a origem)

PR relacionadas

Criar entidade (classe) cliente e relacionados no sistema de agencia

Definir atributos e relacionamentos

Atributos sugeridos

Cliente

  • nome (anotações@NotBlank)
  • cpf @column(unique = true)
  • dataNascimento: LocalDate
  • celular @NotBlank
  • fumante: boolean (não obrigatório, pois o cliente pode não informar ou não querer informar)
  • endereco: Endereco

Endereco

  • logradouro: String @NotBlank
  • cidade: Cidade @NotNull
  • bairro: String

Cidade e Estado

Criar campos conforme o script sql na raiz do repositório

Sistema Aéreo: criar classes (entidade) Aviao e Marca

As classes devem ter os seguintes atributos iniciais (pode sugerir outros):

MarcaAviao

  • id: Long
  • descricao @Column(unique=true) @NotBlank

Aviao

  • id: Long
  • marca
  • modelo: String
    // código que identifica a aeronave internacionalmente
  • prefixo: String @Column(unique=true) @NotBlank
  • anoFabricacao: int @NotNull
  • totalAssentos: int @NotNull

Criar API REST para gerenciar Estados no sistema aéreo

Usar a biblioteca Spring Data REST seguindo este tutorial para implementar automaticamente: o acesso ao BD (a partir de uma interface Repository criada por você) e a classe Rest Resource que conterá os métodos para gerenciar Estados a partir de uma API Web.

A interface Repository deve fornecer métodos para:

  • localizar Estados pelo id
  • localizar Estado pelo nome
  • localizar Estado pelo UF
  • listar Estados

Criar API REST para gerenciar CategoriaVeiculo no sistema locadora

Usar a biblioteca Spring Data REST seguindo este tutorial para implementar automaticamente: o acesso ao BD (a partir de uma interface Repository criada por você) e a classe Rest Resource que conterá os métodos para gerenciar CategoriaVeiculo a partir de uma API Web.

Incluir campo Long id no classe CategoriaVeiculo.

A interface Repository (a ser criada em um pacote repositories) deve fornecer métodos para:

  • localizar CategoriaVeiculo pelo ID
  • localizar CategoriaVeiculo pela descricao
  • cadastrar, alterar, excluir e listar CategoriaVeiculo

Criar API REST para gerenciar Pilotos no sistema aéreo

A biblioteca Spring Data REST permite implementar automaticamente: o acesso ao BD (a partir de uma interface Repository criada por você) e a classe Rest Resource que conterá os métodos para gerenciar Pilotos a partir de uma API Web.

No entanto, como nosso repositório (a ser criada em um pacote repositories) de pilotos precisa de métodos personalizados, não sei se é possível indicar com Spring Data REST que desejamos usar um Repository que nós criamos. Veja a melhor opção.

A API deve fornecer métodos para:

  • localizar piloto pelo ID
  • localizar piloto pelo CPF
  • cadastrar piloto: deve-se verificar se uma pessoa com o CPF informado já existe. Se existir, ela deve ser usada no cadastro do piloto e não criada nova pessoa.
  • atualizar piloto

Issues Relacionadas

Criar API REST para gerenciar Aeroporto no sistema aéreo

Usar a biblioteca Spring Data REST seguindo este tutorial para implementar automaticamente: o acesso ao BD (a partir de uma interface Repository criada por você) e a classe Rest Resource que conterá os métodos para gerenciar Aeroportos a partir de uma API Web.

A interface Repository (a ser criada em um pacote repositories) deve fornecer métodos para:

  • localizar aeroporto pelo ID
  • localizar aeroporto pelo codigoIATA
  • localizar aeroportos pela ID da cidade
  • cadastrar aeroporto
  • listar aeroportos por sigla do estado (UF)

Criar API REST para gerenciar Cliente no sistema de veículos

A biblioteca Spring Data REST permite implementar automaticamente: o acesso ao BD (a partir de uma interface Repository criada por você) e a classe Rest Resource que conterá os métodos para gerenciar Cliente a partir de uma API Web.

No entanto, como nosso repositório de pilotos precisa de métodos personalizados, não sei se é possível indicar com Spring Data REST que desejamos usar um Repository que nós criamos (criar no pacote repositories). Veja a melhor opção.

A API deve fornecer métodos para:

  • localizar Cliente pelo ID
  • localizar Cliente pelo CPF

Issues Relacionadas

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.