Newer
Older
namespace FlightMicroservice.Services
{
public class FlightService : IFlightService
{
private readonly ApplicationDbContext dbContext;
public FlightService(ApplicationDbContext dbContext)
{
this.dbContext = dbContext;
}
public Flight? GetFlight(int flightId)
{
Flight? flight = dbContext.Flights.SingleOrDefault(flight => flight.Id == flightId);
return flight;
}
public List<Flight> GetFlights(int? airlineId, string? origin, string? destination, DateTime? departureTime, DateTime? arrivalTime)
{
IQueryable<Flight> query = dbContext.Flights.AsQueryable();
if(airlineId != null)
query = query.Where(flight => flight.AirlineId == airlineId);
if (!string.IsNullOrWhiteSpace(origin))
query = query.Where(flight => flight.Origin == origin);
if (!string.IsNullOrWhiteSpace(destination))
query = query.Where(flight => flight.Destination == destination);
if (departureTime.HasValue)
query = query.Where(flight => flight.DepartureTime.Date == departureTime.Value.Date);
if (arrivalTime.HasValue)
query = query.Where(flight => flight.ArrivalTime.Date == arrivalTime.Value.Date);
return query.ToList();
}
public Flight CreateFlight(
string origin,
string destination,
DateTime departureTime,
DateTime arrivalTime,
int economyCapacity,
int businessCapacity,
decimal economyPrice,
decimal businessPrice)
{
Flight flight = new Flight(airlineId, origin, destination, departureTime, arrivalTime, economyCapacity, businessCapacity, economyPrice, businessPrice);
InitializeSeatsForFlight(flight);
dbContext.Flights.Add(flight);
dbContext.SaveChanges();
return flight;
}
public bool RemoveFlight(int flightId)
{
Flight? flight = dbContext.Flights.SingleOrDefault(flight => flight.Id == flightId);
if (flight == null)
return false;
dbContext.Flights.Remove(flight);
dbContext.SaveChanges();
return true;
}
public List<Seat> GetSeatsByFlightId(int flightId)
{
return dbContext.Seats
.Where(seat => seat.FlightId == flightId)
.ToList();
}
83
84
85
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
private void InitializeSeatsForFlight(Flight flight)
{
int businessRows = flight.BusinessCapacity / Flight.BUSINESS_SEATS_PER_ROW;
int economyRows = flight.EconomyCapacity / Flight.ECONOMY_SEATS_PER_ROW;
// Initialize Business class seats
for (int row = 1; row <= businessRows; row++)
{
for (char seat = 'A'; seat < 'A' + Flight.BUSINESS_SEATS_PER_ROW; seat++)
{
flight.Seats.Add(new Seat
{
ClassType = ClassType.BUSINESS,
SeatNumber = $"{row}{seat}",
IsAvailable = true
});
}
}
// Initialize Economy class seats
int startingEconomyRow = businessRows + 1; // Economy rows start after the last Business row
for (int row = startingEconomyRow; row < startingEconomyRow + economyRows; row++)
{
for (char seat = 'A'; seat < 'A' + Flight.ECONOMY_SEATS_PER_ROW; seat++)
{
flight.Seats.Add(new Seat
{
ClassType = ClassType.ECONOMY,
SeatNumber = $"{row}{seat}",
IsAvailable = true
});
}
}
}
}
}