GoNotePad - Praticando Arquitetura

GoNotePad - Praticando Arquitetura

Conheça o projeto

Neste desafio, você irá construir uma API REST de gerenciamento de lembretes do zero, aplicando os padrões Repository Pattern e Injeção de Dependência.

Sua missão é criar uma aplicação profissional e desacoplada, organizando o código em camadas bem definidas (domínio, repositório e controller), onde cada componente recebe suas dependências via construtor, garantindo testabilidade e manutenibilidade sem depender de variáveis globais ou acoplamento direto ao banco de dados.

Instruções

Estrutura, regras e requisitos do projeto

Objetivos

Você deve criar uma API REST para gerenciamento de lembretes do zero. O requisito fundamental não é apenas "fazer funcionar", mas garantir que a aplicação siga o Repository Pattern e utilize Injeção de Dependência.

Definições

1. Definição do Domínio

  • Crie uma struct Note com campos como ID, Title, Content e CreatedAt.

2. A Camada de Abstração (Interface)

  • Crie uma interface chamada NoteRepository.
  • Ela deve definir os métodos: Create, FindAll, FindByID, Update e Delete.
  • Regra: Esta interface deve receber e retornar apenas tipos do seu domínio (struct Note), nunca tipos específicos de banco de dados (como sql.Rows).

3. A Implementação do Repositório

  • Crie uma struct (ex: SqliteRepository) que implemente a interface acima.
  • Esta struct deve possuir um campo privado para a conexão com o banco (sql.DB).
  • Crie uma função construtora NewSqliteRepository(db *sql.DB) para instanciar este repositório.

4. O Controller (Handler)

  • Crie um Controller que gerencie as requisições HTTP.
  • O Segredo: O Controller não pode saber qual banco de dados você está usando. Ele deve receber a interface NoteRepository no seu construtor.

5. O Orquestrador (main.go)

  • No seu arquivo principal, você deve "ligar os pontos":
    1. Abrir a conexão com o banco de dados.
    2. Instanciar o Repositório passando a conexão.
    3. Instanciar o Controller passando o Repositório.
    4. Configurar as rotas e subir o servidor.

Resultados Esperados

  • Repository Pattern: A lógica de acesso ao banco está isolada em um pacote próprio.
  • Injeção de Dependência: Nenhuma struct cria suas próprias dependências ou usa globais; elas as recebem via construtor.
  • Clean Code: O código é legível, organizado em pacotes lógicos e sem variáveis globais espalhadas.
  • Funcionalidade: A API realiza o CRUD completo de notas com sucesso.

Tarefas

Use este checklist para ajudar a organizar a sua entrega

Resolução

Confira os resultados esperados do projeto

Paywall background

Envie o projeto para ver a resolução

Ao enviar seu projeto, você poderá conferir os resultados esperados

Projetos relacionados