import 'package:sqflite/sqflite.dart'; import 'package:path/path.dart'; import 'package:chepuhagram/data/models/message_model.dart'; class LocalDbService { static final LocalDbService _instance = LocalDbService._internal(); static Database? _database; factory LocalDbService() => _instance; LocalDbService._internal(); Future get database async { if (_database != null) return _database!; _database = await _initDb(); return _database!; } Future _initDb() async { String path = join(await getDatabasesPath(), 'chat_app.db'); return await openDatabase( path, version: 1, onCreate: (db, version) async { await db.execute(''' CREATE TABLE messages( id INTEGER PRIMARY KEY, sender_id INTEGER, receiver_id INTEGER, content TEXT, timestamp TEXT ) '''); }, ); } // Сохранение списка сообщений (из истории) Future saveMessages(List messages) async { final db = await database; Batch batch = db.batch(); for (var msg in messages) { if (msg is MessageModel) { batch.insert('messages', { 'id': msg.id, 'sender_id': msg.senderId, 'receiver_id': msg.receiverId, 'content': msg.text, // ВАЖНО: сохраняй зашифрованный текст! 'timestamp': msg.createdAt.toIso8601String(), }, conflictAlgorithm: ConflictAlgorithm.replace); } else { // Если это Map из API batch.insert('messages', { 'id': msg['id'], 'sender_id': msg['sender_id'], 'receiver_id': msg['receiver_id'], // Убедись, что ключ совпадает с API 'content': msg['content'], 'timestamp': msg['timestamp'], }, conflictAlgorithm: ConflictAlgorithm.replace); } } await batch.commit(noResult: true); } // Получение сообщений конкретного чата Future>> getChatHistory( int contactId, int myId, ) async { final db = await database; return await db.query( 'messages', where: '(sender_id = ? AND receiver_id = ?) OR (sender_id = ? AND receiver_id = ?)', whereArgs: [contactId, myId, myId, contactId], orderBy: 'timestamp ASC', ); } }