admin
Some checks are pending
Backend CI / test (push) Waiting to run
Backend CI / build (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

This commit is contained in:
Dmitry 2025-12-20 13:07:31 +03:00
parent 1989f988a6
commit 1d9bc6c43d
2 changed files with 17 additions and 11 deletions

View file

@ -14,7 +14,6 @@ import 'package:mnemo_cards_common/mnemo_cards_common.dart';
import 'package:mnemo_cards_backend/api/v2/extensions/game_card_extensions.dart'; import 'package:mnemo_cards_backend/api/v2/extensions/game_card_extensions.dart';
import 'package:mnemo_cards_backend/api/v2/extensions/voice_extensions.dart'; import 'package:mnemo_cards_backend/api/v2/extensions/voice_extensions.dart';
import 'package:mnemo_cards_backend/packs/card_image_storage.dart'; import 'package:mnemo_cards_backend/packs/card_image_storage.dart';
import 'package:mnemo_cards_backend/packs/voice_storage.dart';
import 'package:mnemo_cards_backend/storage/minio_config.dart'; import 'package:mnemo_cards_backend/storage/minio_config.dart';
import 'package:mnemo_cards_backend/storage/minio_service.dart'; import 'package:mnemo_cards_backend/storage/minio_service.dart';
@ -456,18 +455,25 @@ class AdminCardsApiV2 {
); );
await _db.packDao.updateCard(updated); await _db.packDao.updateCard(updated);
// Получить текущие паки для карточки
final currentPacks = await _db.packDao.getPacksForCard(updated.id);
// Обновить связь с паком // Обновить связь с паком
if (requestDto.packId != null && requestDto.packId!.isNotEmpty) { if (requestDto.packId != null && requestDto.packId!.isNotEmpty) {
// Сначала удалить старую связь // Удалить все старые связи
await _db.packDao.removeCardFromPack(updated.id, existing.packId ?? ''); for (final pack in currentPacks) {
// Затем добавить новую await _db.packDao.removeCardFromPack(updated.id, pack.id);
}
// Затем добавить новую связь
await _db.packDao.addCardToPack(cardId: updated.id, packId: requestDto.packId!); await _db.packDao.addCardToPack(cardId: updated.id, packId: requestDto.packId!);
} else { } else {
// Если packId не указан или пустой, удалить связь // Если packId не указан или пустой, удалить все связи
await _db.packDao.removeCardFromPack(updated.id, existing.packId ?? ''); for (final pack in currentPacks) {
await _db.packDao.removeCardFromPack(updated.id, pack.id);
}
} }
// Получить паки для карточки // Получить паки для карточки после обновления
final packs = await _db.packDao.getPacksForCard(updated.id); final packs = await _db.packDao.getPacksForCard(updated.id);
final packId = packs.isNotEmpty ? packs.first.id : null; final packId = packs.isNotEmpty ? packs.first.id : null;

View file

@ -815,7 +815,7 @@ void main() {
expect(responseBody.containsKey('cards'), isTrue); expect(responseBody.containsKey('cards'), isTrue);
}); });
test('should return 409 for authenticated user who already owns pack', () async { test('should return pack info with isPurchased=true for authenticated user who already owns pack', () async {
// First, add pack to user // First, add pack to user
await testIsar.writeTxn(() async { await testIsar.writeTxn(() async {
final user = await testIsar.userModels.get(1); final user = await testIsar.userModels.get(1);
@ -843,9 +843,9 @@ void main() {
final responseBody = jsonDecode(await response.readAsString()) final responseBody = jsonDecode(await response.readAsString())
as Map<String, dynamic>; as Map<String, dynamic>;
expect(response.statusCode, equals(409)); expect(response.statusCode, equals(200));
expect(responseBody['error'], equals('Conflict')); expect(responseBody['id'], equals('11'));
expect(responseBody['message'], equals('Pack already purchased')); expect(responseBody['isPurchased'], equals(true));
}); });
test('should return 404 for non-existent pack (unauthenticated)', () async { test('should return 404 for non-existent pack (unauthenticated)', () async {