product repo

This commit is contained in:
efrilm
2025-10-24 22:03:35 +07:00
parent dea5de8828
commit 4fdd1e44f8
18 changed files with 6256 additions and 0 deletions
@@ -0,0 +1,86 @@
part of '../product.dart';
@freezed
class ListProduct with _$ListProduct {
const factory ListProduct({
required List<Product> products,
required int totalCount,
required int page,
required int limit,
required int totalPages,
}) = _ListProduct;
factory ListProduct.empty() => const ListProduct(
products: [],
totalCount: 0,
page: 0,
limit: 0,
totalPages: 0,
);
}
@freezed
class Product with _$Product {
const factory Product({
required String id,
required String organizationId,
required String categoryId,
required String sku,
required String name,
required String description,
required double price,
required double cost,
required String businessType,
required String imageUrl,
required String printerType,
required Map<String, dynamic> metadata,
required bool isActive,
required String createdAt,
required String updatedAt,
required List<ProductVariant> variants,
}) = _Product;
factory Product.empty() => const Product(
id: '',
organizationId: '',
categoryId: '',
sku: '',
name: '',
description: '',
price: 0.0,
cost: 0.0,
businessType: '',
imageUrl: '',
printerType: '',
metadata: {},
isActive: false,
createdAt: '',
updatedAt: '',
variants: [],
);
}
@freezed
class ProductVariant with _$ProductVariant {
const factory ProductVariant({
required String id,
required String productId,
required String name,
required double priceModifier,
required double cost,
required Map<String, dynamic> metadata,
required String createdAt,
required String updatedAt,
}) = _ProductVariant;
factory ProductVariant.empty() => const ProductVariant(
id: '',
productId: '',
name: '',
priceModifier: 0.0,
cost: 0.0,
metadata: {},
createdAt: '',
updatedAt: '',
);
}
@@ -0,0 +1,12 @@
part of '../product.dart';
@freezed
sealed class ProductFailure with _$ProductFailure {
const factory ProductFailure.serverError(ApiFailure failure) = _ServerError;
const factory ProductFailure.unexpectedError() = _UnexpectedError;
const factory ProductFailure.empty() = _Empty;
const factory ProductFailure.localStorageError(String erroMessage) =
_LocalStorageError;
const factory ProductFailure.dynamicErrorMessage(String erroMessage) =
_DynamicErrorMessage;
}
+11
View File
@@ -0,0 +1,11 @@
import 'package:dartz/dartz.dart';
import 'package:flutter/foundation.dart';
import 'package:freezed_annotation/freezed_annotation.dart';
import '../../common/api/api_failure.dart';
part 'product.freezed.dart';
part 'entities/product_entity.dart';
part 'failures/product_failure.dart';
part 'repositories/i_product_repository.dart';
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,34 @@
part of '../product.dart';
abstract class IProductRepository {
Future<Either<ProductFailure, ListProduct>> getProducts({
int page = 1,
int limit = 10,
String? categoryId,
String? search,
bool forceRefresh = false,
});
Future<Either<ProductFailure, List<Product>>> searchProductsOptimized(
String query,
);
Future<Either<ProductFailure, String>> syncAllProducts();
Future<Either<ProductFailure, ListProduct>> refreshProducts({
String? categoryId,
String? search,
});
Future<Either<ProductFailure, Product>> getProductById(String id);
Future<bool> hasLocalProducts();
Future<Either<ProductFailure, Map<String, dynamic>>> getDatabaseStats();
void clearCache();
Future<bool> isLocalDatabaseReady();
Future<void> clearAllProducts();
}