Blame view

src/MapsDb/DataService/BusStopDs.cs 7.97 KB
21446fef   Administrator   add marge commit
1
  using System;
32912d0b   Administrator   first commit
2
3
  using System.Collections.Generic;
  using System.Linq;
db607025   Administrator   add pagination
4
  using System.Reflection;
21446fef   Administrator   add marge commit
5
  using System.Text.RegularExpressions;
32912d0b   Administrator   first commit
6
  using System.Threading.Tasks;
4f948d42   Yarik   Mapper
7
  using AutoMapper;
b9b3b8dd   Administrator   add deteils and c...
8
  using MapsDb.Interfaces;
32912d0b   Administrator   first commit
9
10
  using MapsDb.Models;
  using MapsModels.DsModels;
94ffda14   Yarik   Delete action
11
  using Microsoft.EntityFrameworkCore;
4f948d42   Yarik   Mapper
12
  
32912d0b   Administrator   first commit
13
14
15
16
17
18
19
  namespace MapsDb.DataService
  {
      public class BusStopDs : IBusStopDs
      {
          private PostgresDbContext _context;
          public BusStopDs(){
              _context = new PostgresDbContext();
32912d0b   Administrator   first commit
20
          }
db607025   Administrator   add pagination
21
22
          public Task<IList<BusStopEditDsM>> GetIndexListAsync(PaginationDsM pagination){
              return Task.Factory.StartNew(()=> { return GetAllBusStop(pagination); });
32912d0b   Administrator   first commit
23
          }
db607025   Administrator   add pagination
24
          private IList<BusStopEditDsM> GetAllBusStop(PaginationDsM pagination)
32912d0b   Administrator   first commit
25
          {
21446fef   Administrator   add marge commit
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
  
              var filter =  pagination.filter;
  
              IQueryable<BusStop> data = _context.BusStop
              .Include(d=>d.Road)
              .Include(d=>d.Region)
              .Include(d=>d.SurfaceType)
              .Include(d=>d.StateCommon);
              data = Filtering(pagination.filter, data);
              //.Where(d => d.Region.Name == filter);
  
              IQueryable<BusStopEditDsM> result = data
              .Select(BusStop => Mapper.Map<BusStopEditDsM>(BusStop))
              .Skip(pagination.from)
              .Take(pagination.perPage);
  
db607025   Administrator   add pagination
42
43
44
              switch (pagination.orderType())
              {
                  case "ASC":
21446fef   Administrator   add marge commit
45
                      return result.OrderBy(i => i.GetType().GetProperty(pagination.sort).GetValue(i, null)).ToList();
db607025   Administrator   add pagination
46
47
            
                  case "DESC":
21446fef   Administrator   add marge commit
48
                      return result.OrderByDescending(i => i.GetType().GetProperty(pagination.sort).GetValue(i, null)).ToList();
db607025   Administrator   add pagination
49
50
              
                  default:
21446fef   Administrator   add marge commit
51
                      return result.OrderByDescending(i => i.Id).ToList();
db607025   Administrator   add pagination
52
53
              }     
              
32912d0b   Administrator   first commit
54
55
          }
  
e02ee314   Administrator   add update and cr...
56
57
          public Task<BusStop> CreateAsync(BusStopEditDsM data){
                return Task.Factory.StartNew(()=> { return Create(data); });
32912d0b   Administrator   first commit
58
          }
e02ee314   Administrator   add update and cr...
59
          private BusStop Create(BusStopEditDsM data)
abec55bf   Administrator   Finish busStop mo...
60
          {   
e02ee314   Administrator   add update and cr...
61
62
63
              
              BusStop Model = InsertModel(data);
              _context.BusStop.Add(Model);
abec55bf   Administrator   Finish busStop mo...
64
              _context.SaveChanges();
e02ee314   Administrator   add update and cr...
65
66
67
68
69
70
71
72
              return Model;
          }
          public Task<BusStop> UpdateAsync(BusStopEditDsM data, int id){
              return Task.Factory.StartNew(()=> { return Update(data, id); });
          }
          private BusStop Update(BusStopEditDsM data, int id)
          {   
              BusStop Model = InsertModel(data);
db607025   Administrator   add pagination
73
              Model.Id = id;
e02ee314   Administrator   add update and cr...
74
75
76
77
78
              _context.BusStop.Update(Model);
              _context.SaveChanges();
              return Model;
          }
          public BusStop InsertModel(BusStopEditDsM data){
4f948d42   Yarik   Mapper
79
              BusStop Model = Mapper.Map<BusStop>(data);
e02ee314   Administrator   add update and cr...
80
              return Model;
32912d0b   Administrator   first commit
81
          }
21446fef   Administrator   add marge commit
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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
          public IQueryable<BusStop> Filtering(string filters, IQueryable<BusStop> data){
              if(filters != null){
                 string[] FilterWords = filters.Split(';').Where(x => !string.IsNullOrEmpty(x)).ToArray();
                  foreach(string word in FilterWords){
                      string[] filter = Regex.Split(word.Substring(1), "(.*)_(.*)");
                      if(filter.Length < 3 ){
                          continue;
                      }
                      string field = char.ToUpper(filter[1][0]) + filter[1].Substring(1);
                      if(word.StartsWith("$")){
                          data = FilterByEndWith(field, filter[2], data);
                      }
                      else if(word.StartsWith("^")){
                          data = FilterByStartWith(field, filter[2], data);
                      }
                      else if(word.StartsWith("*")){
                          data = FilterByComtains(field, filter[2], data);
                      }
                      else if(word.StartsWith("!")){
                          data = FilterByNotEquals(field, filter[2], data);
                      }
                      else if(word.StartsWith("=")){
                          data = FilterByEquals(field, filter[2], data);
                      }
                  }
              
              }
              return data;
          }
          public IQueryable<BusStop> FilterByComtains(string field, string param, IQueryable<BusStop> data){
              switch(field){
                  case "RoadId":
                      return data.Where(i => i.Road.Name.Contains(param) );
                  case "RegionId":
                      return data.Where(i => i.Region.Name.Contains(param) );
                  case "SurfaceTypeId":
                      return data.Where(i => i.SurfaceType.Name.Contains(param) );
                  case "StateCommonId":
                      return data.Where(i => i.StateCommon.Value.Contains(param) );
                  default:
                      return data.Where(i => Convert.ToString(i.GetType().GetProperty(field).GetValue(i, null)).Contains(param) );
              }
          }
          public IQueryable<BusStop> FilterByEquals(string field, string param, IQueryable<BusStop> data){
              switch(field){
                  case "RoadId":
                      return data.Where(i => i.Road.Name == param );
                  case "RegionId":
                      return data.Where(i => i.Region.Name == param );
                  case "SurfaceTypeId":
                      return data.Where(i => i.SurfaceType.Name == param );
                  case "StateCommonId":
                      return data.Where(i => i.StateCommon.Value == param );
                  default:
                  return data.Where(i => Convert.ToString(i.GetType().GetProperty(field).GetValue(i, null)) == param );
              }
  
          }
          public IQueryable<BusStop> FilterByNotEquals(string field, string param, IQueryable<BusStop> data){
             switch(field){
                  case "RoadId":
                      return data.Where(i => i.Road.Name != param );
                  case "RegionId":
                      return data.Where(i => i.Region.Name != param );
                  case "SurfaceTypeId":
                      return data.Where(i => i.SurfaceType.Name != param );
                  case "StateCommonId":
                      return data.Where(i => i.StateCommon.Value != param );
                  default:
                  return data.Where(i => Convert.ToString(i.GetType().GetProperty(field).GetValue(i, null)) != param );
              }
          }
          public IQueryable<BusStop> FilterByStartWith(string field, string param, IQueryable<BusStop> data){
              switch(field){
                  case "RoadId":
                      return data.Where(i => i.Road.Name.StartsWith(param) );
                  case "RegionId":
                      return data.Where(i => i.Region.Name.StartsWith(param) );
                  case "SurfaceTypeId":
                      return data.Where(i => i.SurfaceType.Name.StartsWith(param) );
                  case "StateCommonId":
                      return data.Where(i => i.StateCommon.Value.StartsWith(param) );
                  default:
                  return data.Where(i => Convert.ToString(i.GetType().GetProperty(field).GetValue(i, null)).StartsWith(param) );
              }
          }
          public IQueryable<BusStop> FilterByEndWith(string field, string param, IQueryable<BusStop> data){
            switch(field){
                  case "RoadId":
                      return data.Where(i => i.Road.Name.EndsWith(param) );
                  case "RegionId":
                      return data.Where(i => i.Region.Name.EndsWith(param) );
                  case "SurfaceTypeId":
                      return data.Where(i => i.SurfaceType.Name.EndsWith(param) );
                  case "StateCommonId":
                      return data.Where(i => i.StateCommon.Value.EndsWith(param) );
                  default:
                  return data.Where(i => Convert.ToString(i.GetType().GetProperty(field).GetValue(i, null)).EndsWith(param) );
              }
          }
e02ee314   Administrator   add update and cr...
182
          public async Task<int> DeleteAsync(int Id)
94ffda14   Yarik   Delete action
183
          {
db607025   Administrator   add pagination
184
              var busStop = await _context.BusStop.SingleOrDefaultAsync(x => x.Id == Id);
94ffda14   Yarik   Delete action
185
186
187
              _context.BusStop.Remove(busStop);
              return await _context.SaveChangesAsync();
          }
32912d0b   Administrator   first commit
188
189
      }
  }