feat: rewrite backend in Rust (axum)

Replace the Node/Express backend with a Rust implementation that keeps
the same REST API, MongoDB collections and Redis cache keys, so existing
users, subscriptions and progress keep working.

- axum + mongodb + redis, bcrypt and HS256 JWT compatible with old data
- RSS parsing, iTunes discovery/trending, background sync (1h / 4h)
- Docker image now builds a static Rust binary on debian-slim
- CI runs cargo tests before publishing the image
- compose uses pull_policy: always so a restart picks up the new image

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
MichaelandClaude Opus 5.5 committed 2026-10-13 09:34:33 +02:00
1 parent 0a91f6ec2c
commit 1028b7968c
41 files changed
+2280 -2239

No files matched your search

-45
View File
@@ -1,45 +0,0 @@
{
"name": "podcastic-backend",
"version": "1.0.0",
"description": "Podcastic - Multi-user podcast streaming application backend",
"main": "dist/index.js",
"scripts": {
"dev": "tsx watch src/index.ts",
"build": "tsc",
"start": "node dist/index.js",
"lint": "eslint src",
"test": "vitest"
},
"keywords": ["podcast", "streaming", "audio"],
"author": "",
"license": "MIT",
"dependencies": {
"express": "^4.18.2",
"mongoose": "^7.5.0",
"redis": "^4.6.11",
"jsonwebtoken": "^9.0.0",
"bcryptjs": "^2.4.3",
"dotenv": "^16.3.1",
"cors": "^2.8.5",
"zod": "^3.22.4",
"rss-parser": "^3.12.0",
"axios": "^1.5.0",
"node-cron": "^3.0.3",
"helmet": "^7.1.0",
"express-rate-limit": "^7.1.5"
},
"devDependencies": {
"@types/express": "^4.17.20",
"@types/node": "^20.8.0",
"@types/cors": "^2.8.17",
"@types/jsonwebtoken": "^9.0.4",
"@types/bcryptjs": "^2.4.2",
"@types/node-cron": "^3.0.11",
"typescript": "^5.2.2",
"tsx": "^4.1.0",
"eslint": "^9.18.0",
"@eslint/js": "^9.18.0",
"typescript-eslint": "^8.22.0",
"vitest": "^0.34.6"
}
}