Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
7615bd7
chore(ui): WIP clean up
julian-CStack May 13, 2026
2c790e2
feat(db): create a shared drift database with initial table for cake …
julian-CStack May 13, 2026
e37737e
use drift/sqlite to store order ids instead of piggybacking in the pr…
julian-CStack May 13, 2026
cdcc72d
chore: refactor a big widget's build method and some more general hou…
julian-CStack May 14, 2026
211971b
fix: context.mounted check (and a bunch of auto format)
julian-CStack May 14, 2026
5367c8f
Merge remote-tracking branch 'origin/staging' into julian/review
julian-CStack May 15, 2026
5eaf945
chore: fix and clean up WIP
julian-CStack May 15, 2026
d512c58
fix(ui): dynamic dialog height
julian-CStack May 15, 2026
eba5325
fix(ui): desktop shopinbit dialog flow nested navigation
julian-CStack May 18, 2026
e9beb4a
refactor: testing AI refactoring
julian-CStack May 19, 2026
a4d82ec
fix: This does not actually return a 403 when testing and is required…
julian-CStack May 19, 2026
c6b313b
fix: throw instead of silent failure leading to invalid enum value re…
julian-CStack May 19, 2026
7ddaa90
fix: allow shopinbit car request status updates
julian-CStack May 19, 2026
fa5fa81
refactor(shopinbit): Store shop in bit settings using Drift, use prov…
julian-CStack May 19, 2026
8ed3d33
chore: add some toString()s
julian-CStack May 19, 2026
1c6ffa9
fix(ui): clean up flow logic and state issues
julian-CStack May 19, 2026
9dad75d
fix(ui): button spacing
julian-CStack May 19, 2026
fd53f9f
fix(ui): check correct context
julian-CStack May 19, 2026
f357b4a
refactor(db): use drift/sqlite instead of isar
julian-CStack May 20, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
95 changes: 95 additions & 0 deletions lib/db/drift/shared_db/shared_database.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
import 'package:drift/drift.dart';
import 'package:drift_flutter/drift_flutter.dart';
import 'package:path/path.dart' as path;

import '../../../models/shopinbit/shopinbit_order_model.dart'
show ShopInBitCategory, ShopInBitOrderStatus;
import '../../../utilities/stack_file_system.dart';
import 'tables/cakepay_orders.dart';
import 'tables/shopin_bit_settings.dart';
import 'tables/shopin_bit_tickets.dart';

part 'shared_database.g.dart';

abstract final class SharedDrift {
static bool _didInit = false;

static SharedDatabase? _db;

static SharedDatabase get() {
if (!_didInit) {
driftRuntimeOptions.dontWarnAboutMultipleDatabases = true;
_didInit = true;
}

return _db ??= SharedDatabase._();
}
}

@DriftDatabase(
tables: [CakepayOrders, ShopinBitSettings, ShopInBitTickets],
daos: [ShopinBitSettingsDao],
)
final class SharedDatabase extends _$SharedDatabase {
SharedDatabase._([QueryExecutor? executor])
: super(executor ?? _openConnection());

@override
int get schemaVersion => 2;

@override
MigrationStrategy get migration => MigrationStrategy(
onUpgrade: (m, from, to) async {
if (from == 1 && to == 2) {
await m.createTable(shopinBitSettings);
await m.createTable(shopInBitTickets);
}
},
);

static QueryExecutor _openConnection() {
return driftDatabase(
name: "shared",
native: DriftNativeOptions(
shareAcrossIsolates: true,
databasePath: () async {
final dir = await StackFileSystem.applicationDriftDirectory();
return path.join(dir.path, "shared", "shared.db");
},
),
);
}
}

@DriftAccessor(tables: [ShopinBitSettings])
class ShopinBitSettingsDao extends DatabaseAccessor<SharedDatabase>
with _$ShopinBitSettingsDaoMixin {
ShopinBitSettingsDao(super.db);

Future<ShopinBitSetting> getSettings() async {
final ShopinBitSetting? row = await (select(
shopinBitSettings,
)..where((t) => t.id.equals(0))).getSingleOrNull();
if (row != null) return row;

return into(
shopinBitSettings,
).insertReturning(ShopinBitSettingsCompanion.insert(id: const Value(0)));
}

Future<void> setGuidelinesAccepted(bool accepted) =>
_update(ShopinBitSettingsCompanion(guidelinesAccepted: Value(accepted)));

Future<void> setSetupComplete(bool complete) =>
_update(ShopinBitSettingsCompanion(setupComplete: Value(complete)));

Future<void> setDisplayName(String name) =>
_update(ShopinBitSettingsCompanion(displayName: Value(name)));

Future<void> _update(ShopinBitSettingsCompanion changes) async {
await getSettings(); // ensure row exists
await (update(
shopinBitSettings,
)..where((t) => t.id.equals(0))).write(changes);
}
}
Loading
Loading