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