mirror-immich/mobile/lib/domain/services/partner.service.dart

43 lines
1.8 KiB
Dart

import 'package:immich_mobile/constants/enums.dart';
import 'package:immich_mobile/domain/models/user.model.dart';
import 'package:immich_mobile/infrastructure/repositories/partner.repository.dart';
import 'package:immich_mobile/infrastructure/repositories/user.repository.dart';
import 'package:immich_mobile/repositories/partner_api.repository.dart';
import 'package:stream_transform/stream_transform.dart';
class PartnerService {
final UserRepository _userRepository;
final PartnerRepository _partnerRepository;
final PartnerApiRepository _partnerApiRepository;
const PartnerService(this._userRepository, this._partnerRepository, this._partnerApiRepository);
Stream<Iterable<User>> getCandidates(String userId) {
final userStream = _userRepository.getAll();
final partnerStream = _partnerRepository.search(userId, .sharedBy);
return userStream.combineLatest(partnerStream, (users, partners) {
final partnersSet = partners.map((partner) => partner.id).toSet();
return users.where((user) => user.id != userId && !partnersSet.contains(user.id));
});
}
Stream<Iterable<Partner>> search(String userId, PartnerDirection direction) =>
_partnerRepository.search(userId, direction);
Future<void> update(String partnerId, String userId, {required bool inTimeline}) async {
await _partnerApiRepository.update(partnerId, inTimeline: inTimeline);
await _partnerRepository.update(partnerId, userId, inTimeline: inTimeline);
}
Future<void> create(String partnerId, String userId) async {
await _partnerApiRepository.create(partnerId);
await _partnerRepository.create(partnerId, userId);
}
Future<void> delete(String partnerId, String userId) async {
await _partnerApiRepository.delete(partnerId);
await _partnerRepository.delete(partnerId, userId);
}
}