diff options
Diffstat (limited to 'Services')
| -rw-r--r-- | Services/TagService.cs | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/Services/TagService.cs b/Services/TagService.cs index e0dcf64..e0d1072 100644 --- a/Services/TagService.cs +++ b/Services/TagService.cs @@ -4,7 +4,9 @@ using Microsoft.EntityFrameworkCore; namespace HyperBooru.Services; public interface ITagService { + public void AddTag(Guid obj, Guid tagDef); public void AddTag(HBObject obj, TagDefinition tagDef); + public void RemoveTag(Guid obj, Guid tagDef); public void RemoveTag(HBObject obj, TagDefinition tagDef); public void AddImplicitTag(TagDefinition tagDef, TagDefinition implicitTagDef); public void RemoveImplicitTag(TagDefinition tagDef, TagDefinition implicitTagDef); @@ -18,22 +20,23 @@ public class TagService : ITagService { public TagService(IDbContextFactory<HBContext> dbFactory) => this.dbFactory = dbFactory; - public void AddTag(HBObject obj, TagDefinition tagDef) { + public void AddTag(Guid obj, Guid tagDef) { using var db = dbFactory.CreateDbContext(); - db.Entry(obj).State = EntityState.Unchanged; - bool alreadyTagged = obj.Tags - .Select(t => t.TagDefinition.Guid) - .Contains(tagDef.Guid); + var tag = db.TagDefinitions.First(td => td.Guid == tagDef); - obj.Tags.Add(new() { - TagDefinition = tagDef, - Target = obj - }); + db.Objects + .Where(o => !o.Tags.Select(t => t.TagDefinition.Guid).Contains(tagDef)) + .FirstOrDefault(o => o.Guid == obj)? + .Tags + .Add(new(tag)); db.SaveChanges(); } + public void AddTag(HBObject obj, TagDefinition tagDef) => + AddTag(obj.Guid, tagDef.Guid); + public void RemoveTag(Guid obj, Guid tagDef) { using var db = dbFactory.CreateDbContext(); |
