diff --git a/SCHEMA.md b/SCHEMA.md new file mode 100644 index 0000000..15be1ef --- /dev/null +++ b/SCHEMA.md @@ -0,0 +1,77 @@ +# Database Schema Layout (`game`) + +This project uses multiple PostgreSQL schemas to keep domain data separated and maintainable. + +## Search Path + +Configured on database level: + +```sql +ALTER DATABASE game SET search_path = world, economy, progression, gameplay, resources, system, public; +``` + +So unqualified table names still resolve in this order. + +--- + +## Schemas + +### `world` +Map/world topology and placements. + +- `server_maps` +- `server_map_flags` +- `map_portals` +- `map_npcs` +- `map_monsters` +- `map_teleporters` + +### `economy` +Shops, drops, and loot containers. + +- `shops` +- `shop_items` +- `shop_skills` +- `item_boxes` +- `item_box_items` +- `drops` + +### `progression` +Questing and recipe progression data. + +- `recipes` +- `recipe_items` +- `quests` +- `quest_objectives` +- `quest_prizes` +- `quest_npcs` +- `tutorials` + +### `gameplay` +Combat/gameplay mechanics and event configs. + +- `skills` +- `skill_bcards` +- `skill_combos` +- `minigame_config` +- `minigame_scores_holders` +- `global_minigame_config` +- `gameevent_instant_battle_configs` + +### `resources` +Raw synced file resources (DB-first support). + +- `resource_files` + +### `system` +System-level metadata. + +- `__EFMigrationsHistory` + +--- + +## Notes + +- Keep new feature tables in the matching domain schema, **not** in `public`. +- If you add EF migrations, ensure schema-qualified table mapping is explicit. +- DB-first runtime loaders depend on these tables being present and populated. diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml new file mode 100644 index 0000000..d53aca0 --- /dev/null +++ b/docker-compose.prod.yml @@ -0,0 +1,79 @@ +services: + master: + environment: + ASPNETCORE_ENVIRONMENT: ${ASPNETCORE_ENVIRONMENT_OVERRIDE:-Production} + Logging__LogLevel__Default: ${LOG_LEVEL_DEFAULT:-Error} + Logging__LogLevel__Microsoft: ${LOG_LEVEL_MICROSOFT:-Error} + Logging__LogLevel__Microsoft.AspNetCore: ${LOG_LEVEL_ASPNETCORE:-Error} + Logging__LogLevel__Microsoft.Hosting.Lifetime: ${LOG_LEVEL_HOSTING_LIFETIME:-Error} + login: + environment: + ASPNETCORE_ENVIRONMENT: ${ASPNETCORE_ENVIRONMENT_OVERRIDE:-Production} + Logging__LogLevel__Default: ${LOG_LEVEL_DEFAULT:-Error} + Logging__LogLevel__Microsoft: ${LOG_LEVEL_MICROSOFT:-Error} + Logging__LogLevel__Microsoft.AspNetCore: ${LOG_LEVEL_ASPNETCORE:-Error} + Logging__LogLevel__Microsoft.Hosting.Lifetime: ${LOG_LEVEL_HOSTING_LIFETIME:-Error} + gamechannel: + environment: + ASPNETCORE_ENVIRONMENT: ${ASPNETCORE_ENVIRONMENT_OVERRIDE:-Production} + Logging__LogLevel__Default: ${LOG_LEVEL_DEFAULT:-Error} + Logging__LogLevel__Microsoft: ${LOG_LEVEL_MICROSOFT:-Error} + Logging__LogLevel__Microsoft.AspNetCore: ${LOG_LEVEL_ASPNETCORE:-Error} + Logging__LogLevel__Microsoft.Hosting.Lifetime: ${LOG_LEVEL_HOSTING_LIFETIME:-Error} + database: + environment: + ASPNETCORE_ENVIRONMENT: ${ASPNETCORE_ENVIRONMENT_OVERRIDE:-Production} + Logging__LogLevel__Default: ${LOG_LEVEL_DEFAULT:-Error} + Logging__LogLevel__Microsoft: ${LOG_LEVEL_MICROSOFT:-Error} + Logging__LogLevel__Microsoft.AspNetCore: ${LOG_LEVEL_ASPNETCORE:-Error} + Logging__LogLevel__Microsoft.Hosting.Lifetime: ${LOG_LEVEL_HOSTING_LIFETIME:-Error} + bazaar: + environment: + ASPNETCORE_ENVIRONMENT: ${ASPNETCORE_ENVIRONMENT_OVERRIDE:-Production} + Logging__LogLevel__Default: ${LOG_LEVEL_DEFAULT:-Error} + Logging__LogLevel__Microsoft: ${LOG_LEVEL_MICROSOFT:-Error} + Logging__LogLevel__Microsoft.AspNetCore: ${LOG_LEVEL_ASPNETCORE:-Error} + Logging__LogLevel__Microsoft.Hosting.Lifetime: ${LOG_LEVEL_HOSTING_LIFETIME:-Error} + family: + environment: + ASPNETCORE_ENVIRONMENT: ${ASPNETCORE_ENVIRONMENT_OVERRIDE:-Production} + Logging__LogLevel__Default: ${LOG_LEVEL_DEFAULT:-Error} + Logging__LogLevel__Microsoft: ${LOG_LEVEL_MICROSOFT:-Error} + Logging__LogLevel__Microsoft.AspNetCore: ${LOG_LEVEL_ASPNETCORE:-Error} + Logging__LogLevel__Microsoft.Hosting.Lifetime: ${LOG_LEVEL_HOSTING_LIFETIME:-Error} + relation: + environment: + ASPNETCORE_ENVIRONMENT: ${ASPNETCORE_ENVIRONMENT_OVERRIDE:-Production} + Logging__LogLevel__Default: ${LOG_LEVEL_DEFAULT:-Error} + Logging__LogLevel__Microsoft: ${LOG_LEVEL_MICROSOFT:-Error} + Logging__LogLevel__Microsoft.AspNetCore: ${LOG_LEVEL_ASPNETCORE:-Error} + Logging__LogLevel__Microsoft.Hosting.Lifetime: ${LOG_LEVEL_HOSTING_LIFETIME:-Error} + mail: + environment: + ASPNETCORE_ENVIRONMENT: ${ASPNETCORE_ENVIRONMENT_OVERRIDE:-Production} + Logging__LogLevel__Default: ${LOG_LEVEL_DEFAULT:-Error} + Logging__LogLevel__Microsoft: ${LOG_LEVEL_MICROSOFT:-Error} + Logging__LogLevel__Microsoft.AspNetCore: ${LOG_LEVEL_ASPNETCORE:-Error} + Logging__LogLevel__Microsoft.Hosting.Lifetime: ${LOG_LEVEL_HOSTING_LIFETIME:-Error} + translation: + environment: + ASPNETCORE_ENVIRONMENT: ${ASPNETCORE_ENVIRONMENT_OVERRIDE:-Production} + Logging__LogLevel__Default: ${LOG_LEVEL_DEFAULT:-Error} + Logging__LogLevel__Microsoft: ${LOG_LEVEL_MICROSOFT:-Error} + Logging__LogLevel__Microsoft.AspNetCore: ${LOG_LEVEL_ASPNETCORE:-Error} + Logging__LogLevel__Microsoft.Hosting.Lifetime: ${LOG_LEVEL_HOSTING_LIFETIME:-Error} + logs: + environment: + ASPNETCORE_ENVIRONMENT: ${ASPNETCORE_ENVIRONMENT_OVERRIDE:-Production} + Logging__LogLevel__Default: ${LOG_LEVEL_DEFAULT:-Error} + Logging__LogLevel__Microsoft: ${LOG_LEVEL_MICROSOFT:-Error} + Logging__LogLevel__Microsoft.AspNetCore: ${LOG_LEVEL_ASPNETCORE:-Error} + Logging__LogLevel__Microsoft.Hosting.Lifetime: ${LOG_LEVEL_HOSTING_LIFETIME:-Error} + scheduler: + environment: + ASPNETCORE_ENVIRONMENT: ${ASPNETCORE_ENVIRONMENT_OVERRIDE:-Production} + Logging__LogLevel__Default: ${LOG_LEVEL_DEFAULT:-Error} + Logging__LogLevel__Microsoft: ${LOG_LEVEL_MICROSOFT:-Error} + Logging__LogLevel__Microsoft.AspNetCore: ${LOG_LEVEL_ASPNETCORE:-Error} + Logging__LogLevel__Microsoft.Hosting.Lifetime: ${LOG_LEVEL_HOSTING_LIFETIME:-Error} + diff --git a/docker-compose.yml b/docker-compose.yml index e3cf0e6..8f22509 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -100,6 +100,8 @@ services: WINGSEMU_MONGO_PWD: ${MONGO_ROOT_PASSWORD} MQTT_BROKER_ADDRESS: mqtt MQTT_BROKER_PORT: 1883 + ASPNETCORE_URLS: "" + Logging__LogLevel__Microsoft.AspNetCore.Server.Kestrel: Error command: ["/app/Master.dll"] ports: - "20500:20500" @@ -237,6 +239,7 @@ services: REDIS_PORT: 6379 MQTT_BROKER_ADDRESS: mqtt MQTT_BROKER_PORT: 1883 + Logging__LogLevel__Microsoft.AspNetCore.Server.Kestrel: Error command: ["/app/DatabaseServer.dll"] ports: - "29999:29999" @@ -273,6 +276,7 @@ services: REDIS_PORT: 6379 MQTT_BROKER_ADDRESS: mqtt MQTT_BROKER_PORT: 1883 + Logging__LogLevel__Microsoft.AspNetCore.Server.Kestrel: Error command: ["/app/BazaarServer.dll"] volumes: - ./resources:/app/resources:ro @@ -312,6 +316,7 @@ services: REDIS_PORT: 6379 MQTT_BROKER_ADDRESS: mqtt MQTT_BROKER_PORT: 1883 + Logging__LogLevel__Microsoft.AspNetCore.Server.Kestrel: Error command: ["/app/FamilyServer.dll"] volumes: - ./resources:/app/resources:ro @@ -351,6 +356,7 @@ services: REDIS_PORT: 6379 MQTT_BROKER_ADDRESS: mqtt MQTT_BROKER_PORT: 1883 + Logging__LogLevel__Microsoft.AspNetCore.Server.Kestrel: Error command: ["/app/RelationServer.dll"] volumes: - ./resources:/app/resources:ro @@ -390,6 +396,7 @@ services: REDIS_PORT: 6379 MQTT_BROKER_ADDRESS: mqtt MQTT_BROKER_PORT: 1883 + Logging__LogLevel__Microsoft.AspNetCore.Server.Kestrel: Error command: ["/app/MailServer.dll"] volumes: - ./resources:/app/resources:ro @@ -420,6 +427,7 @@ services: REDIS_PORT: 6379 MQTT_BROKER_ADDRESS: mqtt MQTT_BROKER_PORT: 1883 + Logging__LogLevel__Microsoft.AspNetCore.Server.Kestrel: Error command: ["/app/TranslationsServer.dll"] volumes: - ./translations:/app/translations:ro @@ -456,6 +464,8 @@ services: WINGSEMU_MONGO_PWD: ${MONGO_ROOT_PASSWORD} MQTT_BROKER_ADDRESS: mqtt MQTT_BROKER_PORT: 1883 + ASPNETCORE_URLS: "" + Logging__LogLevel__Microsoft.AspNetCore.Server.Kestrel: Error command: ["/app/LogsServer.dll"] ports: - "28888:28888" @@ -493,3 +503,4 @@ volumes: + diff --git a/srcs/BazaarServer/Program.cs b/srcs/BazaarServer/Program.cs index bcd70bf..0963f36 100644 --- a/srcs/BazaarServer/Program.cs +++ b/srcs/BazaarServer/Program.cs @@ -70,6 +70,7 @@ namespace BazaarServer IHostBuilder host = Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { + webBuilder.UseSetting(WebHostDefaults.ServerUrlsKey, string.Empty); webBuilder.ConfigureKestrel(s => { s.ListenAnyIP(short.Parse(Environment.GetEnvironmentVariable("BAZAAR_SERVER_PORT") ?? "25555"), options => { options.Protocols = HttpProtocols.Http2; }); diff --git a/srcs/DatabaseServer/Managers/CharacterManager.cs b/srcs/DatabaseServer/Managers/CharacterManager.cs index 721fc0c..13e7925 100644 --- a/srcs/DatabaseServer/Managers/CharacterManager.cs +++ b/srcs/DatabaseServer/Managers/CharacterManager.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Data; using System.Diagnostics; @@ -123,7 +123,7 @@ namespace DatabaseServer.Managers character = await GetCharacterBySlot(characterDto.AccountId, characterDto.Slot); if (character != null) { - Log.Warn("[CHARACTER_SAVE_SYSTEM][CreateCharacter] Found a character already in the desired slot." + + Log.Warn("[CHARACTER_SAVE_SYSTEM][CREATE_CHARACTER] Found a character already in the desired slot." + $"AccountId: '{character.AccountId.ToString()}' CharacterId: '{character.Id.ToString()}' Slot: '{character.Slot.ToString()}'"); return null; } diff --git a/srcs/DatabaseServer/Program.cs b/srcs/DatabaseServer/Program.cs index dc15e51..1fe1f30 100644 --- a/srcs/DatabaseServer/Program.cs +++ b/srcs/DatabaseServer/Program.cs @@ -92,6 +92,7 @@ namespace DatabaseServer IHostBuilder host = Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { + webBuilder.UseSetting(WebHostDefaults.ServerUrlsKey, string.Empty); webBuilder.ConfigureKestrel(s => { s.ListenAnyIP(short.Parse(Environment.GetEnvironmentVariable("DATABASE_SERVER_PORT") ?? "29999"), options => { options.Protocols = HttpProtocols.Http2; }); diff --git a/srcs/DiscordNotifier/Program.cs b/srcs/DiscordNotifier/Program.cs index 5406cc3..7bccc15 100644 --- a/srcs/DiscordNotifier/Program.cs +++ b/srcs/DiscordNotifier/Program.cs @@ -66,6 +66,7 @@ namespace DiscordNotifier IHostBuilder host = Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { + webBuilder.UseSetting(WebHostDefaults.ServerUrlsKey, string.Empty); webBuilder.ConfigureKestrel(s => { s.ListenAnyIP(28000); }); webBuilder.UseStartup(); }); diff --git a/srcs/FamilyServer/Program.cs b/srcs/FamilyServer/Program.cs index a4de00d..1334bec 100644 --- a/srcs/FamilyServer/Program.cs +++ b/srcs/FamilyServer/Program.cs @@ -75,6 +75,7 @@ namespace FamilyServer IHostBuilder host = Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { + webBuilder.UseSetting(WebHostDefaults.ServerUrlsKey, string.Empty); webBuilder.ConfigureKestrel(s => { s.ListenAnyIP(short.Parse(Environment.GetEnvironmentVariable("FAMILY_SERVER_PORT") ?? "26666"), options => { options.Protocols = HttpProtocols.Http2; }); diff --git a/srcs/GameChannel/Network/GameSession.cs b/srcs/GameChannel/Network/GameSession.cs index f9c52c8..66430ee 100644 --- a/srcs/GameChannel/Network/GameSession.cs +++ b/srcs/GameChannel/Network/GameSession.cs @@ -699,7 +699,7 @@ namespace GameChannel.Network } catch (Exception ex) { - Log.Error("[Handler Error]", ex); + Log.Error("[HANDLER_ERROR]", ex); } } diff --git a/srcs/GameChannel/Program.cs b/srcs/GameChannel/Program.cs index 7ef62f2..0c0f0a5 100644 --- a/srcs/GameChannel/Program.cs +++ b/srcs/GameChannel/Program.cs @@ -167,7 +167,8 @@ namespace GameChannel IHostBuilder hostBuilder = Host.CreateDefaultBuilder(args); hostBuilder.ConfigureWebHostDefaults(webBuilder => { - webBuilder.ConfigureKestrel(s => + webBuilder.UseSetting(WebHostDefaults.ServerUrlsKey, string.Empty); + webBuilder.ConfigureKestrel(s => { s.ListenAnyIP(Convert.ToInt32(Environment.GetEnvironmentVariable("HTTP_LISTEN_PORT") ?? "17500"), options => { options.Protocols = HttpProtocols.Http1AndHttp2; }); diff --git a/srcs/LoginServer/Network/LoginServer.cs b/srcs/LoginServer/Network/LoginServer.cs index fea87ab..fa1f0df 100644 --- a/srcs/LoginServer/Network/LoginServer.cs +++ b/srcs/LoginServer/Network/LoginServer.cs @@ -1,4 +1,4 @@ -// WingsEmu +// WingsEmu // // Developed by NosWings Team @@ -65,12 +65,12 @@ namespace LoginServer.Network protected override void OnStarted() { - Log.Info("[TCP-SERVER] Started!"); + Log.Info("[TCP_SERVER] Started!"); } protected override void OnError(SocketError error) { - Log.Info("[TCP-SERVER] SocketError"); + Log.Info("[TCP_SERVER] SocketError"); Stop(); } } diff --git a/srcs/LogsServer/Program.cs b/srcs/LogsServer/Program.cs index 31c4c4b..1c19ee3 100644 --- a/srcs/LogsServer/Program.cs +++ b/srcs/LogsServer/Program.cs @@ -66,6 +66,7 @@ namespace LogsServer IHostBuilder host = Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { + webBuilder.UseSetting(WebHostDefaults.ServerUrlsKey, string.Empty); webBuilder.ConfigureKestrel(s => { s.ListenAnyIP(short.Parse(Environment.GetEnvironmentVariable("LOGS_SERVER_PORT") ?? "28888"), options => { options.Protocols = HttpProtocols.Http2; }); diff --git a/srcs/MailServer/Program.cs b/srcs/MailServer/Program.cs index df33fba..27ffe8d 100644 --- a/srcs/MailServer/Program.cs +++ b/srcs/MailServer/Program.cs @@ -69,6 +69,7 @@ namespace MailServer IHostBuilder host = Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { + webBuilder.UseSetting(WebHostDefaults.ServerUrlsKey, string.Empty); webBuilder.ConfigureKestrel(s => { s.ListenAnyIP(short.Parse(Environment.GetEnvironmentVariable("MAIL_SERVER_PORT") ?? "27777"), options => { options.Protocols = HttpProtocols.Http2; }); diff --git a/srcs/Master/Program.cs b/srcs/Master/Program.cs index 333790e..96802a3 100644 --- a/srcs/Master/Program.cs +++ b/srcs/Master/Program.cs @@ -65,6 +65,7 @@ namespace Master Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { + webBuilder.UseSetting(WebHostDefaults.ServerUrlsKey, string.Empty); webBuilder.ConfigureKestrel(s => { s.ListenAnyIP(Convert.ToInt32(Environment.GetEnvironmentVariable("MASTER_PORT") ?? "20500"), options => options.Protocols = HttpProtocols.Http2); diff --git a/srcs/RelationServer/Program.cs b/srcs/RelationServer/Program.cs index c437d2a..81fd259 100644 --- a/srcs/RelationServer/Program.cs +++ b/srcs/RelationServer/Program.cs @@ -65,6 +65,7 @@ namespace RelationServer IHostBuilder host = Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { + webBuilder.UseSetting(WebHostDefaults.ServerUrlsKey, string.Empty); webBuilder.ConfigureKestrel(s => { s.ListenAnyIP(short.Parse(Environment.GetEnvironmentVariable("RELATION_SERVER_PORT") ?? "21111"), options => { options.Protocols = HttpProtocols.Http2; }); diff --git a/srcs/Scheduler/Program.cs b/srcs/Scheduler/Program.cs index 9af356a..d7e2767 100644 --- a/srcs/Scheduler/Program.cs +++ b/srcs/Scheduler/Program.cs @@ -37,6 +37,7 @@ namespace WingsEmu.ClusterScheduler IHostBuilder host = Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { + webBuilder.UseSetting(WebHostDefaults.ServerUrlsKey, string.Empty); webBuilder.ConfigureKestrel(s => { s.ListenAnyIP(25000); }); webBuilder.UseStartup(); }); diff --git a/srcs/Toolkit/CommandHandlers/CreateAccountCommandHandler.cs b/srcs/Toolkit/CommandHandlers/CreateAccountCommandHandler.cs index 893f787..135d24e 100644 --- a/srcs/Toolkit/CommandHandlers/CreateAccountCommandHandler.cs +++ b/srcs/Toolkit/CommandHandlers/CreateAccountCommandHandler.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Linq; using System.Security.Cryptography; using System.Threading.Tasks; @@ -62,7 +62,7 @@ public class CreateAccountCommandHandler await context.Database.MigrateAsync(); if (context.Account.Any()) { - Log.Info("[DEFAULT ACCOUNT] Accounts were already present!"); + Log.Info("[DEFAULT_ACCOUNT] Accounts were already present!"); return 0; } @@ -84,12 +84,12 @@ public class CreateAccountCommandHandler Password = adminPassword.ToSha512() }); await context.SaveChangesAsync(); - Log.Info("[DEFAULT ACCOUNT] Accounts created!"); + Log.Info("[DEFAULT_ACCOUNT] Accounts created!"); return 0; } catch (Exception e) { - Log.Error("[DEFAULT ACCOUNT] Error", e); + Log.Error("[DEFAULT_ACCOUNT] Error", e); return 1; } } diff --git a/srcs/TranslationsServer/Program.cs b/srcs/TranslationsServer/Program.cs index 559dfbd..38ab02a 100644 --- a/srcs/TranslationsServer/Program.cs +++ b/srcs/TranslationsServer/Program.cs @@ -77,6 +77,7 @@ namespace TranslationServer IHostBuilder host = Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { + webBuilder.UseSetting(WebHostDefaults.ServerUrlsKey, string.Empty); webBuilder.ConfigureKestrel(s => { s.ListenAnyIP(short.Parse(Environment.GetEnvironmentVariable("TRANSLATION_SERVER_PORT") ?? "19999"), options => { options.Protocols = HttpProtocols.Http2; }); diff --git a/srcs/WingsAPI.Game/Families/Managers/FamilyAchievementManager.cs b/srcs/WingsAPI.Game/Families/Managers/FamilyAchievementManager.cs index 054fa0b..d6d8c61 100644 --- a/srcs/WingsAPI.Game/Families/Managers/FamilyAchievementManager.cs +++ b/srcs/WingsAPI.Game/Families/Managers/FamilyAchievementManager.cs @@ -89,7 +89,7 @@ public class FamilyAchievementManager : BackgroundService, IFamilyAchievementMan } catch (Exception e) { - Log.Error("[FamilyAchievementManager] ExecuteAsync", e); + Log.Error("[FAMILY_ACHIEVEMENT_MANAGER] ExecuteAsync", e); } } @@ -109,7 +109,7 @@ public class FamilyAchievementManager : BackgroundService, IFamilyAchievementMan } catch (Exception e) { - Log.Error("[FamilyAchievementManager] ExecuteAsync", e); + Log.Error("[FAMILY_ACHIEVEMENT_MANAGER] ExecuteAsync", e); } } } \ No newline at end of file diff --git a/srcs/_plugins/Plugin.DB.EF/DB/Configs/CharacterBazaarItemEntityTypeConfiguration.cs b/srcs/_plugins/Plugin.DB.EF/DB/Configs/CharacterBazaarItemEntityTypeConfiguration.cs index e456b67..24c4e43 100644 --- a/srcs/_plugins/Plugin.DB.EF/DB/Configs/CharacterBazaarItemEntityTypeConfiguration.cs +++ b/srcs/_plugins/Plugin.DB.EF/DB/Configs/CharacterBazaarItemEntityTypeConfiguration.cs @@ -8,6 +8,8 @@ namespace Plugin.Database.DB.Configs { public void Configure(EntityTypeBuilder builder) { + builder.HasQueryFilter(s => s.DeletedAt == null && s.DbCharacter.DeletedAt == null); + builder .HasOne(s => s.DbCharacter) .WithMany(s => s.BazaarItem) diff --git a/srcs/_plugins/Plugin.DB.EF/DB/Configs/CharacterRelationEntityTypeConfiguration.cs b/srcs/_plugins/Plugin.DB.EF/DB/Configs/CharacterRelationEntityTypeConfiguration.cs index a54cc12..628684c 100644 --- a/srcs/_plugins/Plugin.DB.EF/DB/Configs/CharacterRelationEntityTypeConfiguration.cs +++ b/srcs/_plugins/Plugin.DB.EF/DB/Configs/CharacterRelationEntityTypeConfiguration.cs @@ -10,6 +10,8 @@ namespace Plugin.Database.DB.Configs { builder.HasKey(s => new { s.CharacterId, s.RelatedCharacterId }); + builder.HasQueryFilter(s => s.Source.DeletedAt == null && s.Target.DeletedAt == null); + builder.HasOne(s => s.Source) .WithMany(s => s.SourceRelations) .HasForeignKey(s => s.CharacterId); diff --git a/srcs/_plugins/Plugin.DB.EF/Families/FamilyWarehouseItemDao.cs b/srcs/_plugins/Plugin.DB.EF/Families/FamilyWarehouseItemDao.cs index de5022c..035c8b6 100644 --- a/srcs/_plugins/Plugin.DB.EF/Families/FamilyWarehouseItemDao.cs +++ b/srcs/_plugins/Plugin.DB.EF/Families/FamilyWarehouseItemDao.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; @@ -32,7 +32,7 @@ namespace Plugin.Database.Families } catch (Exception e) { - Log.Error("[FAMILY_WAREHOUSE_ITEM_DAO][SaveAsync] ", e); + Log.Error("[FAMILY_WAREHOUSE_ITEM_DAO][SAVE_ASYNC] ", e); throw; } } @@ -48,7 +48,7 @@ namespace Plugin.Database.Families } catch (Exception e) { - Log.Error("[FAMILY_WAREHOUSE_ITEM_DAO][DeleteAsync] ", e); + Log.Error("[FAMILY_WAREHOUSE_ITEM_DAO][DELETE_ASYNC] ", e); throw; } } @@ -63,7 +63,7 @@ namespace Plugin.Database.Families } catch (Exception e) { - Log.Error("[FAMILY_WAREHOUSE_ITEM_DAO][GetByFamilyIdAsync] ", e); + Log.Error("[FAMILY_WAREHOUSE_ITEM_DAO][GET_BY_FAMILY_ID_ASYNC] ", e); throw; } } diff --git a/srcs/_plugins/Plugin.DB.EF/Families/FamilyWarehouseLogDao.cs b/srcs/_plugins/Plugin.DB.EF/Families/FamilyWarehouseLogDao.cs index 634ec86..d5ff1ca 100644 --- a/srcs/_plugins/Plugin.DB.EF/Families/FamilyWarehouseLogDao.cs +++ b/srcs/_plugins/Plugin.DB.EF/Families/FamilyWarehouseLogDao.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; @@ -29,7 +29,7 @@ namespace Plugin.Database.Families } catch (Exception e) { - Log.Error("[FAMILY_WAREHOUSE_LOG_DAO][SaveAsync] ", e); + Log.Error("[FAMILY_WAREHOUSE_LOG_DAO][SAVE_ASYNC] ", e); throw; } } @@ -44,7 +44,7 @@ namespace Plugin.Database.Families } catch (Exception e) { - Log.Error("[FAMILY_WAREHOUSE_LOG_DAO][GetByFamilyIdAsync] ", e); + Log.Error("[FAMILY_WAREHOUSE_LOG_DAO][GET_BY_FAMILY_ID_ASYNC] ", e); throw; } } diff --git a/srcs/_plugins/Plugin.DB.EF/Families/FamilyWarehouseLogEntityTypeConfiguration.cs b/srcs/_plugins/Plugin.DB.EF/Families/FamilyWarehouseLogEntityTypeConfiguration.cs index 88721d2..a4d48b8 100644 --- a/srcs/_plugins/Plugin.DB.EF/Families/FamilyWarehouseLogEntityTypeConfiguration.cs +++ b/srcs/_plugins/Plugin.DB.EF/Families/FamilyWarehouseLogEntityTypeConfiguration.cs @@ -9,6 +9,8 @@ namespace Plugin.Database.Families { builder.HasKey(s => new { s.FamilyId }); + builder.HasQueryFilter(s => s.DeletedAt == null && s.Family.DeletedAt == null); + builder.HasOne(s => s.Family) .WithOne(s => s.WarehouseLogs); } diff --git a/srcs/_plugins/Plugin.DB.EF/Warehouse/AccountWarehouseItemItemDao.cs b/srcs/_plugins/Plugin.DB.EF/Warehouse/AccountWarehouseItemItemDao.cs index c5ce279..30724aa 100644 --- a/srcs/_plugins/Plugin.DB.EF/Warehouse/AccountWarehouseItemItemDao.cs +++ b/srcs/_plugins/Plugin.DB.EF/Warehouse/AccountWarehouseItemItemDao.cs @@ -33,7 +33,7 @@ namespace Plugin.Database.Warehouse } catch (Exception e) { - Log.Error("[ACCOUNT_WAREHOUSE_ITEM_DAO][SaveAsync] ", e); + Log.Error("[ACCOUNT_WAREHOUSE_ITEM_DAO][SAVE_ASYNC] ", e); throw; } } @@ -49,7 +49,7 @@ namespace Plugin.Database.Warehouse } catch (Exception e) { - Log.Error("[ACCOUNT_WAREHOUSE_ITEM_DAO][DeleteAsync] ", e); + Log.Error("[ACCOUNT_WAREHOUSE_ITEM_DAO][DELETE_ASYNC] ", e); throw; } } @@ -64,7 +64,7 @@ namespace Plugin.Database.Warehouse } catch (Exception e) { - Log.Error("[ACCOUNT_WAREHOUSE_ITEM_DAO][GetByFamilyIdAsync] ", e); + Log.Error("[ACCOUNT_WAREHOUSE_ITEM_DAO][GET_BY_FAMILY_ID_ASYNC] ", e); throw; } } diff --git a/srcs/_plugins/Plugin.MongoLogs/Extensions/MongoLoggerExtensions.cs b/srcs/_plugins/Plugin.MongoLogs/Extensions/MongoLoggerExtensions.cs index 41dea7d..cf6957a 100644 --- a/srcs/_plugins/Plugin.MongoLogs/Extensions/MongoLoggerExtensions.cs +++ b/srcs/_plugins/Plugin.MongoLogs/Extensions/MongoLoggerExtensions.cs @@ -1,6 +1,8 @@ using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; +using MongoDB.Bson.Serialization; using MongoDB.Bson.Serialization.Conventions; +using MongoDB.Bson.Serialization.Serializers; using PhoenixLib.Logging; using PhoenixLib.ServiceBus.Extensions; using Plugin.MongoLogs.Services; @@ -34,6 +36,16 @@ namespace Plugin.MongoLogs.Extensions public static void AddMongoLogsPlugin(this IServiceCollection services) { + // Allow serialization of plugin log entities that are passed as object through generic logging pipeline. + try + { + BsonSerializer.RegisterSerializer(new ObjectSerializer(_ => true)); + } + catch + { + // serializer may already be registered by another startup path + } + var pack = new ConventionPack { new TypedIgnoreDefaultPropertiesConvention() diff --git a/srcs/_plugins/WingsEmu.Plugins.BasicImplementation/Bazaar/BazaarManager.cs b/srcs/_plugins/WingsEmu.Plugins.BasicImplementation/Bazaar/BazaarManager.cs index 218191a..33cd53b 100644 --- a/srcs/_plugins/WingsEmu.Plugins.BasicImplementation/Bazaar/BazaarManager.cs +++ b/srcs/_plugins/WingsEmu.Plugins.BasicImplementation/Bazaar/BazaarManager.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Threading.Tasks; using PhoenixLib.Caching; @@ -49,7 +49,7 @@ public class BazaarManager : IBazaarManager } catch (Exception e) { - Log.Error("[BAZAAR_MANAGER][GetCharacterName] Unexpected error:", e); + Log.Error("[BAZAAR_MANAGER][GET_CHARACTER_NAME] Unexpected error:", e); } if (response?.RpcResponseType != RpcResponseType.SUCCESS) @@ -74,7 +74,7 @@ public class BazaarManager : IBazaarManager } catch (Exception e) { - Log.Error("[BAZAAR_MANAGER][GetBazaarItemById] Unexpected error:", e); + Log.Error("[BAZAAR_MANAGER][GET_BAZAAR_ITEM_BY_ID] Unexpected error:", e); } if (response?.ResponseType != RpcResponseType.SUCCESS) @@ -98,7 +98,7 @@ public class BazaarManager : IBazaarManager } catch (Exception e) { - Log.Error("[BAZAAR_MANAGER][GetListedItemsByCharacterId]", e); + Log.Error("[BAZAAR_MANAGER][GET_LISTED_ITEMS_BY_CHARACTER_ID]", e); } if (response?.ResponseType != RpcResponseType.SUCCESS) @@ -121,7 +121,7 @@ public class BazaarManager : IBazaarManager } catch (Exception e) { - Log.Error("[BAZAAR_MANAGER][GetListedItemsByCharacterId]", e); + Log.Error("[BAZAAR_MANAGER][GET_LISTED_ITEMS_BY_CHARACTER_ID]", e); } if (response == null) diff --git a/srcs/_plugins/WingsEmu.Plugins.BasicImplementation/Event/Characters/PlayerChangeChannelAct4EventHandler.cs b/srcs/_plugins/WingsEmu.Plugins.BasicImplementation/Event/Characters/PlayerChangeChannelAct4EventHandler.cs index 841e3aa..6a23539 100644 --- a/srcs/_plugins/WingsEmu.Plugins.BasicImplementation/Event/Characters/PlayerChangeChannelAct4EventHandler.cs +++ b/srcs/_plugins/WingsEmu.Plugins.BasicImplementation/Event/Characters/PlayerChangeChannelAct4EventHandler.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Threading; using System.Threading.Tasks; using PhoenixLib.Events; @@ -58,19 +58,19 @@ public class PlayerChangeChannelAct4EventHandler : IAsyncEventProcessor null }; - Log.Debug("[GameEvent] Locked Registration for Event: " + e.Type); + Log.Debug("[GAME_EVENT] Locked Registration for Event: " + e.Type); _sessionManager.Broadcast(x => { diff --git a/srcs/_plugins/WingsEmu.Plugins.GameEvents/EventHandler/Global/GameEventMatchmakeEventHandler.cs b/srcs/_plugins/WingsEmu.Plugins.GameEvents/EventHandler/Global/GameEventMatchmakeEventHandler.cs index 87417f9..ae9a5db 100644 --- a/srcs/_plugins/WingsEmu.Plugins.GameEvents/EventHandler/Global/GameEventMatchmakeEventHandler.cs +++ b/srcs/_plugins/WingsEmu.Plugins.GameEvents/EventHandler/Global/GameEventMatchmakeEventHandler.cs @@ -33,7 +33,7 @@ namespace WingsEmu.Plugins.GameEvents.EventHandler.Global public async Task HandleAsync(GameEventMatchmakeEvent e, CancellationToken cancellation) { - Log.Debug("[GameEvent] Processing matchmaking for Event: " + e.Type); + Log.Debug("[GAME_EVENT] Processing matchmaking for Event: " + e.Type); FilterResult filterResult = _matchmaking.Filter(e.Sessions, new InBaseMapFilter()); TellToRefusedSessions(filterResult.RefusedSessions); diff --git a/srcs/_plugins/WingsEmu.Plugins.GameEvents/EventHandler/Global/GameEventPrepareEventHandler.cs b/srcs/_plugins/WingsEmu.Plugins.GameEvents/EventHandler/Global/GameEventPrepareEventHandler.cs index 972614e..0a25df2 100644 --- a/srcs/_plugins/WingsEmu.Plugins.GameEvents/EventHandler/Global/GameEventPrepareEventHandler.cs +++ b/srcs/_plugins/WingsEmu.Plugins.GameEvents/EventHandler/Global/GameEventPrepareEventHandler.cs @@ -51,7 +51,7 @@ namespace WingsEmu.Plugins.GameEvents.EventHandler.Global } GameEventType type = e.Type; - Log.Debug("[GameEvent] Preparing Event: " + type); + Log.Debug("[GAME_EVENT] Preparing Event: " + type); if (e.NoDelay) {