feat: implement missions and vehicles management with CRUD operations

Added new project structure for Azaion.Missions, including the MissionsController and VehiclesController for handling mission and vehicle management. Implemented DTOs for mission and vehicle creation and updates, along with service classes for business logic. Introduced database entities for Mission and Vehicle, and established relationships for data handling. Configured project dependencies and set up initial project properties.
This commit is contained in:
Oleksandr Bezdieniezhnykh
2026-05-15 04:35:40 +03:00
parent 78dea8ebab
commit 4f226e91d5
22 changed files with 0 additions and 58 deletions
+102
View File
@@ -0,0 +1,102 @@
using Azaion.Flights.Database;
using Azaion.Flights.Database.Entities;
using Azaion.Flights.DTOs;
namespace Azaion.Flights.Services;
public class AircraftService(AppDataConnection db)
{
public async Task<Aircraft> CreateAircraft(CreateAircraftRequest request)
{
if (request.IsDefault)
await db.Aircrafts.Where(a => a.IsDefault).Set(a => a.IsDefault, false).UpdateAsync();
var aircraft = new Aircraft
{
Id = Guid.NewGuid(),
Type = request.Type,
Model = request.Model,
Name = request.Name,
FuelType = request.FuelType,
BatteryCapacity = request.BatteryCapacity,
EngineConsumption = request.EngineConsumption,
EngineConsumptionIdle = request.EngineConsumptionIdle,
IsDefault = request.IsDefault
};
await db.InsertAsync(aircraft);
return aircraft;
}
public async Task<Aircraft> UpdateAircraft(Guid id, UpdateAircraftRequest request)
{
var aircraft = await db.Aircrafts.FirstOrDefaultAsync(a => a.Id == id)
?? throw new KeyNotFoundException($"Aircraft {id} not found");
if (request.Type.HasValue)
aircraft.Type = request.Type.Value;
if (request.Model != null)
aircraft.Model = request.Model;
if (request.Name != null)
aircraft.Name = request.Name;
if (request.FuelType.HasValue)
aircraft.FuelType = request.FuelType.Value;
if (request.BatteryCapacity.HasValue)
aircraft.BatteryCapacity = request.BatteryCapacity.Value;
if (request.EngineConsumption.HasValue)
aircraft.EngineConsumption = request.EngineConsumption.Value;
if (request.EngineConsumptionIdle.HasValue)
aircraft.EngineConsumptionIdle = request.EngineConsumptionIdle.Value;
if (request.IsDefault.HasValue)
{
if (request.IsDefault.Value)
await db.Aircrafts.Where(a => a.IsDefault).Set(a => a.IsDefault, false).UpdateAsync();
aircraft.IsDefault = request.IsDefault.Value;
}
await db.UpdateAsync(aircraft);
return aircraft;
}
public async Task<Aircraft> GetAircraft(Guid id)
{
var aircraft = await db.Aircrafts.FirstOrDefaultAsync(a => a.Id == id)
?? throw new KeyNotFoundException($"Aircraft {id} not found");
return aircraft;
}
public async Task<List<Aircraft>> GetAircrafts(GetAircraftsQuery query)
{
var q = db.Aircrafts.AsQueryable();
if (!string.IsNullOrEmpty(query.Name))
q = q.Where(a => a.Name.ToLower().Contains(query.Name.ToLower()));
if (query.IsDefault.HasValue)
q = q.Where(a => a.IsDefault == query.IsDefault.Value);
return await q.OrderBy(a => a.Name).ToListAsync();
}
public async Task DeleteAircraft(Guid id)
{
var hasFlights = await db.Flights.AnyAsync(f => f.AircraftId == id);
if (hasFlights)
throw new InvalidOperationException($"Aircraft {id} is referenced by flights");
var aircraft = await db.Aircrafts.FirstOrDefaultAsync(a => a.Id == id)
?? throw new KeyNotFoundException($"Aircraft {id} not found");
await db.Aircrafts.DeleteAsync(a => a.Id == id);
}
public async Task SetDefault(Guid id, SetDefaultRequest request)
{
var aircraft = await db.Aircrafts.FirstOrDefaultAsync(a => a.Id == id)
?? throw new KeyNotFoundException($"Aircraft {id} not found");
if (request.IsDefault)
await db.Aircrafts.Where(a => a.IsDefault).Set(a => a.IsDefault, false).UpdateAsync();
aircraft.IsDefault = request.IsDefault;
await db.UpdateAsync(aircraft);
}
}