Skip to content

Lukinhasssss/admin-catalogo-de-videos-kotlin

Repository files navigation

🚀 Microserviço: Administração do Catálogo de Vídeos - Kotlin

Microserviço referente ao backend da Administração do Catálogo de Vídeos
Utilizando Kotlin, Clean Architecture, DDD, TDD e as boas práticas atuais de mercado


Entidade Categoria

Campos

  • Nome
  • Descrição
  • Ativar ou desativar
  • Auditoria (data de criação, atualização e deleção)

Regras de Negócio

  • Nome não deve ser nulo ou em branco
  • Nome deve conter no mínimo 3 caracteres
  • Nome deve conter no máximo 255 caracteres
  • Descrição pode ser nula ou em branco

Entidade Gênero

Campos

  • Nome
  • Relação N para N com Categorias
  • Ativar ou desativar
  • Auditoria (data de criação, atualização e deleção)

Regras de Negócio

  • Nome não deve ser nulo ou em branco
  • Nome deve conter no máximo 255 caracteres

Entidade Cast Member (Membro de Elenco)

Campos

  • Nome
  • Tipo
  • Auditoria (data de criação e atualização)

Regras de Negócio

  • Nome não deve ser nulo ou em branco
  • Nome deve conter no mínimo 3 caracteres
  • Nome deve conter no máximo 255 caracteres

Entidade Video

Campos

  • Título
  • Descrição
  • Ano de lançamento
  • Já estreou?
  • Duração
  • Publicado
  • Auditoria (data de criação e atualização)
  • Rating (classificação de idade)
  • Thumb (imagem)
  • Meia thumb (imagem)
  • Banner (imagem)
  • Trailer (midia)
  • Midia (url original, url encodada, controle de status)
  • Relacionamento com Categorias (várias)
  • Relacionamento com Gêneros (vários)
  • Relacionamento com Membros de Elenco (vários)

Regras de Negócio

  • Título não deve ser nulo ou em branco
  • Título deve conter no máximo 255 caracteres
  • Descrição não pode ser vazia
  • Ano de lançamento é obrigatório
  • Rating é obrigatório

Ferramentas necessárias

  • JDK 17
  • IDE de sua preferência
  • Docker

Como executar?

  1. Clonar o repositório:
git clone https://github.com/Lukinhasssss/admin-catalogo-de-videos-kotlin.git
  1. Subir o banco de dados PostgreSQL com Docker:
docker-compose up -d
  1. Executar as migrações do PostgreSQL com o Flyway:
./gradlew flywayMigrate
  1. Executar a aplicação como SpringBoot app:
./gradlew bootRun

Também é possível executar como uma aplicação Java através do método main() na classe Main.java

Banco de dados

O banco de dados principal é um PostgreSQL e para subir localmente vamos utilizar o Docker. Execute o comando a seguir para subir o PostgreSQL:

docker-compose up -d

Pronto! Aguarde que em instantes o PostgreSQL irá estar pronto para ser consumido na porta 5432.

Migrações do banco de dados com Flyway

Executar as migrações

Caso seja a primeira vez que esteja subindo o banco de dados, é necessário executar as migrações SQL com a ferramenta flyway. Execute o comando a seguir para executar as migrações:

./gradlew flywayMigrate

Pronto! Agora sim o banco de dados PostgreSQL está pronto para ser utilizado.


Limpar as migrações do banco

É possível limpar (deletar todas as tabelas) seu banco de dados, basta executar o seguinte comando:

./gradlew flywayClean

MAS lembre-se: "Grandes poderes, vem grandes responsabilidades".


Reparando as migrações do banco

Existe duas maneiras de gerar uma inconsistência no Flyway deixando ele no estado de reparação:

  1. Algum arquivo SQL de migração com erro;
  2. Algum arquivo de migração já aplicado foi alterado (modificando o checksum).

Quando isso acontecer o flyway ficará em um estado de reparação com um registro na tabela flyway_schema_history com erro (sucesso = 0).

Para executar a reparação, corrija os arquivos e execute:

./gradlew flywayRepair

Com o comando acima o Flyway limpará os registros com erro da tabela flyway_schema_history, na sequência execute o comando FlywayMigrate para tentar migrar-los novamente.


Outros comandos úteis do Flyway

Além dos comandos já exibidos, temos alguns outros muito úteis como o info e o validate:

./gradlew flywayInfo
./gradlew flywayValidate

Para saber todos os comandos disponíveis: Flyway Gradle Plugin


Para executar os comandos em outro ambiente

Lá no build.gradle configuramos o Flyway para lêr primeiro as variáveis de ambiente FLYWAY_DB, FLYWAY_USER e FLYWAY_PASS e depois usar um valor padrão caso não as encontre. Com isso, para apontar para outro ambiente basta sobrescrever essas variáveis na hora de executar os comandos, exemplo:

FLYWAY_DB=jdbc:postgresql://prod:5432/adm_videos FLYWAY_USER=root FLYWAY_PASS=123h1hu ./gradlew flywayValidate