diff --git a/API/APIEndpointRecords/DownloadAvailableJobsRecord.cs b/API/APIEndpointRecords/DownloadAvailableJobsRecord.cs
new file mode 100644
index 0000000..a272df3
--- /dev/null
+++ b/API/APIEndpointRecords/DownloadAvailableJobsRecord.cs
@@ -0,0 +1,5 @@
+using System.ComponentModel.DataAnnotations;
+
+namespace API.APIEndpointRecords;
+
+public record DownloadAvailableJobsRecord([Required]ulong recurrenceTimeMs, [Required]string localLibraryId);
\ No newline at end of file
diff --git a/API/APIEndpointRecords/NewLibraryRecord.cs b/API/APIEndpointRecords/NewLibraryRecord.cs
new file mode 100644
index 0000000..88769d9
--- /dev/null
+++ b/API/APIEndpointRecords/NewLibraryRecord.cs
@@ -0,0 +1,3 @@
+namespace API.APIEndpointRecords;
+
+public record NewLibraryRecord(string path, string name);
\ No newline at end of file
diff --git a/API/Controllers/JobController.cs b/API/Controllers/JobController.cs
index 9383f7c..ea3c651 100644
--- a/API/Controllers/JobController.cs
+++ b/API/Controllers/JobController.cs
@@ -100,20 +100,37 @@ public class JobController(PgsqlContext context) : Controller
/// Create a new DownloadAvailableChaptersJob
///
/// ID of Manga
- /// How often should we check for new chapters
+ /// Job-Configuration
/// Job-IDs
+ /// Could not find Library with ID
/// Could not find Manga with ID
/// Error during Database Operation
[HttpPut("DownloadAvailableChaptersJob/{MangaId}")]
[ProducesResponseType(Status201Created, "application/json")]
+ [ProducesResponseType(Status400BadRequest)]
[ProducesResponseType(Status404NotFound)]
[ProducesResponseType(Status500InternalServerError, "text/plain")]
- public IActionResult CreateNewDownloadChapterJob(string MangaId, [FromBody]ulong recurrenceTime)
+ public IActionResult CreateDownloadAvailableChaptersJob(string MangaId, [FromBody]DownloadAvailableJobsRecord record)
{
- if (context.Manga.Find(MangaId) is null)
+ if (context.Mangas.Find(MangaId) is not { } m)
return NotFound();
- Job dep = new RetrieveChaptersJob(recurrenceTime, MangaId);
- Job job = new DownloadAvailableChaptersJob(recurrenceTime, MangaId, null, [dep.JobId]);
+ else
+ {
+ try
+ {
+ LocalLibrary? l = context.LocalLibraries.Find(record.localLibraryId);
+ if (l is null)
+ return BadRequest();
+ m.Library = l;
+ context.SaveChanges();
+ }
+ catch (Exception e)
+ {
+ return StatusCode(500, e.Message);
+ }
+ }
+ Job dep = new RetrieveChaptersJob(record.recurrenceTimeMs, MangaId);
+ Job job = new DownloadAvailableChaptersJob(record.recurrenceTimeMs, MangaId, null, [dep.JobId]);
return AddJobs([dep, job]);
}
@@ -149,7 +166,7 @@ public class JobController(PgsqlContext context) : Controller
[ProducesResponseType(Status500InternalServerError, "text/plain")]
public IActionResult CreateUpdateFilesDownloadedJob(string MangaId)
{
- if(context.Manga.Find(MangaId) is null)
+ if(context.Mangas.Find(MangaId) is null)
return NotFound();
Job job = new UpdateFilesDownloadedJob(0, MangaId);
return AddJobs([job]);
@@ -165,7 +182,7 @@ public class JobController(PgsqlContext context) : Controller
[ProducesResponseType(Status500InternalServerError, "text/plain")]
public IActionResult CreateUpdateAllFilesDownloadedJob()
{
- List ids = context.Manga.Select(m => m.MangaId).ToList();
+ List ids = context.Mangas.Select(m => m.MangaId).ToList();
List jobs = ids.Select(id => new UpdateFilesDownloadedJob(0, id)).ToList();
try
{
@@ -192,7 +209,7 @@ public class JobController(PgsqlContext context) : Controller
[ProducesResponseType(Status500InternalServerError, "text/plain")]
public IActionResult CreateUpdateMetadataJob(string MangaId)
{
- if(context.Manga.Find(MangaId) is null)
+ if(context.Mangas.Find(MangaId) is null)
return NotFound();
Job job = new UpdateMetadataJob(0, MangaId);
return AddJobs([job]);
@@ -208,7 +225,7 @@ public class JobController(PgsqlContext context) : Controller
[ProducesResponseType(Status500InternalServerError, "text/plain")]
public IActionResult CreateUpdateAllMetadataJob()
{
- List ids = context.Manga.Select(m => m.MangaId).ToList();
+ List ids = context.Mangas.Select(m => m.MangaId).ToList();
List jobs = ids.Select(id => new UpdateMetadataJob(0, id)).ToList();
try
{
diff --git a/API/Controllers/LocalLibrariesController.cs b/API/Controllers/LocalLibrariesController.cs
new file mode 100644
index 0000000..192f6db
--- /dev/null
+++ b/API/Controllers/LocalLibrariesController.cs
@@ -0,0 +1,127 @@
+using API.APIEndpointRecords;
+using API.Schema;
+using Asp.Versioning;
+using Microsoft.AspNetCore.Mvc;
+using static Microsoft.AspNetCore.Http.StatusCodes;
+
+namespace API.Controllers;
+
+[ApiVersion(2)]
+[ApiController]
+[Route("v{v:apiVersion}/[controller]")]
+public class LocalLibrariesController(PgsqlContext context) : Controller
+{
+ [HttpGet]
+ [ProducesResponseType(Status200OK, "application/json")]
+ public IActionResult GetLocalLibraries()
+ {
+ return Ok(context.LocalLibraries);
+ }
+
+ [HttpGet("{LibraryId}")]
+ [ProducesResponseType(Status200OK, "application/json")]
+ [ProducesResponseType(Status404NotFound)]
+ public IActionResult GetLocalLibrary(string LibraryId)
+ {
+ LocalLibrary? library = context.LocalLibraries.Find(LibraryId);
+ if (library is null)
+ return NotFound();
+ return Ok(library);
+ }
+
+ [HttpPatch("{LibraryId}/ChangeBasePath")]
+ [ProducesResponseType(Status200OK)]
+ [ProducesResponseType(Status404NotFound)]
+ [ProducesResponseType(Status400BadRequest)]
+ [ProducesResponseType(Status500InternalServerError, "text/plain")]
+ public IActionResult ChangeLibraryBasePath(string LibraryId, [FromBody] string newBasePath)
+ {
+ try
+ {
+ LocalLibrary? library = context.LocalLibraries.Find(LibraryId);
+ if (library is null)
+ return NotFound();
+
+ if (false) //TODO implement path check
+ return BadRequest();
+
+ library.BasePath = newBasePath;
+ context.SaveChanges();
+
+ return Ok();
+ }
+ catch (Exception e)
+ {
+ return StatusCode(500, e.Message);
+ }
+ }
+
+ [HttpPatch("{LibraryId}/ChangeName")]
+ [ProducesResponseType(Status200OK)]
+ [ProducesResponseType(Status404NotFound)]
+ [ProducesResponseType(Status400BadRequest)]
+ [ProducesResponseType(Status500InternalServerError, "text/plain")]
+ public IActionResult ChangeLibraryName(string LibraryId, [FromBody] string newName)
+ {
+ try
+ {
+ LocalLibrary? library = context.LocalLibraries.Find(LibraryId);
+ if (library is null)
+ return NotFound();
+
+ if(newName.Length < 1)
+ return BadRequest();
+
+ library.LibraryName = newName;
+ context.SaveChanges();
+
+ return Ok();
+ }
+ catch (Exception e)
+ {
+ return StatusCode(500, e.Message);
+ }
+ }
+
+ [HttpPut]
+ [ProducesResponseType(Status200OK, "application/json")]
+ [ProducesResponseType(Status500InternalServerError, "text/plain")]
+ public IActionResult CreateNewLibrary([FromBody] NewLibraryRecord library)
+ {
+ try
+ {
+ LocalLibrary newLibrary = new (library.path, library.name);
+ context.LocalLibraries.Add(newLibrary);
+ context.SaveChanges();
+
+ return Ok(newLibrary);
+ }
+ catch (Exception e)
+ {
+ return StatusCode(500, e.Message);
+ }
+ }
+
+ [HttpDelete("{LibraryId}")]
+ [ProducesResponseType(Status200OK)]
+ [ProducesResponseType(Status404NotFound)]
+ [ProducesResponseType(Status500InternalServerError, "text/plain")]
+ public IActionResult DeleteLocalLibrary(string LibraryId)
+ {
+
+ try
+ {
+ LocalLibrary? library = context.LocalLibraries.Find(LibraryId);
+ if (library is null)
+ return NotFound();
+ context.Remove(library);
+ context.SaveChanges();
+
+ return Ok();
+ }
+ catch (Exception e)
+ {
+ return StatusCode(500, e.Message);
+ }
+ }
+}
\ No newline at end of file
diff --git a/API/Controllers/MangaController.cs b/API/Controllers/MangaController.cs
index 100c02e..b3ac3c9 100644
--- a/API/Controllers/MangaController.cs
+++ b/API/Controllers/MangaController.cs
@@ -23,7 +23,7 @@ public class MangaController(PgsqlContext context) : Controller
[ProducesResponseType(Status200OK, "application/json")]
public IActionResult GetAllManga()
{
- Manga[] ret = context.Manga.ToArray();
+ Manga[] ret = context.Mangas.ToArray();
return Ok(ret);
}
@@ -36,7 +36,7 @@ public class MangaController(PgsqlContext context) : Controller
[ProducesResponseType(Status200OK, "application/json")]
public IActionResult GetManga([FromBody]string[] ids)
{
- Manga[] ret = context.Manga.Where(m => ids.Contains(m.MangaId)).ToArray();
+ Manga[] ret = context.Mangas.Where(m => ids.Contains(m.MangaId)).ToArray();
return Ok(ret);
}
@@ -51,7 +51,7 @@ public class MangaController(PgsqlContext context) : Controller
[ProducesResponseType(Status404NotFound)]
public IActionResult GetManga(string MangaId)
{
- Manga? ret = context.Manga.Find(MangaId);
+ Manga? ret = context.Mangas.Find(MangaId);
if (ret is null)
return NotFound();
return Ok(ret);
@@ -72,7 +72,7 @@ public class MangaController(PgsqlContext context) : Controller
{
try
{
- Manga? ret = context.Manga.Find(MangaId);
+ Manga? ret = context.Mangas.Find(MangaId);
if (ret is null)
return NotFound();
@@ -103,7 +103,7 @@ public class MangaController(PgsqlContext context) : Controller
[ProducesResponseType(Status404NotFound)]
public IActionResult GetCover(string MangaId, [FromQuery]int? width, [FromQuery]int? height)
{
- Manga? m = context.Manga.Find(MangaId);
+ Manga? m = context.Mangas.Find(MangaId);
if (m is null)
return NotFound();
if (!System.IO.File.Exists(m.CoverFileNameInCache))
@@ -148,7 +148,7 @@ public class MangaController(PgsqlContext context) : Controller
[ProducesResponseType(Status404NotFound)]
public IActionResult GetChapters(string MangaId)
{
- Manga? m = context.Manga.Find(MangaId);
+ Manga? m = context.Mangas.Find(MangaId);
if (m is null)
return NotFound();
@@ -169,7 +169,7 @@ public class MangaController(PgsqlContext context) : Controller
[ProducesResponseType(Status404NotFound)]
public IActionResult GetChaptersDownloaded(string MangaId)
{
- Manga? m = context.Manga.Find(MangaId);
+ Manga? m = context.Mangas.Find(MangaId);
if (m is null)
return NotFound();
@@ -193,7 +193,7 @@ public class MangaController(PgsqlContext context) : Controller
[ProducesResponseType(Status404NotFound)]
public IActionResult GetChaptersNotDownloaded(string MangaId)
{
- Manga? m = context.Manga.Find(MangaId);
+ Manga? m = context.Mangas.Find(MangaId);
if (m is null)
return NotFound();
@@ -219,7 +219,7 @@ public class MangaController(PgsqlContext context) : Controller
[ProducesResponseType(Status500InternalServerError, "text/plain")]
public IActionResult GetLatestChapter(string MangaId)
{
- Manga? m = context.Manga.Find(MangaId);
+ Manga? m = context.Mangas.Find(MangaId);
if (m is null)
return NotFound();
@@ -249,7 +249,7 @@ public class MangaController(PgsqlContext context) : Controller
[ProducesResponseType(Status500InternalServerError, "text/plain")]
public IActionResult GetLatestChapterDownloaded(string MangaId)
{
- Manga? m = context.Manga.Find(MangaId);
+ Manga? m = context.Mangas.Find(MangaId);
if (m is null)
return NotFound();
@@ -277,7 +277,7 @@ public class MangaController(PgsqlContext context) : Controller
[ProducesResponseType(Status500InternalServerError, "text/plain")]
public IActionResult IgnoreChaptersBefore(string MangaId, [FromBody]float chapterThreshold)
{
- Manga? m = context.Manga.Find(MangaId);
+ Manga? m = context.Mangas.Find(MangaId);
if (m is null)
return NotFound();
@@ -305,7 +305,7 @@ public class MangaController(PgsqlContext context) : Controller
[ProducesResponseType(Status500InternalServerError, "text/plain")]
public IActionResult MoveFolder(string MangaId, [FromBody]string folder)
{
- Manga? manga = context.Manga.Find(MangaId);
+ Manga? manga = context.Mangas.Find(MangaId);
if (manga is null)
return NotFound();
MoveFileOrFolderJob dep = manga.UpdateFolderName(TrangaSettings.downloadLocation, folder);
diff --git a/API/Controllers/QueryController.cs b/API/Controllers/QueryController.cs
index 3a4fb05..2254e33 100644
--- a/API/Controllers/QueryController.cs
+++ b/API/Controllers/QueryController.cs
@@ -36,7 +36,7 @@ public class QueryController(PgsqlContext context) : Controller
[ProducesResponseType(Status200OK, "application/json")]
public IActionResult GetMangaWithAuthorIds(string AuthorId)
{
- return Ok(context.Manga.Where(m => m.AuthorIds.Contains(AuthorId)));
+ return Ok(context.Mangas.Where(m => m.AuthorIds.Contains(AuthorId)));
}
///
@@ -50,7 +50,7 @@ public class QueryController(PgsqlContext context) : Controller
[ProducesResponseType(Status404NotFound)]
public IActionResult GetLink(string LinkId)
{
- Link? ret = context.Link.Find(LinkId);
+ Link? ret = context.Links.Find(LinkId);
if (ret is null)
return NotFound();
return Ok(ret);
@@ -82,7 +82,7 @@ public class QueryController(PgsqlContext context) : Controller
[ProducesResponseType(Status200OK, "application/json")]
public IActionResult GetMangasWithTag(string Tag)
{
- return Ok(context.Manga.Where(m => m.Tags.Contains(Tag)));
+ return Ok(context.Mangas.Where(m => m.Tags.Contains(Tag)));
}
///
diff --git a/API/Controllers/SearchController.cs b/API/Controllers/SearchController.cs
index 08d6c1a..95639bd 100644
--- a/API/Controllers/SearchController.cs
+++ b/API/Controllers/SearchController.cs
@@ -131,7 +131,7 @@ public class SearchController(PgsqlContext context) : Controller
if (manga is null)
return null;
- Manga? existing = context.Manga.Find(manga.MangaId);
+ Manga? existing = context.Mangas.Find(manga.MangaId);
if (tags is not null)
{
@@ -163,13 +163,13 @@ public class SearchController(PgsqlContext context) : Controller
{
IEnumerable mergedLinks = links.Select(ml =>
{
- Link? inDb = context.Link.Find(ml.LinkId);
+ Link? inDb = context.Links.Find(ml.LinkId);
return inDb ?? ml;
});
manga.Links = mergedLinks.ToList();
IEnumerable newLinks = manga.Links
- .Where(ml => !context.Link.Select(l => l.LinkId).Contains(ml.LinkId));
- context.Link.AddRange(newLinks);
+ .Where(ml => !context.Links.Select(l => l.LinkId).Contains(ml.LinkId));
+ context.Links.AddRange(newLinks);
}
if (altTitles is not null)
@@ -187,9 +187,9 @@ public class SearchController(PgsqlContext context) : Controller
existing?.UpdateWithInfo(manga);
if(existing is not null)
- context.Manga.Update(existing);
+ context.Mangas.Update(existing);
else
- context.Manga.Add(manga);
+ context.Mangas.Add(manga);
context.Jobs.Add(new DownloadMangaCoverJob(manga.MangaId));
context.Jobs.Add(new RetrieveChaptersJob(0, manga.MangaId));
diff --git a/API/Migrations/20250303141044_dev-030325-1.Designer.cs b/API/Migrations/20250303141044_dev-030325-1.Designer.cs
deleted file mode 100644
index 967b398..0000000
--- a/API/Migrations/20250303141044_dev-030325-1.Designer.cs
+++ /dev/null
@@ -1,672 +0,0 @@
-//
-using System;
-using API.Schema;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Migrations;
-using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
-using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
-
-#nullable disable
-
-namespace API.Migrations
-{
- [DbContext(typeof(PgsqlContext))]
- [Migration("20250303141044_dev-030325-1")]
- partial class dev0303251
- {
- ///
- protected override void BuildTargetModel(ModelBuilder modelBuilder)
- {
-#pragma warning disable 612, 618
- modelBuilder
- .HasAnnotation("ProductVersion", "9.0.0")
- .HasAnnotation("Relational:MaxIdentifierLength", 63);
-
- NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
-
- modelBuilder.Entity("API.Schema.Author", b =>
- {
- b.Property("AuthorId")
- .HasMaxLength(64)
- .HasColumnType("character varying(64)");
-
- b.Property("AuthorName")
- .IsRequired()
- .HasColumnType("text");
-
- b.HasKey("AuthorId");
-
- b.ToTable("Authors");
- });
-
- modelBuilder.Entity("API.Schema.Chapter", b =>
- {
- b.Property("ChapterId")
- .HasMaxLength(64)
- .HasColumnType("character varying(64)");
-
- b.Property("ArchiveFileName")
- .IsRequired()
- .HasColumnType("text");
-
- b.Property("ChapterNumber")
- .IsRequired()
- .HasMaxLength(10)
- .HasColumnType("character varying(10)");
-
- b.Property("Downloaded")
- .HasColumnType("boolean");
-
- b.Property("ParentMangaId")
- .IsRequired()
- .HasColumnType("character varying(64)");
-
- b.Property("Title")
- .HasColumnType("text");
-
- b.Property("Url")
- .IsRequired()
- .HasColumnType("text");
-
- b.Property("VolumeNumber")
- .HasColumnType("integer");
-
- b.HasKey("ChapterId");
-
- b.HasIndex("ParentMangaId");
-
- b.ToTable("Chapters");
- });
-
- modelBuilder.Entity("API.Schema.Jobs.Job", b =>
- {
- b.Property("JobId")
- .HasMaxLength(64)
- .HasColumnType("character varying(64)");
-
- b.PrimitiveCollection("DependsOnJobsIds")
- .HasMaxLength(64)
- .HasColumnType("text[]");
-
- b.Property("JobId1")
- .HasColumnType("character varying(64)");
-
- b.Property("JobType")
- .HasColumnType("smallint");
-
- b.Property("LastExecution")
- .HasColumnType("timestamp with time zone");
-
- b.Property("ParentJobId")
- .HasMaxLength(64)
- .HasColumnType("character varying(64)");
-
- b.Property("RecurrenceMs")
- .HasColumnType("numeric(20,0)");
-
- b.Property("state")
- .HasColumnType("integer");
-
- b.HasKey("JobId");
-
- b.HasIndex("JobId1");
-
- b.HasIndex("ParentJobId");
-
- b.ToTable("Jobs");
-
- b.HasDiscriminator("JobType");
-
- b.UseTphMappingStrategy();
- });
-
- modelBuilder.Entity("API.Schema.LibraryConnectors.LibraryConnector", b =>
- {
- b.Property("LibraryConnectorId")
- .HasMaxLength(64)
- .HasColumnType("character varying(64)");
-
- b.Property("Auth")
- .IsRequired()
- .HasColumnType("text");
-
- b.Property("BaseUrl")
- .IsRequired()
- .HasColumnType("text");
-
- b.Property("LibraryType")
- .HasColumnType("smallint");
-
- b.HasKey("LibraryConnectorId");
-
- b.ToTable("LibraryConnectors");
-
- b.HasDiscriminator("LibraryType");
-
- b.UseTphMappingStrategy();
- });
-
- modelBuilder.Entity("API.Schema.Link", b =>
- {
- b.Property("LinkId")
- .HasMaxLength(64)
- .HasColumnType("character varying(64)");
-
- b.Property("LinkProvider")
- .IsRequired()
- .HasColumnType("text");
-
- b.Property("LinkUrl")
- .IsRequired()
- .HasColumnType("text");
-
- b.Property("MangaId")
- .HasColumnType("character varying(64)");
-
- b.HasKey("LinkId");
-
- b.HasIndex("MangaId");
-
- b.ToTable("Link");
- });
-
- modelBuilder.Entity("API.Schema.Manga", b =>
- {
- b.Property("MangaId")
- .HasMaxLength(64)
- .HasColumnType("character varying(64)");
-
- b.Property("ConnectorId")
- .IsRequired()
- .HasMaxLength(64)
- .HasColumnType("character varying(64)");
-
- b.Property("CoverFileNameInCache")
- .HasColumnType("text");
-
- b.Property("CoverUrl")
- .IsRequired()
- .HasColumnType("text");
-
- b.Property("Description")
- .IsRequired()
- .HasColumnType("text");
-
- b.Property("FolderName")
- .IsRequired()
- .HasColumnType("text");
-
- b.Property("IgnoreChapterBefore")
- .HasColumnType("real");
-
- b.Property("MangaConnectorId")
- .IsRequired()
- .HasColumnType("character varying(32)");
-
- b.Property("Name")
- .IsRequired()
- .HasColumnType("text");
-
- b.Property("OriginalLanguage")
- .HasColumnType("text");
-
- b.Property("ReleaseStatus")
- .HasColumnType("smallint");
-
- b.Property("WebsiteUrl")
- .IsRequired()
- .HasColumnType("text");
-
- b.Property("Year")
- .HasColumnType("bigint");
-
- b.HasKey("MangaId");
-
- b.HasIndex("MangaConnectorId");
-
- b.ToTable("Manga");
- });
-
- modelBuilder.Entity("API.Schema.MangaAltTitle", b =>
- {
- b.Property("AltTitleId")
- .HasMaxLength(64)
- .HasColumnType("character varying(64)");
-
- b.Property("Language")
- .IsRequired()
- .HasMaxLength(8)
- .HasColumnType("character varying(8)");
-
- b.Property("MangaId")
- .HasColumnType("character varying(64)");
-
- b.Property("Title")
- .IsRequired()
- .HasColumnType("text");
-
- b.HasKey("AltTitleId");
-
- b.HasIndex("MangaId");
-
- b.ToTable("AltTitles");
- });
-
- modelBuilder.Entity("API.Schema.MangaConnectors.MangaConnector", b =>
- {
- b.Property("Name")
- .HasMaxLength(32)
- .HasColumnType("character varying(32)");
-
- b.PrimitiveCollection("BaseUris")
- .IsRequired()
- .HasColumnType("text[]");
-
- b.PrimitiveCollection("SupportedLanguages")
- .IsRequired()
- .HasColumnType("text[]");
-
- b.HasKey("Name");
-
- b.ToTable("MangaConnectors");
-
- b.HasDiscriminator("Name").HasValue("MangaConnector");
-
- b.UseTphMappingStrategy();
- });
-
- modelBuilder.Entity("API.Schema.MangaTag", b =>
- {
- b.Property("Tag")
- .HasColumnType("text");
-
- b.HasKey("Tag");
-
- b.ToTable("Tags");
- });
-
- modelBuilder.Entity("API.Schema.Notification", b =>
- {
- b.Property("NotificationId")
- .HasMaxLength(64)
- .HasColumnType("character varying(64)");
-
- b.Property("Date")
- .HasColumnType("timestamp with time zone");
-
- b.Property("Message")
- .IsRequired()
- .HasColumnType("text");
-
- b.Property("Title")
- .IsRequired()
- .HasColumnType("text");
-
- b.Property("Urgency")
- .HasColumnType("smallint");
-
- b.HasKey("NotificationId");
-
- b.ToTable("Notifications");
- });
-
- modelBuilder.Entity("API.Schema.NotificationConnectors.NotificationConnector", b =>
- {
- b.Property("NotificationConnectorId")
- .HasMaxLength(64)
- .HasColumnType("character varying(64)");
-
- b.Property("NotificationConnectorType")
- .HasColumnType("smallint");
-
- b.HasKey("NotificationConnectorId");
-
- b.ToTable("NotificationConnectors");
-
- b.HasDiscriminator("NotificationConnectorType");
-
- b.UseTphMappingStrategy();
- });
-
- modelBuilder.Entity("AuthorManga", b =>
- {
- b.Property("AuthorsAuthorId")
- .HasColumnType("character varying(64)");
-
- b.Property("MangaId")
- .HasColumnType("character varying(64)");
-
- b.HasKey("AuthorsAuthorId", "MangaId");
-
- b.HasIndex("MangaId");
-
- b.ToTable("AuthorManga");
- });
-
- modelBuilder.Entity("MangaMangaTag", b =>
- {
- b.Property("MangaId")
- .HasColumnType("character varying(64)");
-
- b.Property("TagsTag")
- .HasColumnType("text");
-
- b.HasKey("MangaId", "TagsTag");
-
- b.HasIndex("TagsTag");
-
- b.ToTable("MangaMangaTag");
- });
-
- modelBuilder.Entity("API.Schema.Jobs.DownloadNewChaptersJob", b =>
- {
- b.HasBaseType("API.Schema.Jobs.Job");
-
- b.Property("MangaId")
- .IsRequired()
- .HasMaxLength(64)
- .HasColumnType("character varying(64)");
-
- b.HasIndex("MangaId");
-
- b.HasDiscriminator().HasValue((byte)1);
- });
-
- modelBuilder.Entity("API.Schema.Jobs.DownloadSingleChapterJob", b =>
- {
- b.HasBaseType("API.Schema.Jobs.Job");
-
- b.Property("ChapterId")
- .IsRequired()
- .HasMaxLength(64)
- .HasColumnType("character varying(64)");
-
- b.HasIndex("ChapterId");
-
- b.HasDiscriminator().HasValue((byte)0);
- });
-
- modelBuilder.Entity("API.Schema.Jobs.MoveFileOrFolderJob", b =>
- {
- b.HasBaseType("API.Schema.Jobs.Job");
-
- b.Property("FromLocation")
- .IsRequired()
- .HasColumnType("text");
-
- b.Property("ToLocation")
- .IsRequired()
- .HasColumnType("text");
-
- b.HasDiscriminator().HasValue((byte)3);
- });
-
- modelBuilder.Entity("API.Schema.Jobs.UpdateMetadataJob", b =>
- {
- b.HasBaseType("API.Schema.Jobs.Job");
-
- b.Property("MangaId")
- .IsRequired()
- .HasMaxLength(64)
- .HasColumnType("character varying(64)");
-
- b.HasIndex("MangaId");
-
- b.ToTable("Jobs", t =>
- {
- t.Property("MangaId")
- .HasColumnName("UpdateMetadataJob_MangaId");
- });
-
- b.HasDiscriminator().HasValue((byte)2);
- });
-
- modelBuilder.Entity("API.Schema.LibraryConnectors.Kavita", b =>
- {
- b.HasBaseType("API.Schema.LibraryConnectors.LibraryConnector");
-
- b.HasDiscriminator().HasValue((byte)1);
- });
-
- modelBuilder.Entity("API.Schema.LibraryConnectors.Komga", b =>
- {
- b.HasBaseType("API.Schema.LibraryConnectors.LibraryConnector");
-
- b.HasDiscriminator().HasValue((byte)0);
- });
-
- modelBuilder.Entity("API.Schema.MangaConnectors.AsuraToon", b =>
- {
- b.HasBaseType("API.Schema.MangaConnectors.MangaConnector");
-
- b.HasDiscriminator().HasValue("AsuraToon");
- });
-
- modelBuilder.Entity("API.Schema.MangaConnectors.Bato", b =>
- {
- b.HasBaseType("API.Schema.MangaConnectors.MangaConnector");
-
- b.HasDiscriminator().HasValue("Bato");
- });
-
- modelBuilder.Entity("API.Schema.MangaConnectors.MangaDex", b =>
- {
- b.HasBaseType("API.Schema.MangaConnectors.MangaConnector");
-
- b.HasDiscriminator().HasValue("MangaDex");
- });
-
- modelBuilder.Entity("API.Schema.MangaConnectors.MangaHere", b =>
- {
- b.HasBaseType("API.Schema.MangaConnectors.MangaConnector");
-
- b.HasDiscriminator().HasValue("MangaHere");
- });
-
- modelBuilder.Entity("API.Schema.MangaConnectors.MangaKatana", b =>
- {
- b.HasBaseType("API.Schema.MangaConnectors.MangaConnector");
-
- b.HasDiscriminator().HasValue("MangaKatana");
- });
-
- modelBuilder.Entity("API.Schema.MangaConnectors.Mangaworld", b =>
- {
- b.HasBaseType("API.Schema.MangaConnectors.MangaConnector");
-
- b.HasDiscriminator().HasValue("Mangaworld");
- });
-
- modelBuilder.Entity("API.Schema.MangaConnectors.ManhuaPlus", b =>
- {
- b.HasBaseType("API.Schema.MangaConnectors.MangaConnector");
-
- b.HasDiscriminator().HasValue("ManhuaPlus");
- });
-
- modelBuilder.Entity("API.Schema.MangaConnectors.Weebcentral", b =>
- {
- b.HasBaseType("API.Schema.MangaConnectors.MangaConnector");
-
- b.HasDiscriminator().HasValue("Weebcentral");
- });
-
- modelBuilder.Entity("API.Schema.NotificationConnectors.Gotify", b =>
- {
- b.HasBaseType("API.Schema.NotificationConnectors.NotificationConnector");
-
- b.Property("AppToken")
- .IsRequired()
- .HasColumnType("text");
-
- b.Property("Endpoint")
- .IsRequired()
- .HasColumnType("text");
-
- b.HasDiscriminator().HasValue((byte)0);
- });
-
- modelBuilder.Entity("API.Schema.NotificationConnectors.Lunasea", b =>
- {
- b.HasBaseType("API.Schema.NotificationConnectors.NotificationConnector");
-
- b.Property("Id")
- .IsRequired()
- .HasColumnType("text");
-
- b.HasDiscriminator().HasValue((byte)1);
- });
-
- modelBuilder.Entity("API.Schema.NotificationConnectors.Ntfy", b =>
- {
- b.HasBaseType("API.Schema.NotificationConnectors.NotificationConnector");
-
- b.Property("Auth")
- .IsRequired()
- .HasColumnType("text");
-
- b.Property("Endpoint")
- .IsRequired()
- .HasColumnType("text");
-
- b.Property("Topic")
- .IsRequired()
- .HasColumnType("text");
-
- b.ToTable("NotificationConnectors", t =>
- {
- t.Property("Endpoint")
- .HasColumnName("Ntfy_Endpoint");
- });
-
- b.HasDiscriminator().HasValue((byte)2);
- });
-
- modelBuilder.Entity("API.Schema.Chapter", b =>
- {
- b.HasOne("API.Schema.Manga", "ParentManga")
- .WithMany()
- .HasForeignKey("ParentMangaId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("ParentManga");
- });
-
- modelBuilder.Entity("API.Schema.Jobs.Job", b =>
- {
- b.HasOne("API.Schema.Jobs.Job", null)
- .WithMany("DependsOnJobs")
- .HasForeignKey("JobId1");
-
- b.HasOne("API.Schema.Jobs.Job", "ParentJob")
- .WithMany()
- .HasForeignKey("ParentJobId");
-
- b.Navigation("ParentJob");
- });
-
- modelBuilder.Entity("API.Schema.Link", b =>
- {
- b.HasOne("API.Schema.Manga", null)
- .WithMany("Links")
- .HasForeignKey("MangaId");
- });
-
- modelBuilder.Entity("API.Schema.Manga", b =>
- {
- b.HasOne("API.Schema.MangaConnectors.MangaConnector", "MangaConnector")
- .WithMany()
- .HasForeignKey("MangaConnectorId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("MangaConnector");
- });
-
- modelBuilder.Entity("API.Schema.MangaAltTitle", b =>
- {
- b.HasOne("API.Schema.Manga", null)
- .WithMany("AltTitles")
- .HasForeignKey("MangaId");
- });
-
- modelBuilder.Entity("AuthorManga", b =>
- {
- b.HasOne("API.Schema.Author", null)
- .WithMany()
- .HasForeignKey("AuthorsAuthorId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.HasOne("API.Schema.Manga", null)
- .WithMany()
- .HasForeignKey("MangaId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("MangaMangaTag", b =>
- {
- b.HasOne("API.Schema.Manga", null)
- .WithMany()
- .HasForeignKey("MangaId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.HasOne("API.Schema.MangaTag", null)
- .WithMany()
- .HasForeignKey("TagsTag")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("API.Schema.Jobs.DownloadNewChaptersJob", b =>
- {
- b.HasOne("API.Schema.Manga", "Manga")
- .WithMany()
- .HasForeignKey("MangaId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Manga");
- });
-
- modelBuilder.Entity("API.Schema.Jobs.DownloadSingleChapterJob", b =>
- {
- b.HasOne("API.Schema.Chapter", "Chapter")
- .WithMany()
- .HasForeignKey("ChapterId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Chapter");
- });
-
- modelBuilder.Entity("API.Schema.Jobs.UpdateMetadataJob", b =>
- {
- b.HasOne("API.Schema.Manga", "Manga")
- .WithMany()
- .HasForeignKey("MangaId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Manga");
- });
-
- modelBuilder.Entity("API.Schema.Jobs.Job", b =>
- {
- b.Navigation("DependsOnJobs");
- });
-
- modelBuilder.Entity("API.Schema.Manga", b =>
- {
- b.Navigation("AltTitles");
-
- b.Navigation("Links");
- });
-#pragma warning restore 612, 618
- }
- }
-}
diff --git a/API/Migrations/20250303145324_dev-030325-2.Designer.cs b/API/Migrations/20250303145324_dev-030325-2.Designer.cs
deleted file mode 100644
index a28e0b6..0000000
--- a/API/Migrations/20250303145324_dev-030325-2.Designer.cs
+++ /dev/null
@@ -1,672 +0,0 @@
-//
-using System;
-using API.Schema;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Migrations;
-using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
-using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
-
-#nullable disable
-
-namespace API.Migrations
-{
- [DbContext(typeof(PgsqlContext))]
- [Migration("20250303145324_dev-030325-2")]
- partial class dev0303252
- {
- ///
- protected override void BuildTargetModel(ModelBuilder modelBuilder)
- {
-#pragma warning disable 612, 618
- modelBuilder
- .HasAnnotation("ProductVersion", "9.0.0")
- .HasAnnotation("Relational:MaxIdentifierLength", 63);
-
- NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
-
- modelBuilder.Entity("API.Schema.Author", b =>
- {
- b.Property("AuthorId")
- .HasMaxLength(64)
- .HasColumnType("character varying(64)");
-
- b.Property("AuthorName")
- .IsRequired()
- .HasColumnType("text");
-
- b.HasKey("AuthorId");
-
- b.ToTable("Authors");
- });
-
- modelBuilder.Entity("API.Schema.Chapter", b =>
- {
- b.Property("ChapterId")
- .HasMaxLength(64)
- .HasColumnType("character varying(64)");
-
- b.Property("ArchiveFileName")
- .IsRequired()
- .HasColumnType("text");
-
- b.Property("ChapterNumber")
- .IsRequired()
- .HasMaxLength(10)
- .HasColumnType("character varying(10)");
-
- b.Property("Downloaded")
- .HasColumnType("boolean");
-
- b.Property("ParentMangaId")
- .IsRequired()
- .HasColumnType("character varying(64)");
-
- b.Property("Title")
- .HasColumnType("text");
-
- b.Property("Url")
- .IsRequired()
- .HasColumnType("text");
-
- b.Property("VolumeNumber")
- .HasColumnType("integer");
-
- b.HasKey("ChapterId");
-
- b.HasIndex("ParentMangaId");
-
- b.ToTable("Chapters");
- });
-
- modelBuilder.Entity("API.Schema.Jobs.Job", b =>
- {
- b.Property("JobId")
- .HasMaxLength(64)
- .HasColumnType("character varying(64)");
-
- b.PrimitiveCollection("DependsOnJobsIds")
- .HasMaxLength(64)
- .HasColumnType("text[]");
-
- b.Property("JobId1")
- .HasColumnType("character varying(64)");
-
- b.Property("JobType")
- .HasColumnType("smallint");
-
- b.Property("LastExecution")
- .HasColumnType("timestamp with time zone");
-
- b.Property("ParentJobId")
- .HasMaxLength(64)
- .HasColumnType("character varying(64)");
-
- b.Property("RecurrenceMs")
- .HasColumnType("numeric(20,0)");
-
- b.Property("state")
- .HasColumnType("smallint");
-
- b.HasKey("JobId");
-
- b.HasIndex("JobId1");
-
- b.HasIndex("ParentJobId");
-
- b.ToTable("Jobs");
-
- b.HasDiscriminator("JobType");
-
- b.UseTphMappingStrategy();
- });
-
- modelBuilder.Entity("API.Schema.LibraryConnectors.LibraryConnector", b =>
- {
- b.Property("LibraryConnectorId")
- .HasMaxLength(64)
- .HasColumnType("character varying(64)");
-
- b.Property("Auth")
- .IsRequired()
- .HasColumnType("text");
-
- b.Property("BaseUrl")
- .IsRequired()
- .HasColumnType("text");
-
- b.Property("LibraryType")
- .HasColumnType("smallint");
-
- b.HasKey("LibraryConnectorId");
-
- b.ToTable("LibraryConnectors");
-
- b.HasDiscriminator("LibraryType");
-
- b.UseTphMappingStrategy();
- });
-
- modelBuilder.Entity("API.Schema.Link", b =>
- {
- b.Property("LinkId")
- .HasMaxLength(64)
- .HasColumnType("character varying(64)");
-
- b.Property("LinkProvider")
- .IsRequired()
- .HasColumnType("text");
-
- b.Property("LinkUrl")
- .IsRequired()
- .HasColumnType("text");
-
- b.Property("MangaId")
- .HasColumnType("character varying(64)");
-
- b.HasKey("LinkId");
-
- b.HasIndex("MangaId");
-
- b.ToTable("Link");
- });
-
- modelBuilder.Entity("API.Schema.Manga", b =>
- {
- b.Property("MangaId")
- .HasMaxLength(64)
- .HasColumnType("character varying(64)");
-
- b.Property("ConnectorId")
- .IsRequired()
- .HasMaxLength(64)
- .HasColumnType("character varying(64)");
-
- b.Property("CoverFileNameInCache")
- .HasColumnType("text");
-
- b.Property("CoverUrl")
- .IsRequired()
- .HasColumnType("text");
-
- b.Property("Description")
- .IsRequired()
- .HasColumnType("text");
-
- b.Property("FolderName")
- .IsRequired()
- .HasColumnType("text");
-
- b.Property("IgnoreChapterBefore")
- .HasColumnType("real");
-
- b.Property("MangaConnectorId")
- .IsRequired()
- .HasColumnType("character varying(32)");
-
- b.Property("Name")
- .IsRequired()
- .HasColumnType("text");
-
- b.Property("OriginalLanguage")
- .HasColumnType("text");
-
- b.Property("ReleaseStatus")
- .HasColumnType("smallint");
-
- b.Property("WebsiteUrl")
- .IsRequired()
- .HasColumnType("text");
-
- b.Property("Year")
- .HasColumnType("bigint");
-
- b.HasKey("MangaId");
-
- b.HasIndex("MangaConnectorId");
-
- b.ToTable("Manga");
- });
-
- modelBuilder.Entity("API.Schema.MangaAltTitle", b =>
- {
- b.Property("AltTitleId")
- .HasMaxLength(64)
- .HasColumnType("character varying(64)");
-
- b.Property("Language")
- .IsRequired()
- .HasMaxLength(8)
- .HasColumnType("character varying(8)");
-
- b.Property("MangaId")
- .HasColumnType("character varying(64)");
-
- b.Property("Title")
- .IsRequired()
- .HasColumnType("text");
-
- b.HasKey("AltTitleId");
-
- b.HasIndex("MangaId");
-
- b.ToTable("AltTitles");
- });
-
- modelBuilder.Entity("API.Schema.MangaConnectors.MangaConnector", b =>
- {
- b.Property("Name")
- .HasMaxLength(32)
- .HasColumnType("character varying(32)");
-
- b.PrimitiveCollection("BaseUris")
- .IsRequired()
- .HasColumnType("text[]");
-
- b.PrimitiveCollection("SupportedLanguages")
- .IsRequired()
- .HasColumnType("text[]");
-
- b.HasKey("Name");
-
- b.ToTable("MangaConnectors");
-
- b.HasDiscriminator("Name").HasValue("MangaConnector");
-
- b.UseTphMappingStrategy();
- });
-
- modelBuilder.Entity("API.Schema.MangaTag", b =>
- {
- b.Property("Tag")
- .HasColumnType("text");
-
- b.HasKey("Tag");
-
- b.ToTable("Tags");
- });
-
- modelBuilder.Entity("API.Schema.Notification", b =>
- {
- b.Property("NotificationId")
- .HasMaxLength(64)
- .HasColumnType("character varying(64)");
-
- b.Property("Date")
- .HasColumnType("timestamp with time zone");
-
- b.Property("Message")
- .IsRequired()
- .HasColumnType("text");
-
- b.Property("Title")
- .IsRequired()
- .HasColumnType("text");
-
- b.Property("Urgency")
- .HasColumnType("smallint");
-
- b.HasKey("NotificationId");
-
- b.ToTable("Notifications");
- });
-
- modelBuilder.Entity("API.Schema.NotificationConnectors.NotificationConnector", b =>
- {
- b.Property("NotificationConnectorId")
- .HasMaxLength(64)
- .HasColumnType("character varying(64)");
-
- b.Property("NotificationConnectorType")
- .HasColumnType("smallint");
-
- b.HasKey("NotificationConnectorId");
-
- b.ToTable("NotificationConnectors");
-
- b.HasDiscriminator("NotificationConnectorType");
-
- b.UseTphMappingStrategy();
- });
-
- modelBuilder.Entity("AuthorManga", b =>
- {
- b.Property("AuthorsAuthorId")
- .HasColumnType("character varying(64)");
-
- b.Property("MangaId")
- .HasColumnType("character varying(64)");
-
- b.HasKey("AuthorsAuthorId", "MangaId");
-
- b.HasIndex("MangaId");
-
- b.ToTable("AuthorManga");
- });
-
- modelBuilder.Entity("MangaMangaTag", b =>
- {
- b.Property("MangaId")
- .HasColumnType("character varying(64)");
-
- b.Property("TagsTag")
- .HasColumnType("text");
-
- b.HasKey("MangaId", "TagsTag");
-
- b.HasIndex("TagsTag");
-
- b.ToTable("MangaMangaTag");
- });
-
- modelBuilder.Entity("API.Schema.Jobs.DownloadNewChaptersJob", b =>
- {
- b.HasBaseType("API.Schema.Jobs.Job");
-
- b.Property("MangaId")
- .IsRequired()
- .HasMaxLength(64)
- .HasColumnType("character varying(64)");
-
- b.HasIndex("MangaId");
-
- b.HasDiscriminator().HasValue((byte)1);
- });
-
- modelBuilder.Entity("API.Schema.Jobs.DownloadSingleChapterJob", b =>
- {
- b.HasBaseType("API.Schema.Jobs.Job");
-
- b.Property("ChapterId")
- .IsRequired()
- .HasMaxLength(64)
- .HasColumnType("character varying(64)");
-
- b.HasIndex("ChapterId");
-
- b.HasDiscriminator().HasValue((byte)0);
- });
-
- modelBuilder.Entity("API.Schema.Jobs.MoveFileOrFolderJob", b =>
- {
- b.HasBaseType("API.Schema.Jobs.Job");
-
- b.Property("FromLocation")
- .IsRequired()
- .HasColumnType("text");
-
- b.Property("ToLocation")
- .IsRequired()
- .HasColumnType("text");
-
- b.HasDiscriminator().HasValue((byte)3);
- });
-
- modelBuilder.Entity("API.Schema.Jobs.UpdateMetadataJob", b =>
- {
- b.HasBaseType("API.Schema.Jobs.Job");
-
- b.Property("MangaId")
- .IsRequired()
- .HasMaxLength(64)
- .HasColumnType("character varying(64)");
-
- b.HasIndex("MangaId");
-
- b.ToTable("Jobs", t =>
- {
- t.Property("MangaId")
- .HasColumnName("UpdateMetadataJob_MangaId");
- });
-
- b.HasDiscriminator().HasValue((byte)2);
- });
-
- modelBuilder.Entity("API.Schema.LibraryConnectors.Kavita", b =>
- {
- b.HasBaseType("API.Schema.LibraryConnectors.LibraryConnector");
-
- b.HasDiscriminator().HasValue((byte)1);
- });
-
- modelBuilder.Entity("API.Schema.LibraryConnectors.Komga", b =>
- {
- b.HasBaseType("API.Schema.LibraryConnectors.LibraryConnector");
-
- b.HasDiscriminator().HasValue((byte)0);
- });
-
- modelBuilder.Entity("API.Schema.MangaConnectors.AsuraToon", b =>
- {
- b.HasBaseType("API.Schema.MangaConnectors.MangaConnector");
-
- b.HasDiscriminator().HasValue("AsuraToon");
- });
-
- modelBuilder.Entity("API.Schema.MangaConnectors.Bato", b =>
- {
- b.HasBaseType("API.Schema.MangaConnectors.MangaConnector");
-
- b.HasDiscriminator().HasValue("Bato");
- });
-
- modelBuilder.Entity("API.Schema.MangaConnectors.MangaDex", b =>
- {
- b.HasBaseType("API.Schema.MangaConnectors.MangaConnector");
-
- b.HasDiscriminator().HasValue("MangaDex");
- });
-
- modelBuilder.Entity("API.Schema.MangaConnectors.MangaHere", b =>
- {
- b.HasBaseType("API.Schema.MangaConnectors.MangaConnector");
-
- b.HasDiscriminator().HasValue("MangaHere");
- });
-
- modelBuilder.Entity("API.Schema.MangaConnectors.MangaKatana", b =>
- {
- b.HasBaseType("API.Schema.MangaConnectors.MangaConnector");
-
- b.HasDiscriminator().HasValue("MangaKatana");
- });
-
- modelBuilder.Entity("API.Schema.MangaConnectors.Mangaworld", b =>
- {
- b.HasBaseType("API.Schema.MangaConnectors.MangaConnector");
-
- b.HasDiscriminator().HasValue("Mangaworld");
- });
-
- modelBuilder.Entity("API.Schema.MangaConnectors.ManhuaPlus", b =>
- {
- b.HasBaseType("API.Schema.MangaConnectors.MangaConnector");
-
- b.HasDiscriminator().HasValue("ManhuaPlus");
- });
-
- modelBuilder.Entity("API.Schema.MangaConnectors.Weebcentral", b =>
- {
- b.HasBaseType("API.Schema.MangaConnectors.MangaConnector");
-
- b.HasDiscriminator().HasValue("Weebcentral");
- });
-
- modelBuilder.Entity("API.Schema.NotificationConnectors.Gotify", b =>
- {
- b.HasBaseType("API.Schema.NotificationConnectors.NotificationConnector");
-
- b.Property("AppToken")
- .IsRequired()
- .HasColumnType("text");
-
- b.Property("Endpoint")
- .IsRequired()
- .HasColumnType("text");
-
- b.HasDiscriminator().HasValue((byte)0);
- });
-
- modelBuilder.Entity("API.Schema.NotificationConnectors.Lunasea", b =>
- {
- b.HasBaseType("API.Schema.NotificationConnectors.NotificationConnector");
-
- b.Property("Id")
- .IsRequired()
- .HasColumnType("text");
-
- b.HasDiscriminator().HasValue((byte)1);
- });
-
- modelBuilder.Entity("API.Schema.NotificationConnectors.Ntfy", b =>
- {
- b.HasBaseType("API.Schema.NotificationConnectors.NotificationConnector");
-
- b.Property("Auth")
- .IsRequired()
- .HasColumnType("text");
-
- b.Property("Endpoint")
- .IsRequired()
- .HasColumnType("text");
-
- b.Property("Topic")
- .IsRequired()
- .HasColumnType("text");
-
- b.ToTable("NotificationConnectors", t =>
- {
- t.Property("Endpoint")
- .HasColumnName("Ntfy_Endpoint");
- });
-
- b.HasDiscriminator().HasValue((byte)2);
- });
-
- modelBuilder.Entity("API.Schema.Chapter", b =>
- {
- b.HasOne("API.Schema.Manga", "ParentManga")
- .WithMany()
- .HasForeignKey("ParentMangaId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("ParentManga");
- });
-
- modelBuilder.Entity("API.Schema.Jobs.Job", b =>
- {
- b.HasOne("API.Schema.Jobs.Job", null)
- .WithMany("DependsOnJobs")
- .HasForeignKey("JobId1");
-
- b.HasOne("API.Schema.Jobs.Job", "ParentJob")
- .WithMany()
- .HasForeignKey("ParentJobId");
-
- b.Navigation("ParentJob");
- });
-
- modelBuilder.Entity("API.Schema.Link", b =>
- {
- b.HasOne("API.Schema.Manga", null)
- .WithMany("Links")
- .HasForeignKey("MangaId");
- });
-
- modelBuilder.Entity("API.Schema.Manga", b =>
- {
- b.HasOne("API.Schema.MangaConnectors.MangaConnector", "MangaConnector")
- .WithMany()
- .HasForeignKey("MangaConnectorId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("MangaConnector");
- });
-
- modelBuilder.Entity("API.Schema.MangaAltTitle", b =>
- {
- b.HasOne("API.Schema.Manga", null)
- .WithMany("AltTitles")
- .HasForeignKey("MangaId");
- });
-
- modelBuilder.Entity("AuthorManga", b =>
- {
- b.HasOne("API.Schema.Author", null)
- .WithMany()
- .HasForeignKey("AuthorsAuthorId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.HasOne("API.Schema.Manga", null)
- .WithMany()
- .HasForeignKey("MangaId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("MangaMangaTag", b =>
- {
- b.HasOne("API.Schema.Manga", null)
- .WithMany()
- .HasForeignKey("MangaId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.HasOne("API.Schema.MangaTag", null)
- .WithMany()
- .HasForeignKey("TagsTag")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("API.Schema.Jobs.DownloadNewChaptersJob", b =>
- {
- b.HasOne("API.Schema.Manga", "Manga")
- .WithMany()
- .HasForeignKey("MangaId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Manga");
- });
-
- modelBuilder.Entity("API.Schema.Jobs.DownloadSingleChapterJob", b =>
- {
- b.HasOne("API.Schema.Chapter", "Chapter")
- .WithMany()
- .HasForeignKey("ChapterId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Chapter");
- });
-
- modelBuilder.Entity("API.Schema.Jobs.UpdateMetadataJob", b =>
- {
- b.HasOne("API.Schema.Manga", "Manga")
- .WithMany()
- .HasForeignKey("MangaId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Manga");
- });
-
- modelBuilder.Entity("API.Schema.Jobs.Job", b =>
- {
- b.Navigation("DependsOnJobs");
- });
-
- modelBuilder.Entity("API.Schema.Manga", b =>
- {
- b.Navigation("AltTitles");
-
- b.Navigation("Links");
- });
-#pragma warning restore 612, 618
- }
- }
-}
diff --git a/API/Migrations/20250303145324_dev-030325-2.cs b/API/Migrations/20250303145324_dev-030325-2.cs
deleted file mode 100644
index eb06ab4..0000000
--- a/API/Migrations/20250303145324_dev-030325-2.cs
+++ /dev/null
@@ -1,34 +0,0 @@
-using Microsoft.EntityFrameworkCore.Migrations;
-
-#nullable disable
-
-namespace API.Migrations
-{
- ///
- public partial class dev0303252 : Migration
- {
- ///
- protected override void Up(MigrationBuilder migrationBuilder)
- {
- migrationBuilder.AlterColumn(
- name: "state",
- table: "Jobs",
- type: "smallint",
- nullable: false,
- oldClrType: typeof(int),
- oldType: "integer");
- }
-
- ///
- protected override void Down(MigrationBuilder migrationBuilder)
- {
- migrationBuilder.AlterColumn(
- name: "state",
- table: "Jobs",
- type: "integer",
- nullable: false,
- oldClrType: typeof(byte),
- oldType: "smallint");
- }
- }
-}
diff --git a/API/Migrations/20250303152212_dev-030325-3.Designer.cs b/API/Migrations/20250303152212_dev-030325-3.Designer.cs
deleted file mode 100644
index 3c5b880..0000000
--- a/API/Migrations/20250303152212_dev-030325-3.Designer.cs
+++ /dev/null
@@ -1,672 +0,0 @@
-//
-using System;
-using API.Schema;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Migrations;
-using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
-using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
-
-#nullable disable
-
-namespace API.Migrations
-{
- [DbContext(typeof(PgsqlContext))]
- [Migration("20250303152212_dev-030325-3")]
- partial class dev0303253
- {
- ///
- protected override void BuildTargetModel(ModelBuilder modelBuilder)
- {
-#pragma warning disable 612, 618
- modelBuilder
- .HasAnnotation("ProductVersion", "9.0.0")
- .HasAnnotation("Relational:MaxIdentifierLength", 63);
-
- NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
-
- modelBuilder.Entity("API.Schema.Author", b =>
- {
- b.Property("AuthorId")
- .HasMaxLength(64)
- .HasColumnType("character varying(64)");
-
- b.Property("AuthorName")
- .IsRequired()
- .HasColumnType("text");
-
- b.HasKey("AuthorId");
-
- b.ToTable("Authors");
- });
-
- modelBuilder.Entity("API.Schema.Chapter", b =>
- {
- b.Property("ChapterId")
- .HasMaxLength(64)
- .HasColumnType("character varying(64)");
-
- b.Property("ArchiveFileName")
- .IsRequired()
- .HasColumnType("text");
-
- b.Property("ChapterNumber")
- .IsRequired()
- .HasMaxLength(10)
- .HasColumnType("character varying(10)");
-
- b.Property("Downloaded")
- .HasColumnType("boolean");
-
- b.Property("ParentMangaId")
- .IsRequired()
- .HasColumnType("character varying(64)");
-
- b.Property("Title")
- .HasColumnType("text");
-
- b.Property("Url")
- .IsRequired()
- .HasColumnType("text");
-
- b.Property("VolumeNumber")
- .HasColumnType("integer");
-
- b.HasKey("ChapterId");
-
- b.HasIndex("ParentMangaId");
-
- b.ToTable("Chapters");
- });
-
- modelBuilder.Entity("API.Schema.Jobs.Job", b =>
- {
- b.Property("JobId")
- .HasMaxLength(64)
- .HasColumnType("character varying(64)");
-
- b.PrimitiveCollection("DependsOnJobsIds")
- .HasMaxLength(64)
- .HasColumnType("text[]");
-
- b.Property("JobId1")
- .HasColumnType("character varying(64)");
-
- b.Property("JobType")
- .HasColumnType("smallint");
-
- b.Property("LastExecution")
- .HasColumnType("timestamp with time zone");
-
- b.Property("ParentJobId")
- .HasMaxLength(64)
- .HasColumnType("character varying(64)");
-
- b.Property("RecurrenceMs")
- .HasColumnType("numeric(20,0)");
-
- b.Property("state")
- .HasColumnType("smallint");
-
- b.HasKey("JobId");
-
- b.HasIndex("JobId1");
-
- b.HasIndex("ParentJobId");
-
- b.ToTable("Jobs");
-
- b.HasDiscriminator("JobType");
-
- b.UseTphMappingStrategy();
- });
-
- modelBuilder.Entity("API.Schema.LibraryConnectors.LibraryConnector", b =>
- {
- b.Property("LibraryConnectorId")
- .HasMaxLength(64)
- .HasColumnType("character varying(64)");
-
- b.Property("Auth")
- .IsRequired()
- .HasColumnType("text");
-
- b.Property("BaseUrl")
- .IsRequired()
- .HasColumnType("text");
-
- b.Property("LibraryType")
- .HasColumnType("smallint");
-
- b.HasKey("LibraryConnectorId");
-
- b.ToTable("LibraryConnectors");
-
- b.HasDiscriminator("LibraryType");
-
- b.UseTphMappingStrategy();
- });
-
- modelBuilder.Entity("API.Schema.Link", b =>
- {
- b.Property("LinkId")
- .HasMaxLength(64)
- .HasColumnType("character varying(64)");
-
- b.Property("LinkProvider")
- .IsRequired()
- .HasColumnType("text");
-
- b.Property("LinkUrl")
- .IsRequired()
- .HasColumnType("text");
-
- b.Property("MangaId")
- .HasColumnType("character varying(64)");
-
- b.HasKey("LinkId");
-
- b.HasIndex("MangaId");
-
- b.ToTable("Link");
- });
-
- modelBuilder.Entity("API.Schema.Manga", b =>
- {
- b.Property("MangaId")
- .HasMaxLength(64)
- .HasColumnType("character varying(64)");
-
- b.Property("ConnectorId")
- .IsRequired()
- .HasMaxLength(64)
- .HasColumnType("character varying(64)");
-
- b.Property("CoverFileNameInCache")
- .HasColumnType("text");
-
- b.Property("CoverUrl")
- .IsRequired()
- .HasColumnType("text");
-
- b.Property("Description")
- .IsRequired()
- .HasColumnType("text");
-
- b.Property("FolderName")
- .IsRequired()
- .HasColumnType("text");
-
- b.Property("IgnoreChapterBefore")
- .HasColumnType("real");
-
- b.Property("MangaConnectorId")
- .IsRequired()
- .HasColumnType("character varying(32)");
-
- b.Property("Name")
- .IsRequired()
- .HasColumnType("text");
-
- b.Property("OriginalLanguage")
- .HasColumnType("text");
-
- b.Property("ReleaseStatus")
- .HasColumnType("smallint");
-
- b.Property("WebsiteUrl")
- .IsRequired()
- .HasColumnType("text");
-
- b.Property("Year")
- .HasColumnType("bigint");
-
- b.HasKey("MangaId");
-
- b.HasIndex("MangaConnectorId");
-
- b.ToTable("Manga");
- });
-
- modelBuilder.Entity("API.Schema.MangaAltTitle", b =>
- {
- b.Property("AltTitleId")
- .HasMaxLength(64)
- .HasColumnType("character varying(64)");
-
- b.Property("Language")
- .IsRequired()
- .HasMaxLength(8)
- .HasColumnType("character varying(8)");
-
- b.Property("MangaId")
- .HasColumnType("character varying(64)");
-
- b.Property("Title")
- .IsRequired()
- .HasColumnType("text");
-
- b.HasKey("AltTitleId");
-
- b.HasIndex("MangaId");
-
- b.ToTable("AltTitles");
- });
-
- modelBuilder.Entity("API.Schema.MangaConnectors.MangaConnector", b =>
- {
- b.Property("Name")
- .HasMaxLength(32)
- .HasColumnType("character varying(32)");
-
- b.PrimitiveCollection("BaseUris")
- .IsRequired()
- .HasColumnType("text[]");
-
- b.PrimitiveCollection("SupportedLanguages")
- .IsRequired()
- .HasColumnType("text[]");
-
- b.HasKey("Name");
-
- b.ToTable("MangaConnectors");
-
- b.HasDiscriminator("Name").HasValue("MangaConnector");
-
- b.UseTphMappingStrategy();
- });
-
- modelBuilder.Entity("API.Schema.MangaTag", b =>
- {
- b.Property("Tag")
- .HasColumnType("text");
-
- b.HasKey("Tag");
-
- b.ToTable("Tags");
- });
-
- modelBuilder.Entity("API.Schema.Notification", b =>
- {
- b.Property("NotificationId")
- .HasMaxLength(64)
- .HasColumnType("character varying(64)");
-
- b.Property("Date")
- .HasColumnType("timestamp with time zone");
-
- b.Property("Message")
- .IsRequired()
- .HasColumnType("text");
-
- b.Property("Title")
- .IsRequired()
- .HasColumnType("text");
-
- b.Property("Urgency")
- .HasColumnType("smallint");
-
- b.HasKey("NotificationId");
-
- b.ToTable("Notifications");
- });
-
- modelBuilder.Entity("API.Schema.NotificationConnectors.NotificationConnector", b =>
- {
- b.Property("NotificationConnectorId")
- .HasMaxLength(64)
- .HasColumnType("character varying(64)");
-
- b.Property("NotificationConnectorType")
- .HasColumnType("smallint");
-
- b.HasKey("NotificationConnectorId");
-
- b.ToTable("NotificationConnectors");
-
- b.HasDiscriminator("NotificationConnectorType");
-
- b.UseTphMappingStrategy();
- });
-
- modelBuilder.Entity("AuthorManga", b =>
- {
- b.Property("AuthorsAuthorId")
- .HasColumnType("character varying(64)");
-
- b.Property("MangaId")
- .HasColumnType("character varying(64)");
-
- b.HasKey("AuthorsAuthorId", "MangaId");
-
- b.HasIndex("MangaId");
-
- b.ToTable("AuthorManga");
- });
-
- modelBuilder.Entity("MangaMangaTag", b =>
- {
- b.Property("MangaId")
- .HasColumnType("character varying(64)");
-
- b.Property("TagsTag")
- .HasColumnType("text");
-
- b.HasKey("MangaId", "TagsTag");
-
- b.HasIndex("TagsTag");
-
- b.ToTable("MangaMangaTag");
- });
-
- modelBuilder.Entity("API.Schema.Jobs.DownloadNewChaptersJob", b =>
- {
- b.HasBaseType("API.Schema.Jobs.Job");
-
- b.Property("MangaId")
- .IsRequired()
- .HasMaxLength(64)
- .HasColumnType("character varying(64)");
-
- b.HasIndex("MangaId");
-
- b.HasDiscriminator().HasValue((byte)1);
- });
-
- modelBuilder.Entity("API.Schema.Jobs.DownloadSingleChapterJob", b =>
- {
- b.HasBaseType("API.Schema.Jobs.Job");
-
- b.Property("ChapterId")
- .IsRequired()
- .HasMaxLength(64)
- .HasColumnType("character varying(64)");
-
- b.HasIndex("ChapterId");
-
- b.HasDiscriminator().HasValue((byte)0);
- });
-
- modelBuilder.Entity("API.Schema.Jobs.MoveFileOrFolderJob", b =>
- {
- b.HasBaseType("API.Schema.Jobs.Job");
-
- b.Property("FromLocation")
- .IsRequired()
- .HasColumnType("text");
-
- b.Property("ToLocation")
- .IsRequired()
- .HasColumnType("text");
-
- b.HasDiscriminator().HasValue((byte)3);
- });
-
- modelBuilder.Entity("API.Schema.Jobs.UpdateMetadataJob", b =>
- {
- b.HasBaseType("API.Schema.Jobs.Job");
-
- b.Property("MangaId")
- .IsRequired()
- .HasMaxLength(64)
- .HasColumnType("character varying(64)");
-
- b.HasIndex("MangaId");
-
- b.ToTable("Jobs", t =>
- {
- t.Property("MangaId")
- .HasColumnName("UpdateMetadataJob_MangaId");
- });
-
- b.HasDiscriminator().HasValue((byte)2);
- });
-
- modelBuilder.Entity("API.Schema.LibraryConnectors.Kavita", b =>
- {
- b.HasBaseType("API.Schema.LibraryConnectors.LibraryConnector");
-
- b.HasDiscriminator().HasValue((byte)1);
- });
-
- modelBuilder.Entity("API.Schema.LibraryConnectors.Komga", b =>
- {
- b.HasBaseType("API.Schema.LibraryConnectors.LibraryConnector");
-
- b.HasDiscriminator().HasValue((byte)0);
- });
-
- modelBuilder.Entity("API.Schema.MangaConnectors.AsuraToon", b =>
- {
- b.HasBaseType("API.Schema.MangaConnectors.MangaConnector");
-
- b.HasDiscriminator().HasValue("AsuraToon");
- });
-
- modelBuilder.Entity("API.Schema.MangaConnectors.Bato", b =>
- {
- b.HasBaseType("API.Schema.MangaConnectors.MangaConnector");
-
- b.HasDiscriminator().HasValue("Bato");
- });
-
- modelBuilder.Entity("API.Schema.MangaConnectors.MangaDex", b =>
- {
- b.HasBaseType("API.Schema.MangaConnectors.MangaConnector");
-
- b.HasDiscriminator().HasValue("MangaDex");
- });
-
- modelBuilder.Entity("API.Schema.MangaConnectors.MangaHere", b =>
- {
- b.HasBaseType("API.Schema.MangaConnectors.MangaConnector");
-
- b.HasDiscriminator().HasValue("MangaHere");
- });
-
- modelBuilder.Entity("API.Schema.MangaConnectors.MangaKatana", b =>
- {
- b.HasBaseType("API.Schema.MangaConnectors.MangaConnector");
-
- b.HasDiscriminator().HasValue("MangaKatana");
- });
-
- modelBuilder.Entity("API.Schema.MangaConnectors.Mangaworld", b =>
- {
- b.HasBaseType("API.Schema.MangaConnectors.MangaConnector");
-
- b.HasDiscriminator().HasValue("Mangaworld");
- });
-
- modelBuilder.Entity("API.Schema.MangaConnectors.ManhuaPlus", b =>
- {
- b.HasBaseType("API.Schema.MangaConnectors.MangaConnector");
-
- b.HasDiscriminator().HasValue("ManhuaPlus");
- });
-
- modelBuilder.Entity("API.Schema.MangaConnectors.Weebcentral", b =>
- {
- b.HasBaseType("API.Schema.MangaConnectors.MangaConnector");
-
- b.HasDiscriminator().HasValue("Weebcentral");
- });
-
- modelBuilder.Entity("API.Schema.NotificationConnectors.Gotify", b =>
- {
- b.HasBaseType("API.Schema.NotificationConnectors.NotificationConnector");
-
- b.Property("AppToken")
- .IsRequired()
- .HasColumnType("text");
-
- b.Property("Endpoint")
- .IsRequired()
- .HasColumnType("text");
-
- b.HasDiscriminator().HasValue((byte)0);
- });
-
- modelBuilder.Entity("API.Schema.NotificationConnectors.Lunasea", b =>
- {
- b.HasBaseType("API.Schema.NotificationConnectors.NotificationConnector");
-
- b.Property("Id")
- .IsRequired()
- .HasColumnType("text");
-
- b.HasDiscriminator().HasValue((byte)1);
- });
-
- modelBuilder.Entity("API.Schema.NotificationConnectors.Ntfy", b =>
- {
- b.HasBaseType("API.Schema.NotificationConnectors.NotificationConnector");
-
- b.Property("Auth")
- .IsRequired()
- .HasColumnType("text");
-
- b.Property("Endpoint")
- .IsRequired()
- .HasColumnType("text");
-
- b.Property("Topic")
- .IsRequired()
- .HasColumnType("text");
-
- b.ToTable("NotificationConnectors", t =>
- {
- t.Property("Endpoint")
- .HasColumnName("Ntfy_Endpoint");
- });
-
- b.HasDiscriminator().HasValue((byte)2);
- });
-
- modelBuilder.Entity("API.Schema.Chapter", b =>
- {
- b.HasOne("API.Schema.Manga", "ParentManga")
- .WithMany()
- .HasForeignKey("ParentMangaId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("ParentManga");
- });
-
- modelBuilder.Entity("API.Schema.Jobs.Job", b =>
- {
- b.HasOne("API.Schema.Jobs.Job", null)
- .WithMany("DependsOnJobs")
- .HasForeignKey("JobId1");
-
- b.HasOne("API.Schema.Jobs.Job", "ParentJob")
- .WithMany()
- .HasForeignKey("ParentJobId");
-
- b.Navigation("ParentJob");
- });
-
- modelBuilder.Entity("API.Schema.Link", b =>
- {
- b.HasOne("API.Schema.Manga", null)
- .WithMany("Links")
- .HasForeignKey("MangaId");
- });
-
- modelBuilder.Entity("API.Schema.Manga", b =>
- {
- b.HasOne("API.Schema.MangaConnectors.MangaConnector", "MangaConnector")
- .WithMany()
- .HasForeignKey("MangaConnectorId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("MangaConnector");
- });
-
- modelBuilder.Entity("API.Schema.MangaAltTitle", b =>
- {
- b.HasOne("API.Schema.Manga", null)
- .WithMany("AltTitles")
- .HasForeignKey("MangaId");
- });
-
- modelBuilder.Entity("AuthorManga", b =>
- {
- b.HasOne("API.Schema.Author", null)
- .WithMany()
- .HasForeignKey("AuthorsAuthorId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.HasOne("API.Schema.Manga", null)
- .WithMany()
- .HasForeignKey("MangaId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("MangaMangaTag", b =>
- {
- b.HasOne("API.Schema.Manga", null)
- .WithMany()
- .HasForeignKey("MangaId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.HasOne("API.Schema.MangaTag", null)
- .WithMany()
- .HasForeignKey("TagsTag")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("API.Schema.Jobs.DownloadNewChaptersJob", b =>
- {
- b.HasOne("API.Schema.Manga", "Manga")
- .WithMany()
- .HasForeignKey("MangaId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Manga");
- });
-
- modelBuilder.Entity("API.Schema.Jobs.DownloadSingleChapterJob", b =>
- {
- b.HasOne("API.Schema.Chapter", "Chapter")
- .WithMany()
- .HasForeignKey("ChapterId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Chapter");
- });
-
- modelBuilder.Entity("API.Schema.Jobs.UpdateMetadataJob", b =>
- {
- b.HasOne("API.Schema.Manga", "Manga")
- .WithMany()
- .HasForeignKey("MangaId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Manga");
- });
-
- modelBuilder.Entity("API.Schema.Jobs.Job", b =>
- {
- b.Navigation("DependsOnJobs");
- });
-
- modelBuilder.Entity("API.Schema.Manga", b =>
- {
- b.Navigation("AltTitles");
-
- b.Navigation("Links");
- });
-#pragma warning restore 612, 618
- }
- }
-}
diff --git a/API/Migrations/20250303152212_dev-030325-3.cs b/API/Migrations/20250303152212_dev-030325-3.cs
deleted file mode 100644
index 1490e66..0000000
--- a/API/Migrations/20250303152212_dev-030325-3.cs
+++ /dev/null
@@ -1,22 +0,0 @@
-using Microsoft.EntityFrameworkCore.Migrations;
-
-#nullable disable
-
-namespace API.Migrations
-{
- ///
- public partial class dev0303253 : Migration
- {
- ///
- protected override void Up(MigrationBuilder migrationBuilder)
- {
-
- }
-
- ///
- protected override void Down(MigrationBuilder migrationBuilder)
- {
-
- }
- }
-}
diff --git a/API/Migrations/20250307104111_dev-070325-1.Designer.cs b/API/Migrations/20250307104111_dev-070325-1.Designer.cs
deleted file mode 100644
index fac3d4b..0000000
--- a/API/Migrations/20250307104111_dev-070325-1.Designer.cs
+++ /dev/null
@@ -1,678 +0,0 @@
-//
-using System;
-using API.Schema;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Migrations;
-using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
-using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
-
-#nullable disable
-
-namespace API.Migrations
-{
- [DbContext(typeof(PgsqlContext))]
- [Migration("20250307104111_dev-070325-1")]
- partial class dev0703251
- {
- ///
- protected override void BuildTargetModel(ModelBuilder modelBuilder)
- {
-#pragma warning disable 612, 618
- modelBuilder
- .HasAnnotation("ProductVersion", "9.0.2")
- .HasAnnotation("Relational:MaxIdentifierLength", 63);
-
- NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
-
- modelBuilder.Entity("API.Schema.Author", b =>
- {
- b.Property("AuthorId")
- .HasMaxLength(64)
- .HasColumnType("character varying(64)");
-
- b.Property("AuthorName")
- .IsRequired()
- .HasColumnType("text");
-
- b.HasKey("AuthorId");
-
- b.ToTable("Authors");
- });
-
- modelBuilder.Entity("API.Schema.Chapter", b =>
- {
- b.Property("ChapterId")
- .HasMaxLength(64)
- .HasColumnType("character varying(64)");
-
- b.Property("ArchiveFileName")
- .IsRequired()
- .HasColumnType("text");
-
- b.Property