From 02642f9dfa3184d0eec4f309b448c68d315e57b0 Mon Sep 17 00:00:00 2001 From: Guilherme Werner Date: Fri, 8 May 2026 19:45:33 -0300 Subject: [PATCH] Update ef core utils --- .../DatabaseConfiguration.cs | 105 ------------------ .../DatabaseConstants.cs | 12 -- .../DatabaseDriver.cs | 22 ---- .../{Repositories => }/IRepository.cs | 16 +-- .../{Repositories => }/Repository.cs | 39 ++++--- 5 files changed, 30 insertions(+), 164 deletions(-) delete mode 100644 src/Tribufu.EntityFrameworkCore/DatabaseConfiguration.cs delete mode 100644 src/Tribufu.EntityFrameworkCore/DatabaseConstants.cs delete mode 100644 src/Tribufu.EntityFrameworkCore/DatabaseDriver.cs rename src/Tribufu.EntityFrameworkCore/{Repositories => }/IRepository.cs (64%) rename src/Tribufu.EntityFrameworkCore/{Repositories => }/Repository.cs (70%) diff --git a/src/Tribufu.EntityFrameworkCore/DatabaseConfiguration.cs b/src/Tribufu.EntityFrameworkCore/DatabaseConfiguration.cs deleted file mode 100644 index 7619c8a..0000000 --- a/src/Tribufu.EntityFrameworkCore/DatabaseConfiguration.cs +++ /dev/null @@ -1,105 +0,0 @@ -// Copyright (c) Tribufu. All Rights Reserved. -// SPDX-License-Identifier: MIT - -using Microsoft.Extensions.Configuration; -using System; - -namespace Tribufu.EntityFrameworkCore -{ - public class DatabaseConfiguration - { - public DatabaseDriver Driver { get; set; } - - public string? Version { get; set; } - - public string? Host { get; set; } - - public string? Port { get; set; } - - public string? User { get; set; } - - public string? Password { get; set; } - - public string? Schema { get; set; } - - /// - /// Loads the from the "database" section or from root-level keys prefixed with "database_". - /// - /// The configuration source. - /// The populated instance. - public static DatabaseConfiguration Load(IConfiguration configuration) - { - var section = configuration.GetSection("database"); - var useRootFallback = !section.Exists(); - - string? GetConfig(string key) => useRootFallback ? configuration[$"database_{key}"] : section[key]; - - var driverString = GetConfig("driver") ?? throw new Exception("Missing database driver"); - if (!Enum.TryParse(driverString, true, out var driver)) - { - throw new Exception($"Unsupported database driver: {driverString}"); - } - - return new DatabaseConfiguration - { - Driver = driver, - Version = GetConfig("version"), - Host = GetConfig("host"), - Port = GetConfig("port"), - User = GetConfig("user"), - Password = GetConfig("password"), - Schema = GetConfig("schema") - }; - } - - /* - services.AddDbContext(options => - { - switch (dbConfig.Driver) - { - case DatabaseDriver.MySql: - var mysqlConnection = $"Server={dbConfig.Host};Port={dbConfig.Port};Uid={dbConfig.User};Pwd={dbConfig.Password};Database={dbConfig.Schema};ConvertZeroDateTime=True;"; - options.UseMySql(mysqlConnection, ServerVersion.Parse(dbConfig.Version ?? "8.0"), mySqlOptions => { }); - break; - case DatabaseDriver.Postgres: - var pgsqlConnection = $"Host={dbConfig.Host};Port={dbConfig.Port};Database={dbConfig.Schema};Username={dbConfig.User};Password={dbConfig.Password};"; - options.UseNpgsql(pgsqlConnection, npgsqlOptions => { }); - break; - case DatabaseDriver.SqlServer: - var sqlServerConnection = $"Server={dbConfig.Host},{dbConfig.Port};Database={dbConfig.Schema};User Id={dbConfig.User};Password={dbConfig.Password};Encrypt=True;TrustServerCertificate=True;"; - options.UseSqlServer(sqlServerConnection, sqlOptions => { }); - break; - case DatabaseDriver.Oracle: - var oracleConnection = $"User Id={dbConfig.User};Password={dbConfig.Password};Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST={dbConfig.Host})(PORT={dbConfig.Port})))(CONNECT_DATA=(SERVICE_NAME={dbConfig.Schema})));"; - options.UseOracle(oracleConnection, oracleOptions => { }); - break; - case DatabaseDriver.Firebird: - var firebirdConnection = $"User={dbConfig.User};Password={dbConfig.Password};Database={dbConfig.Host}:{dbConfig.Port}/{dbConfig.Schema};Dialect=3;"; - options.UseFirebird(firebirdConnection, firebirdOptions => { }); - break; - case DatabaseDriver.Sqlite: - var savedDirectory = Paths.GetApplicationSavedDirectory(); - if (!Directory.Exists(savedDirectory)) Directory.CreateDirectory(savedDirectory); - var sqliteDatabaseFile = string.IsNullOrEmpty(dbConfig.Schema) ? "default.db" : $"{dbConfig.Schema}.db"; - var sqliteDatabasePath = Path.Combine(savedDirectory, sqliteDatabaseFile); - options.UseSqlite($"Data Source={sqliteDatabasePath}", sqliteOptions => { }); - break; - case DatabaseDriver.MongoDb: - var mongoUriBuilder = new MongoUrlBuilder - { - Server = new MongoServerAddress(dbConfig.Host, int.Parse(dbConfig.Port ?? "27017")), - Username = dbConfig.User, - Password = dbConfig.Password, - DatabaseName = dbConfig.Schema - }; - var mongoClient = new MongoClient(mongoUriBuilder.ToMongoUrl()); - var mongoDatabase = mongoClient.GetDatabase(dbConfig.Schema ?? "default"); - options.UseMongoDB(mongoDatabase.Client, mongoDatabase.DatabaseNamespace.DatabaseName); - break; - default: - throw new NotSupportedException($"Unsupported database driver: {dbConfig.Driver}"); - } - }); - */ - } -} diff --git a/src/Tribufu.EntityFrameworkCore/DatabaseConstants.cs b/src/Tribufu.EntityFrameworkCore/DatabaseConstants.cs deleted file mode 100644 index 8b51fc4..0000000 --- a/src/Tribufu.EntityFrameworkCore/DatabaseConstants.cs +++ /dev/null @@ -1,12 +0,0 @@ -// Copyright (c) Tribufu. All Rights Reserved. -// SPDX-License-Identifier: MIT - -namespace Tribufu.EntityFrameworkCore -{ - public static class DatabaseConstants - { - public const uint DEFAULT_PAGINATION = 20; - - public const uint MAX_PAGINATION = 100; - } -} diff --git a/src/Tribufu.EntityFrameworkCore/DatabaseDriver.cs b/src/Tribufu.EntityFrameworkCore/DatabaseDriver.cs deleted file mode 100644 index d904e83..0000000 --- a/src/Tribufu.EntityFrameworkCore/DatabaseDriver.cs +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright (c) Tribufu. All Rights Reserved. -// SPDX-License-Identifier: MIT - -namespace Tribufu.EntityFrameworkCore -{ - public enum DatabaseDriver : byte - { - MySql = 0, - - Postgres = 1, - - SqlServer = 2, - - Oracle = 3, - - Firebird = 4, - - Sqlite = 5, - - MongoDb = 6, - } -} diff --git a/src/Tribufu.EntityFrameworkCore/Repositories/IRepository.cs b/src/Tribufu.EntityFrameworkCore/IRepository.cs similarity index 64% rename from src/Tribufu.EntityFrameworkCore/Repositories/IRepository.cs rename to src/Tribufu.EntityFrameworkCore/IRepository.cs index dbb4b19..0e00b08 100644 --- a/src/Tribufu.EntityFrameworkCore/Repositories/IRepository.cs +++ b/src/Tribufu.EntityFrameworkCore/IRepository.cs @@ -4,23 +4,25 @@ using System.Collections.Generic; using System.Threading.Tasks; -namespace Tribufu.EntityFrameworkCore.Repositories +namespace Tribufu.EntityFrameworkCore { public interface IRepository where T : class { + void Seed(); + Task SeedAsync(); - IList GetAll(); + IList List(); - Task> GetAllAsync(); + Task> ListAsync(); - IList GetPage(uint page, uint limit); + IList List(uint page, uint limit); - Task> GetPageAsync(uint page, uint limit); + Task> ListAsync(uint page, uint limit); - T? GetOne(K key); + T? Find(K key); - Task GetOneAsync(K key); + Task FindAsync(K key); T? Create(T entity); diff --git a/src/Tribufu.EntityFrameworkCore/Repositories/Repository.cs b/src/Tribufu.EntityFrameworkCore/Repository.cs similarity index 70% rename from src/Tribufu.EntityFrameworkCore/Repositories/Repository.cs rename to src/Tribufu.EntityFrameworkCore/Repository.cs index c70a3c5..6851858 100644 --- a/src/Tribufu.EntityFrameworkCore/Repositories/Repository.cs +++ b/src/Tribufu.EntityFrameworkCore/Repository.cs @@ -7,50 +7,54 @@ using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; -namespace Tribufu.EntityFrameworkCore.Repositories +namespace Tribufu.EntityFrameworkCore { public class Repository : IRepository where C : DbContext where T : class { - protected readonly C _context; + protected readonly C _dbContext; protected readonly DbSet _dbSet; - public Repository(C context) + public Repository(C dbContext) + { + _dbContext = dbContext ?? throw new ArgumentNullException(nameof(dbContext)); + _dbSet = dbContext.Set(); + } + + public virtual void Seed() { - _context = context ?? throw new ArgumentNullException(nameof(context)); - _dbSet = context.Set(); } public virtual async Task SeedAsync() { } - public virtual IList GetAll() + public virtual IList List() { return [.. _dbSet]; } - public virtual async Task> GetAllAsync() + public virtual async Task> ListAsync() { return await _dbSet.ToListAsync(); } - public virtual IList GetPage(uint page, uint limit) + public virtual IList List(uint page, uint limit) { return _dbSet.Skip((int)((page < 1 ? 0 : page - 1) * limit)).Take((int)limit).ToList(); } - public virtual async Task> GetPageAsync(uint page, uint limit) + public virtual async Task> ListAsync(uint page, uint limit) { return await _dbSet.Skip((int)((page < 1 ? 0 : page - 1) * limit)).Take((int)limit).ToListAsync(); } - public virtual T? GetOne(K key) + public virtual T? Find(K key) { return _dbSet.Find(key); } - public virtual async Task GetOneAsync(K key) + public virtual async Task FindAsync(K key) { return await _dbSet.FindAsync(key); } @@ -58,29 +62,28 @@ namespace Tribufu.EntityFrameworkCore.Repositories public virtual T? Create(T entity) { _dbSet.Add(entity); - - var result = _context.SaveChanges(); + var result = _dbContext.SaveChanges(); return result > 0 ? entity : null; } public virtual async Task CreateAsync(T entity) { await _dbSet.AddAsync(entity); - var result = await _context.SaveChangesAsync(); + var result = await _dbContext.SaveChangesAsync(); return result > 0 ? entity : null; } public virtual T? Update(T entity) { _dbSet.Update(entity); - var result = _context.SaveChanges(); + var result = _dbContext.SaveChanges(); return result > 0 ? entity : null; } public virtual async Task UpdateAsync(T entity) { _dbSet.Update(entity); - var result = await _context.SaveChangesAsync(); + var result = await _dbContext.SaveChangesAsync(); return result > 0 ? entity : null; } @@ -105,13 +108,13 @@ namespace Tribufu.EntityFrameworkCore.Repositories public virtual void Delete(T entity) { _dbSet.Remove(entity); - _context.SaveChanges(); + _dbContext.SaveChanges(); } public virtual async Task DeleteAsync(T entity) { _dbSet.Remove(entity); - await _context.SaveChangesAsync(); + await _dbContext.SaveChangesAsync(); } } }