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
112 lines
2.8 KiB
Dart
112 lines
2.8 KiB
Dart
import 'package:drift/drift.dart';
|
|
import 'dart:convert';
|
|
|
|
// Конвертеры для JSON полей - общие для всех таблиц
|
|
|
|
class JsonMapConverter extends TypeConverter<Map<String, dynamic>?, String> {
|
|
const JsonMapConverter();
|
|
|
|
@override
|
|
Map<String, dynamic>? fromSql(String? fromDb) {
|
|
if (fromDb == null || fromDb.isEmpty || fromDb == '{}') return null;
|
|
try {
|
|
return json.decode(fromDb) as Map<String, dynamic>;
|
|
} catch (e) {
|
|
return null;
|
|
}
|
|
}
|
|
|
|
@override
|
|
String toSql(Map<String, dynamic>? value) {
|
|
if (value == null || value.isEmpty) return '{}';
|
|
return json.encode(value);
|
|
}
|
|
}
|
|
|
|
class JsonListConverter extends TypeConverter<List<dynamic>?, String> {
|
|
const JsonListConverter();
|
|
|
|
@override
|
|
List<dynamic>? fromSql(String? fromDb) {
|
|
if (fromDb == null || fromDb.isEmpty || fromDb == '[]') return null;
|
|
try {
|
|
return json.decode(fromDb) as List<dynamic>;
|
|
} catch (e) {
|
|
return null;
|
|
}
|
|
}
|
|
|
|
@override
|
|
String toSql(List<dynamic>? value) {
|
|
if (value == null || value.isEmpty) return '[]';
|
|
return json.encode(value);
|
|
}
|
|
}
|
|
|
|
class StringListConverter extends TypeConverter<List<String>, String> {
|
|
const StringListConverter();
|
|
|
|
@override
|
|
List<String> fromSql(String fromDb) {
|
|
if (fromDb.isEmpty || fromDb == '[]') return [];
|
|
try {
|
|
final decoded = json.decode(fromDb);
|
|
return (decoded as List).map((e) => e.toString()).toList();
|
|
} catch (e) {
|
|
return [];
|
|
}
|
|
}
|
|
|
|
@override
|
|
String toSql(List<String> value) {
|
|
if (value.isEmpty) return '[]';
|
|
return json.encode(value);
|
|
}
|
|
}
|
|
|
|
class DateTimeListConverter extends TypeConverter<List<DateTime>?, String> {
|
|
const DateTimeListConverter();
|
|
|
|
@override
|
|
List<DateTime>? fromSql(String? fromDb) {
|
|
if (fromDb == null || fromDb.isEmpty || fromDb == '[]') return null;
|
|
try {
|
|
final decoded = json.decode(fromDb) as List;
|
|
return decoded.map((e) {
|
|
if (e is String) {
|
|
return DateTime.parse(e);
|
|
}
|
|
return DateTime.now();
|
|
}).toList();
|
|
} catch (e) {
|
|
return null;
|
|
}
|
|
}
|
|
|
|
@override
|
|
String toSql(List<DateTime>? value) {
|
|
if (value == null || value.isEmpty) return '[]';
|
|
return json.encode(value.map((e) => e.toIso8601String()).toList());
|
|
}
|
|
}
|
|
|
|
class IntListConverter extends TypeConverter<List<int>, String> {
|
|
const IntListConverter();
|
|
|
|
@override
|
|
List<int> fromSql(String fromDb) {
|
|
if (fromDb.isEmpty || fromDb == '[]') return [];
|
|
try {
|
|
final decoded = json.decode(fromDb);
|
|
return (decoded as List).map((e) => e as int).toList();
|
|
} catch (e) {
|
|
return [];
|
|
}
|
|
}
|
|
|
|
@override
|
|
String toSql(List<int> value) {
|
|
if (value.isEmpty) return '[]';
|
|
return json.encode(value);
|
|
}
|
|
}
|