// WingsEmu // // Developed by NosWings Team using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Diagnostics; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection.Extensions; using Microsoft.Extensions.Logging; using Newtonsoft.Json; using Npgsql; using PhoenixLib.DAL; using Plugin.Database.Bazaar; using Plugin.Database.DAOs; using Plugin.Database.DB; using Plugin.Database.Entities.Account; using Plugin.Database.Entities.PlayersData; using Plugin.Database.Extensions; using Plugin.Database.Families; using Plugin.Database.Mail; using Plugin.Database.Mapping; using Plugin.Database.Warehouse; using WingsAPI.Data.Account; using WingsAPI.Data.Bazaar; using WingsAPI.Data.Character; using WingsAPI.Data.Families; using WingsAPI.Data.TimeSpace; using WingsAPI.Data.Warehouse; using WingsAPI.Plugins; using WingsEmu.DTOs.Bazaar; using WingsEmu.DTOs.Mails; using WingsEmu.DTOs.Relations; namespace Plugin.Database { public class DatabasePlugin : IDependencyInjectorPlugin { public string Name => nameof(DatabasePlugin); public void AddDependencies(IServiceCollection services) { NpgsqlConnection.GlobalTypeMapper.UseJsonNet(settings: new JsonSerializerSettings { Formatting = Formatting.None, DefaultValueHandling = DefaultValueHandling.Ignore }); services.AddDbContextFactory((serviceProvider, options) => { DatabaseConfiguration conf = serviceProvider.GetRequiredService(); options .UseNpgsql(conf.ToString(), providerOptions => { providerOptions.EnableRetryOnFailure(); }) .UseQueryTrackingBehavior(QueryTrackingBehavior.NoTracking) .EnableServiceProviderCaching() .ConfigureWarnings(s => s.Log( (RelationalEventId.CommandExecuting, LogLevel.Debug), (RelationalEventId.CommandExecuted, LogLevel.Debug) )); }); services.AddSingleton(); services.AddTransient(typeof(IMapper<,>), typeof(MapsterMapper<,>)); // accounts services.AddAsyncLongRepository(); services.AddTransient(); // accounts warehouse services.AddTransient(); // accounts bans services.AddAsyncLongRepository(); services.TryAddTransient(); // accounts penalties services.AddAsyncLongRepository(); services.TryAddTransient(); // bazaar services.AddAsyncLongRepository(); services.TryAddTransient(); // character services.AddAsyncLongRepository(); services.TryAddTransient(); // timespaces records services.AddSingleton(); // relations services.TryAddTransient(); // mails services.AddAsyncLongRepository(); services.TryAddTransient(); // notes services.AddAsyncLongRepository(); services.TryAddTransient(); // families services.AddAsyncLongRepository(); services.TryAddTransient(); // families membership services.AddAsyncLongRepository(); services.TryAddTransient(); // families logs services.AddAsyncLongRepository(); services.TryAddTransient(); // family warehouses services.TryAddTransient(); services.TryAddTransient(); } } }