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 <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)); }