using skydiveLogs_api.Domain; using skydiveLogs_api.DomainBusiness.Interfaces; using skydiveLogs_api.DomainService.Repositories; using System; using System.Collections.Generic; using System.Linq; namespace skydiveLogs_api.DomainBusiness { public class AircraftService : IAircraftService { #region Public Constructors /// /// Initializes a new instance of the class. /// /// The aircraft repository for data access. /// The cache service for caching operations. public AircraftService(IAircraftRepository aircraftRepository, ICacheService cacheService) { _aircraftRepository = aircraftRepository; _cacheService = cacheService; } #endregion Public Constructors #region Public Methods /// /// Adds a new aircraft to the system. /// /// The Aircraft entity containing the data for the new aircraft. public void AddNewAircraft(Aircraft newAircraft) { _aircraftRepository.Add(newAircraft); _cacheService.Delete(CacheType.Aircraft); } /// /// Deletes an aircraft by its ID. /// /// The aircraft ID to delete. public void DeleteAircraftById(int id) { throw new NotImplementedException(); } /// /// Retrieves an aircraft by its ID. /// /// The aircraft ID to retrieve. /// An Aircraft entity containing the aircraft details. public Aircraft GetAircraftById(int id) { var allAircrafts = GetAllAircrafts(); return allAircrafts.Single(g => g.Id == id); } /// /// Retrieves all aircrafts. /// /// A collection of Aircraft entities containing all aircraft data. public IEnumerable GetAllAircrafts() { if (!_cacheService.Contains(CacheType.Aircraft)) _cacheService.Put(CacheType.Aircraft, _aircraftRepository.GetAll(), 5 * 60 * 1000); return _cacheService.Get>(CacheType.Aircraft); } /// /// Updates an existing aircraft. /// /// The aircraft ID to update. /// Aircraft entity containing the updated aircraft data. /// Whether to reset the cache after update. /// True if the update was successful, false otherwise. public bool UpdateAircraft(int id, Aircraft aircraft, bool resetCache = true) { aircraft.Id = id; var result = _aircraftRepository.Update(aircraft); if (resetCache && result) _cacheService.Delete(CacheType.JumpType); return result; } #endregion Public Methods #region Private Fields private readonly IAircraftRepository _aircraftRepository; private readonly ICacheService _cacheService; #endregion Private Fields } }