immich/mobile/lib/infrastructure
Adam Gastineau dc813e2816
fix(mobile): handle transient loading states for map timelines (#29735)
* fix(mobile): handle transient loading states for map timelines

* fix(mobile): handle transient loading states for map timelines

* Add support for new method

* Rewrote map options notifier to be more Riverpody
2026-08-28 06:06:10 -07:00
..
loaders fix(mobile): decode remote thumbnails at displayed size (#29965) 2026-08-10 21:14:23 +06:00
repositories fix(mobile): handle transient loading states for map timelines (#29735) 2026-08-28 06:06:10 -07:00
utils chore(mobile): move Drift into mobile/data (#30966) 2026-08-25 00:51:02 +05:30
mapper.dart chore(mobile): move Drift into mobile/data (#30966) 2026-08-25 00:51:02 +05:30
README.md chore(mobile): move Drift into mobile/data (#30966) 2026-08-25 00:51:02 +05:30

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

  • 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/
├── repositories/
│   └── user.repository.dart
└── utils/
    └── user.converter.dart

Note: The Drift schema, the database class, and the server API base moved to lib/data/. Repositories here are migrating there one entity at a time; new data access should be added under lib/data/.

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.