This repository has been archived on 2026-06-02. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
FabledApp/lib/data/local/database.g.dart
T
bvandeusen 6ef658558a feat(offline): tier 2 phase 1 — Drift cache + read-through for notes
First slice of the tier 2 offline mode work tracked in Fable #147.
Notes are the only domain wired so far; this PR establishes the
shape and proves the round-trip end-to-end before extending to tasks
/ projects / events / etc. in phase 2.

Local store
- Adds drift ^2.20.0 + sqlite3_flutter_libs ^0.5.24 + path ^1.9.0
  runtime deps and drift_dev / build_runner dev deps.
- New lib/data/local/database.dart: FabledDatabase with CachedNotes
  (mirroring the Note model 1:1; tags stored as JSON-encoded text) and
  SyncMetadata (per-domain last_synced_at). Database file lives at
  $appDocs/fabled_cache.sqlite; opened lazily in a background isolate.
- fabledDatabaseProvider on the existing api_client_provider; closes
  the DB when the ProviderScope disposes.

Repository pattern
- NotesRepository now takes (NotesApi, FabledDatabase). Reads attempt
  the network first; on success the response is written to the cache.
  On NetworkException reads fall back to the cache (rethrowing if it
  is empty so fresh-install offline still surfaces the network error).
- Writes (create/update/delete) hit the server then sync the cache;
  offline write queueing is phase 3 and explicitly not wired here.
- AuthStatus.offline stays owned by AuthNotifier.verify()'s heartbeat;
  this repo deliberately doesn't poke that state.

OfflineBanner
- Reads notesRepository.lastSyncedAt(); when present, swaps
  "Offline — showing cached data." for "Offline — last sync X min
  ago." A 30s timer refreshes the relative-time string while the
  banner is mounted.
- Falls back to the generic message if no cache exists yet (fresh
  install offline).

Verification
- flutter analyze: No issues found

Out of scope (later phases per the task body)
- Tasks / projects / milestones / events / conversation list / journal
  day caching (phase 2 — same wrapper pattern, repeated)
- Generic write queue with conflict resolution on updated_at (phase 3)
- Read-only UI indicators on screens that depend on cached data
  (phase 4)
- Full offline chat (out of scope; needs a local model)
- RAG / search over cached content (out of scope)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-28 21:08:06 -04:00

1283 lines
40 KiB
Dart

// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'database.dart';
// ignore_for_file: type=lint
class $CachedNotesTable extends CachedNotes
with TableInfo<$CachedNotesTable, CachedNote> {
@override
final GeneratedDatabase attachedDatabase;
final String? _alias;
$CachedNotesTable(this.attachedDatabase, [this._alias]);
static const VerificationMeta _idMeta = const VerificationMeta('id');
@override
late final GeneratedColumn<int> id = GeneratedColumn<int>(
'id',
aliasedName,
false,
type: DriftSqlType.int,
requiredDuringInsert: false,
);
static const VerificationMeta _titleMeta = const VerificationMeta('title');
@override
late final GeneratedColumn<String> title = GeneratedColumn<String>(
'title',
aliasedName,
false,
type: DriftSqlType.string,
requiredDuringInsert: true,
);
static const VerificationMeta _bodyMeta = const VerificationMeta('body');
@override
late final GeneratedColumn<String> body = GeneratedColumn<String>(
'body',
aliasedName,
false,
type: DriftSqlType.string,
requiredDuringInsert: true,
);
static const VerificationMeta _tagsJsonMeta = const VerificationMeta(
'tagsJson',
);
@override
late final GeneratedColumn<String> tagsJson = GeneratedColumn<String>(
'tags_json',
aliasedName,
false,
type: DriftSqlType.string,
requiredDuringInsert: false,
defaultValue: const Constant('[]'),
);
static const VerificationMeta _noteTypeMeta = const VerificationMeta(
'noteType',
);
@override
late final GeneratedColumn<String> noteType = GeneratedColumn<String>(
'note_type',
aliasedName,
false,
type: DriftSqlType.string,
requiredDuringInsert: false,
defaultValue: const Constant('note'),
);
static const VerificationMeta _projectIdMeta = const VerificationMeta(
'projectId',
);
@override
late final GeneratedColumn<int> projectId = GeneratedColumn<int>(
'project_id',
aliasedName,
true,
type: DriftSqlType.int,
requiredDuringInsert: false,
);
static const VerificationMeta _milestoneIdMeta = const VerificationMeta(
'milestoneId',
);
@override
late final GeneratedColumn<int> milestoneId = GeneratedColumn<int>(
'milestone_id',
aliasedName,
true,
type: DriftSqlType.int,
requiredDuringInsert: false,
);
static const VerificationMeta _createdAtMeta = const VerificationMeta(
'createdAt',
);
@override
late final GeneratedColumn<DateTime> createdAt = GeneratedColumn<DateTime>(
'created_at',
aliasedName,
false,
type: DriftSqlType.dateTime,
requiredDuringInsert: true,
);
static const VerificationMeta _updatedAtMeta = const VerificationMeta(
'updatedAt',
);
@override
late final GeneratedColumn<DateTime> updatedAt = GeneratedColumn<DateTime>(
'updated_at',
aliasedName,
false,
type: DriftSqlType.dateTime,
requiredDuringInsert: true,
);
static const VerificationMeta _cachedAtMeta = const VerificationMeta(
'cachedAt',
);
@override
late final GeneratedColumn<DateTime> cachedAt = GeneratedColumn<DateTime>(
'cached_at',
aliasedName,
false,
type: DriftSqlType.dateTime,
requiredDuringInsert: false,
clientDefault: () => DateTime.now(),
);
@override
List<GeneratedColumn> get $columns => [
id,
title,
body,
tagsJson,
noteType,
projectId,
milestoneId,
createdAt,
updatedAt,
cachedAt,
];
@override
String get aliasedName => _alias ?? actualTableName;
@override
String get actualTableName => $name;
static const String $name = 'cached_notes';
@override
VerificationContext validateIntegrity(
Insertable<CachedNote> instance, {
bool isInserting = false,
}) {
final context = VerificationContext();
final data = instance.toColumns(true);
if (data.containsKey('id')) {
context.handle(_idMeta, id.isAcceptableOrUnknown(data['id']!, _idMeta));
}
if (data.containsKey('title')) {
context.handle(
_titleMeta,
title.isAcceptableOrUnknown(data['title']!, _titleMeta),
);
} else if (isInserting) {
context.missing(_titleMeta);
}
if (data.containsKey('body')) {
context.handle(
_bodyMeta,
body.isAcceptableOrUnknown(data['body']!, _bodyMeta),
);
} else if (isInserting) {
context.missing(_bodyMeta);
}
if (data.containsKey('tags_json')) {
context.handle(
_tagsJsonMeta,
tagsJson.isAcceptableOrUnknown(data['tags_json']!, _tagsJsonMeta),
);
}
if (data.containsKey('note_type')) {
context.handle(
_noteTypeMeta,
noteType.isAcceptableOrUnknown(data['note_type']!, _noteTypeMeta),
);
}
if (data.containsKey('project_id')) {
context.handle(
_projectIdMeta,
projectId.isAcceptableOrUnknown(data['project_id']!, _projectIdMeta),
);
}
if (data.containsKey('milestone_id')) {
context.handle(
_milestoneIdMeta,
milestoneId.isAcceptableOrUnknown(
data['milestone_id']!,
_milestoneIdMeta,
),
);
}
if (data.containsKey('created_at')) {
context.handle(
_createdAtMeta,
createdAt.isAcceptableOrUnknown(data['created_at']!, _createdAtMeta),
);
} else if (isInserting) {
context.missing(_createdAtMeta);
}
if (data.containsKey('updated_at')) {
context.handle(
_updatedAtMeta,
updatedAt.isAcceptableOrUnknown(data['updated_at']!, _updatedAtMeta),
);
} else if (isInserting) {
context.missing(_updatedAtMeta);
}
if (data.containsKey('cached_at')) {
context.handle(
_cachedAtMeta,
cachedAt.isAcceptableOrUnknown(data['cached_at']!, _cachedAtMeta),
);
}
return context;
}
@override
Set<GeneratedColumn> get $primaryKey => {id};
@override
CachedNote map(Map<String, dynamic> data, {String? tablePrefix}) {
final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : '';
return CachedNote(
id: attachedDatabase.typeMapping.read(
DriftSqlType.int,
data['${effectivePrefix}id'],
)!,
title: attachedDatabase.typeMapping.read(
DriftSqlType.string,
data['${effectivePrefix}title'],
)!,
body: attachedDatabase.typeMapping.read(
DriftSqlType.string,
data['${effectivePrefix}body'],
)!,
tagsJson: attachedDatabase.typeMapping.read(
DriftSqlType.string,
data['${effectivePrefix}tags_json'],
)!,
noteType: attachedDatabase.typeMapping.read(
DriftSqlType.string,
data['${effectivePrefix}note_type'],
)!,
projectId: attachedDatabase.typeMapping.read(
DriftSqlType.int,
data['${effectivePrefix}project_id'],
),
milestoneId: attachedDatabase.typeMapping.read(
DriftSqlType.int,
data['${effectivePrefix}milestone_id'],
),
createdAt: attachedDatabase.typeMapping.read(
DriftSqlType.dateTime,
data['${effectivePrefix}created_at'],
)!,
updatedAt: attachedDatabase.typeMapping.read(
DriftSqlType.dateTime,
data['${effectivePrefix}updated_at'],
)!,
cachedAt: attachedDatabase.typeMapping.read(
DriftSqlType.dateTime,
data['${effectivePrefix}cached_at'],
)!,
);
}
@override
$CachedNotesTable createAlias(String alias) {
return $CachedNotesTable(attachedDatabase, alias);
}
}
class CachedNote extends DataClass implements Insertable<CachedNote> {
final int id;
final String title;
final String body;
final String tagsJson;
final String noteType;
final int? projectId;
final int? milestoneId;
final DateTime createdAt;
final DateTime updatedAt;
final DateTime cachedAt;
const CachedNote({
required this.id,
required this.title,
required this.body,
required this.tagsJson,
required this.noteType,
this.projectId,
this.milestoneId,
required this.createdAt,
required this.updatedAt,
required this.cachedAt,
});
@override
Map<String, Expression> toColumns(bool nullToAbsent) {
final map = <String, Expression>{};
map['id'] = Variable<int>(id);
map['title'] = Variable<String>(title);
map['body'] = Variable<String>(body);
map['tags_json'] = Variable<String>(tagsJson);
map['note_type'] = Variable<String>(noteType);
if (!nullToAbsent || projectId != null) {
map['project_id'] = Variable<int>(projectId);
}
if (!nullToAbsent || milestoneId != null) {
map['milestone_id'] = Variable<int>(milestoneId);
}
map['created_at'] = Variable<DateTime>(createdAt);
map['updated_at'] = Variable<DateTime>(updatedAt);
map['cached_at'] = Variable<DateTime>(cachedAt);
return map;
}
CachedNotesCompanion toCompanion(bool nullToAbsent) {
return CachedNotesCompanion(
id: Value(id),
title: Value(title),
body: Value(body),
tagsJson: Value(tagsJson),
noteType: Value(noteType),
projectId: projectId == null && nullToAbsent
? const Value.absent()
: Value(projectId),
milestoneId: milestoneId == null && nullToAbsent
? const Value.absent()
: Value(milestoneId),
createdAt: Value(createdAt),
updatedAt: Value(updatedAt),
cachedAt: Value(cachedAt),
);
}
factory CachedNote.fromJson(
Map<String, dynamic> json, {
ValueSerializer? serializer,
}) {
serializer ??= driftRuntimeOptions.defaultSerializer;
return CachedNote(
id: serializer.fromJson<int>(json['id']),
title: serializer.fromJson<String>(json['title']),
body: serializer.fromJson<String>(json['body']),
tagsJson: serializer.fromJson<String>(json['tagsJson']),
noteType: serializer.fromJson<String>(json['noteType']),
projectId: serializer.fromJson<int?>(json['projectId']),
milestoneId: serializer.fromJson<int?>(json['milestoneId']),
createdAt: serializer.fromJson<DateTime>(json['createdAt']),
updatedAt: serializer.fromJson<DateTime>(json['updatedAt']),
cachedAt: serializer.fromJson<DateTime>(json['cachedAt']),
);
}
@override
Map<String, dynamic> toJson({ValueSerializer? serializer}) {
serializer ??= driftRuntimeOptions.defaultSerializer;
return <String, dynamic>{
'id': serializer.toJson<int>(id),
'title': serializer.toJson<String>(title),
'body': serializer.toJson<String>(body),
'tagsJson': serializer.toJson<String>(tagsJson),
'noteType': serializer.toJson<String>(noteType),
'projectId': serializer.toJson<int?>(projectId),
'milestoneId': serializer.toJson<int?>(milestoneId),
'createdAt': serializer.toJson<DateTime>(createdAt),
'updatedAt': serializer.toJson<DateTime>(updatedAt),
'cachedAt': serializer.toJson<DateTime>(cachedAt),
};
}
CachedNote copyWith({
int? id,
String? title,
String? body,
String? tagsJson,
String? noteType,
Value<int?> projectId = const Value.absent(),
Value<int?> milestoneId = const Value.absent(),
DateTime? createdAt,
DateTime? updatedAt,
DateTime? cachedAt,
}) => CachedNote(
id: id ?? this.id,
title: title ?? this.title,
body: body ?? this.body,
tagsJson: tagsJson ?? this.tagsJson,
noteType: noteType ?? this.noteType,
projectId: projectId.present ? projectId.value : this.projectId,
milestoneId: milestoneId.present ? milestoneId.value : this.milestoneId,
createdAt: createdAt ?? this.createdAt,
updatedAt: updatedAt ?? this.updatedAt,
cachedAt: cachedAt ?? this.cachedAt,
);
CachedNote copyWithCompanion(CachedNotesCompanion data) {
return CachedNote(
id: data.id.present ? data.id.value : this.id,
title: data.title.present ? data.title.value : this.title,
body: data.body.present ? data.body.value : this.body,
tagsJson: data.tagsJson.present ? data.tagsJson.value : this.tagsJson,
noteType: data.noteType.present ? data.noteType.value : this.noteType,
projectId: data.projectId.present ? data.projectId.value : this.projectId,
milestoneId: data.milestoneId.present
? data.milestoneId.value
: this.milestoneId,
createdAt: data.createdAt.present ? data.createdAt.value : this.createdAt,
updatedAt: data.updatedAt.present ? data.updatedAt.value : this.updatedAt,
cachedAt: data.cachedAt.present ? data.cachedAt.value : this.cachedAt,
);
}
@override
String toString() {
return (StringBuffer('CachedNote(')
..write('id: $id, ')
..write('title: $title, ')
..write('body: $body, ')
..write('tagsJson: $tagsJson, ')
..write('noteType: $noteType, ')
..write('projectId: $projectId, ')
..write('milestoneId: $milestoneId, ')
..write('createdAt: $createdAt, ')
..write('updatedAt: $updatedAt, ')
..write('cachedAt: $cachedAt')
..write(')'))
.toString();
}
@override
int get hashCode => Object.hash(
id,
title,
body,
tagsJson,
noteType,
projectId,
milestoneId,
createdAt,
updatedAt,
cachedAt,
);
@override
bool operator ==(Object other) =>
identical(this, other) ||
(other is CachedNote &&
other.id == this.id &&
other.title == this.title &&
other.body == this.body &&
other.tagsJson == this.tagsJson &&
other.noteType == this.noteType &&
other.projectId == this.projectId &&
other.milestoneId == this.milestoneId &&
other.createdAt == this.createdAt &&
other.updatedAt == this.updatedAt &&
other.cachedAt == this.cachedAt);
}
class CachedNotesCompanion extends UpdateCompanion<CachedNote> {
final Value<int> id;
final Value<String> title;
final Value<String> body;
final Value<String> tagsJson;
final Value<String> noteType;
final Value<int?> projectId;
final Value<int?> milestoneId;
final Value<DateTime> createdAt;
final Value<DateTime> updatedAt;
final Value<DateTime> cachedAt;
const CachedNotesCompanion({
this.id = const Value.absent(),
this.title = const Value.absent(),
this.body = const Value.absent(),
this.tagsJson = const Value.absent(),
this.noteType = const Value.absent(),
this.projectId = const Value.absent(),
this.milestoneId = const Value.absent(),
this.createdAt = const Value.absent(),
this.updatedAt = const Value.absent(),
this.cachedAt = const Value.absent(),
});
CachedNotesCompanion.insert({
this.id = const Value.absent(),
required String title,
required String body,
this.tagsJson = const Value.absent(),
this.noteType = const Value.absent(),
this.projectId = const Value.absent(),
this.milestoneId = const Value.absent(),
required DateTime createdAt,
required DateTime updatedAt,
this.cachedAt = const Value.absent(),
}) : title = Value(title),
body = Value(body),
createdAt = Value(createdAt),
updatedAt = Value(updatedAt);
static Insertable<CachedNote> custom({
Expression<int>? id,
Expression<String>? title,
Expression<String>? body,
Expression<String>? tagsJson,
Expression<String>? noteType,
Expression<int>? projectId,
Expression<int>? milestoneId,
Expression<DateTime>? createdAt,
Expression<DateTime>? updatedAt,
Expression<DateTime>? cachedAt,
}) {
return RawValuesInsertable({
if (id != null) 'id': id,
if (title != null) 'title': title,
if (body != null) 'body': body,
if (tagsJson != null) 'tags_json': tagsJson,
if (noteType != null) 'note_type': noteType,
if (projectId != null) 'project_id': projectId,
if (milestoneId != null) 'milestone_id': milestoneId,
if (createdAt != null) 'created_at': createdAt,
if (updatedAt != null) 'updated_at': updatedAt,
if (cachedAt != null) 'cached_at': cachedAt,
});
}
CachedNotesCompanion copyWith({
Value<int>? id,
Value<String>? title,
Value<String>? body,
Value<String>? tagsJson,
Value<String>? noteType,
Value<int?>? projectId,
Value<int?>? milestoneId,
Value<DateTime>? createdAt,
Value<DateTime>? updatedAt,
Value<DateTime>? cachedAt,
}) {
return CachedNotesCompanion(
id: id ?? this.id,
title: title ?? this.title,
body: body ?? this.body,
tagsJson: tagsJson ?? this.tagsJson,
noteType: noteType ?? this.noteType,
projectId: projectId ?? this.projectId,
milestoneId: milestoneId ?? this.milestoneId,
createdAt: createdAt ?? this.createdAt,
updatedAt: updatedAt ?? this.updatedAt,
cachedAt: cachedAt ?? this.cachedAt,
);
}
@override
Map<String, Expression> toColumns(bool nullToAbsent) {
final map = <String, Expression>{};
if (id.present) {
map['id'] = Variable<int>(id.value);
}
if (title.present) {
map['title'] = Variable<String>(title.value);
}
if (body.present) {
map['body'] = Variable<String>(body.value);
}
if (tagsJson.present) {
map['tags_json'] = Variable<String>(tagsJson.value);
}
if (noteType.present) {
map['note_type'] = Variable<String>(noteType.value);
}
if (projectId.present) {
map['project_id'] = Variable<int>(projectId.value);
}
if (milestoneId.present) {
map['milestone_id'] = Variable<int>(milestoneId.value);
}
if (createdAt.present) {
map['created_at'] = Variable<DateTime>(createdAt.value);
}
if (updatedAt.present) {
map['updated_at'] = Variable<DateTime>(updatedAt.value);
}
if (cachedAt.present) {
map['cached_at'] = Variable<DateTime>(cachedAt.value);
}
return map;
}
@override
String toString() {
return (StringBuffer('CachedNotesCompanion(')
..write('id: $id, ')
..write('title: $title, ')
..write('body: $body, ')
..write('tagsJson: $tagsJson, ')
..write('noteType: $noteType, ')
..write('projectId: $projectId, ')
..write('milestoneId: $milestoneId, ')
..write('createdAt: $createdAt, ')
..write('updatedAt: $updatedAt, ')
..write('cachedAt: $cachedAt')
..write(')'))
.toString();
}
}
class $SyncMetadataTable extends SyncMetadata
with TableInfo<$SyncMetadataTable, SyncMetadataData> {
@override
final GeneratedDatabase attachedDatabase;
final String? _alias;
$SyncMetadataTable(this.attachedDatabase, [this._alias]);
static const VerificationMeta _domainMeta = const VerificationMeta('domain');
@override
late final GeneratedColumn<String> domain = GeneratedColumn<String>(
'domain',
aliasedName,
false,
type: DriftSqlType.string,
requiredDuringInsert: true,
);
static const VerificationMeta _lastSyncedAtMeta = const VerificationMeta(
'lastSyncedAt',
);
@override
late final GeneratedColumn<DateTime> lastSyncedAt = GeneratedColumn<DateTime>(
'last_synced_at',
aliasedName,
false,
type: DriftSqlType.dateTime,
requiredDuringInsert: true,
);
@override
List<GeneratedColumn> get $columns => [domain, lastSyncedAt];
@override
String get aliasedName => _alias ?? actualTableName;
@override
String get actualTableName => $name;
static const String $name = 'sync_metadata';
@override
VerificationContext validateIntegrity(
Insertable<SyncMetadataData> instance, {
bool isInserting = false,
}) {
final context = VerificationContext();
final data = instance.toColumns(true);
if (data.containsKey('domain')) {
context.handle(
_domainMeta,
domain.isAcceptableOrUnknown(data['domain']!, _domainMeta),
);
} else if (isInserting) {
context.missing(_domainMeta);
}
if (data.containsKey('last_synced_at')) {
context.handle(
_lastSyncedAtMeta,
lastSyncedAt.isAcceptableOrUnknown(
data['last_synced_at']!,
_lastSyncedAtMeta,
),
);
} else if (isInserting) {
context.missing(_lastSyncedAtMeta);
}
return context;
}
@override
Set<GeneratedColumn> get $primaryKey => {domain};
@override
SyncMetadataData map(Map<String, dynamic> data, {String? tablePrefix}) {
final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : '';
return SyncMetadataData(
domain: attachedDatabase.typeMapping.read(
DriftSqlType.string,
data['${effectivePrefix}domain'],
)!,
lastSyncedAt: attachedDatabase.typeMapping.read(
DriftSqlType.dateTime,
data['${effectivePrefix}last_synced_at'],
)!,
);
}
@override
$SyncMetadataTable createAlias(String alias) {
return $SyncMetadataTable(attachedDatabase, alias);
}
}
class SyncMetadataData extends DataClass
implements Insertable<SyncMetadataData> {
final String domain;
final DateTime lastSyncedAt;
const SyncMetadataData({required this.domain, required this.lastSyncedAt});
@override
Map<String, Expression> toColumns(bool nullToAbsent) {
final map = <String, Expression>{};
map['domain'] = Variable<String>(domain);
map['last_synced_at'] = Variable<DateTime>(lastSyncedAt);
return map;
}
SyncMetadataCompanion toCompanion(bool nullToAbsent) {
return SyncMetadataCompanion(
domain: Value(domain),
lastSyncedAt: Value(lastSyncedAt),
);
}
factory SyncMetadataData.fromJson(
Map<String, dynamic> json, {
ValueSerializer? serializer,
}) {
serializer ??= driftRuntimeOptions.defaultSerializer;
return SyncMetadataData(
domain: serializer.fromJson<String>(json['domain']),
lastSyncedAt: serializer.fromJson<DateTime>(json['lastSyncedAt']),
);
}
@override
Map<String, dynamic> toJson({ValueSerializer? serializer}) {
serializer ??= driftRuntimeOptions.defaultSerializer;
return <String, dynamic>{
'domain': serializer.toJson<String>(domain),
'lastSyncedAt': serializer.toJson<DateTime>(lastSyncedAt),
};
}
SyncMetadataData copyWith({String? domain, DateTime? lastSyncedAt}) =>
SyncMetadataData(
domain: domain ?? this.domain,
lastSyncedAt: lastSyncedAt ?? this.lastSyncedAt,
);
SyncMetadataData copyWithCompanion(SyncMetadataCompanion data) {
return SyncMetadataData(
domain: data.domain.present ? data.domain.value : this.domain,
lastSyncedAt: data.lastSyncedAt.present
? data.lastSyncedAt.value
: this.lastSyncedAt,
);
}
@override
String toString() {
return (StringBuffer('SyncMetadataData(')
..write('domain: $domain, ')
..write('lastSyncedAt: $lastSyncedAt')
..write(')'))
.toString();
}
@override
int get hashCode => Object.hash(domain, lastSyncedAt);
@override
bool operator ==(Object other) =>
identical(this, other) ||
(other is SyncMetadataData &&
other.domain == this.domain &&
other.lastSyncedAt == this.lastSyncedAt);
}
class SyncMetadataCompanion extends UpdateCompanion<SyncMetadataData> {
final Value<String> domain;
final Value<DateTime> lastSyncedAt;
final Value<int> rowid;
const SyncMetadataCompanion({
this.domain = const Value.absent(),
this.lastSyncedAt = const Value.absent(),
this.rowid = const Value.absent(),
});
SyncMetadataCompanion.insert({
required String domain,
required DateTime lastSyncedAt,
this.rowid = const Value.absent(),
}) : domain = Value(domain),
lastSyncedAt = Value(lastSyncedAt);
static Insertable<SyncMetadataData> custom({
Expression<String>? domain,
Expression<DateTime>? lastSyncedAt,
Expression<int>? rowid,
}) {
return RawValuesInsertable({
if (domain != null) 'domain': domain,
if (lastSyncedAt != null) 'last_synced_at': lastSyncedAt,
if (rowid != null) 'rowid': rowid,
});
}
SyncMetadataCompanion copyWith({
Value<String>? domain,
Value<DateTime>? lastSyncedAt,
Value<int>? rowid,
}) {
return SyncMetadataCompanion(
domain: domain ?? this.domain,
lastSyncedAt: lastSyncedAt ?? this.lastSyncedAt,
rowid: rowid ?? this.rowid,
);
}
@override
Map<String, Expression> toColumns(bool nullToAbsent) {
final map = <String, Expression>{};
if (domain.present) {
map['domain'] = Variable<String>(domain.value);
}
if (lastSyncedAt.present) {
map['last_synced_at'] = Variable<DateTime>(lastSyncedAt.value);
}
if (rowid.present) {
map['rowid'] = Variable<int>(rowid.value);
}
return map;
}
@override
String toString() {
return (StringBuffer('SyncMetadataCompanion(')
..write('domain: $domain, ')
..write('lastSyncedAt: $lastSyncedAt, ')
..write('rowid: $rowid')
..write(')'))
.toString();
}
}
abstract class _$FabledDatabase extends GeneratedDatabase {
_$FabledDatabase(QueryExecutor e) : super(e);
$FabledDatabaseManager get managers => $FabledDatabaseManager(this);
late final $CachedNotesTable cachedNotes = $CachedNotesTable(this);
late final $SyncMetadataTable syncMetadata = $SyncMetadataTable(this);
@override
Iterable<TableInfo<Table, Object?>> get allTables =>
allSchemaEntities.whereType<TableInfo<Table, Object?>>();
@override
List<DatabaseSchemaEntity> get allSchemaEntities => [
cachedNotes,
syncMetadata,
];
}
typedef $$CachedNotesTableCreateCompanionBuilder =
CachedNotesCompanion Function({
Value<int> id,
required String title,
required String body,
Value<String> tagsJson,
Value<String> noteType,
Value<int?> projectId,
Value<int?> milestoneId,
required DateTime createdAt,
required DateTime updatedAt,
Value<DateTime> cachedAt,
});
typedef $$CachedNotesTableUpdateCompanionBuilder =
CachedNotesCompanion Function({
Value<int> id,
Value<String> title,
Value<String> body,
Value<String> tagsJson,
Value<String> noteType,
Value<int?> projectId,
Value<int?> milestoneId,
Value<DateTime> createdAt,
Value<DateTime> updatedAt,
Value<DateTime> cachedAt,
});
class $$CachedNotesTableFilterComposer
extends Composer<_$FabledDatabase, $CachedNotesTable> {
$$CachedNotesTableFilterComposer({
required super.$db,
required super.$table,
super.joinBuilder,
super.$addJoinBuilderToRootComposer,
super.$removeJoinBuilderFromRootComposer,
});
ColumnFilters<int> get id => $composableBuilder(
column: $table.id,
builder: (column) => ColumnFilters(column),
);
ColumnFilters<String> get title => $composableBuilder(
column: $table.title,
builder: (column) => ColumnFilters(column),
);
ColumnFilters<String> get body => $composableBuilder(
column: $table.body,
builder: (column) => ColumnFilters(column),
);
ColumnFilters<String> get tagsJson => $composableBuilder(
column: $table.tagsJson,
builder: (column) => ColumnFilters(column),
);
ColumnFilters<String> get noteType => $composableBuilder(
column: $table.noteType,
builder: (column) => ColumnFilters(column),
);
ColumnFilters<int> get projectId => $composableBuilder(
column: $table.projectId,
builder: (column) => ColumnFilters(column),
);
ColumnFilters<int> get milestoneId => $composableBuilder(
column: $table.milestoneId,
builder: (column) => ColumnFilters(column),
);
ColumnFilters<DateTime> get createdAt => $composableBuilder(
column: $table.createdAt,
builder: (column) => ColumnFilters(column),
);
ColumnFilters<DateTime> get updatedAt => $composableBuilder(
column: $table.updatedAt,
builder: (column) => ColumnFilters(column),
);
ColumnFilters<DateTime> get cachedAt => $composableBuilder(
column: $table.cachedAt,
builder: (column) => ColumnFilters(column),
);
}
class $$CachedNotesTableOrderingComposer
extends Composer<_$FabledDatabase, $CachedNotesTable> {
$$CachedNotesTableOrderingComposer({
required super.$db,
required super.$table,
super.joinBuilder,
super.$addJoinBuilderToRootComposer,
super.$removeJoinBuilderFromRootComposer,
});
ColumnOrderings<int> get id => $composableBuilder(
column: $table.id,
builder: (column) => ColumnOrderings(column),
);
ColumnOrderings<String> get title => $composableBuilder(
column: $table.title,
builder: (column) => ColumnOrderings(column),
);
ColumnOrderings<String> get body => $composableBuilder(
column: $table.body,
builder: (column) => ColumnOrderings(column),
);
ColumnOrderings<String> get tagsJson => $composableBuilder(
column: $table.tagsJson,
builder: (column) => ColumnOrderings(column),
);
ColumnOrderings<String> get noteType => $composableBuilder(
column: $table.noteType,
builder: (column) => ColumnOrderings(column),
);
ColumnOrderings<int> get projectId => $composableBuilder(
column: $table.projectId,
builder: (column) => ColumnOrderings(column),
);
ColumnOrderings<int> get milestoneId => $composableBuilder(
column: $table.milestoneId,
builder: (column) => ColumnOrderings(column),
);
ColumnOrderings<DateTime> get createdAt => $composableBuilder(
column: $table.createdAt,
builder: (column) => ColumnOrderings(column),
);
ColumnOrderings<DateTime> get updatedAt => $composableBuilder(
column: $table.updatedAt,
builder: (column) => ColumnOrderings(column),
);
ColumnOrderings<DateTime> get cachedAt => $composableBuilder(
column: $table.cachedAt,
builder: (column) => ColumnOrderings(column),
);
}
class $$CachedNotesTableAnnotationComposer
extends Composer<_$FabledDatabase, $CachedNotesTable> {
$$CachedNotesTableAnnotationComposer({
required super.$db,
required super.$table,
super.joinBuilder,
super.$addJoinBuilderToRootComposer,
super.$removeJoinBuilderFromRootComposer,
});
GeneratedColumn<int> get id =>
$composableBuilder(column: $table.id, builder: (column) => column);
GeneratedColumn<String> get title =>
$composableBuilder(column: $table.title, builder: (column) => column);
GeneratedColumn<String> get body =>
$composableBuilder(column: $table.body, builder: (column) => column);
GeneratedColumn<String> get tagsJson =>
$composableBuilder(column: $table.tagsJson, builder: (column) => column);
GeneratedColumn<String> get noteType =>
$composableBuilder(column: $table.noteType, builder: (column) => column);
GeneratedColumn<int> get projectId =>
$composableBuilder(column: $table.projectId, builder: (column) => column);
GeneratedColumn<int> get milestoneId => $composableBuilder(
column: $table.milestoneId,
builder: (column) => column,
);
GeneratedColumn<DateTime> get createdAt =>
$composableBuilder(column: $table.createdAt, builder: (column) => column);
GeneratedColumn<DateTime> get updatedAt =>
$composableBuilder(column: $table.updatedAt, builder: (column) => column);
GeneratedColumn<DateTime> get cachedAt =>
$composableBuilder(column: $table.cachedAt, builder: (column) => column);
}
class $$CachedNotesTableTableManager
extends
RootTableManager<
_$FabledDatabase,
$CachedNotesTable,
CachedNote,
$$CachedNotesTableFilterComposer,
$$CachedNotesTableOrderingComposer,
$$CachedNotesTableAnnotationComposer,
$$CachedNotesTableCreateCompanionBuilder,
$$CachedNotesTableUpdateCompanionBuilder,
(
CachedNote,
BaseReferences<_$FabledDatabase, $CachedNotesTable, CachedNote>,
),
CachedNote,
PrefetchHooks Function()
> {
$$CachedNotesTableTableManager(_$FabledDatabase db, $CachedNotesTable table)
: super(
TableManagerState(
db: db,
table: table,
createFilteringComposer: () =>
$$CachedNotesTableFilterComposer($db: db, $table: table),
createOrderingComposer: () =>
$$CachedNotesTableOrderingComposer($db: db, $table: table),
createComputedFieldComposer: () =>
$$CachedNotesTableAnnotationComposer($db: db, $table: table),
updateCompanionCallback:
({
Value<int> id = const Value.absent(),
Value<String> title = const Value.absent(),
Value<String> body = const Value.absent(),
Value<String> tagsJson = const Value.absent(),
Value<String> noteType = const Value.absent(),
Value<int?> projectId = const Value.absent(),
Value<int?> milestoneId = const Value.absent(),
Value<DateTime> createdAt = const Value.absent(),
Value<DateTime> updatedAt = const Value.absent(),
Value<DateTime> cachedAt = const Value.absent(),
}) => CachedNotesCompanion(
id: id,
title: title,
body: body,
tagsJson: tagsJson,
noteType: noteType,
projectId: projectId,
milestoneId: milestoneId,
createdAt: createdAt,
updatedAt: updatedAt,
cachedAt: cachedAt,
),
createCompanionCallback:
({
Value<int> id = const Value.absent(),
required String title,
required String body,
Value<String> tagsJson = const Value.absent(),
Value<String> noteType = const Value.absent(),
Value<int?> projectId = const Value.absent(),
Value<int?> milestoneId = const Value.absent(),
required DateTime createdAt,
required DateTime updatedAt,
Value<DateTime> cachedAt = const Value.absent(),
}) => CachedNotesCompanion.insert(
id: id,
title: title,
body: body,
tagsJson: tagsJson,
noteType: noteType,
projectId: projectId,
milestoneId: milestoneId,
createdAt: createdAt,
updatedAt: updatedAt,
cachedAt: cachedAt,
),
withReferenceMapper: (p0) => p0
.map((e) => (e.readTable(table), BaseReferences(db, table, e)))
.toList(),
prefetchHooksCallback: null,
),
);
}
typedef $$CachedNotesTableProcessedTableManager =
ProcessedTableManager<
_$FabledDatabase,
$CachedNotesTable,
CachedNote,
$$CachedNotesTableFilterComposer,
$$CachedNotesTableOrderingComposer,
$$CachedNotesTableAnnotationComposer,
$$CachedNotesTableCreateCompanionBuilder,
$$CachedNotesTableUpdateCompanionBuilder,
(
CachedNote,
BaseReferences<_$FabledDatabase, $CachedNotesTable, CachedNote>,
),
CachedNote,
PrefetchHooks Function()
>;
typedef $$SyncMetadataTableCreateCompanionBuilder =
SyncMetadataCompanion Function({
required String domain,
required DateTime lastSyncedAt,
Value<int> rowid,
});
typedef $$SyncMetadataTableUpdateCompanionBuilder =
SyncMetadataCompanion Function({
Value<String> domain,
Value<DateTime> lastSyncedAt,
Value<int> rowid,
});
class $$SyncMetadataTableFilterComposer
extends Composer<_$FabledDatabase, $SyncMetadataTable> {
$$SyncMetadataTableFilterComposer({
required super.$db,
required super.$table,
super.joinBuilder,
super.$addJoinBuilderToRootComposer,
super.$removeJoinBuilderFromRootComposer,
});
ColumnFilters<String> get domain => $composableBuilder(
column: $table.domain,
builder: (column) => ColumnFilters(column),
);
ColumnFilters<DateTime> get lastSyncedAt => $composableBuilder(
column: $table.lastSyncedAt,
builder: (column) => ColumnFilters(column),
);
}
class $$SyncMetadataTableOrderingComposer
extends Composer<_$FabledDatabase, $SyncMetadataTable> {
$$SyncMetadataTableOrderingComposer({
required super.$db,
required super.$table,
super.joinBuilder,
super.$addJoinBuilderToRootComposer,
super.$removeJoinBuilderFromRootComposer,
});
ColumnOrderings<String> get domain => $composableBuilder(
column: $table.domain,
builder: (column) => ColumnOrderings(column),
);
ColumnOrderings<DateTime> get lastSyncedAt => $composableBuilder(
column: $table.lastSyncedAt,
builder: (column) => ColumnOrderings(column),
);
}
class $$SyncMetadataTableAnnotationComposer
extends Composer<_$FabledDatabase, $SyncMetadataTable> {
$$SyncMetadataTableAnnotationComposer({
required super.$db,
required super.$table,
super.joinBuilder,
super.$addJoinBuilderToRootComposer,
super.$removeJoinBuilderFromRootComposer,
});
GeneratedColumn<String> get domain =>
$composableBuilder(column: $table.domain, builder: (column) => column);
GeneratedColumn<DateTime> get lastSyncedAt => $composableBuilder(
column: $table.lastSyncedAt,
builder: (column) => column,
);
}
class $$SyncMetadataTableTableManager
extends
RootTableManager<
_$FabledDatabase,
$SyncMetadataTable,
SyncMetadataData,
$$SyncMetadataTableFilterComposer,
$$SyncMetadataTableOrderingComposer,
$$SyncMetadataTableAnnotationComposer,
$$SyncMetadataTableCreateCompanionBuilder,
$$SyncMetadataTableUpdateCompanionBuilder,
(
SyncMetadataData,
BaseReferences<
_$FabledDatabase,
$SyncMetadataTable,
SyncMetadataData
>,
),
SyncMetadataData,
PrefetchHooks Function()
> {
$$SyncMetadataTableTableManager(_$FabledDatabase db, $SyncMetadataTable table)
: super(
TableManagerState(
db: db,
table: table,
createFilteringComposer: () =>
$$SyncMetadataTableFilterComposer($db: db, $table: table),
createOrderingComposer: () =>
$$SyncMetadataTableOrderingComposer($db: db, $table: table),
createComputedFieldComposer: () =>
$$SyncMetadataTableAnnotationComposer($db: db, $table: table),
updateCompanionCallback:
({
Value<String> domain = const Value.absent(),
Value<DateTime> lastSyncedAt = const Value.absent(),
Value<int> rowid = const Value.absent(),
}) => SyncMetadataCompanion(
domain: domain,
lastSyncedAt: lastSyncedAt,
rowid: rowid,
),
createCompanionCallback:
({
required String domain,
required DateTime lastSyncedAt,
Value<int> rowid = const Value.absent(),
}) => SyncMetadataCompanion.insert(
domain: domain,
lastSyncedAt: lastSyncedAt,
rowid: rowid,
),
withReferenceMapper: (p0) => p0
.map((e) => (e.readTable(table), BaseReferences(db, table, e)))
.toList(),
prefetchHooksCallback: null,
),
);
}
typedef $$SyncMetadataTableProcessedTableManager =
ProcessedTableManager<
_$FabledDatabase,
$SyncMetadataTable,
SyncMetadataData,
$$SyncMetadataTableFilterComposer,
$$SyncMetadataTableOrderingComposer,
$$SyncMetadataTableAnnotationComposer,
$$SyncMetadataTableCreateCompanionBuilder,
$$SyncMetadataTableUpdateCompanionBuilder,
(
SyncMetadataData,
BaseReferences<_$FabledDatabase, $SyncMetadataTable, SyncMetadataData>,
),
SyncMetadataData,
PrefetchHooks Function()
>;
class $FabledDatabaseManager {
final _$FabledDatabase _db;
$FabledDatabaseManager(this._db);
$$CachedNotesTableTableManager get cachedNotes =>
$$CachedNotesTableTableManager(_db, _db.cachedNotes);
$$SyncMetadataTableTableManager get syncMetadata =>
$$SyncMetadataTableTableManager(_db, _db.syncMetadata);
}