summaryrefslogtreecommitdiff
path: root/lib/database/helper.dart
blob: a1f672d12a50b8ece8b4efba667c8db689f6042b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
import 'dart:io';

// ignore: depend_on_referenced_packages
import 'package:path/path.dart';
import 'package:path_provider/path_provider.dart';
import 'package:pmsna1/models/post.dart';
import 'package:sqflite/sqflite.dart';

class DatabaseHelper {
  static const dbName = "tecstagram.sql";
  static const dbVersion = 1;

  static Database? _database;

  static Future<Database> _initDatabase() async {
    String dir = Platform.isIOS
        ? (await getLibraryDirectory()).path
        : await getDatabasesPath();
    String dbDir = join(dir, dbName);
    _database = await openDatabase(
      dbDir,
      version: dbVersion,
      onConfigure: _onConfigure,
    );
    return _database!;
  }

  Future<Database> get database async => _database ?? await _initDatabase();

  static void _onConfigure(Database db) {
    db.execute("""CREATE TABLE posts (
  id INTEGER PRIMARY KEY,
  description VARCHAR(500),
  date DATE,
);""");
  }

  Future<int> insert(String table, Map<String, dynamic> data) async {
    Database conn = await database;
    return conn.insert(table, data);
  }

  Future<int> update<T>(
      String table, Map<String, dynamic> data, String columnId, T id) async {
    Database conn = await database;
    return conn.update(
      table,
      data,
      where: "$columnId = ?",
      whereArgs: [id],
    );
  }

  Future<int> delete<T>(String table, String columnId, T id) async {
    Database conn = await database;
    return conn.delete(
      table,
      where: "$columnId = ?",
      whereArgs: [id],
    );
  }

  /*
  * Post specific functions
  */

  Future<List<Post>> getAllPost() async {
    Database conn = await database;
    List<Map<String, Object?>> result = await conn.query("posts");
    return result.map((post) => Post.fromMap(post)).toList();
  }
}