Skip to content

Latest commit

 

History

History
91 lines (70 loc) · 3.35 KB

README.md

File metadata and controls

91 lines (70 loc) · 3.35 KB

Blog

Desenvolvi uma API para um Blog simples, sempre prezando pela integridade conceitual.

Usei como inspiração o Medium e o dev.to para desenvolver os casos de uso.

A API foi feita com DotNet Core e C#.
Na parte de banco de dados, usei o EF Core, o Dapper e o Postgres.
Na de autenticação e autorização, usei o Identity Core com JWT.
Na de testes, usei o NUnit com Fluent Assertions.
E para documentação, o Swagger.

Este projeto ainda não está finalizado, ainda pretendo desenvolver os seguintes pontos:

  • Utilizar migrations pro banco de dados
  • Adicionar pipelines de CI/CD usando o GitHub Actions CI
  • Dockerizar oz projetos
  • Subir tudo no GCP
  • Entender CORs
  • Adicionar ReDoc
  • Adicionar cache simples do DotNet
  • Fazer o front-end com Blazor
  • Tirar secrets do appsettings
  • Refatorar código das controllers usando services
  • Adicionar mais testes (principalmente de unidade) e melhorar os já existentes
  • Adicionar integração com Google pra facilitar o login
  • Adicionar um painel para administração dos posts

Modelagem de dados

A seguir, uma breve descrição das entidades e de seus relacionamentos.

  • Bloggers:

    • Quem escreve os Posts, são os produtores de conteúdo.
  • Readers:

    • Quem lê os Posts, são os consumidores de conteúdo.
  • Users:

    • Quando um Blogger ou um Reader se cadastra no Blog, um User é atrelado à ele.
    • Possui informações de login, como e-mail e senha.
  • Posts:

    • Cada Post possui um único autor, isto é, um Blogger.
    • Ele também está dentro de uma única Category.
    • E pode ou não estar atrelado à várias Tags.
    • Dado um Post, tanto Readers quanto Bloggers podem fazer Comments sobre seu conteúdo.
    • Em um Post, o autor tem a opção de fixar um Comment no topo, o destacando dos demais.
  • Categories:

    • Um tópico/assunto principal abordado em um Post.
    • Por exemplo: EF Core, JWT, Dapper, Docker, Postgres...
  • Tags:

    • Parece com uma Category, sendo um tópico/assunto secundário abordado no Post.
    • Como dito antes, um Post pode estar atrelado à várias Tags.
  • Comments:

    • Cada Comment está vinculado à um Post.
    • Um Comment pode ter vários Replies.
    • Um Comment pode ter vários Likes.
  • Replies:

    • É tipo um Comment, só que feito sobre um Comment.
  • Likes:

    • Dispensa apresentações, pode ser dado por um User em um Comment.
  • Networks:

    • Representa um link para uma rede social de um User.
    • Exemplo: LinkedIn, GitHub, Twitter, YouTube, Instagram...

Usando o EF Core, é extremamente fácil configurar esses relacionamentos via FluentApi.

  • Um-Para-Um:

    • Um Blogger está vinculado à um User
    • Um Reader está vinculado à um User
  • Um-Para-Muitos:

    • Uma Category pode conter vários Posts
    • Um Blogger pode escrever vários Posts
    • Um Post pode ter muitos Comments
    • Um Comment pode ter vários Replies
    • Um Comment pode ter vários Likes
    • Um User pode escrever vários Comments
    • Um User pode escrever vários Replies
    • Um User pode dar vários Likes
    • Um User pode ter várias Networks
  • Muitos-Para-Muitos:

    • Um Post pode ter várias Tags, e uma mesma Tag pode estar vinculada à vários Posts