mirror of
https://github.com/immich-app/immich.git
synced 2026-06-04 21:25:49 -04:00
2feee111fd
Add a mechanism to share either the server-generated JPEG preview or the full original file. When the selection contains at least one asset that can provide a preview (a remote image), a bottom sheet lets the user pick the quality; otherwise sharing falls back to the original as before. The share-source resolution is extracted into pure, unit-tested business logic that handles all three asset states (local, remote, merged): - preview requires a remote image; videos and local-only assets fall back to the original - original prefers the on-device file, but edited assets are downloaded since edits only exist on the server - preview filenames are normalized to a .jpg extension Add unit tests covering the resolution, gating and filename helpers.
Domain Layer
This directory contains the domain layer of Immich. The domain layer is responsible for the business logic of the app. It includes interfaces for repositories, models, services and utilities. This layer should never depend on anything from the presentation layer or from the infrastructure layer.
Structure
- Interfaces: These are the interfaces that define the contract for data operations.
- Models: These are the core data classes that represent the business models.
- Services: These are the classes that contain the business logic and interact with the repositories.
- Utils: These are utility classes and functions that provide common functionalities used across the domain layer.
domain/
├── interfaces/
│ └── user.interface.dart
├── models/
│ └── user.model.dart
├── services/
│ └── user.service.dart
└── utils/
└── date_utils.dart
Usage
The domain layer provides services that implement the business logic by consuming repositories through dependency injection. Services are exposed through Riverpod providers in the root providers directory.
// In presentation layer
final userService = ref.watch(userServiceProvider);
final user = await userService.getUser(userId);
The presentation layer should never directly use repositories, but instead interact with the domain layer through services.