diff options
Diffstat (limited to 'Services')
| -rw-r--r-- | Services/ConfigService.cs | 10 | ||||
| -rw-r--r-- | Services/TagService.cs | 35 |
2 files changed, 23 insertions, 22 deletions
diff --git a/Services/ConfigService.cs b/Services/ConfigService.cs index 6ba3936..814a47b 100644 --- a/Services/ConfigService.cs +++ b/Services/ConfigService.cs @@ -1,9 +1,9 @@ namespace HyperBooru.Services; public interface IConfigService { - public string DataPath { get; } - public string DbPath { get; } - public string MediaBasePath { get; } + public string DataPath { get; } + public string DbConnectionString { get; } + public string MediaBasePath { get; } public string GetPath(Media media); public string GetPath(Media media, int width, int height); @@ -38,8 +38,8 @@ public class ConfigService : IConfigService { } } - public string DbPath => - Path.Join(DataPath, $"{AppName}.db"); + public string DbConnectionString => + config.GetConnectionString("DefaultConnection"); public string MediaBasePath => Path.Join(DataPath, "media"); diff --git a/Services/TagService.cs b/Services/TagService.cs index da2bb2d..c3b8e14 100644 --- a/Services/TagService.cs +++ b/Services/TagService.cs @@ -1,6 +1,8 @@ using Microsoft.AspNetCore.Components.Web; using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.Razor.TagHelpers; using Microsoft.EntityFrameworkCore; +using System.Reflection.Metadata; namespace HyperBooru.Services; @@ -9,8 +11,8 @@ public interface ITagService { 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); + public void SetImplicitTags(TagDefinition tagDef, TagDefinition[] implicitTagDefs); + public void SetImplicitTags(Guid tagDef, Guid[] implicitTagDefs); public void CreateTagDefinition(string name, string? @namespace); public void DeleteTagDefinition(TagDefinition tagDef); public (TagDefinition tagDefinition, bool isImplicit)[] GetAllTags(Guid obj); @@ -52,28 +54,27 @@ public class TagService : ITagService { public void RemoveTag(HBObject obj, TagDefinition tagDef) => RemoveTag(obj.Guid, tagDef.Guid); - public void AddImplicitTag(TagDefinition tagDef, TagDefinition implicitTagDef) { + public void SetImplicitTags(Guid tagDef, Guid[] implicitTagDefs) { using var db = dbFactory.CreateDbContext(); - db.Entry(tagDef).State = EntityState.Unchanged; - - if(tagDef.ImplicitTags.Select(td => td.Guid).Contains(implicitTagDef.Guid)) - throw new ArgumentException("Tag definition already contains implicit tag"); - - tagDef.ImplicitTags.Add(implicitTagDef); - db.SaveChanges(); - } + using var transaction = db.Database.BeginTransaction(); - public void RemoveImplicitTag(TagDefinition tagDef, TagDefinition implicitTagDef) { - using var db = dbFactory.CreateDbContext(); - db.Entry(tagDef).State = EntityState.Unchanged; + var tag = db.TagDefinitions.First(td => td.Guid == tagDef); - if(!tagDef.ImplicitTags.Select(td => td.Guid).Contains(implicitTagDef.Guid)) - throw new ArgumentException("Tag definition doesn't contain implicit tag"); + tag.ImplicitTags.RemoveAll(td => !implicitTagDefs.Contains(td.Guid)); + tag.ImplicitTags.AddRange( + db.TagDefinitions + .Where(td => implicitTagDefs.Contains(td.Guid)) + .Where(td => !tag.ImplicitTags + .Select(td => td.Guid) + .Contains(td.Guid))); - tagDef.ImplicitTags.Remove(implicitTagDef); db.SaveChanges(); + transaction.Commit(); } + public void SetImplicitTags(TagDefinition tagDef, TagDefinition[] implicitTagDefs) => + SetImplicitTags(tagDef.Guid, implicitTagDefs.Select(td => td.Guid).ToArray()); + public void CreateTagDefinition(string name, string? @namespace) { using var db = dbFactory.CreateDbContext(); |
