using AyCode.Services.SignalRs; using FruitBank.Common.Dtos; using FruitBank.Common.SignalRs; using System.Globalization; using System.Text.Json.Serialization; namespace Mango.Sandbox.EndPoints; /// /// Egyszerű teszt SignalR endpoint a DevAdminSignalRHub teszteléséhez. /// Ez az endpoint minimális függőséggel rendelkezik, hogy könnyebben diagnosztizálható legyen a SignalR Hub működése. /// public class TestSignalREndpoint : ITestSignalREndpointServer { #region Primitív Paraméter Handlerek /// /// Egyszerű ping metódus - visszaadja a kapott üzenetet és egy timestampet. /// [SignalR(TestSignalRTags.PingTag)] public Task Ping(string message) { return Task.FromResult(new TestPingResponse { Message = message, ReceivedAt = DateTime.UtcNow, ServerInfo = $"Sandbox Server - {Environment.MachineName}" }); } /// /// Int paraméter teszt /// [SignalR(TestSignalRTags.SingleIntParam)] public Task HandleSingleInt(int value) { return Task.FromResult($"Received: {value}"); } /// /// Két int paraméter teszt /// [SignalR(TestSignalRTags.TwoIntParams)] public Task HandleTwoInts(int a, int b) { return Task.FromResult(a + b); } /// /// Bool paraméter teszt /// [SignalR(TestSignalRTags.BoolParam)] public Task HandleBool(bool loadRelations) { return Task.FromResult(loadRelations); } /// /// String paraméter teszt /// [SignalR(TestSignalRTags.StringParam)] public Task HandleString(string text) { return Task.FromResult($"Echo: {text}"); } /// /// Guid paraméter teszt /// [SignalR(TestSignalRTags.GuidParam)] public Task HandleGuid(Guid id) { return Task.FromResult(id); } /// /// Enum paraméter teszt /// [SignalR(TestSignalRTags.EnumParam)] public Task HandleEnum(TestStatus status) { return Task.FromResult(status); } /// /// Paraméter nélküli metódus teszt /// [SignalR(TestSignalRTags.NoParams)] public Task HandleNoParams() { return Task.FromResult("OK"); } /// /// Több típusú paraméter teszt /// [SignalR(TestSignalRTags.MultipleTypesParams)] public Task HandleMultipleTypes(bool flag, string text, int number) { return Task.FromResult($"{flag}-{text}-{number}"); } /// /// Decimal paraméter teszt /// [SignalR(TestSignalRTags.DecimalParam)] public Task HandleDecimal(decimal value) { return Task.FromResult(value * 2); } /// /// DateTime paraméter teszt /// [SignalR(TestSignalRTags.DateTimeParam)] public Task HandleDateTime(DateTime dateTime) { return Task.FromResult(dateTime); } /// /// Double paraméter teszt /// [SignalR(TestSignalRTags.DoubleParam)] public Task HandleDouble(double value) { return Task.FromResult(value); } /// /// Long paraméter teszt /// [SignalR(TestSignalRTags.LongParam)] public Task HandleLong(long value) { return Task.FromResult(value); } #endregion #region Komplex Objektum Handlerek /// /// Egyszerű echo metódus - visszaadja a kapott objektumot változtatás nélkül. /// [SignalR(TestSignalRTags.EchoTag)] public Task Echo(TestEchoRequest request) { return Task.FromResult(new TestEchoResponse { Id = request?.Id ?? 0, Name = request?.Name ?? "Unknown", Timestamp = DateTime.UtcNow, EchoedSuccessfully = true }); } /// /// TestOrderItem komplex objektum teszt /// [SignalR(TestSignalRTags.TestOrderItemParam)] public Task HandleTestOrderItem(TestOrderItem item) { return Task.FromResult(new TestOrderItem { Id = item.Id, ProductName = $"Processed: {item.ProductName}", Quantity = item.Quantity * 2, UnitPrice = item.UnitPrice * 2, }); } /// /// TestOrder komplex objektum teszt (beágyazott objektumokkal) /// [SignalR(TestSignalRTags.TestOrderParam)] public Task HandleTestOrder(TestOrder order) { return Task.FromResult(order); } /// /// SharedTag komplex objektum teszt /// [SignalR(TestSignalRTags.SharedTagParam)] public Task HandleSharedTag(SharedTag tag) { return Task.FromResult(tag); } #endregion #region Kollekció Handlerek /// /// Lista visszaadása teszthez. /// [SignalR(TestSignalRTags.GetTestItems)] public Task> GetTestItems() { var items = new List { new() { Id = 1, Name = "Item 1", Value = 100.5m }, new() { Id = 2, Name = "Item 2", Value = 200.75m }, new() { Id = 3, Name = "Item 3", Value = 300.25m } }; return Task.FromResult(items); } /// /// Int tömb paraméter teszt /// [SignalR(TestSignalRTags.IntArrayParam)] public Task HandleIntArray(int[] values) { return Task.FromResult(values.Select(x => x * 2).ToArray()); } /// /// Guid tömb paraméter teszt /// [SignalR(TestSignalRTags.GuidArrayParam)] public Task HandleGuidArray(Guid[] ids) { return Task.FromResult(ids); } /// /// String lista paraméter teszt /// [SignalR(TestSignalRTags.StringListParam)] public Task> HandleStringList(List items) { return Task.FromResult(items.Select(x => x.ToUpper()).ToList()); } /// /// TestOrderItem lista paraméter teszt /// [SignalR(TestSignalRTags.TestOrderItemListParam)] public Task> HandleTestOrderItemList(List items) { return Task.FromResult(items); } /// /// Int lista paraméter teszt /// [SignalR(TestSignalRTags.IntListParam)] public Task> HandleIntList(List numbers) { return Task.FromResult(numbers.Select(x => x * 2).ToList()); } /// /// Bool tömb paraméter teszt /// [SignalR(TestSignalRTags.BoolArrayParam)] public Task HandleBoolArray(bool[] flags) { return Task.FromResult(flags); } /// /// Vegyes paraméterek tömbbel teszt /// [SignalR(TestSignalRTags.MixedWithArrayParam)] public Task HandleMixedWithArray(bool flag, int[] numbers, string text) { return Task.FromResult($"{flag}-[{string.Join(",", numbers)}]-{text}"); } /// /// Beágyazott lista teszt /// [SignalR(TestSignalRTags.NestedListParam)] public Task>> HandleNestedList(List> nestedList) { return Task.FromResult(nestedList); } /// /// Long tömb paraméter teszt /// [SignalR(TestSignalRTags.LongArrayParam)] public Task HandleLongArray(long[] values) { return Task.FromResult(values); } /// /// Decimal tömb paraméter teszt /// [SignalR(TestSignalRTags.DecimalArrayParam)] public Task HandleDecimalArray(decimal[] values) { return Task.FromResult(values); } /// /// DateTime tömb paraméter teszt /// [SignalR(TestSignalRTags.DateTimeArrayParam)] public Task HandleDateTimeArray(DateTime[] values) { return Task.FromResult(values); } /// /// Enum tömb paraméter teszt /// [SignalR(TestSignalRTags.EnumArrayParam)] public Task HandleEnumArray(TestStatus[] values) { return Task.FromResult(values); } /// /// Double tömb paraméter teszt /// [SignalR(TestSignalRTags.DoubleArrayParam)] public Task HandleDoubleArray(double[] values) { return Task.FromResult(values); } /// /// SharedTag tömb paraméter teszt /// [SignalR(TestSignalRTags.SharedTagArrayParam)] public Task HandleSharedTagArray(SharedTag[] tags) { return Task.FromResult(tags); } /// /// Dictionary paraméter teszt /// [SignalR(TestSignalRTags.DictionaryParam)] public Task> HandleDictionary(Dictionary dict) { return Task.FromResult(dict); } #endregion #region Vegyes Paraméter Handlerek /// /// Int és DTO vegyes paraméter teszt /// [SignalR(TestSignalRTags.IntAndDtoParam)] public Task HandleIntAndDto(int id, TestOrderItem item) { return Task.FromResult($"{id}-{item?.ProductName}"); } /// /// DTO és lista vegyes paraméter teszt /// [SignalR(TestSignalRTags.DtoAndListParam)] public Task HandleDtoAndList(TestOrderItem item, List numbers) { return Task.FromResult($"{item?.ProductName}-[{string.Join(",", numbers ?? [])}]"); } /// /// Három komplex paraméter teszt /// [SignalR(TestSignalRTags.ThreeComplexParams)] public Task HandleThreeComplexParams(TestOrderItem item, List tags, SharedTag sharedTag) { return Task.FromResult($"{item?.ProductName}-{tags?.Count}-{sharedTag?.Name}"); } /// /// Öt paraméter teszt /// [SignalR(TestSignalRTags.FiveParams)] public Task HandleFiveParams(int a, string b, bool c, Guid d, decimal e) { return Task.FromResult($"{a}-{b}-{c}-{d}-{e.ToString(CultureInfo.InvariantCulture)}"); } #endregion #region FruitBank Specifikus Metódusok /// /// OrderDto lista visszaadása ID-k alapján /// [SignalR(SignalRTags.GetAllOrderDtoByIds)] public Task> GetOrderDtoByIds(int[] orderIds) { return Task.FromResult(new List()); } #endregion #region Binary Serialization Tesztek - CustomerDto reprodukálás /// /// CustomerDto lista visszaadása - reprodukálja a GetMeasuringUsers forgatókönyvet /// [SignalR(TestSignalRTags.GetCustomerDtoList)] public Task> GetCustomerDtoList() { var customers = new List { new() { Id = 1, Username = "user1", Email = "user1@test.com", FirstName = "First1", LastName = "Last1", RegisteredInStoreId = 1, Deleted = false }, new() { Id = 2, Username = "user2", Email = "user2@test.com", FirstName = "First2", LastName = "Last2", RegisteredInStoreId = 1, Deleted = false }, new() { Id = 3, Username = "user3", Email = "user3@test.com", FirstName = "First3", LastName = "Last3", RegisteredInStoreId = 2, Deleted = true } }; return Task.FromResult(customers); } /// /// Nagyobb CustomerDto lista - több interned string a szerializációban /// [SignalR(TestSignalRTags.GetLargeCustomerDtoList)] public Task> GetLargeCustomerDtoList() { var customers = new List(); for (int i = 1; i <= 30; i++) { customers.Add(new TestCustomerDto { Id = i, Username = $"user{i}", Email = $"user{i}@test.com", FirstName = $"FirstName{i}", LastName = $"LastName{i}", RegisteredInStoreId = (i % 3) + 1, Deleted = i % 5 == 0 }); } return Task.FromResult(customers); } #endregion } /// /// Teszt SignalR Tags - egyszerű értékek a teszteléshez /// public static class TestSignalRTags { // Eredeti tagok public const int PingTag = SignalRTags.PingTag; public const int EchoTag = SignalRTags.EchoTag; public const int GetTestItems = 9003; // Primitív paraméterek public const int SingleIntParam = 9010; public const int TwoIntParams = 9011; public const int BoolParam = 9012; public const int StringParam = 9013; public const int GuidParam = 9014; public const int EnumParam = 9015; public const int NoParams = 9016; public const int MultipleTypesParams = 9017; public const int DecimalParam = 9018; public const int DateTimeParam = 9019; public const int DoubleParam = 9020; public const int LongParam = 9021; // Komplex objektumok public const int TestOrderItemParam = 9030; public const int TestOrderParam = 9031; public const int SharedTagParam = 9032; // Kollekciók public const int IntArrayParam = 9040; public const int GuidArrayParam = 9041; public const int StringListParam = 9042; public const int TestOrderItemListParam = 9043; public const int IntListParam = 9044; public const int BoolArrayParam = 9045; public const int MixedWithArrayParam = 9046; public const int NestedListParam = 9047; public const int LongArrayParam = 9048; public const int DecimalArrayParam = 9049; public const int DateTimeArrayParam = 9050; public const int EnumArrayParam = 9051; public const int DoubleArrayParam = 9052; public const int SharedTagArrayParam = 9053; public const int DictionaryParam = 9054; // Vegyes paraméterek public const int IntAndDtoParam = 9060; public const int DtoAndListParam = 9061; public const int ThreeComplexParams = 9062; public const int FiveParams = 9063; // Binary serialization tesztek - CustomerDto reprodukálás public const int GetCustomerDtoList = 9070; public const int GetLargeCustomerDtoList = 9071; } /// /// Interface a TestSignalREndpoint-hoz /// public interface ITestSignalREndpointServer { // Primitívek Task Ping(string message); Task HandleSingleInt(int value); Task HandleTwoInts(int a, int b); Task HandleBool(bool loadRelations); Task HandleString(string text); Task HandleGuid(Guid id); Task HandleEnum(TestStatus status); Task HandleNoParams(); Task HandleMultipleTypes(bool flag, string text, int number); Task HandleDecimal(decimal value); Task HandleDateTime(DateTime dateTime); Task HandleDouble(double value); Task HandleLong(long value); // Komplex objektumok Task Echo(TestEchoRequest request); Task HandleTestOrderItem(TestOrderItem item); Task HandleTestOrder(TestOrder order); Task HandleSharedTag(SharedTag tag); // Kollekciók Task> GetTestItems(); Task HandleIntArray(int[] values); Task HandleGuidArray(Guid[] ids); Task> HandleStringList(List items); Task> HandleTestOrderItemList(List items); Task> HandleIntList(List numbers); Task HandleBoolArray(bool[] flags); Task HandleMixedWithArray(bool flag, int[] numbers, string text); Task>> HandleNestedList(List> nestedList); Task HandleLongArray(long[] values); Task HandleDecimalArray(decimal[] values); Task HandleDateTimeArray(DateTime[] values); Task HandleEnumArray(TestStatus[] values); Task HandleDoubleArray(double[] values); Task HandleSharedTagArray(SharedTag[] tags); Task> HandleDictionary(Dictionary dict); // Vegyes paraméterek Task HandleIntAndDto(int id, TestOrderItem item); Task HandleDtoAndList(TestOrderItem item, List numbers); Task HandleThreeComplexParams(TestOrderItem item, List tags, SharedTag sharedTag); Task HandleFiveParams(int a, string b, bool c, Guid d, decimal e); // Binary serialization tesztek - CustomerDto reprodukálás Task> GetCustomerDtoList(); Task> GetLargeCustomerDtoList(); } #region DTOs public class TestPingResponse { public string Message { get; set; } = string.Empty; public DateTime ReceivedAt { get; set; } public string ServerInfo { get; set; } = string.Empty; } public class TestEchoRequest { public int Id { get; set; } public string Name { get; set; } = string.Empty; } public class TestEchoResponse { public int Id { get; set; } public string Name { get; set; } = string.Empty; public DateTime Timestamp { get; set; } public bool EchoedSuccessfully { get; set; } } public class TestItem { public int Id { get; set; } public string Name { get; set; } = string.Empty; public decimal Value { get; set; } } /// /// Teszt enum a különböző állapotok teszteléséhez /// public enum TestStatus { Pending = 0, Active = 1, Completed = 2, Cancelled = 3 } /// /// Teszt rendelési tétel komplex objektum teszteléshez /// public class TestOrderItem { public int Id { get; set; } public string ProductName { get; set; } = string.Empty; public int Quantity { get; set; } public decimal UnitPrice { get; set; } public decimal TotalPrice => Quantity * UnitPrice; } /// /// Teszt rendelés beágyazott objektumokkal /// public class TestOrder { public int Id { get; set; } public string CustomerName { get; set; } = string.Empty; public DateTime OrderDate { get; set; } public TestStatus Status { get; set; } public List Items { get; set; } = []; public decimal TotalAmount => Items.Sum(x => x.TotalPrice); } /// /// Megosztott tag objektum teszteléshez /// public class SharedTag { public int Id { get; set; } public string Name { get; set; } = string.Empty; public string? Description { get; set; } public DateTime CreatedAt { get; set; } public bool IsActive { get; set; } } /// /// Teszt CustomerDto a felhasználók teszteléséhez /// public class TestCustomerDto { public int Id { get; set; } public string Username { get; set; } = string.Empty; public string Email { get; set; } = string.Empty; public string FirstName { get; set; } = string.Empty; public string LastName { get; set; } = string.Empty; public string FullName => $"{LastName} {FirstName}"; public int RegisteredInStoreId { get; set; } public bool Deleted { get; set; } } #endregion