using System.Collections.Concurrent; using YaeBlog.Core.Models; namespace YaeBlog.Core.Services; public class EssayContentService { private readonly ConcurrentDictionary _essays = new(); private readonly Dictionary> _tags = []; public bool TryGet(string key, out BlogEssay? essay) => _essays.TryGetValue(key, out essay); public bool TryAdd(string key, BlogEssay essay) => _essays.TryAdd(key, essay); public IEnumerable> Essays => _essays; public int Count => _essays.Count; public void RefreshTags() { foreach (BlogEssay essay in _essays.Values) { foreach (string tag in essay.Tags) { if (_tags.TryGetValue(tag, out var list)) { list.Add(essay); } else { _tags[tag] = [essay]; } } } foreach (KeyValuePair> pair in _tags) { pair.Value.Sort(); } } public IEnumerable> Tags => from item in _tags select KeyValuePair.Create(item.Key, item.Value.Count); public IEnumerable GetTag(string tag) { if (_tags.TryGetValue(tag, out var list)) { return list; } throw new KeyNotFoundException("Selected tag not found."); } }