public async Task AddAsync(GlossariesForEditingDTO glossary) { var identityName = User.Identity.Name; Guid?userId = (Guid)ur.GetID(identityName); await _userActionRepository.AddCreateGlossaryActionAsync((Guid)userId, identityName, glossary.id, glossary.Name_text); await _glossariesService.AddAsync((Guid)userId, glossary); }
/// <summary> /// Сохранение изменений в глоссарии. /// </summary> /// <param name="glossary">Отредактированный глоссарий.</param> /// <returns></returns> public async Task UpdateAsync(Guid userId, GlossariesForEditingDTO glossary) { try { await _glossariesRepository.UpdateAsync(userId, glossary); } catch (Exception exception) { throw new Exception(WriteLn($"Error", exception), exception); } }
/// <summary> /// Возвращает глоссарий для редактирования (со связанными объектами). /// </summary> /// <param name="glossaryId">Идентификатор глоссария.</param> /// <returns></returns> public async Task <GlossariesForEditingDTO> GetGlossaryForEditAsync(Guid glossaryId) { try { var temp = await _glossariesRepository.GetGlossaryForEditAsync(glossaryId); //Создание глоссария с вложенными списками идентификаторов связанных данных. var resultDTO = new GlossariesForEditingDTO { id = temp.FirstOrDefault().id, Name_text = temp.FirstOrDefault().Name_text, Description = temp.FirstOrDefault().Description, ID_File = temp.FirstOrDefault().ID_File, Locales_Ids = temp.Select(t => t.Locale_ID).Distinct(), Localization_Projects_Ids = temp.Select(t => t.Localization_Project_ID).Distinct() }; return(resultDTO); } catch (Exception exception) { throw new Exception(WriteLn($"Error", exception), exception); } }
/// <summary> /// Сохранение изменений в глоссарии. /// </summary> /// <param name="userId">Идентификатор пользователя.</param> /// <param name="glossary">Отредактированный глоссарий.</param> /// <returns></returns> public async Task UpdateAsync(Guid userId, GlossariesForEditingDTO glossary) { try { using (var dbConnection = new NpgsqlConnection(connectionString)) { //Обновление глоссария var editedGlossaries = new { name_text = glossary.Name_text, description = glossary.Description, id_file = glossary.ID_File }; var query = new Query("glossaries").Where("id", glossary.id).AsUpdate(editedGlossaries); var compiledQuery = _compiler.Compile(query); LogQuery(compiledQuery); await dbConnection.ExecuteAsync( sql : compiledQuery.Sql, param : compiledQuery.NamedBindings); var loc = ConvertData.ConverLocale(glossary.Locales_Ids); //Пересоздание связей глоссария с языками перевода (Glossaries с Locales) await EditGlossariesLocalesAsync(glossary.id, loc, glossary.ID_File, dbConnection, null); //Пересоздание связей глоссария с проектами локализации (Glossaries с localization_projects) await EditGlossariesLocalizationProjectsAsync(userId, glossary.id, glossary.Localization_Projects_Ids, dbConnection, null); } } catch (NpgsqlException exception) { _loggerError.WriteLn($"Ошибка в {nameof(GlossariesRepository)}.{nameof(GlossariesRepository.UpdateAsync)} {nameof(NpgsqlException)} ", exception); } catch (Exception exception) { _loggerError.WriteLn($"Ошибка в {nameof(GlossariesRepository)}.{nameof(GlossariesRepository.UpdateAsync)} {nameof(Exception)} ", exception); } }
/// <summary> /// Добавление нового глоссария. /// </summary> /// <param name="userId">Идентификатор пользователя.</param> /// <param name="glossary">Новый глоссарий.</param> /// <returns></returns> public async Task AddAsync(Guid userId, GlossariesForEditingDTO glossary) { try { using (var dbConnection = new NpgsqlConnection(connectionString)) { dbConnection.Open(); using (IDbTransaction transaction = dbConnection.BeginTransaction(IsolationLevel.ReadCommitted)) { var newGlossaryFileId = await this.fr.AddAsync(new File() { id_localization_project = null, // glossary.Localization_Projects_Ids.First(x => x.HasValue).Value, name_text = glossary.Name_text, date_of_change = DateTime.Now, is_folder = false, is_last_version = true, visibility = true }, dbConnection, transaction); glossary.ID_File = newGlossaryFileId; //---------------- //Добавление нового глоссария var newGlossaries = new { name_text = glossary.Name_text, description = glossary.Description, id_file = glossary.ID_File }; /*var query = new Query("glossaries").AsInsert(newGlossaries, * true); //true - вернуть сгенерированный id нового объекта * var compiledQuery = _compiler.Compile(query); * LogQuery(compiledQuery); * * * //После выполнение запроса получаем сгенерированный id нового объекта * var idOfNewGlossary = await dbConnection * .ExecuteScalarAsync<Guid>( * sql: compiledQuery.Sql, * param: compiledQuery.NamedBindings, transaction: transaction); */ var sql = " INSERT INTO glossaries(name_text, description, id_file) VALUES('" + newGlossaries.name_text + "', '" + newGlossaries.description + "', '" + newGlossaries.id_file + "') RETURNING glossaries.id"; LogQuery(sql); var idOfNewGlossary = await dbConnection .ExecuteScalarAsync <Guid>( sql, transaction : transaction); //Добавление в таблицу "GlossariesLocales" записей связи глоссария с языками перевода (Glossaries с Locales) var loc = ConvertData.ConverLocale(glossary.Locales_Ids); await EditGlossariesLocalesAsync(idOfNewGlossary, loc, glossary.ID_File, dbConnection, transaction, false); //Добавление в таблицу "localization_projectsGlossaries" записей связи глоссария с проектами локализации (Glossaries с localization_projects) await EditGlossariesLocalizationProjectsAsync(userId, idOfNewGlossary, glossary.Localization_Projects_Ids, dbConnection, transaction, false); transaction.Commit(); } } } catch (NpgsqlException exception) { _loggerError.WriteLn($"Ошибка в {nameof(GlossariesRepository)}.{nameof(GlossariesRepository.AddAsync)} {nameof(NpgsqlException)} ", exception); } catch (Exception exception) { _loggerError.WriteLn($"Ошибка в {nameof(GlossariesRepository)}.{nameof(GlossariesRepository.AddAsync)} {nameof(Exception)} ", exception); } }