Commit Graph

49 Commits

Author SHA1 Message Date
Alexander 758a4b909a Leftovers 2026-05-09 21:31:24 +02:00
Alexander 31ec3f9826 Add MonitorAlbum component tests: 21 cases covering all flow diagrams (bufconn + testcontainers + hand-rolled mocks) 2026-05-09 21:31:09 +02:00
Alexander 6f31698006 Fix monitor state: never downgrade on upsert, explicitly set monitored on MonitorAlbum 2026-05-09 20:26:38 +02:00
Alexander 3ce6e23421 Fix duplicate download insert: handle NULL columns in download scan, check by torrent ID, enrich MonitorAlbum response, recover orphaned downloads on startup 2026-05-09 20:13:43 +02:00
Alexander cca404bcc0 Enrich MonitorAlbum response, prevent duplicate downloads, recover orphaned jobs on startup 2026-05-09 20:01:53 +02:00
Alexander 5257ed0f1b Fix album persistence by passing artist DB ID directly to PersistAlbum 2026-05-09 11:18:52 +02:00
Alexander 8c60fe5e35 Add GetAlbum RPC with track details and persist metadata on discovery 2026-05-09 10:47:06 +02:00
Alexander e61e58be72 Expand GetArtists with album details, download info, and generic MonitorState enum 2026-05-08 23:00:42 +02:00
Alexander e49cc25372 Add GetArtists RPC with artist monitor state (monitored/unmonitored/excluded) 2026-05-08 22:27:56 +02:00
Alexander 60c94935b2 Persist metadata to DB, poll download worker, metadata service layer 2026-05-08 11:00:04 +02:00
Alexander 66264e1314 Add database schema, ERD, and repository layer 2026-05-08 10:03:28 +02:00
Alexander 84a6fe8ec7 Refactor MonitorAlbum into focused methods 2026-05-07 23:28:35 +02:00
Alexander 8ad2734964 Implement MonitorAlbum: search, parse, filter by quality, add best to qbittorrent 2026-05-07 23:21:21 +02:00
Alexander 79f3f145de Add indexer cache with River queue for scheduled refresh 2026-05-07 21:41:17 +02:00
Alexander 2041c154cf Add the proxing to metadata-agregator 2026-05-07 12:00:37 +02:00
Alexander 97a57c10fd Added add endpoint 2026-05-07 10:27:20 +02:00
Alexander 6071bc7980 Implement the list endpoint for qbittorrent 2026-05-06 22:53:55 +02:00
Alexander 36416081c1 Create torrent proto stub 2026-05-06 22:26:40 +02:00
Alexander 3249bdc35c Add gRPC observability: logging, metrics, recovery interceptors 2026-05-06 21:58:24 +02:00
Alexander 67f46f740b Remove HTTP/REST server, keep gRPC only 2026-05-06 21:45:48 +02:00
Alexander 5fa46b2890 Add attr to differentiate trackers for future 2026-05-06 21:42:05 +02:00
Alexander b8fcbacb07 Update rutracker categories 2026-05-06 21:27:03 +02:00
Alexander 2400c6345a Refactor return type of the search 2026-05-05 14:41:45 +02:00
Alexander b41ea7d023 More parser tests + fixes 2026-05-04 23:17:38 +02:00
Alexander bfef1b6c79 Implement Jackett search entpoint 2026-05-04 22:48:14 +02:00
Alexander 8ffa92276e Add Jacket indexer with capabilities implemented 2026-05-04 18:40:31 +02:00
Alexander 32eb8c931e Create indexer proto 2026-05-04 16:45:22 +02:00
Alexander f8040ec088 Default values for config 2026-05-04 16:27:04 +02:00
Alexander 268ee57913 Grpc hello service implementation 2026-05-04 14:56:05 +02:00
Alexander 6baa895c6c Configure routing 2026-05-03 16:10:24 +02:00
Alexander 58aa4ef23b Added config, added logging 2026-05-03 15:49:35 +02:00
Alexander 46c2f6541f More removing old code 2026-05-03 13:46:21 +02:00
Alexander 8067cd93c5 Start from the beginning 2026-04-29 17:31:07 +02:00
Alexander 945aab82c2 WIP 2026-04-29 17:29:58 +02:00
Alexander 3ecc6aee62 feat: add download tracking endpoints (sections 4.1, 4.2, 4.3, 4.4) 2026-04-29 13:44:01 +02:00
Alexander c307c68d88 feat: add album management endpoints (sections 2.1, 2.2, 2.3) 2026-04-29 13:34:20 +02:00
Alexander ff49403fd5 feat: add edit artist endpoint (section 1.4)
- Add GET/PUT /api/artists/{id} for artist settings
- Update sync to create artists table entry (library settings)
- Support partial updates for monitored, path, quality/metadata profiles
- Add e2e tests for get, edit, partial update flows
2026-04-29 13:22:14 +02:00
Alexander b08a0b1646 feat: add refresh and delete artist endpoints (sections 1.2, 1.3)
- Add POST /api/artists/{id}/refresh to re-fetch metadata from gRPC service
- Add DELETE /api/artists/{id} with cascade delete via PostgreSQL
- Add e2e tests for both flows covering happy path, not found, idempotency
- Extend testutil with GetArtistUpdatedAt, CountAlbumsByArtist, DELETE helper
2026-04-29 13:08:53 +02:00
Alexander 25deaf4621 test: add e2e tests for Add Artist flow (section 1.1)
- Add testutil package with DB/HTTP helpers and cleanup utilities
- Add e2e tests covering artist search, album fetch, sync persistence
- Test idempotent sync, album filtering, library list endpoints
- Requires running PostgreSQL, MetadataService, and API server
2026-04-29 11:25:30 +02:00
Alexander 41fb033d30 refactor: rewrite project from Rust to Go
- Replace Axum with Chi router
- Replace sqlx with pgx for PostgreSQL
- Replace tonic/prost with grpc-go
- Replace tracing with zerolog
- Update flake.nix for Go build with protoc generation
- Preserve all existing endpoints and functionality

Stack: Chi, pgx, grpc-go, zerolog, yaml.v3
2026-04-29 10:45:05 +02:00
Alexander f24543f401 feat: add PostgreSQL persistence and unified sync endpoint
- Add sqlx with PostgreSQL support for database operations
- Create DbService with artist/album upsert and listing methods
- Add database schema (14 tables) in containers/init.sql
- Add library controller (GET /api/library/artists, /albums, /stats)
- Merge sync_artist + ingest into single POST /api/sync endpoint
- Support configurable sync: download (bool), store (bool), album filter
- Connect to database at startup with graceful fallback
2026-04-29 10:06:01 +02:00
Alexander 3aaeade4d3 feat: add artist sync flow and stub torrent client
- Add DownloadService to orchestrate metadata → indexer → torrent flow
- Add POST /api/sync/artist endpoint for syncing artist albums
- Add StubTorrentClient for testing (logs requests to file)
- Refactor TorrentConfig to tagged enum (client_type: qbittorrent|stub|none)
- Add POST /api/reload endpoint for hot config reload
- Add chrono dependency for timestamps
2026-04-28 21:40:11 +02:00
Alexander 925c7c3703 feat: add CLI args, health endpoint, and fix torznab search
- Add clap for CLI argument parsing (-c config, -p port)
- Add health endpoint showing service status at /api/health
- Add IndexerType enum for auto URL construction (jackett/prowlarr/torznab)
- Fix Axum 0.8 route syntax ({param} instead of :param)
- Fix torznab search to use 'q' param instead of artist/album (Jackett only supports q)
2026-04-28 19:16:22 +02:00
Alexander 5afcbd68ad feat: add metadata-agregator gRPC client integration
- Add tonic/prost for gRPC client generation
- Add proto definitions from metadata-agregator service
- Add MetadataClient and MetadataService for gRPC communication
- Add REST controller exposing metadata endpoints (search, get, sync)
- Update config with metadata.endpoint setting
- Update flake.nix with protobuf for proto compilation
2026-04-28 18:58:31 +02:00
Alexander 1aaaab4640 feat: add indexer and torrent REST controllers with service layer
- Add config module for yaml config (database, indexers, torrent)
- Add indexer module with Torznab protocol support
- Add IndexerService and TorrentService for business logic
- Add REST controllers for indexer search and torrent management
- Add Docker Compose for PostgreSQL and Jackett
- Add ERD documentation for database schema
2026-04-28 18:53:50 +02:00
Alexander f77806ba46 feat: add torrent client interface with qbittorrent support
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/claude-agent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-04-28 18:05:36 +02:00
Alexander ff9ca7ecce feat: add rest api for music tracks
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/claude-agent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-04-28 18:05:32 +02:00
Alexander 7c55e5cddd chore: initialize rust project with axum
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/claude-agent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-04-28 18:05:27 +02:00
Alexander 98dcc63c9b chore: add nix flake configuration
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/claude-agent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-04-28 18:05:23 +02:00