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