server-master/srcs/_plugins/Plugin.DB.EF/DatabasePlugin.cs
2026-02-10 18:21:30 +01:00

118 lines
No EOL
4.5 KiB
C#

// 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<GameContext>((serviceProvider, options) =>
{
DatabaseConfiguration conf = serviceProvider.GetRequiredService<DatabaseConfiguration>();
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<DatabaseConfiguration>();
services.AddTransient(typeof(IMapper<,>), typeof(MapsterMapper<,>));
// accounts
services.AddAsyncLongRepository<AccountDTO, AccountEntity>();
services.AddTransient<IAccountDAO, AccountDAO>();
// accounts warehouse
services.AddTransient<IAccountWarehouseItemDao, AccountWarehouseItemItemDao>();
// accounts bans
services.AddAsyncLongRepository<AccountBanDto, AccountBanEntity>();
services.TryAddTransient<IAccountBanDao, AccountBanDao>();
// accounts penalties
services.AddAsyncLongRepository<AccountPenaltyDto, AccountPenaltyEntity>();
services.TryAddTransient<IAccountPenaltyDao, AccountPenaltyDao>();
// bazaar
services.AddAsyncLongRepository<BazaarItemDTO, DbBazaarItemEntity>();
services.TryAddTransient<IBazaarItemDAO, BazaarItemDAO>();
// character
services.AddAsyncLongRepository<CharacterDTO, DbCharacter>();
services.TryAddTransient<ICharacterDAO, CharacterDAO>();
// timespaces records
services.AddSingleton<ITimeSpaceRecordDao, TimeSpaceRecordDao>();
// relations
services.TryAddTransient<ICharacterRelationDAO, CharacterRelationDAO>();
// mails
services.AddAsyncLongRepository<CharacterMailDto, DbCharacterMail>();
services.TryAddTransient<ICharacterMailDao, CharacterMailDao>();
// notes
services.AddAsyncLongRepository<CharacterNoteDto, DbCharacterNote>();
services.TryAddTransient<ICharacterNoteDao, CharacterNoteDao>();
// families
services.AddAsyncLongRepository<FamilyDTO, DbFamily>();
services.TryAddTransient<IFamilyDAO, FamilyDAO>();
// families membership
services.AddAsyncLongRepository<FamilyMembershipDto, DbFamilyMembership>();
services.TryAddTransient<IFamilyMembershipDao, FamilyMembershipDao>();
// families logs
services.AddAsyncLongRepository<FamilyLogDto, DbFamilyLog>();
services.TryAddTransient<IFamilyLogDAO, FamilyLogDAO>();
// family warehouses
services.TryAddTransient<IFamilyWarehouseItemDao, FamilyWarehouseItemDao>();
services.TryAddTransient<IFamilyWarehouseLogDao, FamilyWarehouseLogDao>();
}
}
}