using skydiveLogs_api.Domain; using skydiveLogs_api.DomainBusiness.Interfaces; using skydiveLogs_api.DomainService.Repositories; using System.Collections.Generic; namespace skydiveLogs_api.DomainBusiness { public class JumpService : IJumpService { #region Public Constructors public JumpService(IJumpTypeService jumpTypeService, IAircraftService aircraftService, IDropZoneService dropZoneService, IGearService gearService, IJumpRepository jumpRepository, IIdentityService identityService) { _jumpTypeService = jumpTypeService; _aircraftService = aircraftService; _dropZoneService = dropZoneService; _gearService = gearService; _jumpRepository = jumpRepository; _identityService = identityService; } #endregion Public Constructors #region Public Methods /// /// Adds a new jump to the system. /// /// The ID of the aircraft to use for this jump. /// The ID of the drop zone for this jump. /// The ID of the jump type for this jump. /// The ID of the gear for this jump. /// Jump entity containing the new jump data. public void AddNewJump(int aircraftId, int dzId, int jumpTypeId, int gearId, Jump jump) { var selectedGear = _gearService.GetGearById(gearId); var selectedJumpType = _jumpTypeService.GetJumpTypeById(jumpTypeId); var selectedAircraft = _aircraftService.GetAircraftById(aircraftId); var selectedDropZone = _dropZoneService.GetDzById(dzId); jump.Aircraft = selectedAircraft; jump.JumpType = selectedJumpType; jump.DropZone = selectedDropZone; jump.Gear = selectedGear; jump.User = _identityService.ConnectedUser; _jumpRepository.Add(jump); } /// /// Deletes a jump by its ID. /// /// The jump ID to delete. public void DeleteJumpById(int id) { _jumpRepository.DeleteById(id); } /// /// Retrieves all jumps for the current user. /// /// A collection of Jump entities containing all jumps. public IEnumerable GetAllJumps() { return _jumpRepository.GetAll(_identityService.ConnectedUser); } /// /// Retrieves a jump by its ID. /// /// The jump ID to retrieve. /// A Jump entity containing the jump details. public Jump GetJumpById(int id) { return _jumpRepository.GetById(id); } /// /// Retrieves the total count of jumps for the current user. /// /// The total number of jumps. public int GetJumpCount() { return _jumpRepository.GetCount(_identityService.ConnectedUser); } /// /// Retrieves a range of jumps for the current user with pagination. /// /// The starting index for pagination. /// The ending index for pagination. /// A collection of Jump entities containing the requested range. public IEnumerable GetJumpsByIndexes(int beginIndex, int endIndex) { return _jumpRepository.GetBetweenIndex(_identityService.ConnectedUser, beginIndex, endIndex); } /// /// Updates an existing jump. /// /// The jump ID to update. /// Jump entity containing the updated jump data. public void UpdateJump(int id, Jump updatedJump) { var myJump = GetJumpById(id); myJump.IsSpecial = updatedJump.IsSpecial; myJump.WithCutaway = updatedJump.WithCutaway; myJump.Notes = updatedJump.Notes; myJump.Equipment = updatedJump.Equipment; _jumpRepository.Update(myJump); } #endregion Public Methods #region Private Fields private readonly IAircraftService _aircraftService; private readonly IDropZoneService _dropZoneService; private readonly IGearService _gearService; private readonly IIdentityService _identityService; private readonly IJumpRepository _jumpRepository; private readonly IJumpTypeService _jumpTypeService; #endregion Private Fields } }