1
- using CheckDrive . ApiContracts ;
2
- using CheckDrive . ApiContracts . Car ;
1
+ using CheckDrive . Web . Mappings ;
2
+ using CheckDrive . Web . Requests . Cars ;
3
3
using CheckDrive . Web . Stores . Cars ;
4
+ using CheckDrive . Web . Stores . OilMarks ;
4
5
using Microsoft . AspNetCore . Mvc ;
6
+ using Microsoft . AspNetCore . Mvc . Rendering ;
5
7
6
8
namespace CheckDrive . Web . Controllers ;
7
9
8
- public class CarsController : Controller
10
+ public class CarsController ( ICarStore carStore , IOilMarkStore oilMarkStore ) : Controller
9
11
{
10
- private readonly ICarDataStore _carDataStore ;
11
-
12
- public CarsController ( ICarDataStore carDataStore )
12
+ public async Task < IActionResult > Index ( )
13
13
{
14
- _carDataStore = carDataStore ;
15
- }
16
-
17
- public async Task < IActionResult > Index ( string ? searchString , int ? pageNumber )
18
- {
19
- var cars = await _carDataStore . GetCarsAsync ( searchString , pageNumber ) ;
20
-
21
- ViewBag . SearchString = searchString ;
14
+ var cars = await carStore . GetAsync ( ) ;
22
15
23
- ViewBag . PageSize = cars . PageSize ;
24
- ViewBag . PageCount = cars . TotalPages ;
25
- ViewBag . TotalCount = cars . TotalCount ;
26
- ViewBag . CurrentPage = cars . PageNumber ;
27
- ViewBag . HasPreviousPage = cars . HasPreviousPage ;
28
- ViewBag . HasNextPage = cars . HasNextPage ;
29
-
30
- var _cars = cars . Data . Select ( c => new
31
- {
32
- c . Id ,
33
- c . Model ,
34
- c . Number ,
35
- c . Mileage ,
36
- c . Color ,
37
- c . RemainingFuel ,
38
- c . MeduimFuelConsumption ,
39
- c . FuelTankCapacity ,
40
- c . ManufacturedYear ,
41
- Status = ( ( CarStatusDto ) c . CarStatus ) switch
42
- {
43
- CarStatusDto . Free => "Bo'sh" ,
44
- CarStatusDto . Busy => "Band" ,
45
- CarStatusDto . Limited => "Limit tugagan" ,
46
- _ => "No`malum holat"
47
- }
48
- } ) . ToList ( ) ;
49
-
50
- ViewBag . Cars = _cars ;
51
- return View ( ) ;
52
- }
53
-
54
- public async Task < IActionResult > CarHistoryIndex ( string ? searchString , int ? pageNumber , int ? year , int ? month )
55
- {
56
- var cars = await _carDataStore . GetCarsHistoryAsync ( searchString , pageNumber , year , month ) ;
57
-
58
- ViewBag . SearchString = searchString ;
59
- ViewBag . Cars = cars . Data ;
60
-
61
- ViewBag . PageSize = cars . PageSize ;
62
- ViewBag . PageCount = cars . TotalPages ;
63
- ViewBag . TotalCount = cars . TotalCount ;
64
- ViewBag . CurrentPage = cars . PageNumber ;
65
- ViewBag . HasPreviousPage = cars . HasPreviousPage ;
66
- ViewBag . HasNextPage = cars . HasNextPage ;
16
+ ViewBag . Cars = cars ;
67
17
return View ( ) ;
68
18
}
69
19
70
20
public async Task < IActionResult > Details ( int id )
71
21
{
72
- var car = await _carDataStore . GetCarAsync ( id ) ;
73
- if ( car == null )
74
- {
75
- return NotFound ( ) ;
76
- }
22
+ var car = await carStore . GetByIdAsync ( id ) ;
23
+
77
24
return View ( car ) ;
78
25
}
79
26
80
27
public async Task < IActionResult > DetailsForMechanicAcceptance ( int id )
81
28
{
82
- var car = await _carDataStore . GetCarAsync ( id ) ;
29
+ var car = await carStore . GetByIdAsync ( id ) ;
83
30
if ( car == null )
84
31
{
85
32
return NotFound ( ) ;
@@ -89,56 +36,63 @@ public async Task<IActionResult> DetailsForMechanicAcceptance(int id)
89
36
90
37
public async Task < IActionResult > DetailsForMechanicHandover ( int id )
91
38
{
92
- var car = await _carDataStore . GetCarAsync ( id ) ;
39
+ var car = await carStore . GetByIdAsync ( id ) ;
93
40
if ( car == null )
94
41
{
95
42
return NotFound ( ) ;
96
43
}
97
44
return PartialView ( "_CarDetailsForMechanicHandover" , car ) ;
98
45
}
99
46
100
- public IActionResult Create ( )
47
+ public async Task < IActionResult > Create ( )
101
48
{
49
+ var oilMarks = await GetOilMarkAsync ( ) ;
50
+ ViewBag . OilMarks = oilMarks ;
51
+
102
52
return View ( ) ;
103
53
}
104
54
105
55
[ HttpPost ]
106
56
[ ValidateAntiForgeryToken ]
107
- public async Task < IActionResult > Create ( [ Bind ( "Model,Color,Number,RemainingFuel,Mileage, MeduimFuelConsumption,FuelTankCapacity,ManufacturedYear, OneYearMediumDistance" ) ] CarForCreateDto car )
57
+ public async Task < IActionResult > Create ( [ FromForm ] CreateCarRequest request )
108
58
{
109
59
if ( ModelState . IsValid )
110
60
{
111
- var newCar = await _carDataStore . CreateCarAsync ( car ) ;
61
+ var newCar = await carStore . CreateAsync ( request ) ;
112
62
return RedirectToAction ( nameof ( Index ) ) ;
113
63
}
114
- return View ( car ) ;
64
+ return BadRequest ( ModelState ) ;
115
65
}
116
66
117
67
public async Task < IActionResult > Edit ( int id )
118
68
{
119
- var car = await _carDataStore . GetCarAsync ( id ) ;
120
- if ( car == null )
121
- {
122
- return NotFound ( ) ;
123
- }
124
- return View ( car ) ;
69
+ var car = await carStore . GetByIdAsync ( id ) ;
70
+ var oilMarks = await GetOilMarkAsync ( ) ;
71
+
72
+ ViewBag . OilMarks = oilMarks ;
73
+ var carRequest = car . ToUpdateViewModel ( ) ;
74
+
75
+ return View ( carRequest ) ;
125
76
}
126
77
127
78
[ HttpPost ]
128
79
[ ValidateAntiForgeryToken ]
129
- public async Task < IActionResult > Edit ( int id , [ Bind ( "Id,Model,Color,Number,RemainingFuel,Mileage, MeduimFuelConsumption,FuelTankCapacity,ManufacturedYear, OneYearMediumDistance" ) ] CarForUpdateDto car )
80
+ public async Task < IActionResult > Edit ( [ FromForm ] UpdateCarRequest request )
130
81
{
131
- if ( ModelState . IsValid )
82
+ try
132
83
{
133
- var newCar = await _carDataStore . UpdateCarAsync ( id , car ) ;
84
+ await carStore . UpdateAsync ( request ) ;
134
85
return RedirectToAction ( nameof ( Index ) ) ;
135
86
}
136
- return View ( car ) ;
87
+ catch ( Exception ex )
88
+ {
89
+ return BadRequest ( ) ;
90
+ }
137
91
}
138
92
139
93
public async Task < IActionResult > Delete ( int id )
140
94
{
141
- var car = await _carDataStore . GetCarAsync ( id ) ;
95
+ var car = await carStore . GetByIdAsync ( id ) ;
142
96
if ( car == null )
143
97
{
144
98
return NotFound ( ) ;
@@ -150,7 +104,20 @@ public async Task<IActionResult> Delete(int id)
150
104
[ ValidateAntiForgeryToken ]
151
105
public async Task < IActionResult > DeleteConfirmed ( int id )
152
106
{
153
- await _carDataStore . DeleteCarAsync ( id ) ;
107
+ await carStore . DeleteAsync ( id ) ;
154
108
return RedirectToAction ( nameof ( Index ) ) ;
155
109
}
156
- }
110
+
111
+ private async Task < List < SelectListItem > > GetOilMarkAsync ( )
112
+ {
113
+ var oilMarks = await oilMarkStore . GetAsync ( ) ;
114
+
115
+ return oilMarks
116
+ . Select ( e => new SelectListItem ( )
117
+ {
118
+ Value = e . Id . ToString ( ) ,
119
+ Text = e . Name . ToString ( )
120
+ } )
121
+ . ToList ( ) ;
122
+ }
123
+ }
0 commit comments