summaryrefslogtreecommitdiff
path: root/Services
diff options
context:
space:
mode:
Diffstat (limited to 'Services')
-rw-r--r--Services/ConfigService.cs10
-rw-r--r--Services/TagService.cs35
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();