Claudio Ortolina
65b2f3e1f2
Update dependencies
...
ex_slop 0.4.1 => 0.4.2
Introduces a new check around misusing the `length/1` function which
require widespread fixes.
2026-05-25 19:45:33 +03:00
Claudio Ortolina
ff3f809c2c
ML-170: add enrichment fields to collection API
...
Add MusicLibrary.Collection.Enrichment module with batch scrobble, artist
country, and selected release enrichment from existing tables.
Wire enrichment into all four collection API endpoints (index, latest,
random, on_this_day). New JSON fields: scrobble_count, last_listened_at,
artist_country, selected_release.
Uses 3 fixed-count batch queries regardless of page size — no N+1 risk.
No schema changes or migrations required.
2026-05-22 13:21:14 +01:00
Claudio Ortolina
d8a67cd475
ML-181: harden assets endpoints
2026-05-22 08:20:35 +01:00
Claudio Ortolina
5212b8607e
Reduce api medium cover size to 400px
2026-05-16 17:46:47 +01:00
Claudio Ortolina
b4710e10c8
ML-185.1: expose named cover sizes in collection API
2026-05-15 22:49:06 +01:00
Claudio Ortolina
8391cf275a
ML-180: remove backup download feature
...
Delete ArchiveController, its routes, the maintenance UI backup
button, and the test file. Management scripts and Litestream
supersede this functionality.
2026-05-15 07:13:33 +01:00
Claudio Ortolina
ba62d54cc5
ML-177: implementation
2026-05-10 20:39:18 +01:00
Claudio Ortolina
a3bc6d7cf3
ML-176.1: support search in collection api controller
2026-05-10 14:52:01 +01:00
Claudio Ortolina
0a9fafd35e
Add micro_cover_url
2026-05-05 23:22:37 +01:00
Claudio Ortolina
be76d0f214
Provide mini covers (150px)
2026-05-05 16:33:43 +01:00
Claudio Ortolina
cccd28a9f9
ML-165: implementation
2026-05-05 13:43:18 +01:00
Claudio Ortolina
1ddef07bcc
fix(api): handle non-integer error ids, clamp negative pagination params
...
- show/2: use case instead of bare Integer.parse match so
/api/v1/errors/not-an-id returns 404 instead of crashing
- index/2: clamp limit to >= 1 and offset to >= 0 to prevent
SQLite from treating negative values as unlimited
- Add 3 tests: non-integer id 404, negative limit/offset clamping
2026-05-04 14:17:45 +01:00
Claudio Ortolina
51bd24d5b4
ML-162: enable /api/v1/errors endpoint
2026-05-04 13:14:40 +01:00
Claudio Ortolina
c489fde1cc
ML-152: add /api/v1/ version prefix to all API routes
2026-04-30 11:57:43 +01:00
Claudio Ortolina
92a36b915a
Harden public asset endpoint against invalid payloads
...
Closes #143
2026-03-30 14:56:40 +01:00
Claudio Ortolina
45fd414f1b
Use friendly error messages in Last.fm callback
...
Closes #145
2026-03-30 14:42:20 +01:00
Claudio Ortolina
96836ae715
Improve tests: better assertions, meaningful tests
...
Track resulting principles in project conventions
2026-03-27 15:46:31 +00:00
Claudio Ortolina
1301f888f3
Remove "it" from the test descriptions
2026-03-27 08:38:41 +00:00
Claudio Ortolina
170a52b3e4
Fix test descriptions for consistency
2026-03-26 11:54:47 +00:00
Claudio Ortolina
69983d9dac
Fix incorrect tests
2026-03-26 11:53:49 +00:00
Claudio Ortolina
f82e764c94
Add tests for Last.fm controller
2026-02-09 11:12:38 +00:00
Claudio Ortolina
fc307a0aba
Add tests for health controller
2026-02-09 11:12:02 +00:00
Claudio Ortolina
356efb1c65
Add tests for archive controller
2026-02-09 11:11:41 +00:00
Claudio Ortolina
59eb603b3f
Return more record information in the API
2025-10-25 11:52:50 +01:00
Claudio Ortolina
f02564fa30
Add /api/collection/on_this_day endpoint
2025-10-24 20:06:23 +01:00
Claudio Ortolina
e158345674
Change /covers to /assets
2025-09-18 21:26:16 +03:00
Claudio Ortolina
aa72692eaf
Cache transformations
2025-09-17 16:54:47 +03:00
Claudio Ortolina
b0f4e18ef7
Fix API collection record cover URLs
2025-09-17 11:24:14 +03:00
Claudio Ortolina
0996b78c7b
Use Transforms to serve covers at the right size
2025-09-17 10:26:38 +03:00
Claudio Ortolina
dc77d337c0
Migrate from embedded covers to assets
2025-09-01 16:20:41 +03:00
Claudio Ortolina
bd12454884
Serve covers from assets
2025-09-01 14:44:17 +03:00
Claudio Ortolina
49c3a5cba2
Serve images from assets table
2025-09-01 13:46:32 +03:00
Claudio Ortolina
07d9db6011
Speed up tests by caching cover data
...
Suggested and executed by Claude
2025-06-14 21:15:06 +03:00
Claudio Ortolina
676c2e4290
Enable quokka with :module_directives rule
2025-05-28 19:41:57 +01:00
Claudio Ortolina
3d0eec3bff
Add /api/collection endpoint
2025-03-10 11:17:51 +00:00
Claudio Ortolina
513ce6363f
Rename RecordsFixtures -> Fixtures.Records
2025-02-17 16:08:19 +00:00
Claudio Ortolina
f21729ac00
Cache covers for 1 year
2025-01-31 07:43:06 +00:00
Claudio Ortolina
ed6ef2c7ef
Rename record_fixture* to record*
2025-01-06 14:20:36 +00:00
Claudio Ortolina
229445ffc9
Add missing logged_out tag
2025-01-05 11:28:45 +00:00
Claudio Ortolina
65899b8077
Add tests for /api/collection/random endpoint
2025-01-01 20:57:01 +00:00
Claudio Ortolina
97533416f7
Support arbitrary resizing in cover controller
2024-12-31 11:58:30 +00:00
Claudio Ortolina
68b2d48228
Return thumb_url in latest record response
2024-12-31 11:39:36 +00:00
Claudio Ortolina
97f26e0cd2
Serve covers under API namespace as well
2024-12-22 22:15:24 +00:00
Claudio Ortolina
f1af38606a
Protect API behind a bearer token
2024-12-22 18:32:04 +00:00
Claudio Ortolina
341d276db5
Include artists and cover in latest record JSON
2024-12-22 15:55:41 +00:00
Claudio Ortolina
53e8d88b6a
Rename auth_password -> login_password
2024-12-21 14:57:44 +00:00
Claudio Ortolina
4f456322fc
Bootstrap the /api namespace
2024-12-21 14:38:39 +00:00
Claudio Ortolina
e4fe4e7f4b
Cache images for 24 hours
2024-12-15 12:09:29 +03:00
Claudio Ortolina
d9773bf45d
Improve test description
2024-11-29 17:21:42 +00:00
Claudio Ortolina
7d574c7fd9
Convert stats page to a live view
2024-10-29 16:32:34 +00:00