This commit refactors the `AppDao` to provide more flexible and robust querying options for application data.
Key changes:
- **Renamed `_rawQueryAppEntities` to `_rawStreamAppEntities`**: This clarifies the function's purpose of returning a Flow of entities.
- **Added `_rawQueryAppEntities`**: A new suspend function that directly returns a List of entities, for non-streaming use cases.
- **Introduced `query` function**: A new public suspend function that mirrors the functionality of `stream` but returns a `List<AppEntity>` instead of a `Flow`.
- **Enhanced `searchQuery` private function**:
- Now accepts lists for `categoriesToInclude`, `categoriesToExclude`, `antiFeaturesToInclude`, and `antiFeaturesToExclude` to allow filtering by multiple criteria.
- Uses `DISTINCT` in the SQL query to avoid duplicate app entries.
- Corrected join condition for `category_app_relation` from `app.id = category_app_relation.appId` to `app.id = category_app_relation.id`.
- Corrected table name for anti-features from `anti_feature_app_relation` to `anti_features_app_relation`.
- Improved SQL query construction for category and anti-feature filtering using `IN` and `NOT IN` clauses.
- Ensured `ORDER BY` clause is always present, even if `searchQuery` is null.
- Prefixed table names in `ORDER BY` clause (e.g., `app.lastUpdated`) for clarity and to avoid ambiguity.
- **Updated `stream` function**: Now utilizes the refactored `searchQuery` function and passes through all new filtering parameters.
- **Updated database schema**:
- Changed `onDelete` action for the foreign key in the `authentication` table to `CASCADE`.
- **Updated Room tests**:
- Simplified setup by removing legacy database initialization.
- Added tests for new sorting and category filtering functionalities in `AppDao`.