feat: product

This commit is contained in:
efrilm
2025-08-17 14:18:10 +07:00
parent 82c0eaf5fe
commit 7d24b3296d
22 changed files with 3779 additions and 183 deletions
@@ -0,0 +1,43 @@
part of '../product.dart';
@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 int price,
required int cost,
required String businessType,
required String imageUrl,
required String printerType,
required Map<String, dynamic> metadata,
required bool isActive,
required DateTime createdAt,
required DateTime updatedAt,
required List<ProductVariant> variants,
}) = _Product;
/// ✅ factory kosong untuk default state
factory Product.empty() => Product(
id: '',
organizationId: '',
categoryId: '',
sku: '',
name: '',
description: '',
price: 0,
cost: 0,
businessType: '',
imageUrl: '',
printerType: '',
metadata: {},
isActive: false,
createdAt: DateTime.now(),
updatedAt: DateTime.now(),
variants: [],
);
}
@@ -0,0 +1,26 @@
part of '../product.dart';
@freezed
class ProductVariant with _$ProductVariant {
const factory ProductVariant({
required String id,
required String productId,
required String name,
required int priceModifier,
required int cost,
required Map<String, dynamic> metadata,
required DateTime createdAt,
required DateTime updatedAt,
}) = _ProductVariant;
factory ProductVariant.empty() => ProductVariant(
id: '',
productId: '',
name: '',
priceModifier: 0,
cost: 0,
metadata: {},
createdAt: DateTime.now(),
updatedAt: DateTime.now(),
);
}
@@ -0,0 +1,10 @@
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.dynamicErrorMessage(String erroMessage) =
_DynamicErrorMessage;
}
+11
View File
@@ -0,0 +1,11 @@
import 'package:dartz/dartz.dart';
import 'package:freezed_annotation/freezed_annotation.dart';
import '../../common/api/api_failure.dart';
part 'product.freezed.dart';
part 'entities/product_entity.dart';
part 'entities/product_variant_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,10 @@
part of '../product.dart';
abstract class IProductRepository {
Future<Either<ProductFailure, List<Product>>> get({
int page = 1,
int limit = 10,
String? categoryId,
String? search,
});
}