back to lab notes
backendactive2025

ASP.NET Core REST API

Arquitetura monorepo .NET 8 com Minimal API, Blazor WebAssembly, Capacitor mobile e módulo P2P WebTorrent para plataforma educacional.

C#.NET 8PostgreSQLBlazorJWT

Specifications

Runtime

.NET 8.0 · C# 12

SGBD

PostgreSQL (Npgsql 8.0.7)

Auth

JWT + RBAC

Frontend

Blazor WebAssembly

Mobile

Capacitor 7.4.4

Repo

~49 MB · 89 commits

Tech Stack

C# 12.NET 8Blazor WASMNpgsqlJWTCapacitor 7.4WebTorrent

Overview

Monorepo de ~49 MB (89 commits) com 4 componentes: EducacaoInteligente (Blazor WASM), EducacaoInteligenteAPI (Minimal API com pipeline HTTP otimizado e DI modular), AndroidApplication (wrapper Capacitor 7.4.4), e VideoSharing (P2P via webtorrent 2.8.4 + bittorrent-tracker). Acesso direto ao PostgreSQL via Npgsql sem ORM para controle total de transações. RBAC implementado em endpoints segmentados (/alunos, /professores, /gestores).

Key Features

  • Minimal API com pipeline HTTP otimizado e injeção de dependências modular
  • SQL direto com Npgsql 8.0.7 — sem ORM, controle total de transações
  • RBAC segmentado: /alunos, /professores, /gestores
  • DTOs estritos: RespostaEnvio { IdAluno, IdQuestao, RespostaDada }
  • Distribuição P2P de mídia via WebTorrent 2.8.4 + bittorrent-tracker
  • Wrapper mobile nativo com Ionic Capacitor 7.4.4

Minimal API Endpoint com JWT e DTO

csharp
app.MapPost("/api/respostas", [Authorize(Roles = "Aluno")]
async (RespostaEnvio dto, NpgsqlConnection db) =>
{
    await using var cmd = new NpgsqlCommand(
        @"INSERT INTO respostas (id_aluno, id_questao, resposta)
          VALUES (@aluno, @questao, @resposta)", db);

    cmd.Parameters.AddWithValue("aluno", dto.IdAluno);
    cmd.Parameters.AddWithValue("questao", dto.IdQuestao);
    cmd.Parameters.AddWithValue("resposta", dto.RespostaDada);

    await db.OpenAsync();
    await cmd.ExecuteNonQueryAsync();

    return Results.Created();
});