Skip to content

Commit 87609da

Browse files
authored
Merge pull request #28 from DiyorMarket/initial-data-setup
Initial data setup
2 parents 5f10200 + 93dc504 commit 87609da

File tree

142 files changed

+2300
-7667
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

142 files changed

+2300
-7667
lines changed

CheckDrive.Api/CheckDrive.Api/CheckDrive.Api.csproj

+1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
<ItemGroup>
1010
<PackageReference Include="Bogus" Version="35.6.1" />
11+
<PackageReference Include="CsvHelper" Version="33.0.1" />
1112
<PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="8.0.8" />
1213
<PackageReference Include="Microsoft.AspNetCore.SignalR.Client" Version="8.0.8" />
1314
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="8.0.8" />

CheckDrive.Api/CheckDrive.Api/Controllers/CarsController.cs

+34-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,12 @@
11
using CheckDrive.Application.DTOs.Car;
22
using CheckDrive.Application.Interfaces;
3+
using CheckDrive.Application.Mappings.CSV;
34
using CheckDrive.Application.QueryParameters;
5+
using CheckDrive.Domain.Entities;
6+
using CsvHelper;
7+
using CsvHelper.Configuration;
48
using Microsoft.AspNetCore.Mvc;
9+
using System.Globalization;
510

611
namespace CheckDrive.Api.Controllers;
712

@@ -17,7 +22,7 @@ public CarsController(ICarService carService)
1722
}
1823

1924
[HttpGet]
20-
public async Task<ActionResult<List<CarDto>>> GetAllAsync(CarQueryParameters queryParameters)
25+
public async Task<ActionResult<List<CarDto>>> GetAllAsync([FromQuery] CarQueryParameters queryParameters)
2126
{
2227
var cars = await _carService.GetAllAsync(queryParameters);
2328

@@ -40,6 +45,34 @@ public async Task<ActionResult<CarDto>> CreateAsync(CreateCarDto car)
4045
return CreatedAtAction("GetCarByIdAsync", createdCar, new { id = createdCar.Id });
4146
}
4247

48+
[HttpPost("upload")]
49+
public IActionResult Upload(IFormFile file)
50+
{
51+
if (file == null || file.Length == 0)
52+
return BadRequest("File not provided or empty");
53+
54+
if (!file.FileName.EndsWith(".csv"))
55+
return BadRequest("Invalid file format. Please upload a CSV file.");
56+
57+
using var reader = new StreamReader(file.OpenReadStream());
58+
using var csv = new CsvReader(reader, new CsvConfiguration(CultureInfo.InvariantCulture)
59+
{
60+
HasHeaderRecord = false,
61+
});
62+
csv.Context.RegisterClassMap<CarCsvMappings>();
63+
64+
try
65+
{
66+
var records = csv.GetRecords<Car>().ToList();
67+
68+
return Ok(new { Message = "CSV processed successfully", RecordCount = records.Count });
69+
}
70+
catch (Exception ex)
71+
{
72+
return BadRequest($"Error processing CSV: {ex.Message}");
73+
}
74+
}
75+
4376
[HttpPut("{id:int}")]
4477
public async Task<ActionResult<CarDto>> UpdateAsync(int id, UpdateCarDto car)
4578
{

CheckDrive.Api/CheckDrive.Api/Controllers/DriversController.cs

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using CheckDrive.Application.DTOs.Driver;
22
using CheckDrive.Application.Interfaces;
3+
using CheckDrive.Application.QueryParameters;
34
using Microsoft.AspNetCore.Mvc;
45

56
namespace CheckDrive.Api.Controllers;
@@ -16,9 +17,9 @@ public DriversController(IDriverService driverService)
1617
}
1718

1819
[HttpGet]
19-
public async Task<ActionResult<List<DriverDto>>> GetAvailableDriversAsync()
20+
public async Task<ActionResult<List<DriverDto>>> GetAvailableDriversAsync([FromQuery] DriverQueryParameters queryParameters)
2021
{
21-
var drivers = await _driverService.GetAvailableDriversAsync();
22+
var drivers = await _driverService.GetAsync(queryParameters);
2223

2324
return Ok(drivers);
2425
}

CheckDrive.Api/CheckDrive.Api/Controllers/AccountsController.cs CheckDrive.Api/CheckDrive.Api/Controllers/EmployeesController.cs

+13-13
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,33 @@
11
using CheckDrive.Application.Constants;
2-
using CheckDrive.Application.DTOs.Account;
2+
using CheckDrive.Application.DTOs.Employee;
33
using CheckDrive.Application.Interfaces;
4-
using CheckDrive.Domain.Enums;
4+
using CheckDrive.Application.QueryParameters;
55
using Microsoft.AspNetCore.Authorization;
66
using Microsoft.AspNetCore.Mvc;
77

88
namespace CheckDrive.Api.Controllers;
99

10-
[Route("api/accounts")]
10+
[Route("api/employees")]
1111
[ApiController]
12-
public class AccountsController : ControllerBase
12+
public class EmployeesController : ControllerBase
1313
{
14-
private readonly IAccountService _service;
14+
private readonly IEmployeeService _service;
1515

16-
public AccountsController(IAccountService service)
16+
public EmployeesController(IEmployeeService service)
1717
{
1818
_service = service ?? throw new ArgumentNullException(nameof(service));
1919
}
2020

2121
[HttpGet]
22-
public async Task<ActionResult<List<AccountDto>>> GetAsync(EmployeePosition? position)
22+
public async Task<ActionResult<List<EmployeeDto>>> GetAsync([FromQuery] EmployeeQueryParameters queryParameters)
2323
{
24-
var accounts = await _service.GetAsync(position);
24+
var accounts = await _service.GetAsync(queryParameters);
2525

2626
return Ok(accounts);
2727
}
2828

29-
[HttpGet("{id}", Name = nameof(GetAccountByIdAsync))]
30-
public async Task<ActionResult<AccountDto>> GetAccountByIdAsync(string id)
29+
[HttpGet("{id}", Name = nameof(GetEmployeeByIdAsync))]
30+
public async Task<ActionResult<EmployeeDto>> GetEmployeeByIdAsync(string id)
3131
{
3232
var account = await _service.GetByIdAsync(id);
3333

@@ -36,15 +36,15 @@ public async Task<ActionResult<AccountDto>> GetAccountByIdAsync(string id)
3636

3737
[HttpPost]
3838
[Authorize(Roles = $"{Roles.Manager},{Roles.Administrator}")]
39-
public async Task<ActionResult<AccountDto>> CreateAsync([FromBody] CreateAccountDto account)
39+
public async Task<ActionResult<EmployeeDto>> CreateAsync([FromBody] CreateEmployeeDto account)
4040
{
4141
var createdAccount = await _service.CreateAsync(account);
4242

43-
return CreatedAtAction(nameof(GetAccountByIdAsync), new { id = createdAccount.Id }, createdAccount);
43+
return CreatedAtAction(nameof(GetEmployeeByIdAsync), new { id = createdAccount.Id }, createdAccount);
4444
}
4545

4646
[HttpPut("{id}")]
47-
public async Task<ActionResult<AccountDto>> UpdateAsync([FromRoute] string id, [FromBody] UpdateAccountDto account)
47+
public async Task<ActionResult<EmployeeDto>> UpdateAsync([FromRoute] string id, [FromBody] UpdateEmployeeDto account)
4848
{
4949
if (id != account.Id)
5050
{

CheckDrive.Api/CheckDrive.Api/Controllers/OilMarksController.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ public OilMarksController(IOilMarkService oilMarkService)
1717
}
1818

1919
[HttpGet]
20-
public async Task<ActionResult<List<OilMarkDto>>> GetAsync(OilMarkQueryParameters queryParameters)
20+
public async Task<ActionResult<List<OilMarkDto>>> GetAsync([FromQuery] OilMarkQueryParameters queryParameters)
2121
{
2222
var oilMarks = await _oilMarkService.GetAllAsync(queryParameters);
2323

CheckDrive.Api/CheckDrive.Api/Controllers/Reviews/DispatcherReviewsController.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@ public async Task<ActionResult<DispatcherReviewDto>> CreateAsync(
2020
[FromRoute] int dispatcherId,
2121
[FromBody] CreateDispatcherReviewDto review)
2222
{
23-
if (review.ReviewerId != dispatcherId)
23+
if (review.DispatcherId != dispatcherId)
2424
{
25-
return BadRequest($"Route id: {dispatcherId} does not match with body id: {review.ReviewerId}.");
25+
return BadRequest($"Route id: {dispatcherId} does not match with body id: {review.DispatcherId}.");
2626
}
2727

2828
var createdReview = await _reviewService.CreateAsync(review);

CheckDrive.Api/CheckDrive.Api/Controllers/Reviews/DoctorReviewsController.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@ public async Task<ActionResult<DoctorReviewDto>> CreateReview(
2020
[FromRoute] int doctorId,
2121
[FromBody] CreateDoctorReviewDto review)
2222
{
23-
if (doctorId != review.ReviewerId)
23+
if (doctorId != review.DoctorId)
2424
{
25-
return BadRequest($"Route id: {doctorId} does not match with body id: {review.ReviewerId}.");
25+
return BadRequest($"Route id: {doctorId} does not match with body id: {review.DoctorId}.");
2626
}
2727

2828
var craetedReview = await _reviewService.CreateAsync(review);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
using CheckDrive.Application.DTOs.ManagerReview;
2+
using CheckDrive.Application.Interfaces.Review;
3+
using Microsoft.AspNetCore.Mvc;
4+
5+
namespace CheckDrive.Api.Controllers.Reviews;
6+
7+
[ApiController]
8+
[Route("api/reviews/managers/{managerId:int}")]
9+
public class ManagerReviewsController : ControllerBase
10+
{
11+
private readonly IManagerReviewService _reviewService;
12+
13+
public ManagerReviewsController(IManagerReviewService reviewService)
14+
{
15+
_reviewService = reviewService;
16+
}
17+
18+
[HttpPost]
19+
public async Task<ActionResult<ManagerReviewDto>> CreateReview([FromBody] CreateManagerReviewDto review)
20+
{
21+
var result = await _reviewService.CreateAsync(review);
22+
23+
return Created("", result);
24+
}
25+
}

CheckDrive.Api/CheckDrive.Api/Controllers/Reviews/MechanicAcceptancesController.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@ public async Task<ActionResult<MechanicAcceptanceReviewDto>> CreateAcceptanceRev
2020
[FromRoute] int mechanicId,
2121
[FromBody] CreateMechanicAcceptanceReviewDto review)
2222
{
23-
if (review.ReviewerId != mechanicId)
23+
if (review.MechanicId != mechanicId)
2424
{
25-
return BadRequest($"Route id: {mechanicId} does not match with body id: {review.ReviewerId}.");
25+
return BadRequest($"Route id: {mechanicId} does not match with body id: {review.MechanicId}.");
2626
}
2727

2828
var createdReview = await _reviewService.CreateAsync(review);

CheckDrive.Api/CheckDrive.Api/Controllers/Reviews/MechanicHandoversController.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@ public async Task<ActionResult<MechanicHandoverReviewDto>> CreateHandoverReviewA
2020
[FromRoute] int mechanicId,
2121
[FromBody] CreateMechanicHandoverReviewDto review)
2222
{
23-
if (review.ReviewerId != mechanicId)
23+
if (review.MechanicId != mechanicId)
2424
{
25-
return BadRequest($"Route id: {mechanicId} does not match with body id: {review.ReviewerId}.");
25+
return BadRequest($"Route id: {mechanicId} does not match with body id: {review.MechanicId}.");
2626
}
2727

2828
var createdReview = await _reviewService.CreateAsync(review);

CheckDrive.Api/CheckDrive.Api/Controllers/Reviews/OperatorReviewsController.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@ public async Task<ActionResult<OperatorReviewDto>> CreateAsync(
2020
[FromRoute] int operatorId,
2121
[FromBody] CreateOperatorReviewDto review)
2222
{
23-
if (review.ReviewerId != operatorId)
23+
if (review.OperatorId != operatorId)
2424
{
25-
return BadRequest($"Route id: {operatorId} does not match with body id: {review.ReviewerId}.");
25+
return BadRequest($"Route id: {operatorId} does not match with body id: {review.OperatorId}.");
2626
}
2727

2828
var createdReview = await _reviewService.CreateAsync(review);

CheckDrive.Api/CheckDrive.Api/Controllers/Reviews/ReviewHistoriesController.cs

+10-1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
using CheckDrive.Application.DTOs.OperatorReview;
55
using CheckDrive.Application.DTOs.Review;
66
using CheckDrive.Application.Interfaces.Review;
7+
using CheckDrive.Application.DTOs.DispatcherReview;
78

89
namespace CheckDrive.Api.Controllers.Reviews;
910

@@ -43,10 +44,18 @@ public async Task<ActionResult<List<MechanicReviewHistoryDto>>> GetMechanicHisto
4344
}
4445

4546
[HttpGet("operators/{operatorId:int}")]
46-
public async Task<ActionResult<List<OperatorReviewDto>>> GetOperatorHistoriesAsync(int operatorId)
47+
public async Task<ActionResult<List<OperatorReviewHistory>>> GetOperatorHistoriesAsync(int operatorId)
4748
{
4849
var reviews = await _historyService.GetOperatorHistoriesAsync(operatorId);
4950

5051
return Ok(reviews);
5152
}
53+
54+
[HttpGet("dispatchers/{dispatcherId:int}")]
55+
public async Task<ActionResult<List<DispatcherReviewHistoryDto>>> GetDispatcherHistoriesAsync(int dispatcherId)
56+
{
57+
var reviews = await _historyService.GetDispatcherHistoriesAsync(dispatcherId);
58+
59+
return Ok(reviews);
60+
}
5261
}

CheckDrive.Api/CheckDrive.Api/Extensions/DependencyInjection.cs

+2
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using CheckDrive.Infrastructure.Configurations;
33
using CheckDrive.Infrastructure.Extensions;
44
using CheckDrive.TestDataCreator.Configurations;
5+
using CheckDrive.TestDataCreator.Extensions;
56
using Microsoft.AspNetCore.Authentication.JwtBearer;
67
using Microsoft.AspNetCore.StaticFiles;
78
using Microsoft.IdentityModel.Tokens;
@@ -18,6 +19,7 @@ public static IServiceCollection ConfigureServices(this IServiceCollection servi
1819
{
1920
services.RegisterApplication();
2021
services.RegisterInfrastructure(configuration);
22+
services.RegisterTestDataCreator();
2123

2224
services.AddSingleton<FileExtensionContentTypeProvider>();
2325
services.AddSignalR(options =>

CheckDrive.Api/CheckDrive.Api/Extensions/StartupExtensions.cs

+6-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
using CheckDrive.Api.Helpers;
2-
using CheckDrive.Api.Middlewares;
1+
using CheckDrive.Api.Middlewares;
32
using CheckDrive.Domain.Interfaces;
43
using CheckDrive.TestDataCreator.Configurations;
4+
using CheckDrive.TestDataCreator.Interfaces;
55
using Microsoft.AspNetCore.Identity;
66
using Microsoft.Extensions.Options;
77

@@ -23,7 +23,10 @@ public static IApplicationBuilder UseDatabaseSeeder(this WebApplication app)
2323
var userManager = scope.ServiceProvider.GetRequiredService<UserManager<IdentityUser>>();
2424
var options = scope.ServiceProvider.GetRequiredService<IOptions<DataSeedOptions>>();
2525

26-
DatabaseSeeder.SeedDatabase(context, userManager, options.Value);
26+
var seederFactory = scope.ServiceProvider.GetRequiredService<IDatabaseSeederFactory>();
27+
var seeder = seederFactory.CreateSeeder(app.Environment.EnvironmentName);
28+
29+
seeder.SeedDatabase(context, userManager, options.Value);
2730

2831
return app;
2932
}

0 commit comments

Comments
 (0)