Commit Graph

57 Commits

Author SHA1 Message Date
Spinnich
15b485b118 fix(collections): address reviewer feedback on types and concurrency
- Use CollectionSchema instead of ReturnType<typeof collectionsStore.getCollection>
  in AddRoms.vue and RemoveRoms.vue (simpler, per gantoine review)
- Wrap bulk INSERT in a savepoint so a concurrent duplicate-key violation
  is caught via IntegrityError and ignored rather than aborting the transaction
- Only bump Collection.updated_at in remove_roms_from_collection when rows
  were actually deleted (rowcount > 0), matching add_roms_to_collection behavior

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-15 06:46:12 -04:00
Spinnich
2ecefa3d3f Fix race condition in collection and favorite rom membership updates
Replace full rom_ids list replacement with atomic POST/DELETE endpoints
that add or remove individual ROMs from a collection. This prevents
concurrent rapid clicks from overwriting each other (last-write-wins).

Also fix missing session.flush() in add_rom_user() and add collection
endpoint tests.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-14 15:08:53 -04:00
Georges-Antoine Assi
a3ebe16a39 run fmt 2026-03-24 15:32:48 -04:00
copilot-swe-agent[bot]
a5954590ec Fix IntegrityError when updating favourites with stale ROM IDs
Co-authored-by: gantoine <3247106+gantoine@users.noreply.github.com>
Agent-Logs-Url: https://github.com/rommapp/romm/sessions/8a6fd3fe-77ab-4f7b-a0e9-1c55e7096e88
2026-03-23 22:19:06 +00:00
Georges-Antoine Assi
bddb7bd9f5 manual cleanup 2026-01-18 22:27:46 -05:00
Georges-Antoine Assi
3ccc14d4a2 add endpoints for identifiers 2026-01-18 22:17:37 -05:00
Georges-Antoine Assi
54bfb3fec5 DB functions accept list of params 2026-01-18 21:26:48 -05:00
Brandon T. Kowalski
5cb71c920f Added updated_after query parameter for normal and smart collections and migration to add corresponding indexes to each table. 2026-01-17 23:25:02 -05:00
Georges-Antoine Assi
3965a89860 convert legacy selected_status 2026-01-14 11:05:43 -05:00
Georges-Antoine Assi
2d8444d60b [HOTFIX] Rename selected_statuses to statuses 2026-01-14 10:07:57 -05:00
zurdi
a956008259 feat: update ROM filtering to support multi-value statuses and logic operators 2025-12-25 11:52:00 +00:00
zurdi
48d6df9cc0 feat: add logic operators for multi-value filters in collections and roms handlers 2025-12-24 15:23:44 +00:00
zurdi
ab637203ac Merge branch 'master' into feat/rom-filter-multivalue 2025-12-24 12:39:45 +00:00
Georges-Antoine Assi
19ef2d4d5f type ignore session and query attrs 2025-12-12 17:05:12 -05:00
zurdi
bc73f07537 Refactor: enhance filter criteria handling to support multi-value selections for genres, franchises, collections, companies, age ratings, regions, and languages 2025-11-28 22:36:21 +00:00
zurdi
92cb643405 Refactor: update filter criteria handling to support multi-value platform IDs and remove legacy conversion logic 2025-11-28 17:04:43 +00:00
zurdi
c1d43f67f8 Refactor ROM retrieval to support multi-value platform filtering across various handlers and endpoints 2025-11-27 22:52:33 +00:00
zurdi
c6717ee635 Refactor gallery filter components to use toggle buttons for filter states, allowing null values for all filters. Update filter logic in the store and API services to accommodate new states. Enhance UI for better visibility and interaction with filter options in the gallery app. 2025-11-27 12:56:01 +00:00
zurdi
d48be2f37c Merge branch 'master' into feat/rom-filter-multivalue 2025-11-21 14:11:07 +00:00
Georges-Antoine Assi
1c84f84948 globally rename favourite to favorite 2025-10-18 14:26:20 -04:00
Georges-Antoine Assi
341332d98e mark favorites collection explicit 2025-10-18 13:42:03 -04:00
Michael Manganiello
5a1f7d8170 feat: Initial support for multi-value ROM filters
This change converts the existing single-value ROM filter parameters
to support multiple values. Users can now filter ROMs by multiple genres,
franchises, collections, companies, age ratings, regions, and languages by
repeating the respective query parameters in API requests.

At the moment, setting multiple values for a filter will return ROMs
that match any of the provided values (logical OR). A future change can
introduce parameters like `genres_all (boolean)` to allow filtering ROMs
that match all specified values (logical AND).

The frontend has been updated to send single-value filters as arrays
to maintain compatibility with existing UI components. At the moment,
the UI does not support selecting multiple values, but this change
lays the groundwork for it.

NOTE: Breaking API change, as the filter parameters have changed names.
2025-09-09 00:21:55 -03:00
Michael Manganiello
e4e3928d1b misc: Apply import sorting 2025-09-04 11:17:00 -03:00
Georges-Antoine Assi
898f960c96 noload rom metadata on collection 2025-08-22 09:15:03 -04:00
Georges-Antoine Assi
b26abdf9a0 noload some related tables 2025-08-21 23:59:24 -04:00
Georges-Antoine Assi
344702415f joinedload roms on collection 2025-08-21 23:23:38 -04:00
Georges-Antoine Assi
7850cf059f fix loading collections 2025-08-19 21:49:52 -04:00
Georges-Antoine Assi
2a8fec94e6 update smart collection model 2025-07-25 16:27:10 -04:00
Georges-Antoine Assi
f7b030ba10 get backend working sorta 2025-07-22 18:10:12 -04:00
Georges-Antoine Assi
75b8181451 start work on smart collections 2025-07-22 15:49:43 -04:00
Michael Manganiello
252722e3bc misc: Apply pyupgrade changes for Python 3.12 compatibility
Command applied:
```
find ./backend/ -type f -name "*.py" -exec pyupgrade --py312-plus {} \;
```
2025-06-29 12:27:16 -03:00
Georges-Antoine Assi
1cb66e28ec fix removing game from collection 2025-02-27 11:21:51 -05:00
Georges-Antoine Assi
3088e4566c changes from self-view 2025-02-09 11:22:10 -05:00
Georges-Antoine Assi
b829a54d9f fix trunk 2025-02-08 23:21:00 -05:00
Georges-Antoine Assi
22e0c806e1 prefetch rom collections for details 2025-01-29 10:13:02 -05:00
Georges-Antoine Assi
cd724b7d1a migrate collections over to join table 2025-01-28 23:47:09 -05:00
Georges-Antoine Assi
60ec728e55 add option for all 2025-01-28 21:34:57 -05:00
Georges-Antoine Assi
f12ffdf685 add ui option to fetch/show virtual platforms 2025-01-28 11:10:21 -05:00
Georges-Antoine Assi
21d2ce951e more fixes to loading games 2025-01-27 22:29:38 -05:00
Georges-Antoine Assi
5a79200617 bunch o fixes 2025-01-27 21:29:22 -05:00
Georges-Antoine Assi
10fbead892 autogenerate cover art 2025-01-27 20:26:33 -05:00
Georges-Antoine Assi
5dbc1aae0b display virtual collections 2025-01-27 19:14:54 -05:00
Georges-Antoine Assi
dbe4b71c7a super naive appraoch to loading virtual collections 2025-01-27 18:15:52 -05:00
Georges-Antoine Assi
9d8baef9de small tweaks from review 2025-01-15 22:54:35 -05:00
Georges-Antoine Assi
696a1c6122 Merge branch 'master' into rom-hashing-background-task 2025-01-15 21:51:23 -05:00
Michael Manganiello
7825bce7b8 fix: Use proper JSON contains function for PostgreSQL
Fix `json_array_contains_value` function to use the `@>` operator for
checking if a JSON array contains a value in PostgreSQL. This is
necessary because the `has_key` function only works for string values.

Also, remove `get_rom_collections` method, as it was doing the same
thing as `get_collections_by_rom_id`.

Fixes #1441.
2025-01-08 21:07:01 -03:00
Georges-Antoine Assi
2e4e557eef fixup running scans and loading 2024-12-21 12:06:37 -05:00
Georges-Antoine Assi
3fcce6606c complete updating the endpoints and models 2024-12-20 22:41:56 -05:00
zurdi
c6039ccff4 fix: correct filter condition for retrieving collections associated with a ROM ID 2024-12-05 16:16:34 +00:00
zurdi
014427e69f fix: update ROM deletion process to remove associated collections and streamline user data updates 2024-12-05 16:08:45 +00:00