public ActionResult <EsiCharacterDto> UpdateEsiCharacter(string mainToken, EsiCharacterDto dto, int sigId) { var res = _characterService.UpdateEsiCharacter(mainToken, dto, sigId); if (res == null) { return(NotFound(res)); } return(Ok(_mapper.Map <EsiCharacterDto>(res))); }
public EsiCharacter UpdateEsiCharacter(string mainToken, EsiCharacterDto dto, int sigId) { var esi = _context.EsiCharacters.FirstOrDefault(x => x.Id == dto.Id && x.MainCharacter.AccessToken == mainToken); if (esi == null) { return(null); } if (esi.CurrentSystemId != null && esi.PassedLessThan(seconds: 11) && sigId >= 0) // sigId = -1 means angular client didn't notice a change in location { if (esi.CurrentSystemId != dto.CurrentSystemId) { var maskId = esi.MainCharacter.MaskType == MaskType.Alliance ? esi.MainCharacter.Pilot.Corporation.Alliance.MaskId : esi.MainCharacter.Pilot.Corporation.MaskId; var destoSystem = _solarSystemService.GetSystemById(dto.CurrentSystemId.GetValueOrDefault()); var originSystem = _solarSystemService.GetSystemById(esi.CurrentSystemId.Value); var connection = _stargateService.GetStargateByOriginAndDestoId(esi.CurrentSystemId.GetValueOrDefault(), dto.CurrentSystemId.GetValueOrDefault()); if (connection == null) { var wormhole = _signatureService.GetBySignatureId(sigId); if (wormhole == null) // sigId = 0 means it's an unmarked wormhole { wormhole = new Signature { SystemId = esi.CurrentSystemId.Value, SignatureId = "???", ExpiryDate = DateTime.UtcNow.AddDays(1), Name = "", SignatureType = SignatureType.Wormhole, MaskId = maskId, WormholeTypeId = _signatureService.GetByTypeName("????").Id }; _signatureService.Insert(wormhole, commit: true); } wormhole.Jumps.Add(new Jump { PilotId = esi.Pilot.Id, ShipId = dto.CurrentShipTypeId.GetValueOrDefault() }); var destoWormhole = wormhole.Destination; if (destoWormhole == null) { destoWormhole = new Signature { SystemId = dto.CurrentSystemId.Value, SignatureId = "???", ExpiryDate = wormhole.ExpiryDate, Name = "", SignatureType = SignatureType.Wormhole, MaskId = maskId, WormholeTypeId = _signatureService.GetByTypeName("K162").Id }; _signatureService.Insert(destoWormhole, commit: true); destoWormhole.DestinationId = wormhole.Id; wormhole.DestinationId = destoWormhole.Id; _signatureService.Update(wormhole, commit: true); } _routeService.AddAdjacency(esi.CurrentSystemId.Value, dto.CurrentSystemId.Value, maskId, destoSystem.Class > 0 || originSystem.Class > 0 ? 10 : // J Space Connection = 10 destoSystem.Security <= 0.45 || originSystem.Security <= 0.45 ? 100 : // Null/Low sec connection = 100 1); // Hisec to Hisec = 1 //var wormhole = _signatureService.GetOrAddWormholeByOriginAndDestoId(esi.CurrentSystemId.GetValueOrDefault(), dto.CurrentSystemId.GetValueOrDefault(), maskId, sigId); //wormhole.Wormhole.Jumps.Add(new Jump //{ // EsiCharacterId = esi.Id, // ShipId = dto.CurrentShipTypeId.GetValueOrDefault() //}); } else { connection.StargateJumps.Add(new StargateJump { PilotId = esi.Pilot.Id, ShipId = dto.CurrentShipTypeId.GetValueOrDefault(), StargateId = connection.Id, MaskId = maskId }); } } } if (dto.CurrentShipTypeId.HasValue) { _itemTypeService.GetItemTypeById(dto.CurrentShipTypeId.Value); esi.CurrentShipTypeId = dto.CurrentShipTypeId; } if (dto.CurrentSystemId.HasValue) { _solarSystemService.GetSystemById(dto.CurrentSystemId.Value); esi.CurrentSystemId = dto.CurrentSystemId; _context.Update(esi); } esi.CurrentShipName = dto.CurrentShipName; _context.SaveChanges(); return(esi); }