private async Task <Response> SaveAsnFileToDb(DbFileModel file, CheckUpdateResponseModel checkUpdate) { try { if (checkUpdate.HistoryRecordKey == null) { throw new CustomException(ResponseCodes.INVALID_PARAMETER, ErrorMessages.BadExternalResponse); } var parseFile = FileService.ParseCsvAsnDbFile(file.FileData); if (parseFile == null || parseFile.Count == 0) { throw new CustomException(ResponseCodes.FAILURE, ErrorMessages.FileIsCorruptErrorMessage); } var convertNetmaskRange = NetMaskConverter.IpV4NetmaskRangeParse(parseFile.Select(s => s.Network).ToList()); using (IDbService dbService = new DbService(_db).DbServiceInstance) { var datesForSave = convertNetmaskRange. Join(parseFile, ipRange => ipRange.NetMask, csv => csv.Network, (ipRange, csv) => new Ipv4AsnBaseRequest { Network = ipRange.NetMask, Cidr = ipRange.Cidr, AutonomousSystemNumber = csv.AutonomousSystemNumber, AutonomousSystemOrganization = csv.AutonomousSystemOrganization, MinFirstSegment = ipRange.MinFirstSegment, MinSecondSegment = ipRange.MinSecondSegment, MinThirdSegment = ipRange.MinThirdSegment, MinLastSegment = ipRange.MinLastSegment, MaxFirstSegment = ipRange.MaxFirstSegment, MaxSecondSegment = ipRange.MaxSecondSegment, MaxThirdSegment = ipRange.MaxThirdSegment, MaxLastSegment = ipRange.MaxLastSegment, Md5Sum = checkUpdate.LastHashValue, // ReSharper disable once PossibleInvalidOperationException HistoryKey = (Guid)checkUpdate.HistoryRecordKey }).ToList(); var checkStoredHash = await dbService.GeoLiteIpV4Asn.CreateRange(datesForSave); if (checkStoredHash.ResultCode != ResponseCodes.SUCCESS) { throw new CustomException(checkStoredHash.ResultCode, checkStoredHash.Errors.FirstOrDefault()?.ResultMessage); } } } catch (Exception e) { Console.WriteLine(e); throw; } return(new Response()); }
public async Task <Response <bool> > SaveFilesToDb(DataBaseTypes sourceType, List <DbFileModel> dbFiles, CheckUpdateResponseModel checkUpdate) { var response = new Response <bool>(false); try { switch (sourceType) { case DataBaseTypes.ASN: { var saveAsnFile = await SaveAsnFileToDb(dbFiles.FirstOrDefault(f => f.FileName.Contains("IPv4")), checkUpdate); if (saveAsnFile.ResultCode != ResponseCodes.SUCCESS) { throw new CustomException(saveAsnFile.ResultCode, saveAsnFile.Errors.FirstOrDefault()?.ResultMessage); } break; } case DataBaseTypes.CITY: { if (dbFiles.Any(f => f.FileName.Contains("Locations") && f.FileName.Contains("City"))) { var saveCityLocations = await SaveCityLocationsFileToDb( dbFiles.Where(f => f.FileName.Contains("Locations") && f.FileName.Contains("City")) .ToList(), checkUpdate); if (saveCityLocations.ResultCode != ResponseCodes.SUCCESS) { throw new CustomException(saveCityLocations.ResultCode, saveCityLocations.Errors.FirstOrDefault()?.ResultMessage); } } var saveCityBlock = await SaveCityBlocksFileToDb( dbFiles.FirstOrDefault(f => f.FileName.Contains("Blocks") && f.FileName.Contains("City") && f.FileName.Contains("IPv4")), checkUpdate); if (saveCityBlock.ResultCode != ResponseCodes.SUCCESS) { throw new CustomException(saveCityBlock.ResultCode, saveCityBlock.Errors.FirstOrDefault()?.ResultMessage); } break; } default: { throw new CustomException(ResponseCodes.INVALID_PARAMETER, ErrorMessages.InvalidRequestDataErrorMessage); } } } catch (CustomException ce) { Console.WriteLine(ce.Errors.FirstOrDefault()?.ResultMessage); throw; } catch (Exception e) { Console.WriteLine(e); throw; } return(response); }
private async Task <Response> SaveCityLocationsFileToDb(List <DbFileModel> files, CheckUpdateResponseModel checkUpdate) { try { if (checkUpdate.HistoryRecordKey == null) { throw new CustomException(ResponseCodes.INVALID_PARAMETER, ErrorMessages.BadExternalResponse); } var locations = new List <CsvParserCityLocations>(); foreach (var parseFile in files.Select(file => FileService.ParseCsvCityLocationsDbFile(file.FileData))) { if (parseFile == null || parseFile.Count == 0) { throw new CustomException(ResponseCodes.FAILURE, ErrorMessages.FileIsCorruptErrorMessage); } locations.AddRange(parseFile); } using (IDbService dbService = new DbService(_db).DbServiceInstance) { var datesForSave = locations.Select(csv => new GeoNameBaseRequest { GeoNameId = csv.GeoNameId, ContinentCode = csv.ContinentCode, ContinentName = csv.ContinentName, CountryIsoCode = csv.CountryIsoCode, CountryName = csv.CityName, CityName = csv.CityName, Subdivision1IsoCode = csv.Subdivision1IsoCode, Subdivision1Name = csv.Subdivision1Name, Subdivision2IsoCode = csv.Subdivision2IsoCode, Subdivision2Name = csv.Subdivision2Name, //Md5Sum = checkUpdate.LastHashValue, // ReSharper disable once PossibleInvalidOperationException HistoryKey = (Guid)checkUpdate.HistoryRecordKey }).ToList(); var checkStoredHash = await dbService.GeoLiteGeoName.CreateRange(datesForSave); if (checkStoredHash.ResultCode != ResponseCodes.SUCCESS) { throw new CustomException(checkStoredHash.ResultCode, checkStoredHash.Errors.FirstOrDefault()?.ResultMessage); } } } catch (Exception e) { Console.WriteLine(e); throw; } return(new Response()); }
private async Task <Response> SaveCityBlocksFileToDb(DbFileModel file, CheckUpdateResponseModel checkUpdate) { try { if (checkUpdate.HistoryRecordKey == null) { throw new CustomException(ResponseCodes.INVALID_PARAMETER, ErrorMessages.BadExternalResponse); } var parseFile = FileService.ParseCsvCityBlocksDbFile(file.FileData); if (parseFile == null || parseFile.Count == 0) { throw new CustomException(ResponseCodes.FAILURE, ErrorMessages.FileIsCorruptErrorMessage); } var convertNetmaskRange = NetMaskConverter.IpV4NetmaskRangeParse(parseFile.Select(s => s.Network).ToList()); using (IDbService dbService = new DbService(_db).DbServiceInstance) { var datesForSave = convertNetmaskRange. Join(parseFile, ipRange => ipRange.NetMask, csv => csv.Network, (ipRange, csv) => new CityBaseRequest { GeoNameId = csv.GeoNameId, RegisteredCountryGeonameId = csv.RegisteredCountryGeonameId, RepresentedCountryGeonameId = csv.RepresentedCountryGeonameId, IsAnonymousProxy = csv.IsAnonymousProxy, IsSatelliteProvider = csv.IsSatelliteProvider, PostalCode = csv.PostalCode, Latitude = csv.Latitude, Longitude = csv.Longitude, AccuracyRadius = csv.AccuracyRadius, Network = ipRange.NetMask, Cidr = ipRange.Cidr, MinFirstSegment = ipRange.MinFirstSegment, MinSecondSegment = ipRange.MinSecondSegment, MinThirdSegment = ipRange.MinThirdSegment, MinLastSegment = ipRange.MinLastSegment, MaxFirstSegment = ipRange.MaxFirstSegment, MaxSecondSegment = ipRange.MaxSecondSegment, MaxThirdSegment = ipRange.MaxThirdSegment, MaxLastSegment = ipRange.MaxLastSegment, Md5Sum = checkUpdate.LastHashValue, // ReSharper disable once PossibleInvalidOperationException HistoryKey = (Guid)checkUpdate.HistoryRecordKey }).ToList(); var checkStoredHash = await dbService.GeoLiteIpv4City.CreateRange(datesForSave); if (checkStoredHash.ResultCode != ResponseCodes.SUCCESS) { throw new CustomException(checkStoredHash.ResultCode, checkStoredHash.Errors.FirstOrDefault()?.ResultMessage); } } } catch (Exception e) { Console.WriteLine(e); throw; } return(new Response()); }