|
|
import '/database/models/friends.dart';
|
|
import '/utils/encryption/crypto_utils.dart';
|
|
import '/utils/storage/database.dart';
|
|
|
|
class FriendsRepository {
|
|
|
|
static Future<Friend> getFriendByFriendId(String userId) async {
|
|
final db = await getDatabaseConnection();
|
|
|
|
final List<Map<String, dynamic>> maps = await db.query(
|
|
'friends',
|
|
where: 'friend_id = ?',
|
|
whereArgs: [userId],
|
|
);
|
|
|
|
if (maps.length != 1) {
|
|
throw ArgumentError('Invalid user id');
|
|
}
|
|
|
|
return Friend(
|
|
id: maps[0]['id'],
|
|
userId: maps[0]['user_id'],
|
|
friendId: maps[0]['friend_id'],
|
|
friendSymmetricKey: maps[0]['symmetric_key'],
|
|
publicKey: CryptoUtils.rsaPublicKeyFromPem(maps[0]['asymmetric_public_key']),
|
|
acceptedAt: maps[0]['accepted_at'] != null ? DateTime.parse(maps[0]['accepted_at']) : null,
|
|
username: maps[0]['username'],
|
|
);
|
|
}
|
|
|
|
static Future<List<Friend>> getFriends({bool? accepted}) async {
|
|
final db = await getDatabaseConnection();
|
|
|
|
String? where;
|
|
|
|
if (accepted == true) {
|
|
where = 'accepted_at IS NOT NULL';
|
|
}
|
|
|
|
if (accepted == false) {
|
|
where = 'accepted_at IS NULL';
|
|
}
|
|
|
|
final List<Map<String, dynamic>> maps = await db.query(
|
|
'friends',
|
|
where: where,
|
|
orderBy: 'accepted_at IS NOT NULL',
|
|
);
|
|
|
|
return List.generate(maps.length, (i) {
|
|
return Friend(
|
|
id: maps[i]['id'],
|
|
userId: maps[i]['user_id'],
|
|
friendId: maps[i]['friend_id'],
|
|
friendSymmetricKey: maps[i]['symmetric_key'],
|
|
publicKey: CryptoUtils.rsaPublicKeyFromPem(maps[i]['asymmetric_public_key']),
|
|
acceptedAt: maps[i]['accepted_at'] != null ? DateTime.parse(maps[i]['accepted_at']) : null,
|
|
username: maps[i]['username'],
|
|
);
|
|
});
|
|
}
|
|
|
|
static Future<DateTime?> getLatestAcceptedAt() async {
|
|
final db = await getDatabaseConnection();
|
|
|
|
final List<Map<String, dynamic>> maps = await db.rawQuery(
|
|
'''
|
|
SELECT friends.accepted_at FROM friends
|
|
ORDER BY accepted_at DESC
|
|
LIMIT 1;
|
|
'''
|
|
);
|
|
|
|
return maps.isNotEmpty ? DateTime.parse(maps[0]['accepted_at']) : null;
|
|
}
|
|
}
|