diff --git a/mnemo_cards_backend/lib/database/daos/mixins/soft_delete_mixin.dart b/mnemo_cards_backend/lib/database/daos/mixins/soft_delete_mixin.dart index fff5c3b..eb7f94b 100644 --- a/mnemo_cards_backend/lib/database/daos/mixins/soft_delete_mixin.dart +++ b/mnemo_cards_backend/lib/database/daos/mixins/soft_delete_mixin.dart @@ -35,15 +35,10 @@ mixin SoftDeleteMixin on DatabaseAccessor { SimpleSelectStatement selectActive() { return select(table) ..where((t) { - // Проблема: через dynamic Drift может неправильно определить тип boolean - // и сгенерировать SQL, который сравнивает boolean с integer - // Решение: используем прямое SQL выражение для правильного сравнения boolean - // В PostgreSQL имена колонок в snake_case: is_deleted - final tableName = table.actualTableName; - return CustomExpression( - '"$tableName"."is_deleted" = FALSE', - precedence: Precedence.comparison, - ); + // После удаления customConstraint('') из boolean колонок, + // Drift корректно определяет тип boolean и генерирует правильный SQL + final isDeletedColumn = (t as dynamic).isDeleted; + return isDeletedColumn.equals(false); }); } diff --git a/mnemo_cards_backend/lib/database/database.g.dart b/mnemo_cards_backend/lib/database/database.g.dart index fed8c95..69d9914 100644 --- a/mnemo_cards_backend/lib/database/database.g.dart +++ b/mnemo_cards_backend/lib/database/database.g.dart @@ -56,7 +56,9 @@ class $UsersTable extends Users with TableInfo<$UsersTable, User> { false, type: DriftSqlType.bool, requiredDuringInsert: false, - $customConstraints: '', + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'CHECK ("admin" IN (0, 1))', + ), defaultValue: const Constant(false), ); static const VerificationMeta _userSettingsMeta = const VerificationMeta( @@ -116,7 +118,9 @@ class $UsersTable extends Users with TableInfo<$UsersTable, User> { false, type: DriftSqlType.bool, requiredDuringInsert: false, - $customConstraints: '', + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'CHECK ("is_deleted" IN (0, 1))', + ), defaultValue: const Constant(false), ); @override @@ -1520,7 +1524,9 @@ class $TokensTable extends Tokens with TableInfo<$TokensTable, Token> { false, type: DriftSqlType.bool, requiredDuringInsert: false, - $customConstraints: '', + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'CHECK ("is_deleted" IN (0, 1))', + ), defaultValue: const Constant(false), ); static const VerificationMeta _deletedAtMeta = const VerificationMeta( @@ -2018,7 +2024,9 @@ class $RefreshTokensTable extends RefreshTokens false, type: DriftSqlType.bool, requiredDuringInsert: false, - $customConstraints: '', + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'CHECK ("is_blacklisted" IN (0, 1))', + ), defaultValue: const Constant(false), ); static const VerificationMeta _createdAtMeta = const VerificationMeta( @@ -2056,7 +2064,9 @@ class $RefreshTokensTable extends RefreshTokens false, type: DriftSqlType.bool, requiredDuringInsert: false, - $customConstraints: '', + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'CHECK ("is_deleted" IN (0, 1))', + ), defaultValue: const Constant(false), ); static const VerificationMeta _deletedAtMeta = const VerificationMeta( @@ -2628,7 +2638,9 @@ class $TelegramAuthCodesTable extends TelegramAuthCodes false, type: DriftSqlType.bool, requiredDuringInsert: false, - $customConstraints: '', + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'CHECK ("is_deleted" IN (0, 1))', + ), defaultValue: const Constant(false), ); static const VerificationMeta _deletedAtMeta = const VerificationMeta( @@ -3346,7 +3358,9 @@ class $CardPacksTable extends CardPacks false, type: DriftSqlType.bool, requiredDuringInsert: false, - $customConstraints: '', + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'CHECK ("enabled" IN (0, 1))', + ), defaultValue: const Constant(true), ); @override @@ -3449,7 +3463,9 @@ class $CardPacksTable extends CardPacks false, type: DriftSqlType.bool, requiredDuringInsert: false, - $customConstraints: '', + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'CHECK ("is_deleted" IN (0, 1))', + ), defaultValue: const Constant(false), ); @override @@ -4431,7 +4447,9 @@ class $GameCardsTable extends GameCards false, type: DriftSqlType.bool, requiredDuringInsert: false, - $customConstraints: '', + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'CHECK ("is_deleted" IN (0, 1))', + ), defaultValue: const Constant(false), ); @override @@ -6584,7 +6602,9 @@ class $SubscriptionPlansTable extends SubscriptionPlans false, type: DriftSqlType.bool, requiredDuringInsert: false, - $customConstraints: '', + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'CHECK ("is_deleted" IN (0, 1))', + ), defaultValue: const Constant(false), ); @override @@ -7748,7 +7768,9 @@ class $PaymentsTable extends Payments with TableInfo<$PaymentsTable, Payment> { false, type: DriftSqlType.bool, requiredDuringInsert: false, - $customConstraints: '', + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'CHECK ("is_deleted" IN (0, 1))', + ), defaultValue: const Constant(false), ); static const VerificationMeta _deletedAtMeta = const VerificationMeta( @@ -8535,7 +8557,9 @@ class $TestsTable extends Tests with TableInfo<$TestsTable, Test> { false, type: DriftSqlType.bool, requiredDuringInsert: false, - $customConstraints: '', + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'CHECK ("is_deleted" IN (0, 1))', + ), defaultValue: const Constant(false), ); static const VerificationMeta _deletedAtMeta = const VerificationMeta( @@ -9180,7 +9204,9 @@ class $TestQuestionsTable extends TestQuestions false, type: DriftSqlType.bool, requiredDuringInsert: false, - $customConstraints: '', + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'CHECK ("is_deleted" IN (0, 1))', + ), defaultValue: const Constant(false), ); static const VerificationMeta _deletedAtMeta = const VerificationMeta( @@ -12927,7 +12953,9 @@ class $PromoCodesCampaignsTable extends PromoCodesCampaigns false, type: DriftSqlType.bool, requiredDuringInsert: false, - $customConstraints: '', + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'CHECK ("is_deleted" IN (0, 1))', + ), defaultValue: const Constant(false), ); static const VerificationMeta _deletedAtMeta = const VerificationMeta( @@ -13754,7 +13782,9 @@ class $PromoCodesTable extends PromoCodes false, type: DriftSqlType.bool, requiredDuringInsert: false, - $customConstraints: '', + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'CHECK ("is_deleted" IN (0, 1))', + ), defaultValue: const Constant(false), ); static const VerificationMeta _deletedAtMeta = const VerificationMeta( @@ -14336,7 +14366,9 @@ class $DiscountCampaignsTable extends DiscountCampaigns false, type: DriftSqlType.bool, requiredDuringInsert: false, - $customConstraints: '', + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'CHECK ("is_deleted" IN (0, 1))', + ), defaultValue: const Constant(false), ); static const VerificationMeta _deletedAtMeta = const VerificationMeta( @@ -14947,7 +14979,9 @@ class $DiscountsTable extends Discounts false, type: DriftSqlType.bool, requiredDuringInsert: false, - $customConstraints: '', + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'CHECK ("is_deleted" IN (0, 1))', + ), defaultValue: const Constant(false), ); static const VerificationMeta _deletedAtMeta = const VerificationMeta( @@ -15832,7 +15866,9 @@ class $StudySessionsTable extends StudySessions false, type: DriftSqlType.bool, requiredDuringInsert: false, - $customConstraints: '', + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'CHECK ("is_deleted" IN (0, 1))', + ), defaultValue: const Constant(false), ); static const VerificationMeta _deletedAtMeta = const VerificationMeta( diff --git a/mnemo_cards_backend/lib/database/tables/auth.dart b/mnemo_cards_backend/lib/database/tables/auth.dart index 13edc74..0a1b64c 100644 --- a/mnemo_cards_backend/lib/database/tables/auth.dart +++ b/mnemo_cards_backend/lib/database/tables/auth.dart @@ -18,8 +18,7 @@ class Tokens extends Table { .withDefault(now())(); Column get expires => customType(PgTypes.timestampWithTimezone)(); BoolColumn get isDeleted => boolean() - .withDefault(const Constant(false)) - .customConstraint('')(); + .withDefault(const Constant(false))(); Column get deletedAt => customType(PgTypes.timestampWithTimezone) .nullable()(); @@ -43,15 +42,13 @@ class RefreshTokens extends Table { TextColumn get jti => text().unique()(); // JWT ID BoolColumn get isBlacklisted => boolean() - .withDefault(const Constant(false)) - .customConstraint('')(); // PostgreSQL использует нативный BOOLEAN + .withDefault(const Constant(false))(); // PostgreSQL использует нативный BOOLEAN Column get createdAt => customType(PgTypes.timestampWithTimezone) .withDefault(now())(); Column get expiresAt => customType(PgTypes.timestampWithTimezone)(); BoolColumn get isDeleted => boolean() - .withDefault(const Constant(false)) - .customConstraint('')(); + .withDefault(const Constant(false))(); Column get deletedAt => customType(PgTypes.timestampWithTimezone) .nullable()(); @@ -81,8 +78,7 @@ class TelegramAuthCodes extends Table { .withDefault(now())(); Column get expiresAt => customType(PgTypes.timestampWithTimezone)(); BoolColumn get isDeleted => boolean() - .withDefault(const Constant(false)) - .customConstraint('')(); + .withDefault(const Constant(false))(); Column get deletedAt => customType(PgTypes.timestampWithTimezone) .nullable()(); diff --git a/mnemo_cards_backend/lib/database/tables/discounts.dart b/mnemo_cards_backend/lib/database/tables/discounts.dart index cdb87ea..738bb1b 100644 --- a/mnemo_cards_backend/lib/database/tables/discounts.dart +++ b/mnemo_cards_backend/lib/database/tables/discounts.dart @@ -28,8 +28,8 @@ class DiscountCampaigns extends Table { Column get updatedAt => customType(PgTypes.timestampWithTimezone) .withDefault(now())(); BoolColumn get isDeleted => boolean() - .withDefault(const Constant(false)) - .customConstraint('')(); // PostgreSQL использует нативный BOOLEAN + .withDefault(const Constant(false))(); + // PostgreSQL использует нативный BOOLEAN Column get deletedAt => customType(PgTypes.timestampWithTimezone) .nullable()(); @@ -59,8 +59,8 @@ class Discounts extends Table { Column get updatedAt => customType(PgTypes.timestampWithTimezone) .withDefault(now())(); BoolColumn get isDeleted => boolean() - .withDefault(const Constant(false)) - .customConstraint('')(); // PostgreSQL использует нативный BOOLEAN + .withDefault(const Constant(false))(); + // PostgreSQL использует нативный BOOLEAN Column get deletedAt => customType(PgTypes.timestampWithTimezone) .nullable()(); diff --git a/mnemo_cards_backend/lib/database/tables/packs.dart b/mnemo_cards_backend/lib/database/tables/packs.dart index b5dd072..501970e 100644 --- a/mnemo_cards_backend/lib/database/tables/packs.dart +++ b/mnemo_cards_backend/lib/database/tables/packs.dart @@ -22,8 +22,8 @@ class CardPacks extends Table { TextColumn get version => text().nullable()(); IntColumn get order => integer().withDefault(const Constant(0))(); BoolColumn get enabled => boolean() - .withDefault(const Constant(true)) - .customConstraint('')(); // PostgreSQL использует нативный BOOLEAN + .withDefault(const Constant(true))(); + // PostgreSQL использует нативный BOOLEAN // Порядок карточек (JSON array of IDs) TextColumn get cardsOrder => text() @@ -45,8 +45,8 @@ class CardPacks extends Table { Column get updatedAt => customType(PgTypes.timestampWithTimezone) .withDefault(now())(); BoolColumn get isDeleted => boolean() - .withDefault(const Constant(false)) - .customConstraint('')(); // PostgreSQL использует нативный BOOLEAN + .withDefault(const Constant(false))(); + // PostgreSQL использует нативный BOOLEAN @override Set get primaryKey => {id}; @@ -81,8 +81,8 @@ class GameCards extends Table { Column get updatedAt => customType(PgTypes.timestampWithTimezone) .withDefault(now())(); BoolColumn get isDeleted => boolean() - .withDefault(const Constant(false)) - .customConstraint('')(); // PostgreSQL использует нативный BOOLEAN + .withDefault(const Constant(false))(); + // PostgreSQL использует нативный BOOLEAN @override Set get primaryKey => {id}; diff --git a/mnemo_cards_backend/lib/database/tables/payments.dart b/mnemo_cards_backend/lib/database/tables/payments.dart index fd579a2..4040905 100644 --- a/mnemo_cards_backend/lib/database/tables/payments.dart +++ b/mnemo_cards_backend/lib/database/tables/payments.dart @@ -35,8 +35,8 @@ class Payments extends Table { Column get updatedAt => customType(PgTypes.timestampWithTimezone) .withDefault(now())(); BoolColumn get isDeleted => boolean() - .withDefault(const Constant(false)) - .customConstraint('')(); + .withDefault(const Constant(false))(); + Column get deletedAt => customType(PgTypes.timestampWithTimezone) .nullable()(); diff --git a/mnemo_cards_backend/lib/database/tables/promo_codes.dart b/mnemo_cards_backend/lib/database/tables/promo_codes.dart index e88d4b2..c6f76a6 100644 --- a/mnemo_cards_backend/lib/database/tables/promo_codes.dart +++ b/mnemo_cards_backend/lib/database/tables/promo_codes.dart @@ -38,8 +38,8 @@ class PromoCodesCampaigns extends Table { Column get updatedAt => customType(PgTypes.timestampWithTimezone) .withDefault(now())(); BoolColumn get isDeleted => boolean() - .withDefault(const Constant(false)) - .customConstraint('')(); // PostgreSQL использует нативный BOOLEAN + .withDefault(const Constant(false))(); + // PostgreSQL использует нативный BOOLEAN Column get deletedAt => customType(PgTypes.timestampWithTimezone) .nullable()(); @@ -69,8 +69,8 @@ class PromoCodes extends Table { Column get updatedAt => customType(PgTypes.timestampWithTimezone) .withDefault(now())(); BoolColumn get isDeleted => boolean() - .withDefault(const Constant(false)) - .customConstraint('')(); + .withDefault(const Constant(false))(); + Column get deletedAt => customType(PgTypes.timestampWithTimezone) .nullable()(); diff --git a/mnemo_cards_backend/lib/database/tables/statistics.dart b/mnemo_cards_backend/lib/database/tables/statistics.dart index c8c8b6d..096d5c1 100644 --- a/mnemo_cards_backend/lib/database/tables/statistics.dart +++ b/mnemo_cards_backend/lib/database/tables/statistics.dart @@ -30,8 +30,8 @@ class StudySessions extends Table { Column get updatedAt => customType(PgTypes.timestampWithTimezone) .withDefault(now())(); BoolColumn get isDeleted => boolean() - .withDefault(const Constant(false)) - .customConstraint('')(); + .withDefault(const Constant(false))(); + Column get deletedAt => customType(PgTypes.timestampWithTimezone) .nullable()(); diff --git a/mnemo_cards_backend/lib/database/tables/subscriptions.dart b/mnemo_cards_backend/lib/database/tables/subscriptions.dart index 7345a7b..f82ac37 100644 --- a/mnemo_cards_backend/lib/database/tables/subscriptions.dart +++ b/mnemo_cards_backend/lib/database/tables/subscriptions.dart @@ -32,8 +32,8 @@ class SubscriptionPlans extends Table { Column get updatedAt => customType(PgTypes.timestampWithTimezone) .withDefault(now())(); BoolColumn get isDeleted => boolean() - .withDefault(const Constant(false)) - .customConstraint('')(); // PostgreSQL использует нативный BOOLEAN + .withDefault(const Constant(false))(); + // PostgreSQL использует нативный BOOLEAN @override Set get primaryKey => {id}; diff --git a/mnemo_cards_backend/lib/database/tables/tests.dart b/mnemo_cards_backend/lib/database/tables/tests.dart index 0ed6d7a..d310542 100644 --- a/mnemo_cards_backend/lib/database/tables/tests.dart +++ b/mnemo_cards_backend/lib/database/tables/tests.dart @@ -22,8 +22,8 @@ class Tests extends Table { Column get updatedAt => customType(PgTypes.timestampWithTimezone) .withDefault(now())(); BoolColumn get isDeleted => boolean() - .withDefault(const Constant(false)) - .customConstraint('')(); // PostgreSQL использует нативный BOOLEAN + .withDefault(const Constant(false))(); + // PostgreSQL использует нативный BOOLEAN Column get deletedAt => customType(PgTypes.timestampWithTimezone) .nullable()(); @@ -49,8 +49,8 @@ class TestQuestions extends Table { Column get updatedAt => customType(PgTypes.timestampWithTimezone) .withDefault(now())(); BoolColumn get isDeleted => boolean() - .withDefault(const Constant(false)) - .customConstraint('')(); + .withDefault(const Constant(false))(); + Column get deletedAt => customType(PgTypes.timestampWithTimezone) .nullable()(); diff --git a/mnemo_cards_backend/lib/database/tables/users.dart b/mnemo_cards_backend/lib/database/tables/users.dart index 4c53d91..c1729cc 100644 --- a/mnemo_cards_backend/lib/database/tables/users.dart +++ b/mnemo_cards_backend/lib/database/tables/users.dart @@ -11,8 +11,7 @@ class Users extends Table { TextColumn get name => text().nullable()(); TextColumn get email => text().nullable()(); BoolColumn get admin => boolean() - .withDefault(const Constant(false)) - .customConstraint('')(); // PostgreSQL использует нативный BOOLEAN + .withDefault(const Constant(false))(); // PostgreSQL использует нативный BOOLEAN // UserSettings (JSON) TextColumn get userSettings => text().nullable()(); @@ -29,8 +28,7 @@ class Users extends Table { Column get updatedAt => customType(PgTypes.timestampWithTimezone) .withDefault(now())(); BoolColumn get isDeleted => boolean() - .withDefault(const Constant(false)) - .customConstraint('')(); // PostgreSQL использует нативный BOOLEAN + .withDefault(const Constant(false))(); // PostgreSQL использует нативный BOOLEAN @override Set get primaryKey => {id};