|
|
-
- 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;
- }
- }
|