This commit is contained in:
Phuoc Nguyen
2025-10-10 16:38:07 +07:00
parent e5b247d622
commit b94c158004
177 changed files with 25080 additions and 152 deletions

View File

@@ -0,0 +1,42 @@
import 'package:equatable/equatable.dart';
/// Product domain entity
class Product extends Equatable {
final String id;
final String name;
final String description;
final double price;
final String? imageUrl;
final String categoryId;
final int stockQuantity;
final bool isAvailable;
final DateTime createdAt;
final DateTime updatedAt;
const Product({
required this.id,
required this.name,
required this.description,
required this.price,
this.imageUrl,
required this.categoryId,
required this.stockQuantity,
required this.isAvailable,
required this.createdAt,
required this.updatedAt,
});
@override
List<Object?> get props => [
id,
name,
description,
price,
imageUrl,
categoryId,
stockQuantity,
isAvailable,
createdAt,
updatedAt,
];
}

View File

@@ -0,0 +1,21 @@
import 'package:dartz/dartz.dart';
import '../../../../core/errors/failures.dart';
import '../entities/product.dart';
/// Product repository interface
abstract class ProductRepository {
/// Get all products from cache
Future<Either<Failure, List<Product>>> getAllProducts();
/// Get products by category
Future<Either<Failure, List<Product>>> getProductsByCategory(String categoryId);
/// Search products
Future<Either<Failure, List<Product>>> searchProducts(String query);
/// Get product by ID
Future<Either<Failure, Product>> getProductById(String id);
/// Sync products from remote
Future<Either<Failure, List<Product>>> syncProducts();
}

View File

@@ -0,0 +1,15 @@
import 'package:dartz/dartz.dart';
import '../../../../core/errors/failures.dart';
import '../entities/product.dart';
import '../repositories/product_repository.dart';
/// Use case to get all products
class GetAllProducts {
final ProductRepository repository;
GetAllProducts(this.repository);
Future<Either<Failure, List<Product>>> call() async {
return await repository.getAllProducts();
}
}

View File

@@ -0,0 +1,15 @@
import 'package:dartz/dartz.dart';
import '../../../../core/errors/failures.dart';
import '../entities/product.dart';
import '../repositories/product_repository.dart';
/// Use case to search products
class SearchProducts {
final ProductRepository repository;
SearchProducts(this.repository);
Future<Either<Failure, List<Product>>> call(String query) async {
return await repository.searchProducts(query);
}
}