diff --git a/.config/dotnet-tools.json b/.config/dotnet-tools.json new file mode 100644 index 0000000..837b189 --- /dev/null +++ b/.config/dotnet-tools.json @@ -0,0 +1,13 @@ +{ + "version": 1, + "isRoot": true, + "tools": { + "dotnet-ef": { + "version": "9.0.8", + "commands": [ + "dotnet-ef" + ], + "rollForward": false + } + } +} \ No newline at end of file diff --git a/Api/Infraestrutura/Db/DbContexto.cs b/Api/Infraestrutura/Db/DbContexto.cs index ef7b837..bf183e0 100644 --- a/Api/Infraestrutura/Db/DbContexto.cs +++ b/Api/Infraestrutura/Db/DbContexto.cs @@ -1,15 +1,12 @@ using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Design; using MinimalApi.Dominio.Entidades; namespace MinimalApi.Infraestrutura.Db; public class DbContexto : DbContext { - private readonly IConfiguration _configuracaoAppSettings; - public DbContexto(IConfiguration configuracaoAppSettings) - { - _configuracaoAppSettings = configuracaoAppSettings; - } + public DbContexto(DbContextOptions options) : base(options) {} public DbSet Administradores { get; set; } = default!; public DbSet Veiculos { get; set; } = default!; @@ -25,19 +22,23 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) } ); } +} - protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) +public class DbContextoFactory : IDesignTimeDbContextFactory +{ + public DbContexto CreateDbContext(string[] args) { - if(!optionsBuilder.IsConfigured) - { - var stringConexao = _configuracaoAppSettings.GetConnectionString("MySql")?.ToString(); - if(!string.IsNullOrEmpty(stringConexao)) - { - optionsBuilder.UseMySql( - stringConexao, - ServerVersion.AutoDetect(stringConexao) - ); - } - } + var optionsBuilder = new DbContextOptionsBuilder(); + + // Lê o appsettings.json para obter a string de conexão em tempo de design + IConfigurationRoot configuration = new ConfigurationBuilder() + .SetBasePath(Directory.GetCurrentDirectory()) + .AddJsonFile("appsettings.json") + .Build(); + + var connectionString = configuration.GetConnectionString("MySql"); + optionsBuilder.UseSqlite(connectionString); + + return new DbContexto(optionsBuilder.Options); } } \ No newline at end of file diff --git a/Api/Migrations/20231114235912_AdministradorMigration.Designer.cs b/Api/Migrations/20231114235912_AdministradorMigration.Designer.cs deleted file mode 100644 index c0283a3..0000000 --- a/Api/Migrations/20231114235912_AdministradorMigration.Designer.cs +++ /dev/null @@ -1,52 +0,0 @@ -// -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using MinimalApi.Infraestrutura.Db; - -#nullable disable - -namespace mininal_api.Migrations -{ - [DbContext(typeof(DbContexto))] - [Migration("20231114235912_AdministradorMigration")] - partial class AdministradorMigration - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "7.0.14") - .HasAnnotation("Relational:MaxIdentifierLength", 64); - - modelBuilder.Entity("MinimalApi.Dominio.Entidades.Administrador", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - b.Property("Email") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("varchar(255)"); - - b.Property("Perfil") - .IsRequired() - .HasMaxLength(10) - .HasColumnType("varchar(10)"); - - b.Property("Senha") - .IsRequired() - .HasMaxLength(50) - .HasColumnType("varchar(50)"); - - b.HasKey("Id"); - - b.ToTable("Administradores"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/Api/Migrations/20231114235912_AdministradorMigration.cs b/Api/Migrations/20231114235912_AdministradorMigration.cs deleted file mode 100644 index 544c116..0000000 --- a/Api/Migrations/20231114235912_AdministradorMigration.cs +++ /dev/null @@ -1,44 +0,0 @@ -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace mininal_api.Migrations -{ - /// - public partial class AdministradorMigration : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.AlterDatabase() - .Annotation("MySql:CharSet", "utf8mb4"); - - migrationBuilder.CreateTable( - name: "Administradores", - columns: table => new - { - Id = table.Column(type: "int", nullable: false) - .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), - Email = table.Column(type: "varchar(255)", maxLength: 255, nullable: false) - .Annotation("MySql:CharSet", "utf8mb4"), - Senha = table.Column(type: "varchar(50)", maxLength: 50, nullable: false) - .Annotation("MySql:CharSet", "utf8mb4"), - Perfil = table.Column(type: "varchar(10)", maxLength: 10, nullable: false) - .Annotation("MySql:CharSet", "utf8mb4") - }, - constraints: table => - { - table.PrimaryKey("PK_Administradores", x => x.Id); - }) - .Annotation("MySql:CharSet", "utf8mb4"); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "Administradores"); - } - } -} diff --git a/Api/Migrations/20231115013756_SeedAdministrador.Designer.cs b/Api/Migrations/20231115013756_SeedAdministrador.Designer.cs deleted file mode 100644 index 251457e..0000000 --- a/Api/Migrations/20231115013756_SeedAdministrador.Designer.cs +++ /dev/null @@ -1,61 +0,0 @@ -// -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using MinimalApi.Infraestrutura.Db; - -#nullable disable - -namespace mininal_api.Migrations -{ - [DbContext(typeof(DbContexto))] - [Migration("20231115013756_SeedAdministrador")] - partial class SeedAdministrador - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "7.0.14") - .HasAnnotation("Relational:MaxIdentifierLength", 64); - - modelBuilder.Entity("MinimalApi.Dominio.Entidades.Administrador", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - b.Property("Email") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("varchar(255)"); - - b.Property("Perfil") - .IsRequired() - .HasMaxLength(10) - .HasColumnType("varchar(10)"); - - b.Property("Senha") - .IsRequired() - .HasMaxLength(50) - .HasColumnType("varchar(50)"); - - b.HasKey("Id"); - - b.ToTable("Administradores"); - - b.HasData( - new - { - Id = 1, - Email = "administrador@teste.com", - Perfil = "Adm", - Senha = "123456" - }); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/Api/Migrations/20231115013756_SeedAdministrador.cs b/Api/Migrations/20231115013756_SeedAdministrador.cs deleted file mode 100644 index 457635c..0000000 --- a/Api/Migrations/20231115013756_SeedAdministrador.cs +++ /dev/null @@ -1,28 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace mininal_api.Migrations -{ - /// - public partial class SeedAdministrador : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.InsertData( - table: "Administradores", - columns: new[] { "Id", "Email", "Perfil", "Senha" }, - values: new object[] { 1, "administrador@teste.com", "Adm", "123456" }); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DeleteData( - table: "Administradores", - keyColumn: "Id", - keyValue: 1); - } - } -} diff --git a/Api/Migrations/20231115020944_VeiculosMigration.cs b/Api/Migrations/20231115020944_VeiculosMigration.cs deleted file mode 100644 index 572071f..0000000 --- a/Api/Migrations/20231115020944_VeiculosMigration.cs +++ /dev/null @@ -1,40 +0,0 @@ -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace mininal_api.Migrations -{ - /// - public partial class VeiculosMigration : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.CreateTable( - name: "Veiculos", - columns: table => new - { - Id = table.Column(type: "int", nullable: false) - .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), - Nome = table.Column(type: "varchar(150)", maxLength: 150, nullable: false) - .Annotation("MySql:CharSet", "utf8mb4"), - Marca = table.Column(type: "varchar(100)", maxLength: 100, nullable: false) - .Annotation("MySql:CharSet", "utf8mb4"), - Ano = table.Column(type: "int", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_Veiculos", x => x.Id); - }) - .Annotation("MySql:CharSet", "utf8mb4"); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "Veiculos"); - } - } -} diff --git a/Api/Migrations/20231115020944_VeiculosMigration.Designer.cs b/Api/Migrations/20250906190937_InitialCreateSqlite.Designer.cs similarity index 76% rename from Api/Migrations/20231115020944_VeiculosMigration.Designer.cs rename to Api/Migrations/20250906190937_InitialCreateSqlite.Designer.cs index b302174..f07c8a7 100644 --- a/Api/Migrations/20231115020944_VeiculosMigration.Designer.cs +++ b/Api/Migrations/20250906190937_InitialCreateSqlite.Designer.cs @@ -10,37 +10,35 @@ namespace mininal_api.Migrations { [DbContext(typeof(DbContexto))] - [Migration("20231115020944_VeiculosMigration")] - partial class VeiculosMigration + [Migration("20250906190937_InitialCreateSqlite")] + partial class InitialCreateSqlite { /// protected override void BuildTargetModel(ModelBuilder modelBuilder) { #pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "7.0.14") - .HasAnnotation("Relational:MaxIdentifierLength", 64); + modelBuilder.HasAnnotation("ProductVersion", "7.0.14"); modelBuilder.Entity("MinimalApi.Dominio.Entidades.Administrador", b => { b.Property("Id") .ValueGeneratedOnAdd() - .HasColumnType("int"); + .HasColumnType("INTEGER"); b.Property("Email") .IsRequired() .HasMaxLength(255) - .HasColumnType("varchar(255)"); + .HasColumnType("TEXT"); b.Property("Perfil") .IsRequired() .HasMaxLength(10) - .HasColumnType("varchar(10)"); + .HasColumnType("TEXT"); b.Property("Senha") .IsRequired() .HasMaxLength(50) - .HasColumnType("varchar(50)"); + .HasColumnType("TEXT"); b.HasKey("Id"); @@ -60,20 +58,20 @@ protected override void BuildTargetModel(ModelBuilder modelBuilder) { b.Property("Id") .ValueGeneratedOnAdd() - .HasColumnType("int"); + .HasColumnType("INTEGER"); b.Property("Ano") - .HasColumnType("int"); + .HasColumnType("INTEGER"); b.Property("Marca") .IsRequired() .HasMaxLength(100) - .HasColumnType("varchar(100)"); + .HasColumnType("TEXT"); b.Property("Nome") .IsRequired() .HasMaxLength(150) - .HasColumnType("varchar(150)"); + .HasColumnType("TEXT"); b.HasKey("Id"); diff --git a/Api/Migrations/20250906190937_InitialCreateSqlite.cs b/Api/Migrations/20250906190937_InitialCreateSqlite.cs new file mode 100644 index 0000000..9edf260 --- /dev/null +++ b/Api/Migrations/20250906190937_InitialCreateSqlite.cs @@ -0,0 +1,59 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace mininal_api.Migrations +{ + /// + public partial class InitialCreateSqlite : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "Administradores", + columns: table => new + { + Id = table.Column(type: "INTEGER", nullable: false) + .Annotation("Sqlite:Autoincrement", true), + Email = table.Column(type: "TEXT", maxLength: 255, nullable: false), + Senha = table.Column(type: "TEXT", maxLength: 50, nullable: false), + Perfil = table.Column(type: "TEXT", maxLength: 10, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Administradores", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "Veiculos", + columns: table => new + { + Id = table.Column(type: "INTEGER", nullable: false) + .Annotation("Sqlite:Autoincrement", true), + Nome = table.Column(type: "TEXT", maxLength: 150, nullable: false), + Marca = table.Column(type: "TEXT", maxLength: 100, nullable: false), + Ano = table.Column(type: "INTEGER", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Veiculos", x => x.Id); + }); + + migrationBuilder.InsertData( + table: "Administradores", + columns: new[] { "Id", "Email", "Perfil", "Senha" }, + values: new object[] { 1, "administrador@teste.com", "Adm", "123456" }); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "Administradores"); + + migrationBuilder.DropTable( + name: "Veiculos"); + } + } +} diff --git a/Api/Migrations/DbContextoModelSnapshot.cs b/Api/Migrations/DbContextoModelSnapshot.cs index 59b35c6..c583605 100644 --- a/Api/Migrations/DbContextoModelSnapshot.cs +++ b/Api/Migrations/DbContextoModelSnapshot.cs @@ -14,30 +14,28 @@ partial class DbContextoModelSnapshot : ModelSnapshot protected override void BuildModel(ModelBuilder modelBuilder) { #pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "7.0.14") - .HasAnnotation("Relational:MaxIdentifierLength", 64); + modelBuilder.HasAnnotation("ProductVersion", "7.0.14"); modelBuilder.Entity("MinimalApi.Dominio.Entidades.Administrador", b => { b.Property("Id") .ValueGeneratedOnAdd() - .HasColumnType("int"); + .HasColumnType("INTEGER"); b.Property("Email") .IsRequired() .HasMaxLength(255) - .HasColumnType("varchar(255)"); + .HasColumnType("TEXT"); b.Property("Perfil") .IsRequired() .HasMaxLength(10) - .HasColumnType("varchar(10)"); + .HasColumnType("TEXT"); b.Property("Senha") .IsRequired() .HasMaxLength(50) - .HasColumnType("varchar(50)"); + .HasColumnType("TEXT"); b.HasKey("Id"); @@ -57,20 +55,20 @@ protected override void BuildModel(ModelBuilder modelBuilder) { b.Property("Id") .ValueGeneratedOnAdd() - .HasColumnType("int"); + .HasColumnType("INTEGER"); b.Property("Ano") - .HasColumnType("int"); + .HasColumnType("INTEGER"); b.Property("Marca") .IsRequired() .HasMaxLength(100) - .HasColumnType("varchar(100)"); + .HasColumnType("TEXT"); b.Property("Nome") .IsRequired() .HasMaxLength(150) - .HasColumnType("varchar(150)"); + .HasColumnType("TEXT"); b.HasKey("Id"); diff --git a/Api/Startup.cs b/Api/Startup.cs index 9fa4f87..f0ed79d 100644 --- a/Api/Startup.cs +++ b/Api/Startup.cs @@ -73,9 +73,8 @@ public void ConfigureServices(IServiceCollection services) }); services.AddDbContext(options => { - options.UseMySql( - Configuration.GetConnectionString("MySql"), - ServerVersion.AutoDetect(Configuration.GetConnectionString("MySql")) + options.UseSqlite( + Configuration.GetConnectionString("MySql") ); }); diff --git a/Api/appsettings.json b/Api/appsettings.json index e47fe81..6da9d02 100644 --- a/Api/appsettings.json +++ b/Api/appsettings.json @@ -1,13 +1,13 @@ -{ - "Logging": { - "LogLevel": { - "Default": "Information", - "Microsoft.AspNetCore": "Warning" - } - }, - "AllowedHosts": "*", - "ConnectionStrings": { - "MySql": "Server=localhost;Database=minimal_api;Uid=root;Pwd=root;" - }, - "Jwt": "minimal-api-alunos-vamos_lá" -} +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + }, + "AllowedHosts": "*", + "ConnectionStrings": { + "MySql": "Data Source=minimal-api.db" + }, + "Jwt": "minimal-api-alunos-vamos_lá" +} diff --git a/Api/mininal-api.csproj b/Api/mininal-api.csproj index 0922f14..3fee5be 100644 --- a/Api/mininal-api.csproj +++ b/Api/mininal-api.csproj @@ -1,25 +1,26 @@ - - - - net7.0 - enable - enable - mininal_api - - - - - - - runtime; build; native; contentfiles; analyzers; buildtransitive - all - - - runtime; build; native; contentfiles; analyzers; buildtransitive - all - - - - - - + + + + net8.0 + enable + enable + mininal_api + + + + + + + runtime; build; native; contentfiles; analyzers; buildtransitive + all + + + + runtime; build; native; contentfiles; analyzers; buildtransitive + all + + + + + +