Skip to content

Commit 46f36df

Browse files
committed
feat: migrate projects
1 parent bf85619 commit 46f36df

2 files changed

Lines changed: 45 additions & 15 deletions

File tree

lib/data_providers/data/database_provider.dart

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import 'dart:io';
1717
import 'package:flutter/material.dart';
1818
import 'package:random_color/random_color.dart';
1919
import 'package:sqflite/sqflite.dart';
20+
import 'package:sqflite_common/sqflite_logger.dart';
2021
import 'package:timecop/data_providers/data/data_provider.dart';
2122
import 'package:timecop/models/timer_entry.dart';
2223
import 'package:timecop/models/project.dart';
@@ -26,7 +27,7 @@ import 'package:xdg_directories/xdg_directories.dart';
2627
class DatabaseProvider extends DataProvider {
2728
final Database _db;
2829
final RandomColor _randomColour = RandomColor();
29-
static const int _dbVersion = 4;
30+
static const int _dbVersion = 5;
3031

3132
DatabaseProvider(this._db);
3233

@@ -118,15 +119,25 @@ class DatabaseProvider extends DataProvider {
118119
b.execute("drop table projects_tmp");
119120
await b.commit(noResult: true);
120121
}
122+
if (version < 5) {
123+
Batch b = db.batch();
124+
b.execute('alter table projects add syncUUID text;');
125+
b.execute('alter table projects add lastUpdatedMsEpoch int;');
126+
await b.commit(noResult: true);
127+
}
121128
}
122129

123130
static Future<DatabaseProvider> open(String path) async {
131+
var factoryWithLogs = SqfliteDatabaseFactoryLogger(databaseFactory,
132+
options:
133+
SqfliteLoggerOptions(type: SqfliteDatabaseFactoryLoggerType.all));
124134
// open the database
125-
Database db = await openDatabase(path,
126-
onConfigure: _onConfigure,
127-
onCreate: _onCreate,
128-
onUpgrade: _onUpgrade,
129-
version: _dbVersion);
135+
Database db = await factoryWithLogs.openDatabase(path,
136+
options: OpenDatabaseOptions(
137+
onConfigure: _onConfigure,
138+
onCreate: _onCreate,
139+
onUpgrade: _onUpgrade,
140+
version: _dbVersion));
130141
await db.execute("PRAGMA foreign_keys = ON");
131142
DatabaseProvider repo = DatabaseProvider(db);
132143

@@ -150,7 +161,7 @@ class DatabaseProvider extends DataProvider {
150161
@override
151162
Future<List<Project>> listProjects() async {
152163
List<Map<String, dynamic>> rawProjects = await _db.rawQuery('''
153-
select id, name, colour,
164+
select id, name, colour,
154165
case archived
155166
when 'false' then 0
156167
when 'true' then 1

lib/models/project.dart

Lines changed: 27 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,23 +20,42 @@ class Project extends Equatable {
2020
final String name;
2121
final Color colour;
2222
final bool archived;
23+
final String? syncUUID;
24+
final int? lastUpdatedMsEpoch;
2325

2426
const Project(
2527
{required this.id,
2628
required this.name,
2729
required this.colour,
28-
required this.archived});
30+
required this.archived,
31+
this.syncUUID,
32+
this.lastUpdatedMsEpoch});
2933

3034
@override
31-
List<Object> get props => [id, name, colour, archived];
35+
List<Object> get props => [
36+
id,
37+
name,
38+
colour,
39+
archived,
40+
syncUUID ?? "",
41+
lastUpdatedMsEpoch ?? DateTime.now().microsecondsSinceEpoch
42+
];
43+
3244
@override
3345
bool get stringify => true;
3446

35-
Project.clone(Project project, {String? name, Color? colour, bool? archived})
47+
Project.clone(Project project,
48+
{String? name,
49+
Color? colour,
50+
bool? archived,
51+
String? syncUUID,
52+
int? lastUpdatedMsEpoch})
3653
: this(
37-
id: project.id,
38-
name: name ?? project.name,
39-
colour: colour ?? project.colour,
40-
archived: archived ?? project.archived,
41-
);
54+
id: project.id,
55+
name: name ?? project.name,
56+
colour: colour ?? project.colour,
57+
archived: archived ?? project.archived,
58+
syncUUID: syncUUID ?? project.syncUUID,
59+
lastUpdatedMsEpoch:
60+
lastUpdatedMsEpoch ?? project.lastUpdatedMsEpoch);
4261
}

0 commit comments

Comments
 (0)