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
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