-
Notifications
You must be signed in to change notification settings - Fork 34
/
AccountBinder.cs
116 lines (97 loc) 路 3.39 KB
/
AccountBinder.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
锘縰sing System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc.ModelBinding;
using Tzkt.Api.Services.Cache;
namespace Tzkt.Api
{
public class AccountBinder : IModelBinder
{
readonly AccountsCache Accounts;
public AccountBinder(AccountsCache accounts)
{
Accounts = accounts;
}
public async Task BindModelAsync(ModelBindingContext bindingContext)
{
var model = bindingContext.ModelName;
var hasValue = false;
if (!bindingContext.TryGetAccount($"{model}", ref hasValue, out var value))
return;
if (!bindingContext.TryGetAccount($"{model}.eq", ref hasValue, out var eq))
return;
if (!bindingContext.TryGetAccount($"{model}.ne", ref hasValue, out var ne))
return;
if (!bindingContext.TryGetAccountList($"{model}.in", ref hasValue, out var @in))
return;
if (!bindingContext.TryGetAccountList($"{model}.ni", ref hasValue, out var ni))
return;
if (!bindingContext.TryGetString($"{model}.eqx", ref hasValue, out var eqx))
return;
if (!bindingContext.TryGetString($"{model}.nex", ref hasValue, out var nex))
return;
if (!bindingContext.TryGetBool($"{model}.null", ref hasValue, out var isNull))
return;
if (!hasValue)
{
bindingContext.Result = ModelBindingResult.Success(null);
return;
}
int? _eq = null;
int? _ne = null;
List<int> _listIn = null;
List<int> _listNi = null;
var inHasNull = false;
var niHasNull = false;
if ((value ?? eq) != null)
_eq = (await Accounts.GetAsync(value ?? eq))?.Id ?? -1;
if (ne != null)
_ne = (await Accounts.GetAsync(ne))?.Id ?? -1;
if (@in != null)
{
_listIn = new List<int>(@in.Count);
foreach (var addr in @in)
{
if (addr != null)
{
var acc = await Accounts.GetAsync(addr);
if (acc != null) _listIn.Add(acc.Id);
}
else
{
inHasNull = true;
}
}
}
if (ni != null)
{
_listNi = new List<int>(ni.Count);
foreach (var addr in ni)
{
if (addr != null)
{
var acc = await Accounts.GetAsync(addr);
if (acc != null) _listNi.Add(acc.Id);
}
else
{
niHasNull = true;
}
}
}
bindingContext.Result = ModelBindingResult.Success(new AccountParameter
{
Eq = _eq,
Ne = _ne,
In = _listIn,
Ni = _listNi,
Eqx = eqx,
Nex = nex,
Null = isNull,
InHasNull = inHasNull,
NiHasNull = niHasNull,
});
}
}
}