diff --git a/Libraries/SPTarkov.Server.Core/Callbacks/ModdedTraderCustomizationCallbacks.cs b/Libraries/SPTarkov.Server.Core/Callbacks/ModdedTraderCustomizationCallbacks.cs new file mode 100644 index 00000000..682c2cb0 --- /dev/null +++ b/Libraries/SPTarkov.Server.Core/Callbacks/ModdedTraderCustomizationCallbacks.cs @@ -0,0 +1,23 @@ +using SPTarkov.DI.Annotations; +using SPTarkov.Server.Core.Controllers; +using SPTarkov.Server.Core.Models.Common; +using SPTarkov.Server.Core.Models.Eft.Common; +using SPTarkov.Server.Core.Utils; + +namespace SPTarkov.Server.Core.Callbacks; + +[Injectable] +public class ModdedTraderCustomizationCallbacks( + ModdedTraderCustomizationController moddedTraderCustomizationController, + HttpResponseUtil httpResponseUtil +) +{ + /// + /// Handle /singleplayer/moddedTraders + /// + /// + public ValueTask GetCustomizationTraders(string url, EmptyRequestData _, MongoId sessionID) + { + return new ValueTask(httpResponseUtil.NoBody(moddedTraderCustomizationController.GetCustomizationSellerIds())); + } +} diff --git a/Libraries/SPTarkov.Server.Core/Controllers/ModdedTraderCustomizationController.cs b/Libraries/SPTarkov.Server.Core/Controllers/ModdedTraderCustomizationController.cs new file mode 100644 index 00000000..66d97808 --- /dev/null +++ b/Libraries/SPTarkov.Server.Core/Controllers/ModdedTraderCustomizationController.cs @@ -0,0 +1,28 @@ +using SPTarkov.DI.Annotations; +using SPTarkov.Server.Core.Models.Enums; +using SPTarkov.Server.Core.Models.Spt.Mod; +using SPTarkov.Server.Core.Services; + +namespace SPTarkov.Server.Core.Controllers; + +[Injectable] +public class ModdedTraderCustomizationController(DatabaseService databaseService) +{ + public ModdedTraderListResponse GetCustomizationSellerIds() + { + var traders = databaseService.GetTraders(); + var customizationSellers = new ModdedTraderListResponse + { + ModdedTraders = [] + }; + + foreach (var trader in traders) + { + if (trader.Value.Base.CustomizationSeller!.Value && trader.Key != Traders.RAGMAN) + { + customizationSellers.ModdedTraders.Add(trader.Key); + } + } + return customizationSellers; + } +} diff --git a/Libraries/SPTarkov.Server.Core/Models/Spt/Mod/ModdedTraderListResponse.cs b/Libraries/SPTarkov.Server.Core/Models/Spt/Mod/ModdedTraderListResponse.cs new file mode 100644 index 00000000..0c3dbc6d --- /dev/null +++ b/Libraries/SPTarkov.Server.Core/Models/Spt/Mod/ModdedTraderListResponse.cs @@ -0,0 +1,6 @@ +namespace SPTarkov.Server.Core.Models.Spt.Mod; + +public record ModdedTraderListResponse +{ + public List? ModdedTraders { get; set; } +} diff --git a/Libraries/SPTarkov.Server.Core/Routers/Static/ModdedTraderCustomizationRouter.cs b/Libraries/SPTarkov.Server.Core/Routers/Static/ModdedTraderCustomizationRouter.cs new file mode 100644 index 00000000..7d47ea68 --- /dev/null +++ b/Libraries/SPTarkov.Server.Core/Routers/Static/ModdedTraderCustomizationRouter.cs @@ -0,0 +1,20 @@ +using SPTarkov.DI.Annotations; +using SPTarkov.Server.Core.Callbacks; +using SPTarkov.Server.Core.DI; +using SPTarkov.Server.Core.Models.Eft.Common; +using SPTarkov.Server.Core.Utils; + +namespace SPTarkov.Server.Core.Routers.Static; + +[Injectable] +public class ModdedTraderCustomizationRouter(JsonUtil jsonUtil, ModdedTraderCustomizationCallbacks moddedTraderCustomizationCallbacks) + : StaticRouter( + jsonUtil, + [ + new RouteAction( + "/singleplayer/moddedTraders", + async (url, info, sessionID, output) => + await moddedTraderCustomizationCallbacks.GetCustomizationTraders(url, info, sessionID) + ) + ] + ) { }