diff --git a/API/API.csproj b/API/API.csproj
index 4da8478..cf8c21c 100644
--- a/API/API.csproj
+++ b/API/API.csproj
@@ -13,6 +13,7 @@
+
all
@@ -29,12 +30,6 @@
-
-
- .dockerignore
-
-
-
diff --git a/API/Migrations/PgsqlContextModelSnapshot.cs b/API/Migrations/PgsqlContextModelSnapshot.cs
index 64848e5..461fb19 100644
--- a/API/Migrations/PgsqlContextModelSnapshot.cs
+++ b/API/Migrations/PgsqlContextModelSnapshot.cs
@@ -245,6 +245,10 @@ namespace API.Migrations
.IsRequired()
.HasColumnType("text[]");
+ b.Property("WebsiteUrl")
+ .IsRequired()
+ .HasColumnType("text");
+
b.Property("year")
.HasColumnType("bigint");
@@ -290,7 +294,7 @@ namespace API.Migrations
b.ToTable("AltTitles");
});
- modelBuilder.Entity("API.Schema.MangaConnector", b =>
+ modelBuilder.Entity("API.Schema.MangaConnectors.MangaConnector", b =>
{
b.Property("Name")
.HasMaxLength(32)
@@ -307,6 +311,10 @@ namespace API.Migrations
b.HasKey("Name");
b.ToTable("MangaConnectors");
+
+ b.HasDiscriminator("Name").HasValue("MangaConnector");
+
+ b.UseTphMappingStrategy();
});
modelBuilder.Entity("API.Schema.MangaTag", b =>
@@ -319,6 +327,28 @@ namespace API.Migrations
b.ToTable("Tags");
});
+ modelBuilder.Entity("API.Schema.Notification", b =>
+ {
+ b.Property("NotificationId")
+ .HasMaxLength(64)
+ .HasColumnType("character varying(64)");
+
+ 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")
@@ -382,58 +412,6 @@ namespace API.Migrations
b.ToTable("MangaTag");
});
- modelBuilder.Entity("API.Schema.Jobs.CreateArchiveJob", b =>
- {
- b.HasBaseType("API.Schema.Jobs.Job");
-
- b.Property("ChapterId")
- .IsRequired()
- .HasMaxLength(64)
- .HasColumnType("character varying(64)");
-
- b.Property("ComicInfoLocation")
- .IsRequired()
- .HasColumnType("text");
-
- b.Property("ImagesLocation")
- .IsRequired()
- .HasColumnType("text");
-
- b.HasIndex("ChapterId");
-
- b.ToTable("Jobs", t =>
- {
- t.Property("ChapterId")
- .HasColumnName("CreateArchiveJob_ChapterId");
- });
-
- b.HasDiscriminator().HasValue((byte)4);
- });
-
- modelBuilder.Entity("API.Schema.Jobs.CreateComicInfoXmlJob", b =>
- {
- b.HasBaseType("API.Schema.Jobs.Job");
-
- b.Property("ChapterId")
- .IsRequired()
- .HasMaxLength(64)
- .HasColumnType("character varying(64)");
-
- b.Property("Path")
- .IsRequired()
- .HasColumnType("text");
-
- b.HasIndex("ChapterId");
-
- b.ToTable("Jobs", t =>
- {
- t.Property("ChapterId")
- .HasColumnName("CreateComicInfoXmlJob_ChapterId");
- });
-
- b.HasDiscriminator().HasValue((byte)6);
- });
-
modelBuilder.Entity("API.Schema.Jobs.DownloadNewChaptersJob", b =>
{
b.HasBaseType("API.Schema.Jobs.Job");
@@ -477,44 +455,6 @@ namespace API.Migrations
b.HasDiscriminator().HasValue((byte)3);
});
- modelBuilder.Entity("API.Schema.Jobs.ProcessImagesJob", b =>
- {
- b.HasBaseType("API.Schema.Jobs.Job");
-
- b.Property("Bw")
- .HasColumnType("boolean");
-
- b.Property("Compression")
- .HasColumnType("integer");
-
- b.Property("Path")
- .IsRequired()
- .HasColumnType("text");
-
- b.ToTable("Jobs", t =>
- {
- t.Property("Path")
- .HasColumnName("ProcessImagesJob_Path");
- });
-
- b.HasDiscriminator().HasValue((byte)5);
- });
-
- modelBuilder.Entity("API.Schema.Jobs.SearchMangaJob", b =>
- {
- b.HasBaseType("API.Schema.Jobs.Job");
-
- b.Property("MangaConnectorName")
- .IsRequired()
- .HasColumnType("text");
-
- b.Property("SearchString")
- .IsRequired()
- .HasColumnType("text");
-
- b.HasDiscriminator().HasValue((byte)7);
- });
-
modelBuilder.Entity("API.Schema.Jobs.UpdateMetadataJob", b =>
{
b.HasBaseType("API.Schema.Jobs.Job");
@@ -549,6 +489,83 @@ namespace API.Migrations
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.MangaLife", b =>
+ {
+ b.HasBaseType("API.Schema.MangaConnectors.MangaConnector");
+
+ b.HasDiscriminator().HasValue("MangaLife");
+ });
+
+ modelBuilder.Entity("API.Schema.MangaConnectors.Manganato", b =>
+ {
+ b.HasBaseType("API.Schema.MangaConnectors.MangaConnector");
+
+ b.HasDiscriminator().HasValue("Manganato");
+ });
+
+ modelBuilder.Entity("API.Schema.MangaConnectors.Mangasee", b =>
+ {
+ b.HasBaseType("API.Schema.MangaConnectors.MangaConnector");
+
+ b.HasDiscriminator().HasValue("Mangasee");
+ });
+
+ 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");
@@ -639,7 +656,7 @@ namespace API.Migrations
.WithOne()
.HasForeignKey("API.Schema.Manga", "LatestChapterDownloadedId");
- b.HasOne("API.Schema.MangaConnector", "MangaConnector")
+ b.HasOne("API.Schema.MangaConnectors.MangaConnector", "MangaConnector")
.WithMany("Mangas")
.HasForeignKey("MangaConnectorName")
.OnDelete(DeleteBehavior.Cascade)
@@ -699,28 +716,6 @@ namespace API.Migrations
.IsRequired();
});
- modelBuilder.Entity("API.Schema.Jobs.CreateArchiveJob", b =>
- {
- b.HasOne("API.Schema.Chapter", "Chapter")
- .WithMany()
- .HasForeignKey("ChapterId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Chapter");
- });
-
- modelBuilder.Entity("API.Schema.Jobs.CreateComicInfoXmlJob", b =>
- {
- b.HasOne("API.Schema.Chapter", "Chapter")
- .WithMany()
- .HasForeignKey("ChapterId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Chapter");
- });
-
modelBuilder.Entity("API.Schema.Jobs.DownloadNewChaptersJob", b =>
{
b.HasOne("API.Schema.Manga", "Manga")
@@ -768,7 +763,7 @@ namespace API.Migrations
b.Navigation("Links");
});
- modelBuilder.Entity("API.Schema.MangaConnector", b =>
+ modelBuilder.Entity("API.Schema.MangaConnectors.MangaConnector", b =>
{
b.Navigation("Mangas");
});
diff --git a/Dockerfile b/Dockerfile
index 35eb708..ae32036 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,7 +1,7 @@
# syntax=docker/dockerfile:1
-ARG DOTNET=8.0
+ARG DOTNET=9.0
-FROM --platform=$TARGETPLATFORM mcr.microsoft.com/dotnet/runtime:$DOTNET AS base
+FROM --platform=$TARGETPLATFORM mcr.microsoft.com/dotnet/aspnet:$DOTNET AS base
WORKDIR /publish
ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true
ENV PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium
@@ -16,9 +16,7 @@ FROM --platform=$BUILDPLATFORM mcr.microsoft.com/dotnet/sdk:$DOTNET AS build-env
WORKDIR /src
COPY Tranga.sln /src
-COPY CLI/CLI.csproj /src/CLI/CLI.csproj
-COPY Logging/Logging.csproj /src/Logging/Logging.csproj
-COPY Tranga/Tranga.csproj /src/Tranga/Tranga.csproj
+COPY API/API.csproj /src/API/API.csproj
RUN dotnet restore /src/Tranga.sln
COPY . /src/
@@ -40,5 +38,5 @@ USER $UNAME
WORKDIR /publish
COPY --chown=1000:1000 --from=build-env /publish .
USER 0
-ENTRYPOINT ["dotnet", "/publish/Tranga.dll"]
+ENTRYPOINT ["dotnet", "/publish/API.dll"]
CMD ["-f", "-c", "-l", "/usr/share/tranga-api/logs"]
\ No newline at end of file
diff --git a/docker-compose.local.yaml b/docker-compose.local.yaml
index 9c7ac8d..232bb79 100644
--- a/docker-compose.local.yaml
+++ b/docker-compose.local.yaml
@@ -10,6 +10,10 @@ services:
- ./settings:/usr/share/tranga-api
ports:
- "6531:6531"
+ depends_on:
+ - tranga-pg
+ environment:
+ - POSTGRES_HOST=tranga-pg
restart: unless-stopped
tranga-website:
image: glax/tranga-website:latest
@@ -18,4 +22,12 @@ services:
- "9555:80"
depends_on:
- tranga-api
+ restart: unless-stopped
+ tranga-pg:
+ image: postgres:latest
+ container_name: tranga-pg
+ ports:
+ - "5432:5432"
+ environment:
+ - POSTGRES_PASSWORD=postgres
restart: unless-stopped
\ No newline at end of file
diff --git a/docker-compose.yaml b/docker-compose.yaml
index 63bb0ea..b4e3405 100644
--- a/docker-compose.yaml
+++ b/docker-compose.yaml
@@ -8,6 +8,10 @@ services:
- ./settings:/usr/share/tranga-api
ports:
- "6531:6531"
+ depends_on:
+ - tranga-pg
+ environment:
+ - POSTGRES_HOST=tranga-pg
restart: unless-stopped
tranga-website:
image: glax/tranga-website:latest
@@ -17,8 +21,11 @@ services:
depends_on:
- tranga-api
restart: unless-stopped
- api:
- image: api
- build:
- context: .
- dockerfile: API/Dockerfile
+ tranga-pg:
+ image: postgres:latest
+ container_name: tranga-pg
+ ports:
+ - "5432:5432"
+ environment:
+ - POSTGRES_PASSWORD=postgres
+ restart: unless-stopped