mnemo_cards/mnemo_cards_backend/lib/discounts/discount_drift_extension.dart
Dmitry 336bafc600
Some checks are pending
Backend CI / test (push) Waiting to run
Backend CI / build (push) Blocked by required conditions
Web App CI / test (push) Waiting to run
Web App CI / build (push) Blocked by required conditions
Deploy Admin Panel / Deploy Admin Panel (push) Waiting to run
Deploy Admin Panel / Admin Panel Verification (push) Blocked by required conditions
Deploy Mnemo Cards / Deploy Backend (push) Waiting to run
Deploy Mnemo Cards / Deploy Web App (push) Blocked by required conditions
Deploy Mnemo Cards / Final Verification (push) Blocked by required conditions
Deploy Telegram Bot / Deploy Telegram Bot (push) Waiting to run
tasks and stuff
2026-01-09 20:21:18 +03:00

139 lines
4.1 KiB
Dart

import 'package:drift/drift.dart' as drift;
import 'package:drift_postgres/drift_postgres.dart';
import 'package:mnemo_cards_backend/database/database.dart';
import 'package:mnemo_cards_backend/repository/export.dart';
import 'package:mnemo_cards_common/mnemo_cards_common.dart';
import 'package:mnemo_cards_common_backend/mnemo_cards_common_backend.dart';
/// Extension для конвертации DiscountCampaign (Drift) в DTO
extension DiscountCampaignToDto on DiscountCampaign {
Future<DiscountCampaignDto> toDto(
DiscountRepository discountRepository,
) async {
final discounts = await discountRepository.getDiscountsByCampaignId(id);
final discountsDto = discounts.map((d) => d.toDto()).toList();
DiscountCampaignStatus statusEnum;
switch (status) {
case 'created':
statusEnum = DiscountCampaignStatus.created;
break;
case 'active':
statusEnum = DiscountCampaignStatus.active;
break;
case 'expired':
statusEnum = DiscountCampaignStatus.expired;
break;
case 'disabled':
statusEnum = DiscountCampaignStatus.disabled;
break;
default:
statusEnum = DiscountCampaignStatus.created;
}
return DiscountCampaignDto(
id: id,
start: start.dateTime,
finish: finish.dateTime,
status: statusEnum,
name: name,
tags: tags,
discounts: discountsDto,
);
}
}
/// Extension для конвертации Discount (Drift) в DTO
extension DiscountToDto on Discount {
DiscountDto toDto() {
final productsList = products
.map((p) {
if (p is Map<String, dynamic>) {
return MnemoCardsProductDto.fromJson(p);
}
return null;
})
.whereType<MnemoCardsProductDto>()
.toList();
return DiscountDto(
discountPercent: discountPercent,
products: productsList,
id: id.toString(),
);
}
}
/// Extension для конвертации DiscountCampaignDto в DiscountCampaignsCompanion
extension DiscountCampaignDtoToCompanion on DiscountCampaignDto {
DiscountCampaignsCompanion toCompanion() {
String statusStr;
switch (status) {
case DiscountCampaignStatus.created:
statusStr = 'created';
break;
case DiscountCampaignStatus.active:
statusStr = 'active';
break;
case DiscountCampaignStatus.expired:
statusStr = 'expired';
break;
case DiscountCampaignStatus.disabled:
statusStr = 'disabled';
break;
}
return DiscountCampaignsCompanion.insert(
id: id != null ? drift.Value(id!) : const drift.Value.absent(),
name: drift.Value(name),
start: PgDateTime(start),
finish: PgDateTime(finish),
status: statusStr,
tags: drift.Value(tags),
);
}
}
/// Extension для конвертации DiscountDto в DiscountsCompanion
extension DiscountDtoToCompanion on DiscountDto {
DiscountsCompanion toCompanion(String campaignId) {
final productsJson = products.map((p) => p.toJson()).toList();
return DiscountsCompanion.insert(
campaignId: campaignId,
discountPercent: discountPercent,
products: drift.Value(productsJson),
);
}
}
/// Helper для конвертации статуса в строку
String discountCampaignStatusToString(DiscountCampaignModelStatus status) {
switch (status) {
case DiscountCampaignModelStatus.created:
return 'created';
case DiscountCampaignModelStatus.active:
return 'active';
case DiscountCampaignModelStatus.expired:
return 'expired';
case DiscountCampaignModelStatus.disabled:
return 'disabled';
}
}
/// Helper для конвертации строки в статус
DiscountCampaignModelStatus? discountCampaignStatusFromString(String? status) {
if (status == null) return null;
switch (status) {
case 'created':
return DiscountCampaignModelStatus.created;
case 'active':
return DiscountCampaignModelStatus.active;
case 'expired':
return DiscountCampaignModelStatus.expired;
case 'disabled':
return DiscountCampaignModelStatus.disabled;
default:
return null;
}
}