Implemented basic structure
This commit is contained in:
42
lib/data/dao/group_dao.dart
Normal file
42
lib/data/dao/group_dao.dart
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
import 'package:drift/drift.dart';
|
||||||
|
import 'package:game_tracker/data/db/database.dart';
|
||||||
|
import 'package:game_tracker/data/db/tables/group_table.dart';
|
||||||
|
import 'package:game_tracker/data/dto/group.dart';
|
||||||
|
|
||||||
|
part 'group_dao.g.dart';
|
||||||
|
|
||||||
|
@DriftAccessor(tables: [GroupTable])
|
||||||
|
class GroupDao extends DatabaseAccessor<AppDatabase> with _$GroupDaoMixin {
|
||||||
|
GroupDao(super.db);
|
||||||
|
|
||||||
|
Future<List<Group>> getAllGroups() async {
|
||||||
|
final query = select(groupTable);
|
||||||
|
final result = await query.get();
|
||||||
|
return result
|
||||||
|
.map((row) => Group(id: row.id, name: row.name, members: []))
|
||||||
|
.toList();
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<Group> getGroupById(String id) async {
|
||||||
|
final query = select(groupTable)..where((g) => g.id.equals(id));
|
||||||
|
final result = await query.getSingle();
|
||||||
|
|
||||||
|
// todo: Get group members
|
||||||
|
|
||||||
|
return Group(id: result.id, name: result.name, members: []);
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> addGroup(String id, String name) async {
|
||||||
|
await into(group).insert(GroupCompanion.insert(id: id, name: name));
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> deleteGroup(String id) async {
|
||||||
|
await (delete(group)..where((g) => g.id.equals(id))).go();
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> updateGroupname(String id, String newName) async {
|
||||||
|
await (update(group)..where((g) => g.id.equals(id))).write(
|
||||||
|
GroupCompanion(name: Value(newName)),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
8
lib/data/dao/group_dao.g.dart
Normal file
8
lib/data/dao/group_dao.g.dart
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||||
|
|
||||||
|
part of 'group_dao.dart';
|
||||||
|
|
||||||
|
// ignore_for_file: type=lint
|
||||||
|
mixin _$GroupDaoMixin on DatabaseAccessor<AppDatabase> {
|
||||||
|
$GroupTableTable get groupTable => attachedDatabase.groupTable;
|
||||||
|
}
|
||||||
@@ -1,9 +1,16 @@
|
|||||||
import 'package:game_tracker/data/database.dart';
|
|
||||||
import 'package:drift/drift.dart';
|
import 'package:drift/drift.dart';
|
||||||
|
import 'package:game_tracker/data/db/database.dart';
|
||||||
|
import 'package:game_tracker/data/db/tables/player_table.dart';
|
||||||
|
import 'package:game_tracker/data/dto/player.dart';
|
||||||
|
|
||||||
extension UserMethods on AppDatabase {
|
part 'player_dao.g.dart';
|
||||||
Future<List<UserData>> getAllUsers() async {
|
|
||||||
return await select(user).get();
|
@DriftAccessor(tables: [PlayerTable])
|
||||||
|
class PlayerDao extends DatabaseAccessor<AppDatabase> with _$PlayerDaoMixin {
|
||||||
|
PlayerDao(super.db);
|
||||||
|
|
||||||
|
Future<List<Player>> getAllUsers() async {
|
||||||
|
return await select(UserTable).get();
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<UserData> getUserById(String id) async {
|
Future<UserData> getUserById(String id) async {
|
||||||
@@ -11,9 +18,7 @@ extension UserMethods on AppDatabase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Future<void> addUser(String id, String name) async {
|
Future<void> addUser(String id, String name) async {
|
||||||
await into(user).insert(
|
await into(user).insert(UserCompanion.insert(id: id, name: name));
|
||||||
UserCompanion.insert(id: id, name: name),
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> deleteUser(String id) async {
|
Future<void> deleteUser(String id) async {
|
||||||
8
lib/data/dao/player_dao.g.dart
Normal file
8
lib/data/dao/player_dao.g.dart
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||||
|
|
||||||
|
part of 'player_dao.dart';
|
||||||
|
|
||||||
|
// ignore_for_file: type=lint
|
||||||
|
mixin _$PlayerDaoMixin on DatabaseAccessor<AppDatabase> {
|
||||||
|
$PlayerTableTable get playerTable => attachedDatabase.playerTable;
|
||||||
|
}
|
||||||
40
lib/data/dao/player_group_dao.dart
Normal file
40
lib/data/dao/player_group_dao.dart
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
import 'package:drift/drift.dart';
|
||||||
|
import 'package:game_tracker/data/db/database.dart';
|
||||||
|
import 'package:game_tracker/data/db/tables/player_group_table.dart';
|
||||||
|
|
||||||
|
part 'player_group_dao.g.dart';
|
||||||
|
|
||||||
|
@DriftAccessor(tables: [PlayerGroupTable])
|
||||||
|
class PlayerGroupDao extends DatabaseAccessor<AppDatabase>
|
||||||
|
with _$PlayerGroupDaoMixin {
|
||||||
|
PlayerGroupDao(super.db);
|
||||||
|
|
||||||
|
Future<List<UserGroupData>> getAllUsersAndGroups() async {
|
||||||
|
return await select(userGroup).get();
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<List<UserGroupData>> getUsersGroups(String userId) async {
|
||||||
|
return await (select(
|
||||||
|
userGroup,
|
||||||
|
)..where((uG) => uG.userId.equals(userId))).get();
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<List<UserGroupData>> getGroupsUsers(String groupId) async {
|
||||||
|
return await (select(
|
||||||
|
userGroup,
|
||||||
|
)..where((uG) => uG.groupId.equals(groupId))).get();
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> addUserToGroup(String userId, String groupId) async {
|
||||||
|
await into(
|
||||||
|
userGroup,
|
||||||
|
).insert(UserGroupCompanion.insert(userId: userId, groupId: groupId));
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> removeUserFromGroup(String userId, String groupId) async {
|
||||||
|
await (delete(
|
||||||
|
userGroup,
|
||||||
|
)..where((uG) => uG.userId.equals(userId) & uG.groupId.equals(groupId)))
|
||||||
|
.go();
|
||||||
|
}
|
||||||
|
}
|
||||||
9
lib/data/dao/player_group_dao.g.dart
Normal file
9
lib/data/dao/player_group_dao.g.dart
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||||
|
|
||||||
|
part of 'player_group_dao.dart';
|
||||||
|
|
||||||
|
// ignore_for_file: type=lint
|
||||||
|
mixin _$PlayerGroupDaoMixin on DatabaseAccessor<AppDatabase> {
|
||||||
|
$PlayerGroupTableTable get playerGroupTable =>
|
||||||
|
attachedDatabase.playerGroupTable;
|
||||||
|
}
|
||||||
@@ -1,46 +0,0 @@
|
|||||||
import 'package:drift/drift.dart';
|
|
||||||
import 'package:drift_flutter/drift_flutter.dart';
|
|
||||||
import 'package:path_provider/path_provider.dart';
|
|
||||||
|
|
||||||
part 'database.g.dart';
|
|
||||||
|
|
||||||
class User extends Table {
|
|
||||||
TextColumn get id => text()();
|
|
||||||
TextColumn get name => text()();
|
|
||||||
|
|
||||||
@override
|
|
||||||
Set<Column<Object>> get primaryKey => {id};
|
|
||||||
}
|
|
||||||
|
|
||||||
class Group extends Table {
|
|
||||||
TextColumn get id => text()();
|
|
||||||
TextColumn get name => text()();
|
|
||||||
|
|
||||||
@override
|
|
||||||
Set<Column<Object>> get primaryKey => {id};
|
|
||||||
}
|
|
||||||
|
|
||||||
class UserGroup extends Table {
|
|
||||||
TextColumn get userId => text().references(User, #id)();
|
|
||||||
TextColumn get groupId => text().references(Group, #id)();
|
|
||||||
|
|
||||||
@override
|
|
||||||
Set<Column<Object>> get primaryKey => {userId, groupId};
|
|
||||||
}
|
|
||||||
|
|
||||||
@DriftDatabase(tables: [User, Group, UserGroup])
|
|
||||||
class AppDatabase extends _$AppDatabase {
|
|
||||||
AppDatabase([QueryExecutor? executor]) : super(executor ?? _openConnection());
|
|
||||||
|
|
||||||
@override
|
|
||||||
int get schemaVersion => 1;
|
|
||||||
|
|
||||||
static QueryExecutor _openConnection() {
|
|
||||||
return driftDatabase(
|
|
||||||
name: 'gametracker_db',
|
|
||||||
native: const DriftNativeOptions(
|
|
||||||
databaseDirectory: getApplicationSupportDirectory,
|
|
||||||
),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
File diff suppressed because it is too large
Load Diff
31
lib/data/db/database.dart
Normal file
31
lib/data/db/database.dart
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
import 'package:drift/drift.dart';
|
||||||
|
import 'package:drift_flutter/drift_flutter.dart';
|
||||||
|
import 'package:game_tracker/data/dao/group_dao.dart';
|
||||||
|
import 'package:game_tracker/data/dao/player_dao.dart';
|
||||||
|
import 'package:game_tracker/data/dao/player_group_dao.dart';
|
||||||
|
import 'package:game_tracker/data/db/tables/group_table.dart';
|
||||||
|
import 'package:game_tracker/data/db/tables/player_group_table.dart';
|
||||||
|
import 'package:game_tracker/data/db/tables/player_table.dart';
|
||||||
|
import 'package:path_provider/path_provider.dart';
|
||||||
|
|
||||||
|
part 'database.g.dart';
|
||||||
|
|
||||||
|
@DriftDatabase(
|
||||||
|
tables: [PlayerTable, GroupTable, PlayerGroupTable],
|
||||||
|
daos: [GroupDao, PlayerDao, PlayerGroupDao],
|
||||||
|
)
|
||||||
|
class AppDatabase extends _$AppDatabase {
|
||||||
|
AppDatabase([QueryExecutor? executor]) : super(executor ?? _openConnection());
|
||||||
|
|
||||||
|
@override
|
||||||
|
int get schemaVersion => 1;
|
||||||
|
|
||||||
|
static QueryExecutor _openConnection() {
|
||||||
|
return driftDatabase(
|
||||||
|
name: 'gametracker_db',
|
||||||
|
native: const DriftNativeOptions(
|
||||||
|
databaseDirectory: getApplicationSupportDirectory,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
1092
lib/data/db/database.g.dart
Normal file
1092
lib/data/db/database.g.dart
Normal file
File diff suppressed because it is too large
Load Diff
9
lib/data/db/tables/group_table.dart
Normal file
9
lib/data/db/tables/group_table.dart
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
import 'package:drift/drift.dart';
|
||||||
|
|
||||||
|
class GroupTable extends Table {
|
||||||
|
TextColumn get id => text()();
|
||||||
|
TextColumn get name => text()();
|
||||||
|
|
||||||
|
@override
|
||||||
|
Set<Column<Object>> get primaryKey => {id};
|
||||||
|
}
|
||||||
11
lib/data/db/tables/player_group_table.dart
Normal file
11
lib/data/db/tables/player_group_table.dart
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
import 'package:drift/drift.dart';
|
||||||
|
import 'package:game_tracker/data/methods/db/tables/group_table.dart';
|
||||||
|
import 'package:game_tracker/data/methods/db/tables/user_table.dart';
|
||||||
|
|
||||||
|
class PlayerGroupTable extends Table {
|
||||||
|
TextColumn get userId => text().references(UserTable, #id)();
|
||||||
|
TextColumn get groupId => text().references(GroupTable, #id)();
|
||||||
|
|
||||||
|
@override
|
||||||
|
Set<Column<Object>> get primaryKey => {userId, groupId};
|
||||||
|
}
|
||||||
9
lib/data/db/tables/player_table.dart
Normal file
9
lib/data/db/tables/player_table.dart
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
import 'package:drift/drift.dart';
|
||||||
|
|
||||||
|
class PlayerTable extends Table {
|
||||||
|
TextColumn get id => text()();
|
||||||
|
TextColumn get name => text()();
|
||||||
|
|
||||||
|
@override
|
||||||
|
Set<Column<Object>> get primaryKey => {id};
|
||||||
|
}
|
||||||
6
lib/data/dto/game.dart
Normal file
6
lib/data/dto/game.dart
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
class Game {
|
||||||
|
final String id;
|
||||||
|
final String name;
|
||||||
|
|
||||||
|
Game({required this.id, required this.name});
|
||||||
|
}
|
||||||
9
lib/data/dto/group.dart
Normal file
9
lib/data/dto/group.dart
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
import 'package:game_tracker/data/methods/dto/player.dart';
|
||||||
|
|
||||||
|
class Group {
|
||||||
|
final String id;
|
||||||
|
final String name;
|
||||||
|
final List<Player> members;
|
||||||
|
|
||||||
|
Group({required this.id, required this.name, required this.members});
|
||||||
|
}
|
||||||
6
lib/data/dto/player.dart
Normal file
6
lib/data/dto/player.dart
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
class Player {
|
||||||
|
final String id;
|
||||||
|
final String username;
|
||||||
|
|
||||||
|
Player({required this.id, required this.username});
|
||||||
|
}
|
||||||
@@ -1,28 +0,0 @@
|
|||||||
import 'package:game_tracker/data/database.dart';
|
|
||||||
import 'package:drift/drift.dart';
|
|
||||||
|
|
||||||
extension GroupMethods on AppDatabase {
|
|
||||||
Future<List<GroupData>> getAllGroups() async {
|
|
||||||
return await select(group).get();
|
|
||||||
}
|
|
||||||
|
|
||||||
Future<GroupData> getGroupById(String id) async {
|
|
||||||
return await (select(group)..where((g) => g.id.equals(id))).getSingle();
|
|
||||||
}
|
|
||||||
|
|
||||||
Future<void> addGroup(String id, String name) async {
|
|
||||||
await into(group).insert(
|
|
||||||
GroupCompanion.insert(id: id, name: name),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
Future<void> deleteGroup(String id) async {
|
|
||||||
await (delete(group)..where((g) => g.id.equals(id))).go();
|
|
||||||
}
|
|
||||||
|
|
||||||
Future<void> updateGroupname(String id, String newName) async {
|
|
||||||
await (update(group)..where((g) => g.id.equals(id))).write(
|
|
||||||
GroupCompanion(name: Value(newName)),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
import 'package:game_tracker/data/database.dart';
|
|
||||||
import 'package:drift/drift.dart';
|
|
||||||
|
|
||||||
extension UserGroupMethods on AppDatabase {
|
|
||||||
Future<List<UserGroupData>> getAllUsersAndGroups() async {
|
|
||||||
return await select(userGroup).get();
|
|
||||||
}
|
|
||||||
|
|
||||||
Future<List<UserGroupData>> getUsersGroups(String userId) async {
|
|
||||||
return await (select(userGroup)..where((uG) => uG.userId.equals(userId))).get();
|
|
||||||
}
|
|
||||||
|
|
||||||
Future<List<UserGroupData>> getGroupsUsers(String groupId) async {
|
|
||||||
return await (select(userGroup)..where((uG) => uG.groupId.equals(groupId))).get();
|
|
||||||
}
|
|
||||||
|
|
||||||
Future<void> addUserToGroup(String userId, String groupId) async {
|
|
||||||
await into(userGroup).insert(
|
|
||||||
UserGroupCompanion.insert(userId: userId, groupId: groupId),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
Future<void> removeUserFromGroup(String userId, String groupId) async {
|
|
||||||
await (delete(userGroup)..where((uG) => uG.userId.equals(userId) & uG.groupId.equals(groupId))).go();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:game_tracker/presentation/views/main_menu/custom_navigation_bar.dart';
|
|
||||||
import 'package:game_tracker/core/custom_theme.dart';
|
import 'package:game_tracker/core/custom_theme.dart';
|
||||||
import 'package:game_tracker/data/database.dart';
|
import 'package:game_tracker/data/database.dart';
|
||||||
|
import 'package:game_tracker/presentation/views/main_menu/custom_navigation_bardb/database.dart';
|
||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
|
|||||||
Reference in New Issue
Block a user