1
+ using Microsoft . AspNetCore . Http ;
2
+ using Microsoft . AspNetCore . Mvc ;
3
+ using WebApiAdaptor . Models ;
4
+
5
+ namespace WebApiAdaptor . Controllers
6
+ {
7
+ [ Route ( "api/[controller]" ) ]
8
+
9
+ [ ApiController ]
10
+ public class GridController : ControllerBase
11
+ {
12
+ // GET: api/Orders
13
+ [ HttpGet ]
14
+
15
+ // Action to retrieve orders
16
+ public object Get ( )
17
+ {
18
+ var queryString = Request . Query ;
19
+ var data = OrdersDetails . GetAllRecords ( ) . ToList ( ) ;
20
+
21
+ string ? sort = queryString [ "$orderby" ] ; // Get sorting parameter
22
+ string ? filter = queryString [ "$filter" ] ; // // Get filtering parameter
23
+
24
+ //Peform sort operation
25
+ if ( ! string . IsNullOrEmpty ( sort ) )
26
+ {
27
+ var sortConditions = sort . Split ( ',' ) ;
28
+
29
+ var orderedData = data . OrderBy ( x => 0 ) ; // Start with a stable sort
30
+
31
+ foreach ( var sortCondition in sortConditions )
32
+ {
33
+ var sortParts = sortCondition . Trim ( ) . Split ( ' ' ) ;
34
+ var sortBy = sortParts [ 0 ] ;
35
+ var sortOrder = sortParts . Length > 1 && sortParts [ 1 ] . ToLower ( ) == "desc" ;
36
+
37
+ switch ( sortBy )
38
+ {
39
+ case "OrderID" :
40
+ orderedData = sortOrder ? orderedData . ThenByDescending ( x => x . OrderID ) : orderedData . ThenBy ( x => x . OrderID ) ;
41
+ break ;
42
+ case "CustomerID" :
43
+ orderedData = sortOrder ? orderedData . ThenByDescending ( x => x . CustomerID ) : orderedData . ThenBy ( x => x . CustomerID ) ;
44
+ break ;
45
+ case "ShipCity" :
46
+ orderedData = sortOrder ? orderedData . ThenByDescending ( x => x . ShipCity ) : orderedData . ThenBy ( x => x . ShipCity ) ;
47
+ break ;
48
+ }
49
+ }
50
+
51
+ data = [ .. orderedData ] ;
52
+ }
53
+ if ( filter != null )
54
+ {
55
+ var filters = filter . Split ( new string [ ] { " and " } , StringSplitOptions . RemoveEmptyEntries ) ;
56
+
57
+ foreach ( var filterItem in filters )
58
+ {
59
+ if ( filterItem . Contains ( "substringof" ) )
60
+ {
61
+ // Performing Search operation
62
+
63
+ var searchParts = filterItem . Split ( '(' , ')' , '\' ' ) ;
64
+ var searchValue = searchParts [ 3 ] ;
65
+
66
+ // Apply the search value to all searchable fields
67
+ data = data . Where ( cust =>
68
+ cust != null &&
69
+ ( ( cust . OrderID ? . ToString ( ) ? . Contains ( searchValue ) ?? false ) ||
70
+ ( cust . CustomerID ? . ToLower ( ) ? . Contains ( searchValue ) ?? false ) ||
71
+ ( cust . ShipCity ? . ToLower ( ) ? . Contains ( searchValue ) ?? false ) ) ) . ToList ( ) ;
72
+ }
73
+ else
74
+ {
75
+ // Performing filter operation
76
+
77
+ var filterfield = "" ;
78
+ var filtervalue = "" ;
79
+ var filterParts = filterItem . Split ( '(' , ')' , '\' ' ) ;
80
+ if ( filterParts . Length != 9 )
81
+ {
82
+ var filterValueParts = filterParts [ 1 ] . Split ( ) ;
83
+ filterfield = filterValueParts [ 0 ] ;
84
+ filtervalue = filterValueParts [ 2 ] ;
85
+ }
86
+ else
87
+ {
88
+ filterfield = filterParts [ 3 ] ;
89
+ filtervalue = filterParts [ 5 ] ;
90
+ }
91
+ switch ( filterfield )
92
+ {
93
+ case "OrderID" :
94
+ data = data . Where ( cust => cust != null && cust . OrderID ? . ToString ( ) == filtervalue . ToString ( ) ) . ToList ( ) ;
95
+ break ;
96
+ case "CustomerID" :
97
+ data = data . Where ( cust => cust != null && cust . CustomerID ? . ToLower ( ) . StartsWith ( filtervalue . ToString ( ) ) == true ) . ToList ( ) ;
98
+ break ;
99
+ case "ShipCity" :
100
+ data = data . Where ( cust => cust != null && cust . ShipCity ? . ToLower ( ) . StartsWith ( filtervalue . ToString ( ) ) == true ) . ToList ( ) ;
101
+ break ;
102
+ // Add more cases for other searchable fields if needed
103
+ }
104
+
105
+ }
106
+ }
107
+ }
108
+
109
+ int TotalRecordsCount = data . Count ;
110
+
111
+ //Perform page operation
112
+
113
+ int skip = Convert . ToInt32 ( queryString [ "$skip" ] ) ;
114
+ int take = Convert . ToInt32 ( queryString [ "$top" ] ) ;
115
+ if ( take != 0 )
116
+ {
117
+ data = data . Skip ( skip ) . Take ( take ) . ToList ( ) ;
118
+
119
+ }
120
+
121
+ return new { result = data , count = TotalRecordsCount } ;
122
+
123
+ }
124
+
125
+
126
+ // POST: api/Orders
127
+ [ HttpPost ]
128
+ /// <summary>
129
+ /// Inserts a new data item into the data collection.
130
+ /// </summary>
131
+ /// <param name="value">It holds new record detail which is need to be inserted.</param>
132
+ /// <returns>Returns void</returns>
133
+ public void Post ( [ FromBody ] OrdersDetails newRecord )
134
+ {
135
+ // Insert a new record into the OrdersDetails model
136
+ OrdersDetails . GetAllRecords ( ) . Insert ( 0 , newRecord ) ;
137
+ }
138
+
139
+ // PUT: api/Orders/5
140
+ [ HttpPut ]
141
+ /// <summary>
142
+ /// Update a existing data item from the data collection.
143
+ /// </summary>
144
+ /// <param name="order">It holds updated record detail which is need to be updated.</param>
145
+ /// <returns>Returns void</returns>
146
+ public void Put ( int id , [ FromBody ] OrdersDetails order )
147
+ {
148
+ // Find the existing order by ID
149
+ var existingOrder = OrdersDetails . GetAllRecords ( ) . FirstOrDefault ( o => o . OrderID == id ) ;
150
+ if ( existingOrder != null )
151
+ {
152
+ // If the order exists, update its properties
153
+ existingOrder . OrderID = order . OrderID ;
154
+ existingOrder . CustomerID = order . CustomerID ;
155
+ existingOrder . ShipCity = order . ShipCity ;
156
+ }
157
+ }
158
+
159
+ // DELETE: api/Orders/5
160
+ [ HttpDelete ( "{id}" ) ]
161
+ /// <summary>
162
+ /// Remove a specific data item from the data collection.
163
+ /// </summary>
164
+ /// <param name="id">It holds specific record detail id which is need to be removed.</param>
165
+ /// <returns>Returns void</returns>
166
+ public void Delete ( int id )
167
+ {
168
+ // Find the order to remove by ID
169
+ var orderToRemove = OrdersDetails . GetAllRecords ( ) . FirstOrDefault ( order => order . OrderID == id ) ;
170
+ // If the order exists, remove it
171
+ if ( orderToRemove != null )
172
+ {
173
+ OrdersDetails . GetAllRecords ( ) . Remove ( orderToRemove ) ;
174
+ }
175
+ }
176
+ }
177
+ }
0 commit comments