summaryrefslogtreecommitdiff
path: root/Controllers/ApiTagController.cs
diff options
context:
space:
mode:
authorJake Mannens <jake@asger.xyz>2026-05-22 12:46:00 +1000
committerJake Mannens <jake@asger.xyz>2026-05-23 22:13:00 +1000
commit4ea3ddb38d010c2f85c22b7f1c3f2d7e0c1355e3 (patch)
tree90af9203059d645eb77216f1a091722ee9702438 /Controllers/ApiTagController.cs
parent6de5d7f5364fe1d54703da6d6b7cb08ea26e939f (diff)
Initial commitwasm-oldserver
Diffstat (limited to 'Controllers/ApiTagController.cs')
-rw-r--r--Controllers/ApiTagController.cs253
1 files changed, 0 insertions, 253 deletions
diff --git a/Controllers/ApiTagController.cs b/Controllers/ApiTagController.cs
deleted file mode 100644
index f48cc05..0000000
--- a/Controllers/ApiTagController.cs
+++ /dev/null
@@ -1,253 +0,0 @@
-using HyperBooru.ApiModels;
-using Microsoft.AspNetCore.Authorization;
-using Microsoft.AspNetCore.Mvc;
-using Microsoft.EntityFrameworkCore;
-
-namespace HyperBooru.Controllers;
-
-[ApiController]
-[Authorize]
-[Route("/api/tag")]
-public class ApiTagController : Controller {
- private IDbContextFactory<HBContext> dbFactory;
-
- public ApiTagController(IDbContextFactory<HBContext> dbFactory) =>
- this.dbFactory = dbFactory;
-
- [HttpGet("definition")]
- public async Task<IActionResult> GetAllTagDefinitionsAsync() {
- using var db = dbFactory.CreateDbContext();
-
- var definitions = await db.TagDefinitions
- .Include(td => td.ImplicitTags)
- .Select(td => (ApiModels.TagDefinition)td)
- .ToArrayAsync();
-
- return Ok(definitions);
- }
-
- [HttpGet("definition/{tagDefinitionId}")]
- public async Task<IActionResult> GetTagDefinitionAsync([FromRoute] Guid tagDefinitionId) {
- using var db = dbFactory.CreateDbContext();
-
- var tagDefinition = await db.TagDefinitions
- .Include(td => td.ImplicitTags)
- .FirstOrDefaultAsync(td => td.Guid == tagDefinitionId);
-
- return tagDefinition is not null ? Ok(tagDefinition) : NotFound();
- }
-
- [HttpPost("definition")]
- public async Task<IActionResult> CreateTagDefinitionAsync([FromBody] TagCreateRequest request) {
- using var db = dbFactory.CreateDbContext();
- using var transaction = await db.Database.BeginTransactionAsync();
-
- if(db.TagDefinitions.Any(td => td.Name == request.Name))
- return BadRequest("Name already exists");
-
- if(request.Alias is not null)
- if(db.TagDefinitions.Any(td => td.Alias == request.Alias))
- return BadRequest("Alias already exists");
-
- List<TagDefinition> implicitTags = new();
- if(request.ImplicitTags is not null) {
- implicitTags = await db.TagDefinitions
- .Where(td => request.ImplicitTags.Distinct().Contains(td.Guid))
- .ToListAsync();
- }
-
- var tagDefinition = new TagDefinition {
- Source = TagSource.UserTag,
- Namespace = request.Namespace,
- Name = request.Name,
- Alias = request.Alias,
- ImplicitTags = implicitTags
- };
-
- db.TagDefinitions.Add(tagDefinition);
-
- await db.SaveChangesAsync();
- await transaction.CommitAsync();
-
- return Ok((ApiModels.TagDefinition) tagDefinition);
- }
-
- [HttpDelete("definition/{tagDefinitionId}")]
- public async Task<IActionResult> DeleteTagDefinitionAsync([FromRoute] Guid tagDefinitionId) {
- using var db = dbFactory.CreateDbContext();
- using var transaction = await db.Database.BeginTransactionAsync();
-
- var tagDefinition = await db.TagDefinitions
- .FirstOrDefaultAsync(td => td.Guid == tagDefinitionId);
-
- if(tagDefinition is null)
- return NotFound("Tag definition not found");
-
- if(tagDefinition.ObjectId < 0)
- return BadRequest("Cannot delete built-in tag definition");
-
- db.TagDefinitions.Remove(tagDefinition);
-
- await db.SaveChangesAsync();
- await transaction.CommitAsync();
-
- return Ok();
- }
-
- [HttpPatch("definition/{tagDefinitionId}")]
- public async Task<IActionResult> UpdateTagDefinitionAsync(
- [FromRoute] Guid tagDefinitionId,
- [FromBody] TagUpdateRequest request) {
-
- using var db = dbFactory.CreateDbContext();
- using var transaction = await db.Database.BeginTransactionAsync();
-
- var tagDefinition = await db.TagDefinitions
- .FirstOrDefaultAsync(td => td.Guid == tagDefinitionId);
-
- if(tagDefinition is null)
- return NotFound("Tag definition not found");
-
- if(tagDefinition.ObjectId < 0)
- return BadRequest("Cannot update built-in tag definition");
-
- if(request.Name is not null)
- if(db.TagDefinitions.Any(td => td.Name == request.Name))
- return BadRequest("Name already exists");
-
- if(request.Alias is not null)
- if(db.TagDefinitions.Any(td => td.Alias == request.Alias))
- return BadRequest("Alias already exists");
-
- tagDefinition.Namespace = request.Namespace ?? tagDefinition.Namespace;
- tagDefinition.Name = request.Name ?? tagDefinition.Name;
- tagDefinition.Alias = request.Alias ?? tagDefinition.Alias;
-
- await db.SaveChangesAsync();
- await transaction.CommitAsync();
-
- return Ok((ApiModels.TagDefinition) tagDefinition);
- }
-
- [HttpPatch("definition/{tagDefinitionId}/implicit")]
- public async Task<IActionResult> AddImplicitTagsAsync(
- [FromRoute] Guid tagDefinitionId,
- [FromBody] Guid[] implicitTagIds) {
-
- using var db = dbFactory.CreateDbContext();
- using var transaction = await db.Database.BeginTransactionAsync();
-
- var tagDefinition = await db.TagDefinitions
- .Include(td => td.ImplicitTags)
- .FirstOrDefaultAsync(td => td.Guid == tagDefinitionId);
-
- if(tagDefinition is null)
- return NotFound("Tag definition not found");
-
- if(tagDefinition.ObjectId < 0)
- return BadRequest("Cannot update built-in tag definition");
-
- implicitTagIds = implicitTagIds.Distinct().ToArray();
-
- var implicitTags = db.TagDefinitions
- .Where(td => implicitTagIds.Contains(td.Guid))
- .ToArray();
-
- var missingTags = implicitTagIds.Except(implicitTags.Select(td => td.Guid));
- var missingTagsString = string.Join(", ", missingTags.Select(td => td.ToString()));
- if(missingTags.Any())
- return BadRequest($"Invalid tag IDs specified: {missingTagsString}");
-
- tagDefinition.ImplicitTags.AddRange(
- implicitTags.ExceptBy(tagDefinition.ImplicitTags.Select(td => td.Guid), td => td.Guid));
-
- await db.SaveChangesAsync();
- await transaction.CommitAsync();
-
- return Ok();
- }
-
- [HttpPut("definition/{tagDefinitionId}/implicit")]
- public async Task<IActionResult> ReplaceImplicitTagsAsync(
- [FromRoute] Guid tagDefinitionId,
- [FromBody] Guid[] implicitTagIds) {
-
- using var db = dbFactory.CreateDbContext();
- using var transaction = await db.Database.BeginTransactionAsync();
-
- var tagDefinition = await db.TagDefinitions
- .Include(td => td.ImplicitTags)
- .FirstOrDefaultAsync(td => td.Guid == tagDefinitionId);
-
- if(tagDefinition is null)
- return NotFound("Tag definition not found");
-
- if(tagDefinition.ObjectId < 0)
- return BadRequest("Cannot update built-in tag definition");
-
- implicitTagIds = implicitTagIds.Distinct().ToArray();
-
- var implicitTags = db.TagDefinitions
- .Where(td => implicitTagIds.Contains(td.Guid))
- .ToArray();
-
- var missingTags = implicitTagIds.Except(implicitTags.Select(td => td.Guid));
- var missingTagsString = string.Join(", ", missingTags.Select(td => td.ToString()));
- if(missingTags.Any())
- return BadRequest($"Invalid tag IDs specified: {missingTagsString}");
-
- tagDefinition.ImplicitTags.AddRange(
- implicitTags.ExceptBy(tagDefinition.ImplicitTags.Select(td => td.Guid), td => td.Guid));
-
- var toRemove = tagDefinition.ImplicitTags
- .Where(td => !implicitTags.Select(td => td.Guid).Contains(td.Guid))
- .ToArray();
-
- foreach(var td in toRemove)
- tagDefinition.ImplicitTags.Remove(td);
-
- await db.SaveChangesAsync();
- await transaction.CommitAsync();
-
- return Ok();
- }
-
- [HttpPost("definition/{tagDefinitionId}/implicit/delete")]
- public async Task<IActionResult> DeleteImplicitTagAsync(
- [FromRoute] Guid tagDefinitionId,
- [FromBody] Guid[] implicitTagIds) {
-
- using var db = dbFactory.CreateDbContext();
- using var transaction = await db.Database.BeginTransactionAsync();
-
- var tagDefinition = await db.TagDefinitions
- .Include(td => td.ImplicitTags)
- .FirstOrDefaultAsync(td => td.Guid == tagDefinitionId);
-
- if(tagDefinition is null)
- return NotFound("Tag definition not found");
-
- if(tagDefinition.ObjectId < 0)
- return BadRequest("Cannot update built-in tag definition");
-
- implicitTagIds = implicitTagIds.Distinct().ToArray();
-
- var missingTagIds = implicitTagIds
- .Except(tagDefinition.ImplicitTags.Select(td => td.Guid));
- var missingTagsString = string.Join(", ", missingTagIds.Select(td => td.ToString()));
- if(missingTagIds.Any())
- return BadRequest($"Invalid tag IDs specified: {missingTagsString}");
-
- var toRemove = tagDefinition.ImplicitTags
- .Where(td => !implicitTagIds.Contains(td.Guid))
- .ToArray();
-
- foreach(var td in toRemove)
- tagDefinition.ImplicitTags.Remove(td);
-
- await db.SaveChangesAsync();
- await transaction.CommitAsync();
-
- return Ok();
- }
-}