Files
fin-tracker/app/lib/core/cache/response_cache.g.dart
T
Dmitry ffc5ed959a feat(app): offline-кэш GET-запросов на дашборде — фаза 5
CacheInterceptor кэширует каждый успешный GET по путь+параметры в drift
(sqlite нативно, wasm+OPFS в браузере) и подменяет им сетевую ошибку;
провайдер отдаёт Cached<T>, экран показывает баннер «данные на …».
Контракт для остальных экранов — docs/ai/offline-cache.md.

flake.nix: libsecret/pkg-config для линуксовой сборки, jq/curl для
just app-web-assets (сборка sqlite3.wasm + drift_worker.js).
2026-09-19 12:40:08 +03:00

479 lines
15 KiB
Dart

// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'response_cache.dart';
// ignore_for_file: type=lint
class $CachedResponsesTable extends CachedResponses
with TableInfo<$CachedResponsesTable, CachedResponse> {
@override
final GeneratedDatabase attachedDatabase;
final String? _alias;
$CachedResponsesTable(this.attachedDatabase, [this._alias]);
static const VerificationMeta _requestKeyMeta = const VerificationMeta(
'requestKey',
);
@override
late final GeneratedColumn<String> requestKey = GeneratedColumn<String>(
'request_key',
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 _fetchedAtMeta = const VerificationMeta(
'fetchedAt',
);
@override
late final GeneratedColumn<DateTime> fetchedAt = GeneratedColumn<DateTime>(
'fetched_at',
aliasedName,
false,
type: DriftSqlType.dateTime,
requiredDuringInsert: true,
);
@override
List<GeneratedColumn> get $columns => [requestKey, body, fetchedAt];
@override
String get aliasedName => _alias ?? actualTableName;
@override
String get actualTableName => $name;
static const String $name = 'cached_responses';
@override
VerificationContext validateIntegrity(
Insertable<CachedResponse> instance, {
bool isInserting = false,
}) {
final context = VerificationContext();
final data = instance.toColumns(true);
if (data.containsKey('request_key')) {
context.handle(
_requestKeyMeta,
requestKey.isAcceptableOrUnknown(data['request_key']!, _requestKeyMeta),
);
} else if (isInserting) {
context.missing(_requestKeyMeta);
}
if (data.containsKey('body')) {
context.handle(
_bodyMeta,
body.isAcceptableOrUnknown(data['body']!, _bodyMeta),
);
} else if (isInserting) {
context.missing(_bodyMeta);
}
if (data.containsKey('fetched_at')) {
context.handle(
_fetchedAtMeta,
fetchedAt.isAcceptableOrUnknown(data['fetched_at']!, _fetchedAtMeta),
);
} else if (isInserting) {
context.missing(_fetchedAtMeta);
}
return context;
}
@override
Set<GeneratedColumn> get $primaryKey => {requestKey};
@override
CachedResponse map(Map<String, dynamic> data, {String? tablePrefix}) {
final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : '';
return CachedResponse(
requestKey: attachedDatabase.typeMapping.read(
DriftSqlType.string,
data['${effectivePrefix}request_key'],
)!,
body: attachedDatabase.typeMapping.read(
DriftSqlType.string,
data['${effectivePrefix}body'],
)!,
fetchedAt: attachedDatabase.typeMapping.read(
DriftSqlType.dateTime,
data['${effectivePrefix}fetched_at'],
)!,
);
}
@override
$CachedResponsesTable createAlias(String alias) {
return $CachedResponsesTable(attachedDatabase, alias);
}
}
class CachedResponse extends DataClass implements Insertable<CachedResponse> {
final String requestKey;
final String body;
final DateTime fetchedAt;
const CachedResponse({
required this.requestKey,
required this.body,
required this.fetchedAt,
});
@override
Map<String, Expression> toColumns(bool nullToAbsent) {
final map = <String, Expression>{};
map['request_key'] = Variable<String>(requestKey);
map['body'] = Variable<String>(body);
map['fetched_at'] = Variable<DateTime>(fetchedAt);
return map;
}
CachedResponsesCompanion toCompanion(bool nullToAbsent) {
return CachedResponsesCompanion(
requestKey: Value(requestKey),
body: Value(body),
fetchedAt: Value(fetchedAt),
);
}
factory CachedResponse.fromJson(
Map<String, dynamic> json, {
ValueSerializer? serializer,
}) {
serializer ??= driftRuntimeOptions.defaultSerializer;
return CachedResponse(
requestKey: serializer.fromJson<String>(json['requestKey']),
body: serializer.fromJson<String>(json['body']),
fetchedAt: serializer.fromJson<DateTime>(json['fetchedAt']),
);
}
@override
Map<String, dynamic> toJson({ValueSerializer? serializer}) {
serializer ??= driftRuntimeOptions.defaultSerializer;
return <String, dynamic>{
'requestKey': serializer.toJson<String>(requestKey),
'body': serializer.toJson<String>(body),
'fetchedAt': serializer.toJson<DateTime>(fetchedAt),
};
}
CachedResponse copyWith({
String? requestKey,
String? body,
DateTime? fetchedAt,
}) => CachedResponse(
requestKey: requestKey ?? this.requestKey,
body: body ?? this.body,
fetchedAt: fetchedAt ?? this.fetchedAt,
);
CachedResponse copyWithCompanion(CachedResponsesCompanion data) {
return CachedResponse(
requestKey: data.requestKey.present
? data.requestKey.value
: this.requestKey,
body: data.body.present ? data.body.value : this.body,
fetchedAt: data.fetchedAt.present ? data.fetchedAt.value : this.fetchedAt,
);
}
@override
String toString() {
return (StringBuffer('CachedResponse(')
..write('requestKey: $requestKey, ')
..write('body: $body, ')
..write('fetchedAt: $fetchedAt')
..write(')'))
.toString();
}
@override
int get hashCode => Object.hash(requestKey, body, fetchedAt);
@override
bool operator ==(Object other) =>
identical(this, other) ||
(other is CachedResponse &&
other.requestKey == this.requestKey &&
other.body == this.body &&
other.fetchedAt == this.fetchedAt);
}
class CachedResponsesCompanion extends UpdateCompanion<CachedResponse> {
final Value<String> requestKey;
final Value<String> body;
final Value<DateTime> fetchedAt;
final Value<int> rowid;
const CachedResponsesCompanion({
this.requestKey = const Value.absent(),
this.body = const Value.absent(),
this.fetchedAt = const Value.absent(),
this.rowid = const Value.absent(),
});
CachedResponsesCompanion.insert({
required String requestKey,
required String body,
required DateTime fetchedAt,
this.rowid = const Value.absent(),
}) : requestKey = Value(requestKey),
body = Value(body),
fetchedAt = Value(fetchedAt);
static Insertable<CachedResponse> custom({
Expression<String>? requestKey,
Expression<String>? body,
Expression<DateTime>? fetchedAt,
Expression<int>? rowid,
}) {
return RawValuesInsertable({
if (requestKey != null) 'request_key': requestKey,
if (body != null) 'body': body,
if (fetchedAt != null) 'fetched_at': fetchedAt,
if (rowid != null) 'rowid': rowid,
});
}
CachedResponsesCompanion copyWith({
Value<String>? requestKey,
Value<String>? body,
Value<DateTime>? fetchedAt,
Value<int>? rowid,
}) {
return CachedResponsesCompanion(
requestKey: requestKey ?? this.requestKey,
body: body ?? this.body,
fetchedAt: fetchedAt ?? this.fetchedAt,
rowid: rowid ?? this.rowid,
);
}
@override
Map<String, Expression> toColumns(bool nullToAbsent) {
final map = <String, Expression>{};
if (requestKey.present) {
map['request_key'] = Variable<String>(requestKey.value);
}
if (body.present) {
map['body'] = Variable<String>(body.value);
}
if (fetchedAt.present) {
map['fetched_at'] = Variable<DateTime>(fetchedAt.value);
}
if (rowid.present) {
map['rowid'] = Variable<int>(rowid.value);
}
return map;
}
@override
String toString() {
return (StringBuffer('CachedResponsesCompanion(')
..write('requestKey: $requestKey, ')
..write('body: $body, ')
..write('fetchedAt: $fetchedAt, ')
..write('rowid: $rowid')
..write(')'))
.toString();
}
}
abstract class _$ResponseCacheDatabase extends GeneratedDatabase {
_$ResponseCacheDatabase(QueryExecutor e) : super(e);
$ResponseCacheDatabaseManager get managers =>
$ResponseCacheDatabaseManager(this);
late final $CachedResponsesTable cachedResponses = $CachedResponsesTable(
this,
);
@override
Iterable<TableInfo<Table, Object?>> get allTables =>
allSchemaEntities.whereType<TableInfo<Table, Object?>>();
@override
List<DatabaseSchemaEntity> get allSchemaEntities => [cachedResponses];
}
typedef $$CachedResponsesTableCreateCompanionBuilder =
CachedResponsesCompanion Function({
required String requestKey,
required String body,
required DateTime fetchedAt,
Value<int> rowid,
});
typedef $$CachedResponsesTableUpdateCompanionBuilder =
CachedResponsesCompanion Function({
Value<String> requestKey,
Value<String> body,
Value<DateTime> fetchedAt,
Value<int> rowid,
});
class $$CachedResponsesTableFilterComposer
extends Composer<_$ResponseCacheDatabase, $CachedResponsesTable> {
$$CachedResponsesTableFilterComposer({
required super.$db,
required super.$table,
super.joinBuilder,
super.$addJoinBuilderToRootComposer,
super.$removeJoinBuilderFromRootComposer,
});
ColumnFilters<String> get requestKey => $composableBuilder(
column: $table.requestKey,
builder: (column) => ColumnFilters(column),
);
ColumnFilters<String> get body => $composableBuilder(
column: $table.body,
builder: (column) => ColumnFilters(column),
);
ColumnFilters<DateTime> get fetchedAt => $composableBuilder(
column: $table.fetchedAt,
builder: (column) => ColumnFilters(column),
);
}
class $$CachedResponsesTableOrderingComposer
extends Composer<_$ResponseCacheDatabase, $CachedResponsesTable> {
$$CachedResponsesTableOrderingComposer({
required super.$db,
required super.$table,
super.joinBuilder,
super.$addJoinBuilderToRootComposer,
super.$removeJoinBuilderFromRootComposer,
});
ColumnOrderings<String> get requestKey => $composableBuilder(
column: $table.requestKey,
builder: (column) => ColumnOrderings(column),
);
ColumnOrderings<String> get body => $composableBuilder(
column: $table.body,
builder: (column) => ColumnOrderings(column),
);
ColumnOrderings<DateTime> get fetchedAt => $composableBuilder(
column: $table.fetchedAt,
builder: (column) => ColumnOrderings(column),
);
}
class $$CachedResponsesTableAnnotationComposer
extends Composer<_$ResponseCacheDatabase, $CachedResponsesTable> {
$$CachedResponsesTableAnnotationComposer({
required super.$db,
required super.$table,
super.joinBuilder,
super.$addJoinBuilderToRootComposer,
super.$removeJoinBuilderFromRootComposer,
});
GeneratedColumn<String> get requestKey => $composableBuilder(
column: $table.requestKey,
builder: (column) => column,
);
GeneratedColumn<String> get body =>
$composableBuilder(column: $table.body, builder: (column) => column);
GeneratedColumn<DateTime> get fetchedAt =>
$composableBuilder(column: $table.fetchedAt, builder: (column) => column);
}
class $$CachedResponsesTableTableManager
extends
RootTableManager<
_$ResponseCacheDatabase,
$CachedResponsesTable,
CachedResponse,
$$CachedResponsesTableFilterComposer,
$$CachedResponsesTableOrderingComposer,
$$CachedResponsesTableAnnotationComposer,
$$CachedResponsesTableCreateCompanionBuilder,
$$CachedResponsesTableUpdateCompanionBuilder,
(
CachedResponse,
BaseReferences<
_$ResponseCacheDatabase,
$CachedResponsesTable,
CachedResponse
>,
),
CachedResponse,
PrefetchHooks Function()
> {
$$CachedResponsesTableTableManager(
_$ResponseCacheDatabase db,
$CachedResponsesTable table,
) : super(
TableManagerState(
db: db,
table: table,
createFilteringComposer: () =>
$$CachedResponsesTableFilterComposer($db: db, $table: table),
createOrderingComposer: () =>
$$CachedResponsesTableOrderingComposer($db: db, $table: table),
createComputedFieldComposer: () =>
$$CachedResponsesTableAnnotationComposer($db: db, $table: table),
updateCompanionCallback:
({
Value<String> requestKey = const Value.absent(),
Value<String> body = const Value.absent(),
Value<DateTime> fetchedAt = const Value.absent(),
Value<int> rowid = const Value.absent(),
}) => CachedResponsesCompanion(
requestKey: requestKey,
body: body,
fetchedAt: fetchedAt,
rowid: rowid,
),
createCompanionCallback:
({
required String requestKey,
required String body,
required DateTime fetchedAt,
Value<int> rowid = const Value.absent(),
}) => CachedResponsesCompanion.insert(
requestKey: requestKey,
body: body,
fetchedAt: fetchedAt,
rowid: rowid,
),
withReferenceMapper: (p0) => p0
.map(
(e) => (
e.readTable<$CachedResponsesTable, CachedResponse>(table),
BaseReferences<
_$ResponseCacheDatabase,
$CachedResponsesTable,
CachedResponse
>(db, table, e),
),
)
.toList(),
prefetchHooksCallback: null,
),
);
}
typedef $$CachedResponsesTableProcessedTableManager =
ProcessedTableManager<
_$ResponseCacheDatabase,
$CachedResponsesTable,
CachedResponse,
$$CachedResponsesTableFilterComposer,
$$CachedResponsesTableOrderingComposer,
$$CachedResponsesTableAnnotationComposer,
$$CachedResponsesTableCreateCompanionBuilder,
$$CachedResponsesTableUpdateCompanionBuilder,
(
CachedResponse,
BaseReferences<
_$ResponseCacheDatabase,
$CachedResponsesTable,
CachedResponse
>,
),
CachedResponse,
PrefetchHooks Function()
>;
class $ResponseCacheDatabaseManager {
final _$ResponseCacheDatabase _db;
$ResponseCacheDatabaseManager(this._db);
$$CachedResponsesTableTableManager get cachedResponses =>
$$CachedResponsesTableTableManager(_db, _db.cachedResponses);
}