import 'package:comunic/helpers/database/database_contract.dart'; import 'package:comunic/helpers/database/database_helper.dart'; import 'package:comunic/models/cache_model.dart'; /// Model database helper /// /// Base model for caching data in the database /// /// @author Pierre HUBERT abstract class ModelDatabaseHelper { /// Get the name of the target table. Must be specified by the children /// of this class String tableName(); /// Initialize an element from a map T initializeFromMap(Map map); /// Insert an entry in the database Future _insertDB(T el) async { await (await DatabaseHelper.get()) .insert(tableName(), el.toMap()); } /// Update an element in the database Future _updateDB(T el) async { await (await DatabaseHelper.get()).update( tableName(), el.toMap(), where: "${BaseTableContract.C_ID} = ?", whereArgs: [el.id], ); } /// Get an element from the database with a specified [id] /// /// Returns null if none found Future get(int id) async { List maps = await (await DatabaseHelper.get()).query( UserTableContract.TABLE_NAME, where: '${UserTableContract.C_ID} = ?', whereArgs: [id], ); if (maps.length > 0) return initializeFromMap(maps[0]); return null; } /// Check out whether an element specified with its [id] is present /// or not in the local database Future has(int id) async { return (await get(id)) != null; } /// Insert or update information about a el (depends of the presence /// of previous element information in the database Future insertOrUpdate(T el) async { if (await has(el.id)) await _updateDB(el); else await _insertDB(el); } /// Insert or update an important amount of elements Future insertOrUpdateAll(List list) async { for(int i = 0; i < list.length; i++) await insertOrUpdate(list[i]); } }