/// <summary> /// Method get data and create record. /// </summary> /// <param name="inputData">input data.</param> /// <returns>id of new record.</returns> public int CreateRecord(FileCabinetInputData inputData) { if (inputData is null) { throw new ArgumentNullException(nameof(inputData), "must not be null"); } this.Validator.ValidateParameters(inputData); var record = new FileCabinetRecord { Id = this.list.Count + 1, FirstName = inputData.FirstName, LastName = inputData.LastName, DateOfBirth = inputData.DateOfBirth, Gender = inputData.Gender, Experience = inputData.Experience, Account = inputData.Account, }; this.list.Add(record); if (this.firstNameDictionary.ContainsKey(record.FirstName.ToUpper(CultureInfo.InvariantCulture))) { this.firstNameDictionary[record.FirstName.ToUpper(CultureInfo.InvariantCulture)].Add(record); } else { this.firstNameDictionary.Add(record.FirstName.ToUpper(CultureInfo.InvariantCulture), new List <FileCabinetRecord> { record }); } if (this.lastNameDictionary.ContainsKey(record.LastName.ToUpper(CultureInfo.InvariantCulture))) { this.lastNameDictionary[record.LastName.ToUpper(CultureInfo.InvariantCulture)].Add(record); } else { this.lastNameDictionary.Add(record.LastName.ToUpper(CultureInfo.InvariantCulture), new List <FileCabinetRecord> { record }); } if (this.dateOfBirthDictionary.ContainsKey(record.DateOfBirth)) { this.dateOfBirthDictionary[record.DateOfBirth].Add(record); } else { this.dateOfBirthDictionary.Add(record.DateOfBirth, new List <FileCabinetRecord> { record }); } return(record.Id); }
/// <summary> /// Recovers saved snapshot recordings. /// </summary> /// <param name="snapshot">Snapshot.</param> /// <returns>count of restored recordings.</returns> public int Restore(FileCabinetServiceSnapshot snapshot) { if (snapshot is null) { throw new ArgumentNullException($"{nameof(snapshot)} cannot be null."); } int count = 0; foreach (var record in snapshot.Records) { try { int id = record.Id; if (id <= 0) { throw new ArgumentOutOfRangeException($"{nameof(id)} must be positive."); } var data = new FileCabinetInputData(record.FirstName, record.LastName, record.DateOfBirth, record.Gender, record.Experience, record.Account); if (id <= this.list.Count) { this.EditRecord(id, data); count++; } else { this.CreateRecord(data); if (this.firstNameDictionary.ContainsKey(record.FirstName.ToUpper(CultureInfo.InvariantCulture))) { this.firstNameDictionary[record.FirstName.ToUpper(CultureInfo.InvariantCulture)].Add(record); } else { this.firstNameDictionary.Add(record.FirstName.ToUpper(CultureInfo.InvariantCulture), new List <FileCabinetRecord> { record }); } if (this.lastNameDictionary.ContainsKey(record.LastName.ToUpper(CultureInfo.InvariantCulture))) { this.lastNameDictionary[record.LastName.ToUpper(CultureInfo.InvariantCulture)].Add(record); } else { this.lastNameDictionary.Add(record.LastName.ToUpper(CultureInfo.InvariantCulture), new List <FileCabinetRecord> { record }); } if (this.dateOfBirthDictionary.ContainsKey(record.DateOfBirth)) { this.dateOfBirthDictionary[record.DateOfBirth].Add(record); } else { this.dateOfBirthDictionary.Add(record.DateOfBirth, new List <FileCabinetRecord> { record }); } count++; } } catch (IndexOutOfRangeException indexOutOfRangeException) { Console.WriteLine($"Import record with id {record.Id} failed: {indexOutOfRangeException.Message}"); } catch (ArgumentException) { Console.WriteLine($"Import record with id {record.Id} failed."); } } return(count); }