summaryrefslogtreecommitdiff
path: root/lib/database/helper.dart
blob: da2d199ee4eb54a25d8aa9a1a92558ccfcca0f06 (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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
import 'dart:io';

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

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

  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,
      onCreate: _onCreate,
      onUpgrade: ((db, oldVersion, newVersion) {
        _onCreate(db, newVersion);
      }),
      onOpen: (db) {
        _onCreate(db, 0);
      },
    );
    return _database!;
  }

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

  static void _onCreate(Database db, int version) async {
    await db.execute("""CREATE TABLE IF NOT EXISTS posts (
  id INTEGER PRIMARY KEY,
  description VARCHAR(500) NOT NULL,
  date DATE NOT NULL
);""");

    await db.execute("""CREATE TABLE IF NOT EXISTS events (
  id INTEGER PRIMARY KEY,
  description VARCHAR(500),
  date DATE NOT NULL,
  completed INT DEFAULT 0
);""");
  }

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

  /*
   * Event specific functions
   */
  Future<List<Event>> getAllEvent() async {
    Database conn = await database;
    List<Map<String, Object?>> result = await conn.query("events");
    return result.map((event) => Event.fromMap(event)).toList();
  }
}