Пример #1
0
        private SessionContainer GetContainer([NotNull] FileStorageDataContainer dataContainer)
        {
            switch (dataContainer.Version)
            {
            case 1:
            {
                var storedSessionContainer =
                    JsonConvert.DeserializeObject <StoredSessionContainerV1>(dataContainer.DataJson);

                return(storedSessionContainer.ToDomain());
            }

            default:
                throw new SavingException("Неподдерижваемый формат файла");
            }
        }
Пример #2
0
        /// <summary>
        /// Сохраняет в файл информацию о сеансе
        /// </summary>
        /// <param name="patient">Пациент, которому принадлежит сеанс</param>
        /// <param name="session">Сеанс пациента</param>
        /// <param name="filePath">Полный путь к файлу (по умолчанию создается директория с именем пациента, и файл сохраняется в нее)</param>
        public void Save(Patient patient, Session session, string filePath = null)
        {
            if (patient == null)
            {
                throw new ArgumentNullException(nameof(patient));
            }
            if (session == null)
            {
                throw new ArgumentNullException(nameof(session));
            }

            string dirPath;

            if (filePath == null)
            {
                if (String.IsNullOrWhiteSpace(_settings.SessionsFilesDirectoryPath))
                {
                    throw new SettingsException("Не задана директория для сохранения сеанса в файл");
                }

                filePath = _settings.SessionsFilesDirectoryPath;
                dirPath  = $"{patient.LastName}_{patient.FirstName}_{patient.PatronymicName}_{patient.Id}";
                filePath = Path.Combine(filePath, dirPath);


                var dateSring =
                    $"{session.TimestampUtc.Day}_{session.TimestampUtc.Month}_{session.TimestampUtc.Year}_{session.TimestampUtc.Hour}_{session.TimestampUtc.Minute}_{session.TimestampUtc.Second}";
                var birthDateSring = $"{session.TimestampUtc.Day}_{session.TimestampUtc.Month}_{session.TimestampUtc.Year}";
                var fileName       =
                    $"{patient.LastName}_{patient.FirstName}_{patient.PatronymicName}_{birthDateSring}_{patient.Id}_{dateSring}.cmsf";
                filePath = Path.Combine(filePath, fileName);
            }
            else
            {
                dirPath = Path.GetDirectoryName(filePath);
            }

            if (String.IsNullOrWhiteSpace(dirPath))
            {
                throw new SavingException("Не задан путь для сохранения сеанса в файл");
            }

            try
            {
                if (!Directory.Exists(dirPath))
                {
                    Directory.CreateDirectory(dirPath);
                }

                var sessionContainer = new SessionContainer
                {
                    Patient = patient,
                    Session = session
                };

                var storedSessionContainer = sessionContainer.ToStoredV1();

                var storedSessionJson = JsonConvert.SerializeObject(storedSessionContainer);

                var storedDataContainer = new FileStorageDataContainer
                {
                    Version  = ActualStoredContainerVersion,
                    DataJson = storedSessionJson
                };
                var storedDataContainerJson = JsonConvert.SerializeObject(storedDataContainer);

                File.WriteAllText(filePath, storedDataContainerJson);
            }
            catch (Exception ex)
            {
                _logger.Error($"{GetType().Name}: Ошибка сохранения сеанса в файл. Причина: {ex.Message}", ex);
                throw new SavingException(Localisation.FileRepository_SavePatientException, ex);
            }
        }