Blame view

src/MapsDb/DataService/BusStopDs.cs 8.15 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();
4f948d42   Yarik   Mapper
20
21
22
23
              Mapper.Initialize(cnf => {
                  cnf.CreateMap<BusStop, BusStopEditDsM>();
                  cnf.CreateMap<BusStopEditDsM, BusStop>();
              });            
32912d0b   Administrator   first commit
24
          }
db607025   Administrator   add pagination
25
26
          public Task<IList<BusStopEditDsM>> GetIndexListAsync(PaginationDsM pagination){
              return Task.Factory.StartNew(()=> { return GetAllBusStop(pagination); });
32912d0b   Administrator   first commit
27
          }
db607025   Administrator   add pagination
28
          private IList<BusStopEditDsM> GetAllBusStop(PaginationDsM pagination)
32912d0b   Administrator   first commit
29
          {
21446fef   Administrator   add marge commit
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
  
              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
46
47
48
              switch (pagination.orderType())
              {
                  case "ASC":
21446fef   Administrator   add marge commit
49
                      return result.OrderBy(i => i.GetType().GetProperty(pagination.sort).GetValue(i, null)).ToList();
db607025   Administrator   add pagination
50
51
            
                  case "DESC":
21446fef   Administrator   add marge commit
52
                      return result.OrderByDescending(i => i.GetType().GetProperty(pagination.sort).GetValue(i, null)).ToList();
db607025   Administrator   add pagination
53
54
              
                  default:
21446fef   Administrator   add marge commit
55
                      return result.OrderByDescending(i => i.Id).ToList();
db607025   Administrator   add pagination
56
57
              }     
              
32912d0b   Administrator   first commit
58
59
          }
  
e02ee314   Administrator   add update and cr...
60
61
          public Task<BusStop> CreateAsync(BusStopEditDsM data){
                return Task.Factory.StartNew(()=> { return Create(data); });
32912d0b   Administrator   first commit
62
          }
e02ee314   Administrator   add update and cr...
63
          private BusStop Create(BusStopEditDsM data)
abec55bf   Administrator   Finish busStop mo...
64
          {   
e02ee314   Administrator   add update and cr...
65
66
67
              
              BusStop Model = InsertModel(data);
              _context.BusStop.Add(Model);
abec55bf   Administrator   Finish busStop mo...
68
              _context.SaveChanges();
e02ee314   Administrator   add update and cr...
69
70
71
72
73
74
75
76
              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
77
              Model.Id = id;
e02ee314   Administrator   add update and cr...
78
79
80
81
82
              _context.BusStop.Update(Model);
              _context.SaveChanges();
              return Model;
          }
          public BusStop InsertModel(BusStopEditDsM data){
4f948d42   Yarik   Mapper
83
              BusStop Model = Mapper.Map<BusStop>(data);
e02ee314   Administrator   add update and cr...
84
              return Model;
32912d0b   Administrator   first commit
85
          }
21446fef   Administrator   add marge commit
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
182
183
184
185
          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...
186
          public async Task<int> DeleteAsync(int Id)
94ffda14   Yarik   Delete action
187
          {
db607025   Administrator   add pagination
188
              var busStop = await _context.BusStop.SingleOrDefaultAsync(x => x.Id == Id);
94ffda14   Yarik   Delete action
189
190
191
              _context.BusStop.Remove(busStop);
              return await _context.SaveChangesAsync();
          }
32912d0b   Administrator   first commit
192
193
      }
  }