immich/mobile/lib/infrastructure
Omar Salama 8dde2d55b3 feat(mobile): add storage status filtering option
- Introduced new storage status options: "On Device Only", "On Server Only", and "All" in search filters.
- Updated search service to handle filtering based on storage status, allowing for device-only or server-only asset searches.
- Enhanced UI components to support new storage status filters, including a dedicated picker for selecting storage options.
- Adjusted existing search logic to accommodate new filtering criteria and ensure proper asset retrieval based on selected storage status.
2026-08-08 02:58:09 +03:00
..
entities chore(mobile): Apply stricter linting rules for correctness (#30372) 2026-07-30 19:39:24 +00:00
loaders chore(mobile): Apply stricter linting rules for formatting (#30370) 2026-07-30 08:56:46 +00:00
repositories feat(mobile): add storage status filtering option 2026-08-08 02:58:09 +03:00
utils chore(mobile): Apply stricter linting rules for formatting (#30370) 2026-07-30 08:56:46 +00:00
mapper.dart refactor: partner-page (#28783) 2026-06-04 09:05:45 -04:00
README.md refactor(mobile): split store into repo and service (#16199) 2025-02-19 13:05:24 -06:00

Infrastructure Layer

This directory contains the infrastructure layer of Immich. The infrastructure layer is responsible for the implementation details of the app. It includes data sources, APIs, and other external dependencies.

Structure

  • Entities: These are the classes that define the database schema for the domain models.
  • Repositories: These are the actual implementation of the domain interfaces. A single interface might have multiple implementations.
  • Utils: These are utility classes and functions specific to infrastructure implementations.
infrastructure/
├── entities/
│   └── user.entity.dart
├── repositories/
│   └── user.repository.dart
└── utils/
    └── database_utils.dart

Usage

The infrastructure layer provides concrete implementations of repository interfaces defined in the domain layer. These implementations are exposed through Riverpod providers in the root providers directory.

// In domain/services/user.service.dart
final userRepository = ref.watch(userRepositoryProvider);
final user = await userRepository.getUser(userId);

The domain layer should never directly instantiate repository implementations, but instead receive them through dependency injection.