Commit Graph

9 Commits

Author SHA1 Message Date
3206b10bd9 feat: add Docker setup with multi-stage build and docker-compose
- Add Dockerfile with golang:1.25-alpine build stage + alpine runtime stage
- Add docker-compose.yml with naviwatcher service and data volume
- Add .dockerignore for build context cleanup
- Add .gitignore for build artifacts and data directory
- Update plan: mark Task 7 checkboxes as complete

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-20 09:41:54 +03:00
68660e4d83 feat: add CRUD operations for notifications_sent table
Implement MarkNotificationSent, IsNotificationSent, and
GetUnnotifiedReleases with LEFT JOIN query. Includes 10
table-driven tests covering success, error, idempotent,
and edge cases. Also go fmt cleanup on existing files.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-20 09:27:08 +03:00
3b87bfce96 feat: add CRUD operations for external_releases table
Implement GetExternalRelease, SaveExternalRelease,
GetExternalReleasesByArtist, GetIgnoredReleases, and
SetReleaseIgnored with 12 table-driven tests covering
success and error cases.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-20 09:15:37 +03:00
a052ccf11e feat: add CRUD operations for artist_settings table
Implements GetArtistSettings, SaveArtistSettings, GetAllArtistSettings,
and UpdateArtistSettings with full test coverage (10 new tests).
All 17 database tests pass.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-20 09:04:51 +03:00
da6668204f feat: add database layer with schema migrations
Add internal/database package with SQLite3 connection management,
versioned migration system, and three schema tables (artist_settings,
external_releases, notifications_sent). Includes 7 tests covering
initialization, migration idempotency, Close() behavior, and schema
validation using in-memory SQLite.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-20 08:58:23 +03:00
6ff4ec3045 feat: add configuration management with YAML parsing and validation
Add internal/config package with Config struct (Server, Navidrome,
MusicBrainz, Telegram, Scanner sections), LoadConfig function for
YAML parsing, config validation (required fields, port range,
threshold range), and defaults. Include config.yaml.example matching
spec. Update main.go to use real config package instead of
placeholders. Add comprehensive tests covering valid configs,
defaults, missing files, malformed YAML, and validation boundaries.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-20 08:47:04 +03:00
eb266ed5ec feat: initialize Go module and project skeleton
- Initialize naviwatcher Go module
- Create directory structure: internal/config/, internal/database/, cmd/naviwatcher/
- Add main.go entry point with flag parsing, config loading placeholder, and graceful shutdown skeleton
- Add dependencies: go-sqlite3, yaml.v3
- Write tests for config loading and flag parsing
- All tests pass, go vet clean

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-20 08:33:08 +03:00
44f2652e7c add plan: foundation-layer 2026-05-20 08:27:13 +03:00
001f9ce691 Initial commit 2026-05-19 17:42:12 +03:00