1 | using Dal.ApplicationStorage.DataAccess.Abstract;
|
---|
2 | using Microsoft.CodeAnalysis;
|
---|
3 | using Microsoft.EntityFrameworkCore;
|
---|
4 | using Microsoft.Extensions.Logging;
|
---|
5 | using Microsoft.Win32;
|
---|
6 | using Models.DatabaseModels;
|
---|
7 | using Models.DataTransferObjects.Serach;
|
---|
8 | using Models.JSON;
|
---|
9 | using System;
|
---|
10 | using System.Collections.Generic;
|
---|
11 | using System.Linq;
|
---|
12 | using System.Text;
|
---|
13 | using System.Threading.Tasks;
|
---|
14 |
|
---|
15 | namespace Dal.ApplicationStorage.DataAccess.Concrete
|
---|
16 | {
|
---|
17 | public class SearchDa : ISearchDa
|
---|
18 | {
|
---|
19 | private readonly ApiContext _db;
|
---|
20 | private static ILogger<SearchDa> _logger;
|
---|
21 |
|
---|
22 | public SearchDa(ApiContext db, ILogger<SearchDa> logger)
|
---|
23 | {
|
---|
24 | _db = db;
|
---|
25 | _logger = logger;
|
---|
26 | }
|
---|
27 | public async Task<List<SearchLocationDTO>> GetLocations()
|
---|
28 | {
|
---|
29 | try
|
---|
30 | {
|
---|
31 | var citiesFromDb = await _db.Locations.ToListAsync();
|
---|
32 | List<SearchLocationDTO> cities = new List<SearchLocationDTO>();
|
---|
33 | foreach(var city in citiesFromDb)
|
---|
34 | {
|
---|
35 | cities.Add(new SearchLocationDTO()
|
---|
36 | {
|
---|
37 | CityName = city.City,
|
---|
38 | });
|
---|
39 | }
|
---|
40 |
|
---|
41 | return cities.DistinctBy(x => x.CityName).ToList();
|
---|
42 | }
|
---|
43 | catch (Exception e)
|
---|
44 | {
|
---|
45 | _logger.LogError(e.Message);
|
---|
46 | throw;
|
---|
47 | }
|
---|
48 | }
|
---|
49 | public async Task<List<SearchBrandsDTO>> GetVehicleBrands()
|
---|
50 | {
|
---|
51 | try
|
---|
52 | {
|
---|
53 | var brandsFromDb = await _db.Vehicles.ToListAsync();
|
---|
54 | List<SearchBrandsDTO> brands = new List<SearchBrandsDTO>();
|
---|
55 | foreach(var brand in brandsFromDb)
|
---|
56 | {
|
---|
57 | brands.Add(new SearchBrandsDTO()
|
---|
58 | {
|
---|
59 | BrandName = brand.Brand
|
---|
60 | });
|
---|
61 | }
|
---|
62 |
|
---|
63 | return brands.DistinctBy(x => x.BrandName).ToList();
|
---|
64 | }
|
---|
65 | catch (Exception e)
|
---|
66 | {
|
---|
67 | _logger.LogError(e.Message);
|
---|
68 | throw;
|
---|
69 | }
|
---|
70 | }
|
---|
71 | public async Task<List<CarsDTO>> GetVehiclesBySearchParameters(SearchJSON data)
|
---|
72 | {
|
---|
73 | try
|
---|
74 | {
|
---|
75 | var query = await (from vehicles in _db.Vehicles
|
---|
76 | join locations in _db.Locations on vehicles.LocationId equals locations.LocationId
|
---|
77 | join models in _db.Models on vehicles.ModelId equals models.ModelId
|
---|
78 | join registrations in _db.Registrations on vehicles.RegistrationId equals registrations.RegistrationId
|
---|
79 | join companies in _db.Companies on vehicles.CompanyId equals companies.CompanyId
|
---|
80 | select new CarsDTO()
|
---|
81 | {
|
---|
82 | CarId = vehicles.VehicleId,
|
---|
83 | Brand = vehicles.Brand,
|
---|
84 | Model = models.ModelName,
|
---|
85 | Color = models.Color,
|
---|
86 | ModelYear = models.ModelYear.Year,
|
---|
87 | NumSeats = models.NumOfSeats,
|
---|
88 | NumOfDoors = models.NumOfDoors,
|
---|
89 | Fuel = models.Fuel,
|
---|
90 | Transmission = models.Transmission,
|
---|
91 | FuelEfficiency = vehicles.FuelEfficiency,
|
---|
92 | DailyRentalPrice = (double)vehicles.DailyRentalPrice,
|
---|
93 | City = locations.City,
|
---|
94 | IsAvailable = registrations.IsAvailable,
|
---|
95 | ImgUrl = models.ImgUrl,
|
---|
96 | CompanyName = companies.CompanyName
|
---|
97 | }
|
---|
98 | ).Where(x => x.Brand == data.Brand && x.City == data.City && x.IsAvailable)
|
---|
99 | .ToListAsync();
|
---|
100 |
|
---|
101 | return query;
|
---|
102 | }
|
---|
103 | catch (Exception e)
|
---|
104 | {
|
---|
105 | _logger.LogError(e.Message);
|
---|
106 | throw;
|
---|
107 | }
|
---|
108 | }
|
---|
109 | public async Task<List<CarsDTO>> GetAllVehicles()
|
---|
110 | {
|
---|
111 | try
|
---|
112 | {
|
---|
113 | var query = await (from vehicles in _db.Vehicles
|
---|
114 | join locations in _db.Locations on vehicles.LocationId equals locations.LocationId
|
---|
115 | join models in _db.Models on vehicles.ModelId equals models.ModelId
|
---|
116 | join registrations in _db.Registrations on vehicles.RegistrationId equals registrations.RegistrationId
|
---|
117 | join companies in _db.Companies on vehicles.CompanyId equals companies.CompanyId
|
---|
118 | select new CarsDTO()
|
---|
119 | {
|
---|
120 | CarId = vehicles.VehicleId,
|
---|
121 | Brand = vehicles.Brand,
|
---|
122 | Model = models.ModelName,
|
---|
123 | Color = models.Color,
|
---|
124 | ModelYear = models.ModelYear.Year,
|
---|
125 | NumSeats = models.NumOfSeats,
|
---|
126 | NumOfDoors = models.NumOfDoors,
|
---|
127 | Fuel = models.Fuel,
|
---|
128 | Transmission = models.Transmission,
|
---|
129 | FuelEfficiency = vehicles.FuelEfficiency,
|
---|
130 | DailyRentalPrice = (double)vehicles.DailyRentalPrice,
|
---|
131 | City = locations.City,
|
---|
132 | IsAvailable = registrations.IsAvailable,
|
---|
133 | ImgUrl = models.ImgUrl,
|
---|
134 | CompanyName = companies.CompanyName
|
---|
135 | }
|
---|
136 | ).Where(x => x.IsAvailable)
|
---|
137 | .ToListAsync();
|
---|
138 |
|
---|
139 | return query;
|
---|
140 | }
|
---|
141 | catch (Exception e)
|
---|
142 | {
|
---|
143 | _logger.LogError(e.Message);
|
---|
144 | throw;
|
---|
145 | }
|
---|
146 | }
|
---|
147 | public async Task<List<CarsDTO>> GetVehilcesByLocation(SearchJSON data)
|
---|
148 | {
|
---|
149 | try
|
---|
150 | {
|
---|
151 | var query = await (from vehicles in _db.Vehicles
|
---|
152 | join locations in _db.Locations on vehicles.LocationId equals locations.LocationId
|
---|
153 | join models in _db.Models on vehicles.ModelId equals models.ModelId
|
---|
154 | join registrations in _db.Registrations on vehicles.RegistrationId equals registrations.RegistrationId
|
---|
155 | join companies in _db.Companies on vehicles.CompanyId equals companies.CompanyId
|
---|
156 | select new CarsDTO()
|
---|
157 | {
|
---|
158 | CarId = vehicles.VehicleId,
|
---|
159 | Brand = vehicles.Brand,
|
---|
160 | Model = models.ModelName,
|
---|
161 | Color = models.Color,
|
---|
162 | ModelYear = models.ModelYear.Year,
|
---|
163 | NumSeats = models.NumOfSeats,
|
---|
164 | NumOfDoors = models.NumOfDoors,
|
---|
165 | Fuel = models.Fuel,
|
---|
166 | Transmission = models.Transmission,
|
---|
167 | FuelEfficiency = vehicles.FuelEfficiency,
|
---|
168 | DailyRentalPrice = (double)vehicles.DailyRentalPrice,
|
---|
169 | City = locations.City,
|
---|
170 | IsAvailable = registrations.IsAvailable,
|
---|
171 | ImgUrl = models.ImgUrl,
|
---|
172 | CompanyName = companies.CompanyName
|
---|
173 | }
|
---|
174 | ).Where(x => x.City == data.City && x.IsAvailable)
|
---|
175 | .ToListAsync();
|
---|
176 |
|
---|
177 | return query;
|
---|
178 | }
|
---|
179 | catch (Exception e)
|
---|
180 | {
|
---|
181 | _logger.LogError(e.Message);
|
---|
182 | throw;
|
---|
183 | }
|
---|
184 | }
|
---|
185 | public async Task<List<CarsDTO>> GetVehiclesByBrand(SearchJSON data)
|
---|
186 | {
|
---|
187 | try
|
---|
188 | {
|
---|
189 | var query = await (from vehicles in _db.Vehicles
|
---|
190 | join locations in _db.Locations on vehicles.LocationId equals locations.LocationId
|
---|
191 | join models in _db.Models on vehicles.ModelId equals models.ModelId
|
---|
192 | join registrations in _db.Registrations on vehicles.RegistrationId equals registrations.RegistrationId
|
---|
193 | join companies in _db.Companies on vehicles.CompanyId equals companies.CompanyId
|
---|
194 | select new CarsDTO()
|
---|
195 | {
|
---|
196 | CarId = vehicles.VehicleId,
|
---|
197 | Brand = vehicles.Brand,
|
---|
198 | Model = models.ModelName,
|
---|
199 | Color = models.Color,
|
---|
200 | ModelYear = models.ModelYear.Year,
|
---|
201 | NumSeats = models.NumOfSeats,
|
---|
202 | NumOfDoors = models.NumOfDoors,
|
---|
203 | Fuel = models.Fuel,
|
---|
204 | Transmission = models.Transmission,
|
---|
205 | FuelEfficiency = vehicles.FuelEfficiency,
|
---|
206 | DailyRentalPrice = (double)vehicles.DailyRentalPrice,
|
---|
207 | City = locations.City,
|
---|
208 | IsAvailable = registrations.IsAvailable,
|
---|
209 | ImgUrl = models.ImgUrl,
|
---|
210 | CompanyName = companies.CompanyName
|
---|
211 | }
|
---|
212 | ).Where(x => x.Brand == data.Brand.Trim() && x.IsAvailable)
|
---|
213 | .ToListAsync();
|
---|
214 |
|
---|
215 | return query;
|
---|
216 | }
|
---|
217 | catch (Exception e)
|
---|
218 | {
|
---|
219 | _logger.LogError(e.Message);
|
---|
220 | throw;
|
---|
221 | }
|
---|
222 | }
|
---|
223 | }
|
---|
224 | }
|
---|