Skip to content

Commit 11a3d15

Browse files
committed
Add more owners, add permission system for future
1 parent 8f2cd2a commit 11a3d15

File tree

20 files changed

+584
-310
lines changed

20 files changed

+584
-310
lines changed

api/lib/models/event/group.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ import 'package:flow_api/models/group/model.dart';
55
import 'package:flow_api/services/database.dart';
66

77
class EventGroupDatabaseConnector extends DatabaseModelConnector<Group, Event> {
8+
@override
9+
bool get usesPermission => true;
810
@override
911
String get connectedIdName => "eventId";
1012

api/lib/models/event/item/group.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ import 'package:flow_api/services/database.dart';
77
class CalendarItemGroupDatabaseConnector
88
extends DatabaseModelConnector<Group, CalendarItem> {
99
@override
10+
bool get usesPermission => true;
11+
@override
1012
String get connectedIdName => "itemId";
1113

1214
@override

api/lib/models/event/item/user.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ import 'package:flow_api/services/database.dart';
77
class CalendarItemUserDatabaseConnector
88
extends DatabaseModelConnector<User, CalendarItem> {
99
@override
10+
bool get usesPermission => true;
11+
@override
1012
String get connectedIdName => "itemId";
1113

1214
@override

api/lib/models/event/user.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ import 'package:flow_api/models/user/model.dart';
55
import 'package:flow_api/services/database.dart';
66

77
class EventUserDatabaseConnector extends DatabaseModelConnector<User, Event> {
8+
@override
9+
bool get usesPermission => true;
810
@override
911
String get connectedIdName => "eventId";
1012

api/lib/models/label/group.dart

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
import 'dart:typed_data';
2+
3+
import 'package:flow_api/models/label/model.dart';
4+
import 'package:flow_api/models/group/model.dart';
5+
import 'package:flow_api/services/database.dart';
6+
7+
class GroupLabelDatabaseConnector extends DatabaseModelConnector<Label, Group> {
8+
@override
9+
bool get usesPermission => true;
10+
@override
11+
String get connectedIdName => "groupId";
12+
13+
@override
14+
String get connectedTableName => "groups";
15+
16+
@override
17+
String get tableName => "groupLabels";
18+
19+
@override
20+
Future<List<Label>> getItems(Uint8List itemId,
21+
{int offset = 0, int limit = 50}) async {
22+
final result = await db?.query(
23+
'$tableName JOIN events ON labelId = labels.id',
24+
limit: limit,
25+
offset: offset,
26+
where: '$connectedIdName = ?',
27+
whereArgs: [itemId],
28+
);
29+
return result?.map((e) => Label.fromDatabase(e)).toList() ?? [];
30+
}
31+
32+
@override
33+
Future<List<Group>> getConnected(Uint8List connectId,
34+
{int offset = 0, int limit = 50}) async {
35+
final result = await db?.query(
36+
'$tableName JOIN groups ON groupId = groups.id',
37+
limit: limit,
38+
offset: offset,
39+
where: '$itemIdName = ?',
40+
whereArgs: [connectId],
41+
);
42+
return result?.map((e) => Group.fromDatabase(e)).toList() ?? [];
43+
}
44+
45+
@override
46+
String get itemIdName => 'labelId';
47+
48+
@override
49+
String get itemTableName => 'labels';
50+
}

api/lib/models/label/user.dart

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
import 'dart:typed_data';
2+
3+
import 'package:flow_api/models/label/model.dart';
4+
import 'package:flow_api/models/user/model.dart';
5+
import 'package:flow_api/services/database.dart';
6+
7+
class UserLabelDatabaseConnector extends DatabaseModelConnector<Label, User> {
8+
@override
9+
bool get usesPermission => true;
10+
@override
11+
String get connectedIdName => "userId";
12+
13+
@override
14+
String get connectedTableName => "users";
15+
16+
@override
17+
String get tableName => "userLabels";
18+
19+
@override
20+
Future<List<Label>> getItems(Uint8List itemId,
21+
{int offset = 0, int limit = 50}) async {
22+
final result = await db?.query(
23+
'$tableName JOIN events ON labelId = labels.id',
24+
limit: limit,
25+
offset: offset,
26+
where: '$connectedIdName = ?',
27+
whereArgs: [itemId],
28+
);
29+
return result?.map((e) => Label.fromDatabase(e)).toList() ?? [];
30+
}
31+
32+
@override
33+
Future<List<User>> getConnected(Uint8List connectId,
34+
{int offset = 0, int limit = 50}) async {
35+
final result = await db?.query(
36+
'$tableName JOIN users ON userId = users.id',
37+
limit: limit,
38+
offset: offset,
39+
where: '$itemIdName = ?',
40+
whereArgs: [connectId],
41+
);
42+
return result?.map((e) => User.fromDatabase(e)).toList() ?? [];
43+
}
44+
45+
@override
46+
String get itemIdName => 'labelId';
47+
48+
@override
49+
String get itemTableName => 'labels';
50+
}

api/lib/models/model.dart

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,12 @@ part 'model.mapper.dart';
88

99
const kColorBlack = 0xFF000000;
1010

11+
enum ModelPermission {
12+
read,
13+
write,
14+
delete,
15+
}
16+
1117
mixin IdentifiedModel {
1218
Uint8List? get id;
1319

api/lib/models/note/group.dart

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,13 @@
1+
import 'dart:typed_data';
2+
13
import 'package:flow_api/models/note/database.dart';
24
import 'package:flow_api/models/group/model.dart';
5+
import 'package:flow_api/models/note/model.dart';
6+
import 'package:flow_api/services/database.dart';
37

48
class GroupNoteDatabaseConnector extends NoteDatabaseConnector<Group> {
9+
@override
10+
bool get usesPermission => true;
511
@override
612
String get connectedIdName => "groupId";
713

@@ -14,3 +20,49 @@ class GroupNoteDatabaseConnector extends NoteDatabaseConnector<Group> {
1420
@override
1521
Group decode(Map<String, dynamic> data) => Group.fromDatabase(data);
1622
}
23+
24+
class GroupNotebookDatabaseConnector
25+
extends DatabaseModelConnector<Notebook, Group> {
26+
@override
27+
bool get usesPermission => true;
28+
@override
29+
String get connectedIdName => "groupId";
30+
31+
@override
32+
String get connectedTableName => "groups";
33+
34+
@override
35+
String get tableName => "groupNotebooks";
36+
37+
@override
38+
Future<List<Notebook>> getItems(Uint8List itemId,
39+
{int offset = 0, int limit = 50}) async {
40+
final result = await db?.query(
41+
'$tableName JOIN events ON notebookId = notebooks.id',
42+
limit: limit,
43+
offset: offset,
44+
where: '$connectedIdName = ?',
45+
whereArgs: [itemId],
46+
);
47+
return result?.map((e) => Notebook.fromDatabase(e)).toList() ?? [];
48+
}
49+
50+
@override
51+
Future<List<Group>> getConnected(Uint8List connectId,
52+
{int offset = 0, int limit = 50}) async {
53+
final result = await db?.query(
54+
'$tableName JOIN groups ON groupId = groups.id',
55+
limit: limit,
56+
offset: offset,
57+
where: '$itemIdName = ?',
58+
whereArgs: [connectId],
59+
);
60+
return result?.map((e) => Group.fromDatabase(e)).toList() ?? [];
61+
}
62+
63+
@override
64+
String get itemIdName => 'notebookId';
65+
66+
@override
67+
String get itemTableName => 'notebooks';
68+
}

api/lib/models/note/user.dart

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,13 @@
1+
import 'dart:typed_data';
2+
13
import 'package:flow_api/models/note/database.dart';
4+
import 'package:flow_api/models/note/model.dart';
25
import 'package:flow_api/models/user/model.dart';
6+
import 'package:flow_api/services/database.dart';
37

48
class UserNoteDatabaseConnector extends NoteDatabaseConnector<User> {
9+
@override
10+
bool get usesPermission => true;
511
@override
612
String get connectedIdName => "userId";
713

@@ -14,3 +20,49 @@ class UserNoteDatabaseConnector extends NoteDatabaseConnector<User> {
1420
@override
1521
User decode(Map<String, dynamic> data) => User.fromDatabase(data);
1622
}
23+
24+
class UserNotebookDatabaseConnector
25+
extends DatabaseModelConnector<Notebook, User> {
26+
@override
27+
bool get usesPermission => true;
28+
@override
29+
String get connectedIdName => "userId";
30+
31+
@override
32+
String get connectedTableName => "users";
33+
34+
@override
35+
String get tableName => "userNotebooks";
36+
37+
@override
38+
Future<List<Notebook>> getItems(Uint8List itemId,
39+
{int offset = 0, int limit = 50}) async {
40+
final result = await db?.query(
41+
'$tableName JOIN events ON notebookId = notebooks.id',
42+
limit: limit,
43+
offset: offset,
44+
where: '$connectedIdName = ?',
45+
whereArgs: [itemId],
46+
);
47+
return result?.map((e) => Notebook.fromDatabase(e)).toList() ?? [];
48+
}
49+
50+
@override
51+
Future<List<User>> getConnected(Uint8List connectId,
52+
{int offset = 0, int limit = 50}) async {
53+
final result = await db?.query(
54+
'$tableName JOIN users ON userId = users.id',
55+
limit: limit,
56+
offset: offset,
57+
where: '$itemIdName = ?',
58+
whereArgs: [connectId],
59+
);
60+
return result?.map((e) => User.fromDatabase(e)).toList() ?? [];
61+
}
62+
63+
@override
64+
String get itemIdName => 'notebookId';
65+
66+
@override
67+
String get itemTableName => 'notebooks';
68+
}

api/lib/models/resource/group.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ import 'package:flow_api/models/group/model.dart';
22
import 'package:flow_api/models/resource/database.dart';
33

44
class GroupResourceDatabaseConnector extends ResourceDatabaseConnector<Group> {
5+
@override
6+
bool get usesPermission => true;
57
@override
68
String get connectedIdName => "groupId";
79

0 commit comments

Comments
 (0)