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
139 lines
4.1 KiB
Dart
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;
|
|
}
|
|
}
|