feat: product analytic range date

This commit is contained in:
efrilm
2025-08-18 17:06:41 +07:00
parent ac8c2c0f54
commit a61b19e45c
11 changed files with 554 additions and 309 deletions
@@ -6661,14 +6661,15 @@ ProductAnalyticDto _$ProductAnalyticDtoFromJson(Map<String, dynamic> json) {
/// @nodoc
mixin _$ProductAnalyticDto {
@JsonKey(name: 'organization_id')
String get organizationId => throw _privateConstructorUsedError;
String? get organizationId => throw _privateConstructorUsedError;
@JsonKey(name: 'outlet_id')
String get outletId => throw _privateConstructorUsedError;
String? get outletId => throw _privateConstructorUsedError;
@JsonKey(name: 'date_from')
String get dateFrom => throw _privateConstructorUsedError;
String? get dateFrom => throw _privateConstructorUsedError;
@JsonKey(name: 'date_to')
String get dateTo => throw _privateConstructorUsedError;
List<ProductAnalyticDataDto> get data => throw _privateConstructorUsedError;
String? get dateTo => throw _privateConstructorUsedError;
@JsonKey(name: 'data')
List<ProductAnalyticDataDto>? get data => throw _privateConstructorUsedError;
/// Serializes this ProductAnalyticDto to a JSON map.
Map<String, dynamic> toJson() => throw _privateConstructorUsedError;
@@ -6688,11 +6689,11 @@ abstract class $ProductAnalyticDtoCopyWith<$Res> {
) = _$ProductAnalyticDtoCopyWithImpl<$Res, ProductAnalyticDto>;
@useResult
$Res call({
@JsonKey(name: 'organization_id') String organizationId,
@JsonKey(name: 'outlet_id') String outletId,
@JsonKey(name: 'date_from') String dateFrom,
@JsonKey(name: 'date_to') String dateTo,
List<ProductAnalyticDataDto> data,
@JsonKey(name: 'organization_id') String? organizationId,
@JsonKey(name: 'outlet_id') String? outletId,
@JsonKey(name: 'date_from') String? dateFrom,
@JsonKey(name: 'date_to') String? dateTo,
@JsonKey(name: 'data') List<ProductAnalyticDataDto>? data,
});
}
@@ -6711,34 +6712,34 @@ class _$ProductAnalyticDtoCopyWithImpl<$Res, $Val extends ProductAnalyticDto>
@pragma('vm:prefer-inline')
@override
$Res call({
Object? organizationId = null,
Object? outletId = null,
Object? dateFrom = null,
Object? dateTo = null,
Object? data = null,
Object? organizationId = freezed,
Object? outletId = freezed,
Object? dateFrom = freezed,
Object? dateTo = freezed,
Object? data = freezed,
}) {
return _then(
_value.copyWith(
organizationId: null == organizationId
organizationId: freezed == organizationId
? _value.organizationId
: organizationId // ignore: cast_nullable_to_non_nullable
as String,
outletId: null == outletId
as String?,
outletId: freezed == outletId
? _value.outletId
: outletId // ignore: cast_nullable_to_non_nullable
as String,
dateFrom: null == dateFrom
as String?,
dateFrom: freezed == dateFrom
? _value.dateFrom
: dateFrom // ignore: cast_nullable_to_non_nullable
as String,
dateTo: null == dateTo
as String?,
dateTo: freezed == dateTo
? _value.dateTo
: dateTo // ignore: cast_nullable_to_non_nullable
as String,
data: null == data
as String?,
data: freezed == data
? _value.data
: data // ignore: cast_nullable_to_non_nullable
as List<ProductAnalyticDataDto>,
as List<ProductAnalyticDataDto>?,
)
as $Val,
);
@@ -6755,11 +6756,11 @@ abstract class _$$ProductAnalyticDtoImplCopyWith<$Res>
@override
@useResult
$Res call({
@JsonKey(name: 'organization_id') String organizationId,
@JsonKey(name: 'outlet_id') String outletId,
@JsonKey(name: 'date_from') String dateFrom,
@JsonKey(name: 'date_to') String dateTo,
List<ProductAnalyticDataDto> data,
@JsonKey(name: 'organization_id') String? organizationId,
@JsonKey(name: 'outlet_id') String? outletId,
@JsonKey(name: 'date_from') String? dateFrom,
@JsonKey(name: 'date_to') String? dateTo,
@JsonKey(name: 'data') List<ProductAnalyticDataDto>? data,
});
}
@@ -6777,34 +6778,34 @@ class __$$ProductAnalyticDtoImplCopyWithImpl<$Res>
@pragma('vm:prefer-inline')
@override
$Res call({
Object? organizationId = null,
Object? outletId = null,
Object? dateFrom = null,
Object? dateTo = null,
Object? data = null,
Object? organizationId = freezed,
Object? outletId = freezed,
Object? dateFrom = freezed,
Object? dateTo = freezed,
Object? data = freezed,
}) {
return _then(
_$ProductAnalyticDtoImpl(
organizationId: null == organizationId
organizationId: freezed == organizationId
? _value.organizationId
: organizationId // ignore: cast_nullable_to_non_nullable
as String,
outletId: null == outletId
as String?,
outletId: freezed == outletId
? _value.outletId
: outletId // ignore: cast_nullable_to_non_nullable
as String,
dateFrom: null == dateFrom
as String?,
dateFrom: freezed == dateFrom
? _value.dateFrom
: dateFrom // ignore: cast_nullable_to_non_nullable
as String,
dateTo: null == dateTo
as String?,
dateTo: freezed == dateTo
? _value.dateTo
: dateTo // ignore: cast_nullable_to_non_nullable
as String,
data: null == data
as String?,
data: freezed == data
? _value._data
: data // ignore: cast_nullable_to_non_nullable
as List<ProductAnalyticDataDto>,
as List<ProductAnalyticDataDto>?,
),
);
}
@@ -6814,11 +6815,11 @@ class __$$ProductAnalyticDtoImplCopyWithImpl<$Res>
@JsonSerializable()
class _$ProductAnalyticDtoImpl extends _ProductAnalyticDto {
const _$ProductAnalyticDtoImpl({
@JsonKey(name: 'organization_id') required this.organizationId,
@JsonKey(name: 'outlet_id') required this.outletId,
@JsonKey(name: 'date_from') required this.dateFrom,
@JsonKey(name: 'date_to') required this.dateTo,
required final List<ProductAnalyticDataDto> data,
@JsonKey(name: 'organization_id') this.organizationId,
@JsonKey(name: 'outlet_id') this.outletId,
@JsonKey(name: 'date_from') this.dateFrom,
@JsonKey(name: 'date_to') this.dateTo,
@JsonKey(name: 'data') final List<ProductAnalyticDataDto>? data,
}) : _data = data,
super._();
@@ -6827,22 +6828,25 @@ class _$ProductAnalyticDtoImpl extends _ProductAnalyticDto {
@override
@JsonKey(name: 'organization_id')
final String organizationId;
final String? organizationId;
@override
@JsonKey(name: 'outlet_id')
final String outletId;
final String? outletId;
@override
@JsonKey(name: 'date_from')
final String dateFrom;
final String? dateFrom;
@override
@JsonKey(name: 'date_to')
final String dateTo;
final List<ProductAnalyticDataDto> _data;
final String? dateTo;
final List<ProductAnalyticDataDto>? _data;
@override
List<ProductAnalyticDataDto> get data {
@JsonKey(name: 'data')
List<ProductAnalyticDataDto>? get data {
final value = _data;
if (value == null) return null;
if (_data is EqualUnmodifiableListView) return _data;
// ignore: implicit_dynamic_type
return EqualUnmodifiableListView(_data);
return EqualUnmodifiableListView(value);
}
@override
@@ -6895,11 +6899,11 @@ class _$ProductAnalyticDtoImpl extends _ProductAnalyticDto {
abstract class _ProductAnalyticDto extends ProductAnalyticDto {
const factory _ProductAnalyticDto({
@JsonKey(name: 'organization_id') required final String organizationId,
@JsonKey(name: 'outlet_id') required final String outletId,
@JsonKey(name: 'date_from') required final String dateFrom,
@JsonKey(name: 'date_to') required final String dateTo,
required final List<ProductAnalyticDataDto> data,
@JsonKey(name: 'organization_id') final String? organizationId,
@JsonKey(name: 'outlet_id') final String? outletId,
@JsonKey(name: 'date_from') final String? dateFrom,
@JsonKey(name: 'date_to') final String? dateTo,
@JsonKey(name: 'data') final List<ProductAnalyticDataDto>? data,
}) = _$ProductAnalyticDtoImpl;
const _ProductAnalyticDto._() : super._();
@@ -6908,18 +6912,19 @@ abstract class _ProductAnalyticDto extends ProductAnalyticDto {
@override
@JsonKey(name: 'organization_id')
String get organizationId;
String? get organizationId;
@override
@JsonKey(name: 'outlet_id')
String get outletId;
String? get outletId;
@override
@JsonKey(name: 'date_from')
String get dateFrom;
String? get dateFrom;
@override
@JsonKey(name: 'date_to')
String get dateTo;
String? get dateTo;
@override
List<ProductAnalyticDataDto> get data;
@JsonKey(name: 'data')
List<ProductAnalyticDataDto>? get data;
/// Create a copy of ProductAnalyticDto
/// with the given fields replaced by the non-null parameter values.
@@ -6938,20 +6943,21 @@ ProductAnalyticDataDto _$ProductAnalyticDataDtoFromJson(
/// @nodoc
mixin _$ProductAnalyticDataDto {
@JsonKey(name: 'product_id')
String get productId => throw _privateConstructorUsedError;
String? get productId => throw _privateConstructorUsedError;
@JsonKey(name: 'product_name')
String get productName => throw _privateConstructorUsedError;
String? get productName => throw _privateConstructorUsedError;
@JsonKey(name: 'category_id')
String get categoryId => throw _privateConstructorUsedError;
String? get categoryId => throw _privateConstructorUsedError;
@JsonKey(name: 'category_name')
String get categoryName => throw _privateConstructorUsedError;
String? get categoryName => throw _privateConstructorUsedError;
@JsonKey(name: 'quantity_sold')
int get quantitySold => throw _privateConstructorUsedError;
double get revenue => throw _privateConstructorUsedError;
int? get quantitySold => throw _privateConstructorUsedError;
@JsonKey(name: 'revenue')
int? get revenue => throw _privateConstructorUsedError;
@JsonKey(name: 'average_price')
double get averagePrice => throw _privateConstructorUsedError;
double? get averagePrice => throw _privateConstructorUsedError;
@JsonKey(name: 'order_count')
int get orderCount => throw _privateConstructorUsedError;
int? get orderCount => throw _privateConstructorUsedError;
/// Serializes this ProductAnalyticDataDto to a JSON map.
Map<String, dynamic> toJson() => throw _privateConstructorUsedError;
@@ -6971,14 +6977,14 @@ abstract class $ProductAnalyticDataDtoCopyWith<$Res> {
) = _$ProductAnalyticDataDtoCopyWithImpl<$Res, ProductAnalyticDataDto>;
@useResult
$Res call({
@JsonKey(name: 'product_id') String productId,
@JsonKey(name: 'product_name') String productName,
@JsonKey(name: 'category_id') String categoryId,
@JsonKey(name: 'category_name') String categoryName,
@JsonKey(name: 'quantity_sold') int quantitySold,
double revenue,
@JsonKey(name: 'average_price') double averagePrice,
@JsonKey(name: 'order_count') int orderCount,
@JsonKey(name: 'product_id') String? productId,
@JsonKey(name: 'product_name') String? productName,
@JsonKey(name: 'category_id') String? categoryId,
@JsonKey(name: 'category_name') String? categoryName,
@JsonKey(name: 'quantity_sold') int? quantitySold,
@JsonKey(name: 'revenue') int? revenue,
@JsonKey(name: 'average_price') double? averagePrice,
@JsonKey(name: 'order_count') int? orderCount,
});
}
@@ -7000,49 +7006,49 @@ class _$ProductAnalyticDataDtoCopyWithImpl<
@pragma('vm:prefer-inline')
@override
$Res call({
Object? productId = null,
Object? productName = null,
Object? categoryId = null,
Object? categoryName = null,
Object? quantitySold = null,
Object? revenue = null,
Object? averagePrice = null,
Object? orderCount = null,
Object? productId = freezed,
Object? productName = freezed,
Object? categoryId = freezed,
Object? categoryName = freezed,
Object? quantitySold = freezed,
Object? revenue = freezed,
Object? averagePrice = freezed,
Object? orderCount = freezed,
}) {
return _then(
_value.copyWith(
productId: null == productId
productId: freezed == productId
? _value.productId
: productId // ignore: cast_nullable_to_non_nullable
as String,
productName: null == productName
as String?,
productName: freezed == productName
? _value.productName
: productName // ignore: cast_nullable_to_non_nullable
as String,
categoryId: null == categoryId
as String?,
categoryId: freezed == categoryId
? _value.categoryId
: categoryId // ignore: cast_nullable_to_non_nullable
as String,
categoryName: null == categoryName
as String?,
categoryName: freezed == categoryName
? _value.categoryName
: categoryName // ignore: cast_nullable_to_non_nullable
as String,
quantitySold: null == quantitySold
as String?,
quantitySold: freezed == quantitySold
? _value.quantitySold
: quantitySold // ignore: cast_nullable_to_non_nullable
as int,
revenue: null == revenue
as int?,
revenue: freezed == revenue
? _value.revenue
: revenue // ignore: cast_nullable_to_non_nullable
as double,
averagePrice: null == averagePrice
as int?,
averagePrice: freezed == averagePrice
? _value.averagePrice
: averagePrice // ignore: cast_nullable_to_non_nullable
as double,
orderCount: null == orderCount
as double?,
orderCount: freezed == orderCount
? _value.orderCount
: orderCount // ignore: cast_nullable_to_non_nullable
as int,
as int?,
)
as $Val,
);
@@ -7059,14 +7065,14 @@ abstract class _$$ProductAnalyticDataDtoImplCopyWith<$Res>
@override
@useResult
$Res call({
@JsonKey(name: 'product_id') String productId,
@JsonKey(name: 'product_name') String productName,
@JsonKey(name: 'category_id') String categoryId,
@JsonKey(name: 'category_name') String categoryName,
@JsonKey(name: 'quantity_sold') int quantitySold,
double revenue,
@JsonKey(name: 'average_price') double averagePrice,
@JsonKey(name: 'order_count') int orderCount,
@JsonKey(name: 'product_id') String? productId,
@JsonKey(name: 'product_name') String? productName,
@JsonKey(name: 'category_id') String? categoryId,
@JsonKey(name: 'category_name') String? categoryName,
@JsonKey(name: 'quantity_sold') int? quantitySold,
@JsonKey(name: 'revenue') int? revenue,
@JsonKey(name: 'average_price') double? averagePrice,
@JsonKey(name: 'order_count') int? orderCount,
});
}
@@ -7085,49 +7091,49 @@ class __$$ProductAnalyticDataDtoImplCopyWithImpl<$Res>
@pragma('vm:prefer-inline')
@override
$Res call({
Object? productId = null,
Object? productName = null,
Object? categoryId = null,
Object? categoryName = null,
Object? quantitySold = null,
Object? revenue = null,
Object? averagePrice = null,
Object? orderCount = null,
Object? productId = freezed,
Object? productName = freezed,
Object? categoryId = freezed,
Object? categoryName = freezed,
Object? quantitySold = freezed,
Object? revenue = freezed,
Object? averagePrice = freezed,
Object? orderCount = freezed,
}) {
return _then(
_$ProductAnalyticDataDtoImpl(
productId: null == productId
productId: freezed == productId
? _value.productId
: productId // ignore: cast_nullable_to_non_nullable
as String,
productName: null == productName
as String?,
productName: freezed == productName
? _value.productName
: productName // ignore: cast_nullable_to_non_nullable
as String,
categoryId: null == categoryId
as String?,
categoryId: freezed == categoryId
? _value.categoryId
: categoryId // ignore: cast_nullable_to_non_nullable
as String,
categoryName: null == categoryName
as String?,
categoryName: freezed == categoryName
? _value.categoryName
: categoryName // ignore: cast_nullable_to_non_nullable
as String,
quantitySold: null == quantitySold
as String?,
quantitySold: freezed == quantitySold
? _value.quantitySold
: quantitySold // ignore: cast_nullable_to_non_nullable
as int,
revenue: null == revenue
as int?,
revenue: freezed == revenue
? _value.revenue
: revenue // ignore: cast_nullable_to_non_nullable
as double,
averagePrice: null == averagePrice
as int?,
averagePrice: freezed == averagePrice
? _value.averagePrice
: averagePrice // ignore: cast_nullable_to_non_nullable
as double,
orderCount: null == orderCount
as double?,
orderCount: freezed == orderCount
? _value.orderCount
: orderCount // ignore: cast_nullable_to_non_nullable
as int,
as int?,
),
);
}
@@ -7137,14 +7143,14 @@ class __$$ProductAnalyticDataDtoImplCopyWithImpl<$Res>
@JsonSerializable()
class _$ProductAnalyticDataDtoImpl extends _ProductAnalyticDataDto {
const _$ProductAnalyticDataDtoImpl({
@JsonKey(name: 'product_id') required this.productId,
@JsonKey(name: 'product_name') required this.productName,
@JsonKey(name: 'category_id') required this.categoryId,
@JsonKey(name: 'category_name') required this.categoryName,
@JsonKey(name: 'quantity_sold') required this.quantitySold,
required this.revenue,
@JsonKey(name: 'average_price') required this.averagePrice,
@JsonKey(name: 'order_count') required this.orderCount,
@JsonKey(name: 'product_id') this.productId,
@JsonKey(name: 'product_name') this.productName,
@JsonKey(name: 'category_id') this.categoryId,
@JsonKey(name: 'category_name') this.categoryName,
@JsonKey(name: 'quantity_sold') this.quantitySold,
@JsonKey(name: 'revenue') this.revenue,
@JsonKey(name: 'average_price') this.averagePrice,
@JsonKey(name: 'order_count') this.orderCount,
}) : super._();
factory _$ProductAnalyticDataDtoImpl.fromJson(Map<String, dynamic> json) =>
@@ -7152,27 +7158,28 @@ class _$ProductAnalyticDataDtoImpl extends _ProductAnalyticDataDto {
@override
@JsonKey(name: 'product_id')
final String productId;
final String? productId;
@override
@JsonKey(name: 'product_name')
final String productName;
final String? productName;
@override
@JsonKey(name: 'category_id')
final String categoryId;
final String? categoryId;
@override
@JsonKey(name: 'category_name')
final String categoryName;
final String? categoryName;
@override
@JsonKey(name: 'quantity_sold')
final int quantitySold;
final int? quantitySold;
@override
final double revenue;
@JsonKey(name: 'revenue')
final int? revenue;
@override
@JsonKey(name: 'average_price')
final double averagePrice;
final double? averagePrice;
@override
@JsonKey(name: 'order_count')
final int orderCount;
final int? orderCount;
@override
String toString() {
@@ -7235,14 +7242,14 @@ class _$ProductAnalyticDataDtoImpl extends _ProductAnalyticDataDto {
abstract class _ProductAnalyticDataDto extends ProductAnalyticDataDto {
const factory _ProductAnalyticDataDto({
@JsonKey(name: 'product_id') required final String productId,
@JsonKey(name: 'product_name') required final String productName,
@JsonKey(name: 'category_id') required final String categoryId,
@JsonKey(name: 'category_name') required final String categoryName,
@JsonKey(name: 'quantity_sold') required final int quantitySold,
required final double revenue,
@JsonKey(name: 'average_price') required final double averagePrice,
@JsonKey(name: 'order_count') required final int orderCount,
@JsonKey(name: 'product_id') final String? productId,
@JsonKey(name: 'product_name') final String? productName,
@JsonKey(name: 'category_id') final String? categoryId,
@JsonKey(name: 'category_name') final String? categoryName,
@JsonKey(name: 'quantity_sold') final int? quantitySold,
@JsonKey(name: 'revenue') final int? revenue,
@JsonKey(name: 'average_price') final double? averagePrice,
@JsonKey(name: 'order_count') final int? orderCount,
}) = _$ProductAnalyticDataDtoImpl;
const _ProductAnalyticDataDto._() : super._();
@@ -7251,27 +7258,28 @@ abstract class _ProductAnalyticDataDto extends ProductAnalyticDataDto {
@override
@JsonKey(name: 'product_id')
String get productId;
String? get productId;
@override
@JsonKey(name: 'product_name')
String get productName;
String? get productName;
@override
@JsonKey(name: 'category_id')
String get categoryId;
String? get categoryId;
@override
@JsonKey(name: 'category_name')
String get categoryName;
String? get categoryName;
@override
@JsonKey(name: 'quantity_sold')
int get quantitySold;
int? get quantitySold;
@override
double get revenue;
@JsonKey(name: 'revenue')
int? get revenue;
@override
@JsonKey(name: 'average_price')
double get averagePrice;
double? get averagePrice;
@override
@JsonKey(name: 'order_count')
int get orderCount;
int? get orderCount;
/// Create a copy of ProductAnalyticDataDto
/// with the given fields replaced by the non-null parameter values.
@@ -521,12 +521,12 @@ Map<String, dynamic> _$$DashboardRecentSaleDtoImplToJson(
_$ProductAnalyticDtoImpl _$$ProductAnalyticDtoImplFromJson(
Map<String, dynamic> json,
) => _$ProductAnalyticDtoImpl(
organizationId: json['organization_id'] as String,
outletId: json['outlet_id'] as String,
dateFrom: json['date_from'] as String,
dateTo: json['date_to'] as String,
data: (json['data'] as List<dynamic>)
.map((e) => ProductAnalyticDataDto.fromJson(e as Map<String, dynamic>))
organizationId: json['organization_id'] as String?,
outletId: json['outlet_id'] as String?,
dateFrom: json['date_from'] as String?,
dateTo: json['date_to'] as String?,
data: (json['data'] as List<dynamic>?)
?.map((e) => ProductAnalyticDataDto.fromJson(e as Map<String, dynamic>))
.toList(),
);
@@ -543,14 +543,14 @@ Map<String, dynamic> _$$ProductAnalyticDtoImplToJson(
_$ProductAnalyticDataDtoImpl _$$ProductAnalyticDataDtoImplFromJson(
Map<String, dynamic> json,
) => _$ProductAnalyticDataDtoImpl(
productId: json['product_id'] as String,
productName: json['product_name'] as String,
categoryId: json['category_id'] as String,
categoryName: json['category_name'] as String,
quantitySold: (json['quantity_sold'] as num).toInt(),
revenue: (json['revenue'] as num).toDouble(),
averagePrice: (json['average_price'] as num).toDouble(),
orderCount: (json['order_count'] as num).toInt(),
productId: json['product_id'] as String?,
productName: json['product_name'] as String?,
categoryId: json['category_id'] as String?,
categoryName: json['category_name'] as String?,
quantitySold: (json['quantity_sold'] as num?)?.toInt(),
revenue: (json['revenue'] as num?)?.toInt(),
averagePrice: (json['average_price'] as num?)?.toDouble(),
orderCount: (json['order_count'] as num?)?.toInt(),
);
Map<String, dynamic> _$$ProductAnalyticDataDtoImplToJson(
@@ -5,22 +5,22 @@ class ProductAnalyticDto with _$ProductAnalyticDto {
const ProductAnalyticDto._();
const factory ProductAnalyticDto({
@JsonKey(name: 'organization_id') required String organizationId,
@JsonKey(name: 'outlet_id') required String outletId,
@JsonKey(name: 'date_from') required String dateFrom,
@JsonKey(name: 'date_to') required String dateTo,
required List<ProductAnalyticDataDto> data,
@JsonKey(name: 'organization_id') String? organizationId,
@JsonKey(name: 'outlet_id') String? outletId,
@JsonKey(name: 'date_from') String? dateFrom,
@JsonKey(name: 'date_to') String? dateTo,
@JsonKey(name: 'data') List<ProductAnalyticDataDto>? data,
}) = _ProductAnalyticDto;
factory ProductAnalyticDto.fromJson(Map<String, dynamic> json) =>
_$ProductAnalyticDtoFromJson(json);
ProductAnalytic toDomain() => ProductAnalytic(
organizationId: organizationId,
outletId: outletId,
dateFrom: dateFrom,
dateTo: dateTo,
data: data.map((e) => e.toDomain()).toList(),
organizationId: organizationId ?? "",
outletId: outletId ?? "",
dateFrom: dateFrom ?? "",
dateTo: dateTo ?? "",
data: data?.map((e) => e.toDomain()).toList() ?? [],
);
}
@@ -29,27 +29,27 @@ class ProductAnalyticDataDto with _$ProductAnalyticDataDto {
const ProductAnalyticDataDto._();
const factory ProductAnalyticDataDto({
@JsonKey(name: 'product_id') required String productId,
@JsonKey(name: 'product_name') required String productName,
@JsonKey(name: 'category_id') required String categoryId,
@JsonKey(name: 'category_name') required String categoryName,
@JsonKey(name: 'quantity_sold') required int quantitySold,
required double revenue,
@JsonKey(name: 'average_price') required double averagePrice,
@JsonKey(name: 'order_count') required int orderCount,
@JsonKey(name: 'product_id') String? productId,
@JsonKey(name: 'product_name') String? productName,
@JsonKey(name: 'category_id') String? categoryId,
@JsonKey(name: 'category_name') String? categoryName,
@JsonKey(name: 'quantity_sold') int? quantitySold,
@JsonKey(name: 'revenue') int? revenue,
@JsonKey(name: 'average_price') double? averagePrice,
@JsonKey(name: 'order_count') int? orderCount,
}) = _ProductAnalyticDataDto;
factory ProductAnalyticDataDto.fromJson(Map<String, dynamic> json) =>
_$ProductAnalyticDataDtoFromJson(json);
ProductAnalyticData toDomain() => ProductAnalyticData(
productId: productId,
productName: productName,
categoryId: categoryId,
categoryName: categoryName,
quantitySold: quantitySold,
revenue: revenue,
averagePrice: averagePrice,
orderCount: orderCount,
productId: productId ?? "",
productName: productName ?? "",
categoryId: categoryId ?? "",
categoryName: categoryName ?? "",
quantitySold: quantitySold ?? 0,
revenue: revenue ?? 0,
averagePrice: averagePrice ?? 0,
orderCount: orderCount ?? 0,
);
}