Files
HHA/app/lib/domain/repositories/tour_repository.dart
2026-03-24 15:03:35 +01:00

110 lines
3.2 KiB
Dart

import 'package:dartz/dartz.dart';
import '../entities/tour.dart';
import '../entities/logistic_object.dart';
import '../entities/location.dart';
import '../entities/counter.dart';
import '../../core/errors/failures.dart';
abstract class TourRepository {
// Touren
Future<Either<Failure, List<Tour>>> getTours();
Future<Either<Failure, Tour>> getTourById(int tourId);
Future<Either<Failure, void>> updateTourState(int tourId, int state);
Future<Either<Failure, void>> completeTour(int tourId);
// Sync
Future<Either<Failure, void>> syncData();
Future<Either<Failure, bool>> checkForUpdates();
// Objects
Future<Either<Failure, List<LogisticObject>>> getObjectsByTour(int tourId);
Future<Either<Failure, List<LogisticObject>>> getObjectsByState(String state);
Future<Either<Failure, LogisticObject?>> getObjectByBarcode(String barcode);
Future<Either<Failure, void>> updateObjectState(
int objectId,
String newState, {
int? locationId,
int? refType,
int? refId,
String? containerCode,
});
Future<Either<Failure, void>> createObject({
required int type,
required String code,
bool isManual = true,
});
// Locations
Future<Either<Failure, List<Location>>> getLocations();
Future<Either<Failure, Location>> getLocationById(int locationId);
// Metadata
Future<Either<Failure, List<ObjectMetadata>>> getObjectMetadata();
// Statistics
Future<Either<Failure, TourStatistics>> getTourStatistics(int tourId);
Future<Either<Failure, ObjectStatistics>> getObjectStatistics();
// Counter operations (spezifisch für Lua-kompatible Ansichten)
Future<Either<Failure, CounterOverview>> getCounterOverview(
int tourId,
String tourType, {
String? pageId,
});
Future<Either<Failure, List<PickupCount>>> getPickupCounts(int tourId, String pageId);
Future<Either<Failure, List<SwapCount>>> getSwapCounts(int tourId, String pageId);
// Container operations
Future<Either<Failure, List<ContainerInfo>>> getOpenContainers();
Future<Either<Failure, void>> addObjectToContainer(
String containerId,
String containerType,
int objectId,
);
Future<Either<Failure, void>> closeContainer(
String containerId,
String containerType,
);
// Recent scans
Future<Either<Failure, List<RecentScan>>> getRecentScans(
int tourId, {
int limit = 10,
});
}
class TourStatistics {
final int totalObjects;
final int completedObjects;
final int pendingObjects;
final Map<String, int> objectsByState;
final Map<String, int> objectsByType;
final double completionPercentage;
const TourStatistics({
required this.totalObjects,
required this.completedObjects,
required this.pendingObjects,
required this.objectsByState,
required this.objectsByType,
required this.completionPercentage,
});
}
class ObjectStatistics {
final Map<String, int> byState;
final Map<String, int> byType;
final Map<String, int> byLocation;
final List<LogisticObject> recentObjects;
final int totalCount;
const ObjectStatistics({
required this.byState,
required this.byType,
required this.byLocation,
required this.recentObjects,
required this.totalCount,
});
}