private void Insert(string parameters) { var(properties, values) = this.Parse(parameters); var recordPropertyInfo = typeof(FileCabinetRecord).GetProperties(); var record = new FileCabinetRecord() { FirstName = this.GeneRateName(), LastName = this.GeneRateName(), DateOfBirth = this.GenerateDateOfBirth(), Gender = this.GenerateGender(), Account = this.randomGenerator.Next(), Experience = Convert.ToInt16(this.randomGenerator.Next(DateTime.Now.Year - this.GenerateDateOfBirth().Year)), }; for (int i = 0; i < properties.Length; i++) { var recordProperty = recordPropertyInfo.FirstOrDefault(prop => string.Equals(prop.Name, properties[i], StringComparison.OrdinalIgnoreCase)); if (recordProperty is null) { continue; } var converter = TypeDescriptor.GetConverter(recordProperty.PropertyType); recordProperty.SetValue(record, converter.ConvertFromInvariantString(values[i])); } var data = new FileCabinetInputData(record.FirstName, record.LastName, record.DateOfBirth, record.Gender, record.Experience, record.Account); this.fileCabinetService.CreateRecord(data); }
/// <summary> /// Changes the record by given ID. /// </summary> /// <param name="id">Id of record.</param> /// <param name="parameters">Parameters of record.</param> public void EditRecord(int id, FileCabinetInputData parameters) { this.stopwatch.Restart(); this.service.EditRecord(id, parameters); this.stopwatch.Stop(); this.Information(nameof(this.service.EditRecord), this.stopwatch.ElapsedTicks); }
/// <summary> /// Generates a unique user record. /// </summary> /// <param name="parameters">Parameters of new record.</param> /// <returns>Id of record.</returns> public int CreateRecord(FileCabinetInputData parameters) { int id = this.service.CreateRecord(parameters); this.WriteLogInFile(nameof(this.CreateRecord), this.GetInfoFileCabinetInputData(parameters)); this.WriteLogReturnInFile <int>(nameof(this.service.CreateRecord), id); return(id); }
/// <summary> /// Generates a unique user record. /// </summary> /// <param name="parameters">Parameters of new record.</param> /// <returns>Id of record.</returns> public int CreateRecord(FileCabinetInputData parameters) { this.stopwatch.Restart(); var id = this.service.CreateRecord(parameters); this.stopwatch.Stop(); this.Information(nameof(this.service.CreateRecord), this.stopwatch.ElapsedTicks); return(id); }
/// <summary> /// Validate data parameters. /// </summary> /// <param name="parameters">Record data.</param> public void ValidateParameters(FileCabinetInputData parameters) { if (parameters is null) { throw new ArgumentNullException($"{nameof(parameters)} cannot be null."); } foreach (var validator in this.validators) { validator.ValidateParameters(parameters); } }
/// <summary> /// Valadate parameters. /// </summary> /// <param name="inputData">Record data.</param> public void ValidateParameters(FileCabinetInputData inputData) { if (inputData is null) { throw new ArgumentNullException($"{nameof(inputData)} cannot be null."); } if (inputData.Account < this.min) { throw new ArgumentException($"{nameof(inputData.Account)} must be greatest than {this.min}"); } }
/// <summary> /// Validate parameters. /// </summary> /// <param name="inputData">The Record data.</param> public void ValidateParameters(FileCabinetInputData inputData) { if (inputData is null) { throw new ArgumentNullException($"{nameof(inputData)} cannot be null."); } if (inputData.DateOfBirth < this.from || inputData.DateOfBirth > this.to) { throw new ArgumentException($"{nameof(inputData.DateOfBirth)} is incorrect."); } }
/// <summary> /// Validate parameters. /// </summary> /// <param name="inputData">The Record data.</param> public void ValidateParameters(FileCabinetInputData inputData) { if (inputData is null) { throw new ArgumentNullException($"{nameof(inputData)} cannot be null."); } if (inputData.Experience < this.min || inputData.Experience > this.max) { throw new ArgumentException($"{nameof(inputData.Experience)} must be in range from {nameof(this.min)} to {nameof(this.max)}."); } }
/// <summary> /// Valides input data. /// </summary> /// <param name="inputData">input data.</param> public void ValidateParameters(FileCabinetInputData inputData) { if (inputData is null) { throw new ArgumentNullException(nameof(inputData), "must not be null"); } this.ValidateFirstName(inputData.FirstName); this.ValidateLastName(inputData.LastName); this.ValidateDateOfBirth(inputData.DateOfBirth); this.ValidateGender(inputData.Gender); this.ValidateExperience(inputData.Experience); this.ValidateAccount(inputData.Account); }
/// <summary> /// Method get data and edit existing record. /// </summary> /// <param name="id">input id of existing record.</param> /// <param name="inputData">input data.</param> public void EditRecord(int id, FileCabinetInputData inputData) { if (inputData is null) { throw new ArgumentNullException($"{nameof(inputData)} cannot be null."); } this.Validator.ValidateParameters(inputData); if (!this.activeRecords.ContainsKey(id)) { throw new ArgumentException($"Element with #{nameof(id)} can't fine in this records list."); } this.WriteRecordToBinaryFile(this.activeRecords[id], inputData, id); }
/// <summary> /// Validate parameters. /// </summary> /// <param name="inputData">The Record data.</param> public void ValidateParameters(FileCabinetInputData inputData) { if (inputData is null) { throw new ArgumentNullException($"{nameof(inputData)} cannot be null."); } if (!char.IsLetter(inputData.Gender)) { throw new ArgumentException($"{nameof(inputData.Gender)} must be letter."); } if (!this.genders.Contains(inputData.Gender, StringComparison.Ordinal)) { throw new ArgumentException($"{nameof(inputData.Gender)} must be correct gender."); } }
/// <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 ArgumentException($"{nameof(inputData)} cannot be null."); } this.Validator.ValidateParameters(inputData); int?id = this.GetCurrentId(); if (id is null) { throw new ArgumentOutOfRangeException($"{nameof(id)} bigger than int.MaxValue."); } return(this.CreateRecordWithId(inputData, id.Value)); }
/// <summary> /// Remove deleted record from file. /// </summary> public void Purge() { long currentPosition = 0; var activePositions = this.activeRecords.Values.ToArray(); Array.Sort(activePositions); foreach (var activePosition in activePositions) { var record = this.ReadRecordOutBinaryFile(activePosition); int id = record.Id; var data = new FileCabinetInputData(record.FirstName, record.LastName, record.DateOfBirth, record.Gender, record.Experience, record.Account); this.WriteRecordToBinaryFile(currentPosition, data, id); currentPosition += RecordSize; } this.fileStream.SetLength(currentPosition); this.removedRecords.Clear(); }
/// <summary> /// Validate parameters. /// </summary> /// <param name="inputData">The Record data.</param> public void ValidateParameters(FileCabinetInputData inputData) { if (inputData is null) { throw new ArgumentNullException($"{nameof(inputData)} cannot be null."); } if (string.IsNullOrWhiteSpace(inputData.FirstName)) { if (inputData.FirstName is null) { throw new ArgumentNullException($"{nameof(inputData.FirstName)} cannot be null."); } if (inputData.FirstName.Length < this.minLength || inputData.FirstName.Length > this.maxLength) { throw new ArgumentException($"{nameof(inputData.FirstName.Length)} must be in range {this.minLength} to {this.maxLength}."); } throw new ArgumentException($"{nameof(inputData.FirstName)} cannot be empty or whiteSpace."); } }
/// <summary> /// Changes the record by given ID. /// </summary> /// <param name="id">Id of record.</param> /// <param name="parameters">Parameters of record.</param> public void EditRecord(int id, FileCabinetInputData parameters) { this.service.EditRecord(id, parameters); this.WriteLogInFile(nameof(this.service.EditRecord), this.GetInfoFileCabinetInputData(parameters)); }
private string GetInfoFileCabinetInputData(FileCabinetInputData parameters) => $"FirstName = '{parameters.FirstName}', LastName = '{parameters.LastName}', " + $"DateOfBirth = '{parameters.DateOfBirth}', Experience = '{parameters.Experience}', " + $"Account = '{parameters.Account}', Gender = '{parameters.Gender}'.";
private void Update(string parameters) { var(newProp, whereProp) = this.Parse(parameters); var set = newProp; var where = whereProp; if (where[0].whereProp.Equals("id", StringComparison.OrdinalIgnoreCase)) { int id = int.Parse(where[0].whereVal); foreach (var record in this.fileCabinetService.GetRecords()) { if (record.Id == id) { FileCabinetInputData data = this.CreateDataForEditing(record, set); this.fileCabinetService.EditRecord(id, data); return; } } } var finded = new List <List <FileCabinetRecord> >(); foreach (var item in where) { if (string.Equals(item.whereProp, "firstName", StringComparison.OrdinalIgnoreCase)) { var firstNames = new List <FileCabinetRecord>(this.fileCabinetService.FindByFirstName(item.whereVal)); finded.Add(firstNames); } else if (string.Equals(item.whereProp, "lastName", StringComparison.OrdinalIgnoreCase)) { var lastNames = new List <FileCabinetRecord>(this.fileCabinetService.FindByLastName(item.whereVal)); finded.Add(lastNames); } else if (string.Equals(item.whereProp, "dateOfBirth", StringComparison.OrdinalIgnoreCase)) { var dates = new List <FileCabinetRecord>(this.fileCabinetService.FindByDateOfBirth(Convert.ToDateTime(item.whereVal))); finded.Add(dates); } else if (string.Equals(item.whereProp, "experience", StringComparison.OrdinalIgnoreCase)) { var experiences = new List <FileCabinetRecord>(this.fileCabinetService.FindByExperience(item.whereVal)); finded.Add(experiences); } else if (string.Equals(item.whereProp, "account", StringComparison.OrdinalIgnoreCase)) { var accounts = new List <FileCabinetRecord>(this.fileCabinetService.FindByAccount(item.whereVal)); finded.Add(accounts); } else if (string.Equals(item.whereProp, "gender", StringComparison.OrdinalIgnoreCase)) { var genders = new List <FileCabinetRecord>(this.fileCabinetService.FindByGender(item.whereVal)); finded.Add(genders); } } var updated = finded[0]; foreach (var find in finded) { updated = this.Insert(updated, find); } foreach (var record in updated) { FileCabinetInputData data = this.CreateDataForEditing(record, set); this.fileCabinetService.EditRecord(record.Id, data); } }