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);
            }
        }
Beispiel #6
0
        /// <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.");
            }
        }
Beispiel #8
0
        /// <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}'.";
Beispiel #17
0
        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);
            }
        }