1
+ using Microsoft . AspNetCore . Http ;
2
+ using Microsoft . AspNetCore . Mvc ;
3
+ using Syncfusion . EJ2 . Base ;
4
+ using UrlAdaptor . Models ;
5
+
6
+ namespace UrlAdaptor . Controllers
7
+ {
8
+ [ ApiController ]
9
+ public class GridController : Controller
10
+ {
11
+ [ HttpPost ]
12
+ [ Route ( "api/[controller]" ) ]
13
+ public object Post ( [ FromBody ] DataManagerRequest DataManagerRequest )
14
+ {
15
+ // Retrieve data from the data source (e.g., database)
16
+ IQueryable < OrdersDetails > DataSource = GetOrderData ( ) . AsQueryable ( ) ;
17
+
18
+ QueryableOperation queryableOperation = new QueryableOperation ( ) ; // Initialize DataOperations instance
19
+
20
+ // Handling searching operation
21
+ if ( DataManagerRequest . Search != null && DataManagerRequest . Search . Count > 0 )
22
+ {
23
+ DataSource = queryableOperation . PerformSearching ( DataSource , DataManagerRequest . Search ) ;
24
+ }
25
+
26
+ // Handling filtering operation
27
+ if ( DataManagerRequest . Where != null && DataManagerRequest . Where . Count > 0 )
28
+ {
29
+ foreach ( var condition in DataManagerRequest . Where )
30
+ {
31
+ foreach ( var predicate in condition . predicates )
32
+ {
33
+ DataSource = queryableOperation . PerformFiltering ( DataSource , DataManagerRequest . Where , predicate . Operator ) ;
34
+ }
35
+ }
36
+ }
37
+
38
+ // Handling sorting operation
39
+ if ( DataManagerRequest . Sorted != null && DataManagerRequest . Sorted . Count > 0 )
40
+ {
41
+ DataSource = queryableOperation . PerformSorting ( DataSource , DataManagerRequest . Sorted ) ;
42
+ }
43
+
44
+ // Get the total count of records
45
+ int totalRecordsCount = DataSource . Count ( ) ;
46
+
47
+ // Handling paging operation.
48
+ if ( DataManagerRequest . Skip != 0 )
49
+ {
50
+ DataSource = queryableOperation . PerformSkip ( DataSource , DataManagerRequest . Skip ) ;
51
+ }
52
+ if ( DataManagerRequest . Take != 0 )
53
+ {
54
+ DataSource = queryableOperation . PerformTake ( DataSource , DataManagerRequest . Take ) ;
55
+ }
56
+
57
+ // Return data based on the request
58
+ return new { result = DataSource , count = totalRecordsCount } ;
59
+ }
60
+
61
+ [ HttpGet ]
62
+ [ Route ( "api/[controller]" ) ]
63
+ public List < OrdersDetails > GetOrderData ( )
64
+ {
65
+ var data = OrdersDetails . GetAllRecords ( ) . ToList ( ) ;
66
+ return data ;
67
+ }
68
+
69
+ /// <summary>
70
+ /// Inserts a new data item into the data collection.
71
+ /// </summary>
72
+ /// <param name="newRecord">It contains the new record detail which is need to be inserted.</param>
73
+ /// <returns>Returns void</returns>
74
+ [ HttpPost ]
75
+ [ Route ( "api/Grid/Insert" ) ]
76
+ public void Insert ( [ FromBody ] CRUDModel < OrdersDetails > newRecord )
77
+ {
78
+ if ( newRecord . value != null )
79
+ {
80
+ OrdersDetails . GetAllRecords ( ) . Insert ( 0 , newRecord . value ) ;
81
+ }
82
+ }
83
+
84
+ /// <summary>
85
+ /// Update a existing data item from the data collection.
86
+ /// </summary>
87
+ /// <param name="Order">It contains the updated record detail which is need to be updated.</param>
88
+ /// <returns>Returns void</returns>
89
+ [ HttpPost ]
90
+ [ Route ( "api/Grid/Update" ) ]
91
+ public void Update ( [ FromBody ] CRUDModel < OrdersDetails > Order )
92
+ {
93
+ var updatedOrder = Order . value ;
94
+ if ( updatedOrder != null )
95
+ {
96
+ var data = OrdersDetails . GetAllRecords ( ) . FirstOrDefault ( or => or . OrderID == updatedOrder . OrderID ) ;
97
+ if ( data != null )
98
+ {
99
+ // Update the existing record
100
+ data . OrderID = updatedOrder . OrderID ;
101
+ data . CustomerID = updatedOrder . CustomerID ;
102
+ data . ShipCity = updatedOrder . ShipCity ;
103
+ data . ShipCountry = updatedOrder . ShipCountry ;
104
+ // Update other properties similarly
105
+ }
106
+ }
107
+
108
+ }
109
+ /// <summary>
110
+ /// Remove a specific data item from the data collection.
111
+ /// </summary>
112
+ /// <param name="value">It contains the specific record detail which is need to be removed.</param>
113
+ /// <return>Returns void</return>
114
+ [ HttpPost ]
115
+ [ Route ( "api/Grid/Remove" ) ]
116
+ public void Remove ( [ FromBody ] CRUDModel < OrdersDetails > value )
117
+ {
118
+ int orderId = int . Parse ( ( value . key ) . ToString ( ) ) ;
119
+ var data = OrdersDetails . GetAllRecords ( ) . FirstOrDefault ( orderData => orderData . OrderID == orderId ) ;
120
+ if ( data != null )
121
+ {
122
+ // Remove the record from the data collection
123
+ OrdersDetails . GetAllRecords ( ) . Remove ( data ) ;
124
+ }
125
+ }
126
+
127
+ /// <summary>
128
+ /// Perform all the CRUD operation at server-side using a single method instead of specifying separate controller action method for CRUD (insert, update and delete) operations.
129
+ /// </summary>
130
+ /// <param name="request"></param>
131
+ [ HttpPost ]
132
+ [ Route ( "api/[controller]/CrudUpdate" ) ]
133
+ public void CrudUpdate ( [ FromBody ] CRUDModel < OrdersDetails > request )
134
+ {
135
+ if ( request . action == "update" )
136
+ {
137
+ // Update record
138
+ var orderValue = request . value ;
139
+ OrdersDetails existingRecord = OrdersDetails . GetAllRecords ( ) . FirstOrDefault ( or => or . OrderID == orderValue . OrderID ) ;
140
+
141
+ if ( orderValue != null && existingRecord != null )
142
+ {
143
+ existingRecord . OrderID = orderValue . OrderID ;
144
+ existingRecord . CustomerID = orderValue . CustomerID ;
145
+ existingRecord . ShipCity = orderValue . ShipCity ;
146
+ }
147
+
148
+ }
149
+ else if ( request . action == "insert" )
150
+ {
151
+ // Insert record
152
+ if ( request . value != null )
153
+ {
154
+ OrdersDetails . GetAllRecords ( ) . Insert ( 0 , request . value ) ;
155
+ }
156
+ }
157
+ else if ( request . action == "remove" )
158
+ {
159
+ // Delete record
160
+ OrdersDetails . GetAllRecords ( ) . Remove ( OrdersDetails . GetAllRecords ( ) . FirstOrDefault ( or => or . OrderID == int . Parse ( request . key . ToString ( ) ) ) ) ;
161
+ }
162
+
163
+ }
164
+ [ HttpPost ]
165
+ [ Route ( "api/[controller]/BatchUpdate" ) ]
166
+ public IActionResult BatchUpdate ( [ FromBody ] CRUDModel < OrdersDetails > batchmodel )
167
+ {
168
+ if ( batchmodel . added != null )
169
+ {
170
+ foreach ( var addedOrder in batchmodel . added )
171
+ {
172
+ OrdersDetails . GetAllRecords ( ) . Insert ( 0 , addedOrder ) ;
173
+ }
174
+ }
175
+ if ( batchmodel . changed != null )
176
+ {
177
+ foreach ( var changedOrder in batchmodel . changed )
178
+ {
179
+ var existingOrder = OrdersDetails . GetAllRecords ( ) . FirstOrDefault ( or => or . OrderID == changedOrder . OrderID ) ;
180
+ if ( existingOrder != null )
181
+ {
182
+ existingOrder . CustomerID = changedOrder . CustomerID ;
183
+ existingOrder . ShipCity = changedOrder . ShipCity ;
184
+ existingOrder . ShipCountry = changedOrder . ShipCountry ;
185
+ // Update other properties as needed
186
+ }
187
+ }
188
+ }
189
+ if ( batchmodel . deleted != null )
190
+ {
191
+ foreach ( var deletedOrder in batchmodel . deleted )
192
+ {
193
+ var orderToDelete = OrdersDetails . GetAllRecords ( ) . FirstOrDefault ( or => or . OrderID == deletedOrder . OrderID ) ;
194
+ if ( orderToDelete != null )
195
+ {
196
+ OrdersDetails . GetAllRecords ( ) . Remove ( orderToDelete ) ;
197
+ }
198
+ }
199
+ }
200
+ return Json ( batchmodel ) ;
201
+ }
202
+
203
+
204
+ public class CRUDModel < T > where T : class
205
+ {
206
+
207
+ public string ? action { get ; set ; }
208
+
209
+ public string ? keyColumn { get ; set ; }
210
+
211
+ public object ? key { get ; set ; }
212
+
213
+ public T ? value { get ; set ; }
214
+
215
+ public List < T > ? added { get ; set ; }
216
+
217
+ public List < T > ? changed { get ; set ; }
218
+
219
+ public List < T > ? deleted { get ; set ; }
220
+
221
+ public IDictionary < string , object > ? @params { get ; set ; }
222
+ }
223
+ }
224
+ }
0 commit comments