using ZelWiki.Library; using ZelWiki.Models.DataModels; namespace ZelWiki.Repository { public static partial class EmojiRepository { public static List GetAllEmojis() => ManagedDataStorage.Emoji.Query("GetAllEmojis.sql").ToList(); public static IEnumerable GetEmojisByCategory(string category) => ManagedDataStorage.Emoji.Query("GetEmojisByCategory.sql", new { Category = category }); public static IEnumerable GetEmojiCategoriesGrouped() => ManagedDataStorage.Emoji.Query("GetEmojiCategoriesGrouped.sql"); public static IEnumerable SearchEmojiCategoryIds(List categories) { return ManagedDataStorage.Emoji.Ephemeral(o => { var param = new { SearchTokenCount = categories.Count }; using var tempTable = o.CreateTempTableFrom("TempCategories", categories); return o.Query("SearchEmojiCategoryIds.sql", param); }); } public static List GetEmojiCategoriesByName(string name) { var param = new { Name = name }; return ManagedDataStorage.Emoji.Query("GetEmojiCategoriesByName.sql", param).ToList(); } public static void DeleteById(int id) { var param = new { Id = id }; ManagedDataStorage.Emoji.Execute("DeleteEmojiById.sql", param); ConfigurationRepository.ReloadEmojis(); } public static Emoji? GetEmojiByName(string name) { var param = new { Name = name }; return ManagedDataStorage.Emoji.QuerySingleOrDefault("GetEmojiByName.sql", param); } public static int UpsertEmoji(UpsertEmoji emoji) { int emojiId = ManagedDataStorage.Emoji.Ephemeral(o => { var transaction = o.BeginTransaction(); try { if (emoji.Id == null || emoji.Id == 0) { var param = new { Name = emoji.Name, ImageData = emoji.ImageData == null ? null : Utility.Compress(emoji.ImageData), MimeType = emoji.MimeType }; emoji.Id = o.ExecuteScalar("InsertEmoji.sql", param); } else { var param = new { EmojiId = emoji.Id, Name = emoji.Name, ImageData = emoji.ImageData == null ? null : Utility.Compress(emoji.ImageData), MimeType = emoji.MimeType }; o.ExecuteScalar("UpdateEmoji.sql", param); } var upsertEmojiCategoriesParam = new { EmojiId = emoji.Id }; using var tempTable = o.CreateTempTableFrom("TempEmojiCategories", emoji.Categories, transaction); o.Execute("UpsertEmojiCategories.sql", upsertEmojiCategoriesParam); transaction.Commit(); return (int)emoji.Id; } catch { transaction.Rollback(); throw; } }); ConfigurationRepository.ReloadEmojis(); return emojiId; } public static List GetAllEmojisPaged(int pageNumber, string? orderBy = null, string? orderByDirection = null, List? categories = null) { int pageSize = ConfigurationRepository.Get("Customization", "Pagination Size"); if (categories == null || categories.Count == 0) { var param = new { PageNumber = pageNumber, PageSize = pageSize }; var query = RepositoryHelper.TransposeOrderby("GetAllEmojisPaged.sql", orderBy, orderByDirection); return ManagedDataStorage.Emoji.Query(query, param).ToList(); } else { var emojiCategoryIds = SearchEmojiCategoryIds(categories); var param = new { PageNumber = pageNumber, PageSize = pageSize }; return ManagedDataStorage.Emoji.Ephemeral(o => { var getAllEmojisPagedByCategoriesParam = new { SearchTokenCount = emojiCategoryIds.Count(), PageNumber = pageNumber, PageSize = pageSize }; using var tempTable = o.CreateTempTableFrom("TempEmojiCategoryIds", emojiCategoryIds); var query = RepositoryHelper.TransposeOrderby("GetAllEmojisPagedByCategories.sql", orderBy, orderByDirection); return o.Query(query, getAllEmojisPagedByCategoriesParam).ToList(); }); } } } }