public bool GetArticleFinishedState(string articleName) { Debug.Assert(articleName != null); bool isArticleFinished = false; // Получаем значение finished для статьи ExecuteSQLQuery ( $"SELECT {Tables.Articles.finished} " + $"FROM {Tables.articles} " + $"WHERE {Tables.Articles.name} = {SQLStringLiteral(articleName)} " + $"LIMIT 1;", (reader) => { if (!reader.HasRows) { throw new System.Exception($"{articleName} is not found in database"); } reader.Read(); isArticleFinished = TinyIntAsBool.BoolFromShort(reader.GetInt16(0)); } ); return(isArticleFinished); }
// Возвращает текст и флаг завершенности этого текста для статьи с указанным именем public FinishedText GetArticleText(string articleName) { FinishedText res = new FinishedText(); ExecuteSQLQuery ( $"SELECT {Tables.Articles.text}, {Tables.Articles.finished} " + $"FROM {Tables.articles} " + $"WHERE {Tables.Articles.name} = {SQLStringLiteral(articleName)} " + $"LIMIT 1;", (reader) => { if (!reader.HasRows) { throw new System.Exception($"{articleName} is not found in database"); } reader.Read(); res.text = reader.GetString(0); res.finished = TinyIntAsBool.BoolFromShort(reader.GetInt16(1)); } ); return(res); }
// Возвращает текст и флаг завершенности этого текста для художественного перевода с указанным языком, который принадлежит статье с указанным именем // В случае, если для такого языка нет художественного перевода - в поле text возвращаемой структуры будет null public FinishedText GetArtisticalTranslaionText(string articleName, string languageCode) { FinishedText res = new FinishedText(); int articleId = -1; // запрашиваем articleId по articleName ExecuteSQLQuery ( $"SELECT {Tables.Articles.id} " + $"FROM {Tables.articles} " + $"WHERE {Tables.Articles.name} = {SQLStringLiteral(articleName)} " + $"LIMIT 1;", (reader) => { if (!reader.HasRows) { throw new System.Exception($"{articleName} is not found in database"); } reader.Read(); articleId = reader.GetInt32(0); } ); ExecuteSQLQuery ( $"SELECT {Tables.ArtisticalTranslations.text}, {Tables.ArtisticalTranslations.finished} " + $"FROM {Tables.artisticalTranslations} " + $"WHERE {Tables.ArtisticalTranslations.articleId} = {articleId} and {Tables.ArtisticalTranslations.languageCode} = {SQLStringLiteral(languageCode)} " + $"LIMIT 1;", (reader) => { // Если для этого языка еще нет перевода, то выходим. В этом случае будет значение по умолчанию (text = null) if (!reader.HasRows) { return; } reader.Read(); res.text = reader.GetString(0); res.finished = TinyIntAsBool.BoolFromShort(reader.GetInt16(1)); } ); return(res); }
// Устанавливает состояние завершенности для статьи. Если устанавливаем состояние false, а до этого было true, // То также удалятся все связанные с этой статьей сущности, требующие состояния завершенности (привязанные переводы слов и худ. переводы, тайминги аудио-разметки) public void SetArticleFinishedState(string articleName, bool finished) { // Если состояние не меняется - выходим if (finished == GetArticleFinishedState(articleName)) { return; } // Ставим статье finished = true ExecuteSQLQuery($"UPDATE {Tables.articles} SET {Tables.Articles.finished} = {TinyIntAsBool.StrFromBool(finished)} " + $"WHERE {Tables.Articles.name} = {SQLStringLiteral(articleName)};"); if (!finished) { // ToDo: случай, когда завершенное состояние меняем на незавершенного - нужно удалить все связи в бд } }