/// <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); } }