private void ConvertStatesToAbbreviations(UserLaneData userLaneData) { if (userLaneData != null) { userLaneData.OrigState = ConvertStateToAbbreviation(userLaneData.OrigState); userLaneData.DestState = ConvertStateToAbbreviation(userLaneData.DestState); } }
public async Task <UserLaneData> CreateLaneAsync(UserLaneData lane, Guid identUserId, string username) { _securityService.GuardAction(SecurityActions.Loadshop_Ui_Profile_Favorites_Add_Edit); ConvertStatesToAbbreviations(lane); ValidateUserLane(lane); var dbLane = await _context.UserLanes.SingleOrDefaultAsync(x => x.UserLaneId.ToString() == lane.UserLaneId); if (dbLane != null) { throw new Exception($"User Lane already exists"); } if (lane.EquipmentIds?.Count() == 0) { throw new Exception("Must have at least on equipment type selected"); } var user = await _context.Users.SingleOrDefaultAsync(x => x.IdentUserId == identUserId); if (user == null) { throw new Exception("Invalid userId"); } lane.UserLaneId = Guid.NewGuid().ToString(); lane.UserId = user.UserId.ToString(); dbLane = _mapper.Map <UserLaneEntity>(lane); foreach (var laneNotification in lane.UserLaneMessageTypes) { if (laneNotification.Selected) { var dbLaneNotification = _mapper.Map <UserLaneMessageTypeEntity>(laneNotification); dbLane.UserLaneMessageTypes.Add(dbLaneNotification); } } if (dbLane.UserLaneEquipments == null) { dbLane.UserLaneEquipments = new List <UserLaneEquipmentEntity>(); } foreach (var equipment in lane.EquipmentIds) { var e = new UserLaneEquipmentEntity() { EquipmentId = equipment }; dbLane.UserLaneEquipments.Add(e); } _context.UserLanes.Add(dbLane); await _context.SaveChangesAsync(username); return(await GetSavedLaneAsync(dbLane.UserLaneId)); }
public async Task <IActionResult> Post([FromBody] UserLaneData lane) { try { return(Success(await _userLaneService.CreateLaneAsync(lane, _userContext.UserId.Value, _userContext.UserName))); } catch (UnauthorizedAccessException ex) { return(Forbidden <ResponseMessage <List <UserLaneData> > >(ex)); } catch (ValidationException valEx) { return(Error <UserLaneData>(valEx)); } catch (Exception ex) { throw ex; } }
private void ValidateUserLane(UserLaneData userLaneData) { var errors = new StringBuilder(); var validOrigin = ValidatePoint(userLaneData.OrigCity, userLaneData.OrigState, userLaneData.OrigCountry, userLaneData.OrigLat, userLaneData.OrigLng); var validDest = ValidatePoint(userLaneData.DestCity, userLaneData.DestState, userLaneData.DestCountry, userLaneData.DestLat, userLaneData.DestLng); if (!validOrigin && !validDest) { errors.AppendLine("Must have an Origin or Destination"); } if (userLaneData.UserLaneMessageTypes == null) { errors.AppendLine("Missing notification types"); } if (errors.Length > 0) { throw new ValidationException(errors.ToString()); } }
public async Task <UserLaneData> UpdateLaneAsync(UserLaneData lane, Guid identUserId, string username) { _securityService.GuardAction(SecurityActions.Loadshop_Ui_Profile_Favorites_Add_Edit); ConvertStatesToAbbreviations(lane); ValidateUserLane(lane); var dbLane = await _context.UserLanes.SingleOrDefaultAsync(x => x.UserLaneId.ToString() == lane.UserLaneId); if (dbLane == null) { throw new Exception($"User Lane not found"); } if (lane.EquipmentIds?.Count() == 0) { throw new Exception("Must have at least on equipment type selected"); } var user = await _context.Users.SingleOrDefaultAsync(x => x.IdentUserId == identUserId); if (user == null) { throw new Exception("Invalid userId"); } lane.UserId = user.UserId.ToString(); dbLane = _mapper.Map(lane, dbLane); if (lane.OrigLat.HasValue && lane.OrigLng.HasValue && !dbLane.OrigDH.HasValue) { dbLane.OrigDH = DefaultDHMiles; } if (lane.DestLat.HasValue && lane.DestLng.HasValue && !dbLane.DestDH.HasValue) { dbLane.DestDH = DefaultDHMiles; } foreach (var laneNotification in lane.UserLaneMessageTypes) { var dbLaneNotification = await _context.UserLaneMessageTypes .SingleOrDefaultAsync(x => x.UserLaneId == dbLane.UserLaneId && x.MessageTypeId == laneNotification.MessageTypeId); if (laneNotification.Selected && dbLaneNotification == null) { dbLaneNotification = _mapper.Map <UserLaneMessageTypeEntity>(laneNotification); dbLaneNotification.UserLaneId = dbLane.UserLaneId; _context.UserLaneMessageTypes.Add(dbLaneNotification); } if (!laneNotification.Selected && dbLaneNotification != null) { _context.UserLaneMessageTypes.Remove(dbLaneNotification); } } foreach (var equipmentId in lane.EquipmentIds) { var dbLaneEquipment = await _context.UserLaneEquipments .SingleOrDefaultAsync(x => x.UserLaneId == dbLane.UserLaneId && x.EquipmentId == equipmentId); if (dbLaneEquipment == null) { dbLaneEquipment = new UserLaneEquipmentEntity() { EquipmentId = equipmentId, UserLaneId = dbLane.UserLaneId }; _context.UserLaneEquipments.Add(dbLaneEquipment); } } var dbLaneEquipments = await _context.UserLaneEquipments.Where(x => x.UserLaneId == dbLane.UserLaneId).ToListAsync(); foreach (var dbLaneEquipment in dbLaneEquipments) { if (!lane.EquipmentIds.Contains(dbLaneEquipment.EquipmentId)) { _context.UserLaneEquipments.Remove(dbLaneEquipment); } } await _context.SaveChangesAsync(username); return(await GetSavedLaneAsync(dbLane.UserLaneId)); }