Skip to content

Commit 3a1e500

Browse files
committed
rough implementation
1 parent c9dddb6 commit 3a1e500

3 files changed

Lines changed: 54 additions & 7 deletions

File tree

src/Linq2GraphQL.Client/QueryNode.cs

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System.Reflection;
2+
using System.Runtime.CompilerServices;
23
using System.Text.Json.Serialization;
34
using Linq2GraphQL.Client;
45
using Linq2GraphQL.Client.Schema;
@@ -12,6 +13,27 @@ public class QueryNode
1213

1314
public QueryNode(MemberInfo member, string name = null, List<ArgumentValue> arguments = null, bool interfaceProperty = false)
1415
{
16+
17+
//https://stackoverflow.com/questions/8094867/good-gethashcode-override-for-list-of-foo-objects-respecting-the-order
18+
var argValues = arguments?.Where(e => e.Value != null).Select(e => e.Value).ToList();
19+
if (argValues?.Any() == true)
20+
{
21+
var ll = "";
22+
foreach (var arg in argValues)
23+
{
24+
ll += arg.GetHashCode().ToString();
25+
}
26+
var hashCode = ll.GetHashCode();
27+
28+
if (hashCode< 0)
29+
{
30+
hashCode = hashCode * -1;
31+
}
32+
33+
ArgumentHashCode = hashCode;
34+
Alias = "Arg" + hashCode.ToString();
35+
}
36+
1537
Name = name ?? member.GetCustomAttribute<JsonPropertyNameAttribute>()?.Name ?? member.Name.ToCamelCase();
1638
Member = member;
1739
Arguments = arguments ?? new List<ArgumentValue>();
@@ -23,6 +45,8 @@ public QueryNode(MemberInfo member, string name = null, List<ArgumentValue> argu
2345

2446
public bool InterfaceProperty { get; internal set; }
2547
public string Name { get; internal set; }
48+
public string Alias { get; internal set; }
49+
public int ArgumentHashCode { get; internal set; }
2650
public MemberInfo Member { get; internal set; }
2751
public List<QueryNode> ChildNodes { get; internal set; } = new();
2852
public List<ArgumentValue> Arguments { get; internal set; } = new();
@@ -67,7 +91,14 @@ public void AddChildNode(MemberInfo member, string name = null)
6791

6892
public void AddChildNode(QueryNode childNode)
6993
{
70-
var currentNode = ChildNodes.FirstOrDefault(e => e.Name == childNode.Name);
94+
95+
if (childNode.ArgumentHashCode != 0)
96+
{
97+
var tt = "ss";
98+
}
99+
100+
101+
var currentNode = ChildNodes.FirstOrDefault(e => e.Name == childNode.Name && e.ArgumentHashCode == childNode.ArgumentHashCode);
71102
if (currentNode == null)
72103
{
73104
childNode.Parent = this;
@@ -203,6 +234,10 @@ internal string GetQueryString(string indent = "")
203234
query = "... on " + Name + GetArgumentString() + Environment.NewLine;
204235

205236
}
237+
else if (!string.IsNullOrWhiteSpace(Alias))
238+
{
239+
query = Alias + ":" + Name + GetArgumentString() + Environment.NewLine;
240+
}
206241
else
207242
{
208243
query = Name + GetArgumentString() + Environment.NewLine;

test/Linq2GraphQL.TestClient/Generated/Types/Order.cs

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System;
22
using System.Collections.Generic;
3+
using System.Text.Json;
34
using System.Text.Json.Serialization;
45
using Linq2GraphQL.Client;
56

@@ -10,7 +11,16 @@ public static class OrderExtensions
1011
[GraphMethod("orderHello")]
1112
public static string OrderHello(this Order order, [GraphArgument("String!")] string name, [GraphArgument("Int!")] int first)
1213
{
13-
return order?.OrderHello;
14+
var ll = "";
15+
if (name != null) { ll += name.GetHashCode().ToString(); }
16+
if(first != null) { ll += first.GetHashCode().ToString(); }
17+
18+
var argHascode = ll.GetHashCode();
19+
if (argHascode < 0) { argHascode = argHascode * -1; }
20+
21+
var vall = order.__AdditionalProperties["Arg" + argHascode];
22+
return vall.Deserialize<string>();
23+
1424
}
1525

1626
[GraphMethod("orderAddress")]
@@ -50,7 +60,9 @@ public partial class Order
5060
public DateTimeOffset OrderDate { get; set; }
5161

5262
[JsonPropertyName("lines")]
53-
public List<OrderLine> Lines { get; set; }
63+
public List<OrderLine> Lines { get; set; }
5464

65+
[JsonExtensionData]
66+
public Dictionary<string, JsonElement> __AdditionalProperties { get; set; }
5567

5668
}

test/Linq2GraphQL.Tests/QueryArgumentTests.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -92,8 +92,8 @@ public async Task InQueryArguments_Multiple()
9292
.Orders()
9393
.Select(e => e.Nodes.Select(f => new
9494
{
95-
Delivery = f.OrderAddress(AddressType.Delivery),
96-
Invoice = f.OrderAddress(AddressType.Invoice)
95+
Jocke = f.OrderHello("Jocke", 22),
96+
Kalle = f.OrderHello("Kalle", 11)
9797
})
9898
);
9999

@@ -102,8 +102,8 @@ public async Task InQueryArguments_Multiple()
102102

103103
var addresses = result.First();
104104

105-
Assert.Equal("Delivery", addresses.Delivery.Name);
106-
Assert.Equal("Invoice", addresses.Invoice.Name);
105+
Assert.Equal("Hello, Jocke [22]", addresses.Jocke);
106+
Assert.Equal("Hello, Kalle [11]", addresses.Kalle);
107107

108108
}
109109

0 commit comments

Comments
 (0)