feat: initial Phase 1 implementation — core framework + Docker

- Data types (SManga, SChapter, Page, MangasPage, all Filter variants)
- Source interfaces (Source, CatalogueSource) with MD5-based ID generation matching Tachiyomi/Suwayomi
- HTTP client with per-host rate limiting, cookie jar, and 429 retry
- FlareSolverr v1 client (FLARESOLVERR_URL env)
- Generic GraphQL POST helper
- goquery HTML parser wrappers
- Source registry (panics on duplicate ID)
- Multi-stage Dockerfile (golang:1.26-alpine + distroless) and compose.yml (postgres, flaresolverr, app)
This commit is contained in:
achmad
2026-05-10 21:23:24 +07:00
commit 85d2ea6143
23 changed files with 2864 additions and 0 deletions
+40
View File
@@ -0,0 +1,40 @@
services:
postgres:
image: postgres:16-alpine
restart: unless-stopped
environment:
POSTGRES_DB: goyomi
POSTGRES_USER: goyomi
POSTGRES_PASSWORD: goyomi
volumes:
- postgres_data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U goyomi -d goyomi"]
interval: 5s
timeout: 5s
retries: 10
flaresolverr:
image: ghcr.io/flaresolverr/flaresolverr:latest
restart: unless-stopped
environment:
LOG_LEVEL: info
ports:
- "8191:8191"
app:
build: .
restart: unless-stopped
ports:
- "8080:8080"
environment:
DATABASE_URL: postgres://goyomi:goyomi@postgres:5432/goyomi?sslmode=disable
FLARESOLVERR_URL: http://flaresolverr:8191
depends_on:
postgres:
condition: service_healthy
flaresolverr:
condition: service_started
volumes:
postgres_data: