.NET
O projeto CRUD que construí para ter algo para mostrar a recrutadores
Inspirado num teste de código que André Baltieri (Balta) dá para candidatos, construí um app CRUD de Student e assinatura Premium com auth de verdade em alguns dias, e gastei o tempo que sobrou no que de fato faz um projeto parecer terminado.
Eu queria um projeto para o qual pudesse apontar recrutadores que estivesse de fato terminado, não mais uma ideia pela metade sentada num repo em algum lugar. O prompt para isso veio de um vídeo do André Baltieri, do Balta, passando por um teste de código que ele dá para candidatos a uma vaga na Balta.io: construir um app completo de gerenciamento de Student e assinatura Premium com authentication em ASP.NET Core, entregue em alguns dias.
Por que construí a mesma coisa
O ponto inteiro do Balta naquele vídeo era que terminar algo simples e funcional supera uma versão inacabada e over-engineered de algo ambicioso. Isso combinava exatamente com o que eu precisava para uma peça de portfólio, então construí o mesmo briefing para mim mesmo: um app CRUD de Student e assinatura Premium, auth de verdade, nada exótico.
O que de fato tornou isso rápido
Usei o Identity embutido do ASP.NET Core em vez de escrever minha própria authentication do zero:
dotnet new razor -au Individual
Essa única flag -au Individual monta um sistema local de identity completo, registro, login, logout, e cookies persistentes, sem eu tocar numa implementação de JWT.
Para os models de Student e Premium, apoiei em data annotations em vez de escrever lógica de validação separada:
public class Student
{
[Key]
public int Id { get; set; }
[Required(ErrorMessage = "Full Name is required")]
[StringLength(80, MinimumLength = 5)]
public string Name { get; set; } = string.Empty;
[Required]
[EmailAddress]
public string Email { get; set; } = string.Empty;
public List<Premium> Premiums { get; set; } = new();
}
Um único attribute no model cuida tanto da constraint de database quanto da validação de formulário na página, sem JavaScript extra ou checagens manuais em nenhum dos lados.
A outra grande economia de tempo foi scaffolding. O gerador de código da Microsoft consegue construir o conjunto completo de páginas CRUD diretamente contra o EF Core:
dotnet tool install -g dotnet-aspnet-codegenerator
dotnet aspnet-codegenerator razorpage Create Create -m Student -dc ApplicationDbContext -sqlite -udl -outDir Pages/Students
Isso gerou as views, os handlers de formulário, e as chamadas de save para Create, Edit, Delete, Details, e a list view em minutos em vez de horas.
O que eu fiz com o tempo que sobrou
Assim que o CRUD e a auth de base estavam funcionando, gastei o resto do tempo nas partes que de fato fazem um projeto parecer terminado em vez de scaffolded: limpando o código gerado e os nomes, estilizando a UI de verdade em vez de deixar o visual padrão do Bootstrap, populando o database para que não estivesse vazio na primeira vez que alguém abrisse, e adicionando tests em volta dos endpoints principais.
O que eu tirei disso
A lição de verdade foi que um projeto pequeno e completo diz mais para um recrutador do que um maior que está pela metade, e o formato de teste do Balta é uma boa forma de impor essa restrição a si mesmo.