diff --git a/assets/translations/de.json b/assets/translations/de.json index 79364d6f..fdd7a371 100644 --- a/assets/translations/de.json +++ b/assets/translations/de.json @@ -506,6 +506,7 @@ "synchronization": "Synchronisation", "syncHistoryDesc": "Synchronisationsstatus und ausstehende Änderungen anzeigen", "lastSyncStatus": "Letzter Synchronisationsstatus", + "lastAttempted": "Letzter Versuch", "noSyncHistory": "Kein Synchronisationsverlauf verfügbar", "pendingChanges": "Ausstehende Änderungen", "noPendingChanges": "Keine ausstehenden Änderungen", diff --git a/assets/translations/en.json b/assets/translations/en.json index a8b5dfda..c1f29fec 100644 --- a/assets/translations/en.json +++ b/assets/translations/en.json @@ -506,6 +506,7 @@ "synchronization": "Synchronization", "syncHistoryDesc": "View sync status and pending changes", "lastSyncStatus": "Last sync status", + "lastAttempted": "Last attempted", "noSyncHistory": "No sync history available", "pendingChanges": "Pending changes", "noPendingChanges": "No pending changes", diff --git a/assets/translations/es.json b/assets/translations/es.json index 0ac67126..c5ecd804 100644 --- a/assets/translations/es.json +++ b/assets/translations/es.json @@ -506,6 +506,7 @@ "synchronization": "Sincronización", "syncHistoryDesc": "Ver estado de sincronización y cambios pendientes", "lastSyncStatus": "Último estado de sincronización", + "lastAttempted": "Último intento", "noSyncHistory": "No hay historial de sincronización disponible", "pendingChanges": "Cambios pendientes", "noPendingChanges": "No hay cambios pendientes", diff --git a/assets/translations/fr.json b/assets/translations/fr.json index c6f442f7..51868aa0 100644 --- a/assets/translations/fr.json +++ b/assets/translations/fr.json @@ -506,6 +506,7 @@ "synchronization": "Synchronisation", "syncHistoryDesc": "Voir l'état de synchronisation et les modifications en attente", "lastSyncStatus": "Dernier état de synchronisation", + "lastAttempted": "Dernière tentative", "noSyncHistory": "Aucun historique de synchronisation disponible", "pendingChanges": "Modifications en attente", "noPendingChanges": "Aucune modification en attente", diff --git a/assets/translations/it.json b/assets/translations/it.json index 7f48f729..0cfd63c3 100644 --- a/assets/translations/it.json +++ b/assets/translations/it.json @@ -506,6 +506,7 @@ "synchronization": "Sincronizzazione", "syncHistoryDesc": "Visualizza lo stato della sincronizzazione e le modifiche in sospeso", "lastSyncStatus": "Ultimo stato di sincronizzazione", + "lastAttempted": "Ultimo tentativo", "noSyncHistory": "Nessuno storico di sincronizzazione disponibile", "pendingChanges": "Modifiche in sospeso", "noPendingChanges": "Nessuna modifica in sospeso", diff --git a/assets/translations/ru.json b/assets/translations/ru.json index d05c0628..f6f2a104 100644 --- a/assets/translations/ru.json +++ b/assets/translations/ru.json @@ -506,6 +506,7 @@ "synchronization": "Синхронизация", "syncHistoryDesc": "Просмотр статуса синхронизации и ожидающих изменений", "lastSyncStatus": "Последний статус синхронизации", + "lastAttempted": "Последняя попытка", "noSyncHistory": "История синхронизации недоступна", "pendingChanges": "Ожидающие изменения", "noPendingChanges": "Нет ожидающих изменений", diff --git a/drift_schemas/default/drift_schema_v9.json b/drift_schemas/default/drift_schema_v9.json new file mode 100644 index 00000000..aa8549ab --- /dev/null +++ b/drift_schemas/default/drift_schema_v9.json @@ -0,0 +1 @@ +{"_meta":{"description":"This file contains a serialized version of schema entities for drift.","version":"1.2.0"},"options":{"store_date_time_values_as_text":true},"entities":[{"id":0,"references":[],"type":"table","data":{"name":"wallets","was_declared_in_moor":false,"columns":[{"name":"id","getter_name":"id","moor_type":"int","nullable":true,"customConstraints":null,"defaultConstraints":"UNIQUE","dialectAwareDefaultConstraints":{"sqlite":"UNIQUE"},"default_dart":null,"default_client_dart":null,"dsl_features":["unique"]},{"name":"user_id","getter_name":"userId","moor_type":"int","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"client_id","getter_name":"clientId","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":"const CustomExpression('\\'\\'')","default_client_dart":null,"dsl_features":[]},{"name":"rev","getter_name":"rev","moor_type":"string","nullable":true,"customConstraints":null,"default_dart":"const CustomExpression('\\'1\\'')","default_client_dart":null,"dsl_features":[]},{"name":"created_at","getter_name":"createdAt","moor_type":"dateTime","nullable":false,"customConstraints":null,"default_dart":"const CustomExpression('CURRENT_TIMESTAMP')","default_client_dart":null,"dsl_features":[]},{"name":"updated_at","getter_name":"updatedAt","moor_type":"dateTime","nullable":false,"customConstraints":null,"default_dart":"const CustomExpression('CURRENT_TIMESTAMP')","default_client_dart":null,"dsl_features":[]},{"name":"deleted_at","getter_name":"deletedAt","moor_type":"dateTime","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"last_synced_at","getter_name":"lastSyncedAt","moor_type":"dateTime","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"name","getter_name":"name","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"type","getter_name":"type","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[],"type_converter":{"dart_expr":"const WalletTypeConverter()","dart_type_name":"WalletType"}},{"name":"balance","getter_name":"balance","moor_type":"double","nullable":false,"customConstraints":null,"default_dart":"const CustomExpression('0.0')","default_client_dart":null,"dsl_features":[]},{"name":"currency","getter_name":"currency","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"description","getter_name":"description","moor_type":"string","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"stats","getter_name":"stats","moor_type":"string","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[],"type_converter":{"dart_expr":"const WalletStatsConverter()","dart_type_name":"WalletStats"}},{"name":"icon","getter_name":"icon","moor_type":"string","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[],"type_converter":{"dart_expr":"const MediaConverter()","dart_type_name":"Media"}}],"is_virtual":false,"without_rowid":false,"constraints":[],"explicit_pk":["client_id"]}},{"id":1,"references":[],"type":"table","data":{"name":"parties","was_declared_in_moor":false,"columns":[{"name":"id","getter_name":"id","moor_type":"int","nullable":true,"customConstraints":null,"defaultConstraints":"UNIQUE","dialectAwareDefaultConstraints":{"sqlite":"UNIQUE"},"default_dart":null,"default_client_dart":null,"dsl_features":["unique"]},{"name":"user_id","getter_name":"userId","moor_type":"int","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"client_id","getter_name":"clientId","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":"const CustomExpression('\\'\\'')","default_client_dart":null,"dsl_features":[]},{"name":"rev","getter_name":"rev","moor_type":"string","nullable":true,"customConstraints":null,"default_dart":"const CustomExpression('\\'1\\'')","default_client_dart":null,"dsl_features":[]},{"name":"created_at","getter_name":"createdAt","moor_type":"dateTime","nullable":false,"customConstraints":null,"default_dart":"const CustomExpression('CURRENT_TIMESTAMP')","default_client_dart":null,"dsl_features":[]},{"name":"updated_at","getter_name":"updatedAt","moor_type":"dateTime","nullable":false,"customConstraints":null,"default_dart":"const CustomExpression('CURRENT_TIMESTAMP')","default_client_dart":null,"dsl_features":[]},{"name":"deleted_at","getter_name":"deletedAt","moor_type":"dateTime","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"last_synced_at","getter_name":"lastSyncedAt","moor_type":"dateTime","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"name","getter_name":"name","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"description","getter_name":"description","moor_type":"string","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"icon","getter_name":"icon","moor_type":"string","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[],"type_converter":{"dart_expr":"const MediaConverter()","dart_type_name":"Media"}},{"name":"type","getter_name":"type","moor_type":"string","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[],"type_converter":{"dart_expr":"const PartyTypeConverter()","dart_type_name":"PartyType"}}],"is_virtual":false,"without_rowid":false,"constraints":[],"explicit_pk":["client_id"]}},{"id":2,"references":[],"type":"table","data":{"name":"groups","was_declared_in_moor":false,"columns":[{"name":"id","getter_name":"id","moor_type":"int","nullable":true,"customConstraints":null,"defaultConstraints":"UNIQUE","dialectAwareDefaultConstraints":{"sqlite":"UNIQUE"},"default_dart":null,"default_client_dart":null,"dsl_features":["unique"]},{"name":"user_id","getter_name":"userId","moor_type":"int","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"client_id","getter_name":"clientId","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":"const CustomExpression('\\'\\'')","default_client_dart":null,"dsl_features":[]},{"name":"rev","getter_name":"rev","moor_type":"string","nullable":true,"customConstraints":null,"default_dart":"const CustomExpression('\\'1\\'')","default_client_dart":null,"dsl_features":[]},{"name":"created_at","getter_name":"createdAt","moor_type":"dateTime","nullable":false,"customConstraints":null,"default_dart":"const CustomExpression('CURRENT_TIMESTAMP')","default_client_dart":null,"dsl_features":[]},{"name":"updated_at","getter_name":"updatedAt","moor_type":"dateTime","nullable":false,"customConstraints":null,"default_dart":"const CustomExpression('CURRENT_TIMESTAMP')","default_client_dart":null,"dsl_features":[]},{"name":"deleted_at","getter_name":"deletedAt","moor_type":"dateTime","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"last_synced_at","getter_name":"lastSyncedAt","moor_type":"dateTime","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"name","getter_name":"name","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"description","getter_name":"description","moor_type":"string","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"icon","getter_name":"icon","moor_type":"string","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[],"type_converter":{"dart_expr":"const MediaConverter()","dart_type_name":"Media"}}],"is_virtual":false,"without_rowid":false,"constraints":[],"explicit_pk":["client_id"]}},{"id":3,"references":[0,1,2],"type":"table","data":{"name":"transactions","was_declared_in_moor":false,"columns":[{"name":"id","getter_name":"id","moor_type":"int","nullable":true,"customConstraints":null,"defaultConstraints":"UNIQUE","dialectAwareDefaultConstraints":{"sqlite":"UNIQUE"},"default_dart":null,"default_client_dart":null,"dsl_features":["unique"]},{"name":"user_id","getter_name":"userId","moor_type":"int","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"client_id","getter_name":"clientId","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":"const CustomExpression('\\'\\'')","default_client_dart":null,"dsl_features":[]},{"name":"rev","getter_name":"rev","moor_type":"string","nullable":true,"customConstraints":null,"default_dart":"const CustomExpression('\\'1\\'')","default_client_dart":null,"dsl_features":[]},{"name":"created_at","getter_name":"createdAt","moor_type":"dateTime","nullable":false,"customConstraints":null,"default_dart":"const CustomExpression('CURRENT_TIMESTAMP')","default_client_dart":null,"dsl_features":[]},{"name":"updated_at","getter_name":"updatedAt","moor_type":"dateTime","nullable":false,"customConstraints":null,"default_dart":"const CustomExpression('CURRENT_TIMESTAMP')","default_client_dart":null,"dsl_features":[]},{"name":"deleted_at","getter_name":"deletedAt","moor_type":"dateTime","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"last_synced_at","getter_name":"lastSyncedAt","moor_type":"dateTime","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"amount","getter_name":"amount","moor_type":"double","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"type","getter_name":"type","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[],"type_converter":{"dart_expr":"const EnumNameConverter(TransactionType.values)","dart_type_name":"TransactionType"}},{"name":"intent","getter_name":"intent","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":"const CustomExpression('\\'regular\\'')","default_client_dart":null,"dsl_features":[]},{"name":"description","getter_name":"description","moor_type":"string","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"datetime","getter_name":"datetime","moor_type":"dateTime","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"party_id","getter_name":"partyId","moor_type":"int","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"wallet_id","getter_name":"walletId","moor_type":"int","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"group_id","getter_name":"groupId","moor_type":"int","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"wallet_client_id","getter_name":"walletClientId","moor_type":"string","nullable":false,"customConstraints":null,"defaultConstraints":"REFERENCES wallets (client_id)","dialectAwareDefaultConstraints":{"sqlite":"REFERENCES wallets (client_id)"},"default_dart":null,"default_client_dart":null,"dsl_features":[{"foreign_key":{"to":{"table":"wallets","column":"client_id"},"initially_deferred":false,"on_update":null,"on_delete":null}}]},{"name":"party_client_id","getter_name":"partyClientId","moor_type":"string","nullable":true,"customConstraints":null,"defaultConstraints":"REFERENCES parties (client_id)","dialectAwareDefaultConstraints":{"sqlite":"REFERENCES parties (client_id)"},"default_dart":null,"default_client_dart":null,"dsl_features":[{"foreign_key":{"to":{"table":"parties","column":"client_id"},"initially_deferred":false,"on_update":null,"on_delete":null}}]},{"name":"group_client_id","getter_name":"groupClientId","moor_type":"string","nullable":true,"customConstraints":null,"defaultConstraints":"REFERENCES \"groups\" (client_id)","dialectAwareDefaultConstraints":{"sqlite":"REFERENCES \"groups\" (client_id)"},"default_dart":null,"default_client_dart":null,"dsl_features":[{"foreign_key":{"to":{"table":"groups","column":"client_id"},"initially_deferred":false,"on_update":null,"on_delete":null}}]},{"name":"transfer_id","getter_name":"transferId","moor_type":"int","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"transfer_client_id","getter_name":"transferClientId","moor_type":"string","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"is_refund","getter_name":"isRefund","moor_type":"bool","nullable":false,"customConstraints":null,"defaultConstraints":"CHECK (\"is_refund\" IN (0, 1))","dialectAwareDefaultConstraints":{"sqlite":"CHECK (\"is_refund\" IN (0, 1))"},"default_dart":"const CustomExpression('0')","default_client_dart":null,"dsl_features":[]},{"name":"refund_of_transaction_id","getter_name":"refundOfTransactionId","moor_type":"int","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"recurrence_period","getter_name":"recurrencePeriod","moor_type":"string","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"recurrence_interval","getter_name":"recurrenceInterval","moor_type":"int","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"recurrence_ends_at","getter_name":"recurrenceEndsAt","moor_type":"dateTime","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"recurrence_next_scheduled_at","getter_name":"recurrenceNextScheduledAt","moor_type":"dateTime","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]}],"is_virtual":false,"without_rowid":false,"constraints":[],"explicit_pk":["client_id"]}},{"id":4,"references":[],"type":"table","data":{"name":"categories","was_declared_in_moor":false,"columns":[{"name":"id","getter_name":"id","moor_type":"int","nullable":true,"customConstraints":null,"defaultConstraints":"UNIQUE","dialectAwareDefaultConstraints":{"sqlite":"UNIQUE"},"default_dart":null,"default_client_dart":null,"dsl_features":["unique"]},{"name":"user_id","getter_name":"userId","moor_type":"int","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"client_id","getter_name":"clientId","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":"const CustomExpression('\\'\\'')","default_client_dart":null,"dsl_features":[]},{"name":"rev","getter_name":"rev","moor_type":"string","nullable":true,"customConstraints":null,"default_dart":"const CustomExpression('\\'1\\'')","default_client_dart":null,"dsl_features":[]},{"name":"created_at","getter_name":"createdAt","moor_type":"dateTime","nullable":false,"customConstraints":null,"default_dart":"const CustomExpression('CURRENT_TIMESTAMP')","default_client_dart":null,"dsl_features":[]},{"name":"updated_at","getter_name":"updatedAt","moor_type":"dateTime","nullable":false,"customConstraints":null,"default_dart":"const CustomExpression('CURRENT_TIMESTAMP')","default_client_dart":null,"dsl_features":[]},{"name":"deleted_at","getter_name":"deletedAt","moor_type":"dateTime","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"last_synced_at","getter_name":"lastSyncedAt","moor_type":"dateTime","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"name","getter_name":"name","moor_type":"string","nullable":false,"customConstraints":null,"defaultConstraints":"UNIQUE","dialectAwareDefaultConstraints":{"sqlite":"UNIQUE"},"default_dart":null,"default_client_dart":null,"dsl_features":["unique"]},{"name":"slug","getter_name":"slug","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"description","getter_name":"description","moor_type":"string","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"type","getter_name":"type","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[],"type_converter":{"dart_expr":"const EnumNameConverter(TransactionType.values)","dart_type_name":"TransactionType"}},{"name":"icon","getter_name":"icon","moor_type":"string","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[],"type_converter":{"dart_expr":"const MediaConverter()","dart_type_name":"Media"}}],"is_virtual":false,"without_rowid":false,"constraints":[],"explicit_pk":["client_id"]}},{"id":5,"references":[],"type":"table","data":{"name":"configs","was_declared_in_moor":false,"columns":[{"name":"id","getter_name":"id","moor_type":"int","nullable":true,"customConstraints":null,"defaultConstraints":"UNIQUE","dialectAwareDefaultConstraints":{"sqlite":"UNIQUE"},"default_dart":null,"default_client_dart":null,"dsl_features":["unique"]},{"name":"user_id","getter_name":"userId","moor_type":"int","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"client_id","getter_name":"clientId","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":"const CustomExpression('\\'\\'')","default_client_dart":null,"dsl_features":[]},{"name":"rev","getter_name":"rev","moor_type":"string","nullable":true,"customConstraints":null,"default_dart":"const CustomExpression('\\'1\\'')","default_client_dart":null,"dsl_features":[]},{"name":"created_at","getter_name":"createdAt","moor_type":"dateTime","nullable":false,"customConstraints":null,"default_dart":"const CustomExpression('CURRENT_TIMESTAMP')","default_client_dart":null,"dsl_features":[]},{"name":"updated_at","getter_name":"updatedAt","moor_type":"dateTime","nullable":false,"customConstraints":null,"default_dart":"const CustomExpression('CURRENT_TIMESTAMP')","default_client_dart":null,"dsl_features":[]},{"name":"deleted_at","getter_name":"deletedAt","moor_type":"dateTime","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"last_synced_at","getter_name":"lastSyncedAt","moor_type":"dateTime","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"key","getter_name":"key","moor_type":"string","nullable":false,"customConstraints":null,"defaultConstraints":"UNIQUE","dialectAwareDefaultConstraints":{"sqlite":"UNIQUE"},"default_dart":null,"default_client_dart":null,"dsl_features":["unique"]},{"name":"type","getter_name":"type","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[],"type_converter":{"dart_expr":"const EnumNameConverter(ConfigType.values)","dart_type_name":"ConfigType"}},{"name":"value","getter_name":"value","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[],"type_converter":{"dart_expr":"const ConfigValueConverter()","dart_type_name":"dynamic"}}],"is_virtual":false,"without_rowid":false,"constraints":[],"explicit_pk":["client_id"]}},{"id":6,"references":[],"type":"table","data":{"name":"users","was_declared_in_moor":false,"columns":[{"name":"id","getter_name":"id","moor_type":"int","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"email","getter_name":"email","moor_type":"string","nullable":false,"customConstraints":null,"defaultConstraints":"UNIQUE","dialectAwareDefaultConstraints":{"sqlite":"UNIQUE"},"default_dart":null,"default_client_dart":null,"dsl_features":["unique"]},{"name":"first_name","getter_name":"firstName","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"last_name","getter_name":"lastName","moor_type":"string","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"username","getter_name":"username","moor_type":"string","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"phone","getter_name":"phone","moor_type":"string","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"avatar","getter_name":"avatar","moor_type":"string","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"created_at","getter_name":"createdAt","moor_type":"dateTime","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"updated_at","getter_name":"updatedAt","moor_type":"dateTime","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]}],"is_virtual":false,"without_rowid":false,"constraints":[],"explicit_pk":["id"]}},{"id":7,"references":[],"type":"table","data":{"name":"local_changes","was_declared_in_moor":false,"columns":[{"name":"entity_type","getter_name":"entityType","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"entity_id","getter_name":"entityId","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"entity_rev","getter_name":"entityRev","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"deleted","getter_name":"deleted","moor_type":"bool","nullable":false,"customConstraints":null,"defaultConstraints":"CHECK (\"deleted\" IN (0, 1))","dialectAwareDefaultConstraints":{"sqlite":"CHECK (\"deleted\" IN (0, 1))"},"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"data","getter_name":"data","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[],"type_converter":{"dart_expr":"const JsonMapConverter()","dart_type_name":"Map"}},{"name":"create_at","getter_name":"createAt","moor_type":"dateTime","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"concluded","getter_name":"concluded","moor_type":"bool","nullable":false,"customConstraints":null,"defaultConstraints":"CHECK (\"concluded\" IN (0, 1))","dialectAwareDefaultConstraints":{"sqlite":"CHECK (\"concluded\" IN (0, 1))"},"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"concluded_moment","getter_name":"concludedMoment","moor_type":"dateTime","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"error","getter_name":"error","moor_type":"string","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"dismissed","getter_name":"dismissed","moor_type":"bool","nullable":false,"customConstraints":null,"defaultConstraints":"CHECK (\"dismissed\" IN (0, 1))","dialectAwareDefaultConstraints":{"sqlite":"CHECK (\"dismissed\" IN (0, 1))"},"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"attempt_count","getter_name":"attemptCount","moor_type":"int","nullable":false,"customConstraints":null,"default_dart":"const CustomExpression('0')","default_client_dart":null,"dsl_features":[]},{"name":"quarantined_at","getter_name":"quarantinedAt","moor_type":"dateTime","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]}],"is_virtual":false,"without_rowid":false,"constraints":[],"explicit_pk":["entity_id","entity_type"]}},{"id":8,"references":[],"type":"table","data":{"name":"sync_metadata","was_declared_in_moor":false,"columns":[{"name":"entity_type","getter_name":"entityType","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"last_synced_at","getter_name":"lastSyncedAt","moor_type":"dateTime","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"last_attempted_at","getter_name":"lastAttemptedAt","moor_type":"dateTime","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"last_error","getter_name":"lastError","moor_type":"string","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]}],"is_virtual":false,"without_rowid":false,"constraints":[],"explicit_pk":["entity_type"]}},{"id":9,"references":[4],"type":"table","data":{"name":"categorizables","was_declared_in_moor":false,"columns":[{"name":"categorizable_id","getter_name":"categorizableId","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"categorizable_type","getter_name":"categorizableType","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[],"type_converter":{"dart_expr":"const EnumNameConverter(CategorizableType.values)","dart_type_name":"CategorizableType"}},{"name":"category_client_id","getter_name":"categoryClientId","moor_type":"string","nullable":false,"customConstraints":null,"defaultConstraints":"REFERENCES categories (client_id)","dialectAwareDefaultConstraints":{"sqlite":"REFERENCES categories (client_id)"},"default_dart":null,"default_client_dart":null,"dsl_features":[{"foreign_key":{"to":{"table":"categories","column":"client_id"},"initially_deferred":false,"on_update":null,"on_delete":null}}]}],"is_virtual":false,"without_rowid":false,"constraints":[],"explicit_pk":["categorizable_id","categorizable_type","category_client_id"]}},{"id":10,"references":[],"type":"table","data":{"name":"notifications","was_declared_in_moor":false,"columns":[{"name":"id","getter_name":"id","moor_type":"int","nullable":true,"customConstraints":null,"defaultConstraints":"UNIQUE","dialectAwareDefaultConstraints":{"sqlite":"UNIQUE"},"default_dart":null,"default_client_dart":null,"dsl_features":["unique"]},{"name":"user_id","getter_name":"userId","moor_type":"int","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"client_id","getter_name":"clientId","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":"const CustomExpression('\\'\\'')","default_client_dart":null,"dsl_features":[]},{"name":"rev","getter_name":"rev","moor_type":"string","nullable":true,"customConstraints":null,"default_dart":"const CustomExpression('\\'1\\'')","default_client_dart":null,"dsl_features":[]},{"name":"created_at","getter_name":"createdAt","moor_type":"dateTime","nullable":false,"customConstraints":null,"default_dart":"const CustomExpression('CURRENT_TIMESTAMP')","default_client_dart":null,"dsl_features":[]},{"name":"updated_at","getter_name":"updatedAt","moor_type":"dateTime","nullable":false,"customConstraints":null,"default_dart":"const CustomExpression('CURRENT_TIMESTAMP')","default_client_dart":null,"dsl_features":[]},{"name":"deleted_at","getter_name":"deletedAt","moor_type":"dateTime","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"last_synced_at","getter_name":"lastSyncedAt","moor_type":"dateTime","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"type","getter_name":"type","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[],"type_converter":{"dart_expr":"const EnumNameConverter(NotificationType.values)","dart_type_name":"NotificationType"}},{"name":"title","getter_name":"title","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"body","getter_name":"body","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"data","getter_name":"data","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[],"type_converter":{"dart_expr":"const JsonMapConverter()","dart_type_name":"Map"}},{"name":"read_at","getter_name":"readAt","moor_type":"dateTime","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]}],"is_virtual":false,"without_rowid":false,"constraints":[],"explicit_pk":["client_id"]}},{"id":11,"references":[],"type":"table","data":{"name":"media_files","was_declared_in_moor":false,"columns":[{"name":"path","getter_name":"path","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"id","getter_name":"id","moor_type":"int","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"type","getter_name":"type","moor_type":"string","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"fileable_type","getter_name":"fileableType","moor_type":"string","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"fileable_id","getter_name":"fileableId","moor_type":"int","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"local_fileable_type","getter_name":"localFileableType","moor_type":"string","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"local_fileable_id","getter_name":"localFileableId","moor_type":"string","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"created_at","getter_name":"createdAt","moor_type":"dateTime","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"updated_at","getter_name":"updatedAt","moor_type":"dateTime","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]}],"is_virtual":false,"without_rowid":false,"constraints":[],"explicit_pk":["path"]}},{"id":12,"references":[0,3],"type":"table","data":{"name":"transfers","was_declared_in_moor":false,"columns":[{"name":"id","getter_name":"id","moor_type":"int","nullable":true,"customConstraints":null,"defaultConstraints":"UNIQUE","dialectAwareDefaultConstraints":{"sqlite":"UNIQUE"},"default_dart":null,"default_client_dart":null,"dsl_features":["unique"]},{"name":"user_id","getter_name":"userId","moor_type":"int","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"client_id","getter_name":"clientId","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":"const CustomExpression('\\'\\'')","default_client_dart":null,"dsl_features":[]},{"name":"rev","getter_name":"rev","moor_type":"string","nullable":true,"customConstraints":null,"default_dart":"const CustomExpression('\\'1\\'')","default_client_dart":null,"dsl_features":[]},{"name":"created_at","getter_name":"createdAt","moor_type":"dateTime","nullable":false,"customConstraints":null,"default_dart":"const CustomExpression('CURRENT_TIMESTAMP')","default_client_dart":null,"dsl_features":[]},{"name":"updated_at","getter_name":"updatedAt","moor_type":"dateTime","nullable":false,"customConstraints":null,"default_dart":"const CustomExpression('CURRENT_TIMESTAMP')","default_client_dart":null,"dsl_features":[]},{"name":"deleted_at","getter_name":"deletedAt","moor_type":"dateTime","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"last_synced_at","getter_name":"lastSyncedAt","moor_type":"dateTime","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"amount","getter_name":"amount","moor_type":"double","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"from_wallet_id","getter_name":"fromWalletId","moor_type":"int","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"to_wallet_id","getter_name":"toWalletId","moor_type":"int","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"from_wallet_client_id","getter_name":"fromWalletClientId","moor_type":"string","nullable":true,"customConstraints":null,"defaultConstraints":"REFERENCES wallets (client_id)","dialectAwareDefaultConstraints":{"sqlite":"REFERENCES wallets (client_id)"},"default_dart":null,"default_client_dart":null,"dsl_features":[{"foreign_key":{"to":{"table":"wallets","column":"client_id"},"initially_deferred":false,"on_update":null,"on_delete":null}}]},{"name":"to_wallet_client_id","getter_name":"toWalletClientId","moor_type":"string","nullable":true,"customConstraints":null,"defaultConstraints":"REFERENCES wallets (client_id)","dialectAwareDefaultConstraints":{"sqlite":"REFERENCES wallets (client_id)"},"default_dart":null,"default_client_dart":null,"dsl_features":[{"foreign_key":{"to":{"table":"wallets","column":"client_id"},"initially_deferred":false,"on_update":null,"on_delete":null}}]},{"name":"exchange_rate","getter_name":"exchangeRate","moor_type":"double","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"datetime","getter_name":"datetime","moor_type":"dateTime","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"expense_transaction_client_id","getter_name":"expenseTransactionClientId","moor_type":"string","nullable":true,"customConstraints":null,"defaultConstraints":"REFERENCES transactions (client_id)","dialectAwareDefaultConstraints":{"sqlite":"REFERENCES transactions (client_id)"},"default_dart":null,"default_client_dart":null,"dsl_features":[{"foreign_key":{"to":{"table":"transactions","column":"client_id"},"initially_deferred":false,"on_update":null,"on_delete":null}}]},{"name":"income_transaction_client_id","getter_name":"incomeTransactionClientId","moor_type":"string","nullable":true,"customConstraints":null,"defaultConstraints":"REFERENCES transactions (client_id)","dialectAwareDefaultConstraints":{"sqlite":"REFERENCES transactions (client_id)"},"default_dart":null,"default_client_dart":null,"dsl_features":[{"foreign_key":{"to":{"table":"transactions","column":"client_id"},"initially_deferred":false,"on_update":null,"on_delete":null}}]}],"is_virtual":false,"without_rowid":false,"constraints":[],"explicit_pk":["client_id"]}},{"id":13,"references":[],"type":"table","data":{"name":"budgets","was_declared_in_moor":false,"columns":[{"name":"id","getter_name":"id","moor_type":"int","nullable":true,"customConstraints":null,"defaultConstraints":"UNIQUE","dialectAwareDefaultConstraints":{"sqlite":"UNIQUE"},"default_dart":null,"default_client_dart":null,"dsl_features":["unique"]},{"name":"user_id","getter_name":"userId","moor_type":"int","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"client_id","getter_name":"clientId","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":"const CustomExpression('\\'\\'')","default_client_dart":null,"dsl_features":[]},{"name":"rev","getter_name":"rev","moor_type":"string","nullable":true,"customConstraints":null,"default_dart":"const CustomExpression('\\'1\\'')","default_client_dart":null,"dsl_features":[]},{"name":"created_at","getter_name":"createdAt","moor_type":"dateTime","nullable":false,"customConstraints":null,"default_dart":"const CustomExpression('CURRENT_TIMESTAMP')","default_client_dart":null,"dsl_features":[]},{"name":"updated_at","getter_name":"updatedAt","moor_type":"dateTime","nullable":false,"customConstraints":null,"default_dart":"const CustomExpression('CURRENT_TIMESTAMP')","default_client_dart":null,"dsl_features":[]},{"name":"deleted_at","getter_name":"deletedAt","moor_type":"dateTime","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"last_synced_at","getter_name":"lastSyncedAt","moor_type":"dateTime","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"name","getter_name":"name","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"slug","getter_name":"slug","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"description","getter_name":"description","moor_type":"string","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"amount","getter_name":"amount","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[],"type_converter":{"dart_expr":"const StringToDoubleConverter()","dart_type_name":"double"}},{"name":"currency","getter_name":"currency","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"period_type","getter_name":"periodType","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[],"type_converter":{"dart_expr":"const EnumNameConverter(BudgetPeriodType.values)","dart_type_name":"BudgetPeriodType"}},{"name":"start_date","getter_name":"startDate","moor_type":"dateTime","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"end_date","getter_name":"endDate","moor_type":"dateTime","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"rollover_enabled","getter_name":"rolloverEnabled","moor_type":"bool","nullable":false,"customConstraints":null,"defaultConstraints":"CHECK (\"rollover_enabled\" IN (0, 1))","dialectAwareDefaultConstraints":{"sqlite":"CHECK (\"rollover_enabled\" IN (0, 1))"},"default_dart":"const CustomExpression('0')","default_client_dart":null,"dsl_features":[]},{"name":"threshold_percent","getter_name":"thresholdPercent","moor_type":"int","nullable":false,"customConstraints":null,"default_dart":"const CustomExpression('80')","default_client_dart":null,"dsl_features":[]},{"name":"forecast_alerts_enabled","getter_name":"forecastAlertsEnabled","moor_type":"bool","nullable":false,"customConstraints":null,"defaultConstraints":"CHECK (\"forecast_alerts_enabled\" IN (0, 1))","dialectAwareDefaultConstraints":{"sqlite":"CHECK (\"forecast_alerts_enabled\" IN (0, 1))"},"default_dart":"const CustomExpression('0')","default_client_dart":null,"dsl_features":[]},{"name":"is_active","getter_name":"isActive","moor_type":"bool","nullable":false,"customConstraints":null,"defaultConstraints":"CHECK (\"is_active\" IN (0, 1))","dialectAwareDefaultConstraints":{"sqlite":"CHECK (\"is_active\" IN (0, 1))"},"default_dart":"const CustomExpression('1')","default_client_dart":null,"dsl_features":[]},{"name":"owner_type","getter_name":"ownerType","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":"const CustomExpression('\\'user\\'')","default_client_dart":null,"dsl_features":[]},{"name":"owner_id","getter_name":"ownerId","moor_type":"int","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"progress","getter_name":"progress","moor_type":"string","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[],"type_converter":{"dart_expr":"const BudgetProgressJsonConverter()","dart_type_name":"BudgetProgressEntity"}}],"is_virtual":false,"without_rowid":false,"constraints":[],"explicit_pk":["client_id"]}},{"id":14,"references":[13],"type":"table","data":{"name":"budget_targets","was_declared_in_moor":false,"columns":[{"name":"budget_client_id","getter_name":"budgetClientId","moor_type":"string","nullable":false,"customConstraints":null,"defaultConstraints":"REFERENCES budgets (client_id)","dialectAwareDefaultConstraints":{"sqlite":"REFERENCES budgets (client_id)"},"default_dart":null,"default_client_dart":null,"dsl_features":[{"foreign_key":{"to":{"table":"budgets","column":"client_id"},"initially_deferred":false,"on_update":null,"on_delete":null}}]},{"name":"target_type","getter_name":"targetType","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[],"type_converter":{"dart_expr":"const EnumNameConverter(BudgetTargetType.values)","dart_type_name":"BudgetTargetType"}},{"name":"target_client_id","getter_name":"targetClientId","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]}],"is_virtual":false,"without_rowid":false,"constraints":[],"explicit_pk":["budget_client_id","target_type","target_client_id"]}},{"id":15,"references":[13],"type":"table","data":{"name":"budget_period_states","was_declared_in_moor":false,"columns":[{"name":"id","getter_name":"id","moor_type":"int","nullable":true,"customConstraints":null,"defaultConstraints":"UNIQUE","dialectAwareDefaultConstraints":{"sqlite":"UNIQUE"},"default_dart":null,"default_client_dart":null,"dsl_features":["unique"]},{"name":"user_id","getter_name":"userId","moor_type":"int","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"client_id","getter_name":"clientId","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":"const CustomExpression('\\'\\'')","default_client_dart":null,"dsl_features":[]},{"name":"rev","getter_name":"rev","moor_type":"string","nullable":true,"customConstraints":null,"default_dart":"const CustomExpression('\\'1\\'')","default_client_dart":null,"dsl_features":[]},{"name":"created_at","getter_name":"createdAt","moor_type":"dateTime","nullable":false,"customConstraints":null,"default_dart":"const CustomExpression('CURRENT_TIMESTAMP')","default_client_dart":null,"dsl_features":[]},{"name":"updated_at","getter_name":"updatedAt","moor_type":"dateTime","nullable":false,"customConstraints":null,"default_dart":"const CustomExpression('CURRENT_TIMESTAMP')","default_client_dart":null,"dsl_features":[]},{"name":"deleted_at","getter_name":"deletedAt","moor_type":"dateTime","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"last_synced_at","getter_name":"lastSyncedAt","moor_type":"dateTime","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"budget_client_id","getter_name":"budgetClientId","moor_type":"string","nullable":false,"customConstraints":null,"defaultConstraints":"REFERENCES budgets (client_id)","dialectAwareDefaultConstraints":{"sqlite":"REFERENCES budgets (client_id)"},"default_dart":null,"default_client_dart":null,"dsl_features":[{"foreign_key":{"to":{"table":"budgets","column":"client_id"},"initially_deferred":false,"on_update":null,"on_delete":null}}]},{"name":"period_start","getter_name":"periodStart","moor_type":"dateTime","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"period_end","getter_name":"periodEnd","moor_type":"dateTime","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"net_spent","getter_name":"netSpent","moor_type":"double","nullable":false,"customConstraints":null,"default_dart":"const CustomExpression('0.0')","default_client_dart":null,"dsl_features":[]},{"name":"rollover_in","getter_name":"rolloverIn","moor_type":"double","nullable":false,"customConstraints":null,"default_dart":"const CustomExpression('0.0')","default_client_dart":null,"dsl_features":[]},{"name":"rollover_out","getter_name":"rolloverOut","moor_type":"double","nullable":false,"customConstraints":null,"default_dart":"const CustomExpression('0.0')","default_client_dart":null,"dsl_features":[]},{"name":"closed_at","getter_name":"closedAt","moor_type":"dateTime","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]}],"is_virtual":false,"without_rowid":false,"constraints":[],"explicit_pk":["client_id"]}},{"id":16,"references":[],"type":"table","data":{"name":"holdings","was_declared_in_moor":false,"columns":[{"name":"id","getter_name":"id","moor_type":"int","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"name","getter_name":"name","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"symbol","getter_name":"symbol","moor_type":"string","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"quantity","getter_name":"quantity","moor_type":"double","nullable":false,"customConstraints":null,"default_dart":"const CustomExpression('0.0')","default_client_dart":null,"dsl_features":[]},{"name":"currency","getter_name":"currency","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"unit_price","getter_name":"unitPrice","moor_type":"double","nullable":false,"customConstraints":null,"default_dart":"const CustomExpression('0.0')","default_client_dart":null,"dsl_features":[]},{"name":"value","getter_name":"value","moor_type":"double","nullable":false,"customConstraints":null,"default_dart":"const CustomExpression('0.0')","default_client_dart":null,"dsl_features":[]},{"name":"price_source","getter_name":"priceSource","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":"const CustomExpression('\\'manual\\'')","default_client_dart":null,"dsl_features":[]},{"name":"provider","getter_name":"provider","moor_type":"string","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"external_ref","getter_name":"externalRef","moor_type":"string","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"last_priced_at","getter_name":"lastPricedAt","moor_type":"dateTime","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]}],"is_virtual":false,"without_rowid":false,"constraints":[],"explicit_pk":["id"]}},{"id":17,"references":[],"type":"table","data":{"name":"financial_position_cache","was_declared_in_moor":false,"columns":[{"name":"cache_key","getter_name":"cacheKey","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"payload","getter_name":"payload","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"currency","getter_name":"currency","moor_type":"string","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"fetched_at","getter_name":"fetchedAt","moor_type":"dateTime","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]}],"is_virtual":false,"without_rowid":false,"constraints":[],"explicit_pk":["cache_key"]}},{"id":18,"references":[],"type":"table","data":{"name":"reminders","was_declared_in_moor":false,"columns":[{"name":"id","getter_name":"id","moor_type":"int","nullable":true,"customConstraints":null,"defaultConstraints":"UNIQUE","dialectAwareDefaultConstraints":{"sqlite":"UNIQUE"},"default_dart":null,"default_client_dart":null,"dsl_features":["unique"]},{"name":"user_id","getter_name":"userId","moor_type":"int","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"client_id","getter_name":"clientId","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":"const CustomExpression('\\'\\'')","default_client_dart":null,"dsl_features":[]},{"name":"rev","getter_name":"rev","moor_type":"string","nullable":true,"customConstraints":null,"default_dart":"const CustomExpression('\\'1\\'')","default_client_dart":null,"dsl_features":[]},{"name":"created_at","getter_name":"createdAt","moor_type":"dateTime","nullable":false,"customConstraints":null,"default_dart":"const CustomExpression('CURRENT_TIMESTAMP')","default_client_dart":null,"dsl_features":[]},{"name":"updated_at","getter_name":"updatedAt","moor_type":"dateTime","nullable":false,"customConstraints":null,"default_dart":"const CustomExpression('CURRENT_TIMESTAMP')","default_client_dart":null,"dsl_features":[]},{"name":"deleted_at","getter_name":"deletedAt","moor_type":"dateTime","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"last_synced_at","getter_name":"lastSyncedAt","moor_type":"dateTime","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"title","getter_name":"title","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"description","getter_name":"description","moor_type":"string","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"type","getter_name":"type","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":"const CustomExpression('\\'custom\\'')","default_client_dart":null,"dsl_features":[]},{"name":"trigger_at","getter_name":"triggerAt","moor_type":"dateTime","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"due_at","getter_name":"dueAt","moor_type":"dateTime","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"repeat_rule","getter_name":"repeatRule","moor_type":"string","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"timezone","getter_name":"timezone","moor_type":"string","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"status","getter_name":"status","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":"const CustomExpression('\\'active\\'')","default_client_dart":null,"dsl_features":[]},{"name":"priority","getter_name":"priority","moor_type":"int","nullable":false,"customConstraints":null,"default_dart":"const CustomExpression('0')","default_client_dart":null,"dsl_features":[]},{"name":"snoozed_until","getter_name":"snoozedUntil","moor_type":"dateTime","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"last_triggered_at","getter_name":"lastTriggeredAt","moor_type":"dateTime","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"next_trigger_at","getter_name":"nextTriggerAt","moor_type":"dateTime","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]}],"is_virtual":false,"without_rowid":false,"constraints":[],"explicit_pk":["client_id"]}},{"id":19,"references":[],"type":"table","data":{"name":"deferred_remote_items","was_declared_in_moor":false,"columns":[{"name":"entity_type","getter_name":"entityType","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"client_id","getter_name":"clientId","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"data","getter_name":"data","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"parked_at","getter_name":"parkedAt","moor_type":"dateTime","nullable":false,"customConstraints":null,"default_dart":"const CustomExpression('CURRENT_TIMESTAMP')","default_client_dart":null,"dsl_features":[]}],"is_virtual":false,"without_rowid":false,"constraints":[],"explicit_pk":["entity_type","client_id"]}}]} \ No newline at end of file diff --git a/lib/core/module/http_module.dart b/lib/core/module/http_module.dart index f41e4eac..eab05e29 100644 --- a/lib/core/module/http_module.dart +++ b/lib/core/module/http_module.dart @@ -26,6 +26,11 @@ abstract class InjectHttpClientModule { BaseOptions( baseUrl: url, headers: {'Accept': 'application/json'}, + // Without these, a stalled connection falls through to the OS socket + // timeout, which can hang a request for minutes. + connectTimeout: const Duration(seconds: 15), + sendTimeout: const Duration(seconds: 30), + receiveTimeout: const Duration(seconds: 30), ), ); diff --git a/lib/core/sync/sync_database.dart b/lib/core/sync/sync_database.dart index 04e8f494..19d9760c 100644 --- a/lib/core/sync/sync_database.dart +++ b/lib/core/sync/sync_database.dart @@ -5,8 +5,17 @@ import 'package:drift_sync_core/drift_sync_core.dart'; import 'package:injectable/injectable.dart'; import 'package:trakli/core/utils/services/logger.dart' as app_logger; import 'package:trakli/data/database/app_database.dart'; +import 'package:trakli/data/sync/budget_sync_handler.dart'; +import 'package:trakli/data/sync/category_sync_handler.dart'; +import 'package:trakli/data/sync/config_sync_handler.dart'; +import 'package:trakli/data/sync/group_sync_handler.dart'; +import 'package:trakli/data/sync/media_sync_handler.dart'; +import 'package:trakli/data/sync/notification_sync_handler.dart'; +import 'package:trakli/data/sync/party_sync_handler.dart'; +import 'package:trakli/data/sync/reminder_sync_handler.dart'; import 'package:trakli/data/sync/transaction_sync_handler.dart'; import 'package:trakli/data/sync/transfer_sync_handler.dart'; +import 'package:trakli/data/sync/wallet_sync_handler.dart'; @lazySingleton class SynchAppDatabase extends DriftSynchronizer { @@ -22,10 +31,62 @@ class SynchAppDatabase extends DriftSynchronizer { classifyFailure: restFailureClassifier, ); - /// Entity types swept by [reconcileOrphanedLocalChanges] → backing tables. - static const Map reconciledEntityTables = { - TransactionSyncHandler.entity: 'transactions', - TransferSyncHandler.entity: 'transfers', + static const reconciledEntities = { + CategorySyncHandler.entity: ( + table: 'categories', + clientId: 'client_id', + deletedAt: 'deleted_at' + ), + ConfigSyncHandler.entity: ( + table: 'configs', + clientId: 'client_id', + deletedAt: 'deleted_at' + ), + WalletSyncHandler.entity: ( + table: 'wallets', + clientId: 'client_id', + deletedAt: 'deleted_at' + ), + PartySyncHandler.entity: ( + table: 'parties', + clientId: 'client_id', + deletedAt: 'deleted_at' + ), + GroupSyncHandler.entity: ( + table: 'groups', + clientId: 'client_id', + deletedAt: 'deleted_at' + ), + NotificationSyncHandler.entity: ( + table: 'notifications', + clientId: 'client_id', + deletedAt: 'deleted_at' + ), + TransactionSyncHandler.entity: ( + table: 'transactions', + clientId: 'client_id', + deletedAt: 'deleted_at' + ), + TransferSyncHandler.entity: ( + table: 'transfers', + clientId: 'client_id', + deletedAt: 'deleted_at' + ), + BudgetSyncHandler.entity: ( + table: 'budgets', + clientId: 'client_id', + deletedAt: 'deleted_at' + ), + ReminderSyncHandler.entity: ( + table: 'reminders', + clientId: 'client_id', + deletedAt: 'deleted_at' + ), + MediaSyncHandler.entity: ( + table: 'media_files', + clientId: 'path', + deletedAt: null + ), }; final _syncStateController = StreamController.broadcast(); @@ -45,13 +106,18 @@ class SynchAppDatabase extends DriftSynchronizer { /// Re-enqueues rows that have no server id and no local_changes entry. Future reconcileOrphanedLocalChanges() async { var enqueued = 0; - for (final entry in reconciledEntityTables.entries) { + for (final entry in reconciledEntities.entries) { final handler = typeHandlers.where((h) => h.entityType == entry.key).firstOrNull; if (handler == null) continue; - final orphanIds = - await appDatabase.getOrphanedClientIds(entry.value, entry.key); + final source = entry.value; + final orphanIds = await appDatabase.getOrphanedClientIds( + source.table, + entry.key, + clientIdColumn: source.clientId, + deletedAtColumn: source.deletedAt, + ); for (final clientId in orphanIds) { try { final entity = await handler.getLocalByClientId(clientId); diff --git a/lib/data/database/app_database.dart b/lib/data/database/app_database.dart index 937c2e9a..82044e7d 100644 --- a/lib/data/database/app_database.dart +++ b/lib/data/database/app_database.dart @@ -78,7 +78,7 @@ class AppDatabase extends _$AppDatabase with SynchronizerDb { super(executor ?? _openConnection()); @override - int get schemaVersion => 8; + int get schemaVersion => 9; @override MigrationStrategy get migration { @@ -132,8 +132,8 @@ class AppDatabase extends _$AppDatabase with SynchronizerDb { // in SQL. The remaining rows are filtered by their per-row exponential // backoff below (not expressible in SQL). final rows = await (select(localChanges) - ..where((lc) => - lc.quarantinedAt.isNull() & lc.dismissed.equals(false))) + ..where( + (lc) => lc.quarantinedAt.isNull() & lc.dismissed.equals(false))) .get(); return rows @@ -167,12 +167,20 @@ class AppDatabase extends _$AppDatabase with SynchronizerDb { /// Client ids with no server id and no local_changes row in any state. Future> getOrphanedClientIds( - String tableName, String entityType) async { + String tableName, + String entityType, { + String clientIdColumn = 'client_id', + String? deletedAtColumn = 'deleted_at', + }) async { + final activeRow = + deletedAtColumn == null ? '' : 'AND t.$deletedAtColumn IS NULL '; final rows = await customSelect( - 'SELECT t.client_id AS client_id FROM $tableName t ' - 'WHERE t.id IS NULL AND t.deleted_at IS NULL AND NOT EXISTS (' + 'SELECT t.$clientIdColumn AS client_id FROM $tableName t ' + 'WHERE t.id IS NULL $activeRow' + 'AND NOT EXISTS (' 'SELECT 1 FROM local_changes lc ' - 'WHERE lc.entity_type = ?1 AND lc.entity_id = t.client_id)', + 'WHERE lc.entity_type = ?1 ' + 'AND lc.entity_id = t.$clientIdColumn)', variables: [Variable.withString(entityType)], ).get(); return rows.map((r) => r.read('client_id')).toList(); @@ -329,6 +337,8 @@ class AppDatabase extends _$AppDatabase with SynchronizerDb { return LocalSyncMetadata( entityType: row.entityType, lastSyncedAt: row.lastSyncedAt, + lastAttemptedAt: row.lastAttemptedAt, + lastError: row.lastError, ); } @@ -339,6 +349,8 @@ class AppDatabase extends _$AppDatabase with SynchronizerDb { .map((row) => LocalSyncMetadata( entityType: row.entityType, lastSyncedAt: row.lastSyncedAt, + lastAttemptedAt: row.lastAttemptedAt, + lastError: row.lastError, )) .toList(); } @@ -354,6 +366,21 @@ class AppDatabase extends _$AppDatabase with SynchronizerDb { ); } + @override + Future recordEntitySyncAttempt( + String entityType, { + required DateTime attemptedAt, + Object? error, + }) async { + await into(syncMetadata).insertOnConflictUpdate( + SyncMetadataCompanion( + entityType: Value(entityType), + lastAttemptedAt: Value(attemptedAt), + lastError: Value(error?.toString()), + ), + ); + } + @override Future parkRemoteItem(ParkedRemoteItem item) async { await deferredRemoteItems.insertOne( @@ -368,8 +395,7 @@ class AppDatabase extends _$AppDatabase with SynchronizerDb { } @override - Future> getParkedRemoteItems( - String entityType) async { + Future> getParkedRemoteItems(String entityType) async { final rows = await (select(deferredRemoteItems) ..where((t) => t.entityType.equals(entityType))) .get(); @@ -473,5 +499,15 @@ extension Migrations on GeneratedDatabase { await m.addColumn( schema.localChanges, schema.localChanges.quarantinedAt); }, + from8To9: (Migrator m, Schema9 schema) async { + await m.addColumn( + schema.syncMetadata, + schema.syncMetadata.lastAttemptedAt, + ); + await m.addColumn( + schema.syncMetadata, + schema.syncMetadata.lastError, + ); + }, ); } diff --git a/lib/data/database/app_database.g.dart b/lib/data/database/app_database.g.dart index aa62ff0d..6767ad72 100644 --- a/lib/data/database/app_database.g.dart +++ b/lib/data/database/app_database.g.dart @@ -4715,7 +4715,16 @@ class $SyncMetadataTable extends SyncMetadata 'last_synced_at', aliasedName, true, type: DriftSqlType.dateTime, requiredDuringInsert: false); @override - List get $columns => [entityType, lastSyncedAt]; + late final GeneratedColumn lastAttemptedAt = + GeneratedColumn('last_attempted_at', aliasedName, true, + type: DriftSqlType.dateTime, requiredDuringInsert: false); + @override + late final GeneratedColumn lastError = GeneratedColumn( + 'last_error', aliasedName, true, + type: DriftSqlType.string, requiredDuringInsert: false); + @override + List get $columns => + [entityType, lastSyncedAt, lastAttemptedAt, lastError]; @override String get aliasedName => _alias ?? actualTableName; @override @@ -4731,6 +4740,10 @@ class $SyncMetadataTable extends SyncMetadata .read(DriftSqlType.string, data['${effectivePrefix}entity_type'])!, lastSyncedAt: attachedDatabase.typeMapping.read( DriftSqlType.dateTime, data['${effectivePrefix}last_synced_at']), + lastAttemptedAt: attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, data['${effectivePrefix}last_attempted_at']), + lastError: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}last_error']), ); } @@ -4743,7 +4756,13 @@ class $SyncMetadataTable extends SyncMetadata class SyncMetadatas extends DataClass implements Insertable { final String entityType; final DateTime? lastSyncedAt; - const SyncMetadatas({required this.entityType, this.lastSyncedAt}); + final DateTime? lastAttemptedAt; + final String? lastError; + const SyncMetadatas( + {required this.entityType, + this.lastSyncedAt, + this.lastAttemptedAt, + this.lastError}); @override Map toColumns(bool nullToAbsent) { final map = {}; @@ -4751,6 +4770,12 @@ class SyncMetadatas extends DataClass implements Insertable { if (!nullToAbsent || lastSyncedAt != null) { map['last_synced_at'] = Variable(lastSyncedAt); } + if (!nullToAbsent || lastAttemptedAt != null) { + map['last_attempted_at'] = Variable(lastAttemptedAt); + } + if (!nullToAbsent || lastError != null) { + map['last_error'] = Variable(lastError); + } return map; } @@ -4760,6 +4785,12 @@ class SyncMetadatas extends DataClass implements Insertable { lastSyncedAt: lastSyncedAt == null && nullToAbsent ? const Value.absent() : Value(lastSyncedAt), + lastAttemptedAt: lastAttemptedAt == null && nullToAbsent + ? const Value.absent() + : Value(lastAttemptedAt), + lastError: lastError == null && nullToAbsent + ? const Value.absent() + : Value(lastError), ); } @@ -4769,6 +4800,8 @@ class SyncMetadatas extends DataClass implements Insertable { return SyncMetadatas( entityType: serializer.fromJson(json['entityType']), lastSyncedAt: serializer.fromJson(json['lastSyncedAt']), + lastAttemptedAt: serializer.fromJson(json['lastAttemptedAt']), + lastError: serializer.fromJson(json['lastError']), ); } @override @@ -4777,16 +4810,24 @@ class SyncMetadatas extends DataClass implements Insertable { return { 'entityType': serializer.toJson(entityType), 'lastSyncedAt': serializer.toJson(lastSyncedAt), + 'lastAttemptedAt': serializer.toJson(lastAttemptedAt), + 'lastError': serializer.toJson(lastError), }; } SyncMetadatas copyWith( {String? entityType, - Value lastSyncedAt = const Value.absent()}) => + Value lastSyncedAt = const Value.absent(), + Value lastAttemptedAt = const Value.absent(), + Value lastError = const Value.absent()}) => SyncMetadatas( entityType: entityType ?? this.entityType, lastSyncedAt: lastSyncedAt.present ? lastSyncedAt.value : this.lastSyncedAt, + lastAttemptedAt: lastAttemptedAt.present + ? lastAttemptedAt.value + : this.lastAttemptedAt, + lastError: lastError.present ? lastError.value : this.lastError, ); SyncMetadatas copyWithCompanion(SyncMetadataCompanion data) { return SyncMetadatas( @@ -4795,6 +4836,10 @@ class SyncMetadatas extends DataClass implements Insertable { lastSyncedAt: data.lastSyncedAt.present ? data.lastSyncedAt.value : this.lastSyncedAt, + lastAttemptedAt: data.lastAttemptedAt.present + ? data.lastAttemptedAt.value + : this.lastAttemptedAt, + lastError: data.lastError.present ? data.lastError.value : this.lastError, ); } @@ -4802,43 +4847,58 @@ class SyncMetadatas extends DataClass implements Insertable { String toString() { return (StringBuffer('SyncMetadatas(') ..write('entityType: $entityType, ') - ..write('lastSyncedAt: $lastSyncedAt') + ..write('lastSyncedAt: $lastSyncedAt, ') + ..write('lastAttemptedAt: $lastAttemptedAt, ') + ..write('lastError: $lastError') ..write(')')) .toString(); } @override - int get hashCode => Object.hash(entityType, lastSyncedAt); + int get hashCode => + Object.hash(entityType, lastSyncedAt, lastAttemptedAt, lastError); @override bool operator ==(Object other) => identical(this, other) || (other is SyncMetadatas && other.entityType == this.entityType && - other.lastSyncedAt == this.lastSyncedAt); + other.lastSyncedAt == this.lastSyncedAt && + other.lastAttemptedAt == this.lastAttemptedAt && + other.lastError == this.lastError); } class SyncMetadataCompanion extends UpdateCompanion { final Value entityType; final Value lastSyncedAt; + final Value lastAttemptedAt; + final Value lastError; final Value rowid; const SyncMetadataCompanion({ this.entityType = const Value.absent(), this.lastSyncedAt = const Value.absent(), + this.lastAttemptedAt = const Value.absent(), + this.lastError = const Value.absent(), this.rowid = const Value.absent(), }); SyncMetadataCompanion.insert({ required String entityType, this.lastSyncedAt = const Value.absent(), + this.lastAttemptedAt = const Value.absent(), + this.lastError = const Value.absent(), this.rowid = const Value.absent(), }) : entityType = Value(entityType); static Insertable custom({ Expression? entityType, Expression? lastSyncedAt, + Expression? lastAttemptedAt, + Expression? lastError, Expression? rowid, }) { return RawValuesInsertable({ if (entityType != null) 'entity_type': entityType, if (lastSyncedAt != null) 'last_synced_at': lastSyncedAt, + if (lastAttemptedAt != null) 'last_attempted_at': lastAttemptedAt, + if (lastError != null) 'last_error': lastError, if (rowid != null) 'rowid': rowid, }); } @@ -4846,10 +4906,14 @@ class SyncMetadataCompanion extends UpdateCompanion { SyncMetadataCompanion copyWith( {Value? entityType, Value? lastSyncedAt, + Value? lastAttemptedAt, + Value? lastError, Value? rowid}) { return SyncMetadataCompanion( entityType: entityType ?? this.entityType, lastSyncedAt: lastSyncedAt ?? this.lastSyncedAt, + lastAttemptedAt: lastAttemptedAt ?? this.lastAttemptedAt, + lastError: lastError ?? this.lastError, rowid: rowid ?? this.rowid, ); } @@ -4863,6 +4927,12 @@ class SyncMetadataCompanion extends UpdateCompanion { if (lastSyncedAt.present) { map['last_synced_at'] = Variable(lastSyncedAt.value); } + if (lastAttemptedAt.present) { + map['last_attempted_at'] = Variable(lastAttemptedAt.value); + } + if (lastError.present) { + map['last_error'] = Variable(lastError.value); + } if (rowid.present) { map['rowid'] = Variable(rowid.value); } @@ -4874,6 +4944,8 @@ class SyncMetadataCompanion extends UpdateCompanion { return (StringBuffer('SyncMetadataCompanion(') ..write('entityType: $entityType, ') ..write('lastSyncedAt: $lastSyncedAt, ') + ..write('lastAttemptedAt: $lastAttemptedAt, ') + ..write('lastError: $lastError, ') ..write('rowid: $rowid') ..write(')')) .toString(); @@ -13443,12 +13515,16 @@ typedef $$SyncMetadataTableCreateCompanionBuilder = SyncMetadataCompanion Function({ required String entityType, Value lastSyncedAt, + Value lastAttemptedAt, + Value lastError, Value rowid, }); typedef $$SyncMetadataTableUpdateCompanionBuilder = SyncMetadataCompanion Function({ Value entityType, Value lastSyncedAt, + Value lastAttemptedAt, + Value lastError, Value rowid, }); @@ -13466,6 +13542,13 @@ class $$SyncMetadataTableFilterComposer ColumnFilters get lastSyncedAt => $composableBuilder( column: $table.lastSyncedAt, builder: (column) => ColumnFilters(column)); + + ColumnFilters get lastAttemptedAt => $composableBuilder( + column: $table.lastAttemptedAt, + builder: (column) => ColumnFilters(column)); + + ColumnFilters get lastError => $composableBuilder( + column: $table.lastError, builder: (column) => ColumnFilters(column)); } class $$SyncMetadataTableOrderingComposer @@ -13483,6 +13566,13 @@ class $$SyncMetadataTableOrderingComposer ColumnOrderings get lastSyncedAt => $composableBuilder( column: $table.lastSyncedAt, builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get lastAttemptedAt => $composableBuilder( + column: $table.lastAttemptedAt, + builder: (column) => ColumnOrderings(column)); + + ColumnOrderings get lastError => $composableBuilder( + column: $table.lastError, builder: (column) => ColumnOrderings(column)); } class $$SyncMetadataTableAnnotationComposer @@ -13499,6 +13589,12 @@ class $$SyncMetadataTableAnnotationComposer GeneratedColumn get lastSyncedAt => $composableBuilder( column: $table.lastSyncedAt, builder: (column) => column); + + GeneratedColumn get lastAttemptedAt => $composableBuilder( + column: $table.lastAttemptedAt, builder: (column) => column); + + GeneratedColumn get lastError => + $composableBuilder(column: $table.lastError, builder: (column) => column); } class $$SyncMetadataTableTableManager extends RootTableManager< @@ -13529,21 +13625,29 @@ class $$SyncMetadataTableTableManager extends RootTableManager< updateCompanionCallback: ({ Value entityType = const Value.absent(), Value lastSyncedAt = const Value.absent(), + Value lastAttemptedAt = const Value.absent(), + Value lastError = const Value.absent(), Value rowid = const Value.absent(), }) => SyncMetadataCompanion( entityType: entityType, lastSyncedAt: lastSyncedAt, + lastAttemptedAt: lastAttemptedAt, + lastError: lastError, rowid: rowid, ), createCompanionCallback: ({ required String entityType, Value lastSyncedAt = const Value.absent(), + Value lastAttemptedAt = const Value.absent(), + Value lastError = const Value.absent(), Value rowid = const Value.absent(), }) => SyncMetadataCompanion.insert( entityType: entityType, lastSyncedAt: lastSyncedAt, + lastAttemptedAt: lastAttemptedAt, + lastError: lastError, rowid: rowid, ), withReferenceMapper: (p0) => p0 diff --git a/lib/data/database/app_database.steps.dart b/lib/data/database/app_database.steps.dart index cf751724..0452f935 100644 --- a/lib/data/database/app_database.steps.dart +++ b/lib/data/database/app_database.steps.dart @@ -3968,6 +3968,548 @@ i1.GeneratedColumn _column_121(String aliasedName) => i1.GeneratedColumn('parked_at', aliasedName, false, type: i1.DriftSqlType.dateTime, defaultValue: const CustomExpression('CURRENT_TIMESTAMP')); + +final class Schema9 extends i0.VersionedSchema { + Schema9({required super.database}) : super(version: 9); + @override + late final List entities = [ + wallets, + parties, + groups, + transactions, + categories, + configs, + users, + localChanges, + syncMetadata, + categorizables, + notifications, + mediaFiles, + transfers, + budgets, + budgetTargets, + budgetPeriodStates, + holdings, + financialPositionCache, + reminders, + deferredRemoteItems, + ]; + late final Shape0 wallets = Shape0( + source: i0.VersionedTable( + entityName: 'wallets', + withoutRowId: false, + isStrict: false, + tableConstraints: [ + 'PRIMARY KEY(client_id)', + ], + columns: [ + _column_0, + _column_1, + _column_2, + _column_3, + _column_4, + _column_5, + _column_6, + _column_7, + _column_8, + _column_9, + _column_10, + _column_11, + _column_12, + _column_13, + _column_14, + ], + attachedDatabase: database, + ), + alias: null); + late final Shape1 parties = Shape1( + source: i0.VersionedTable( + entityName: 'parties', + withoutRowId: false, + isStrict: false, + tableConstraints: [ + 'PRIMARY KEY(client_id)', + ], + columns: [ + _column_0, + _column_1, + _column_2, + _column_3, + _column_4, + _column_5, + _column_6, + _column_7, + _column_8, + _column_12, + _column_14, + _column_15, + ], + attachedDatabase: database, + ), + alias: null); + late final Shape2 groups = Shape2( + source: i0.VersionedTable( + entityName: 'groups', + withoutRowId: false, + isStrict: false, + tableConstraints: [ + 'PRIMARY KEY(client_id)', + ], + columns: [ + _column_0, + _column_1, + _column_2, + _column_3, + _column_4, + _column_5, + _column_6, + _column_7, + _column_8, + _column_12, + _column_14, + ], + attachedDatabase: database, + ), + alias: null); + late final Shape20 transactions = Shape20( + source: i0.VersionedTable( + entityName: 'transactions', + withoutRowId: false, + isStrict: false, + tableConstraints: [ + 'PRIMARY KEY(client_id)', + ], + columns: [ + _column_0, + _column_1, + _column_2, + _column_3, + _column_4, + _column_5, + _column_6, + _column_7, + _column_16, + _column_9, + _column_89, + _column_12, + _column_17, + _column_18, + _column_19, + _column_20, + _column_21, + _column_22, + _column_23, + _column_59, + _column_60, + _column_102, + _column_103, + _column_104, + _column_105, + _column_106, + _column_107, + ], + attachedDatabase: database, + ), + alias: null); + late final Shape4 categories = Shape4( + source: i0.VersionedTable( + entityName: 'categories', + withoutRowId: false, + isStrict: false, + tableConstraints: [ + 'PRIMARY KEY(client_id)', + ], + columns: [ + _column_0, + _column_1, + _column_2, + _column_3, + _column_4, + _column_5, + _column_6, + _column_7, + _column_24, + _column_25, + _column_12, + _column_9, + _column_14, + ], + attachedDatabase: database, + ), + alias: null); + late final Shape5 configs = Shape5( + source: i0.VersionedTable( + entityName: 'configs', + withoutRowId: false, + isStrict: false, + tableConstraints: [ + 'PRIMARY KEY(client_id)', + ], + columns: [ + _column_0, + _column_1, + _column_2, + _column_3, + _column_4, + _column_5, + _column_6, + _column_7, + _column_26, + _column_9, + _column_27, + ], + attachedDatabase: database, + ), + alias: null); + late final Shape6 users = Shape6( + source: i0.VersionedTable( + entityName: 'users', + withoutRowId: false, + isStrict: false, + tableConstraints: [ + 'PRIMARY KEY(id)', + ], + columns: [ + _column_28, + _column_29, + _column_30, + _column_31, + _column_32, + _column_33, + _column_34, + _column_35, + _column_36, + ], + attachedDatabase: database, + ), + alias: null); + late final Shape22 localChanges = Shape22( + source: i0.VersionedTable( + entityName: 'local_changes', + withoutRowId: false, + isStrict: false, + tableConstraints: [ + 'PRIMARY KEY(entity_id, entity_type)', + ], + columns: [ + _column_37, + _column_38, + _column_39, + _column_40, + _column_41, + _column_42, + _column_43, + _column_44, + _column_45, + _column_46, + _column_118, + _column_119, + ], + attachedDatabase: database, + ), + alias: null); + late final Shape24 syncMetadata = Shape24( + source: i0.VersionedTable( + entityName: 'sync_metadata', + withoutRowId: false, + isStrict: false, + tableConstraints: [ + 'PRIMARY KEY(entity_type)', + ], + columns: [ + _column_37, + _column_7, + _column_122, + _column_123, + ], + attachedDatabase: database, + ), + alias: null); + late final Shape9 categorizables = Shape9( + source: i0.VersionedTable( + entityName: 'categorizables', + withoutRowId: false, + isStrict: false, + tableConstraints: [ + 'PRIMARY KEY(categorizable_id, categorizable_type, category_client_id)', + ], + columns: [ + _column_47, + _column_48, + _column_49, + ], + attachedDatabase: database, + ), + alias: null); + late final Shape10 notifications = Shape10( + source: i0.VersionedTable( + entityName: 'notifications', + withoutRowId: false, + isStrict: false, + tableConstraints: [ + 'PRIMARY KEY(client_id)', + ], + columns: [ + _column_0, + _column_1, + _column_2, + _column_3, + _column_4, + _column_5, + _column_6, + _column_7, + _column_9, + _column_50, + _column_51, + _column_41, + _column_52, + ], + attachedDatabase: database, + ), + alias: null); + late final Shape11 mediaFiles = Shape11( + source: i0.VersionedTable( + entityName: 'media_files', + withoutRowId: false, + isStrict: false, + tableConstraints: [ + 'PRIMARY KEY(path)', + ], + columns: [ + _column_53, + _column_54, + _column_15, + _column_55, + _column_56, + _column_57, + _column_58, + _column_35, + _column_36, + ], + attachedDatabase: database, + ), + alias: null); + late final Shape13 transfers = Shape13( + source: i0.VersionedTable( + entityName: 'transfers', + withoutRowId: false, + isStrict: false, + tableConstraints: [ + 'PRIMARY KEY(client_id)', + ], + columns: [ + _column_0, + _column_1, + _column_2, + _column_3, + _column_4, + _column_5, + _column_6, + _column_7, + _column_16, + _column_61, + _column_62, + _column_63, + _column_64, + _column_65, + _column_66, + _column_67, + _column_68, + ], + attachedDatabase: database, + ), + alias: null); + late final Shape14 budgets = Shape14( + source: i0.VersionedTable( + entityName: 'budgets', + withoutRowId: false, + isStrict: false, + tableConstraints: [ + 'PRIMARY KEY(client_id)', + ], + columns: [ + _column_0, + _column_1, + _column_2, + _column_3, + _column_4, + _column_5, + _column_6, + _column_7, + _column_8, + _column_25, + _column_12, + _column_69, + _column_11, + _column_70, + _column_71, + _column_72, + _column_73, + _column_74, + _column_75, + _column_76, + _column_77, + _column_78, + _column_79, + ], + attachedDatabase: database, + ), + alias: null); + late final Shape15 budgetTargets = Shape15( + source: i0.VersionedTable( + entityName: 'budget_targets', + withoutRowId: false, + isStrict: false, + tableConstraints: [ + 'PRIMARY KEY(budget_client_id, target_type, target_client_id)', + ], + columns: [ + _column_80, + _column_81, + _column_82, + ], + attachedDatabase: database, + ), + alias: null); + late final Shape16 budgetPeriodStates = Shape16( + source: i0.VersionedTable( + entityName: 'budget_period_states', + withoutRowId: false, + isStrict: false, + tableConstraints: [ + 'PRIMARY KEY(client_id)', + ], + columns: [ + _column_0, + _column_1, + _column_2, + _column_3, + _column_4, + _column_5, + _column_6, + _column_7, + _column_80, + _column_83, + _column_84, + _column_85, + _column_86, + _column_87, + _column_88, + ], + attachedDatabase: database, + ), + alias: null); + late final Shape18 holdings = Shape18( + source: i0.VersionedTable( + entityName: 'holdings', + withoutRowId: false, + isStrict: false, + tableConstraints: [ + 'PRIMARY KEY(id)', + ], + columns: [ + _column_28, + _column_8, + _column_90, + _column_91, + _column_11, + _column_92, + _column_93, + _column_94, + _column_95, + _column_96, + _column_97, + ], + attachedDatabase: database, + ), + alias: null); + late final Shape19 financialPositionCache = Shape19( + source: i0.VersionedTable( + entityName: 'financial_position_cache', + withoutRowId: false, + isStrict: false, + tableConstraints: [ + 'PRIMARY KEY(cache_key)', + ], + columns: [ + _column_98, + _column_99, + _column_100, + _column_101, + ], + attachedDatabase: database, + ), + alias: null); + late final Shape21 reminders = Shape21( + source: i0.VersionedTable( + entityName: 'reminders', + withoutRowId: false, + isStrict: false, + tableConstraints: [ + 'PRIMARY KEY(client_id)', + ], + columns: [ + _column_0, + _column_1, + _column_2, + _column_3, + _column_4, + _column_5, + _column_6, + _column_7, + _column_50, + _column_12, + _column_108, + _column_109, + _column_110, + _column_111, + _column_112, + _column_113, + _column_114, + _column_115, + _column_116, + _column_117, + ], + attachedDatabase: database, + ), + alias: null); + late final Shape23 deferredRemoteItems = Shape23( + source: i0.VersionedTable( + entityName: 'deferred_remote_items', + withoutRowId: false, + isStrict: false, + tableConstraints: [ + 'PRIMARY KEY(entity_type, client_id)', + ], + columns: [ + _column_37, + _column_120, + _column_41, + _column_121, + ], + attachedDatabase: database, + ), + alias: null); +} + +class Shape24 extends i0.VersionedTable { + Shape24({required super.source, required super.alias}) : super.aliased(); + i1.GeneratedColumn get entityType => + columnsByName['entity_type']! as i1.GeneratedColumn; + i1.GeneratedColumn get lastSyncedAt => + columnsByName['last_synced_at']! as i1.GeneratedColumn; + i1.GeneratedColumn get lastAttemptedAt => + columnsByName['last_attempted_at']! as i1.GeneratedColumn; + i1.GeneratedColumn get lastError => + columnsByName['last_error']! as i1.GeneratedColumn; +} + +i1.GeneratedColumn _column_122(String aliasedName) => + i1.GeneratedColumn('last_attempted_at', aliasedName, true, + type: i1.DriftSqlType.dateTime); +i1.GeneratedColumn _column_123(String aliasedName) => + i1.GeneratedColumn('last_error', aliasedName, true, + type: i1.DriftSqlType.string); i0.MigrationStepWithVersion migrationSteps({ required Future Function(i1.Migrator m, Schema2 schema) from1To2, required Future Function(i1.Migrator m, Schema3 schema) from2To3, @@ -3976,6 +4518,7 @@ i0.MigrationStepWithVersion migrationSteps({ required Future Function(i1.Migrator m, Schema6 schema) from5To6, required Future Function(i1.Migrator m, Schema7 schema) from6To7, required Future Function(i1.Migrator m, Schema8 schema) from7To8, + required Future Function(i1.Migrator m, Schema9 schema) from8To9, }) { return (currentVersion, database) async { switch (currentVersion) { @@ -4014,6 +4557,11 @@ i0.MigrationStepWithVersion migrationSteps({ final migrator = i1.Migrator(database, schema); await from7To8(migrator, schema); return 8; + case 8: + final schema = Schema9(database: database); + final migrator = i1.Migrator(database, schema); + await from8To9(migrator, schema); + return 9; default: throw ArgumentError.value('Unknown migration from $currentVersion'); } @@ -4028,6 +4576,7 @@ i1.OnUpgrade stepByStep({ required Future Function(i1.Migrator m, Schema6 schema) from5To6, required Future Function(i1.Migrator m, Schema7 schema) from6To7, required Future Function(i1.Migrator m, Schema8 schema) from7To8, + required Future Function(i1.Migrator m, Schema9 schema) from8To9, }) => i0.VersionedSchema.stepByStepHelper( step: migrationSteps( @@ -4038,4 +4587,5 @@ i1.OnUpgrade stepByStep({ from5To6: from5To6, from6To7: from6To7, from7To8: from7To8, + from8To9: from8To9, )); diff --git a/lib/data/database/tables/sync_meta_data.dart b/lib/data/database/tables/sync_meta_data.dart index c4b9cd8a..15429b75 100644 --- a/lib/data/database/tables/sync_meta_data.dart +++ b/lib/data/database/tables/sync_meta_data.dart @@ -6,6 +6,10 @@ class SyncMetadata extends Table { DateTimeColumn get lastSyncedAt => dateTime().nullable()(); + DateTimeColumn get lastAttemptedAt => dateTime().nullable()(); + + TextColumn get lastError => text().nullable()(); + @override Set get primaryKey => {entityType}; } diff --git a/lib/data/repositories/budget_repository_impl.dart b/lib/data/repositories/budget_repository_impl.dart index fd7c4401..801b4b9a 100644 --- a/lib/data/repositories/budget_repository_impl.dart +++ b/lib/data/repositories/budget_repository_impl.dart @@ -1,5 +1,3 @@ -import 'dart:async'; - import 'package:drift_sync_core/drift_sync_core.dart'; import 'package:fpdart/fpdart.dart'; import 'package:injectable/injectable.dart'; @@ -74,28 +72,26 @@ class BudgetRepositoryImpl List targets = const [], }) { return RepositoryErrorHandler.handleApiCall(() async { - final budget = await localDataSource.insertBudget( - name: name, - slug: _slugify(name), - amount: amount, - currency: currency, - periodType: periodType, - startDate: startDate, - endDate: endDate, - description: description, - rolloverEnabled: rolloverEnabled, - thresholdPercent: thresholdPercent, - forecastAlertsEnabled: forecastAlertsEnabled, - isActive: isActive, - targets: targets - .map((t) => BudgetTargetInput(type: t.type, clientId: t.clientId)) - .toList(), - ); - - final dto = await _composeDto(budget.clientId); - if (dto != null) { - unawaited(post(dto)); - } + await persistAndPost(() async { + final budget = await localDataSource.insertBudget( + name: name, + slug: _slugify(name), + amount: amount, + currency: currency, + periodType: periodType, + startDate: startDate, + endDate: endDate, + description: description, + rolloverEnabled: rolloverEnabled, + thresholdPercent: thresholdPercent, + forecastAlertsEnabled: forecastAlertsEnabled, + isActive: isActive, + targets: targets + .map((t) => BudgetTargetInput(type: t.type, clientId: t.clientId)) + .toList(), + ); + return (await _composeDto(budget.clientId))!; + }); return unit; }); } @@ -117,29 +113,28 @@ class BudgetRepositoryImpl List? targets, }) { return RepositoryErrorHandler.handleApiCall(() async { - await localDataSource.updateBudget( - clientId, - name: name, - slug: name != null ? _slugify(name) : null, - amount: amount, - currency: currency, - periodType: periodType, - startDate: startDate, - endDate: endDate, - description: description, - rolloverEnabled: rolloverEnabled, - thresholdPercent: thresholdPercent, - forecastAlertsEnabled: forecastAlertsEnabled, - isActive: isActive, - targets: targets - ?.map((t) => BudgetTargetInput(type: t.type, clientId: t.clientId)) - .toList(), - ); - - final dto = await _composeDto(clientId); - if (dto != null) { - unawaited(put(dto)); - } + await persistAndPut(() async { + await localDataSource.updateBudget( + clientId, + name: name, + slug: name != null ? _slugify(name) : null, + amount: amount, + currency: currency, + periodType: periodType, + startDate: startDate, + endDate: endDate, + description: description, + rolloverEnabled: rolloverEnabled, + thresholdPercent: thresholdPercent, + forecastAlertsEnabled: forecastAlertsEnabled, + isActive: isActive, + targets: targets + ?.map( + (t) => BudgetTargetInput(type: t.type, clientId: t.clientId)) + .toList(), + ); + return (await _composeDto(clientId))!; + }); return unit; }); } @@ -148,9 +143,8 @@ class BudgetRepositoryImpl Future> deleteBudget(String clientId) { return RepositoryErrorHandler.handleApiCall(() async { final dto = await _composeDto(clientId); - await localDataSource.deleteBudget(clientId); if (dto != null) { - unawaited(delete(dto)); + await persistAndDelete(dto); } return unit; }); diff --git a/lib/data/repositories/category_repository_impl.dart b/lib/data/repositories/category_repository_impl.dart index 57badad9..cab1e9d4 100644 --- a/lib/data/repositories/category_repository_impl.dart +++ b/lib/data/repositories/category_repository_impl.dart @@ -1,4 +1,3 @@ -import 'dart:async'; import 'package:fpdart/fpdart.dart'; import 'package:injectable/injectable.dart'; import 'package:trakli/data/database/app_database.dart' as db; @@ -40,17 +39,15 @@ class CategoryRepositoryImpl String name, String slug, TransactionType type, {String? description, MediaEntity? media}) { return RepositoryErrorHandler.handleApiCall(() async { - final category = await localDataSource.insertCategory( - name, - slug, - type, - description: description, - media: media != null - ? Media.fromLocal(content: media.content, type: media.mediaType) - : null, - ); - - unawaited(post(category)); + await persistAndPost(() => localDataSource.insertCategory( + name, + slug, + type, + description: description, + media: media != null + ? Media.fromLocal(content: media.content, type: media.mediaType) + : null, + )); return unit; }); } @@ -64,16 +61,15 @@ class CategoryRepositoryImpl MediaEntity? media, }) { return RepositoryErrorHandler.handleApiCall(() async { - final category = await localDataSource.updateCategory( - clientId, - name: name, - slug: slug, - description: description, - media: media != null - ? Media.fromLocal(content: media.content, type: media.mediaType) - : null, - ); - unawaited(put(category)); + await persistAndPut(() => localDataSource.updateCategory( + clientId, + name: name, + slug: slug, + description: description, + media: media != null + ? Media.fromLocal(content: media.content, type: media.mediaType) + : null, + )); return unit; }); } @@ -81,8 +77,8 @@ class CategoryRepositoryImpl @override Future> deleteCategory(String clientId) { return RepositoryErrorHandler.handleApiCall(() async { - final category = await localDataSource.deleteCategory(clientId); - unawaited(delete(category)); + final category = await syncHandler.getLocalByClientId(clientId); + await persistAndDelete(category); return unit; }); } diff --git a/lib/data/repositories/config_repository_impl.dart b/lib/data/repositories/config_repository_impl.dart index 6493518e..8974a2df 100644 --- a/lib/data/repositories/config_repository_impl.dart +++ b/lib/data/repositories/config_repository_impl.dart @@ -1,4 +1,3 @@ -import 'dart:async'; import 'package:fpdart/fpdart.dart'; import 'package:drift_sync_core/drift_sync_core.dart' as sync; import 'package:injectable/injectable.dart'; @@ -63,20 +62,18 @@ class ConfigRepositoryImpl final Config config; if (existingConfig != null) { // Update existing config - config = await localDataSource.updateConfig( - key, - type: type, - value: value, - ); - unawaited(put(config)); + config = await persistAndPut(() => localDataSource.updateConfig( + key, + type: type, + value: value, + )); } else { // Create new config - config = await localDataSource.insertConfig( - key: key, - type: type, - value: value, - ); - unawaited(post(config)); + config = await persistAndPost(() => localDataSource.insertConfig( + key: key, + type: type, + value: value, + )); } return ConfigMapper.toDomain(config); @@ -97,13 +94,11 @@ class ConfigRepositoryImpl throw NotFoundException('Config with key "$key" not found'); } - final config = await localDataSource.updateConfig( - key, - type: type, - value: value, - ); - - unawaited(put(config)); + await persistAndPut(() => localDataSource.updateConfig( + key, + type: type, + value: value, + )); return unit; }, ); @@ -118,8 +113,7 @@ class ConfigRepositoryImpl throw NotFoundException('Config with key "$key" not found'); } - await localDataSource.deleteConfig(key); - unawaited(delete(config)); + await persistAndDelete(config); return unit; }, ); diff --git a/lib/data/repositories/group_repository_impl.dart b/lib/data/repositories/group_repository_impl.dart index f98321ad..4b7ac1a7 100644 --- a/lib/data/repositories/group_repository_impl.dart +++ b/lib/data/repositories/group_repository_impl.dart @@ -1,4 +1,3 @@ -import 'dart:async'; import 'package:fpdart/fpdart.dart'; import 'package:drift_sync_core/drift_sync_core.dart' as sync; import 'package:injectable/injectable.dart'; @@ -53,13 +52,11 @@ class GroupRepositoryImpl ) : null; - final group = await localDataSource.insertGroup( - name, - description: description, - icon: media, - ); - - unawaited(post(group)); + final group = await persistAndPost(() => localDataSource.insertGroup( + name, + description: description, + icon: media, + )); return GroupMapper.toDomain(group); }, ); @@ -86,14 +83,12 @@ class GroupRepositoryImpl ) : null; - final group = await localDataSource.updateGroup( - clientId, - name: name, - description: description, - icon: media, - ); - - unawaited(put(group)); + await persistAndPut(() => localDataSource.updateGroup( + clientId, + name: name, + description: description, + icon: media, + )); return unit; }, ); @@ -108,8 +103,7 @@ class GroupRepositoryImpl throw NotFoundException('Group not found'); } - await localDataSource.deleteGroup(clientId); - unawaited(delete(group)); + await persistAndDelete(group); return unit; }, ); diff --git a/lib/data/repositories/media_repository_impl.dart b/lib/data/repositories/media_repository_impl.dart index b4d8b278..c55d8edb 100644 --- a/lib/data/repositories/media_repository_impl.dart +++ b/lib/data/repositories/media_repository_impl.dart @@ -1,4 +1,3 @@ -import 'dart:async'; import 'dart:io'; import 'package:dio/dio.dart'; @@ -62,11 +61,12 @@ class MediaRepositoryImpl String filePath, ) async { try { - final media = await localDataSource.insertMediaForTransaction( - transactionClientId, - filePath, + await persistAndPost( + () => localDataSource.insertMediaForTransaction( + transactionClientId, + filePath, + ), ); - unawaited(post(media)); return const Right(unit); } catch (e) { return Left(Failure.cacheError(e.toString())); @@ -90,11 +90,8 @@ class MediaRepositoryImpl @override Future> deleteMediaByPath(String path) async { try { - final media = await localDataSource.deleteByPath(path); - if (media == null) { - return Left(Failure.cacheError('MediaFile not found for path: $path')); - } - unawaited(delete(media)); + final media = await syncHandler.getLocalByClientId(path); + await persistAndDelete(media); return const Right(unit); } catch (e) { return Left(Failure.cacheError(e.toString())); diff --git a/lib/data/repositories/notification_repository_impl.dart b/lib/data/repositories/notification_repository_impl.dart index 86d69829..5d2bacbe 100644 --- a/lib/data/repositories/notification_repository_impl.dart +++ b/lib/data/repositories/notification_repository_impl.dart @@ -1,4 +1,3 @@ -import 'dart:async'; import 'package:fpdart/fpdart.dart'; import 'package:injectable/injectable.dart'; import 'package:trakli/data/database/app_database.dart'; @@ -41,9 +40,9 @@ class NotificationRepositoryImpl throw const NotFoundException(message: 'Notification not found'); } - final updatedNotification = - await localDataSource.markAsRead(clientId, DateTime.now()); - unawaited(put(updatedNotification)); + await persistAndPut( + () => localDataSource.markAsRead(clientId, DateTime.now()), + ); return unit; }); } diff --git a/lib/data/repositories/party_repository_impl.dart b/lib/data/repositories/party_repository_impl.dart index a46686c9..13fe76e1 100644 --- a/lib/data/repositories/party_repository_impl.dart +++ b/lib/data/repositories/party_repository_impl.dart @@ -1,4 +1,3 @@ -import 'dart:async'; import 'package:fpdart/fpdart.dart'; import 'package:drift_sync_core/drift_sync_core.dart' as sync; import 'package:injectable/injectable.dart'; @@ -44,16 +43,14 @@ class PartyRepositoryImpl PartyType? type, }) { return RepositoryErrorHandler.handleApiCall(() async { - final party = await localDataSource.insertParty( - name, - description: description, - media: media != null - ? Media.fromLocal(content: media.content, type: media.mediaType) - : null, - type: type, - ); - - unawaited(post(party)); + await persistAndPost(() => localDataSource.insertParty( + name, + description: description, + media: media != null + ? Media.fromLocal(content: media.content, type: media.mediaType) + : null, + type: type, + )); return unit; }); } @@ -67,17 +64,15 @@ class PartyRepositoryImpl PartyType? type, }) { return RepositoryErrorHandler.handleApiCall(() async { - final party = await localDataSource.updateParty( - clientId, - name: name, - description: description, - media: media != null - ? Media.fromLocal(content: media.content, type: media.mediaType) - : null, - type: type, - ); - - unawaited(put(party)); + await persistAndPut(() => localDataSource.updateParty( + clientId, + name: name, + description: description, + media: media != null + ? Media.fromLocal(content: media.content, type: media.mediaType) + : null, + type: type, + )); return unit; }); } @@ -85,8 +80,8 @@ class PartyRepositoryImpl @override Future> deleteParty(String clientId) { return RepositoryErrorHandler.handleApiCall(() async { - final party = await localDataSource.deleteParty(clientId); - unawaited(delete(party)); + final party = await syncHandler.getLocalByClientId(clientId); + await persistAndDelete(party); return unit; }); } diff --git a/lib/data/repositories/reminder_repository_impl.dart b/lib/data/repositories/reminder_repository_impl.dart index 5bb2ac6f..9987f52b 100644 --- a/lib/data/repositories/reminder_repository_impl.dart +++ b/lib/data/repositories/reminder_repository_impl.dart @@ -1,5 +1,3 @@ -import 'dart:async'; - import 'package:drift_sync_core/drift_sync_core.dart' as sync; import 'package:fpdart/fpdart.dart'; import 'package:injectable/injectable.dart'; @@ -54,16 +52,15 @@ class ReminderRepositoryImpl int? priority, }) { return RepositoryErrorHandler.handleApiCall(() async { - final reminder = await localDataSource.insertReminder( - title: title, - description: description, - type: type, - triggerAt: triggerAt, - repeatRule: repeatRule, - timezone: timezone ?? 'UTC', - priority: priority ?? 0, - ); - unawaited(post(reminder)); + await persistAndPost(() => localDataSource.insertReminder( + title: title, + description: description, + type: type, + triggerAt: triggerAt, + repeatRule: repeatRule, + timezone: timezone ?? 'UTC', + priority: priority ?? 0, + )); return unit; }); } @@ -81,18 +78,17 @@ class ReminderRepositoryImpl int? priority, }) { return RepositoryErrorHandler.handleApiCall(() async { - final reminder = await localDataSource.updateReminder( - clientId, - title: title, - description: description, - type: type, - triggerAt: triggerAt, - repeatRule: repeatRule, - clearRepeatRule: clearRepeatRule, - timezone: timezone, - priority: priority, - ); - unawaited(put(reminder)); + await persistAndPut(() => localDataSource.updateReminder( + clientId, + title: title, + description: description, + type: type, + triggerAt: triggerAt, + repeatRule: repeatRule, + clearRepeatRule: clearRepeatRule, + timezone: timezone, + priority: priority, + )); return unit; }); } @@ -100,8 +96,8 @@ class ReminderRepositoryImpl @override Future> deleteReminder(String clientId) { return RepositoryErrorHandler.handleApiCall(() async { - final reminder = await localDataSource.deleteReminder(clientId); - unawaited(delete(reminder)); + final reminder = await syncHandler.getLocalByClientId(clientId); + await persistAndDelete(reminder); return unit; }); } diff --git a/lib/data/repositories/transaction_repository_impl.dart b/lib/data/repositories/transaction_repository_impl.dart index 839e8fd7..8f8891b4 100644 --- a/lib/data/repositories/transaction_repository_impl.dart +++ b/lib/data/repositories/transaction_repository_impl.dart @@ -1,5 +1,3 @@ -import 'dart:async'; - import 'package:drift_sync_core/drift_sync_core.dart'; import 'package:fpdart/fpdart.dart'; import 'package:injectable/injectable.dart'; @@ -49,28 +47,28 @@ class TransactionRepositoryImpl extends SyncEntityRepository localDataSource.updateTransaction( + id, + amount: amount, + description: description, + categoryIds: categoryIds, + datetime: datetime, + walletClientId: walletClientId, + intent: intent, + partyClientId: partyClientId, + groupClientId: groupClientId, + recurrence: recurrence, + clearRecurrence: clearRecurrence, + ), ); - unawaited(put(transaction)); - if (isRefund == true) { - unawaited(markTransactionAsRefund(id, refundOfClientId)); + await markTransactionAsRefund(id, refundOfClientId); } else if (isRefund == false) { final row = await localDataSource.getTransactionByClientId(id); if (row?.isRefund == true) { - unawaited(unmarkTransactionRefund(id)); + await unmarkTransactionRefund(id); } } return const Right(unit); @@ -82,9 +80,9 @@ class TransactionRepositoryImpl extends SyncEntityRepository> deleteTransaction(String id) async { try { - final transaction = await localDataSource.deleteTransaction(id); + final transaction = await syncHandler.getLocalByClientId(id); - unawaited(delete(transaction)); + await persistAndDelete(transaction); return const Right(unit); } catch (e) { return Left(Failure.cacheError(e.toString())); @@ -108,18 +106,20 @@ class TransactionRepositoryImpl extends SyncEntityRepository localDataSource.insertTransaction( + amount, + description, + categoryIds, + type, + datetime, + walletClientId, + intent: intent, + partyClientId: partyClientId, + groupClientId: groupClientId, + attachedFilePaths: attachedFilePaths, + recurrence: recurrence, + ), ); final clientId = transaction.transaction.clientId; @@ -128,11 +128,7 @@ class TransactionRepositoryImpl extends SyncEntityRepository markTransactionAsRefund(clientId, refundOfClientId), - )); - } else { - unawaited(post(transaction)); + await markTransactionAsRefund(clientId, refundOfClientId); } return const Right(unit); } catch (e) { diff --git a/lib/data/repositories/transfer_repository_impl.dart b/lib/data/repositories/transfer_repository_impl.dart index a16f225a..6dc085f1 100644 --- a/lib/data/repositories/transfer_repository_impl.dart +++ b/lib/data/repositories/transfer_repository_impl.dart @@ -72,8 +72,7 @@ class TransferRepositoryImpl expenseTransactionClientId: Value(entity.expenseTransactionClientId), incomeTransactionClientId: Value(entity.incomeTransactionClientId), ); - final transfer = await localDataSource.insertTransfer(companion); - unawaited(post(transfer)); + await persistAndPost(() => localDataSource.insertTransfer(companion)); return unit; }); } @@ -100,8 +99,7 @@ class TransferRepositoryImpl expenseTransactionClientId: entity.expenseTransactionClientId, incomeTransactionClientId: entity.incomeTransactionClientId, ); - final updated = await localDataSource.updateTransfer(transfer); - unawaited(put(updated)); + await persistAndPut(() => localDataSource.updateTransfer(transfer)); return unit; }); } @@ -109,8 +107,8 @@ class TransferRepositoryImpl @override Future> deleteTransfer(String clientId) { return RepositoryErrorHandler.handleApiCall(() async { - final transfer = await localDataSource.deleteTransfer(clientId); - unawaited(delete(transfer)); + final transfer = await syncHandler.getLocalByClientId(clientId); + await persistAndDelete(transfer); return unit; }); } @@ -191,6 +189,10 @@ class TransferRepositoryImpl incomeDto.transaction.clientId, transferClientId: transferClientId, ); + + await transactionRepository.enqueuePut(expenseDto); + await transactionRepository.enqueuePut(incomeDto); + await enqueuePut(transferRow); }); unawaited( diff --git a/lib/data/repositories/wallet_repository_impl.dart b/lib/data/repositories/wallet_repository_impl.dart index 0652e64b..7f71389e 100644 --- a/lib/data/repositories/wallet_repository_impl.dart +++ b/lib/data/repositories/wallet_repository_impl.dart @@ -1,5 +1,3 @@ -import 'dart:async'; - import 'package:drift_sync_core/drift_sync_core.dart' as sync; import 'package:fpdart/fpdart.dart'; import 'package:injectable/injectable.dart'; @@ -53,16 +51,14 @@ class WalletRepositoryImpl type: icon.mediaType, ) : null; - final wallet = await localDataSource.insertWallet( - name, - type, - balance, - currency, - description: description, - icon: media, - ); - - unawaited(post(wallet)); + final wallet = await persistAndPost(() => localDataSource.insertWallet( + name, + type, + balance, + currency, + description: description, + icon: media, + )); return WalletMapper.toDomain(wallet); }); } @@ -90,17 +86,15 @@ class WalletRepositoryImpl ) : null; - final wallet = await localDataSource.updateWallet( - clientId, - name: name, - type: type, - balance: balance, - currency: currency, - description: description, - icon: media, - ); - - unawaited(put(wallet)); + final wallet = await persistAndPut(() => localDataSource.updateWallet( + clientId, + name: name, + type: type, + balance: balance, + currency: currency, + description: description, + icon: media, + )); return WalletMapper.toDomain(wallet); }); } @@ -113,8 +107,7 @@ class WalletRepositoryImpl throw NotFoundException('Wallet not found'); } - await localDataSource.deleteWallet(clientId); - unawaited(syncHandler.deleteRemote(wallet)); + await persistAndDelete(wallet); return unit; }); } diff --git a/lib/data/sync/transfer_sync_handler.dart b/lib/data/sync/transfer_sync_handler.dart index 083a7251..28fbf15d 100644 --- a/lib/data/sync/transfer_sync_handler.dart +++ b/lib/data/sync/transfer_sync_handler.dart @@ -30,6 +30,9 @@ class TransferSyncHandler extends SyncTypeHandler @override String get entityType => TransferSyncHandler.entity; + @override + bool get downloadIgnoresFailedDependencies => true; + @override String getRev(Transfer entity) => entity.rev ?? '1'; diff --git a/lib/gen/translations/codegen_loader.g.dart b/lib/gen/translations/codegen_loader.g.dart index 6683e1c3..15ddf2d4 100644 --- a/lib/gen/translations/codegen_loader.g.dart +++ b/lib/gen/translations/codegen_loader.g.dart @@ -510,6 +510,7 @@ abstract class LocaleKeys { static const synchronization = 'synchronization'; static const syncHistoryDesc = 'syncHistoryDesc'; static const lastSyncStatus = 'lastSyncStatus'; + static const lastAttempted = 'lastAttempted'; static const noSyncHistory = 'noSyncHistory'; static const pendingChanges = 'pendingChanges'; static const noPendingChanges = 'noPendingChanges'; diff --git a/lib/gen/translations/locale_keys.g.dart b/lib/gen/translations/locale_keys.g.dart index a0761dc4..15ddf2d4 100644 --- a/lib/gen/translations/locale_keys.g.dart +++ b/lib/gen/translations/locale_keys.g.dart @@ -174,6 +174,11 @@ abstract class LocaleKeys { static const export = 'export'; static const toPdf = 'toPdf'; static const toExcel = 'toExcel'; + static const exportSaved = 'exportSaved'; + static const exportSaveFailed = 'exportSaveFailed'; + static const exportRequiresAccount = 'exportRequiresAccount'; + static const exportAwaitingSync = 'exportAwaitingSync'; + static const exportPreparing = 'exportPreparing'; static const family = 'family'; static const searchHint = 'searchHint'; static const totalIncome = 'totalIncome'; @@ -505,6 +510,7 @@ abstract class LocaleKeys { static const synchronization = 'synchronization'; static const syncHistoryDesc = 'syncHistoryDesc'; static const lastSyncStatus = 'lastSyncStatus'; + static const lastAttempted = 'lastAttempted'; static const noSyncHistory = 'noSyncHistory'; static const pendingChanges = 'pendingChanges'; static const noPendingChanges = 'noPendingChanges'; diff --git a/lib/presentation/sync_history_screen.dart b/lib/presentation/sync_history_screen.dart index 7c016593..7f2581bb 100644 --- a/lib/presentation/sync_history_screen.dart +++ b/lib/presentation/sync_history_screen.dart @@ -9,6 +9,7 @@ import 'package:trakli/core/sync/sync_database.dart'; import 'package:trakli/data/database/app_database.dart'; import 'package:trakli/di/injection.dart'; import 'package:trakli/gen/translations/codegen_loader.g.dart'; +import 'package:trakli/presentation/utils/design_tokens.dart'; import 'package:trakli/presentation/utils/page_app_bar.dart'; class SyncHistoryScreen extends StatefulWidget { @@ -48,7 +49,17 @@ class _SyncHistoryScreenState extends State { Future _loadData() async { setState(() => _isLoading = true); try { - final metadata = await _db.getLocalSyncMetadataList(); + final savedMetadata = await _db.getLocalSyncMetadataList(); + final metadataByType = { + for (final item in savedMetadata) item.entityType: item, + }; + final metadata = _syncDb.typeHandlers + .where((handler) => !handler.skipDownSync) + .map((handler) => + metadataByType[handler.entityType] ?? + LocalSyncMetadata(entityType: handler.entityType)) + .toList() + ..sort((a, b) => a.entityType.compareTo(b.entityType)); final allChanges = await _db.select(_db.localChanges).get(); // Quarantined changes are permanently failed and never retry @@ -134,6 +145,16 @@ class _SyncHistoryScreenState extends State { return LocaleKeys.party.tr(); case 'group': return LocaleKeys.group.tr(); + case 'transfer': + return LocaleKeys.transfer.tr(); + case 'budget': + return LocaleKeys.budget.tr(); + case 'budget_period_state': + return LocaleKeys.budgetPeriod.tr(); + case 'notification': + return LocaleKeys.notifications.tr(); + case 'reminder': + return LocaleKeys.reminders.tr(); case 'config': return LocaleKeys.settings.tr(); default: @@ -245,18 +266,48 @@ class _SyncHistoryScreenState extends State { separatorBuilder: (_, __) => const Divider(height: 1), itemBuilder: (context, index) { final meta = _syncMetadata[index]; + final error = meta.lastError; return ListTile( dense: true, + onTap: error == null + ? null + : () => _showModelSyncError(meta, error), title: Text( _getEntityTypeDisplayName(meta.entityType), style: TextStyle(fontSize: 14.sp), ), - trailing: Text( - _formatDateTime(meta.lastSyncedAt), - style: TextStyle( - fontSize: 12.sp, - color: Colors.grey[600], - ), + subtitle: error == null + ? null + : Text( + error, + style: TextStyle( + fontSize: 11.sp, + color: context.tones.expense.deep, + ), + maxLines: 1, + overflow: TextOverflow.ellipsis, + ), + trailing: Row( + mainAxisSize: MainAxisSize.min, + children: [ + // Kept alongside the error so a failing model still + // shows when it was last tried. + Text( + _formatDateTime(meta.lastAttemptedAt), + style: TextStyle( + fontSize: 12.sp, + color: context.tones.textMuted, + ), + ), + if (error != null) ...[ + SizedBox(width: 6.w), + Icon( + Icons.error, + color: context.tones.expense.deep, + size: 20.sp, + ), + ], + ], ), ); }, @@ -347,6 +398,59 @@ class _SyncHistoryScreenState extends State { /// Full error text plus the queued request payload, so validation /// failures show exactly what the server received. + /// Down-sync failures have no queued change to inspect, so the error is + /// only recoverable from the model's sync metadata. + void _showModelSyncError(LocalSyncMetadata meta, String error) { + showDialog( + context: context, + builder: (context) => AlertDialog( + title: Text(_getEntityTypeDisplayName(meta.entityType)), + content: SizedBox( + width: double.maxFinite, + child: SingleChildScrollView( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + Text( + '${LocaleKeys.lastAttempted.tr()}: ' + '${_formatDateTime(meta.lastAttemptedAt)}', + style: TextStyle( + fontSize: 12.sp, + color: context.tones.textMuted, + ), + ), + SizedBox(height: 12.h), + Container( + width: double.infinity, + padding: EdgeInsets.all(8.r), + decoration: BoxDecoration( + color: Theme.of(context).colorScheme.surface, + borderRadius: BorderRadius.circular(8.r), + ), + child: SelectableText( + error, + style: TextStyle( + fontSize: 11.sp, + fontFamily: 'monospace', + color: context.tones.expense.deep, + ), + ), + ), + ], + ), + ), + ), + actions: [ + TextButton( + onPressed: () => Navigator.pop(context), + child: Text(LocaleKeys.done.tr()), + ), + ], + ), + ); + } + void _showChangeDetails(LocalChange change) { final payload = const JsonEncoder.withIndent(' ').convert(change.data); showDialog( diff --git a/pubspec.lock b/pubspec.lock index 084be50e..c99845b6 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -181,10 +181,10 @@ packages: dependency: transitive description: name: characters - sha256: faf38497bda5ead2a8c7615f4f7939df04333478bf32e4173fcb06d428b5716b + sha256: f71061c654a3380576a52b451dd5532377954cf9dbd272a78fc8479606670803 url: "https://pub.dev" source: hosted - version: "1.4.1" + version: "1.4.0" charcode: dependency: transitive description: @@ -429,11 +429,11 @@ packages: dependency: "direct main" description: path: "packages/drift_sync_core" - ref: "drift_sync_core-v0.3.3" - resolved-ref: dae6a056a7295cf196d13800c9194e2cd4ad2951 + ref: "drift_sync_core-v0.3.4" + resolved-ref: "19ee6eced96af9f392fc83fb99816ce7d7dbc8c8" url: "https://github.com/whilesmartflutter/drift_sync.git" source: git - version: "0.3.3" + version: "0.3.4" drift_sync_flutter: dependency: "direct main" description: @@ -1292,10 +1292,10 @@ packages: dependency: transitive description: name: material_color_utilities - sha256: "9c337007e82b1889149c82ed242ed1cb24a66044e30979c44912381e9be4c48b" + sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec url: "https://pub.dev" source: hosted - version: "0.13.0" + version: "0.11.1" meta: dependency: transitive description: @@ -2174,5 +2174,5 @@ packages: source: hosted version: "3.1.3" sdks: - dart: ">=3.9.0-0 <4.0.0" + dart: ">=3.8.0 <4.0.0" flutter: ">=3.32.0" diff --git a/pubspec.yaml b/pubspec.yaml index e50f3e1c..6ceb97ee 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -65,7 +65,7 @@ dependencies: drift_sync_core: git: url: https://github.com/whilesmartflutter/drift_sync.git - ref: drift_sync_core-v0.3.3 + ref: drift_sync_core-v0.3.4 path: packages/drift_sync_core drift_sync_flutter: git: diff --git a/test/drift/default/generated/schema.dart b/test/drift/default/generated/schema.dart index 746206e4..413b4408 100644 --- a/test/drift/default/generated/schema.dart +++ b/test/drift/default/generated/schema.dart @@ -11,6 +11,7 @@ import 'schema_v5.dart' as v5; import 'schema_v6.dart' as v6; import 'schema_v7.dart' as v7; import 'schema_v8.dart' as v8; +import 'schema_v9.dart' as v9; class GeneratedHelper implements SchemaInstantiationHelper { @override @@ -32,10 +33,12 @@ class GeneratedHelper implements SchemaInstantiationHelper { return v7.DatabaseAtV7(db); case 8: return v8.DatabaseAtV8(db); + case 9: + return v9.DatabaseAtV9(db); default: throw MissingSchemaException(version, versions); } } - static const versions = const [1, 2, 3, 4, 5, 6, 7, 8]; + static const versions = const [1, 2, 3, 4, 5, 6, 7, 8, 9]; } diff --git a/test/drift/default/generated/schema_v9.dart b/test/drift/default/generated/schema_v9.dart new file mode 100644 index 00000000..d1361846 --- /dev/null +++ b/test/drift/default/generated/schema_v9.dart @@ -0,0 +1,10024 @@ +// dart format width=80 +// GENERATED CODE, DO NOT EDIT BY HAND. +// ignore_for_file: type=lint +import 'package:drift/drift.dart'; + +class Wallets extends Table with TableInfo { + @override + final GeneratedDatabase attachedDatabase; + final String? _alias; + Wallets(this.attachedDatabase, [this._alias]); + late final GeneratedColumn id = GeneratedColumn( + 'id', aliasedName, true, + type: DriftSqlType.int, + requiredDuringInsert: false, + defaultConstraints: GeneratedColumn.constraintIsAlways('UNIQUE')); + late final GeneratedColumn userId = GeneratedColumn( + 'user_id', aliasedName, true, + type: DriftSqlType.int, requiredDuringInsert: false); + late final GeneratedColumn clientId = GeneratedColumn( + 'client_id', aliasedName, false, + type: DriftSqlType.string, + requiredDuringInsert: false, + defaultValue: const CustomExpression('\'\'')); + late final GeneratedColumn rev = GeneratedColumn( + 'rev', aliasedName, true, + type: DriftSqlType.string, + requiredDuringInsert: false, + defaultValue: const CustomExpression('\'1\'')); + late final GeneratedColumn createdAt = GeneratedColumn( + 'created_at', aliasedName, false, + type: DriftSqlType.dateTime, + requiredDuringInsert: false, + defaultValue: const CustomExpression('CURRENT_TIMESTAMP')); + late final GeneratedColumn updatedAt = GeneratedColumn( + 'updated_at', aliasedName, false, + type: DriftSqlType.dateTime, + requiredDuringInsert: false, + defaultValue: const CustomExpression('CURRENT_TIMESTAMP')); + late final GeneratedColumn deletedAt = GeneratedColumn( + 'deleted_at', aliasedName, true, + type: DriftSqlType.dateTime, requiredDuringInsert: false); + late final GeneratedColumn lastSyncedAt = GeneratedColumn( + 'last_synced_at', aliasedName, true, + type: DriftSqlType.dateTime, requiredDuringInsert: false); + late final GeneratedColumn name = GeneratedColumn( + 'name', aliasedName, false, + type: DriftSqlType.string, requiredDuringInsert: true); + late final GeneratedColumn type = GeneratedColumn( + 'type', aliasedName, false, + type: DriftSqlType.string, requiredDuringInsert: true); + late final GeneratedColumn balance = GeneratedColumn( + 'balance', aliasedName, false, + type: DriftSqlType.double, + requiredDuringInsert: false, + defaultValue: const CustomExpression('0.0')); + late final GeneratedColumn currency = GeneratedColumn( + 'currency', aliasedName, false, + type: DriftSqlType.string, requiredDuringInsert: true); + late final GeneratedColumn description = GeneratedColumn( + 'description', aliasedName, true, + type: DriftSqlType.string, requiredDuringInsert: false); + late final GeneratedColumn stats = GeneratedColumn( + 'stats', aliasedName, true, + type: DriftSqlType.string, requiredDuringInsert: false); + late final GeneratedColumn icon = GeneratedColumn( + 'icon', aliasedName, true, + type: DriftSqlType.string, requiredDuringInsert: false); + @override + List get $columns => [ + id, + userId, + clientId, + rev, + createdAt, + updatedAt, + deletedAt, + lastSyncedAt, + name, + type, + balance, + currency, + description, + stats, + icon + ]; + @override + String get aliasedName => _alias ?? actualTableName; + @override + String get actualTableName => $name; + static const String $name = 'wallets'; + @override + Set get $primaryKey => {clientId}; + @override + WalletsData map(Map data, {String? tablePrefix}) { + final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; + return WalletsData( + id: attachedDatabase.typeMapping + .read(DriftSqlType.int, data['${effectivePrefix}id']), + userId: attachedDatabase.typeMapping + .read(DriftSqlType.int, data['${effectivePrefix}user_id']), + clientId: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}client_id'])!, + rev: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}rev']), + createdAt: attachedDatabase.typeMapping + .read(DriftSqlType.dateTime, data['${effectivePrefix}created_at'])!, + updatedAt: attachedDatabase.typeMapping + .read(DriftSqlType.dateTime, data['${effectivePrefix}updated_at'])!, + deletedAt: attachedDatabase.typeMapping + .read(DriftSqlType.dateTime, data['${effectivePrefix}deleted_at']), + lastSyncedAt: attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, data['${effectivePrefix}last_synced_at']), + name: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}name'])!, + type: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}type'])!, + balance: attachedDatabase.typeMapping + .read(DriftSqlType.double, data['${effectivePrefix}balance'])!, + currency: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}currency'])!, + description: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}description']), + stats: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}stats']), + icon: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}icon']), + ); + } + + @override + Wallets createAlias(String alias) { + return Wallets(attachedDatabase, alias); + } +} + +class WalletsData extends DataClass implements Insertable { + final int? id; + final int? userId; + final String clientId; + final String? rev; + final DateTime createdAt; + final DateTime updatedAt; + final DateTime? deletedAt; + final DateTime? lastSyncedAt; + final String name; + final String type; + final double balance; + final String currency; + final String? description; + final String? stats; + final String? icon; + const WalletsData( + {this.id, + this.userId, + required this.clientId, + this.rev, + required this.createdAt, + required this.updatedAt, + this.deletedAt, + this.lastSyncedAt, + required this.name, + required this.type, + required this.balance, + required this.currency, + this.description, + this.stats, + this.icon}); + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + if (!nullToAbsent || id != null) { + map['id'] = Variable(id); + } + if (!nullToAbsent || userId != null) { + map['user_id'] = Variable(userId); + } + map['client_id'] = Variable(clientId); + if (!nullToAbsent || rev != null) { + map['rev'] = Variable(rev); + } + map['created_at'] = Variable(createdAt); + map['updated_at'] = Variable(updatedAt); + if (!nullToAbsent || deletedAt != null) { + map['deleted_at'] = Variable(deletedAt); + } + if (!nullToAbsent || lastSyncedAt != null) { + map['last_synced_at'] = Variable(lastSyncedAt); + } + map['name'] = Variable(name); + map['type'] = Variable(type); + map['balance'] = Variable(balance); + map['currency'] = Variable(currency); + if (!nullToAbsent || description != null) { + map['description'] = Variable(description); + } + if (!nullToAbsent || stats != null) { + map['stats'] = Variable(stats); + } + if (!nullToAbsent || icon != null) { + map['icon'] = Variable(icon); + } + return map; + } + + WalletsCompanion toCompanion(bool nullToAbsent) { + return WalletsCompanion( + id: id == null && nullToAbsent ? const Value.absent() : Value(id), + userId: + userId == null && nullToAbsent ? const Value.absent() : Value(userId), + clientId: Value(clientId), + rev: rev == null && nullToAbsent ? const Value.absent() : Value(rev), + createdAt: Value(createdAt), + updatedAt: Value(updatedAt), + deletedAt: deletedAt == null && nullToAbsent + ? const Value.absent() + : Value(deletedAt), + lastSyncedAt: lastSyncedAt == null && nullToAbsent + ? const Value.absent() + : Value(lastSyncedAt), + name: Value(name), + type: Value(type), + balance: Value(balance), + currency: Value(currency), + description: description == null && nullToAbsent + ? const Value.absent() + : Value(description), + stats: + stats == null && nullToAbsent ? const Value.absent() : Value(stats), + icon: icon == null && nullToAbsent ? const Value.absent() : Value(icon), + ); + } + + factory WalletsData.fromJson(Map json, + {ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return WalletsData( + id: serializer.fromJson(json['id']), + userId: serializer.fromJson(json['userId']), + clientId: serializer.fromJson(json['clientId']), + rev: serializer.fromJson(json['rev']), + createdAt: serializer.fromJson(json['createdAt']), + updatedAt: serializer.fromJson(json['updatedAt']), + deletedAt: serializer.fromJson(json['deletedAt']), + lastSyncedAt: serializer.fromJson(json['lastSyncedAt']), + name: serializer.fromJson(json['name']), + type: serializer.fromJson(json['type']), + balance: serializer.fromJson(json['balance']), + currency: serializer.fromJson(json['currency']), + description: serializer.fromJson(json['description']), + stats: serializer.fromJson(json['stats']), + icon: serializer.fromJson(json['icon']), + ); + } + @override + Map toJson({ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return { + 'id': serializer.toJson(id), + 'userId': serializer.toJson(userId), + 'clientId': serializer.toJson(clientId), + 'rev': serializer.toJson(rev), + 'createdAt': serializer.toJson(createdAt), + 'updatedAt': serializer.toJson(updatedAt), + 'deletedAt': serializer.toJson(deletedAt), + 'lastSyncedAt': serializer.toJson(lastSyncedAt), + 'name': serializer.toJson(name), + 'type': serializer.toJson(type), + 'balance': serializer.toJson(balance), + 'currency': serializer.toJson(currency), + 'description': serializer.toJson(description), + 'stats': serializer.toJson(stats), + 'icon': serializer.toJson(icon), + }; + } + + WalletsData copyWith( + {Value id = const Value.absent(), + Value userId = const Value.absent(), + String? clientId, + Value rev = const Value.absent(), + DateTime? createdAt, + DateTime? updatedAt, + Value deletedAt = const Value.absent(), + Value lastSyncedAt = const Value.absent(), + String? name, + String? type, + double? balance, + String? currency, + Value description = const Value.absent(), + Value stats = const Value.absent(), + Value icon = const Value.absent()}) => + WalletsData( + id: id.present ? id.value : this.id, + userId: userId.present ? userId.value : this.userId, + clientId: clientId ?? this.clientId, + rev: rev.present ? rev.value : this.rev, + createdAt: createdAt ?? this.createdAt, + updatedAt: updatedAt ?? this.updatedAt, + deletedAt: deletedAt.present ? deletedAt.value : this.deletedAt, + lastSyncedAt: + lastSyncedAt.present ? lastSyncedAt.value : this.lastSyncedAt, + name: name ?? this.name, + type: type ?? this.type, + balance: balance ?? this.balance, + currency: currency ?? this.currency, + description: description.present ? description.value : this.description, + stats: stats.present ? stats.value : this.stats, + icon: icon.present ? icon.value : this.icon, + ); + WalletsData copyWithCompanion(WalletsCompanion data) { + return WalletsData( + id: data.id.present ? data.id.value : this.id, + userId: data.userId.present ? data.userId.value : this.userId, + clientId: data.clientId.present ? data.clientId.value : this.clientId, + rev: data.rev.present ? data.rev.value : this.rev, + createdAt: data.createdAt.present ? data.createdAt.value : this.createdAt, + updatedAt: data.updatedAt.present ? data.updatedAt.value : this.updatedAt, + deletedAt: data.deletedAt.present ? data.deletedAt.value : this.deletedAt, + lastSyncedAt: data.lastSyncedAt.present + ? data.lastSyncedAt.value + : this.lastSyncedAt, + name: data.name.present ? data.name.value : this.name, + type: data.type.present ? data.type.value : this.type, + balance: data.balance.present ? data.balance.value : this.balance, + currency: data.currency.present ? data.currency.value : this.currency, + description: + data.description.present ? data.description.value : this.description, + stats: data.stats.present ? data.stats.value : this.stats, + icon: data.icon.present ? data.icon.value : this.icon, + ); + } + + @override + String toString() { + return (StringBuffer('WalletsData(') + ..write('id: $id, ') + ..write('userId: $userId, ') + ..write('clientId: $clientId, ') + ..write('rev: $rev, ') + ..write('createdAt: $createdAt, ') + ..write('updatedAt: $updatedAt, ') + ..write('deletedAt: $deletedAt, ') + ..write('lastSyncedAt: $lastSyncedAt, ') + ..write('name: $name, ') + ..write('type: $type, ') + ..write('balance: $balance, ') + ..write('currency: $currency, ') + ..write('description: $description, ') + ..write('stats: $stats, ') + ..write('icon: $icon') + ..write(')')) + .toString(); + } + + @override + int get hashCode => Object.hash( + id, + userId, + clientId, + rev, + createdAt, + updatedAt, + deletedAt, + lastSyncedAt, + name, + type, + balance, + currency, + description, + stats, + icon); + @override + bool operator ==(Object other) => + identical(this, other) || + (other is WalletsData && + other.id == this.id && + other.userId == this.userId && + other.clientId == this.clientId && + other.rev == this.rev && + other.createdAt == this.createdAt && + other.updatedAt == this.updatedAt && + other.deletedAt == this.deletedAt && + other.lastSyncedAt == this.lastSyncedAt && + other.name == this.name && + other.type == this.type && + other.balance == this.balance && + other.currency == this.currency && + other.description == this.description && + other.stats == this.stats && + other.icon == this.icon); +} + +class WalletsCompanion extends UpdateCompanion { + final Value id; + final Value userId; + final Value clientId; + final Value rev; + final Value createdAt; + final Value updatedAt; + final Value deletedAt; + final Value lastSyncedAt; + final Value name; + final Value type; + final Value balance; + final Value currency; + final Value description; + final Value stats; + final Value icon; + final Value rowid; + const WalletsCompanion({ + this.id = const Value.absent(), + this.userId = const Value.absent(), + this.clientId = const Value.absent(), + this.rev = const Value.absent(), + this.createdAt = const Value.absent(), + this.updatedAt = const Value.absent(), + this.deletedAt = const Value.absent(), + this.lastSyncedAt = const Value.absent(), + this.name = const Value.absent(), + this.type = const Value.absent(), + this.balance = const Value.absent(), + this.currency = const Value.absent(), + this.description = const Value.absent(), + this.stats = const Value.absent(), + this.icon = const Value.absent(), + this.rowid = const Value.absent(), + }); + WalletsCompanion.insert({ + this.id = const Value.absent(), + this.userId = const Value.absent(), + this.clientId = const Value.absent(), + this.rev = const Value.absent(), + this.createdAt = const Value.absent(), + this.updatedAt = const Value.absent(), + this.deletedAt = const Value.absent(), + this.lastSyncedAt = const Value.absent(), + required String name, + required String type, + this.balance = const Value.absent(), + required String currency, + this.description = const Value.absent(), + this.stats = const Value.absent(), + this.icon = const Value.absent(), + this.rowid = const Value.absent(), + }) : name = Value(name), + type = Value(type), + currency = Value(currency); + static Insertable custom({ + Expression? id, + Expression? userId, + Expression? clientId, + Expression? rev, + Expression? createdAt, + Expression? updatedAt, + Expression? deletedAt, + Expression? lastSyncedAt, + Expression? name, + Expression? type, + Expression? balance, + Expression? currency, + Expression? description, + Expression? stats, + Expression? icon, + Expression? rowid, + }) { + return RawValuesInsertable({ + if (id != null) 'id': id, + if (userId != null) 'user_id': userId, + if (clientId != null) 'client_id': clientId, + if (rev != null) 'rev': rev, + if (createdAt != null) 'created_at': createdAt, + if (updatedAt != null) 'updated_at': updatedAt, + if (deletedAt != null) 'deleted_at': deletedAt, + if (lastSyncedAt != null) 'last_synced_at': lastSyncedAt, + if (name != null) 'name': name, + if (type != null) 'type': type, + if (balance != null) 'balance': balance, + if (currency != null) 'currency': currency, + if (description != null) 'description': description, + if (stats != null) 'stats': stats, + if (icon != null) 'icon': icon, + if (rowid != null) 'rowid': rowid, + }); + } + + WalletsCompanion copyWith( + {Value? id, + Value? userId, + Value? clientId, + Value? rev, + Value? createdAt, + Value? updatedAt, + Value? deletedAt, + Value? lastSyncedAt, + Value? name, + Value? type, + Value? balance, + Value? currency, + Value? description, + Value? stats, + Value? icon, + Value? rowid}) { + return WalletsCompanion( + id: id ?? this.id, + userId: userId ?? this.userId, + clientId: clientId ?? this.clientId, + rev: rev ?? this.rev, + createdAt: createdAt ?? this.createdAt, + updatedAt: updatedAt ?? this.updatedAt, + deletedAt: deletedAt ?? this.deletedAt, + lastSyncedAt: lastSyncedAt ?? this.lastSyncedAt, + name: name ?? this.name, + type: type ?? this.type, + balance: balance ?? this.balance, + currency: currency ?? this.currency, + description: description ?? this.description, + stats: stats ?? this.stats, + icon: icon ?? this.icon, + rowid: rowid ?? this.rowid, + ); + } + + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + if (id.present) { + map['id'] = Variable(id.value); + } + if (userId.present) { + map['user_id'] = Variable(userId.value); + } + if (clientId.present) { + map['client_id'] = Variable(clientId.value); + } + if (rev.present) { + map['rev'] = Variable(rev.value); + } + if (createdAt.present) { + map['created_at'] = Variable(createdAt.value); + } + if (updatedAt.present) { + map['updated_at'] = Variable(updatedAt.value); + } + if (deletedAt.present) { + map['deleted_at'] = Variable(deletedAt.value); + } + if (lastSyncedAt.present) { + map['last_synced_at'] = Variable(lastSyncedAt.value); + } + if (name.present) { + map['name'] = Variable(name.value); + } + if (type.present) { + map['type'] = Variable(type.value); + } + if (balance.present) { + map['balance'] = Variable(balance.value); + } + if (currency.present) { + map['currency'] = Variable(currency.value); + } + if (description.present) { + map['description'] = Variable(description.value); + } + if (stats.present) { + map['stats'] = Variable(stats.value); + } + if (icon.present) { + map['icon'] = Variable(icon.value); + } + if (rowid.present) { + map['rowid'] = Variable(rowid.value); + } + return map; + } + + @override + String toString() { + return (StringBuffer('WalletsCompanion(') + ..write('id: $id, ') + ..write('userId: $userId, ') + ..write('clientId: $clientId, ') + ..write('rev: $rev, ') + ..write('createdAt: $createdAt, ') + ..write('updatedAt: $updatedAt, ') + ..write('deletedAt: $deletedAt, ') + ..write('lastSyncedAt: $lastSyncedAt, ') + ..write('name: $name, ') + ..write('type: $type, ') + ..write('balance: $balance, ') + ..write('currency: $currency, ') + ..write('description: $description, ') + ..write('stats: $stats, ') + ..write('icon: $icon, ') + ..write('rowid: $rowid') + ..write(')')) + .toString(); + } +} + +class Parties extends Table with TableInfo { + @override + final GeneratedDatabase attachedDatabase; + final String? _alias; + Parties(this.attachedDatabase, [this._alias]); + late final GeneratedColumn id = GeneratedColumn( + 'id', aliasedName, true, + type: DriftSqlType.int, + requiredDuringInsert: false, + defaultConstraints: GeneratedColumn.constraintIsAlways('UNIQUE')); + late final GeneratedColumn userId = GeneratedColumn( + 'user_id', aliasedName, true, + type: DriftSqlType.int, requiredDuringInsert: false); + late final GeneratedColumn clientId = GeneratedColumn( + 'client_id', aliasedName, false, + type: DriftSqlType.string, + requiredDuringInsert: false, + defaultValue: const CustomExpression('\'\'')); + late final GeneratedColumn rev = GeneratedColumn( + 'rev', aliasedName, true, + type: DriftSqlType.string, + requiredDuringInsert: false, + defaultValue: const CustomExpression('\'1\'')); + late final GeneratedColumn createdAt = GeneratedColumn( + 'created_at', aliasedName, false, + type: DriftSqlType.dateTime, + requiredDuringInsert: false, + defaultValue: const CustomExpression('CURRENT_TIMESTAMP')); + late final GeneratedColumn updatedAt = GeneratedColumn( + 'updated_at', aliasedName, false, + type: DriftSqlType.dateTime, + requiredDuringInsert: false, + defaultValue: const CustomExpression('CURRENT_TIMESTAMP')); + late final GeneratedColumn deletedAt = GeneratedColumn( + 'deleted_at', aliasedName, true, + type: DriftSqlType.dateTime, requiredDuringInsert: false); + late final GeneratedColumn lastSyncedAt = GeneratedColumn( + 'last_synced_at', aliasedName, true, + type: DriftSqlType.dateTime, requiredDuringInsert: false); + late final GeneratedColumn name = GeneratedColumn( + 'name', aliasedName, false, + type: DriftSqlType.string, requiredDuringInsert: true); + late final GeneratedColumn description = GeneratedColumn( + 'description', aliasedName, true, + type: DriftSqlType.string, requiredDuringInsert: false); + late final GeneratedColumn icon = GeneratedColumn( + 'icon', aliasedName, true, + type: DriftSqlType.string, requiredDuringInsert: false); + late final GeneratedColumn type = GeneratedColumn( + 'type', aliasedName, true, + type: DriftSqlType.string, requiredDuringInsert: false); + @override + List get $columns => [ + id, + userId, + clientId, + rev, + createdAt, + updatedAt, + deletedAt, + lastSyncedAt, + name, + description, + icon, + type + ]; + @override + String get aliasedName => _alias ?? actualTableName; + @override + String get actualTableName => $name; + static const String $name = 'parties'; + @override + Set get $primaryKey => {clientId}; + @override + PartiesData map(Map data, {String? tablePrefix}) { + final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; + return PartiesData( + id: attachedDatabase.typeMapping + .read(DriftSqlType.int, data['${effectivePrefix}id']), + userId: attachedDatabase.typeMapping + .read(DriftSqlType.int, data['${effectivePrefix}user_id']), + clientId: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}client_id'])!, + rev: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}rev']), + createdAt: attachedDatabase.typeMapping + .read(DriftSqlType.dateTime, data['${effectivePrefix}created_at'])!, + updatedAt: attachedDatabase.typeMapping + .read(DriftSqlType.dateTime, data['${effectivePrefix}updated_at'])!, + deletedAt: attachedDatabase.typeMapping + .read(DriftSqlType.dateTime, data['${effectivePrefix}deleted_at']), + lastSyncedAt: attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, data['${effectivePrefix}last_synced_at']), + name: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}name'])!, + description: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}description']), + icon: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}icon']), + type: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}type']), + ); + } + + @override + Parties createAlias(String alias) { + return Parties(attachedDatabase, alias); + } +} + +class PartiesData extends DataClass implements Insertable { + final int? id; + final int? userId; + final String clientId; + final String? rev; + final DateTime createdAt; + final DateTime updatedAt; + final DateTime? deletedAt; + final DateTime? lastSyncedAt; + final String name; + final String? description; + final String? icon; + final String? type; + const PartiesData( + {this.id, + this.userId, + required this.clientId, + this.rev, + required this.createdAt, + required this.updatedAt, + this.deletedAt, + this.lastSyncedAt, + required this.name, + this.description, + this.icon, + this.type}); + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + if (!nullToAbsent || id != null) { + map['id'] = Variable(id); + } + if (!nullToAbsent || userId != null) { + map['user_id'] = Variable(userId); + } + map['client_id'] = Variable(clientId); + if (!nullToAbsent || rev != null) { + map['rev'] = Variable(rev); + } + map['created_at'] = Variable(createdAt); + map['updated_at'] = Variable(updatedAt); + if (!nullToAbsent || deletedAt != null) { + map['deleted_at'] = Variable(deletedAt); + } + if (!nullToAbsent || lastSyncedAt != null) { + map['last_synced_at'] = Variable(lastSyncedAt); + } + map['name'] = Variable(name); + if (!nullToAbsent || description != null) { + map['description'] = Variable(description); + } + if (!nullToAbsent || icon != null) { + map['icon'] = Variable(icon); + } + if (!nullToAbsent || type != null) { + map['type'] = Variable(type); + } + return map; + } + + PartiesCompanion toCompanion(bool nullToAbsent) { + return PartiesCompanion( + id: id == null && nullToAbsent ? const Value.absent() : Value(id), + userId: + userId == null && nullToAbsent ? const Value.absent() : Value(userId), + clientId: Value(clientId), + rev: rev == null && nullToAbsent ? const Value.absent() : Value(rev), + createdAt: Value(createdAt), + updatedAt: Value(updatedAt), + deletedAt: deletedAt == null && nullToAbsent + ? const Value.absent() + : Value(deletedAt), + lastSyncedAt: lastSyncedAt == null && nullToAbsent + ? const Value.absent() + : Value(lastSyncedAt), + name: Value(name), + description: description == null && nullToAbsent + ? const Value.absent() + : Value(description), + icon: icon == null && nullToAbsent ? const Value.absent() : Value(icon), + type: type == null && nullToAbsent ? const Value.absent() : Value(type), + ); + } + + factory PartiesData.fromJson(Map json, + {ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return PartiesData( + id: serializer.fromJson(json['id']), + userId: serializer.fromJson(json['userId']), + clientId: serializer.fromJson(json['clientId']), + rev: serializer.fromJson(json['rev']), + createdAt: serializer.fromJson(json['createdAt']), + updatedAt: serializer.fromJson(json['updatedAt']), + deletedAt: serializer.fromJson(json['deletedAt']), + lastSyncedAt: serializer.fromJson(json['lastSyncedAt']), + name: serializer.fromJson(json['name']), + description: serializer.fromJson(json['description']), + icon: serializer.fromJson(json['icon']), + type: serializer.fromJson(json['type']), + ); + } + @override + Map toJson({ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return { + 'id': serializer.toJson(id), + 'userId': serializer.toJson(userId), + 'clientId': serializer.toJson(clientId), + 'rev': serializer.toJson(rev), + 'createdAt': serializer.toJson(createdAt), + 'updatedAt': serializer.toJson(updatedAt), + 'deletedAt': serializer.toJson(deletedAt), + 'lastSyncedAt': serializer.toJson(lastSyncedAt), + 'name': serializer.toJson(name), + 'description': serializer.toJson(description), + 'icon': serializer.toJson(icon), + 'type': serializer.toJson(type), + }; + } + + PartiesData copyWith( + {Value id = const Value.absent(), + Value userId = const Value.absent(), + String? clientId, + Value rev = const Value.absent(), + DateTime? createdAt, + DateTime? updatedAt, + Value deletedAt = const Value.absent(), + Value lastSyncedAt = const Value.absent(), + String? name, + Value description = const Value.absent(), + Value icon = const Value.absent(), + Value type = const Value.absent()}) => + PartiesData( + id: id.present ? id.value : this.id, + userId: userId.present ? userId.value : this.userId, + clientId: clientId ?? this.clientId, + rev: rev.present ? rev.value : this.rev, + createdAt: createdAt ?? this.createdAt, + updatedAt: updatedAt ?? this.updatedAt, + deletedAt: deletedAt.present ? deletedAt.value : this.deletedAt, + lastSyncedAt: + lastSyncedAt.present ? lastSyncedAt.value : this.lastSyncedAt, + name: name ?? this.name, + description: description.present ? description.value : this.description, + icon: icon.present ? icon.value : this.icon, + type: type.present ? type.value : this.type, + ); + PartiesData copyWithCompanion(PartiesCompanion data) { + return PartiesData( + id: data.id.present ? data.id.value : this.id, + userId: data.userId.present ? data.userId.value : this.userId, + clientId: data.clientId.present ? data.clientId.value : this.clientId, + rev: data.rev.present ? data.rev.value : this.rev, + createdAt: data.createdAt.present ? data.createdAt.value : this.createdAt, + updatedAt: data.updatedAt.present ? data.updatedAt.value : this.updatedAt, + deletedAt: data.deletedAt.present ? data.deletedAt.value : this.deletedAt, + lastSyncedAt: data.lastSyncedAt.present + ? data.lastSyncedAt.value + : this.lastSyncedAt, + name: data.name.present ? data.name.value : this.name, + description: + data.description.present ? data.description.value : this.description, + icon: data.icon.present ? data.icon.value : this.icon, + type: data.type.present ? data.type.value : this.type, + ); + } + + @override + String toString() { + return (StringBuffer('PartiesData(') + ..write('id: $id, ') + ..write('userId: $userId, ') + ..write('clientId: $clientId, ') + ..write('rev: $rev, ') + ..write('createdAt: $createdAt, ') + ..write('updatedAt: $updatedAt, ') + ..write('deletedAt: $deletedAt, ') + ..write('lastSyncedAt: $lastSyncedAt, ') + ..write('name: $name, ') + ..write('description: $description, ') + ..write('icon: $icon, ') + ..write('type: $type') + ..write(')')) + .toString(); + } + + @override + int get hashCode => Object.hash(id, userId, clientId, rev, createdAt, + updatedAt, deletedAt, lastSyncedAt, name, description, icon, type); + @override + bool operator ==(Object other) => + identical(this, other) || + (other is PartiesData && + other.id == this.id && + other.userId == this.userId && + other.clientId == this.clientId && + other.rev == this.rev && + other.createdAt == this.createdAt && + other.updatedAt == this.updatedAt && + other.deletedAt == this.deletedAt && + other.lastSyncedAt == this.lastSyncedAt && + other.name == this.name && + other.description == this.description && + other.icon == this.icon && + other.type == this.type); +} + +class PartiesCompanion extends UpdateCompanion { + final Value id; + final Value userId; + final Value clientId; + final Value rev; + final Value createdAt; + final Value updatedAt; + final Value deletedAt; + final Value lastSyncedAt; + final Value name; + final Value description; + final Value icon; + final Value type; + final Value rowid; + const PartiesCompanion({ + this.id = const Value.absent(), + this.userId = const Value.absent(), + this.clientId = const Value.absent(), + this.rev = const Value.absent(), + this.createdAt = const Value.absent(), + this.updatedAt = const Value.absent(), + this.deletedAt = const Value.absent(), + this.lastSyncedAt = const Value.absent(), + this.name = const Value.absent(), + this.description = const Value.absent(), + this.icon = const Value.absent(), + this.type = const Value.absent(), + this.rowid = const Value.absent(), + }); + PartiesCompanion.insert({ + this.id = const Value.absent(), + this.userId = const Value.absent(), + this.clientId = const Value.absent(), + this.rev = const Value.absent(), + this.createdAt = const Value.absent(), + this.updatedAt = const Value.absent(), + this.deletedAt = const Value.absent(), + this.lastSyncedAt = const Value.absent(), + required String name, + this.description = const Value.absent(), + this.icon = const Value.absent(), + this.type = const Value.absent(), + this.rowid = const Value.absent(), + }) : name = Value(name); + static Insertable custom({ + Expression? id, + Expression? userId, + Expression? clientId, + Expression? rev, + Expression? createdAt, + Expression? updatedAt, + Expression? deletedAt, + Expression? lastSyncedAt, + Expression? name, + Expression? description, + Expression? icon, + Expression? type, + Expression? rowid, + }) { + return RawValuesInsertable({ + if (id != null) 'id': id, + if (userId != null) 'user_id': userId, + if (clientId != null) 'client_id': clientId, + if (rev != null) 'rev': rev, + if (createdAt != null) 'created_at': createdAt, + if (updatedAt != null) 'updated_at': updatedAt, + if (deletedAt != null) 'deleted_at': deletedAt, + if (lastSyncedAt != null) 'last_synced_at': lastSyncedAt, + if (name != null) 'name': name, + if (description != null) 'description': description, + if (icon != null) 'icon': icon, + if (type != null) 'type': type, + if (rowid != null) 'rowid': rowid, + }); + } + + PartiesCompanion copyWith( + {Value? id, + Value? userId, + Value? clientId, + Value? rev, + Value? createdAt, + Value? updatedAt, + Value? deletedAt, + Value? lastSyncedAt, + Value? name, + Value? description, + Value? icon, + Value? type, + Value? rowid}) { + return PartiesCompanion( + id: id ?? this.id, + userId: userId ?? this.userId, + clientId: clientId ?? this.clientId, + rev: rev ?? this.rev, + createdAt: createdAt ?? this.createdAt, + updatedAt: updatedAt ?? this.updatedAt, + deletedAt: deletedAt ?? this.deletedAt, + lastSyncedAt: lastSyncedAt ?? this.lastSyncedAt, + name: name ?? this.name, + description: description ?? this.description, + icon: icon ?? this.icon, + type: type ?? this.type, + rowid: rowid ?? this.rowid, + ); + } + + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + if (id.present) { + map['id'] = Variable(id.value); + } + if (userId.present) { + map['user_id'] = Variable(userId.value); + } + if (clientId.present) { + map['client_id'] = Variable(clientId.value); + } + if (rev.present) { + map['rev'] = Variable(rev.value); + } + if (createdAt.present) { + map['created_at'] = Variable(createdAt.value); + } + if (updatedAt.present) { + map['updated_at'] = Variable(updatedAt.value); + } + if (deletedAt.present) { + map['deleted_at'] = Variable(deletedAt.value); + } + if (lastSyncedAt.present) { + map['last_synced_at'] = Variable(lastSyncedAt.value); + } + if (name.present) { + map['name'] = Variable(name.value); + } + if (description.present) { + map['description'] = Variable(description.value); + } + if (icon.present) { + map['icon'] = Variable(icon.value); + } + if (type.present) { + map['type'] = Variable(type.value); + } + if (rowid.present) { + map['rowid'] = Variable(rowid.value); + } + return map; + } + + @override + String toString() { + return (StringBuffer('PartiesCompanion(') + ..write('id: $id, ') + ..write('userId: $userId, ') + ..write('clientId: $clientId, ') + ..write('rev: $rev, ') + ..write('createdAt: $createdAt, ') + ..write('updatedAt: $updatedAt, ') + ..write('deletedAt: $deletedAt, ') + ..write('lastSyncedAt: $lastSyncedAt, ') + ..write('name: $name, ') + ..write('description: $description, ') + ..write('icon: $icon, ') + ..write('type: $type, ') + ..write('rowid: $rowid') + ..write(')')) + .toString(); + } +} + +class Groups extends Table with TableInfo { + @override + final GeneratedDatabase attachedDatabase; + final String? _alias; + Groups(this.attachedDatabase, [this._alias]); + late final GeneratedColumn id = GeneratedColumn( + 'id', aliasedName, true, + type: DriftSqlType.int, + requiredDuringInsert: false, + defaultConstraints: GeneratedColumn.constraintIsAlways('UNIQUE')); + late final GeneratedColumn userId = GeneratedColumn( + 'user_id', aliasedName, true, + type: DriftSqlType.int, requiredDuringInsert: false); + late final GeneratedColumn clientId = GeneratedColumn( + 'client_id', aliasedName, false, + type: DriftSqlType.string, + requiredDuringInsert: false, + defaultValue: const CustomExpression('\'\'')); + late final GeneratedColumn rev = GeneratedColumn( + 'rev', aliasedName, true, + type: DriftSqlType.string, + requiredDuringInsert: false, + defaultValue: const CustomExpression('\'1\'')); + late final GeneratedColumn createdAt = GeneratedColumn( + 'created_at', aliasedName, false, + type: DriftSqlType.dateTime, + requiredDuringInsert: false, + defaultValue: const CustomExpression('CURRENT_TIMESTAMP')); + late final GeneratedColumn updatedAt = GeneratedColumn( + 'updated_at', aliasedName, false, + type: DriftSqlType.dateTime, + requiredDuringInsert: false, + defaultValue: const CustomExpression('CURRENT_TIMESTAMP')); + late final GeneratedColumn deletedAt = GeneratedColumn( + 'deleted_at', aliasedName, true, + type: DriftSqlType.dateTime, requiredDuringInsert: false); + late final GeneratedColumn lastSyncedAt = GeneratedColumn( + 'last_synced_at', aliasedName, true, + type: DriftSqlType.dateTime, requiredDuringInsert: false); + late final GeneratedColumn name = GeneratedColumn( + 'name', aliasedName, false, + type: DriftSqlType.string, requiredDuringInsert: true); + late final GeneratedColumn description = GeneratedColumn( + 'description', aliasedName, true, + type: DriftSqlType.string, requiredDuringInsert: false); + late final GeneratedColumn icon = GeneratedColumn( + 'icon', aliasedName, true, + type: DriftSqlType.string, requiredDuringInsert: false); + @override + List get $columns => [ + id, + userId, + clientId, + rev, + createdAt, + updatedAt, + deletedAt, + lastSyncedAt, + name, + description, + icon + ]; + @override + String get aliasedName => _alias ?? actualTableName; + @override + String get actualTableName => $name; + static const String $name = 'groups'; + @override + Set get $primaryKey => {clientId}; + @override + GroupsData map(Map data, {String? tablePrefix}) { + final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; + return GroupsData( + id: attachedDatabase.typeMapping + .read(DriftSqlType.int, data['${effectivePrefix}id']), + userId: attachedDatabase.typeMapping + .read(DriftSqlType.int, data['${effectivePrefix}user_id']), + clientId: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}client_id'])!, + rev: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}rev']), + createdAt: attachedDatabase.typeMapping + .read(DriftSqlType.dateTime, data['${effectivePrefix}created_at'])!, + updatedAt: attachedDatabase.typeMapping + .read(DriftSqlType.dateTime, data['${effectivePrefix}updated_at'])!, + deletedAt: attachedDatabase.typeMapping + .read(DriftSqlType.dateTime, data['${effectivePrefix}deleted_at']), + lastSyncedAt: attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, data['${effectivePrefix}last_synced_at']), + name: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}name'])!, + description: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}description']), + icon: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}icon']), + ); + } + + @override + Groups createAlias(String alias) { + return Groups(attachedDatabase, alias); + } +} + +class GroupsData extends DataClass implements Insertable { + final int? id; + final int? userId; + final String clientId; + final String? rev; + final DateTime createdAt; + final DateTime updatedAt; + final DateTime? deletedAt; + final DateTime? lastSyncedAt; + final String name; + final String? description; + final String? icon; + const GroupsData( + {this.id, + this.userId, + required this.clientId, + this.rev, + required this.createdAt, + required this.updatedAt, + this.deletedAt, + this.lastSyncedAt, + required this.name, + this.description, + this.icon}); + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + if (!nullToAbsent || id != null) { + map['id'] = Variable(id); + } + if (!nullToAbsent || userId != null) { + map['user_id'] = Variable(userId); + } + map['client_id'] = Variable(clientId); + if (!nullToAbsent || rev != null) { + map['rev'] = Variable(rev); + } + map['created_at'] = Variable(createdAt); + map['updated_at'] = Variable(updatedAt); + if (!nullToAbsent || deletedAt != null) { + map['deleted_at'] = Variable(deletedAt); + } + if (!nullToAbsent || lastSyncedAt != null) { + map['last_synced_at'] = Variable(lastSyncedAt); + } + map['name'] = Variable(name); + if (!nullToAbsent || description != null) { + map['description'] = Variable(description); + } + if (!nullToAbsent || icon != null) { + map['icon'] = Variable(icon); + } + return map; + } + + GroupsCompanion toCompanion(bool nullToAbsent) { + return GroupsCompanion( + id: id == null && nullToAbsent ? const Value.absent() : Value(id), + userId: + userId == null && nullToAbsent ? const Value.absent() : Value(userId), + clientId: Value(clientId), + rev: rev == null && nullToAbsent ? const Value.absent() : Value(rev), + createdAt: Value(createdAt), + updatedAt: Value(updatedAt), + deletedAt: deletedAt == null && nullToAbsent + ? const Value.absent() + : Value(deletedAt), + lastSyncedAt: lastSyncedAt == null && nullToAbsent + ? const Value.absent() + : Value(lastSyncedAt), + name: Value(name), + description: description == null && nullToAbsent + ? const Value.absent() + : Value(description), + icon: icon == null && nullToAbsent ? const Value.absent() : Value(icon), + ); + } + + factory GroupsData.fromJson(Map json, + {ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return GroupsData( + id: serializer.fromJson(json['id']), + userId: serializer.fromJson(json['userId']), + clientId: serializer.fromJson(json['clientId']), + rev: serializer.fromJson(json['rev']), + createdAt: serializer.fromJson(json['createdAt']), + updatedAt: serializer.fromJson(json['updatedAt']), + deletedAt: serializer.fromJson(json['deletedAt']), + lastSyncedAt: serializer.fromJson(json['lastSyncedAt']), + name: serializer.fromJson(json['name']), + description: serializer.fromJson(json['description']), + icon: serializer.fromJson(json['icon']), + ); + } + @override + Map toJson({ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return { + 'id': serializer.toJson(id), + 'userId': serializer.toJson(userId), + 'clientId': serializer.toJson(clientId), + 'rev': serializer.toJson(rev), + 'createdAt': serializer.toJson(createdAt), + 'updatedAt': serializer.toJson(updatedAt), + 'deletedAt': serializer.toJson(deletedAt), + 'lastSyncedAt': serializer.toJson(lastSyncedAt), + 'name': serializer.toJson(name), + 'description': serializer.toJson(description), + 'icon': serializer.toJson(icon), + }; + } + + GroupsData copyWith( + {Value id = const Value.absent(), + Value userId = const Value.absent(), + String? clientId, + Value rev = const Value.absent(), + DateTime? createdAt, + DateTime? updatedAt, + Value deletedAt = const Value.absent(), + Value lastSyncedAt = const Value.absent(), + String? name, + Value description = const Value.absent(), + Value icon = const Value.absent()}) => + GroupsData( + id: id.present ? id.value : this.id, + userId: userId.present ? userId.value : this.userId, + clientId: clientId ?? this.clientId, + rev: rev.present ? rev.value : this.rev, + createdAt: createdAt ?? this.createdAt, + updatedAt: updatedAt ?? this.updatedAt, + deletedAt: deletedAt.present ? deletedAt.value : this.deletedAt, + lastSyncedAt: + lastSyncedAt.present ? lastSyncedAt.value : this.lastSyncedAt, + name: name ?? this.name, + description: description.present ? description.value : this.description, + icon: icon.present ? icon.value : this.icon, + ); + GroupsData copyWithCompanion(GroupsCompanion data) { + return GroupsData( + id: data.id.present ? data.id.value : this.id, + userId: data.userId.present ? data.userId.value : this.userId, + clientId: data.clientId.present ? data.clientId.value : this.clientId, + rev: data.rev.present ? data.rev.value : this.rev, + createdAt: data.createdAt.present ? data.createdAt.value : this.createdAt, + updatedAt: data.updatedAt.present ? data.updatedAt.value : this.updatedAt, + deletedAt: data.deletedAt.present ? data.deletedAt.value : this.deletedAt, + lastSyncedAt: data.lastSyncedAt.present + ? data.lastSyncedAt.value + : this.lastSyncedAt, + name: data.name.present ? data.name.value : this.name, + description: + data.description.present ? data.description.value : this.description, + icon: data.icon.present ? data.icon.value : this.icon, + ); + } + + @override + String toString() { + return (StringBuffer('GroupsData(') + ..write('id: $id, ') + ..write('userId: $userId, ') + ..write('clientId: $clientId, ') + ..write('rev: $rev, ') + ..write('createdAt: $createdAt, ') + ..write('updatedAt: $updatedAt, ') + ..write('deletedAt: $deletedAt, ') + ..write('lastSyncedAt: $lastSyncedAt, ') + ..write('name: $name, ') + ..write('description: $description, ') + ..write('icon: $icon') + ..write(')')) + .toString(); + } + + @override + int get hashCode => Object.hash(id, userId, clientId, rev, createdAt, + updatedAt, deletedAt, lastSyncedAt, name, description, icon); + @override + bool operator ==(Object other) => + identical(this, other) || + (other is GroupsData && + other.id == this.id && + other.userId == this.userId && + other.clientId == this.clientId && + other.rev == this.rev && + other.createdAt == this.createdAt && + other.updatedAt == this.updatedAt && + other.deletedAt == this.deletedAt && + other.lastSyncedAt == this.lastSyncedAt && + other.name == this.name && + other.description == this.description && + other.icon == this.icon); +} + +class GroupsCompanion extends UpdateCompanion { + final Value id; + final Value userId; + final Value clientId; + final Value rev; + final Value createdAt; + final Value updatedAt; + final Value deletedAt; + final Value lastSyncedAt; + final Value name; + final Value description; + final Value icon; + final Value rowid; + const GroupsCompanion({ + this.id = const Value.absent(), + this.userId = const Value.absent(), + this.clientId = const Value.absent(), + this.rev = const Value.absent(), + this.createdAt = const Value.absent(), + this.updatedAt = const Value.absent(), + this.deletedAt = const Value.absent(), + this.lastSyncedAt = const Value.absent(), + this.name = const Value.absent(), + this.description = const Value.absent(), + this.icon = const Value.absent(), + this.rowid = const Value.absent(), + }); + GroupsCompanion.insert({ + this.id = const Value.absent(), + this.userId = const Value.absent(), + this.clientId = const Value.absent(), + this.rev = const Value.absent(), + this.createdAt = const Value.absent(), + this.updatedAt = const Value.absent(), + this.deletedAt = const Value.absent(), + this.lastSyncedAt = const Value.absent(), + required String name, + this.description = const Value.absent(), + this.icon = const Value.absent(), + this.rowid = const Value.absent(), + }) : name = Value(name); + static Insertable custom({ + Expression? id, + Expression? userId, + Expression? clientId, + Expression? rev, + Expression? createdAt, + Expression? updatedAt, + Expression? deletedAt, + Expression? lastSyncedAt, + Expression? name, + Expression? description, + Expression? icon, + Expression? rowid, + }) { + return RawValuesInsertable({ + if (id != null) 'id': id, + if (userId != null) 'user_id': userId, + if (clientId != null) 'client_id': clientId, + if (rev != null) 'rev': rev, + if (createdAt != null) 'created_at': createdAt, + if (updatedAt != null) 'updated_at': updatedAt, + if (deletedAt != null) 'deleted_at': deletedAt, + if (lastSyncedAt != null) 'last_synced_at': lastSyncedAt, + if (name != null) 'name': name, + if (description != null) 'description': description, + if (icon != null) 'icon': icon, + if (rowid != null) 'rowid': rowid, + }); + } + + GroupsCompanion copyWith( + {Value? id, + Value? userId, + Value? clientId, + Value? rev, + Value? createdAt, + Value? updatedAt, + Value? deletedAt, + Value? lastSyncedAt, + Value? name, + Value? description, + Value? icon, + Value? rowid}) { + return GroupsCompanion( + id: id ?? this.id, + userId: userId ?? this.userId, + clientId: clientId ?? this.clientId, + rev: rev ?? this.rev, + createdAt: createdAt ?? this.createdAt, + updatedAt: updatedAt ?? this.updatedAt, + deletedAt: deletedAt ?? this.deletedAt, + lastSyncedAt: lastSyncedAt ?? this.lastSyncedAt, + name: name ?? this.name, + description: description ?? this.description, + icon: icon ?? this.icon, + rowid: rowid ?? this.rowid, + ); + } + + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + if (id.present) { + map['id'] = Variable(id.value); + } + if (userId.present) { + map['user_id'] = Variable(userId.value); + } + if (clientId.present) { + map['client_id'] = Variable(clientId.value); + } + if (rev.present) { + map['rev'] = Variable(rev.value); + } + if (createdAt.present) { + map['created_at'] = Variable(createdAt.value); + } + if (updatedAt.present) { + map['updated_at'] = Variable(updatedAt.value); + } + if (deletedAt.present) { + map['deleted_at'] = Variable(deletedAt.value); + } + if (lastSyncedAt.present) { + map['last_synced_at'] = Variable(lastSyncedAt.value); + } + if (name.present) { + map['name'] = Variable(name.value); + } + if (description.present) { + map['description'] = Variable(description.value); + } + if (icon.present) { + map['icon'] = Variable(icon.value); + } + if (rowid.present) { + map['rowid'] = Variable(rowid.value); + } + return map; + } + + @override + String toString() { + return (StringBuffer('GroupsCompanion(') + ..write('id: $id, ') + ..write('userId: $userId, ') + ..write('clientId: $clientId, ') + ..write('rev: $rev, ') + ..write('createdAt: $createdAt, ') + ..write('updatedAt: $updatedAt, ') + ..write('deletedAt: $deletedAt, ') + ..write('lastSyncedAt: $lastSyncedAt, ') + ..write('name: $name, ') + ..write('description: $description, ') + ..write('icon: $icon, ') + ..write('rowid: $rowid') + ..write(')')) + .toString(); + } +} + +class Transactions extends Table + with TableInfo { + @override + final GeneratedDatabase attachedDatabase; + final String? _alias; + Transactions(this.attachedDatabase, [this._alias]); + late final GeneratedColumn id = GeneratedColumn( + 'id', aliasedName, true, + type: DriftSqlType.int, + requiredDuringInsert: false, + defaultConstraints: GeneratedColumn.constraintIsAlways('UNIQUE')); + late final GeneratedColumn userId = GeneratedColumn( + 'user_id', aliasedName, true, + type: DriftSqlType.int, requiredDuringInsert: false); + late final GeneratedColumn clientId = GeneratedColumn( + 'client_id', aliasedName, false, + type: DriftSqlType.string, + requiredDuringInsert: false, + defaultValue: const CustomExpression('\'\'')); + late final GeneratedColumn rev = GeneratedColumn( + 'rev', aliasedName, true, + type: DriftSqlType.string, + requiredDuringInsert: false, + defaultValue: const CustomExpression('\'1\'')); + late final GeneratedColumn createdAt = GeneratedColumn( + 'created_at', aliasedName, false, + type: DriftSqlType.dateTime, + requiredDuringInsert: false, + defaultValue: const CustomExpression('CURRENT_TIMESTAMP')); + late final GeneratedColumn updatedAt = GeneratedColumn( + 'updated_at', aliasedName, false, + type: DriftSqlType.dateTime, + requiredDuringInsert: false, + defaultValue: const CustomExpression('CURRENT_TIMESTAMP')); + late final GeneratedColumn deletedAt = GeneratedColumn( + 'deleted_at', aliasedName, true, + type: DriftSqlType.dateTime, requiredDuringInsert: false); + late final GeneratedColumn lastSyncedAt = GeneratedColumn( + 'last_synced_at', aliasedName, true, + type: DriftSqlType.dateTime, requiredDuringInsert: false); + late final GeneratedColumn amount = GeneratedColumn( + 'amount', aliasedName, false, + type: DriftSqlType.double, requiredDuringInsert: true); + late final GeneratedColumn type = GeneratedColumn( + 'type', aliasedName, false, + type: DriftSqlType.string, requiredDuringInsert: true); + late final GeneratedColumn intent = GeneratedColumn( + 'intent', aliasedName, false, + type: DriftSqlType.string, + requiredDuringInsert: false, + defaultValue: const CustomExpression('\'regular\'')); + late final GeneratedColumn description = GeneratedColumn( + 'description', aliasedName, true, + type: DriftSqlType.string, requiredDuringInsert: false); + late final GeneratedColumn datetime = GeneratedColumn( + 'datetime', aliasedName, true, + type: DriftSqlType.dateTime, requiredDuringInsert: false); + late final GeneratedColumn partyId = GeneratedColumn( + 'party_id', aliasedName, true, + type: DriftSqlType.int, requiredDuringInsert: false); + late final GeneratedColumn walletId = GeneratedColumn( + 'wallet_id', aliasedName, true, + type: DriftSqlType.int, requiredDuringInsert: false); + late final GeneratedColumn groupId = GeneratedColumn( + 'group_id', aliasedName, true, + type: DriftSqlType.int, requiredDuringInsert: false); + late final GeneratedColumn walletClientId = GeneratedColumn( + 'wallet_client_id', aliasedName, false, + type: DriftSqlType.string, + requiredDuringInsert: true, + defaultConstraints: + GeneratedColumn.constraintIsAlways('REFERENCES wallets (client_id)')); + late final GeneratedColumn partyClientId = GeneratedColumn( + 'party_client_id', aliasedName, true, + type: DriftSqlType.string, + requiredDuringInsert: false, + defaultConstraints: + GeneratedColumn.constraintIsAlways('REFERENCES parties (client_id)')); + late final GeneratedColumn groupClientId = GeneratedColumn( + 'group_client_id', aliasedName, true, + type: DriftSqlType.string, + requiredDuringInsert: false, + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'REFERENCES "groups" (client_id)')); + late final GeneratedColumn transferId = GeneratedColumn( + 'transfer_id', aliasedName, true, + type: DriftSqlType.int, requiredDuringInsert: false); + late final GeneratedColumn transferClientId = GeneratedColumn( + 'transfer_client_id', aliasedName, true, + type: DriftSqlType.string, requiredDuringInsert: false); + late final GeneratedColumn isRefund = GeneratedColumn( + 'is_refund', aliasedName, false, + type: DriftSqlType.bool, + requiredDuringInsert: false, + defaultConstraints: + GeneratedColumn.constraintIsAlways('CHECK ("is_refund" IN (0, 1))'), + defaultValue: const CustomExpression('0')); + late final GeneratedColumn refundOfTransactionId = GeneratedColumn( + 'refund_of_transaction_id', aliasedName, true, + type: DriftSqlType.int, requiredDuringInsert: false); + late final GeneratedColumn recurrencePeriod = GeneratedColumn( + 'recurrence_period', aliasedName, true, + type: DriftSqlType.string, requiredDuringInsert: false); + late final GeneratedColumn recurrenceInterval = GeneratedColumn( + 'recurrence_interval', aliasedName, true, + type: DriftSqlType.int, requiredDuringInsert: false); + late final GeneratedColumn recurrenceEndsAt = + GeneratedColumn('recurrence_ends_at', aliasedName, true, + type: DriftSqlType.dateTime, requiredDuringInsert: false); + late final GeneratedColumn recurrenceNextScheduledAt = + GeneratedColumn( + 'recurrence_next_scheduled_at', aliasedName, true, + type: DriftSqlType.dateTime, requiredDuringInsert: false); + @override + List get $columns => [ + id, + userId, + clientId, + rev, + createdAt, + updatedAt, + deletedAt, + lastSyncedAt, + amount, + type, + intent, + description, + datetime, + partyId, + walletId, + groupId, + walletClientId, + partyClientId, + groupClientId, + transferId, + transferClientId, + isRefund, + refundOfTransactionId, + recurrencePeriod, + recurrenceInterval, + recurrenceEndsAt, + recurrenceNextScheduledAt + ]; + @override + String get aliasedName => _alias ?? actualTableName; + @override + String get actualTableName => $name; + static const String $name = 'transactions'; + @override + Set get $primaryKey => {clientId}; + @override + TransactionsData map(Map data, {String? tablePrefix}) { + final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; + return TransactionsData( + id: attachedDatabase.typeMapping + .read(DriftSqlType.int, data['${effectivePrefix}id']), + userId: attachedDatabase.typeMapping + .read(DriftSqlType.int, data['${effectivePrefix}user_id']), + clientId: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}client_id'])!, + rev: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}rev']), + createdAt: attachedDatabase.typeMapping + .read(DriftSqlType.dateTime, data['${effectivePrefix}created_at'])!, + updatedAt: attachedDatabase.typeMapping + .read(DriftSqlType.dateTime, data['${effectivePrefix}updated_at'])!, + deletedAt: attachedDatabase.typeMapping + .read(DriftSqlType.dateTime, data['${effectivePrefix}deleted_at']), + lastSyncedAt: attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, data['${effectivePrefix}last_synced_at']), + amount: attachedDatabase.typeMapping + .read(DriftSqlType.double, data['${effectivePrefix}amount'])!, + type: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}type'])!, + intent: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}intent'])!, + description: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}description']), + datetime: attachedDatabase.typeMapping + .read(DriftSqlType.dateTime, data['${effectivePrefix}datetime']), + partyId: attachedDatabase.typeMapping + .read(DriftSqlType.int, data['${effectivePrefix}party_id']), + walletId: attachedDatabase.typeMapping + .read(DriftSqlType.int, data['${effectivePrefix}wallet_id']), + groupId: attachedDatabase.typeMapping + .read(DriftSqlType.int, data['${effectivePrefix}group_id']), + walletClientId: attachedDatabase.typeMapping.read( + DriftSqlType.string, data['${effectivePrefix}wallet_client_id'])!, + partyClientId: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}party_client_id']), + groupClientId: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}group_client_id']), + transferId: attachedDatabase.typeMapping + .read(DriftSqlType.int, data['${effectivePrefix}transfer_id']), + transferClientId: attachedDatabase.typeMapping.read( + DriftSqlType.string, data['${effectivePrefix}transfer_client_id']), + isRefund: attachedDatabase.typeMapping + .read(DriftSqlType.bool, data['${effectivePrefix}is_refund'])!, + refundOfTransactionId: attachedDatabase.typeMapping.read( + DriftSqlType.int, data['${effectivePrefix}refund_of_transaction_id']), + recurrencePeriod: attachedDatabase.typeMapping.read( + DriftSqlType.string, data['${effectivePrefix}recurrence_period']), + recurrenceInterval: attachedDatabase.typeMapping.read( + DriftSqlType.int, data['${effectivePrefix}recurrence_interval']), + recurrenceEndsAt: attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, data['${effectivePrefix}recurrence_ends_at']), + recurrenceNextScheduledAt: attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, + data['${effectivePrefix}recurrence_next_scheduled_at']), + ); + } + + @override + Transactions createAlias(String alias) { + return Transactions(attachedDatabase, alias); + } +} + +class TransactionsData extends DataClass + implements Insertable { + final int? id; + final int? userId; + final String clientId; + final String? rev; + final DateTime createdAt; + final DateTime updatedAt; + final DateTime? deletedAt; + final DateTime? lastSyncedAt; + final double amount; + final String type; + final String intent; + final String? description; + final DateTime? datetime; + final int? partyId; + final int? walletId; + final int? groupId; + final String walletClientId; + final String? partyClientId; + final String? groupClientId; + final int? transferId; + final String? transferClientId; + final bool isRefund; + final int? refundOfTransactionId; + final String? recurrencePeriod; + final int? recurrenceInterval; + final DateTime? recurrenceEndsAt; + final DateTime? recurrenceNextScheduledAt; + const TransactionsData( + {this.id, + this.userId, + required this.clientId, + this.rev, + required this.createdAt, + required this.updatedAt, + this.deletedAt, + this.lastSyncedAt, + required this.amount, + required this.type, + required this.intent, + this.description, + this.datetime, + this.partyId, + this.walletId, + this.groupId, + required this.walletClientId, + this.partyClientId, + this.groupClientId, + this.transferId, + this.transferClientId, + required this.isRefund, + this.refundOfTransactionId, + this.recurrencePeriod, + this.recurrenceInterval, + this.recurrenceEndsAt, + this.recurrenceNextScheduledAt}); + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + if (!nullToAbsent || id != null) { + map['id'] = Variable(id); + } + if (!nullToAbsent || userId != null) { + map['user_id'] = Variable(userId); + } + map['client_id'] = Variable(clientId); + if (!nullToAbsent || rev != null) { + map['rev'] = Variable(rev); + } + map['created_at'] = Variable(createdAt); + map['updated_at'] = Variable(updatedAt); + if (!nullToAbsent || deletedAt != null) { + map['deleted_at'] = Variable(deletedAt); + } + if (!nullToAbsent || lastSyncedAt != null) { + map['last_synced_at'] = Variable(lastSyncedAt); + } + map['amount'] = Variable(amount); + map['type'] = Variable(type); + map['intent'] = Variable(intent); + if (!nullToAbsent || description != null) { + map['description'] = Variable(description); + } + if (!nullToAbsent || datetime != null) { + map['datetime'] = Variable(datetime); + } + if (!nullToAbsent || partyId != null) { + map['party_id'] = Variable(partyId); + } + if (!nullToAbsent || walletId != null) { + map['wallet_id'] = Variable(walletId); + } + if (!nullToAbsent || groupId != null) { + map['group_id'] = Variable(groupId); + } + map['wallet_client_id'] = Variable(walletClientId); + if (!nullToAbsent || partyClientId != null) { + map['party_client_id'] = Variable(partyClientId); + } + if (!nullToAbsent || groupClientId != null) { + map['group_client_id'] = Variable(groupClientId); + } + if (!nullToAbsent || transferId != null) { + map['transfer_id'] = Variable(transferId); + } + if (!nullToAbsent || transferClientId != null) { + map['transfer_client_id'] = Variable(transferClientId); + } + map['is_refund'] = Variable(isRefund); + if (!nullToAbsent || refundOfTransactionId != null) { + map['refund_of_transaction_id'] = Variable(refundOfTransactionId); + } + if (!nullToAbsent || recurrencePeriod != null) { + map['recurrence_period'] = Variable(recurrencePeriod); + } + if (!nullToAbsent || recurrenceInterval != null) { + map['recurrence_interval'] = Variable(recurrenceInterval); + } + if (!nullToAbsent || recurrenceEndsAt != null) { + map['recurrence_ends_at'] = Variable(recurrenceEndsAt); + } + if (!nullToAbsent || recurrenceNextScheduledAt != null) { + map['recurrence_next_scheduled_at'] = + Variable(recurrenceNextScheduledAt); + } + return map; + } + + TransactionsCompanion toCompanion(bool nullToAbsent) { + return TransactionsCompanion( + id: id == null && nullToAbsent ? const Value.absent() : Value(id), + userId: + userId == null && nullToAbsent ? const Value.absent() : Value(userId), + clientId: Value(clientId), + rev: rev == null && nullToAbsent ? const Value.absent() : Value(rev), + createdAt: Value(createdAt), + updatedAt: Value(updatedAt), + deletedAt: deletedAt == null && nullToAbsent + ? const Value.absent() + : Value(deletedAt), + lastSyncedAt: lastSyncedAt == null && nullToAbsent + ? const Value.absent() + : Value(lastSyncedAt), + amount: Value(amount), + type: Value(type), + intent: Value(intent), + description: description == null && nullToAbsent + ? const Value.absent() + : Value(description), + datetime: datetime == null && nullToAbsent + ? const Value.absent() + : Value(datetime), + partyId: partyId == null && nullToAbsent + ? const Value.absent() + : Value(partyId), + walletId: walletId == null && nullToAbsent + ? const Value.absent() + : Value(walletId), + groupId: groupId == null && nullToAbsent + ? const Value.absent() + : Value(groupId), + walletClientId: Value(walletClientId), + partyClientId: partyClientId == null && nullToAbsent + ? const Value.absent() + : Value(partyClientId), + groupClientId: groupClientId == null && nullToAbsent + ? const Value.absent() + : Value(groupClientId), + transferId: transferId == null && nullToAbsent + ? const Value.absent() + : Value(transferId), + transferClientId: transferClientId == null && nullToAbsent + ? const Value.absent() + : Value(transferClientId), + isRefund: Value(isRefund), + refundOfTransactionId: refundOfTransactionId == null && nullToAbsent + ? const Value.absent() + : Value(refundOfTransactionId), + recurrencePeriod: recurrencePeriod == null && nullToAbsent + ? const Value.absent() + : Value(recurrencePeriod), + recurrenceInterval: recurrenceInterval == null && nullToAbsent + ? const Value.absent() + : Value(recurrenceInterval), + recurrenceEndsAt: recurrenceEndsAt == null && nullToAbsent + ? const Value.absent() + : Value(recurrenceEndsAt), + recurrenceNextScheduledAt: + recurrenceNextScheduledAt == null && nullToAbsent + ? const Value.absent() + : Value(recurrenceNextScheduledAt), + ); + } + + factory TransactionsData.fromJson(Map json, + {ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return TransactionsData( + id: serializer.fromJson(json['id']), + userId: serializer.fromJson(json['userId']), + clientId: serializer.fromJson(json['clientId']), + rev: serializer.fromJson(json['rev']), + createdAt: serializer.fromJson(json['createdAt']), + updatedAt: serializer.fromJson(json['updatedAt']), + deletedAt: serializer.fromJson(json['deletedAt']), + lastSyncedAt: serializer.fromJson(json['lastSyncedAt']), + amount: serializer.fromJson(json['amount']), + type: serializer.fromJson(json['type']), + intent: serializer.fromJson(json['intent']), + description: serializer.fromJson(json['description']), + datetime: serializer.fromJson(json['datetime']), + partyId: serializer.fromJson(json['partyId']), + walletId: serializer.fromJson(json['walletId']), + groupId: serializer.fromJson(json['groupId']), + walletClientId: serializer.fromJson(json['walletClientId']), + partyClientId: serializer.fromJson(json['partyClientId']), + groupClientId: serializer.fromJson(json['groupClientId']), + transferId: serializer.fromJson(json['transferId']), + transferClientId: serializer.fromJson(json['transferClientId']), + isRefund: serializer.fromJson(json['isRefund']), + refundOfTransactionId: + serializer.fromJson(json['refundOfTransactionId']), + recurrencePeriod: serializer.fromJson(json['recurrencePeriod']), + recurrenceInterval: serializer.fromJson(json['recurrenceInterval']), + recurrenceEndsAt: + serializer.fromJson(json['recurrenceEndsAt']), + recurrenceNextScheduledAt: + serializer.fromJson(json['recurrenceNextScheduledAt']), + ); + } + @override + Map toJson({ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return { + 'id': serializer.toJson(id), + 'userId': serializer.toJson(userId), + 'clientId': serializer.toJson(clientId), + 'rev': serializer.toJson(rev), + 'createdAt': serializer.toJson(createdAt), + 'updatedAt': serializer.toJson(updatedAt), + 'deletedAt': serializer.toJson(deletedAt), + 'lastSyncedAt': serializer.toJson(lastSyncedAt), + 'amount': serializer.toJson(amount), + 'type': serializer.toJson(type), + 'intent': serializer.toJson(intent), + 'description': serializer.toJson(description), + 'datetime': serializer.toJson(datetime), + 'partyId': serializer.toJson(partyId), + 'walletId': serializer.toJson(walletId), + 'groupId': serializer.toJson(groupId), + 'walletClientId': serializer.toJson(walletClientId), + 'partyClientId': serializer.toJson(partyClientId), + 'groupClientId': serializer.toJson(groupClientId), + 'transferId': serializer.toJson(transferId), + 'transferClientId': serializer.toJson(transferClientId), + 'isRefund': serializer.toJson(isRefund), + 'refundOfTransactionId': serializer.toJson(refundOfTransactionId), + 'recurrencePeriod': serializer.toJson(recurrencePeriod), + 'recurrenceInterval': serializer.toJson(recurrenceInterval), + 'recurrenceEndsAt': serializer.toJson(recurrenceEndsAt), + 'recurrenceNextScheduledAt': + serializer.toJson(recurrenceNextScheduledAt), + }; + } + + TransactionsData copyWith( + {Value id = const Value.absent(), + Value userId = const Value.absent(), + String? clientId, + Value rev = const Value.absent(), + DateTime? createdAt, + DateTime? updatedAt, + Value deletedAt = const Value.absent(), + Value lastSyncedAt = const Value.absent(), + double? amount, + String? type, + String? intent, + Value description = const Value.absent(), + Value datetime = const Value.absent(), + Value partyId = const Value.absent(), + Value walletId = const Value.absent(), + Value groupId = const Value.absent(), + String? walletClientId, + Value partyClientId = const Value.absent(), + Value groupClientId = const Value.absent(), + Value transferId = const Value.absent(), + Value transferClientId = const Value.absent(), + bool? isRefund, + Value refundOfTransactionId = const Value.absent(), + Value recurrencePeriod = const Value.absent(), + Value recurrenceInterval = const Value.absent(), + Value recurrenceEndsAt = const Value.absent(), + Value recurrenceNextScheduledAt = const Value.absent()}) => + TransactionsData( + id: id.present ? id.value : this.id, + userId: userId.present ? userId.value : this.userId, + clientId: clientId ?? this.clientId, + rev: rev.present ? rev.value : this.rev, + createdAt: createdAt ?? this.createdAt, + updatedAt: updatedAt ?? this.updatedAt, + deletedAt: deletedAt.present ? deletedAt.value : this.deletedAt, + lastSyncedAt: + lastSyncedAt.present ? lastSyncedAt.value : this.lastSyncedAt, + amount: amount ?? this.amount, + type: type ?? this.type, + intent: intent ?? this.intent, + description: description.present ? description.value : this.description, + datetime: datetime.present ? datetime.value : this.datetime, + partyId: partyId.present ? partyId.value : this.partyId, + walletId: walletId.present ? walletId.value : this.walletId, + groupId: groupId.present ? groupId.value : this.groupId, + walletClientId: walletClientId ?? this.walletClientId, + partyClientId: + partyClientId.present ? partyClientId.value : this.partyClientId, + groupClientId: + groupClientId.present ? groupClientId.value : this.groupClientId, + transferId: transferId.present ? transferId.value : this.transferId, + transferClientId: transferClientId.present + ? transferClientId.value + : this.transferClientId, + isRefund: isRefund ?? this.isRefund, + refundOfTransactionId: refundOfTransactionId.present + ? refundOfTransactionId.value + : this.refundOfTransactionId, + recurrencePeriod: recurrencePeriod.present + ? recurrencePeriod.value + : this.recurrencePeriod, + recurrenceInterval: recurrenceInterval.present + ? recurrenceInterval.value + : this.recurrenceInterval, + recurrenceEndsAt: recurrenceEndsAt.present + ? recurrenceEndsAt.value + : this.recurrenceEndsAt, + recurrenceNextScheduledAt: recurrenceNextScheduledAt.present + ? recurrenceNextScheduledAt.value + : this.recurrenceNextScheduledAt, + ); + TransactionsData copyWithCompanion(TransactionsCompanion data) { + return TransactionsData( + id: data.id.present ? data.id.value : this.id, + userId: data.userId.present ? data.userId.value : this.userId, + clientId: data.clientId.present ? data.clientId.value : this.clientId, + rev: data.rev.present ? data.rev.value : this.rev, + createdAt: data.createdAt.present ? data.createdAt.value : this.createdAt, + updatedAt: data.updatedAt.present ? data.updatedAt.value : this.updatedAt, + deletedAt: data.deletedAt.present ? data.deletedAt.value : this.deletedAt, + lastSyncedAt: data.lastSyncedAt.present + ? data.lastSyncedAt.value + : this.lastSyncedAt, + amount: data.amount.present ? data.amount.value : this.amount, + type: data.type.present ? data.type.value : this.type, + intent: data.intent.present ? data.intent.value : this.intent, + description: + data.description.present ? data.description.value : this.description, + datetime: data.datetime.present ? data.datetime.value : this.datetime, + partyId: data.partyId.present ? data.partyId.value : this.partyId, + walletId: data.walletId.present ? data.walletId.value : this.walletId, + groupId: data.groupId.present ? data.groupId.value : this.groupId, + walletClientId: data.walletClientId.present + ? data.walletClientId.value + : this.walletClientId, + partyClientId: data.partyClientId.present + ? data.partyClientId.value + : this.partyClientId, + groupClientId: data.groupClientId.present + ? data.groupClientId.value + : this.groupClientId, + transferId: + data.transferId.present ? data.transferId.value : this.transferId, + transferClientId: data.transferClientId.present + ? data.transferClientId.value + : this.transferClientId, + isRefund: data.isRefund.present ? data.isRefund.value : this.isRefund, + refundOfTransactionId: data.refundOfTransactionId.present + ? data.refundOfTransactionId.value + : this.refundOfTransactionId, + recurrencePeriod: data.recurrencePeriod.present + ? data.recurrencePeriod.value + : this.recurrencePeriod, + recurrenceInterval: data.recurrenceInterval.present + ? data.recurrenceInterval.value + : this.recurrenceInterval, + recurrenceEndsAt: data.recurrenceEndsAt.present + ? data.recurrenceEndsAt.value + : this.recurrenceEndsAt, + recurrenceNextScheduledAt: data.recurrenceNextScheduledAt.present + ? data.recurrenceNextScheduledAt.value + : this.recurrenceNextScheduledAt, + ); + } + + @override + String toString() { + return (StringBuffer('TransactionsData(') + ..write('id: $id, ') + ..write('userId: $userId, ') + ..write('clientId: $clientId, ') + ..write('rev: $rev, ') + ..write('createdAt: $createdAt, ') + ..write('updatedAt: $updatedAt, ') + ..write('deletedAt: $deletedAt, ') + ..write('lastSyncedAt: $lastSyncedAt, ') + ..write('amount: $amount, ') + ..write('type: $type, ') + ..write('intent: $intent, ') + ..write('description: $description, ') + ..write('datetime: $datetime, ') + ..write('partyId: $partyId, ') + ..write('walletId: $walletId, ') + ..write('groupId: $groupId, ') + ..write('walletClientId: $walletClientId, ') + ..write('partyClientId: $partyClientId, ') + ..write('groupClientId: $groupClientId, ') + ..write('transferId: $transferId, ') + ..write('transferClientId: $transferClientId, ') + ..write('isRefund: $isRefund, ') + ..write('refundOfTransactionId: $refundOfTransactionId, ') + ..write('recurrencePeriod: $recurrencePeriod, ') + ..write('recurrenceInterval: $recurrenceInterval, ') + ..write('recurrenceEndsAt: $recurrenceEndsAt, ') + ..write('recurrenceNextScheduledAt: $recurrenceNextScheduledAt') + ..write(')')) + .toString(); + } + + @override + int get hashCode => Object.hashAll([ + id, + userId, + clientId, + rev, + createdAt, + updatedAt, + deletedAt, + lastSyncedAt, + amount, + type, + intent, + description, + datetime, + partyId, + walletId, + groupId, + walletClientId, + partyClientId, + groupClientId, + transferId, + transferClientId, + isRefund, + refundOfTransactionId, + recurrencePeriod, + recurrenceInterval, + recurrenceEndsAt, + recurrenceNextScheduledAt + ]); + @override + bool operator ==(Object other) => + identical(this, other) || + (other is TransactionsData && + other.id == this.id && + other.userId == this.userId && + other.clientId == this.clientId && + other.rev == this.rev && + other.createdAt == this.createdAt && + other.updatedAt == this.updatedAt && + other.deletedAt == this.deletedAt && + other.lastSyncedAt == this.lastSyncedAt && + other.amount == this.amount && + other.type == this.type && + other.intent == this.intent && + other.description == this.description && + other.datetime == this.datetime && + other.partyId == this.partyId && + other.walletId == this.walletId && + other.groupId == this.groupId && + other.walletClientId == this.walletClientId && + other.partyClientId == this.partyClientId && + other.groupClientId == this.groupClientId && + other.transferId == this.transferId && + other.transferClientId == this.transferClientId && + other.isRefund == this.isRefund && + other.refundOfTransactionId == this.refundOfTransactionId && + other.recurrencePeriod == this.recurrencePeriod && + other.recurrenceInterval == this.recurrenceInterval && + other.recurrenceEndsAt == this.recurrenceEndsAt && + other.recurrenceNextScheduledAt == this.recurrenceNextScheduledAt); +} + +class TransactionsCompanion extends UpdateCompanion { + final Value id; + final Value userId; + final Value clientId; + final Value rev; + final Value createdAt; + final Value updatedAt; + final Value deletedAt; + final Value lastSyncedAt; + final Value amount; + final Value type; + final Value intent; + final Value description; + final Value datetime; + final Value partyId; + final Value walletId; + final Value groupId; + final Value walletClientId; + final Value partyClientId; + final Value groupClientId; + final Value transferId; + final Value transferClientId; + final Value isRefund; + final Value refundOfTransactionId; + final Value recurrencePeriod; + final Value recurrenceInterval; + final Value recurrenceEndsAt; + final Value recurrenceNextScheduledAt; + final Value rowid; + const TransactionsCompanion({ + this.id = const Value.absent(), + this.userId = const Value.absent(), + this.clientId = const Value.absent(), + this.rev = const Value.absent(), + this.createdAt = const Value.absent(), + this.updatedAt = const Value.absent(), + this.deletedAt = const Value.absent(), + this.lastSyncedAt = const Value.absent(), + this.amount = const Value.absent(), + this.type = const Value.absent(), + this.intent = const Value.absent(), + this.description = const Value.absent(), + this.datetime = const Value.absent(), + this.partyId = const Value.absent(), + this.walletId = const Value.absent(), + this.groupId = const Value.absent(), + this.walletClientId = const Value.absent(), + this.partyClientId = const Value.absent(), + this.groupClientId = const Value.absent(), + this.transferId = const Value.absent(), + this.transferClientId = const Value.absent(), + this.isRefund = const Value.absent(), + this.refundOfTransactionId = const Value.absent(), + this.recurrencePeriod = const Value.absent(), + this.recurrenceInterval = const Value.absent(), + this.recurrenceEndsAt = const Value.absent(), + this.recurrenceNextScheduledAt = const Value.absent(), + this.rowid = const Value.absent(), + }); + TransactionsCompanion.insert({ + this.id = const Value.absent(), + this.userId = const Value.absent(), + this.clientId = const Value.absent(), + this.rev = const Value.absent(), + this.createdAt = const Value.absent(), + this.updatedAt = const Value.absent(), + this.deletedAt = const Value.absent(), + this.lastSyncedAt = const Value.absent(), + required double amount, + required String type, + this.intent = const Value.absent(), + this.description = const Value.absent(), + this.datetime = const Value.absent(), + this.partyId = const Value.absent(), + this.walletId = const Value.absent(), + this.groupId = const Value.absent(), + required String walletClientId, + this.partyClientId = const Value.absent(), + this.groupClientId = const Value.absent(), + this.transferId = const Value.absent(), + this.transferClientId = const Value.absent(), + this.isRefund = const Value.absent(), + this.refundOfTransactionId = const Value.absent(), + this.recurrencePeriod = const Value.absent(), + this.recurrenceInterval = const Value.absent(), + this.recurrenceEndsAt = const Value.absent(), + this.recurrenceNextScheduledAt = const Value.absent(), + this.rowid = const Value.absent(), + }) : amount = Value(amount), + type = Value(type), + walletClientId = Value(walletClientId); + static Insertable custom({ + Expression? id, + Expression? userId, + Expression? clientId, + Expression? rev, + Expression? createdAt, + Expression? updatedAt, + Expression? deletedAt, + Expression? lastSyncedAt, + Expression? amount, + Expression? type, + Expression? intent, + Expression? description, + Expression? datetime, + Expression? partyId, + Expression? walletId, + Expression? groupId, + Expression? walletClientId, + Expression? partyClientId, + Expression? groupClientId, + Expression? transferId, + Expression? transferClientId, + Expression? isRefund, + Expression? refundOfTransactionId, + Expression? recurrencePeriod, + Expression? recurrenceInterval, + Expression? recurrenceEndsAt, + Expression? recurrenceNextScheduledAt, + Expression? rowid, + }) { + return RawValuesInsertable({ + if (id != null) 'id': id, + if (userId != null) 'user_id': userId, + if (clientId != null) 'client_id': clientId, + if (rev != null) 'rev': rev, + if (createdAt != null) 'created_at': createdAt, + if (updatedAt != null) 'updated_at': updatedAt, + if (deletedAt != null) 'deleted_at': deletedAt, + if (lastSyncedAt != null) 'last_synced_at': lastSyncedAt, + if (amount != null) 'amount': amount, + if (type != null) 'type': type, + if (intent != null) 'intent': intent, + if (description != null) 'description': description, + if (datetime != null) 'datetime': datetime, + if (partyId != null) 'party_id': partyId, + if (walletId != null) 'wallet_id': walletId, + if (groupId != null) 'group_id': groupId, + if (walletClientId != null) 'wallet_client_id': walletClientId, + if (partyClientId != null) 'party_client_id': partyClientId, + if (groupClientId != null) 'group_client_id': groupClientId, + if (transferId != null) 'transfer_id': transferId, + if (transferClientId != null) 'transfer_client_id': transferClientId, + if (isRefund != null) 'is_refund': isRefund, + if (refundOfTransactionId != null) + 'refund_of_transaction_id': refundOfTransactionId, + if (recurrencePeriod != null) 'recurrence_period': recurrencePeriod, + if (recurrenceInterval != null) 'recurrence_interval': recurrenceInterval, + if (recurrenceEndsAt != null) 'recurrence_ends_at': recurrenceEndsAt, + if (recurrenceNextScheduledAt != null) + 'recurrence_next_scheduled_at': recurrenceNextScheduledAt, + if (rowid != null) 'rowid': rowid, + }); + } + + TransactionsCompanion copyWith( + {Value? id, + Value? userId, + Value? clientId, + Value? rev, + Value? createdAt, + Value? updatedAt, + Value? deletedAt, + Value? lastSyncedAt, + Value? amount, + Value? type, + Value? intent, + Value? description, + Value? datetime, + Value? partyId, + Value? walletId, + Value? groupId, + Value? walletClientId, + Value? partyClientId, + Value? groupClientId, + Value? transferId, + Value? transferClientId, + Value? isRefund, + Value? refundOfTransactionId, + Value? recurrencePeriod, + Value? recurrenceInterval, + Value? recurrenceEndsAt, + Value? recurrenceNextScheduledAt, + Value? rowid}) { + return TransactionsCompanion( + id: id ?? this.id, + userId: userId ?? this.userId, + clientId: clientId ?? this.clientId, + rev: rev ?? this.rev, + createdAt: createdAt ?? this.createdAt, + updatedAt: updatedAt ?? this.updatedAt, + deletedAt: deletedAt ?? this.deletedAt, + lastSyncedAt: lastSyncedAt ?? this.lastSyncedAt, + amount: amount ?? this.amount, + type: type ?? this.type, + intent: intent ?? this.intent, + description: description ?? this.description, + datetime: datetime ?? this.datetime, + partyId: partyId ?? this.partyId, + walletId: walletId ?? this.walletId, + groupId: groupId ?? this.groupId, + walletClientId: walletClientId ?? this.walletClientId, + partyClientId: partyClientId ?? this.partyClientId, + groupClientId: groupClientId ?? this.groupClientId, + transferId: transferId ?? this.transferId, + transferClientId: transferClientId ?? this.transferClientId, + isRefund: isRefund ?? this.isRefund, + refundOfTransactionId: + refundOfTransactionId ?? this.refundOfTransactionId, + recurrencePeriod: recurrencePeriod ?? this.recurrencePeriod, + recurrenceInterval: recurrenceInterval ?? this.recurrenceInterval, + recurrenceEndsAt: recurrenceEndsAt ?? this.recurrenceEndsAt, + recurrenceNextScheduledAt: + recurrenceNextScheduledAt ?? this.recurrenceNextScheduledAt, + rowid: rowid ?? this.rowid, + ); + } + + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + if (id.present) { + map['id'] = Variable(id.value); + } + if (userId.present) { + map['user_id'] = Variable(userId.value); + } + if (clientId.present) { + map['client_id'] = Variable(clientId.value); + } + if (rev.present) { + map['rev'] = Variable(rev.value); + } + if (createdAt.present) { + map['created_at'] = Variable(createdAt.value); + } + if (updatedAt.present) { + map['updated_at'] = Variable(updatedAt.value); + } + if (deletedAt.present) { + map['deleted_at'] = Variable(deletedAt.value); + } + if (lastSyncedAt.present) { + map['last_synced_at'] = Variable(lastSyncedAt.value); + } + if (amount.present) { + map['amount'] = Variable(amount.value); + } + if (type.present) { + map['type'] = Variable(type.value); + } + if (intent.present) { + map['intent'] = Variable(intent.value); + } + if (description.present) { + map['description'] = Variable(description.value); + } + if (datetime.present) { + map['datetime'] = Variable(datetime.value); + } + if (partyId.present) { + map['party_id'] = Variable(partyId.value); + } + if (walletId.present) { + map['wallet_id'] = Variable(walletId.value); + } + if (groupId.present) { + map['group_id'] = Variable(groupId.value); + } + if (walletClientId.present) { + map['wallet_client_id'] = Variable(walletClientId.value); + } + if (partyClientId.present) { + map['party_client_id'] = Variable(partyClientId.value); + } + if (groupClientId.present) { + map['group_client_id'] = Variable(groupClientId.value); + } + if (transferId.present) { + map['transfer_id'] = Variable(transferId.value); + } + if (transferClientId.present) { + map['transfer_client_id'] = Variable(transferClientId.value); + } + if (isRefund.present) { + map['is_refund'] = Variable(isRefund.value); + } + if (refundOfTransactionId.present) { + map['refund_of_transaction_id'] = + Variable(refundOfTransactionId.value); + } + if (recurrencePeriod.present) { + map['recurrence_period'] = Variable(recurrencePeriod.value); + } + if (recurrenceInterval.present) { + map['recurrence_interval'] = Variable(recurrenceInterval.value); + } + if (recurrenceEndsAt.present) { + map['recurrence_ends_at'] = Variable(recurrenceEndsAt.value); + } + if (recurrenceNextScheduledAt.present) { + map['recurrence_next_scheduled_at'] = + Variable(recurrenceNextScheduledAt.value); + } + if (rowid.present) { + map['rowid'] = Variable(rowid.value); + } + return map; + } + + @override + String toString() { + return (StringBuffer('TransactionsCompanion(') + ..write('id: $id, ') + ..write('userId: $userId, ') + ..write('clientId: $clientId, ') + ..write('rev: $rev, ') + ..write('createdAt: $createdAt, ') + ..write('updatedAt: $updatedAt, ') + ..write('deletedAt: $deletedAt, ') + ..write('lastSyncedAt: $lastSyncedAt, ') + ..write('amount: $amount, ') + ..write('type: $type, ') + ..write('intent: $intent, ') + ..write('description: $description, ') + ..write('datetime: $datetime, ') + ..write('partyId: $partyId, ') + ..write('walletId: $walletId, ') + ..write('groupId: $groupId, ') + ..write('walletClientId: $walletClientId, ') + ..write('partyClientId: $partyClientId, ') + ..write('groupClientId: $groupClientId, ') + ..write('transferId: $transferId, ') + ..write('transferClientId: $transferClientId, ') + ..write('isRefund: $isRefund, ') + ..write('refundOfTransactionId: $refundOfTransactionId, ') + ..write('recurrencePeriod: $recurrencePeriod, ') + ..write('recurrenceInterval: $recurrenceInterval, ') + ..write('recurrenceEndsAt: $recurrenceEndsAt, ') + ..write('recurrenceNextScheduledAt: $recurrenceNextScheduledAt, ') + ..write('rowid: $rowid') + ..write(')')) + .toString(); + } +} + +class Categories extends Table with TableInfo { + @override + final GeneratedDatabase attachedDatabase; + final String? _alias; + Categories(this.attachedDatabase, [this._alias]); + late final GeneratedColumn id = GeneratedColumn( + 'id', aliasedName, true, + type: DriftSqlType.int, + requiredDuringInsert: false, + defaultConstraints: GeneratedColumn.constraintIsAlways('UNIQUE')); + late final GeneratedColumn userId = GeneratedColumn( + 'user_id', aliasedName, true, + type: DriftSqlType.int, requiredDuringInsert: false); + late final GeneratedColumn clientId = GeneratedColumn( + 'client_id', aliasedName, false, + type: DriftSqlType.string, + requiredDuringInsert: false, + defaultValue: const CustomExpression('\'\'')); + late final GeneratedColumn rev = GeneratedColumn( + 'rev', aliasedName, true, + type: DriftSqlType.string, + requiredDuringInsert: false, + defaultValue: const CustomExpression('\'1\'')); + late final GeneratedColumn createdAt = GeneratedColumn( + 'created_at', aliasedName, false, + type: DriftSqlType.dateTime, + requiredDuringInsert: false, + defaultValue: const CustomExpression('CURRENT_TIMESTAMP')); + late final GeneratedColumn updatedAt = GeneratedColumn( + 'updated_at', aliasedName, false, + type: DriftSqlType.dateTime, + requiredDuringInsert: false, + defaultValue: const CustomExpression('CURRENT_TIMESTAMP')); + late final GeneratedColumn deletedAt = GeneratedColumn( + 'deleted_at', aliasedName, true, + type: DriftSqlType.dateTime, requiredDuringInsert: false); + late final GeneratedColumn lastSyncedAt = GeneratedColumn( + 'last_synced_at', aliasedName, true, + type: DriftSqlType.dateTime, requiredDuringInsert: false); + late final GeneratedColumn name = GeneratedColumn( + 'name', aliasedName, false, + type: DriftSqlType.string, + requiredDuringInsert: true, + defaultConstraints: GeneratedColumn.constraintIsAlways('UNIQUE')); + late final GeneratedColumn slug = GeneratedColumn( + 'slug', aliasedName, false, + type: DriftSqlType.string, requiredDuringInsert: true); + late final GeneratedColumn description = GeneratedColumn( + 'description', aliasedName, true, + type: DriftSqlType.string, requiredDuringInsert: false); + late final GeneratedColumn type = GeneratedColumn( + 'type', aliasedName, false, + type: DriftSqlType.string, requiredDuringInsert: true); + late final GeneratedColumn icon = GeneratedColumn( + 'icon', aliasedName, true, + type: DriftSqlType.string, requiredDuringInsert: false); + @override + List get $columns => [ + id, + userId, + clientId, + rev, + createdAt, + updatedAt, + deletedAt, + lastSyncedAt, + name, + slug, + description, + type, + icon + ]; + @override + String get aliasedName => _alias ?? actualTableName; + @override + String get actualTableName => $name; + static const String $name = 'categories'; + @override + Set get $primaryKey => {clientId}; + @override + CategoriesData map(Map data, {String? tablePrefix}) { + final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; + return CategoriesData( + id: attachedDatabase.typeMapping + .read(DriftSqlType.int, data['${effectivePrefix}id']), + userId: attachedDatabase.typeMapping + .read(DriftSqlType.int, data['${effectivePrefix}user_id']), + clientId: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}client_id'])!, + rev: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}rev']), + createdAt: attachedDatabase.typeMapping + .read(DriftSqlType.dateTime, data['${effectivePrefix}created_at'])!, + updatedAt: attachedDatabase.typeMapping + .read(DriftSqlType.dateTime, data['${effectivePrefix}updated_at'])!, + deletedAt: attachedDatabase.typeMapping + .read(DriftSqlType.dateTime, data['${effectivePrefix}deleted_at']), + lastSyncedAt: attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, data['${effectivePrefix}last_synced_at']), + name: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}name'])!, + slug: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}slug'])!, + description: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}description']), + type: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}type'])!, + icon: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}icon']), + ); + } + + @override + Categories createAlias(String alias) { + return Categories(attachedDatabase, alias); + } +} + +class CategoriesData extends DataClass implements Insertable { + final int? id; + final int? userId; + final String clientId; + final String? rev; + final DateTime createdAt; + final DateTime updatedAt; + final DateTime? deletedAt; + final DateTime? lastSyncedAt; + final String name; + final String slug; + final String? description; + final String type; + final String? icon; + const CategoriesData( + {this.id, + this.userId, + required this.clientId, + this.rev, + required this.createdAt, + required this.updatedAt, + this.deletedAt, + this.lastSyncedAt, + required this.name, + required this.slug, + this.description, + required this.type, + this.icon}); + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + if (!nullToAbsent || id != null) { + map['id'] = Variable(id); + } + if (!nullToAbsent || userId != null) { + map['user_id'] = Variable(userId); + } + map['client_id'] = Variable(clientId); + if (!nullToAbsent || rev != null) { + map['rev'] = Variable(rev); + } + map['created_at'] = Variable(createdAt); + map['updated_at'] = Variable(updatedAt); + if (!nullToAbsent || deletedAt != null) { + map['deleted_at'] = Variable(deletedAt); + } + if (!nullToAbsent || lastSyncedAt != null) { + map['last_synced_at'] = Variable(lastSyncedAt); + } + map['name'] = Variable(name); + map['slug'] = Variable(slug); + if (!nullToAbsent || description != null) { + map['description'] = Variable(description); + } + map['type'] = Variable(type); + if (!nullToAbsent || icon != null) { + map['icon'] = Variable(icon); + } + return map; + } + + CategoriesCompanion toCompanion(bool nullToAbsent) { + return CategoriesCompanion( + id: id == null && nullToAbsent ? const Value.absent() : Value(id), + userId: + userId == null && nullToAbsent ? const Value.absent() : Value(userId), + clientId: Value(clientId), + rev: rev == null && nullToAbsent ? const Value.absent() : Value(rev), + createdAt: Value(createdAt), + updatedAt: Value(updatedAt), + deletedAt: deletedAt == null && nullToAbsent + ? const Value.absent() + : Value(deletedAt), + lastSyncedAt: lastSyncedAt == null && nullToAbsent + ? const Value.absent() + : Value(lastSyncedAt), + name: Value(name), + slug: Value(slug), + description: description == null && nullToAbsent + ? const Value.absent() + : Value(description), + type: Value(type), + icon: icon == null && nullToAbsent ? const Value.absent() : Value(icon), + ); + } + + factory CategoriesData.fromJson(Map json, + {ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return CategoriesData( + id: serializer.fromJson(json['id']), + userId: serializer.fromJson(json['userId']), + clientId: serializer.fromJson(json['clientId']), + rev: serializer.fromJson(json['rev']), + createdAt: serializer.fromJson(json['createdAt']), + updatedAt: serializer.fromJson(json['updatedAt']), + deletedAt: serializer.fromJson(json['deletedAt']), + lastSyncedAt: serializer.fromJson(json['lastSyncedAt']), + name: serializer.fromJson(json['name']), + slug: serializer.fromJson(json['slug']), + description: serializer.fromJson(json['description']), + type: serializer.fromJson(json['type']), + icon: serializer.fromJson(json['icon']), + ); + } + @override + Map toJson({ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return { + 'id': serializer.toJson(id), + 'userId': serializer.toJson(userId), + 'clientId': serializer.toJson(clientId), + 'rev': serializer.toJson(rev), + 'createdAt': serializer.toJson(createdAt), + 'updatedAt': serializer.toJson(updatedAt), + 'deletedAt': serializer.toJson(deletedAt), + 'lastSyncedAt': serializer.toJson(lastSyncedAt), + 'name': serializer.toJson(name), + 'slug': serializer.toJson(slug), + 'description': serializer.toJson(description), + 'type': serializer.toJson(type), + 'icon': serializer.toJson(icon), + }; + } + + CategoriesData copyWith( + {Value id = const Value.absent(), + Value userId = const Value.absent(), + String? clientId, + Value rev = const Value.absent(), + DateTime? createdAt, + DateTime? updatedAt, + Value deletedAt = const Value.absent(), + Value lastSyncedAt = const Value.absent(), + String? name, + String? slug, + Value description = const Value.absent(), + String? type, + Value icon = const Value.absent()}) => + CategoriesData( + id: id.present ? id.value : this.id, + userId: userId.present ? userId.value : this.userId, + clientId: clientId ?? this.clientId, + rev: rev.present ? rev.value : this.rev, + createdAt: createdAt ?? this.createdAt, + updatedAt: updatedAt ?? this.updatedAt, + deletedAt: deletedAt.present ? deletedAt.value : this.deletedAt, + lastSyncedAt: + lastSyncedAt.present ? lastSyncedAt.value : this.lastSyncedAt, + name: name ?? this.name, + slug: slug ?? this.slug, + description: description.present ? description.value : this.description, + type: type ?? this.type, + icon: icon.present ? icon.value : this.icon, + ); + CategoriesData copyWithCompanion(CategoriesCompanion data) { + return CategoriesData( + id: data.id.present ? data.id.value : this.id, + userId: data.userId.present ? data.userId.value : this.userId, + clientId: data.clientId.present ? data.clientId.value : this.clientId, + rev: data.rev.present ? data.rev.value : this.rev, + createdAt: data.createdAt.present ? data.createdAt.value : this.createdAt, + updatedAt: data.updatedAt.present ? data.updatedAt.value : this.updatedAt, + deletedAt: data.deletedAt.present ? data.deletedAt.value : this.deletedAt, + lastSyncedAt: data.lastSyncedAt.present + ? data.lastSyncedAt.value + : this.lastSyncedAt, + name: data.name.present ? data.name.value : this.name, + slug: data.slug.present ? data.slug.value : this.slug, + description: + data.description.present ? data.description.value : this.description, + type: data.type.present ? data.type.value : this.type, + icon: data.icon.present ? data.icon.value : this.icon, + ); + } + + @override + String toString() { + return (StringBuffer('CategoriesData(') + ..write('id: $id, ') + ..write('userId: $userId, ') + ..write('clientId: $clientId, ') + ..write('rev: $rev, ') + ..write('createdAt: $createdAt, ') + ..write('updatedAt: $updatedAt, ') + ..write('deletedAt: $deletedAt, ') + ..write('lastSyncedAt: $lastSyncedAt, ') + ..write('name: $name, ') + ..write('slug: $slug, ') + ..write('description: $description, ') + ..write('type: $type, ') + ..write('icon: $icon') + ..write(')')) + .toString(); + } + + @override + int get hashCode => Object.hash(id, userId, clientId, rev, createdAt, + updatedAt, deletedAt, lastSyncedAt, name, slug, description, type, icon); + @override + bool operator ==(Object other) => + identical(this, other) || + (other is CategoriesData && + other.id == this.id && + other.userId == this.userId && + other.clientId == this.clientId && + other.rev == this.rev && + other.createdAt == this.createdAt && + other.updatedAt == this.updatedAt && + other.deletedAt == this.deletedAt && + other.lastSyncedAt == this.lastSyncedAt && + other.name == this.name && + other.slug == this.slug && + other.description == this.description && + other.type == this.type && + other.icon == this.icon); +} + +class CategoriesCompanion extends UpdateCompanion { + final Value id; + final Value userId; + final Value clientId; + final Value rev; + final Value createdAt; + final Value updatedAt; + final Value deletedAt; + final Value lastSyncedAt; + final Value name; + final Value slug; + final Value description; + final Value type; + final Value icon; + final Value rowid; + const CategoriesCompanion({ + this.id = const Value.absent(), + this.userId = const Value.absent(), + this.clientId = const Value.absent(), + this.rev = const Value.absent(), + this.createdAt = const Value.absent(), + this.updatedAt = const Value.absent(), + this.deletedAt = const Value.absent(), + this.lastSyncedAt = const Value.absent(), + this.name = const Value.absent(), + this.slug = const Value.absent(), + this.description = const Value.absent(), + this.type = const Value.absent(), + this.icon = const Value.absent(), + this.rowid = const Value.absent(), + }); + CategoriesCompanion.insert({ + this.id = const Value.absent(), + this.userId = const Value.absent(), + this.clientId = const Value.absent(), + this.rev = const Value.absent(), + this.createdAt = const Value.absent(), + this.updatedAt = const Value.absent(), + this.deletedAt = const Value.absent(), + this.lastSyncedAt = const Value.absent(), + required String name, + required String slug, + this.description = const Value.absent(), + required String type, + this.icon = const Value.absent(), + this.rowid = const Value.absent(), + }) : name = Value(name), + slug = Value(slug), + type = Value(type); + static Insertable custom({ + Expression? id, + Expression? userId, + Expression? clientId, + Expression? rev, + Expression? createdAt, + Expression? updatedAt, + Expression? deletedAt, + Expression? lastSyncedAt, + Expression? name, + Expression? slug, + Expression? description, + Expression? type, + Expression? icon, + Expression? rowid, + }) { + return RawValuesInsertable({ + if (id != null) 'id': id, + if (userId != null) 'user_id': userId, + if (clientId != null) 'client_id': clientId, + if (rev != null) 'rev': rev, + if (createdAt != null) 'created_at': createdAt, + if (updatedAt != null) 'updated_at': updatedAt, + if (deletedAt != null) 'deleted_at': deletedAt, + if (lastSyncedAt != null) 'last_synced_at': lastSyncedAt, + if (name != null) 'name': name, + if (slug != null) 'slug': slug, + if (description != null) 'description': description, + if (type != null) 'type': type, + if (icon != null) 'icon': icon, + if (rowid != null) 'rowid': rowid, + }); + } + + CategoriesCompanion copyWith( + {Value? id, + Value? userId, + Value? clientId, + Value? rev, + Value? createdAt, + Value? updatedAt, + Value? deletedAt, + Value? lastSyncedAt, + Value? name, + Value? slug, + Value? description, + Value? type, + Value? icon, + Value? rowid}) { + return CategoriesCompanion( + id: id ?? this.id, + userId: userId ?? this.userId, + clientId: clientId ?? this.clientId, + rev: rev ?? this.rev, + createdAt: createdAt ?? this.createdAt, + updatedAt: updatedAt ?? this.updatedAt, + deletedAt: deletedAt ?? this.deletedAt, + lastSyncedAt: lastSyncedAt ?? this.lastSyncedAt, + name: name ?? this.name, + slug: slug ?? this.slug, + description: description ?? this.description, + type: type ?? this.type, + icon: icon ?? this.icon, + rowid: rowid ?? this.rowid, + ); + } + + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + if (id.present) { + map['id'] = Variable(id.value); + } + if (userId.present) { + map['user_id'] = Variable(userId.value); + } + if (clientId.present) { + map['client_id'] = Variable(clientId.value); + } + if (rev.present) { + map['rev'] = Variable(rev.value); + } + if (createdAt.present) { + map['created_at'] = Variable(createdAt.value); + } + if (updatedAt.present) { + map['updated_at'] = Variable(updatedAt.value); + } + if (deletedAt.present) { + map['deleted_at'] = Variable(deletedAt.value); + } + if (lastSyncedAt.present) { + map['last_synced_at'] = Variable(lastSyncedAt.value); + } + if (name.present) { + map['name'] = Variable(name.value); + } + if (slug.present) { + map['slug'] = Variable(slug.value); + } + if (description.present) { + map['description'] = Variable(description.value); + } + if (type.present) { + map['type'] = Variable(type.value); + } + if (icon.present) { + map['icon'] = Variable(icon.value); + } + if (rowid.present) { + map['rowid'] = Variable(rowid.value); + } + return map; + } + + @override + String toString() { + return (StringBuffer('CategoriesCompanion(') + ..write('id: $id, ') + ..write('userId: $userId, ') + ..write('clientId: $clientId, ') + ..write('rev: $rev, ') + ..write('createdAt: $createdAt, ') + ..write('updatedAt: $updatedAt, ') + ..write('deletedAt: $deletedAt, ') + ..write('lastSyncedAt: $lastSyncedAt, ') + ..write('name: $name, ') + ..write('slug: $slug, ') + ..write('description: $description, ') + ..write('type: $type, ') + ..write('icon: $icon, ') + ..write('rowid: $rowid') + ..write(')')) + .toString(); + } +} + +class Configs extends Table with TableInfo { + @override + final GeneratedDatabase attachedDatabase; + final String? _alias; + Configs(this.attachedDatabase, [this._alias]); + late final GeneratedColumn id = GeneratedColumn( + 'id', aliasedName, true, + type: DriftSqlType.int, + requiredDuringInsert: false, + defaultConstraints: GeneratedColumn.constraintIsAlways('UNIQUE')); + late final GeneratedColumn userId = GeneratedColumn( + 'user_id', aliasedName, true, + type: DriftSqlType.int, requiredDuringInsert: false); + late final GeneratedColumn clientId = GeneratedColumn( + 'client_id', aliasedName, false, + type: DriftSqlType.string, + requiredDuringInsert: false, + defaultValue: const CustomExpression('\'\'')); + late final GeneratedColumn rev = GeneratedColumn( + 'rev', aliasedName, true, + type: DriftSqlType.string, + requiredDuringInsert: false, + defaultValue: const CustomExpression('\'1\'')); + late final GeneratedColumn createdAt = GeneratedColumn( + 'created_at', aliasedName, false, + type: DriftSqlType.dateTime, + requiredDuringInsert: false, + defaultValue: const CustomExpression('CURRENT_TIMESTAMP')); + late final GeneratedColumn updatedAt = GeneratedColumn( + 'updated_at', aliasedName, false, + type: DriftSqlType.dateTime, + requiredDuringInsert: false, + defaultValue: const CustomExpression('CURRENT_TIMESTAMP')); + late final GeneratedColumn deletedAt = GeneratedColumn( + 'deleted_at', aliasedName, true, + type: DriftSqlType.dateTime, requiredDuringInsert: false); + late final GeneratedColumn lastSyncedAt = GeneratedColumn( + 'last_synced_at', aliasedName, true, + type: DriftSqlType.dateTime, requiredDuringInsert: false); + late final GeneratedColumn key = GeneratedColumn( + 'key', aliasedName, false, + type: DriftSqlType.string, + requiredDuringInsert: true, + defaultConstraints: GeneratedColumn.constraintIsAlways('UNIQUE')); + late final GeneratedColumn type = GeneratedColumn( + 'type', aliasedName, false, + type: DriftSqlType.string, requiredDuringInsert: true); + late final GeneratedColumn value = GeneratedColumn( + 'value', aliasedName, false, + type: DriftSqlType.string, requiredDuringInsert: true); + @override + List get $columns => [ + id, + userId, + clientId, + rev, + createdAt, + updatedAt, + deletedAt, + lastSyncedAt, + key, + type, + value + ]; + @override + String get aliasedName => _alias ?? actualTableName; + @override + String get actualTableName => $name; + static const String $name = 'configs'; + @override + Set get $primaryKey => {clientId}; + @override + ConfigsData map(Map data, {String? tablePrefix}) { + final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; + return ConfigsData( + id: attachedDatabase.typeMapping + .read(DriftSqlType.int, data['${effectivePrefix}id']), + userId: attachedDatabase.typeMapping + .read(DriftSqlType.int, data['${effectivePrefix}user_id']), + clientId: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}client_id'])!, + rev: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}rev']), + createdAt: attachedDatabase.typeMapping + .read(DriftSqlType.dateTime, data['${effectivePrefix}created_at'])!, + updatedAt: attachedDatabase.typeMapping + .read(DriftSqlType.dateTime, data['${effectivePrefix}updated_at'])!, + deletedAt: attachedDatabase.typeMapping + .read(DriftSqlType.dateTime, data['${effectivePrefix}deleted_at']), + lastSyncedAt: attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, data['${effectivePrefix}last_synced_at']), + key: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}key'])!, + type: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}type'])!, + value: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}value'])!, + ); + } + + @override + Configs createAlias(String alias) { + return Configs(attachedDatabase, alias); + } +} + +class ConfigsData extends DataClass implements Insertable { + final int? id; + final int? userId; + final String clientId; + final String? rev; + final DateTime createdAt; + final DateTime updatedAt; + final DateTime? deletedAt; + final DateTime? lastSyncedAt; + final String key; + final String type; + final String value; + const ConfigsData( + {this.id, + this.userId, + required this.clientId, + this.rev, + required this.createdAt, + required this.updatedAt, + this.deletedAt, + this.lastSyncedAt, + required this.key, + required this.type, + required this.value}); + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + if (!nullToAbsent || id != null) { + map['id'] = Variable(id); + } + if (!nullToAbsent || userId != null) { + map['user_id'] = Variable(userId); + } + map['client_id'] = Variable(clientId); + if (!nullToAbsent || rev != null) { + map['rev'] = Variable(rev); + } + map['created_at'] = Variable(createdAt); + map['updated_at'] = Variable(updatedAt); + if (!nullToAbsent || deletedAt != null) { + map['deleted_at'] = Variable(deletedAt); + } + if (!nullToAbsent || lastSyncedAt != null) { + map['last_synced_at'] = Variable(lastSyncedAt); + } + map['key'] = Variable(key); + map['type'] = Variable(type); + map['value'] = Variable(value); + return map; + } + + ConfigsCompanion toCompanion(bool nullToAbsent) { + return ConfigsCompanion( + id: id == null && nullToAbsent ? const Value.absent() : Value(id), + userId: + userId == null && nullToAbsent ? const Value.absent() : Value(userId), + clientId: Value(clientId), + rev: rev == null && nullToAbsent ? const Value.absent() : Value(rev), + createdAt: Value(createdAt), + updatedAt: Value(updatedAt), + deletedAt: deletedAt == null && nullToAbsent + ? const Value.absent() + : Value(deletedAt), + lastSyncedAt: lastSyncedAt == null && nullToAbsent + ? const Value.absent() + : Value(lastSyncedAt), + key: Value(key), + type: Value(type), + value: Value(value), + ); + } + + factory ConfigsData.fromJson(Map json, + {ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return ConfigsData( + id: serializer.fromJson(json['id']), + userId: serializer.fromJson(json['userId']), + clientId: serializer.fromJson(json['clientId']), + rev: serializer.fromJson(json['rev']), + createdAt: serializer.fromJson(json['createdAt']), + updatedAt: serializer.fromJson(json['updatedAt']), + deletedAt: serializer.fromJson(json['deletedAt']), + lastSyncedAt: serializer.fromJson(json['lastSyncedAt']), + key: serializer.fromJson(json['key']), + type: serializer.fromJson(json['type']), + value: serializer.fromJson(json['value']), + ); + } + @override + Map toJson({ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return { + 'id': serializer.toJson(id), + 'userId': serializer.toJson(userId), + 'clientId': serializer.toJson(clientId), + 'rev': serializer.toJson(rev), + 'createdAt': serializer.toJson(createdAt), + 'updatedAt': serializer.toJson(updatedAt), + 'deletedAt': serializer.toJson(deletedAt), + 'lastSyncedAt': serializer.toJson(lastSyncedAt), + 'key': serializer.toJson(key), + 'type': serializer.toJson(type), + 'value': serializer.toJson(value), + }; + } + + ConfigsData copyWith( + {Value id = const Value.absent(), + Value userId = const Value.absent(), + String? clientId, + Value rev = const Value.absent(), + DateTime? createdAt, + DateTime? updatedAt, + Value deletedAt = const Value.absent(), + Value lastSyncedAt = const Value.absent(), + String? key, + String? type, + String? value}) => + ConfigsData( + id: id.present ? id.value : this.id, + userId: userId.present ? userId.value : this.userId, + clientId: clientId ?? this.clientId, + rev: rev.present ? rev.value : this.rev, + createdAt: createdAt ?? this.createdAt, + updatedAt: updatedAt ?? this.updatedAt, + deletedAt: deletedAt.present ? deletedAt.value : this.deletedAt, + lastSyncedAt: + lastSyncedAt.present ? lastSyncedAt.value : this.lastSyncedAt, + key: key ?? this.key, + type: type ?? this.type, + value: value ?? this.value, + ); + ConfigsData copyWithCompanion(ConfigsCompanion data) { + return ConfigsData( + id: data.id.present ? data.id.value : this.id, + userId: data.userId.present ? data.userId.value : this.userId, + clientId: data.clientId.present ? data.clientId.value : this.clientId, + rev: data.rev.present ? data.rev.value : this.rev, + createdAt: data.createdAt.present ? data.createdAt.value : this.createdAt, + updatedAt: data.updatedAt.present ? data.updatedAt.value : this.updatedAt, + deletedAt: data.deletedAt.present ? data.deletedAt.value : this.deletedAt, + lastSyncedAt: data.lastSyncedAt.present + ? data.lastSyncedAt.value + : this.lastSyncedAt, + key: data.key.present ? data.key.value : this.key, + type: data.type.present ? data.type.value : this.type, + value: data.value.present ? data.value.value : this.value, + ); + } + + @override + String toString() { + return (StringBuffer('ConfigsData(') + ..write('id: $id, ') + ..write('userId: $userId, ') + ..write('clientId: $clientId, ') + ..write('rev: $rev, ') + ..write('createdAt: $createdAt, ') + ..write('updatedAt: $updatedAt, ') + ..write('deletedAt: $deletedAt, ') + ..write('lastSyncedAt: $lastSyncedAt, ') + ..write('key: $key, ') + ..write('type: $type, ') + ..write('value: $value') + ..write(')')) + .toString(); + } + + @override + int get hashCode => Object.hash(id, userId, clientId, rev, createdAt, + updatedAt, deletedAt, lastSyncedAt, key, type, value); + @override + bool operator ==(Object other) => + identical(this, other) || + (other is ConfigsData && + other.id == this.id && + other.userId == this.userId && + other.clientId == this.clientId && + other.rev == this.rev && + other.createdAt == this.createdAt && + other.updatedAt == this.updatedAt && + other.deletedAt == this.deletedAt && + other.lastSyncedAt == this.lastSyncedAt && + other.key == this.key && + other.type == this.type && + other.value == this.value); +} + +class ConfigsCompanion extends UpdateCompanion { + final Value id; + final Value userId; + final Value clientId; + final Value rev; + final Value createdAt; + final Value updatedAt; + final Value deletedAt; + final Value lastSyncedAt; + final Value key; + final Value type; + final Value value; + final Value rowid; + const ConfigsCompanion({ + this.id = const Value.absent(), + this.userId = const Value.absent(), + this.clientId = const Value.absent(), + this.rev = const Value.absent(), + this.createdAt = const Value.absent(), + this.updatedAt = const Value.absent(), + this.deletedAt = const Value.absent(), + this.lastSyncedAt = const Value.absent(), + this.key = const Value.absent(), + this.type = const Value.absent(), + this.value = const Value.absent(), + this.rowid = const Value.absent(), + }); + ConfigsCompanion.insert({ + this.id = const Value.absent(), + this.userId = const Value.absent(), + this.clientId = const Value.absent(), + this.rev = const Value.absent(), + this.createdAt = const Value.absent(), + this.updatedAt = const Value.absent(), + this.deletedAt = const Value.absent(), + this.lastSyncedAt = const Value.absent(), + required String key, + required String type, + required String value, + this.rowid = const Value.absent(), + }) : key = Value(key), + type = Value(type), + value = Value(value); + static Insertable custom({ + Expression? id, + Expression? userId, + Expression? clientId, + Expression? rev, + Expression? createdAt, + Expression? updatedAt, + Expression? deletedAt, + Expression? lastSyncedAt, + Expression? key, + Expression? type, + Expression? value, + Expression? rowid, + }) { + return RawValuesInsertable({ + if (id != null) 'id': id, + if (userId != null) 'user_id': userId, + if (clientId != null) 'client_id': clientId, + if (rev != null) 'rev': rev, + if (createdAt != null) 'created_at': createdAt, + if (updatedAt != null) 'updated_at': updatedAt, + if (deletedAt != null) 'deleted_at': deletedAt, + if (lastSyncedAt != null) 'last_synced_at': lastSyncedAt, + if (key != null) 'key': key, + if (type != null) 'type': type, + if (value != null) 'value': value, + if (rowid != null) 'rowid': rowid, + }); + } + + ConfigsCompanion copyWith( + {Value? id, + Value? userId, + Value? clientId, + Value? rev, + Value? createdAt, + Value? updatedAt, + Value? deletedAt, + Value? lastSyncedAt, + Value? key, + Value? type, + Value? value, + Value? rowid}) { + return ConfigsCompanion( + id: id ?? this.id, + userId: userId ?? this.userId, + clientId: clientId ?? this.clientId, + rev: rev ?? this.rev, + createdAt: createdAt ?? this.createdAt, + updatedAt: updatedAt ?? this.updatedAt, + deletedAt: deletedAt ?? this.deletedAt, + lastSyncedAt: lastSyncedAt ?? this.lastSyncedAt, + key: key ?? this.key, + type: type ?? this.type, + value: value ?? this.value, + rowid: rowid ?? this.rowid, + ); + } + + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + if (id.present) { + map['id'] = Variable(id.value); + } + if (userId.present) { + map['user_id'] = Variable(userId.value); + } + if (clientId.present) { + map['client_id'] = Variable(clientId.value); + } + if (rev.present) { + map['rev'] = Variable(rev.value); + } + if (createdAt.present) { + map['created_at'] = Variable(createdAt.value); + } + if (updatedAt.present) { + map['updated_at'] = Variable(updatedAt.value); + } + if (deletedAt.present) { + map['deleted_at'] = Variable(deletedAt.value); + } + if (lastSyncedAt.present) { + map['last_synced_at'] = Variable(lastSyncedAt.value); + } + if (key.present) { + map['key'] = Variable(key.value); + } + if (type.present) { + map['type'] = Variable(type.value); + } + if (value.present) { + map['value'] = Variable(value.value); + } + if (rowid.present) { + map['rowid'] = Variable(rowid.value); + } + return map; + } + + @override + String toString() { + return (StringBuffer('ConfigsCompanion(') + ..write('id: $id, ') + ..write('userId: $userId, ') + ..write('clientId: $clientId, ') + ..write('rev: $rev, ') + ..write('createdAt: $createdAt, ') + ..write('updatedAt: $updatedAt, ') + ..write('deletedAt: $deletedAt, ') + ..write('lastSyncedAt: $lastSyncedAt, ') + ..write('key: $key, ') + ..write('type: $type, ') + ..write('value: $value, ') + ..write('rowid: $rowid') + ..write(')')) + .toString(); + } +} + +class Users extends Table with TableInfo { + @override + final GeneratedDatabase attachedDatabase; + final String? _alias; + Users(this.attachedDatabase, [this._alias]); + late final GeneratedColumn id = GeneratedColumn( + 'id', aliasedName, false, + type: DriftSqlType.int, requiredDuringInsert: false); + late final GeneratedColumn email = GeneratedColumn( + 'email', aliasedName, false, + type: DriftSqlType.string, + requiredDuringInsert: true, + defaultConstraints: GeneratedColumn.constraintIsAlways('UNIQUE')); + late final GeneratedColumn firstName = GeneratedColumn( + 'first_name', aliasedName, false, + type: DriftSqlType.string, requiredDuringInsert: true); + late final GeneratedColumn lastName = GeneratedColumn( + 'last_name', aliasedName, true, + type: DriftSqlType.string, requiredDuringInsert: false); + late final GeneratedColumn username = GeneratedColumn( + 'username', aliasedName, true, + type: DriftSqlType.string, requiredDuringInsert: false); + late final GeneratedColumn phone = GeneratedColumn( + 'phone', aliasedName, true, + type: DriftSqlType.string, requiredDuringInsert: false); + late final GeneratedColumn avatar = GeneratedColumn( + 'avatar', aliasedName, true, + type: DriftSqlType.string, requiredDuringInsert: false); + late final GeneratedColumn createdAt = GeneratedColumn( + 'created_at', aliasedName, true, + type: DriftSqlType.dateTime, requiredDuringInsert: false); + late final GeneratedColumn updatedAt = GeneratedColumn( + 'updated_at', aliasedName, true, + type: DriftSqlType.dateTime, requiredDuringInsert: false); + @override + List get $columns => [ + id, + email, + firstName, + lastName, + username, + phone, + avatar, + createdAt, + updatedAt + ]; + @override + String get aliasedName => _alias ?? actualTableName; + @override + String get actualTableName => $name; + static const String $name = 'users'; + @override + Set get $primaryKey => {id}; + @override + UsersData map(Map data, {String? tablePrefix}) { + final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; + return UsersData( + id: attachedDatabase.typeMapping + .read(DriftSqlType.int, data['${effectivePrefix}id'])!, + email: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}email'])!, + firstName: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}first_name'])!, + lastName: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}last_name']), + username: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}username']), + phone: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}phone']), + avatar: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}avatar']), + createdAt: attachedDatabase.typeMapping + .read(DriftSqlType.dateTime, data['${effectivePrefix}created_at']), + updatedAt: attachedDatabase.typeMapping + .read(DriftSqlType.dateTime, data['${effectivePrefix}updated_at']), + ); + } + + @override + Users createAlias(String alias) { + return Users(attachedDatabase, alias); + } +} + +class UsersData extends DataClass implements Insertable { + final int id; + final String email; + final String firstName; + final String? lastName; + final String? username; + final String? phone; + final String? avatar; + final DateTime? createdAt; + final DateTime? updatedAt; + const UsersData( + {required this.id, + required this.email, + required this.firstName, + this.lastName, + this.username, + this.phone, + this.avatar, + this.createdAt, + this.updatedAt}); + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + map['id'] = Variable(id); + map['email'] = Variable(email); + map['first_name'] = Variable(firstName); + if (!nullToAbsent || lastName != null) { + map['last_name'] = Variable(lastName); + } + if (!nullToAbsent || username != null) { + map['username'] = Variable(username); + } + if (!nullToAbsent || phone != null) { + map['phone'] = Variable(phone); + } + if (!nullToAbsent || avatar != null) { + map['avatar'] = Variable(avatar); + } + if (!nullToAbsent || createdAt != null) { + map['created_at'] = Variable(createdAt); + } + if (!nullToAbsent || updatedAt != null) { + map['updated_at'] = Variable(updatedAt); + } + return map; + } + + UsersCompanion toCompanion(bool nullToAbsent) { + return UsersCompanion( + id: Value(id), + email: Value(email), + firstName: Value(firstName), + lastName: lastName == null && nullToAbsent + ? const Value.absent() + : Value(lastName), + username: username == null && nullToAbsent + ? const Value.absent() + : Value(username), + phone: + phone == null && nullToAbsent ? const Value.absent() : Value(phone), + avatar: + avatar == null && nullToAbsent ? const Value.absent() : Value(avatar), + createdAt: createdAt == null && nullToAbsent + ? const Value.absent() + : Value(createdAt), + updatedAt: updatedAt == null && nullToAbsent + ? const Value.absent() + : Value(updatedAt), + ); + } + + factory UsersData.fromJson(Map json, + {ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return UsersData( + id: serializer.fromJson(json['id']), + email: serializer.fromJson(json['email']), + firstName: serializer.fromJson(json['firstName']), + lastName: serializer.fromJson(json['lastName']), + username: serializer.fromJson(json['username']), + phone: serializer.fromJson(json['phone']), + avatar: serializer.fromJson(json['avatar']), + createdAt: serializer.fromJson(json['createdAt']), + updatedAt: serializer.fromJson(json['updatedAt']), + ); + } + @override + Map toJson({ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return { + 'id': serializer.toJson(id), + 'email': serializer.toJson(email), + 'firstName': serializer.toJson(firstName), + 'lastName': serializer.toJson(lastName), + 'username': serializer.toJson(username), + 'phone': serializer.toJson(phone), + 'avatar': serializer.toJson(avatar), + 'createdAt': serializer.toJson(createdAt), + 'updatedAt': serializer.toJson(updatedAt), + }; + } + + UsersData copyWith( + {int? id, + String? email, + String? firstName, + Value lastName = const Value.absent(), + Value username = const Value.absent(), + Value phone = const Value.absent(), + Value avatar = const Value.absent(), + Value createdAt = const Value.absent(), + Value updatedAt = const Value.absent()}) => + UsersData( + id: id ?? this.id, + email: email ?? this.email, + firstName: firstName ?? this.firstName, + lastName: lastName.present ? lastName.value : this.lastName, + username: username.present ? username.value : this.username, + phone: phone.present ? phone.value : this.phone, + avatar: avatar.present ? avatar.value : this.avatar, + createdAt: createdAt.present ? createdAt.value : this.createdAt, + updatedAt: updatedAt.present ? updatedAt.value : this.updatedAt, + ); + UsersData copyWithCompanion(UsersCompanion data) { + return UsersData( + id: data.id.present ? data.id.value : this.id, + email: data.email.present ? data.email.value : this.email, + firstName: data.firstName.present ? data.firstName.value : this.firstName, + lastName: data.lastName.present ? data.lastName.value : this.lastName, + username: data.username.present ? data.username.value : this.username, + phone: data.phone.present ? data.phone.value : this.phone, + avatar: data.avatar.present ? data.avatar.value : this.avatar, + createdAt: data.createdAt.present ? data.createdAt.value : this.createdAt, + updatedAt: data.updatedAt.present ? data.updatedAt.value : this.updatedAt, + ); + } + + @override + String toString() { + return (StringBuffer('UsersData(') + ..write('id: $id, ') + ..write('email: $email, ') + ..write('firstName: $firstName, ') + ..write('lastName: $lastName, ') + ..write('username: $username, ') + ..write('phone: $phone, ') + ..write('avatar: $avatar, ') + ..write('createdAt: $createdAt, ') + ..write('updatedAt: $updatedAt') + ..write(')')) + .toString(); + } + + @override + int get hashCode => Object.hash(id, email, firstName, lastName, username, + phone, avatar, createdAt, updatedAt); + @override + bool operator ==(Object other) => + identical(this, other) || + (other is UsersData && + other.id == this.id && + other.email == this.email && + other.firstName == this.firstName && + other.lastName == this.lastName && + other.username == this.username && + other.phone == this.phone && + other.avatar == this.avatar && + other.createdAt == this.createdAt && + other.updatedAt == this.updatedAt); +} + +class UsersCompanion extends UpdateCompanion { + final Value id; + final Value email; + final Value firstName; + final Value lastName; + final Value username; + final Value phone; + final Value avatar; + final Value createdAt; + final Value updatedAt; + const UsersCompanion({ + this.id = const Value.absent(), + this.email = const Value.absent(), + this.firstName = const Value.absent(), + this.lastName = const Value.absent(), + this.username = const Value.absent(), + this.phone = const Value.absent(), + this.avatar = const Value.absent(), + this.createdAt = const Value.absent(), + this.updatedAt = const Value.absent(), + }); + UsersCompanion.insert({ + this.id = const Value.absent(), + required String email, + required String firstName, + this.lastName = const Value.absent(), + this.username = const Value.absent(), + this.phone = const Value.absent(), + this.avatar = const Value.absent(), + this.createdAt = const Value.absent(), + this.updatedAt = const Value.absent(), + }) : email = Value(email), + firstName = Value(firstName); + static Insertable custom({ + Expression? id, + Expression? email, + Expression? firstName, + Expression? lastName, + Expression? username, + Expression? phone, + Expression? avatar, + Expression? createdAt, + Expression? updatedAt, + }) { + return RawValuesInsertable({ + if (id != null) 'id': id, + if (email != null) 'email': email, + if (firstName != null) 'first_name': firstName, + if (lastName != null) 'last_name': lastName, + if (username != null) 'username': username, + if (phone != null) 'phone': phone, + if (avatar != null) 'avatar': avatar, + if (createdAt != null) 'created_at': createdAt, + if (updatedAt != null) 'updated_at': updatedAt, + }); + } + + UsersCompanion copyWith( + {Value? id, + Value? email, + Value? firstName, + Value? lastName, + Value? username, + Value? phone, + Value? avatar, + Value? createdAt, + Value? updatedAt}) { + return UsersCompanion( + id: id ?? this.id, + email: email ?? this.email, + firstName: firstName ?? this.firstName, + lastName: lastName ?? this.lastName, + username: username ?? this.username, + phone: phone ?? this.phone, + avatar: avatar ?? this.avatar, + createdAt: createdAt ?? this.createdAt, + updatedAt: updatedAt ?? this.updatedAt, + ); + } + + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + if (id.present) { + map['id'] = Variable(id.value); + } + if (email.present) { + map['email'] = Variable(email.value); + } + if (firstName.present) { + map['first_name'] = Variable(firstName.value); + } + if (lastName.present) { + map['last_name'] = Variable(lastName.value); + } + if (username.present) { + map['username'] = Variable(username.value); + } + if (phone.present) { + map['phone'] = Variable(phone.value); + } + if (avatar.present) { + map['avatar'] = Variable(avatar.value); + } + if (createdAt.present) { + map['created_at'] = Variable(createdAt.value); + } + if (updatedAt.present) { + map['updated_at'] = Variable(updatedAt.value); + } + return map; + } + + @override + String toString() { + return (StringBuffer('UsersCompanion(') + ..write('id: $id, ') + ..write('email: $email, ') + ..write('firstName: $firstName, ') + ..write('lastName: $lastName, ') + ..write('username: $username, ') + ..write('phone: $phone, ') + ..write('avatar: $avatar, ') + ..write('createdAt: $createdAt, ') + ..write('updatedAt: $updatedAt') + ..write(')')) + .toString(); + } +} + +class LocalChanges extends Table + with TableInfo { + @override + final GeneratedDatabase attachedDatabase; + final String? _alias; + LocalChanges(this.attachedDatabase, [this._alias]); + late final GeneratedColumn entityType = GeneratedColumn( + 'entity_type', aliasedName, false, + type: DriftSqlType.string, requiredDuringInsert: true); + late final GeneratedColumn entityId = GeneratedColumn( + 'entity_id', aliasedName, false, + type: DriftSqlType.string, requiredDuringInsert: true); + late final GeneratedColumn entityRev = GeneratedColumn( + 'entity_rev', aliasedName, false, + type: DriftSqlType.string, requiredDuringInsert: true); + late final GeneratedColumn deleted = GeneratedColumn( + 'deleted', aliasedName, false, + type: DriftSqlType.bool, + requiredDuringInsert: true, + defaultConstraints: + GeneratedColumn.constraintIsAlways('CHECK ("deleted" IN (0, 1))')); + late final GeneratedColumn data = GeneratedColumn( + 'data', aliasedName, false, + type: DriftSqlType.string, requiredDuringInsert: true); + late final GeneratedColumn createAt = GeneratedColumn( + 'create_at', aliasedName, false, + type: DriftSqlType.dateTime, requiredDuringInsert: true); + late final GeneratedColumn concluded = GeneratedColumn( + 'concluded', aliasedName, false, + type: DriftSqlType.bool, + requiredDuringInsert: true, + defaultConstraints: + GeneratedColumn.constraintIsAlways('CHECK ("concluded" IN (0, 1))')); + late final GeneratedColumn concludedMoment = + GeneratedColumn('concluded_moment', aliasedName, true, + type: DriftSqlType.dateTime, requiredDuringInsert: false); + late final GeneratedColumn error = GeneratedColumn( + 'error', aliasedName, true, + type: DriftSqlType.string, requiredDuringInsert: false); + late final GeneratedColumn dismissed = GeneratedColumn( + 'dismissed', aliasedName, false, + type: DriftSqlType.bool, + requiredDuringInsert: true, + defaultConstraints: + GeneratedColumn.constraintIsAlways('CHECK ("dismissed" IN (0, 1))')); + late final GeneratedColumn attemptCount = GeneratedColumn( + 'attempt_count', aliasedName, false, + type: DriftSqlType.int, + requiredDuringInsert: false, + defaultValue: const CustomExpression('0')); + late final GeneratedColumn quarantinedAt = + GeneratedColumn('quarantined_at', aliasedName, true, + type: DriftSqlType.dateTime, requiredDuringInsert: false); + @override + List get $columns => [ + entityType, + entityId, + entityRev, + deleted, + data, + createAt, + concluded, + concludedMoment, + error, + dismissed, + attemptCount, + quarantinedAt + ]; + @override + String get aliasedName => _alias ?? actualTableName; + @override + String get actualTableName => $name; + static const String $name = 'local_changes'; + @override + Set get $primaryKey => {entityId, entityType}; + @override + LocalChangesData map(Map data, {String? tablePrefix}) { + final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; + return LocalChangesData( + entityType: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}entity_type'])!, + entityId: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}entity_id'])!, + entityRev: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}entity_rev'])!, + deleted: attachedDatabase.typeMapping + .read(DriftSqlType.bool, data['${effectivePrefix}deleted'])!, + data: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}data'])!, + createAt: attachedDatabase.typeMapping + .read(DriftSqlType.dateTime, data['${effectivePrefix}create_at'])!, + concluded: attachedDatabase.typeMapping + .read(DriftSqlType.bool, data['${effectivePrefix}concluded'])!, + concludedMoment: attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, data['${effectivePrefix}concluded_moment']), + error: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}error']), + dismissed: attachedDatabase.typeMapping + .read(DriftSqlType.bool, data['${effectivePrefix}dismissed'])!, + attemptCount: attachedDatabase.typeMapping + .read(DriftSqlType.int, data['${effectivePrefix}attempt_count'])!, + quarantinedAt: attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, data['${effectivePrefix}quarantined_at']), + ); + } + + @override + LocalChanges createAlias(String alias) { + return LocalChanges(attachedDatabase, alias); + } +} + +class LocalChangesData extends DataClass + implements Insertable { + final String entityType; + final String entityId; + final String entityRev; + final bool deleted; + final String data; + final DateTime createAt; + final bool concluded; + final DateTime? concludedMoment; + final String? error; + final bool dismissed; + final int attemptCount; + final DateTime? quarantinedAt; + const LocalChangesData( + {required this.entityType, + required this.entityId, + required this.entityRev, + required this.deleted, + required this.data, + required this.createAt, + required this.concluded, + this.concludedMoment, + this.error, + required this.dismissed, + required this.attemptCount, + this.quarantinedAt}); + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + map['entity_type'] = Variable(entityType); + map['entity_id'] = Variable(entityId); + map['entity_rev'] = Variable(entityRev); + map['deleted'] = Variable(deleted); + map['data'] = Variable(data); + map['create_at'] = Variable(createAt); + map['concluded'] = Variable(concluded); + if (!nullToAbsent || concludedMoment != null) { + map['concluded_moment'] = Variable(concludedMoment); + } + if (!nullToAbsent || error != null) { + map['error'] = Variable(error); + } + map['dismissed'] = Variable(dismissed); + map['attempt_count'] = Variable(attemptCount); + if (!nullToAbsent || quarantinedAt != null) { + map['quarantined_at'] = Variable(quarantinedAt); + } + return map; + } + + LocalChangesCompanion toCompanion(bool nullToAbsent) { + return LocalChangesCompanion( + entityType: Value(entityType), + entityId: Value(entityId), + entityRev: Value(entityRev), + deleted: Value(deleted), + data: Value(data), + createAt: Value(createAt), + concluded: Value(concluded), + concludedMoment: concludedMoment == null && nullToAbsent + ? const Value.absent() + : Value(concludedMoment), + error: + error == null && nullToAbsent ? const Value.absent() : Value(error), + dismissed: Value(dismissed), + attemptCount: Value(attemptCount), + quarantinedAt: quarantinedAt == null && nullToAbsent + ? const Value.absent() + : Value(quarantinedAt), + ); + } + + factory LocalChangesData.fromJson(Map json, + {ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return LocalChangesData( + entityType: serializer.fromJson(json['entityType']), + entityId: serializer.fromJson(json['entityId']), + entityRev: serializer.fromJson(json['entityRev']), + deleted: serializer.fromJson(json['deleted']), + data: serializer.fromJson(json['data']), + createAt: serializer.fromJson(json['createAt']), + concluded: serializer.fromJson(json['concluded']), + concludedMoment: serializer.fromJson(json['concludedMoment']), + error: serializer.fromJson(json['error']), + dismissed: serializer.fromJson(json['dismissed']), + attemptCount: serializer.fromJson(json['attemptCount']), + quarantinedAt: serializer.fromJson(json['quarantinedAt']), + ); + } + @override + Map toJson({ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return { + 'entityType': serializer.toJson(entityType), + 'entityId': serializer.toJson(entityId), + 'entityRev': serializer.toJson(entityRev), + 'deleted': serializer.toJson(deleted), + 'data': serializer.toJson(data), + 'createAt': serializer.toJson(createAt), + 'concluded': serializer.toJson(concluded), + 'concludedMoment': serializer.toJson(concludedMoment), + 'error': serializer.toJson(error), + 'dismissed': serializer.toJson(dismissed), + 'attemptCount': serializer.toJson(attemptCount), + 'quarantinedAt': serializer.toJson(quarantinedAt), + }; + } + + LocalChangesData copyWith( + {String? entityType, + String? entityId, + String? entityRev, + bool? deleted, + String? data, + DateTime? createAt, + bool? concluded, + Value concludedMoment = const Value.absent(), + Value error = const Value.absent(), + bool? dismissed, + int? attemptCount, + Value quarantinedAt = const Value.absent()}) => + LocalChangesData( + entityType: entityType ?? this.entityType, + entityId: entityId ?? this.entityId, + entityRev: entityRev ?? this.entityRev, + deleted: deleted ?? this.deleted, + data: data ?? this.data, + createAt: createAt ?? this.createAt, + concluded: concluded ?? this.concluded, + concludedMoment: concludedMoment.present + ? concludedMoment.value + : this.concludedMoment, + error: error.present ? error.value : this.error, + dismissed: dismissed ?? this.dismissed, + attemptCount: attemptCount ?? this.attemptCount, + quarantinedAt: + quarantinedAt.present ? quarantinedAt.value : this.quarantinedAt, + ); + LocalChangesData copyWithCompanion(LocalChangesCompanion data) { + return LocalChangesData( + entityType: + data.entityType.present ? data.entityType.value : this.entityType, + entityId: data.entityId.present ? data.entityId.value : this.entityId, + entityRev: data.entityRev.present ? data.entityRev.value : this.entityRev, + deleted: data.deleted.present ? data.deleted.value : this.deleted, + data: data.data.present ? data.data.value : this.data, + createAt: data.createAt.present ? data.createAt.value : this.createAt, + concluded: data.concluded.present ? data.concluded.value : this.concluded, + concludedMoment: data.concludedMoment.present + ? data.concludedMoment.value + : this.concludedMoment, + error: data.error.present ? data.error.value : this.error, + dismissed: data.dismissed.present ? data.dismissed.value : this.dismissed, + attemptCount: data.attemptCount.present + ? data.attemptCount.value + : this.attemptCount, + quarantinedAt: data.quarantinedAt.present + ? data.quarantinedAt.value + : this.quarantinedAt, + ); + } + + @override + String toString() { + return (StringBuffer('LocalChangesData(') + ..write('entityType: $entityType, ') + ..write('entityId: $entityId, ') + ..write('entityRev: $entityRev, ') + ..write('deleted: $deleted, ') + ..write('data: $data, ') + ..write('createAt: $createAt, ') + ..write('concluded: $concluded, ') + ..write('concludedMoment: $concludedMoment, ') + ..write('error: $error, ') + ..write('dismissed: $dismissed, ') + ..write('attemptCount: $attemptCount, ') + ..write('quarantinedAt: $quarantinedAt') + ..write(')')) + .toString(); + } + + @override + int get hashCode => Object.hash( + entityType, + entityId, + entityRev, + deleted, + data, + createAt, + concluded, + concludedMoment, + error, + dismissed, + attemptCount, + quarantinedAt); + @override + bool operator ==(Object other) => + identical(this, other) || + (other is LocalChangesData && + other.entityType == this.entityType && + other.entityId == this.entityId && + other.entityRev == this.entityRev && + other.deleted == this.deleted && + other.data == this.data && + other.createAt == this.createAt && + other.concluded == this.concluded && + other.concludedMoment == this.concludedMoment && + other.error == this.error && + other.dismissed == this.dismissed && + other.attemptCount == this.attemptCount && + other.quarantinedAt == this.quarantinedAt); +} + +class LocalChangesCompanion extends UpdateCompanion { + final Value entityType; + final Value entityId; + final Value entityRev; + final Value deleted; + final Value data; + final Value createAt; + final Value concluded; + final Value concludedMoment; + final Value error; + final Value dismissed; + final Value attemptCount; + final Value quarantinedAt; + final Value rowid; + const LocalChangesCompanion({ + this.entityType = const Value.absent(), + this.entityId = const Value.absent(), + this.entityRev = const Value.absent(), + this.deleted = const Value.absent(), + this.data = const Value.absent(), + this.createAt = const Value.absent(), + this.concluded = const Value.absent(), + this.concludedMoment = const Value.absent(), + this.error = const Value.absent(), + this.dismissed = const Value.absent(), + this.attemptCount = const Value.absent(), + this.quarantinedAt = const Value.absent(), + this.rowid = const Value.absent(), + }); + LocalChangesCompanion.insert({ + required String entityType, + required String entityId, + required String entityRev, + required bool deleted, + required String data, + required DateTime createAt, + required bool concluded, + this.concludedMoment = const Value.absent(), + this.error = const Value.absent(), + required bool dismissed, + this.attemptCount = const Value.absent(), + this.quarantinedAt = const Value.absent(), + this.rowid = const Value.absent(), + }) : entityType = Value(entityType), + entityId = Value(entityId), + entityRev = Value(entityRev), + deleted = Value(deleted), + data = Value(data), + createAt = Value(createAt), + concluded = Value(concluded), + dismissed = Value(dismissed); + static Insertable custom({ + Expression? entityType, + Expression? entityId, + Expression? entityRev, + Expression? deleted, + Expression? data, + Expression? createAt, + Expression? concluded, + Expression? concludedMoment, + Expression? error, + Expression? dismissed, + Expression? attemptCount, + Expression? quarantinedAt, + Expression? rowid, + }) { + return RawValuesInsertable({ + if (entityType != null) 'entity_type': entityType, + if (entityId != null) 'entity_id': entityId, + if (entityRev != null) 'entity_rev': entityRev, + if (deleted != null) 'deleted': deleted, + if (data != null) 'data': data, + if (createAt != null) 'create_at': createAt, + if (concluded != null) 'concluded': concluded, + if (concludedMoment != null) 'concluded_moment': concludedMoment, + if (error != null) 'error': error, + if (dismissed != null) 'dismissed': dismissed, + if (attemptCount != null) 'attempt_count': attemptCount, + if (quarantinedAt != null) 'quarantined_at': quarantinedAt, + if (rowid != null) 'rowid': rowid, + }); + } + + LocalChangesCompanion copyWith( + {Value? entityType, + Value? entityId, + Value? entityRev, + Value? deleted, + Value? data, + Value? createAt, + Value? concluded, + Value? concludedMoment, + Value? error, + Value? dismissed, + Value? attemptCount, + Value? quarantinedAt, + Value? rowid}) { + return LocalChangesCompanion( + entityType: entityType ?? this.entityType, + entityId: entityId ?? this.entityId, + entityRev: entityRev ?? this.entityRev, + deleted: deleted ?? this.deleted, + data: data ?? this.data, + createAt: createAt ?? this.createAt, + concluded: concluded ?? this.concluded, + concludedMoment: concludedMoment ?? this.concludedMoment, + error: error ?? this.error, + dismissed: dismissed ?? this.dismissed, + attemptCount: attemptCount ?? this.attemptCount, + quarantinedAt: quarantinedAt ?? this.quarantinedAt, + rowid: rowid ?? this.rowid, + ); + } + + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + if (entityType.present) { + map['entity_type'] = Variable(entityType.value); + } + if (entityId.present) { + map['entity_id'] = Variable(entityId.value); + } + if (entityRev.present) { + map['entity_rev'] = Variable(entityRev.value); + } + if (deleted.present) { + map['deleted'] = Variable(deleted.value); + } + if (data.present) { + map['data'] = Variable(data.value); + } + if (createAt.present) { + map['create_at'] = Variable(createAt.value); + } + if (concluded.present) { + map['concluded'] = Variable(concluded.value); + } + if (concludedMoment.present) { + map['concluded_moment'] = Variable(concludedMoment.value); + } + if (error.present) { + map['error'] = Variable(error.value); + } + if (dismissed.present) { + map['dismissed'] = Variable(dismissed.value); + } + if (attemptCount.present) { + map['attempt_count'] = Variable(attemptCount.value); + } + if (quarantinedAt.present) { + map['quarantined_at'] = Variable(quarantinedAt.value); + } + if (rowid.present) { + map['rowid'] = Variable(rowid.value); + } + return map; + } + + @override + String toString() { + return (StringBuffer('LocalChangesCompanion(') + ..write('entityType: $entityType, ') + ..write('entityId: $entityId, ') + ..write('entityRev: $entityRev, ') + ..write('deleted: $deleted, ') + ..write('data: $data, ') + ..write('createAt: $createAt, ') + ..write('concluded: $concluded, ') + ..write('concludedMoment: $concludedMoment, ') + ..write('error: $error, ') + ..write('dismissed: $dismissed, ') + ..write('attemptCount: $attemptCount, ') + ..write('quarantinedAt: $quarantinedAt, ') + ..write('rowid: $rowid') + ..write(')')) + .toString(); + } +} + +class SyncMetadata extends Table + with TableInfo { + @override + final GeneratedDatabase attachedDatabase; + final String? _alias; + SyncMetadata(this.attachedDatabase, [this._alias]); + late final GeneratedColumn entityType = GeneratedColumn( + 'entity_type', aliasedName, false, + type: DriftSqlType.string, requiredDuringInsert: true); + late final GeneratedColumn lastSyncedAt = GeneratedColumn( + 'last_synced_at', aliasedName, true, + type: DriftSqlType.dateTime, requiredDuringInsert: false); + late final GeneratedColumn lastAttemptedAt = + GeneratedColumn('last_attempted_at', aliasedName, true, + type: DriftSqlType.dateTime, requiredDuringInsert: false); + late final GeneratedColumn lastError = GeneratedColumn( + 'last_error', aliasedName, true, + type: DriftSqlType.string, requiredDuringInsert: false); + @override + List get $columns => + [entityType, lastSyncedAt, lastAttemptedAt, lastError]; + @override + String get aliasedName => _alias ?? actualTableName; + @override + String get actualTableName => $name; + static const String $name = 'sync_metadata'; + @override + Set get $primaryKey => {entityType}; + @override + SyncMetadataData map(Map data, {String? tablePrefix}) { + final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; + return SyncMetadataData( + entityType: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}entity_type'])!, + lastSyncedAt: attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, data['${effectivePrefix}last_synced_at']), + lastAttemptedAt: attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, data['${effectivePrefix}last_attempted_at']), + lastError: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}last_error']), + ); + } + + @override + SyncMetadata createAlias(String alias) { + return SyncMetadata(attachedDatabase, alias); + } +} + +class SyncMetadataData extends DataClass + implements Insertable { + final String entityType; + final DateTime? lastSyncedAt; + final DateTime? lastAttemptedAt; + final String? lastError; + const SyncMetadataData( + {required this.entityType, + this.lastSyncedAt, + this.lastAttemptedAt, + this.lastError}); + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + map['entity_type'] = Variable(entityType); + if (!nullToAbsent || lastSyncedAt != null) { + map['last_synced_at'] = Variable(lastSyncedAt); + } + if (!nullToAbsent || lastAttemptedAt != null) { + map['last_attempted_at'] = Variable(lastAttemptedAt); + } + if (!nullToAbsent || lastError != null) { + map['last_error'] = Variable(lastError); + } + return map; + } + + SyncMetadataCompanion toCompanion(bool nullToAbsent) { + return SyncMetadataCompanion( + entityType: Value(entityType), + lastSyncedAt: lastSyncedAt == null && nullToAbsent + ? const Value.absent() + : Value(lastSyncedAt), + lastAttemptedAt: lastAttemptedAt == null && nullToAbsent + ? const Value.absent() + : Value(lastAttemptedAt), + lastError: lastError == null && nullToAbsent + ? const Value.absent() + : Value(lastError), + ); + } + + factory SyncMetadataData.fromJson(Map json, + {ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return SyncMetadataData( + entityType: serializer.fromJson(json['entityType']), + lastSyncedAt: serializer.fromJson(json['lastSyncedAt']), + lastAttemptedAt: serializer.fromJson(json['lastAttemptedAt']), + lastError: serializer.fromJson(json['lastError']), + ); + } + @override + Map toJson({ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return { + 'entityType': serializer.toJson(entityType), + 'lastSyncedAt': serializer.toJson(lastSyncedAt), + 'lastAttemptedAt': serializer.toJson(lastAttemptedAt), + 'lastError': serializer.toJson(lastError), + }; + } + + SyncMetadataData copyWith( + {String? entityType, + Value lastSyncedAt = const Value.absent(), + Value lastAttemptedAt = const Value.absent(), + Value lastError = const Value.absent()}) => + SyncMetadataData( + entityType: entityType ?? this.entityType, + lastSyncedAt: + lastSyncedAt.present ? lastSyncedAt.value : this.lastSyncedAt, + lastAttemptedAt: lastAttemptedAt.present + ? lastAttemptedAt.value + : this.lastAttemptedAt, + lastError: lastError.present ? lastError.value : this.lastError, + ); + SyncMetadataData copyWithCompanion(SyncMetadataCompanion data) { + return SyncMetadataData( + entityType: + data.entityType.present ? data.entityType.value : this.entityType, + lastSyncedAt: data.lastSyncedAt.present + ? data.lastSyncedAt.value + : this.lastSyncedAt, + lastAttemptedAt: data.lastAttemptedAt.present + ? data.lastAttemptedAt.value + : this.lastAttemptedAt, + lastError: data.lastError.present ? data.lastError.value : this.lastError, + ); + } + + @override + String toString() { + return (StringBuffer('SyncMetadataData(') + ..write('entityType: $entityType, ') + ..write('lastSyncedAt: $lastSyncedAt, ') + ..write('lastAttemptedAt: $lastAttemptedAt, ') + ..write('lastError: $lastError') + ..write(')')) + .toString(); + } + + @override + int get hashCode => + Object.hash(entityType, lastSyncedAt, lastAttemptedAt, lastError); + @override + bool operator ==(Object other) => + identical(this, other) || + (other is SyncMetadataData && + other.entityType == this.entityType && + other.lastSyncedAt == this.lastSyncedAt && + other.lastAttemptedAt == this.lastAttemptedAt && + other.lastError == this.lastError); +} + +class SyncMetadataCompanion extends UpdateCompanion { + final Value entityType; + final Value lastSyncedAt; + final Value lastAttemptedAt; + final Value lastError; + final Value rowid; + const SyncMetadataCompanion({ + this.entityType = const Value.absent(), + this.lastSyncedAt = const Value.absent(), + this.lastAttemptedAt = const Value.absent(), + this.lastError = const Value.absent(), + this.rowid = const Value.absent(), + }); + SyncMetadataCompanion.insert({ + required String entityType, + this.lastSyncedAt = const Value.absent(), + this.lastAttemptedAt = const Value.absent(), + this.lastError = const Value.absent(), + this.rowid = const Value.absent(), + }) : entityType = Value(entityType); + static Insertable custom({ + Expression? entityType, + Expression? lastSyncedAt, + Expression? lastAttemptedAt, + Expression? lastError, + Expression? rowid, + }) { + return RawValuesInsertable({ + if (entityType != null) 'entity_type': entityType, + if (lastSyncedAt != null) 'last_synced_at': lastSyncedAt, + if (lastAttemptedAt != null) 'last_attempted_at': lastAttemptedAt, + if (lastError != null) 'last_error': lastError, + if (rowid != null) 'rowid': rowid, + }); + } + + SyncMetadataCompanion copyWith( + {Value? entityType, + Value? lastSyncedAt, + Value? lastAttemptedAt, + Value? lastError, + Value? rowid}) { + return SyncMetadataCompanion( + entityType: entityType ?? this.entityType, + lastSyncedAt: lastSyncedAt ?? this.lastSyncedAt, + lastAttemptedAt: lastAttemptedAt ?? this.lastAttemptedAt, + lastError: lastError ?? this.lastError, + rowid: rowid ?? this.rowid, + ); + } + + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + if (entityType.present) { + map['entity_type'] = Variable(entityType.value); + } + if (lastSyncedAt.present) { + map['last_synced_at'] = Variable(lastSyncedAt.value); + } + if (lastAttemptedAt.present) { + map['last_attempted_at'] = Variable(lastAttemptedAt.value); + } + if (lastError.present) { + map['last_error'] = Variable(lastError.value); + } + if (rowid.present) { + map['rowid'] = Variable(rowid.value); + } + return map; + } + + @override + String toString() { + return (StringBuffer('SyncMetadataCompanion(') + ..write('entityType: $entityType, ') + ..write('lastSyncedAt: $lastSyncedAt, ') + ..write('lastAttemptedAt: $lastAttemptedAt, ') + ..write('lastError: $lastError, ') + ..write('rowid: $rowid') + ..write(')')) + .toString(); + } +} + +class Categorizables extends Table + with TableInfo { + @override + final GeneratedDatabase attachedDatabase; + final String? _alias; + Categorizables(this.attachedDatabase, [this._alias]); + late final GeneratedColumn categorizableId = GeneratedColumn( + 'categorizable_id', aliasedName, false, + type: DriftSqlType.string, requiredDuringInsert: true); + late final GeneratedColumn categorizableType = + GeneratedColumn('categorizable_type', aliasedName, false, + type: DriftSqlType.string, requiredDuringInsert: true); + late final GeneratedColumn categoryClientId = GeneratedColumn( + 'category_client_id', aliasedName, false, + type: DriftSqlType.string, + requiredDuringInsert: true, + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'REFERENCES categories (client_id)')); + @override + List get $columns => + [categorizableId, categorizableType, categoryClientId]; + @override + String get aliasedName => _alias ?? actualTableName; + @override + String get actualTableName => $name; + static const String $name = 'categorizables'; + @override + Set get $primaryKey => + {categorizableId, categorizableType, categoryClientId}; + @override + CategorizablesData map(Map data, {String? tablePrefix}) { + final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; + return CategorizablesData( + categorizableId: attachedDatabase.typeMapping.read( + DriftSqlType.string, data['${effectivePrefix}categorizable_id'])!, + categorizableType: attachedDatabase.typeMapping.read( + DriftSqlType.string, data['${effectivePrefix}categorizable_type'])!, + categoryClientId: attachedDatabase.typeMapping.read( + DriftSqlType.string, data['${effectivePrefix}category_client_id'])!, + ); + } + + @override + Categorizables createAlias(String alias) { + return Categorizables(attachedDatabase, alias); + } +} + +class CategorizablesData extends DataClass + implements Insertable { + final String categorizableId; + final String categorizableType; + final String categoryClientId; + const CategorizablesData( + {required this.categorizableId, + required this.categorizableType, + required this.categoryClientId}); + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + map['categorizable_id'] = Variable(categorizableId); + map['categorizable_type'] = Variable(categorizableType); + map['category_client_id'] = Variable(categoryClientId); + return map; + } + + CategorizablesCompanion toCompanion(bool nullToAbsent) { + return CategorizablesCompanion( + categorizableId: Value(categorizableId), + categorizableType: Value(categorizableType), + categoryClientId: Value(categoryClientId), + ); + } + + factory CategorizablesData.fromJson(Map json, + {ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return CategorizablesData( + categorizableId: serializer.fromJson(json['categorizableId']), + categorizableType: serializer.fromJson(json['categorizableType']), + categoryClientId: serializer.fromJson(json['categoryClientId']), + ); + } + @override + Map toJson({ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return { + 'categorizableId': serializer.toJson(categorizableId), + 'categorizableType': serializer.toJson(categorizableType), + 'categoryClientId': serializer.toJson(categoryClientId), + }; + } + + CategorizablesData copyWith( + {String? categorizableId, + String? categorizableType, + String? categoryClientId}) => + CategorizablesData( + categorizableId: categorizableId ?? this.categorizableId, + categorizableType: categorizableType ?? this.categorizableType, + categoryClientId: categoryClientId ?? this.categoryClientId, + ); + CategorizablesData copyWithCompanion(CategorizablesCompanion data) { + return CategorizablesData( + categorizableId: data.categorizableId.present + ? data.categorizableId.value + : this.categorizableId, + categorizableType: data.categorizableType.present + ? data.categorizableType.value + : this.categorizableType, + categoryClientId: data.categoryClientId.present + ? data.categoryClientId.value + : this.categoryClientId, + ); + } + + @override + String toString() { + return (StringBuffer('CategorizablesData(') + ..write('categorizableId: $categorizableId, ') + ..write('categorizableType: $categorizableType, ') + ..write('categoryClientId: $categoryClientId') + ..write(')')) + .toString(); + } + + @override + int get hashCode => + Object.hash(categorizableId, categorizableType, categoryClientId); + @override + bool operator ==(Object other) => + identical(this, other) || + (other is CategorizablesData && + other.categorizableId == this.categorizableId && + other.categorizableType == this.categorizableType && + other.categoryClientId == this.categoryClientId); +} + +class CategorizablesCompanion extends UpdateCompanion { + final Value categorizableId; + final Value categorizableType; + final Value categoryClientId; + final Value rowid; + const CategorizablesCompanion({ + this.categorizableId = const Value.absent(), + this.categorizableType = const Value.absent(), + this.categoryClientId = const Value.absent(), + this.rowid = const Value.absent(), + }); + CategorizablesCompanion.insert({ + required String categorizableId, + required String categorizableType, + required String categoryClientId, + this.rowid = const Value.absent(), + }) : categorizableId = Value(categorizableId), + categorizableType = Value(categorizableType), + categoryClientId = Value(categoryClientId); + static Insertable custom({ + Expression? categorizableId, + Expression? categorizableType, + Expression? categoryClientId, + Expression? rowid, + }) { + return RawValuesInsertable({ + if (categorizableId != null) 'categorizable_id': categorizableId, + if (categorizableType != null) 'categorizable_type': categorizableType, + if (categoryClientId != null) 'category_client_id': categoryClientId, + if (rowid != null) 'rowid': rowid, + }); + } + + CategorizablesCompanion copyWith( + {Value? categorizableId, + Value? categorizableType, + Value? categoryClientId, + Value? rowid}) { + return CategorizablesCompanion( + categorizableId: categorizableId ?? this.categorizableId, + categorizableType: categorizableType ?? this.categorizableType, + categoryClientId: categoryClientId ?? this.categoryClientId, + rowid: rowid ?? this.rowid, + ); + } + + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + if (categorizableId.present) { + map['categorizable_id'] = Variable(categorizableId.value); + } + if (categorizableType.present) { + map['categorizable_type'] = Variable(categorizableType.value); + } + if (categoryClientId.present) { + map['category_client_id'] = Variable(categoryClientId.value); + } + if (rowid.present) { + map['rowid'] = Variable(rowid.value); + } + return map; + } + + @override + String toString() { + return (StringBuffer('CategorizablesCompanion(') + ..write('categorizableId: $categorizableId, ') + ..write('categorizableType: $categorizableType, ') + ..write('categoryClientId: $categoryClientId, ') + ..write('rowid: $rowid') + ..write(')')) + .toString(); + } +} + +class Notifications extends Table + with TableInfo { + @override + final GeneratedDatabase attachedDatabase; + final String? _alias; + Notifications(this.attachedDatabase, [this._alias]); + late final GeneratedColumn id = GeneratedColumn( + 'id', aliasedName, true, + type: DriftSqlType.int, + requiredDuringInsert: false, + defaultConstraints: GeneratedColumn.constraintIsAlways('UNIQUE')); + late final GeneratedColumn userId = GeneratedColumn( + 'user_id', aliasedName, true, + type: DriftSqlType.int, requiredDuringInsert: false); + late final GeneratedColumn clientId = GeneratedColumn( + 'client_id', aliasedName, false, + type: DriftSqlType.string, + requiredDuringInsert: false, + defaultValue: const CustomExpression('\'\'')); + late final GeneratedColumn rev = GeneratedColumn( + 'rev', aliasedName, true, + type: DriftSqlType.string, + requiredDuringInsert: false, + defaultValue: const CustomExpression('\'1\'')); + late final GeneratedColumn createdAt = GeneratedColumn( + 'created_at', aliasedName, false, + type: DriftSqlType.dateTime, + requiredDuringInsert: false, + defaultValue: const CustomExpression('CURRENT_TIMESTAMP')); + late final GeneratedColumn updatedAt = GeneratedColumn( + 'updated_at', aliasedName, false, + type: DriftSqlType.dateTime, + requiredDuringInsert: false, + defaultValue: const CustomExpression('CURRENT_TIMESTAMP')); + late final GeneratedColumn deletedAt = GeneratedColumn( + 'deleted_at', aliasedName, true, + type: DriftSqlType.dateTime, requiredDuringInsert: false); + late final GeneratedColumn lastSyncedAt = GeneratedColumn( + 'last_synced_at', aliasedName, true, + type: DriftSqlType.dateTime, requiredDuringInsert: false); + late final GeneratedColumn type = GeneratedColumn( + 'type', aliasedName, false, + type: DriftSqlType.string, requiredDuringInsert: true); + late final GeneratedColumn title = GeneratedColumn( + 'title', aliasedName, false, + type: DriftSqlType.string, requiredDuringInsert: true); + late final GeneratedColumn body = GeneratedColumn( + 'body', aliasedName, false, + type: DriftSqlType.string, requiredDuringInsert: true); + late final GeneratedColumn data = GeneratedColumn( + 'data', aliasedName, false, + type: DriftSqlType.string, requiredDuringInsert: true); + late final GeneratedColumn readAt = GeneratedColumn( + 'read_at', aliasedName, true, + type: DriftSqlType.dateTime, requiredDuringInsert: false); + @override + List get $columns => [ + id, + userId, + clientId, + rev, + createdAt, + updatedAt, + deletedAt, + lastSyncedAt, + type, + title, + body, + data, + readAt + ]; + @override + String get aliasedName => _alias ?? actualTableName; + @override + String get actualTableName => $name; + static const String $name = 'notifications'; + @override + Set get $primaryKey => {clientId}; + @override + NotificationsData map(Map data, {String? tablePrefix}) { + final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; + return NotificationsData( + id: attachedDatabase.typeMapping + .read(DriftSqlType.int, data['${effectivePrefix}id']), + userId: attachedDatabase.typeMapping + .read(DriftSqlType.int, data['${effectivePrefix}user_id']), + clientId: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}client_id'])!, + rev: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}rev']), + createdAt: attachedDatabase.typeMapping + .read(DriftSqlType.dateTime, data['${effectivePrefix}created_at'])!, + updatedAt: attachedDatabase.typeMapping + .read(DriftSqlType.dateTime, data['${effectivePrefix}updated_at'])!, + deletedAt: attachedDatabase.typeMapping + .read(DriftSqlType.dateTime, data['${effectivePrefix}deleted_at']), + lastSyncedAt: attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, data['${effectivePrefix}last_synced_at']), + type: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}type'])!, + title: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}title'])!, + body: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}body'])!, + data: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}data'])!, + readAt: attachedDatabase.typeMapping + .read(DriftSqlType.dateTime, data['${effectivePrefix}read_at']), + ); + } + + @override + Notifications createAlias(String alias) { + return Notifications(attachedDatabase, alias); + } +} + +class NotificationsData extends DataClass + implements Insertable { + final int? id; + final int? userId; + final String clientId; + final String? rev; + final DateTime createdAt; + final DateTime updatedAt; + final DateTime? deletedAt; + final DateTime? lastSyncedAt; + final String type; + final String title; + final String body; + final String data; + final DateTime? readAt; + const NotificationsData( + {this.id, + this.userId, + required this.clientId, + this.rev, + required this.createdAt, + required this.updatedAt, + this.deletedAt, + this.lastSyncedAt, + required this.type, + required this.title, + required this.body, + required this.data, + this.readAt}); + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + if (!nullToAbsent || id != null) { + map['id'] = Variable(id); + } + if (!nullToAbsent || userId != null) { + map['user_id'] = Variable(userId); + } + map['client_id'] = Variable(clientId); + if (!nullToAbsent || rev != null) { + map['rev'] = Variable(rev); + } + map['created_at'] = Variable(createdAt); + map['updated_at'] = Variable(updatedAt); + if (!nullToAbsent || deletedAt != null) { + map['deleted_at'] = Variable(deletedAt); + } + if (!nullToAbsent || lastSyncedAt != null) { + map['last_synced_at'] = Variable(lastSyncedAt); + } + map['type'] = Variable(type); + map['title'] = Variable(title); + map['body'] = Variable(body); + map['data'] = Variable(data); + if (!nullToAbsent || readAt != null) { + map['read_at'] = Variable(readAt); + } + return map; + } + + NotificationsCompanion toCompanion(bool nullToAbsent) { + return NotificationsCompanion( + id: id == null && nullToAbsent ? const Value.absent() : Value(id), + userId: + userId == null && nullToAbsent ? const Value.absent() : Value(userId), + clientId: Value(clientId), + rev: rev == null && nullToAbsent ? const Value.absent() : Value(rev), + createdAt: Value(createdAt), + updatedAt: Value(updatedAt), + deletedAt: deletedAt == null && nullToAbsent + ? const Value.absent() + : Value(deletedAt), + lastSyncedAt: lastSyncedAt == null && nullToAbsent + ? const Value.absent() + : Value(lastSyncedAt), + type: Value(type), + title: Value(title), + body: Value(body), + data: Value(data), + readAt: + readAt == null && nullToAbsent ? const Value.absent() : Value(readAt), + ); + } + + factory NotificationsData.fromJson(Map json, + {ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return NotificationsData( + id: serializer.fromJson(json['id']), + userId: serializer.fromJson(json['userId']), + clientId: serializer.fromJson(json['clientId']), + rev: serializer.fromJson(json['rev']), + createdAt: serializer.fromJson(json['createdAt']), + updatedAt: serializer.fromJson(json['updatedAt']), + deletedAt: serializer.fromJson(json['deletedAt']), + lastSyncedAt: serializer.fromJson(json['lastSyncedAt']), + type: serializer.fromJson(json['type']), + title: serializer.fromJson(json['title']), + body: serializer.fromJson(json['body']), + data: serializer.fromJson(json['data']), + readAt: serializer.fromJson(json['readAt']), + ); + } + @override + Map toJson({ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return { + 'id': serializer.toJson(id), + 'userId': serializer.toJson(userId), + 'clientId': serializer.toJson(clientId), + 'rev': serializer.toJson(rev), + 'createdAt': serializer.toJson(createdAt), + 'updatedAt': serializer.toJson(updatedAt), + 'deletedAt': serializer.toJson(deletedAt), + 'lastSyncedAt': serializer.toJson(lastSyncedAt), + 'type': serializer.toJson(type), + 'title': serializer.toJson(title), + 'body': serializer.toJson(body), + 'data': serializer.toJson(data), + 'readAt': serializer.toJson(readAt), + }; + } + + NotificationsData copyWith( + {Value id = const Value.absent(), + Value userId = const Value.absent(), + String? clientId, + Value rev = const Value.absent(), + DateTime? createdAt, + DateTime? updatedAt, + Value deletedAt = const Value.absent(), + Value lastSyncedAt = const Value.absent(), + String? type, + String? title, + String? body, + String? data, + Value readAt = const Value.absent()}) => + NotificationsData( + id: id.present ? id.value : this.id, + userId: userId.present ? userId.value : this.userId, + clientId: clientId ?? this.clientId, + rev: rev.present ? rev.value : this.rev, + createdAt: createdAt ?? this.createdAt, + updatedAt: updatedAt ?? this.updatedAt, + deletedAt: deletedAt.present ? deletedAt.value : this.deletedAt, + lastSyncedAt: + lastSyncedAt.present ? lastSyncedAt.value : this.lastSyncedAt, + type: type ?? this.type, + title: title ?? this.title, + body: body ?? this.body, + data: data ?? this.data, + readAt: readAt.present ? readAt.value : this.readAt, + ); + NotificationsData copyWithCompanion(NotificationsCompanion data) { + return NotificationsData( + id: data.id.present ? data.id.value : this.id, + userId: data.userId.present ? data.userId.value : this.userId, + clientId: data.clientId.present ? data.clientId.value : this.clientId, + rev: data.rev.present ? data.rev.value : this.rev, + createdAt: data.createdAt.present ? data.createdAt.value : this.createdAt, + updatedAt: data.updatedAt.present ? data.updatedAt.value : this.updatedAt, + deletedAt: data.deletedAt.present ? data.deletedAt.value : this.deletedAt, + lastSyncedAt: data.lastSyncedAt.present + ? data.lastSyncedAt.value + : this.lastSyncedAt, + type: data.type.present ? data.type.value : this.type, + title: data.title.present ? data.title.value : this.title, + body: data.body.present ? data.body.value : this.body, + data: data.data.present ? data.data.value : this.data, + readAt: data.readAt.present ? data.readAt.value : this.readAt, + ); + } + + @override + String toString() { + return (StringBuffer('NotificationsData(') + ..write('id: $id, ') + ..write('userId: $userId, ') + ..write('clientId: $clientId, ') + ..write('rev: $rev, ') + ..write('createdAt: $createdAt, ') + ..write('updatedAt: $updatedAt, ') + ..write('deletedAt: $deletedAt, ') + ..write('lastSyncedAt: $lastSyncedAt, ') + ..write('type: $type, ') + ..write('title: $title, ') + ..write('body: $body, ') + ..write('data: $data, ') + ..write('readAt: $readAt') + ..write(')')) + .toString(); + } + + @override + int get hashCode => Object.hash(id, userId, clientId, rev, createdAt, + updatedAt, deletedAt, lastSyncedAt, type, title, body, data, readAt); + @override + bool operator ==(Object other) => + identical(this, other) || + (other is NotificationsData && + other.id == this.id && + other.userId == this.userId && + other.clientId == this.clientId && + other.rev == this.rev && + other.createdAt == this.createdAt && + other.updatedAt == this.updatedAt && + other.deletedAt == this.deletedAt && + other.lastSyncedAt == this.lastSyncedAt && + other.type == this.type && + other.title == this.title && + other.body == this.body && + other.data == this.data && + other.readAt == this.readAt); +} + +class NotificationsCompanion extends UpdateCompanion { + final Value id; + final Value userId; + final Value clientId; + final Value rev; + final Value createdAt; + final Value updatedAt; + final Value deletedAt; + final Value lastSyncedAt; + final Value type; + final Value title; + final Value body; + final Value data; + final Value readAt; + final Value rowid; + const NotificationsCompanion({ + this.id = const Value.absent(), + this.userId = const Value.absent(), + this.clientId = const Value.absent(), + this.rev = const Value.absent(), + this.createdAt = const Value.absent(), + this.updatedAt = const Value.absent(), + this.deletedAt = const Value.absent(), + this.lastSyncedAt = const Value.absent(), + this.type = const Value.absent(), + this.title = const Value.absent(), + this.body = const Value.absent(), + this.data = const Value.absent(), + this.readAt = const Value.absent(), + this.rowid = const Value.absent(), + }); + NotificationsCompanion.insert({ + this.id = const Value.absent(), + this.userId = const Value.absent(), + this.clientId = const Value.absent(), + this.rev = const Value.absent(), + this.createdAt = const Value.absent(), + this.updatedAt = const Value.absent(), + this.deletedAt = const Value.absent(), + this.lastSyncedAt = const Value.absent(), + required String type, + required String title, + required String body, + required String data, + this.readAt = const Value.absent(), + this.rowid = const Value.absent(), + }) : type = Value(type), + title = Value(title), + body = Value(body), + data = Value(data); + static Insertable custom({ + Expression? id, + Expression? userId, + Expression? clientId, + Expression? rev, + Expression? createdAt, + Expression? updatedAt, + Expression? deletedAt, + Expression? lastSyncedAt, + Expression? type, + Expression? title, + Expression? body, + Expression? data, + Expression? readAt, + Expression? rowid, + }) { + return RawValuesInsertable({ + if (id != null) 'id': id, + if (userId != null) 'user_id': userId, + if (clientId != null) 'client_id': clientId, + if (rev != null) 'rev': rev, + if (createdAt != null) 'created_at': createdAt, + if (updatedAt != null) 'updated_at': updatedAt, + if (deletedAt != null) 'deleted_at': deletedAt, + if (lastSyncedAt != null) 'last_synced_at': lastSyncedAt, + if (type != null) 'type': type, + if (title != null) 'title': title, + if (body != null) 'body': body, + if (data != null) 'data': data, + if (readAt != null) 'read_at': readAt, + if (rowid != null) 'rowid': rowid, + }); + } + + NotificationsCompanion copyWith( + {Value? id, + Value? userId, + Value? clientId, + Value? rev, + Value? createdAt, + Value? updatedAt, + Value? deletedAt, + Value? lastSyncedAt, + Value? type, + Value? title, + Value? body, + Value? data, + Value? readAt, + Value? rowid}) { + return NotificationsCompanion( + id: id ?? this.id, + userId: userId ?? this.userId, + clientId: clientId ?? this.clientId, + rev: rev ?? this.rev, + createdAt: createdAt ?? this.createdAt, + updatedAt: updatedAt ?? this.updatedAt, + deletedAt: deletedAt ?? this.deletedAt, + lastSyncedAt: lastSyncedAt ?? this.lastSyncedAt, + type: type ?? this.type, + title: title ?? this.title, + body: body ?? this.body, + data: data ?? this.data, + readAt: readAt ?? this.readAt, + rowid: rowid ?? this.rowid, + ); + } + + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + if (id.present) { + map['id'] = Variable(id.value); + } + if (userId.present) { + map['user_id'] = Variable(userId.value); + } + if (clientId.present) { + map['client_id'] = Variable(clientId.value); + } + if (rev.present) { + map['rev'] = Variable(rev.value); + } + if (createdAt.present) { + map['created_at'] = Variable(createdAt.value); + } + if (updatedAt.present) { + map['updated_at'] = Variable(updatedAt.value); + } + if (deletedAt.present) { + map['deleted_at'] = Variable(deletedAt.value); + } + if (lastSyncedAt.present) { + map['last_synced_at'] = Variable(lastSyncedAt.value); + } + if (type.present) { + map['type'] = Variable(type.value); + } + if (title.present) { + map['title'] = Variable(title.value); + } + if (body.present) { + map['body'] = Variable(body.value); + } + if (data.present) { + map['data'] = Variable(data.value); + } + if (readAt.present) { + map['read_at'] = Variable(readAt.value); + } + if (rowid.present) { + map['rowid'] = Variable(rowid.value); + } + return map; + } + + @override + String toString() { + return (StringBuffer('NotificationsCompanion(') + ..write('id: $id, ') + ..write('userId: $userId, ') + ..write('clientId: $clientId, ') + ..write('rev: $rev, ') + ..write('createdAt: $createdAt, ') + ..write('updatedAt: $updatedAt, ') + ..write('deletedAt: $deletedAt, ') + ..write('lastSyncedAt: $lastSyncedAt, ') + ..write('type: $type, ') + ..write('title: $title, ') + ..write('body: $body, ') + ..write('data: $data, ') + ..write('readAt: $readAt, ') + ..write('rowid: $rowid') + ..write(')')) + .toString(); + } +} + +class MediaFiles extends Table with TableInfo { + @override + final GeneratedDatabase attachedDatabase; + final String? _alias; + MediaFiles(this.attachedDatabase, [this._alias]); + late final GeneratedColumn path = GeneratedColumn( + 'path', aliasedName, false, + type: DriftSqlType.string, requiredDuringInsert: true); + late final GeneratedColumn id = GeneratedColumn( + 'id', aliasedName, true, + type: DriftSqlType.int, requiredDuringInsert: false); + late final GeneratedColumn type = GeneratedColumn( + 'type', aliasedName, true, + type: DriftSqlType.string, requiredDuringInsert: false); + late final GeneratedColumn fileableType = GeneratedColumn( + 'fileable_type', aliasedName, true, + type: DriftSqlType.string, requiredDuringInsert: false); + late final GeneratedColumn fileableId = GeneratedColumn( + 'fileable_id', aliasedName, true, + type: DriftSqlType.int, requiredDuringInsert: false); + late final GeneratedColumn localFileableType = + GeneratedColumn('local_fileable_type', aliasedName, true, + type: DriftSqlType.string, requiredDuringInsert: false); + late final GeneratedColumn localFileableId = GeneratedColumn( + 'local_fileable_id', aliasedName, true, + type: DriftSqlType.string, requiredDuringInsert: false); + late final GeneratedColumn createdAt = GeneratedColumn( + 'created_at', aliasedName, true, + type: DriftSqlType.dateTime, requiredDuringInsert: false); + late final GeneratedColumn updatedAt = GeneratedColumn( + 'updated_at', aliasedName, true, + type: DriftSqlType.dateTime, requiredDuringInsert: false); + @override + List get $columns => [ + path, + id, + type, + fileableType, + fileableId, + localFileableType, + localFileableId, + createdAt, + updatedAt + ]; + @override + String get aliasedName => _alias ?? actualTableName; + @override + String get actualTableName => $name; + static const String $name = 'media_files'; + @override + Set get $primaryKey => {path}; + @override + MediaFilesData map(Map data, {String? tablePrefix}) { + final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; + return MediaFilesData( + path: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}path'])!, + id: attachedDatabase.typeMapping + .read(DriftSqlType.int, data['${effectivePrefix}id']), + type: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}type']), + fileableType: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}fileable_type']), + fileableId: attachedDatabase.typeMapping + .read(DriftSqlType.int, data['${effectivePrefix}fileable_id']), + localFileableType: attachedDatabase.typeMapping.read( + DriftSqlType.string, data['${effectivePrefix}local_fileable_type']), + localFileableId: attachedDatabase.typeMapping.read( + DriftSqlType.string, data['${effectivePrefix}local_fileable_id']), + createdAt: attachedDatabase.typeMapping + .read(DriftSqlType.dateTime, data['${effectivePrefix}created_at']), + updatedAt: attachedDatabase.typeMapping + .read(DriftSqlType.dateTime, data['${effectivePrefix}updated_at']), + ); + } + + @override + MediaFiles createAlias(String alias) { + return MediaFiles(attachedDatabase, alias); + } +} + +class MediaFilesData extends DataClass implements Insertable { + final String path; + final int? id; + final String? type; + final String? fileableType; + final int? fileableId; + final String? localFileableType; + final String? localFileableId; + final DateTime? createdAt; + final DateTime? updatedAt; + const MediaFilesData( + {required this.path, + this.id, + this.type, + this.fileableType, + this.fileableId, + this.localFileableType, + this.localFileableId, + this.createdAt, + this.updatedAt}); + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + map['path'] = Variable(path); + if (!nullToAbsent || id != null) { + map['id'] = Variable(id); + } + if (!nullToAbsent || type != null) { + map['type'] = Variable(type); + } + if (!nullToAbsent || fileableType != null) { + map['fileable_type'] = Variable(fileableType); + } + if (!nullToAbsent || fileableId != null) { + map['fileable_id'] = Variable(fileableId); + } + if (!nullToAbsent || localFileableType != null) { + map['local_fileable_type'] = Variable(localFileableType); + } + if (!nullToAbsent || localFileableId != null) { + map['local_fileable_id'] = Variable(localFileableId); + } + if (!nullToAbsent || createdAt != null) { + map['created_at'] = Variable(createdAt); + } + if (!nullToAbsent || updatedAt != null) { + map['updated_at'] = Variable(updatedAt); + } + return map; + } + + MediaFilesCompanion toCompanion(bool nullToAbsent) { + return MediaFilesCompanion( + path: Value(path), + id: id == null && nullToAbsent ? const Value.absent() : Value(id), + type: type == null && nullToAbsent ? const Value.absent() : Value(type), + fileableType: fileableType == null && nullToAbsent + ? const Value.absent() + : Value(fileableType), + fileableId: fileableId == null && nullToAbsent + ? const Value.absent() + : Value(fileableId), + localFileableType: localFileableType == null && nullToAbsent + ? const Value.absent() + : Value(localFileableType), + localFileableId: localFileableId == null && nullToAbsent + ? const Value.absent() + : Value(localFileableId), + createdAt: createdAt == null && nullToAbsent + ? const Value.absent() + : Value(createdAt), + updatedAt: updatedAt == null && nullToAbsent + ? const Value.absent() + : Value(updatedAt), + ); + } + + factory MediaFilesData.fromJson(Map json, + {ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return MediaFilesData( + path: serializer.fromJson(json['path']), + id: serializer.fromJson(json['id']), + type: serializer.fromJson(json['type']), + fileableType: serializer.fromJson(json['fileableType']), + fileableId: serializer.fromJson(json['fileableId']), + localFileableType: + serializer.fromJson(json['localFileableType']), + localFileableId: serializer.fromJson(json['localFileableId']), + createdAt: serializer.fromJson(json['createdAt']), + updatedAt: serializer.fromJson(json['updatedAt']), + ); + } + @override + Map toJson({ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return { + 'path': serializer.toJson(path), + 'id': serializer.toJson(id), + 'type': serializer.toJson(type), + 'fileableType': serializer.toJson(fileableType), + 'fileableId': serializer.toJson(fileableId), + 'localFileableType': serializer.toJson(localFileableType), + 'localFileableId': serializer.toJson(localFileableId), + 'createdAt': serializer.toJson(createdAt), + 'updatedAt': serializer.toJson(updatedAt), + }; + } + + MediaFilesData copyWith( + {String? path, + Value id = const Value.absent(), + Value type = const Value.absent(), + Value fileableType = const Value.absent(), + Value fileableId = const Value.absent(), + Value localFileableType = const Value.absent(), + Value localFileableId = const Value.absent(), + Value createdAt = const Value.absent(), + Value updatedAt = const Value.absent()}) => + MediaFilesData( + path: path ?? this.path, + id: id.present ? id.value : this.id, + type: type.present ? type.value : this.type, + fileableType: + fileableType.present ? fileableType.value : this.fileableType, + fileableId: fileableId.present ? fileableId.value : this.fileableId, + localFileableType: localFileableType.present + ? localFileableType.value + : this.localFileableType, + localFileableId: localFileableId.present + ? localFileableId.value + : this.localFileableId, + createdAt: createdAt.present ? createdAt.value : this.createdAt, + updatedAt: updatedAt.present ? updatedAt.value : this.updatedAt, + ); + MediaFilesData copyWithCompanion(MediaFilesCompanion data) { + return MediaFilesData( + path: data.path.present ? data.path.value : this.path, + id: data.id.present ? data.id.value : this.id, + type: data.type.present ? data.type.value : this.type, + fileableType: data.fileableType.present + ? data.fileableType.value + : this.fileableType, + fileableId: + data.fileableId.present ? data.fileableId.value : this.fileableId, + localFileableType: data.localFileableType.present + ? data.localFileableType.value + : this.localFileableType, + localFileableId: data.localFileableId.present + ? data.localFileableId.value + : this.localFileableId, + createdAt: data.createdAt.present ? data.createdAt.value : this.createdAt, + updatedAt: data.updatedAt.present ? data.updatedAt.value : this.updatedAt, + ); + } + + @override + String toString() { + return (StringBuffer('MediaFilesData(') + ..write('path: $path, ') + ..write('id: $id, ') + ..write('type: $type, ') + ..write('fileableType: $fileableType, ') + ..write('fileableId: $fileableId, ') + ..write('localFileableType: $localFileableType, ') + ..write('localFileableId: $localFileableId, ') + ..write('createdAt: $createdAt, ') + ..write('updatedAt: $updatedAt') + ..write(')')) + .toString(); + } + + @override + int get hashCode => Object.hash(path, id, type, fileableType, fileableId, + localFileableType, localFileableId, createdAt, updatedAt); + @override + bool operator ==(Object other) => + identical(this, other) || + (other is MediaFilesData && + other.path == this.path && + other.id == this.id && + other.type == this.type && + other.fileableType == this.fileableType && + other.fileableId == this.fileableId && + other.localFileableType == this.localFileableType && + other.localFileableId == this.localFileableId && + other.createdAt == this.createdAt && + other.updatedAt == this.updatedAt); +} + +class MediaFilesCompanion extends UpdateCompanion { + final Value path; + final Value id; + final Value type; + final Value fileableType; + final Value fileableId; + final Value localFileableType; + final Value localFileableId; + final Value createdAt; + final Value updatedAt; + final Value rowid; + const MediaFilesCompanion({ + this.path = const Value.absent(), + this.id = const Value.absent(), + this.type = const Value.absent(), + this.fileableType = const Value.absent(), + this.fileableId = const Value.absent(), + this.localFileableType = const Value.absent(), + this.localFileableId = const Value.absent(), + this.createdAt = const Value.absent(), + this.updatedAt = const Value.absent(), + this.rowid = const Value.absent(), + }); + MediaFilesCompanion.insert({ + required String path, + this.id = const Value.absent(), + this.type = const Value.absent(), + this.fileableType = const Value.absent(), + this.fileableId = const Value.absent(), + this.localFileableType = const Value.absent(), + this.localFileableId = const Value.absent(), + this.createdAt = const Value.absent(), + this.updatedAt = const Value.absent(), + this.rowid = const Value.absent(), + }) : path = Value(path); + static Insertable custom({ + Expression? path, + Expression? id, + Expression? type, + Expression? fileableType, + Expression? fileableId, + Expression? localFileableType, + Expression? localFileableId, + Expression? createdAt, + Expression? updatedAt, + Expression? rowid, + }) { + return RawValuesInsertable({ + if (path != null) 'path': path, + if (id != null) 'id': id, + if (type != null) 'type': type, + if (fileableType != null) 'fileable_type': fileableType, + if (fileableId != null) 'fileable_id': fileableId, + if (localFileableType != null) 'local_fileable_type': localFileableType, + if (localFileableId != null) 'local_fileable_id': localFileableId, + if (createdAt != null) 'created_at': createdAt, + if (updatedAt != null) 'updated_at': updatedAt, + if (rowid != null) 'rowid': rowid, + }); + } + + MediaFilesCompanion copyWith( + {Value? path, + Value? id, + Value? type, + Value? fileableType, + Value? fileableId, + Value? localFileableType, + Value? localFileableId, + Value? createdAt, + Value? updatedAt, + Value? rowid}) { + return MediaFilesCompanion( + path: path ?? this.path, + id: id ?? this.id, + type: type ?? this.type, + fileableType: fileableType ?? this.fileableType, + fileableId: fileableId ?? this.fileableId, + localFileableType: localFileableType ?? this.localFileableType, + localFileableId: localFileableId ?? this.localFileableId, + createdAt: createdAt ?? this.createdAt, + updatedAt: updatedAt ?? this.updatedAt, + rowid: rowid ?? this.rowid, + ); + } + + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + if (path.present) { + map['path'] = Variable(path.value); + } + if (id.present) { + map['id'] = Variable(id.value); + } + if (type.present) { + map['type'] = Variable(type.value); + } + if (fileableType.present) { + map['fileable_type'] = Variable(fileableType.value); + } + if (fileableId.present) { + map['fileable_id'] = Variable(fileableId.value); + } + if (localFileableType.present) { + map['local_fileable_type'] = Variable(localFileableType.value); + } + if (localFileableId.present) { + map['local_fileable_id'] = Variable(localFileableId.value); + } + if (createdAt.present) { + map['created_at'] = Variable(createdAt.value); + } + if (updatedAt.present) { + map['updated_at'] = Variable(updatedAt.value); + } + if (rowid.present) { + map['rowid'] = Variable(rowid.value); + } + return map; + } + + @override + String toString() { + return (StringBuffer('MediaFilesCompanion(') + ..write('path: $path, ') + ..write('id: $id, ') + ..write('type: $type, ') + ..write('fileableType: $fileableType, ') + ..write('fileableId: $fileableId, ') + ..write('localFileableType: $localFileableType, ') + ..write('localFileableId: $localFileableId, ') + ..write('createdAt: $createdAt, ') + ..write('updatedAt: $updatedAt, ') + ..write('rowid: $rowid') + ..write(')')) + .toString(); + } +} + +class Transfers extends Table with TableInfo { + @override + final GeneratedDatabase attachedDatabase; + final String? _alias; + Transfers(this.attachedDatabase, [this._alias]); + late final GeneratedColumn id = GeneratedColumn( + 'id', aliasedName, true, + type: DriftSqlType.int, + requiredDuringInsert: false, + defaultConstraints: GeneratedColumn.constraintIsAlways('UNIQUE')); + late final GeneratedColumn userId = GeneratedColumn( + 'user_id', aliasedName, true, + type: DriftSqlType.int, requiredDuringInsert: false); + late final GeneratedColumn clientId = GeneratedColumn( + 'client_id', aliasedName, false, + type: DriftSqlType.string, + requiredDuringInsert: false, + defaultValue: const CustomExpression('\'\'')); + late final GeneratedColumn rev = GeneratedColumn( + 'rev', aliasedName, true, + type: DriftSqlType.string, + requiredDuringInsert: false, + defaultValue: const CustomExpression('\'1\'')); + late final GeneratedColumn createdAt = GeneratedColumn( + 'created_at', aliasedName, false, + type: DriftSqlType.dateTime, + requiredDuringInsert: false, + defaultValue: const CustomExpression('CURRENT_TIMESTAMP')); + late final GeneratedColumn updatedAt = GeneratedColumn( + 'updated_at', aliasedName, false, + type: DriftSqlType.dateTime, + requiredDuringInsert: false, + defaultValue: const CustomExpression('CURRENT_TIMESTAMP')); + late final GeneratedColumn deletedAt = GeneratedColumn( + 'deleted_at', aliasedName, true, + type: DriftSqlType.dateTime, requiredDuringInsert: false); + late final GeneratedColumn lastSyncedAt = GeneratedColumn( + 'last_synced_at', aliasedName, true, + type: DriftSqlType.dateTime, requiredDuringInsert: false); + late final GeneratedColumn amount = GeneratedColumn( + 'amount', aliasedName, false, + type: DriftSqlType.double, requiredDuringInsert: true); + late final GeneratedColumn fromWalletId = GeneratedColumn( + 'from_wallet_id', aliasedName, true, + type: DriftSqlType.int, requiredDuringInsert: false); + late final GeneratedColumn toWalletId = GeneratedColumn( + 'to_wallet_id', aliasedName, true, + type: DriftSqlType.int, requiredDuringInsert: false); + late final GeneratedColumn fromWalletClientId = + GeneratedColumn('from_wallet_client_id', aliasedName, true, + type: DriftSqlType.string, + requiredDuringInsert: false, + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'REFERENCES wallets (client_id)')); + late final GeneratedColumn toWalletClientId = GeneratedColumn( + 'to_wallet_client_id', aliasedName, true, + type: DriftSqlType.string, + requiredDuringInsert: false, + defaultConstraints: + GeneratedColumn.constraintIsAlways('REFERENCES wallets (client_id)')); + late final GeneratedColumn exchangeRate = GeneratedColumn( + 'exchange_rate', aliasedName, true, + type: DriftSqlType.double, requiredDuringInsert: false); + late final GeneratedColumn datetime = GeneratedColumn( + 'datetime', aliasedName, false, + type: DriftSqlType.dateTime, requiredDuringInsert: true); + late final GeneratedColumn expenseTransactionClientId = + GeneratedColumn( + 'expense_transaction_client_id', aliasedName, true, + type: DriftSqlType.string, + requiredDuringInsert: false, + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'REFERENCES transactions (client_id)')); + late final GeneratedColumn incomeTransactionClientId = + GeneratedColumn('income_transaction_client_id', aliasedName, true, + type: DriftSqlType.string, + requiredDuringInsert: false, + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'REFERENCES transactions (client_id)')); + @override + List get $columns => [ + id, + userId, + clientId, + rev, + createdAt, + updatedAt, + deletedAt, + lastSyncedAt, + amount, + fromWalletId, + toWalletId, + fromWalletClientId, + toWalletClientId, + exchangeRate, + datetime, + expenseTransactionClientId, + incomeTransactionClientId + ]; + @override + String get aliasedName => _alias ?? actualTableName; + @override + String get actualTableName => $name; + static const String $name = 'transfers'; + @override + Set get $primaryKey => {clientId}; + @override + TransfersData map(Map data, {String? tablePrefix}) { + final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; + return TransfersData( + id: attachedDatabase.typeMapping + .read(DriftSqlType.int, data['${effectivePrefix}id']), + userId: attachedDatabase.typeMapping + .read(DriftSqlType.int, data['${effectivePrefix}user_id']), + clientId: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}client_id'])!, + rev: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}rev']), + createdAt: attachedDatabase.typeMapping + .read(DriftSqlType.dateTime, data['${effectivePrefix}created_at'])!, + updatedAt: attachedDatabase.typeMapping + .read(DriftSqlType.dateTime, data['${effectivePrefix}updated_at'])!, + deletedAt: attachedDatabase.typeMapping + .read(DriftSqlType.dateTime, data['${effectivePrefix}deleted_at']), + lastSyncedAt: attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, data['${effectivePrefix}last_synced_at']), + amount: attachedDatabase.typeMapping + .read(DriftSqlType.double, data['${effectivePrefix}amount'])!, + fromWalletId: attachedDatabase.typeMapping + .read(DriftSqlType.int, data['${effectivePrefix}from_wallet_id']), + toWalletId: attachedDatabase.typeMapping + .read(DriftSqlType.int, data['${effectivePrefix}to_wallet_id']), + fromWalletClientId: attachedDatabase.typeMapping.read( + DriftSqlType.string, data['${effectivePrefix}from_wallet_client_id']), + toWalletClientId: attachedDatabase.typeMapping.read( + DriftSqlType.string, data['${effectivePrefix}to_wallet_client_id']), + exchangeRate: attachedDatabase.typeMapping + .read(DriftSqlType.double, data['${effectivePrefix}exchange_rate']), + datetime: attachedDatabase.typeMapping + .read(DriftSqlType.dateTime, data['${effectivePrefix}datetime'])!, + expenseTransactionClientId: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}expense_transaction_client_id']), + incomeTransactionClientId: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}income_transaction_client_id']), + ); + } + + @override + Transfers createAlias(String alias) { + return Transfers(attachedDatabase, alias); + } +} + +class TransfersData extends DataClass implements Insertable { + final int? id; + final int? userId; + final String clientId; + final String? rev; + final DateTime createdAt; + final DateTime updatedAt; + final DateTime? deletedAt; + final DateTime? lastSyncedAt; + final double amount; + final int? fromWalletId; + final int? toWalletId; + final String? fromWalletClientId; + final String? toWalletClientId; + final double? exchangeRate; + final DateTime datetime; + final String? expenseTransactionClientId; + final String? incomeTransactionClientId; + const TransfersData( + {this.id, + this.userId, + required this.clientId, + this.rev, + required this.createdAt, + required this.updatedAt, + this.deletedAt, + this.lastSyncedAt, + required this.amount, + this.fromWalletId, + this.toWalletId, + this.fromWalletClientId, + this.toWalletClientId, + this.exchangeRate, + required this.datetime, + this.expenseTransactionClientId, + this.incomeTransactionClientId}); + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + if (!nullToAbsent || id != null) { + map['id'] = Variable(id); + } + if (!nullToAbsent || userId != null) { + map['user_id'] = Variable(userId); + } + map['client_id'] = Variable(clientId); + if (!nullToAbsent || rev != null) { + map['rev'] = Variable(rev); + } + map['created_at'] = Variable(createdAt); + map['updated_at'] = Variable(updatedAt); + if (!nullToAbsent || deletedAt != null) { + map['deleted_at'] = Variable(deletedAt); + } + if (!nullToAbsent || lastSyncedAt != null) { + map['last_synced_at'] = Variable(lastSyncedAt); + } + map['amount'] = Variable(amount); + if (!nullToAbsent || fromWalletId != null) { + map['from_wallet_id'] = Variable(fromWalletId); + } + if (!nullToAbsent || toWalletId != null) { + map['to_wallet_id'] = Variable(toWalletId); + } + if (!nullToAbsent || fromWalletClientId != null) { + map['from_wallet_client_id'] = Variable(fromWalletClientId); + } + if (!nullToAbsent || toWalletClientId != null) { + map['to_wallet_client_id'] = Variable(toWalletClientId); + } + if (!nullToAbsent || exchangeRate != null) { + map['exchange_rate'] = Variable(exchangeRate); + } + map['datetime'] = Variable(datetime); + if (!nullToAbsent || expenseTransactionClientId != null) { + map['expense_transaction_client_id'] = + Variable(expenseTransactionClientId); + } + if (!nullToAbsent || incomeTransactionClientId != null) { + map['income_transaction_client_id'] = + Variable(incomeTransactionClientId); + } + return map; + } + + TransfersCompanion toCompanion(bool nullToAbsent) { + return TransfersCompanion( + id: id == null && nullToAbsent ? const Value.absent() : Value(id), + userId: + userId == null && nullToAbsent ? const Value.absent() : Value(userId), + clientId: Value(clientId), + rev: rev == null && nullToAbsent ? const Value.absent() : Value(rev), + createdAt: Value(createdAt), + updatedAt: Value(updatedAt), + deletedAt: deletedAt == null && nullToAbsent + ? const Value.absent() + : Value(deletedAt), + lastSyncedAt: lastSyncedAt == null && nullToAbsent + ? const Value.absent() + : Value(lastSyncedAt), + amount: Value(amount), + fromWalletId: fromWalletId == null && nullToAbsent + ? const Value.absent() + : Value(fromWalletId), + toWalletId: toWalletId == null && nullToAbsent + ? const Value.absent() + : Value(toWalletId), + fromWalletClientId: fromWalletClientId == null && nullToAbsent + ? const Value.absent() + : Value(fromWalletClientId), + toWalletClientId: toWalletClientId == null && nullToAbsent + ? const Value.absent() + : Value(toWalletClientId), + exchangeRate: exchangeRate == null && nullToAbsent + ? const Value.absent() + : Value(exchangeRate), + datetime: Value(datetime), + expenseTransactionClientId: + expenseTransactionClientId == null && nullToAbsent + ? const Value.absent() + : Value(expenseTransactionClientId), + incomeTransactionClientId: + incomeTransactionClientId == null && nullToAbsent + ? const Value.absent() + : Value(incomeTransactionClientId), + ); + } + + factory TransfersData.fromJson(Map json, + {ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return TransfersData( + id: serializer.fromJson(json['id']), + userId: serializer.fromJson(json['userId']), + clientId: serializer.fromJson(json['clientId']), + rev: serializer.fromJson(json['rev']), + createdAt: serializer.fromJson(json['createdAt']), + updatedAt: serializer.fromJson(json['updatedAt']), + deletedAt: serializer.fromJson(json['deletedAt']), + lastSyncedAt: serializer.fromJson(json['lastSyncedAt']), + amount: serializer.fromJson(json['amount']), + fromWalletId: serializer.fromJson(json['fromWalletId']), + toWalletId: serializer.fromJson(json['toWalletId']), + fromWalletClientId: + serializer.fromJson(json['fromWalletClientId']), + toWalletClientId: serializer.fromJson(json['toWalletClientId']), + exchangeRate: serializer.fromJson(json['exchangeRate']), + datetime: serializer.fromJson(json['datetime']), + expenseTransactionClientId: + serializer.fromJson(json['expenseTransactionClientId']), + incomeTransactionClientId: + serializer.fromJson(json['incomeTransactionClientId']), + ); + } + @override + Map toJson({ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return { + 'id': serializer.toJson(id), + 'userId': serializer.toJson(userId), + 'clientId': serializer.toJson(clientId), + 'rev': serializer.toJson(rev), + 'createdAt': serializer.toJson(createdAt), + 'updatedAt': serializer.toJson(updatedAt), + 'deletedAt': serializer.toJson(deletedAt), + 'lastSyncedAt': serializer.toJson(lastSyncedAt), + 'amount': serializer.toJson(amount), + 'fromWalletId': serializer.toJson(fromWalletId), + 'toWalletId': serializer.toJson(toWalletId), + 'fromWalletClientId': serializer.toJson(fromWalletClientId), + 'toWalletClientId': serializer.toJson(toWalletClientId), + 'exchangeRate': serializer.toJson(exchangeRate), + 'datetime': serializer.toJson(datetime), + 'expenseTransactionClientId': + serializer.toJson(expenseTransactionClientId), + 'incomeTransactionClientId': + serializer.toJson(incomeTransactionClientId), + }; + } + + TransfersData copyWith( + {Value id = const Value.absent(), + Value userId = const Value.absent(), + String? clientId, + Value rev = const Value.absent(), + DateTime? createdAt, + DateTime? updatedAt, + Value deletedAt = const Value.absent(), + Value lastSyncedAt = const Value.absent(), + double? amount, + Value fromWalletId = const Value.absent(), + Value toWalletId = const Value.absent(), + Value fromWalletClientId = const Value.absent(), + Value toWalletClientId = const Value.absent(), + Value exchangeRate = const Value.absent(), + DateTime? datetime, + Value expenseTransactionClientId = const Value.absent(), + Value incomeTransactionClientId = const Value.absent()}) => + TransfersData( + id: id.present ? id.value : this.id, + userId: userId.present ? userId.value : this.userId, + clientId: clientId ?? this.clientId, + rev: rev.present ? rev.value : this.rev, + createdAt: createdAt ?? this.createdAt, + updatedAt: updatedAt ?? this.updatedAt, + deletedAt: deletedAt.present ? deletedAt.value : this.deletedAt, + lastSyncedAt: + lastSyncedAt.present ? lastSyncedAt.value : this.lastSyncedAt, + amount: amount ?? this.amount, + fromWalletId: + fromWalletId.present ? fromWalletId.value : this.fromWalletId, + toWalletId: toWalletId.present ? toWalletId.value : this.toWalletId, + fromWalletClientId: fromWalletClientId.present + ? fromWalletClientId.value + : this.fromWalletClientId, + toWalletClientId: toWalletClientId.present + ? toWalletClientId.value + : this.toWalletClientId, + exchangeRate: + exchangeRate.present ? exchangeRate.value : this.exchangeRate, + datetime: datetime ?? this.datetime, + expenseTransactionClientId: expenseTransactionClientId.present + ? expenseTransactionClientId.value + : this.expenseTransactionClientId, + incomeTransactionClientId: incomeTransactionClientId.present + ? incomeTransactionClientId.value + : this.incomeTransactionClientId, + ); + TransfersData copyWithCompanion(TransfersCompanion data) { + return TransfersData( + id: data.id.present ? data.id.value : this.id, + userId: data.userId.present ? data.userId.value : this.userId, + clientId: data.clientId.present ? data.clientId.value : this.clientId, + rev: data.rev.present ? data.rev.value : this.rev, + createdAt: data.createdAt.present ? data.createdAt.value : this.createdAt, + updatedAt: data.updatedAt.present ? data.updatedAt.value : this.updatedAt, + deletedAt: data.deletedAt.present ? data.deletedAt.value : this.deletedAt, + lastSyncedAt: data.lastSyncedAt.present + ? data.lastSyncedAt.value + : this.lastSyncedAt, + amount: data.amount.present ? data.amount.value : this.amount, + fromWalletId: data.fromWalletId.present + ? data.fromWalletId.value + : this.fromWalletId, + toWalletId: + data.toWalletId.present ? data.toWalletId.value : this.toWalletId, + fromWalletClientId: data.fromWalletClientId.present + ? data.fromWalletClientId.value + : this.fromWalletClientId, + toWalletClientId: data.toWalletClientId.present + ? data.toWalletClientId.value + : this.toWalletClientId, + exchangeRate: data.exchangeRate.present + ? data.exchangeRate.value + : this.exchangeRate, + datetime: data.datetime.present ? data.datetime.value : this.datetime, + expenseTransactionClientId: data.expenseTransactionClientId.present + ? data.expenseTransactionClientId.value + : this.expenseTransactionClientId, + incomeTransactionClientId: data.incomeTransactionClientId.present + ? data.incomeTransactionClientId.value + : this.incomeTransactionClientId, + ); + } + + @override + String toString() { + return (StringBuffer('TransfersData(') + ..write('id: $id, ') + ..write('userId: $userId, ') + ..write('clientId: $clientId, ') + ..write('rev: $rev, ') + ..write('createdAt: $createdAt, ') + ..write('updatedAt: $updatedAt, ') + ..write('deletedAt: $deletedAt, ') + ..write('lastSyncedAt: $lastSyncedAt, ') + ..write('amount: $amount, ') + ..write('fromWalletId: $fromWalletId, ') + ..write('toWalletId: $toWalletId, ') + ..write('fromWalletClientId: $fromWalletClientId, ') + ..write('toWalletClientId: $toWalletClientId, ') + ..write('exchangeRate: $exchangeRate, ') + ..write('datetime: $datetime, ') + ..write('expenseTransactionClientId: $expenseTransactionClientId, ') + ..write('incomeTransactionClientId: $incomeTransactionClientId') + ..write(')')) + .toString(); + } + + @override + int get hashCode => Object.hash( + id, + userId, + clientId, + rev, + createdAt, + updatedAt, + deletedAt, + lastSyncedAt, + amount, + fromWalletId, + toWalletId, + fromWalletClientId, + toWalletClientId, + exchangeRate, + datetime, + expenseTransactionClientId, + incomeTransactionClientId); + @override + bool operator ==(Object other) => + identical(this, other) || + (other is TransfersData && + other.id == this.id && + other.userId == this.userId && + other.clientId == this.clientId && + other.rev == this.rev && + other.createdAt == this.createdAt && + other.updatedAt == this.updatedAt && + other.deletedAt == this.deletedAt && + other.lastSyncedAt == this.lastSyncedAt && + other.amount == this.amount && + other.fromWalletId == this.fromWalletId && + other.toWalletId == this.toWalletId && + other.fromWalletClientId == this.fromWalletClientId && + other.toWalletClientId == this.toWalletClientId && + other.exchangeRate == this.exchangeRate && + other.datetime == this.datetime && + other.expenseTransactionClientId == this.expenseTransactionClientId && + other.incomeTransactionClientId == this.incomeTransactionClientId); +} + +class TransfersCompanion extends UpdateCompanion { + final Value id; + final Value userId; + final Value clientId; + final Value rev; + final Value createdAt; + final Value updatedAt; + final Value deletedAt; + final Value lastSyncedAt; + final Value amount; + final Value fromWalletId; + final Value toWalletId; + final Value fromWalletClientId; + final Value toWalletClientId; + final Value exchangeRate; + final Value datetime; + final Value expenseTransactionClientId; + final Value incomeTransactionClientId; + final Value rowid; + const TransfersCompanion({ + this.id = const Value.absent(), + this.userId = const Value.absent(), + this.clientId = const Value.absent(), + this.rev = const Value.absent(), + this.createdAt = const Value.absent(), + this.updatedAt = const Value.absent(), + this.deletedAt = const Value.absent(), + this.lastSyncedAt = const Value.absent(), + this.amount = const Value.absent(), + this.fromWalletId = const Value.absent(), + this.toWalletId = const Value.absent(), + this.fromWalletClientId = const Value.absent(), + this.toWalletClientId = const Value.absent(), + this.exchangeRate = const Value.absent(), + this.datetime = const Value.absent(), + this.expenseTransactionClientId = const Value.absent(), + this.incomeTransactionClientId = const Value.absent(), + this.rowid = const Value.absent(), + }); + TransfersCompanion.insert({ + this.id = const Value.absent(), + this.userId = const Value.absent(), + this.clientId = const Value.absent(), + this.rev = const Value.absent(), + this.createdAt = const Value.absent(), + this.updatedAt = const Value.absent(), + this.deletedAt = const Value.absent(), + this.lastSyncedAt = const Value.absent(), + required double amount, + this.fromWalletId = const Value.absent(), + this.toWalletId = const Value.absent(), + this.fromWalletClientId = const Value.absent(), + this.toWalletClientId = const Value.absent(), + this.exchangeRate = const Value.absent(), + required DateTime datetime, + this.expenseTransactionClientId = const Value.absent(), + this.incomeTransactionClientId = const Value.absent(), + this.rowid = const Value.absent(), + }) : amount = Value(amount), + datetime = Value(datetime); + static Insertable custom({ + Expression? id, + Expression? userId, + Expression? clientId, + Expression? rev, + Expression? createdAt, + Expression? updatedAt, + Expression? deletedAt, + Expression? lastSyncedAt, + Expression? amount, + Expression? fromWalletId, + Expression? toWalletId, + Expression? fromWalletClientId, + Expression? toWalletClientId, + Expression? exchangeRate, + Expression? datetime, + Expression? expenseTransactionClientId, + Expression? incomeTransactionClientId, + Expression? rowid, + }) { + return RawValuesInsertable({ + if (id != null) 'id': id, + if (userId != null) 'user_id': userId, + if (clientId != null) 'client_id': clientId, + if (rev != null) 'rev': rev, + if (createdAt != null) 'created_at': createdAt, + if (updatedAt != null) 'updated_at': updatedAt, + if (deletedAt != null) 'deleted_at': deletedAt, + if (lastSyncedAt != null) 'last_synced_at': lastSyncedAt, + if (amount != null) 'amount': amount, + if (fromWalletId != null) 'from_wallet_id': fromWalletId, + if (toWalletId != null) 'to_wallet_id': toWalletId, + if (fromWalletClientId != null) + 'from_wallet_client_id': fromWalletClientId, + if (toWalletClientId != null) 'to_wallet_client_id': toWalletClientId, + if (exchangeRate != null) 'exchange_rate': exchangeRate, + if (datetime != null) 'datetime': datetime, + if (expenseTransactionClientId != null) + 'expense_transaction_client_id': expenseTransactionClientId, + if (incomeTransactionClientId != null) + 'income_transaction_client_id': incomeTransactionClientId, + if (rowid != null) 'rowid': rowid, + }); + } + + TransfersCompanion copyWith( + {Value? id, + Value? userId, + Value? clientId, + Value? rev, + Value? createdAt, + Value? updatedAt, + Value? deletedAt, + Value? lastSyncedAt, + Value? amount, + Value? fromWalletId, + Value? toWalletId, + Value? fromWalletClientId, + Value? toWalletClientId, + Value? exchangeRate, + Value? datetime, + Value? expenseTransactionClientId, + Value? incomeTransactionClientId, + Value? rowid}) { + return TransfersCompanion( + id: id ?? this.id, + userId: userId ?? this.userId, + clientId: clientId ?? this.clientId, + rev: rev ?? this.rev, + createdAt: createdAt ?? this.createdAt, + updatedAt: updatedAt ?? this.updatedAt, + deletedAt: deletedAt ?? this.deletedAt, + lastSyncedAt: lastSyncedAt ?? this.lastSyncedAt, + amount: amount ?? this.amount, + fromWalletId: fromWalletId ?? this.fromWalletId, + toWalletId: toWalletId ?? this.toWalletId, + fromWalletClientId: fromWalletClientId ?? this.fromWalletClientId, + toWalletClientId: toWalletClientId ?? this.toWalletClientId, + exchangeRate: exchangeRate ?? this.exchangeRate, + datetime: datetime ?? this.datetime, + expenseTransactionClientId: + expenseTransactionClientId ?? this.expenseTransactionClientId, + incomeTransactionClientId: + incomeTransactionClientId ?? this.incomeTransactionClientId, + rowid: rowid ?? this.rowid, + ); + } + + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + if (id.present) { + map['id'] = Variable(id.value); + } + if (userId.present) { + map['user_id'] = Variable(userId.value); + } + if (clientId.present) { + map['client_id'] = Variable(clientId.value); + } + if (rev.present) { + map['rev'] = Variable(rev.value); + } + if (createdAt.present) { + map['created_at'] = Variable(createdAt.value); + } + if (updatedAt.present) { + map['updated_at'] = Variable(updatedAt.value); + } + if (deletedAt.present) { + map['deleted_at'] = Variable(deletedAt.value); + } + if (lastSyncedAt.present) { + map['last_synced_at'] = Variable(lastSyncedAt.value); + } + if (amount.present) { + map['amount'] = Variable(amount.value); + } + if (fromWalletId.present) { + map['from_wallet_id'] = Variable(fromWalletId.value); + } + if (toWalletId.present) { + map['to_wallet_id'] = Variable(toWalletId.value); + } + if (fromWalletClientId.present) { + map['from_wallet_client_id'] = Variable(fromWalletClientId.value); + } + if (toWalletClientId.present) { + map['to_wallet_client_id'] = Variable(toWalletClientId.value); + } + if (exchangeRate.present) { + map['exchange_rate'] = Variable(exchangeRate.value); + } + if (datetime.present) { + map['datetime'] = Variable(datetime.value); + } + if (expenseTransactionClientId.present) { + map['expense_transaction_client_id'] = + Variable(expenseTransactionClientId.value); + } + if (incomeTransactionClientId.present) { + map['income_transaction_client_id'] = + Variable(incomeTransactionClientId.value); + } + if (rowid.present) { + map['rowid'] = Variable(rowid.value); + } + return map; + } + + @override + String toString() { + return (StringBuffer('TransfersCompanion(') + ..write('id: $id, ') + ..write('userId: $userId, ') + ..write('clientId: $clientId, ') + ..write('rev: $rev, ') + ..write('createdAt: $createdAt, ') + ..write('updatedAt: $updatedAt, ') + ..write('deletedAt: $deletedAt, ') + ..write('lastSyncedAt: $lastSyncedAt, ') + ..write('amount: $amount, ') + ..write('fromWalletId: $fromWalletId, ') + ..write('toWalletId: $toWalletId, ') + ..write('fromWalletClientId: $fromWalletClientId, ') + ..write('toWalletClientId: $toWalletClientId, ') + ..write('exchangeRate: $exchangeRate, ') + ..write('datetime: $datetime, ') + ..write('expenseTransactionClientId: $expenseTransactionClientId, ') + ..write('incomeTransactionClientId: $incomeTransactionClientId, ') + ..write('rowid: $rowid') + ..write(')')) + .toString(); + } +} + +class Budgets extends Table with TableInfo { + @override + final GeneratedDatabase attachedDatabase; + final String? _alias; + Budgets(this.attachedDatabase, [this._alias]); + late final GeneratedColumn id = GeneratedColumn( + 'id', aliasedName, true, + type: DriftSqlType.int, + requiredDuringInsert: false, + defaultConstraints: GeneratedColumn.constraintIsAlways('UNIQUE')); + late final GeneratedColumn userId = GeneratedColumn( + 'user_id', aliasedName, true, + type: DriftSqlType.int, requiredDuringInsert: false); + late final GeneratedColumn clientId = GeneratedColumn( + 'client_id', aliasedName, false, + type: DriftSqlType.string, + requiredDuringInsert: false, + defaultValue: const CustomExpression('\'\'')); + late final GeneratedColumn rev = GeneratedColumn( + 'rev', aliasedName, true, + type: DriftSqlType.string, + requiredDuringInsert: false, + defaultValue: const CustomExpression('\'1\'')); + late final GeneratedColumn createdAt = GeneratedColumn( + 'created_at', aliasedName, false, + type: DriftSqlType.dateTime, + requiredDuringInsert: false, + defaultValue: const CustomExpression('CURRENT_TIMESTAMP')); + late final GeneratedColumn updatedAt = GeneratedColumn( + 'updated_at', aliasedName, false, + type: DriftSqlType.dateTime, + requiredDuringInsert: false, + defaultValue: const CustomExpression('CURRENT_TIMESTAMP')); + late final GeneratedColumn deletedAt = GeneratedColumn( + 'deleted_at', aliasedName, true, + type: DriftSqlType.dateTime, requiredDuringInsert: false); + late final GeneratedColumn lastSyncedAt = GeneratedColumn( + 'last_synced_at', aliasedName, true, + type: DriftSqlType.dateTime, requiredDuringInsert: false); + late final GeneratedColumn name = GeneratedColumn( + 'name', aliasedName, false, + type: DriftSqlType.string, requiredDuringInsert: true); + late final GeneratedColumn slug = GeneratedColumn( + 'slug', aliasedName, false, + type: DriftSqlType.string, requiredDuringInsert: true); + late final GeneratedColumn description = GeneratedColumn( + 'description', aliasedName, true, + type: DriftSqlType.string, requiredDuringInsert: false); + late final GeneratedColumn amount = GeneratedColumn( + 'amount', aliasedName, false, + type: DriftSqlType.string, requiredDuringInsert: true); + late final GeneratedColumn currency = GeneratedColumn( + 'currency', aliasedName, false, + type: DriftSqlType.string, requiredDuringInsert: true); + late final GeneratedColumn periodType = GeneratedColumn( + 'period_type', aliasedName, false, + type: DriftSqlType.string, requiredDuringInsert: true); + late final GeneratedColumn startDate = GeneratedColumn( + 'start_date', aliasedName, false, + type: DriftSqlType.dateTime, requiredDuringInsert: true); + late final GeneratedColumn endDate = GeneratedColumn( + 'end_date', aliasedName, true, + type: DriftSqlType.dateTime, requiredDuringInsert: false); + late final GeneratedColumn rolloverEnabled = GeneratedColumn( + 'rollover_enabled', aliasedName, false, + type: DriftSqlType.bool, + requiredDuringInsert: false, + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'CHECK ("rollover_enabled" IN (0, 1))'), + defaultValue: const CustomExpression('0')); + late final GeneratedColumn thresholdPercent = GeneratedColumn( + 'threshold_percent', aliasedName, false, + type: DriftSqlType.int, + requiredDuringInsert: false, + defaultValue: const CustomExpression('80')); + late final GeneratedColumn forecastAlertsEnabled = + GeneratedColumn('forecast_alerts_enabled', aliasedName, false, + type: DriftSqlType.bool, + requiredDuringInsert: false, + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'CHECK ("forecast_alerts_enabled" IN (0, 1))'), + defaultValue: const CustomExpression('0')); + late final GeneratedColumn isActive = GeneratedColumn( + 'is_active', aliasedName, false, + type: DriftSqlType.bool, + requiredDuringInsert: false, + defaultConstraints: + GeneratedColumn.constraintIsAlways('CHECK ("is_active" IN (0, 1))'), + defaultValue: const CustomExpression('1')); + late final GeneratedColumn ownerType = GeneratedColumn( + 'owner_type', aliasedName, false, + type: DriftSqlType.string, + requiredDuringInsert: false, + defaultValue: const CustomExpression('\'user\'')); + late final GeneratedColumn ownerId = GeneratedColumn( + 'owner_id', aliasedName, true, + type: DriftSqlType.int, requiredDuringInsert: false); + late final GeneratedColumn progress = GeneratedColumn( + 'progress', aliasedName, true, + type: DriftSqlType.string, requiredDuringInsert: false); + @override + List get $columns => [ + id, + userId, + clientId, + rev, + createdAt, + updatedAt, + deletedAt, + lastSyncedAt, + name, + slug, + description, + amount, + currency, + periodType, + startDate, + endDate, + rolloverEnabled, + thresholdPercent, + forecastAlertsEnabled, + isActive, + ownerType, + ownerId, + progress + ]; + @override + String get aliasedName => _alias ?? actualTableName; + @override + String get actualTableName => $name; + static const String $name = 'budgets'; + @override + Set get $primaryKey => {clientId}; + @override + BudgetsData map(Map data, {String? tablePrefix}) { + final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; + return BudgetsData( + id: attachedDatabase.typeMapping + .read(DriftSqlType.int, data['${effectivePrefix}id']), + userId: attachedDatabase.typeMapping + .read(DriftSqlType.int, data['${effectivePrefix}user_id']), + clientId: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}client_id'])!, + rev: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}rev']), + createdAt: attachedDatabase.typeMapping + .read(DriftSqlType.dateTime, data['${effectivePrefix}created_at'])!, + updatedAt: attachedDatabase.typeMapping + .read(DriftSqlType.dateTime, data['${effectivePrefix}updated_at'])!, + deletedAt: attachedDatabase.typeMapping + .read(DriftSqlType.dateTime, data['${effectivePrefix}deleted_at']), + lastSyncedAt: attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, data['${effectivePrefix}last_synced_at']), + name: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}name'])!, + slug: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}slug'])!, + description: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}description']), + amount: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}amount'])!, + currency: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}currency'])!, + periodType: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}period_type'])!, + startDate: attachedDatabase.typeMapping + .read(DriftSqlType.dateTime, data['${effectivePrefix}start_date'])!, + endDate: attachedDatabase.typeMapping + .read(DriftSqlType.dateTime, data['${effectivePrefix}end_date']), + rolloverEnabled: attachedDatabase.typeMapping + .read(DriftSqlType.bool, data['${effectivePrefix}rollover_enabled'])!, + thresholdPercent: attachedDatabase.typeMapping + .read(DriftSqlType.int, data['${effectivePrefix}threshold_percent'])!, + forecastAlertsEnabled: attachedDatabase.typeMapping.read( + DriftSqlType.bool, + data['${effectivePrefix}forecast_alerts_enabled'])!, + isActive: attachedDatabase.typeMapping + .read(DriftSqlType.bool, data['${effectivePrefix}is_active'])!, + ownerType: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}owner_type'])!, + ownerId: attachedDatabase.typeMapping + .read(DriftSqlType.int, data['${effectivePrefix}owner_id']), + progress: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}progress']), + ); + } + + @override + Budgets createAlias(String alias) { + return Budgets(attachedDatabase, alias); + } +} + +class BudgetsData extends DataClass implements Insertable { + final int? id; + final int? userId; + final String clientId; + final String? rev; + final DateTime createdAt; + final DateTime updatedAt; + final DateTime? deletedAt; + final DateTime? lastSyncedAt; + final String name; + final String slug; + final String? description; + final String amount; + final String currency; + final String periodType; + final DateTime startDate; + final DateTime? endDate; + final bool rolloverEnabled; + final int thresholdPercent; + final bool forecastAlertsEnabled; + final bool isActive; + final String ownerType; + final int? ownerId; + final String? progress; + const BudgetsData( + {this.id, + this.userId, + required this.clientId, + this.rev, + required this.createdAt, + required this.updatedAt, + this.deletedAt, + this.lastSyncedAt, + required this.name, + required this.slug, + this.description, + required this.amount, + required this.currency, + required this.periodType, + required this.startDate, + this.endDate, + required this.rolloverEnabled, + required this.thresholdPercent, + required this.forecastAlertsEnabled, + required this.isActive, + required this.ownerType, + this.ownerId, + this.progress}); + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + if (!nullToAbsent || id != null) { + map['id'] = Variable(id); + } + if (!nullToAbsent || userId != null) { + map['user_id'] = Variable(userId); + } + map['client_id'] = Variable(clientId); + if (!nullToAbsent || rev != null) { + map['rev'] = Variable(rev); + } + map['created_at'] = Variable(createdAt); + map['updated_at'] = Variable(updatedAt); + if (!nullToAbsent || deletedAt != null) { + map['deleted_at'] = Variable(deletedAt); + } + if (!nullToAbsent || lastSyncedAt != null) { + map['last_synced_at'] = Variable(lastSyncedAt); + } + map['name'] = Variable(name); + map['slug'] = Variable(slug); + if (!nullToAbsent || description != null) { + map['description'] = Variable(description); + } + map['amount'] = Variable(amount); + map['currency'] = Variable(currency); + map['period_type'] = Variable(periodType); + map['start_date'] = Variable(startDate); + if (!nullToAbsent || endDate != null) { + map['end_date'] = Variable(endDate); + } + map['rollover_enabled'] = Variable(rolloverEnabled); + map['threshold_percent'] = Variable(thresholdPercent); + map['forecast_alerts_enabled'] = Variable(forecastAlertsEnabled); + map['is_active'] = Variable(isActive); + map['owner_type'] = Variable(ownerType); + if (!nullToAbsent || ownerId != null) { + map['owner_id'] = Variable(ownerId); + } + if (!nullToAbsent || progress != null) { + map['progress'] = Variable(progress); + } + return map; + } + + BudgetsCompanion toCompanion(bool nullToAbsent) { + return BudgetsCompanion( + id: id == null && nullToAbsent ? const Value.absent() : Value(id), + userId: + userId == null && nullToAbsent ? const Value.absent() : Value(userId), + clientId: Value(clientId), + rev: rev == null && nullToAbsent ? const Value.absent() : Value(rev), + createdAt: Value(createdAt), + updatedAt: Value(updatedAt), + deletedAt: deletedAt == null && nullToAbsent + ? const Value.absent() + : Value(deletedAt), + lastSyncedAt: lastSyncedAt == null && nullToAbsent + ? const Value.absent() + : Value(lastSyncedAt), + name: Value(name), + slug: Value(slug), + description: description == null && nullToAbsent + ? const Value.absent() + : Value(description), + amount: Value(amount), + currency: Value(currency), + periodType: Value(periodType), + startDate: Value(startDate), + endDate: endDate == null && nullToAbsent + ? const Value.absent() + : Value(endDate), + rolloverEnabled: Value(rolloverEnabled), + thresholdPercent: Value(thresholdPercent), + forecastAlertsEnabled: Value(forecastAlertsEnabled), + isActive: Value(isActive), + ownerType: Value(ownerType), + ownerId: ownerId == null && nullToAbsent + ? const Value.absent() + : Value(ownerId), + progress: progress == null && nullToAbsent + ? const Value.absent() + : Value(progress), + ); + } + + factory BudgetsData.fromJson(Map json, + {ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return BudgetsData( + id: serializer.fromJson(json['id']), + userId: serializer.fromJson(json['userId']), + clientId: serializer.fromJson(json['clientId']), + rev: serializer.fromJson(json['rev']), + createdAt: serializer.fromJson(json['createdAt']), + updatedAt: serializer.fromJson(json['updatedAt']), + deletedAt: serializer.fromJson(json['deletedAt']), + lastSyncedAt: serializer.fromJson(json['lastSyncedAt']), + name: serializer.fromJson(json['name']), + slug: serializer.fromJson(json['slug']), + description: serializer.fromJson(json['description']), + amount: serializer.fromJson(json['amount']), + currency: serializer.fromJson(json['currency']), + periodType: serializer.fromJson(json['periodType']), + startDate: serializer.fromJson(json['startDate']), + endDate: serializer.fromJson(json['endDate']), + rolloverEnabled: serializer.fromJson(json['rolloverEnabled']), + thresholdPercent: serializer.fromJson(json['thresholdPercent']), + forecastAlertsEnabled: + serializer.fromJson(json['forecastAlertsEnabled']), + isActive: serializer.fromJson(json['isActive']), + ownerType: serializer.fromJson(json['ownerType']), + ownerId: serializer.fromJson(json['ownerId']), + progress: serializer.fromJson(json['progress']), + ); + } + @override + Map toJson({ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return { + 'id': serializer.toJson(id), + 'userId': serializer.toJson(userId), + 'clientId': serializer.toJson(clientId), + 'rev': serializer.toJson(rev), + 'createdAt': serializer.toJson(createdAt), + 'updatedAt': serializer.toJson(updatedAt), + 'deletedAt': serializer.toJson(deletedAt), + 'lastSyncedAt': serializer.toJson(lastSyncedAt), + 'name': serializer.toJson(name), + 'slug': serializer.toJson(slug), + 'description': serializer.toJson(description), + 'amount': serializer.toJson(amount), + 'currency': serializer.toJson(currency), + 'periodType': serializer.toJson(periodType), + 'startDate': serializer.toJson(startDate), + 'endDate': serializer.toJson(endDate), + 'rolloverEnabled': serializer.toJson(rolloverEnabled), + 'thresholdPercent': serializer.toJson(thresholdPercent), + 'forecastAlertsEnabled': serializer.toJson(forecastAlertsEnabled), + 'isActive': serializer.toJson(isActive), + 'ownerType': serializer.toJson(ownerType), + 'ownerId': serializer.toJson(ownerId), + 'progress': serializer.toJson(progress), + }; + } + + BudgetsData copyWith( + {Value id = const Value.absent(), + Value userId = const Value.absent(), + String? clientId, + Value rev = const Value.absent(), + DateTime? createdAt, + DateTime? updatedAt, + Value deletedAt = const Value.absent(), + Value lastSyncedAt = const Value.absent(), + String? name, + String? slug, + Value description = const Value.absent(), + String? amount, + String? currency, + String? periodType, + DateTime? startDate, + Value endDate = const Value.absent(), + bool? rolloverEnabled, + int? thresholdPercent, + bool? forecastAlertsEnabled, + bool? isActive, + String? ownerType, + Value ownerId = const Value.absent(), + Value progress = const Value.absent()}) => + BudgetsData( + id: id.present ? id.value : this.id, + userId: userId.present ? userId.value : this.userId, + clientId: clientId ?? this.clientId, + rev: rev.present ? rev.value : this.rev, + createdAt: createdAt ?? this.createdAt, + updatedAt: updatedAt ?? this.updatedAt, + deletedAt: deletedAt.present ? deletedAt.value : this.deletedAt, + lastSyncedAt: + lastSyncedAt.present ? lastSyncedAt.value : this.lastSyncedAt, + name: name ?? this.name, + slug: slug ?? this.slug, + description: description.present ? description.value : this.description, + amount: amount ?? this.amount, + currency: currency ?? this.currency, + periodType: periodType ?? this.periodType, + startDate: startDate ?? this.startDate, + endDate: endDate.present ? endDate.value : this.endDate, + rolloverEnabled: rolloverEnabled ?? this.rolloverEnabled, + thresholdPercent: thresholdPercent ?? this.thresholdPercent, + forecastAlertsEnabled: + forecastAlertsEnabled ?? this.forecastAlertsEnabled, + isActive: isActive ?? this.isActive, + ownerType: ownerType ?? this.ownerType, + ownerId: ownerId.present ? ownerId.value : this.ownerId, + progress: progress.present ? progress.value : this.progress, + ); + BudgetsData copyWithCompanion(BudgetsCompanion data) { + return BudgetsData( + id: data.id.present ? data.id.value : this.id, + userId: data.userId.present ? data.userId.value : this.userId, + clientId: data.clientId.present ? data.clientId.value : this.clientId, + rev: data.rev.present ? data.rev.value : this.rev, + createdAt: data.createdAt.present ? data.createdAt.value : this.createdAt, + updatedAt: data.updatedAt.present ? data.updatedAt.value : this.updatedAt, + deletedAt: data.deletedAt.present ? data.deletedAt.value : this.deletedAt, + lastSyncedAt: data.lastSyncedAt.present + ? data.lastSyncedAt.value + : this.lastSyncedAt, + name: data.name.present ? data.name.value : this.name, + slug: data.slug.present ? data.slug.value : this.slug, + description: + data.description.present ? data.description.value : this.description, + amount: data.amount.present ? data.amount.value : this.amount, + currency: data.currency.present ? data.currency.value : this.currency, + periodType: + data.periodType.present ? data.periodType.value : this.periodType, + startDate: data.startDate.present ? data.startDate.value : this.startDate, + endDate: data.endDate.present ? data.endDate.value : this.endDate, + rolloverEnabled: data.rolloverEnabled.present + ? data.rolloverEnabled.value + : this.rolloverEnabled, + thresholdPercent: data.thresholdPercent.present + ? data.thresholdPercent.value + : this.thresholdPercent, + forecastAlertsEnabled: data.forecastAlertsEnabled.present + ? data.forecastAlertsEnabled.value + : this.forecastAlertsEnabled, + isActive: data.isActive.present ? data.isActive.value : this.isActive, + ownerType: data.ownerType.present ? data.ownerType.value : this.ownerType, + ownerId: data.ownerId.present ? data.ownerId.value : this.ownerId, + progress: data.progress.present ? data.progress.value : this.progress, + ); + } + + @override + String toString() { + return (StringBuffer('BudgetsData(') + ..write('id: $id, ') + ..write('userId: $userId, ') + ..write('clientId: $clientId, ') + ..write('rev: $rev, ') + ..write('createdAt: $createdAt, ') + ..write('updatedAt: $updatedAt, ') + ..write('deletedAt: $deletedAt, ') + ..write('lastSyncedAt: $lastSyncedAt, ') + ..write('name: $name, ') + ..write('slug: $slug, ') + ..write('description: $description, ') + ..write('amount: $amount, ') + ..write('currency: $currency, ') + ..write('periodType: $periodType, ') + ..write('startDate: $startDate, ') + ..write('endDate: $endDate, ') + ..write('rolloverEnabled: $rolloverEnabled, ') + ..write('thresholdPercent: $thresholdPercent, ') + ..write('forecastAlertsEnabled: $forecastAlertsEnabled, ') + ..write('isActive: $isActive, ') + ..write('ownerType: $ownerType, ') + ..write('ownerId: $ownerId, ') + ..write('progress: $progress') + ..write(')')) + .toString(); + } + + @override + int get hashCode => Object.hashAll([ + id, + userId, + clientId, + rev, + createdAt, + updatedAt, + deletedAt, + lastSyncedAt, + name, + slug, + description, + amount, + currency, + periodType, + startDate, + endDate, + rolloverEnabled, + thresholdPercent, + forecastAlertsEnabled, + isActive, + ownerType, + ownerId, + progress + ]); + @override + bool operator ==(Object other) => + identical(this, other) || + (other is BudgetsData && + other.id == this.id && + other.userId == this.userId && + other.clientId == this.clientId && + other.rev == this.rev && + other.createdAt == this.createdAt && + other.updatedAt == this.updatedAt && + other.deletedAt == this.deletedAt && + other.lastSyncedAt == this.lastSyncedAt && + other.name == this.name && + other.slug == this.slug && + other.description == this.description && + other.amount == this.amount && + other.currency == this.currency && + other.periodType == this.periodType && + other.startDate == this.startDate && + other.endDate == this.endDate && + other.rolloverEnabled == this.rolloverEnabled && + other.thresholdPercent == this.thresholdPercent && + other.forecastAlertsEnabled == this.forecastAlertsEnabled && + other.isActive == this.isActive && + other.ownerType == this.ownerType && + other.ownerId == this.ownerId && + other.progress == this.progress); +} + +class BudgetsCompanion extends UpdateCompanion { + final Value id; + final Value userId; + final Value clientId; + final Value rev; + final Value createdAt; + final Value updatedAt; + final Value deletedAt; + final Value lastSyncedAt; + final Value name; + final Value slug; + final Value description; + final Value amount; + final Value currency; + final Value periodType; + final Value startDate; + final Value endDate; + final Value rolloverEnabled; + final Value thresholdPercent; + final Value forecastAlertsEnabled; + final Value isActive; + final Value ownerType; + final Value ownerId; + final Value progress; + final Value rowid; + const BudgetsCompanion({ + this.id = const Value.absent(), + this.userId = const Value.absent(), + this.clientId = const Value.absent(), + this.rev = const Value.absent(), + this.createdAt = const Value.absent(), + this.updatedAt = const Value.absent(), + this.deletedAt = const Value.absent(), + this.lastSyncedAt = const Value.absent(), + this.name = const Value.absent(), + this.slug = const Value.absent(), + this.description = const Value.absent(), + this.amount = const Value.absent(), + this.currency = const Value.absent(), + this.periodType = const Value.absent(), + this.startDate = const Value.absent(), + this.endDate = const Value.absent(), + this.rolloverEnabled = const Value.absent(), + this.thresholdPercent = const Value.absent(), + this.forecastAlertsEnabled = const Value.absent(), + this.isActive = const Value.absent(), + this.ownerType = const Value.absent(), + this.ownerId = const Value.absent(), + this.progress = const Value.absent(), + this.rowid = const Value.absent(), + }); + BudgetsCompanion.insert({ + this.id = const Value.absent(), + this.userId = const Value.absent(), + this.clientId = const Value.absent(), + this.rev = const Value.absent(), + this.createdAt = const Value.absent(), + this.updatedAt = const Value.absent(), + this.deletedAt = const Value.absent(), + this.lastSyncedAt = const Value.absent(), + required String name, + required String slug, + this.description = const Value.absent(), + required String amount, + required String currency, + required String periodType, + required DateTime startDate, + this.endDate = const Value.absent(), + this.rolloverEnabled = const Value.absent(), + this.thresholdPercent = const Value.absent(), + this.forecastAlertsEnabled = const Value.absent(), + this.isActive = const Value.absent(), + this.ownerType = const Value.absent(), + this.ownerId = const Value.absent(), + this.progress = const Value.absent(), + this.rowid = const Value.absent(), + }) : name = Value(name), + slug = Value(slug), + amount = Value(amount), + currency = Value(currency), + periodType = Value(periodType), + startDate = Value(startDate); + static Insertable custom({ + Expression? id, + Expression? userId, + Expression? clientId, + Expression? rev, + Expression? createdAt, + Expression? updatedAt, + Expression? deletedAt, + Expression? lastSyncedAt, + Expression? name, + Expression? slug, + Expression? description, + Expression? amount, + Expression? currency, + Expression? periodType, + Expression? startDate, + Expression? endDate, + Expression? rolloverEnabled, + Expression? thresholdPercent, + Expression? forecastAlertsEnabled, + Expression? isActive, + Expression? ownerType, + Expression? ownerId, + Expression? progress, + Expression? rowid, + }) { + return RawValuesInsertable({ + if (id != null) 'id': id, + if (userId != null) 'user_id': userId, + if (clientId != null) 'client_id': clientId, + if (rev != null) 'rev': rev, + if (createdAt != null) 'created_at': createdAt, + if (updatedAt != null) 'updated_at': updatedAt, + if (deletedAt != null) 'deleted_at': deletedAt, + if (lastSyncedAt != null) 'last_synced_at': lastSyncedAt, + if (name != null) 'name': name, + if (slug != null) 'slug': slug, + if (description != null) 'description': description, + if (amount != null) 'amount': amount, + if (currency != null) 'currency': currency, + if (periodType != null) 'period_type': periodType, + if (startDate != null) 'start_date': startDate, + if (endDate != null) 'end_date': endDate, + if (rolloverEnabled != null) 'rollover_enabled': rolloverEnabled, + if (thresholdPercent != null) 'threshold_percent': thresholdPercent, + if (forecastAlertsEnabled != null) + 'forecast_alerts_enabled': forecastAlertsEnabled, + if (isActive != null) 'is_active': isActive, + if (ownerType != null) 'owner_type': ownerType, + if (ownerId != null) 'owner_id': ownerId, + if (progress != null) 'progress': progress, + if (rowid != null) 'rowid': rowid, + }); + } + + BudgetsCompanion copyWith( + {Value? id, + Value? userId, + Value? clientId, + Value? rev, + Value? createdAt, + Value? updatedAt, + Value? deletedAt, + Value? lastSyncedAt, + Value? name, + Value? slug, + Value? description, + Value? amount, + Value? currency, + Value? periodType, + Value? startDate, + Value? endDate, + Value? rolloverEnabled, + Value? thresholdPercent, + Value? forecastAlertsEnabled, + Value? isActive, + Value? ownerType, + Value? ownerId, + Value? progress, + Value? rowid}) { + return BudgetsCompanion( + id: id ?? this.id, + userId: userId ?? this.userId, + clientId: clientId ?? this.clientId, + rev: rev ?? this.rev, + createdAt: createdAt ?? this.createdAt, + updatedAt: updatedAt ?? this.updatedAt, + deletedAt: deletedAt ?? this.deletedAt, + lastSyncedAt: lastSyncedAt ?? this.lastSyncedAt, + name: name ?? this.name, + slug: slug ?? this.slug, + description: description ?? this.description, + amount: amount ?? this.amount, + currency: currency ?? this.currency, + periodType: periodType ?? this.periodType, + startDate: startDate ?? this.startDate, + endDate: endDate ?? this.endDate, + rolloverEnabled: rolloverEnabled ?? this.rolloverEnabled, + thresholdPercent: thresholdPercent ?? this.thresholdPercent, + forecastAlertsEnabled: + forecastAlertsEnabled ?? this.forecastAlertsEnabled, + isActive: isActive ?? this.isActive, + ownerType: ownerType ?? this.ownerType, + ownerId: ownerId ?? this.ownerId, + progress: progress ?? this.progress, + rowid: rowid ?? this.rowid, + ); + } + + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + if (id.present) { + map['id'] = Variable(id.value); + } + if (userId.present) { + map['user_id'] = Variable(userId.value); + } + if (clientId.present) { + map['client_id'] = Variable(clientId.value); + } + if (rev.present) { + map['rev'] = Variable(rev.value); + } + if (createdAt.present) { + map['created_at'] = Variable(createdAt.value); + } + if (updatedAt.present) { + map['updated_at'] = Variable(updatedAt.value); + } + if (deletedAt.present) { + map['deleted_at'] = Variable(deletedAt.value); + } + if (lastSyncedAt.present) { + map['last_synced_at'] = Variable(lastSyncedAt.value); + } + if (name.present) { + map['name'] = Variable(name.value); + } + if (slug.present) { + map['slug'] = Variable(slug.value); + } + if (description.present) { + map['description'] = Variable(description.value); + } + if (amount.present) { + map['amount'] = Variable(amount.value); + } + if (currency.present) { + map['currency'] = Variable(currency.value); + } + if (periodType.present) { + map['period_type'] = Variable(periodType.value); + } + if (startDate.present) { + map['start_date'] = Variable(startDate.value); + } + if (endDate.present) { + map['end_date'] = Variable(endDate.value); + } + if (rolloverEnabled.present) { + map['rollover_enabled'] = Variable(rolloverEnabled.value); + } + if (thresholdPercent.present) { + map['threshold_percent'] = Variable(thresholdPercent.value); + } + if (forecastAlertsEnabled.present) { + map['forecast_alerts_enabled'] = + Variable(forecastAlertsEnabled.value); + } + if (isActive.present) { + map['is_active'] = Variable(isActive.value); + } + if (ownerType.present) { + map['owner_type'] = Variable(ownerType.value); + } + if (ownerId.present) { + map['owner_id'] = Variable(ownerId.value); + } + if (progress.present) { + map['progress'] = Variable(progress.value); + } + if (rowid.present) { + map['rowid'] = Variable(rowid.value); + } + return map; + } + + @override + String toString() { + return (StringBuffer('BudgetsCompanion(') + ..write('id: $id, ') + ..write('userId: $userId, ') + ..write('clientId: $clientId, ') + ..write('rev: $rev, ') + ..write('createdAt: $createdAt, ') + ..write('updatedAt: $updatedAt, ') + ..write('deletedAt: $deletedAt, ') + ..write('lastSyncedAt: $lastSyncedAt, ') + ..write('name: $name, ') + ..write('slug: $slug, ') + ..write('description: $description, ') + ..write('amount: $amount, ') + ..write('currency: $currency, ') + ..write('periodType: $periodType, ') + ..write('startDate: $startDate, ') + ..write('endDate: $endDate, ') + ..write('rolloverEnabled: $rolloverEnabled, ') + ..write('thresholdPercent: $thresholdPercent, ') + ..write('forecastAlertsEnabled: $forecastAlertsEnabled, ') + ..write('isActive: $isActive, ') + ..write('ownerType: $ownerType, ') + ..write('ownerId: $ownerId, ') + ..write('progress: $progress, ') + ..write('rowid: $rowid') + ..write(')')) + .toString(); + } +} + +class BudgetTargets extends Table + with TableInfo { + @override + final GeneratedDatabase attachedDatabase; + final String? _alias; + BudgetTargets(this.attachedDatabase, [this._alias]); + late final GeneratedColumn budgetClientId = GeneratedColumn( + 'budget_client_id', aliasedName, false, + type: DriftSqlType.string, + requiredDuringInsert: true, + defaultConstraints: + GeneratedColumn.constraintIsAlways('REFERENCES budgets (client_id)')); + late final GeneratedColumn targetType = GeneratedColumn( + 'target_type', aliasedName, false, + type: DriftSqlType.string, requiredDuringInsert: true); + late final GeneratedColumn targetClientId = GeneratedColumn( + 'target_client_id', aliasedName, false, + type: DriftSqlType.string, requiredDuringInsert: true); + @override + List get $columns => + [budgetClientId, targetType, targetClientId]; + @override + String get aliasedName => _alias ?? actualTableName; + @override + String get actualTableName => $name; + static const String $name = 'budget_targets'; + @override + Set get $primaryKey => + {budgetClientId, targetType, targetClientId}; + @override + BudgetTargetsData map(Map data, {String? tablePrefix}) { + final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; + return BudgetTargetsData( + budgetClientId: attachedDatabase.typeMapping.read( + DriftSqlType.string, data['${effectivePrefix}budget_client_id'])!, + targetType: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}target_type'])!, + targetClientId: attachedDatabase.typeMapping.read( + DriftSqlType.string, data['${effectivePrefix}target_client_id'])!, + ); + } + + @override + BudgetTargets createAlias(String alias) { + return BudgetTargets(attachedDatabase, alias); + } +} + +class BudgetTargetsData extends DataClass + implements Insertable { + final String budgetClientId; + final String targetType; + final String targetClientId; + const BudgetTargetsData( + {required this.budgetClientId, + required this.targetType, + required this.targetClientId}); + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + map['budget_client_id'] = Variable(budgetClientId); + map['target_type'] = Variable(targetType); + map['target_client_id'] = Variable(targetClientId); + return map; + } + + BudgetTargetsCompanion toCompanion(bool nullToAbsent) { + return BudgetTargetsCompanion( + budgetClientId: Value(budgetClientId), + targetType: Value(targetType), + targetClientId: Value(targetClientId), + ); + } + + factory BudgetTargetsData.fromJson(Map json, + {ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return BudgetTargetsData( + budgetClientId: serializer.fromJson(json['budgetClientId']), + targetType: serializer.fromJson(json['targetType']), + targetClientId: serializer.fromJson(json['targetClientId']), + ); + } + @override + Map toJson({ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return { + 'budgetClientId': serializer.toJson(budgetClientId), + 'targetType': serializer.toJson(targetType), + 'targetClientId': serializer.toJson(targetClientId), + }; + } + + BudgetTargetsData copyWith( + {String? budgetClientId, + String? targetType, + String? targetClientId}) => + BudgetTargetsData( + budgetClientId: budgetClientId ?? this.budgetClientId, + targetType: targetType ?? this.targetType, + targetClientId: targetClientId ?? this.targetClientId, + ); + BudgetTargetsData copyWithCompanion(BudgetTargetsCompanion data) { + return BudgetTargetsData( + budgetClientId: data.budgetClientId.present + ? data.budgetClientId.value + : this.budgetClientId, + targetType: + data.targetType.present ? data.targetType.value : this.targetType, + targetClientId: data.targetClientId.present + ? data.targetClientId.value + : this.targetClientId, + ); + } + + @override + String toString() { + return (StringBuffer('BudgetTargetsData(') + ..write('budgetClientId: $budgetClientId, ') + ..write('targetType: $targetType, ') + ..write('targetClientId: $targetClientId') + ..write(')')) + .toString(); + } + + @override + int get hashCode => Object.hash(budgetClientId, targetType, targetClientId); + @override + bool operator ==(Object other) => + identical(this, other) || + (other is BudgetTargetsData && + other.budgetClientId == this.budgetClientId && + other.targetType == this.targetType && + other.targetClientId == this.targetClientId); +} + +class BudgetTargetsCompanion extends UpdateCompanion { + final Value budgetClientId; + final Value targetType; + final Value targetClientId; + final Value rowid; + const BudgetTargetsCompanion({ + this.budgetClientId = const Value.absent(), + this.targetType = const Value.absent(), + this.targetClientId = const Value.absent(), + this.rowid = const Value.absent(), + }); + BudgetTargetsCompanion.insert({ + required String budgetClientId, + required String targetType, + required String targetClientId, + this.rowid = const Value.absent(), + }) : budgetClientId = Value(budgetClientId), + targetType = Value(targetType), + targetClientId = Value(targetClientId); + static Insertable custom({ + Expression? budgetClientId, + Expression? targetType, + Expression? targetClientId, + Expression? rowid, + }) { + return RawValuesInsertable({ + if (budgetClientId != null) 'budget_client_id': budgetClientId, + if (targetType != null) 'target_type': targetType, + if (targetClientId != null) 'target_client_id': targetClientId, + if (rowid != null) 'rowid': rowid, + }); + } + + BudgetTargetsCompanion copyWith( + {Value? budgetClientId, + Value? targetType, + Value? targetClientId, + Value? rowid}) { + return BudgetTargetsCompanion( + budgetClientId: budgetClientId ?? this.budgetClientId, + targetType: targetType ?? this.targetType, + targetClientId: targetClientId ?? this.targetClientId, + rowid: rowid ?? this.rowid, + ); + } + + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + if (budgetClientId.present) { + map['budget_client_id'] = Variable(budgetClientId.value); + } + if (targetType.present) { + map['target_type'] = Variable(targetType.value); + } + if (targetClientId.present) { + map['target_client_id'] = Variable(targetClientId.value); + } + if (rowid.present) { + map['rowid'] = Variable(rowid.value); + } + return map; + } + + @override + String toString() { + return (StringBuffer('BudgetTargetsCompanion(') + ..write('budgetClientId: $budgetClientId, ') + ..write('targetType: $targetType, ') + ..write('targetClientId: $targetClientId, ') + ..write('rowid: $rowid') + ..write(')')) + .toString(); + } +} + +class BudgetPeriodStates extends Table + with TableInfo { + @override + final GeneratedDatabase attachedDatabase; + final String? _alias; + BudgetPeriodStates(this.attachedDatabase, [this._alias]); + late final GeneratedColumn id = GeneratedColumn( + 'id', aliasedName, true, + type: DriftSqlType.int, + requiredDuringInsert: false, + defaultConstraints: GeneratedColumn.constraintIsAlways('UNIQUE')); + late final GeneratedColumn userId = GeneratedColumn( + 'user_id', aliasedName, true, + type: DriftSqlType.int, requiredDuringInsert: false); + late final GeneratedColumn clientId = GeneratedColumn( + 'client_id', aliasedName, false, + type: DriftSqlType.string, + requiredDuringInsert: false, + defaultValue: const CustomExpression('\'\'')); + late final GeneratedColumn rev = GeneratedColumn( + 'rev', aliasedName, true, + type: DriftSqlType.string, + requiredDuringInsert: false, + defaultValue: const CustomExpression('\'1\'')); + late final GeneratedColumn createdAt = GeneratedColumn( + 'created_at', aliasedName, false, + type: DriftSqlType.dateTime, + requiredDuringInsert: false, + defaultValue: const CustomExpression('CURRENT_TIMESTAMP')); + late final GeneratedColumn updatedAt = GeneratedColumn( + 'updated_at', aliasedName, false, + type: DriftSqlType.dateTime, + requiredDuringInsert: false, + defaultValue: const CustomExpression('CURRENT_TIMESTAMP')); + late final GeneratedColumn deletedAt = GeneratedColumn( + 'deleted_at', aliasedName, true, + type: DriftSqlType.dateTime, requiredDuringInsert: false); + late final GeneratedColumn lastSyncedAt = GeneratedColumn( + 'last_synced_at', aliasedName, true, + type: DriftSqlType.dateTime, requiredDuringInsert: false); + late final GeneratedColumn budgetClientId = GeneratedColumn( + 'budget_client_id', aliasedName, false, + type: DriftSqlType.string, + requiredDuringInsert: true, + defaultConstraints: + GeneratedColumn.constraintIsAlways('REFERENCES budgets (client_id)')); + late final GeneratedColumn periodStart = GeneratedColumn( + 'period_start', aliasedName, false, + type: DriftSqlType.dateTime, requiredDuringInsert: true); + late final GeneratedColumn periodEnd = GeneratedColumn( + 'period_end', aliasedName, false, + type: DriftSqlType.dateTime, requiredDuringInsert: true); + late final GeneratedColumn netSpent = GeneratedColumn( + 'net_spent', aliasedName, false, + type: DriftSqlType.double, + requiredDuringInsert: false, + defaultValue: const CustomExpression('0.0')); + late final GeneratedColumn rolloverIn = GeneratedColumn( + 'rollover_in', aliasedName, false, + type: DriftSqlType.double, + requiredDuringInsert: false, + defaultValue: const CustomExpression('0.0')); + late final GeneratedColumn rolloverOut = GeneratedColumn( + 'rollover_out', aliasedName, false, + type: DriftSqlType.double, + requiredDuringInsert: false, + defaultValue: const CustomExpression('0.0')); + late final GeneratedColumn closedAt = GeneratedColumn( + 'closed_at', aliasedName, true, + type: DriftSqlType.dateTime, requiredDuringInsert: false); + @override + List get $columns => [ + id, + userId, + clientId, + rev, + createdAt, + updatedAt, + deletedAt, + lastSyncedAt, + budgetClientId, + periodStart, + periodEnd, + netSpent, + rolloverIn, + rolloverOut, + closedAt + ]; + @override + String get aliasedName => _alias ?? actualTableName; + @override + String get actualTableName => $name; + static const String $name = 'budget_period_states'; + @override + Set get $primaryKey => {clientId}; + @override + BudgetPeriodStatesData map(Map data, {String? tablePrefix}) { + final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; + return BudgetPeriodStatesData( + id: attachedDatabase.typeMapping + .read(DriftSqlType.int, data['${effectivePrefix}id']), + userId: attachedDatabase.typeMapping + .read(DriftSqlType.int, data['${effectivePrefix}user_id']), + clientId: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}client_id'])!, + rev: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}rev']), + createdAt: attachedDatabase.typeMapping + .read(DriftSqlType.dateTime, data['${effectivePrefix}created_at'])!, + updatedAt: attachedDatabase.typeMapping + .read(DriftSqlType.dateTime, data['${effectivePrefix}updated_at'])!, + deletedAt: attachedDatabase.typeMapping + .read(DriftSqlType.dateTime, data['${effectivePrefix}deleted_at']), + lastSyncedAt: attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, data['${effectivePrefix}last_synced_at']), + budgetClientId: attachedDatabase.typeMapping.read( + DriftSqlType.string, data['${effectivePrefix}budget_client_id'])!, + periodStart: attachedDatabase.typeMapping + .read(DriftSqlType.dateTime, data['${effectivePrefix}period_start'])!, + periodEnd: attachedDatabase.typeMapping + .read(DriftSqlType.dateTime, data['${effectivePrefix}period_end'])!, + netSpent: attachedDatabase.typeMapping + .read(DriftSqlType.double, data['${effectivePrefix}net_spent'])!, + rolloverIn: attachedDatabase.typeMapping + .read(DriftSqlType.double, data['${effectivePrefix}rollover_in'])!, + rolloverOut: attachedDatabase.typeMapping + .read(DriftSqlType.double, data['${effectivePrefix}rollover_out'])!, + closedAt: attachedDatabase.typeMapping + .read(DriftSqlType.dateTime, data['${effectivePrefix}closed_at']), + ); + } + + @override + BudgetPeriodStates createAlias(String alias) { + return BudgetPeriodStates(attachedDatabase, alias); + } +} + +class BudgetPeriodStatesData extends DataClass + implements Insertable { + final int? id; + final int? userId; + final String clientId; + final String? rev; + final DateTime createdAt; + final DateTime updatedAt; + final DateTime? deletedAt; + final DateTime? lastSyncedAt; + final String budgetClientId; + final DateTime periodStart; + final DateTime periodEnd; + final double netSpent; + final double rolloverIn; + final double rolloverOut; + final DateTime? closedAt; + const BudgetPeriodStatesData( + {this.id, + this.userId, + required this.clientId, + this.rev, + required this.createdAt, + required this.updatedAt, + this.deletedAt, + this.lastSyncedAt, + required this.budgetClientId, + required this.periodStart, + required this.periodEnd, + required this.netSpent, + required this.rolloverIn, + required this.rolloverOut, + this.closedAt}); + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + if (!nullToAbsent || id != null) { + map['id'] = Variable(id); + } + if (!nullToAbsent || userId != null) { + map['user_id'] = Variable(userId); + } + map['client_id'] = Variable(clientId); + if (!nullToAbsent || rev != null) { + map['rev'] = Variable(rev); + } + map['created_at'] = Variable(createdAt); + map['updated_at'] = Variable(updatedAt); + if (!nullToAbsent || deletedAt != null) { + map['deleted_at'] = Variable(deletedAt); + } + if (!nullToAbsent || lastSyncedAt != null) { + map['last_synced_at'] = Variable(lastSyncedAt); + } + map['budget_client_id'] = Variable(budgetClientId); + map['period_start'] = Variable(periodStart); + map['period_end'] = Variable(periodEnd); + map['net_spent'] = Variable(netSpent); + map['rollover_in'] = Variable(rolloverIn); + map['rollover_out'] = Variable(rolloverOut); + if (!nullToAbsent || closedAt != null) { + map['closed_at'] = Variable(closedAt); + } + return map; + } + + BudgetPeriodStatesCompanion toCompanion(bool nullToAbsent) { + return BudgetPeriodStatesCompanion( + id: id == null && nullToAbsent ? const Value.absent() : Value(id), + userId: + userId == null && nullToAbsent ? const Value.absent() : Value(userId), + clientId: Value(clientId), + rev: rev == null && nullToAbsent ? const Value.absent() : Value(rev), + createdAt: Value(createdAt), + updatedAt: Value(updatedAt), + deletedAt: deletedAt == null && nullToAbsent + ? const Value.absent() + : Value(deletedAt), + lastSyncedAt: lastSyncedAt == null && nullToAbsent + ? const Value.absent() + : Value(lastSyncedAt), + budgetClientId: Value(budgetClientId), + periodStart: Value(periodStart), + periodEnd: Value(periodEnd), + netSpent: Value(netSpent), + rolloverIn: Value(rolloverIn), + rolloverOut: Value(rolloverOut), + closedAt: closedAt == null && nullToAbsent + ? const Value.absent() + : Value(closedAt), + ); + } + + factory BudgetPeriodStatesData.fromJson(Map json, + {ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return BudgetPeriodStatesData( + id: serializer.fromJson(json['id']), + userId: serializer.fromJson(json['userId']), + clientId: serializer.fromJson(json['clientId']), + rev: serializer.fromJson(json['rev']), + createdAt: serializer.fromJson(json['createdAt']), + updatedAt: serializer.fromJson(json['updatedAt']), + deletedAt: serializer.fromJson(json['deletedAt']), + lastSyncedAt: serializer.fromJson(json['lastSyncedAt']), + budgetClientId: serializer.fromJson(json['budgetClientId']), + periodStart: serializer.fromJson(json['periodStart']), + periodEnd: serializer.fromJson(json['periodEnd']), + netSpent: serializer.fromJson(json['netSpent']), + rolloverIn: serializer.fromJson(json['rolloverIn']), + rolloverOut: serializer.fromJson(json['rolloverOut']), + closedAt: serializer.fromJson(json['closedAt']), + ); + } + @override + Map toJson({ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return { + 'id': serializer.toJson(id), + 'userId': serializer.toJson(userId), + 'clientId': serializer.toJson(clientId), + 'rev': serializer.toJson(rev), + 'createdAt': serializer.toJson(createdAt), + 'updatedAt': serializer.toJson(updatedAt), + 'deletedAt': serializer.toJson(deletedAt), + 'lastSyncedAt': serializer.toJson(lastSyncedAt), + 'budgetClientId': serializer.toJson(budgetClientId), + 'periodStart': serializer.toJson(periodStart), + 'periodEnd': serializer.toJson(periodEnd), + 'netSpent': serializer.toJson(netSpent), + 'rolloverIn': serializer.toJson(rolloverIn), + 'rolloverOut': serializer.toJson(rolloverOut), + 'closedAt': serializer.toJson(closedAt), + }; + } + + BudgetPeriodStatesData copyWith( + {Value id = const Value.absent(), + Value userId = const Value.absent(), + String? clientId, + Value rev = const Value.absent(), + DateTime? createdAt, + DateTime? updatedAt, + Value deletedAt = const Value.absent(), + Value lastSyncedAt = const Value.absent(), + String? budgetClientId, + DateTime? periodStart, + DateTime? periodEnd, + double? netSpent, + double? rolloverIn, + double? rolloverOut, + Value closedAt = const Value.absent()}) => + BudgetPeriodStatesData( + id: id.present ? id.value : this.id, + userId: userId.present ? userId.value : this.userId, + clientId: clientId ?? this.clientId, + rev: rev.present ? rev.value : this.rev, + createdAt: createdAt ?? this.createdAt, + updatedAt: updatedAt ?? this.updatedAt, + deletedAt: deletedAt.present ? deletedAt.value : this.deletedAt, + lastSyncedAt: + lastSyncedAt.present ? lastSyncedAt.value : this.lastSyncedAt, + budgetClientId: budgetClientId ?? this.budgetClientId, + periodStart: periodStart ?? this.periodStart, + periodEnd: periodEnd ?? this.periodEnd, + netSpent: netSpent ?? this.netSpent, + rolloverIn: rolloverIn ?? this.rolloverIn, + rolloverOut: rolloverOut ?? this.rolloverOut, + closedAt: closedAt.present ? closedAt.value : this.closedAt, + ); + BudgetPeriodStatesData copyWithCompanion(BudgetPeriodStatesCompanion data) { + return BudgetPeriodStatesData( + id: data.id.present ? data.id.value : this.id, + userId: data.userId.present ? data.userId.value : this.userId, + clientId: data.clientId.present ? data.clientId.value : this.clientId, + rev: data.rev.present ? data.rev.value : this.rev, + createdAt: data.createdAt.present ? data.createdAt.value : this.createdAt, + updatedAt: data.updatedAt.present ? data.updatedAt.value : this.updatedAt, + deletedAt: data.deletedAt.present ? data.deletedAt.value : this.deletedAt, + lastSyncedAt: data.lastSyncedAt.present + ? data.lastSyncedAt.value + : this.lastSyncedAt, + budgetClientId: data.budgetClientId.present + ? data.budgetClientId.value + : this.budgetClientId, + periodStart: + data.periodStart.present ? data.periodStart.value : this.periodStart, + periodEnd: data.periodEnd.present ? data.periodEnd.value : this.periodEnd, + netSpent: data.netSpent.present ? data.netSpent.value : this.netSpent, + rolloverIn: + data.rolloverIn.present ? data.rolloverIn.value : this.rolloverIn, + rolloverOut: + data.rolloverOut.present ? data.rolloverOut.value : this.rolloverOut, + closedAt: data.closedAt.present ? data.closedAt.value : this.closedAt, + ); + } + + @override + String toString() { + return (StringBuffer('BudgetPeriodStatesData(') + ..write('id: $id, ') + ..write('userId: $userId, ') + ..write('clientId: $clientId, ') + ..write('rev: $rev, ') + ..write('createdAt: $createdAt, ') + ..write('updatedAt: $updatedAt, ') + ..write('deletedAt: $deletedAt, ') + ..write('lastSyncedAt: $lastSyncedAt, ') + ..write('budgetClientId: $budgetClientId, ') + ..write('periodStart: $periodStart, ') + ..write('periodEnd: $periodEnd, ') + ..write('netSpent: $netSpent, ') + ..write('rolloverIn: $rolloverIn, ') + ..write('rolloverOut: $rolloverOut, ') + ..write('closedAt: $closedAt') + ..write(')')) + .toString(); + } + + @override + int get hashCode => Object.hash( + id, + userId, + clientId, + rev, + createdAt, + updatedAt, + deletedAt, + lastSyncedAt, + budgetClientId, + periodStart, + periodEnd, + netSpent, + rolloverIn, + rolloverOut, + closedAt); + @override + bool operator ==(Object other) => + identical(this, other) || + (other is BudgetPeriodStatesData && + other.id == this.id && + other.userId == this.userId && + other.clientId == this.clientId && + other.rev == this.rev && + other.createdAt == this.createdAt && + other.updatedAt == this.updatedAt && + other.deletedAt == this.deletedAt && + other.lastSyncedAt == this.lastSyncedAt && + other.budgetClientId == this.budgetClientId && + other.periodStart == this.periodStart && + other.periodEnd == this.periodEnd && + other.netSpent == this.netSpent && + other.rolloverIn == this.rolloverIn && + other.rolloverOut == this.rolloverOut && + other.closedAt == this.closedAt); +} + +class BudgetPeriodStatesCompanion + extends UpdateCompanion { + final Value id; + final Value userId; + final Value clientId; + final Value rev; + final Value createdAt; + final Value updatedAt; + final Value deletedAt; + final Value lastSyncedAt; + final Value budgetClientId; + final Value periodStart; + final Value periodEnd; + final Value netSpent; + final Value rolloverIn; + final Value rolloverOut; + final Value closedAt; + final Value rowid; + const BudgetPeriodStatesCompanion({ + this.id = const Value.absent(), + this.userId = const Value.absent(), + this.clientId = const Value.absent(), + this.rev = const Value.absent(), + this.createdAt = const Value.absent(), + this.updatedAt = const Value.absent(), + this.deletedAt = const Value.absent(), + this.lastSyncedAt = const Value.absent(), + this.budgetClientId = const Value.absent(), + this.periodStart = const Value.absent(), + this.periodEnd = const Value.absent(), + this.netSpent = const Value.absent(), + this.rolloverIn = const Value.absent(), + this.rolloverOut = const Value.absent(), + this.closedAt = const Value.absent(), + this.rowid = const Value.absent(), + }); + BudgetPeriodStatesCompanion.insert({ + this.id = const Value.absent(), + this.userId = const Value.absent(), + this.clientId = const Value.absent(), + this.rev = const Value.absent(), + this.createdAt = const Value.absent(), + this.updatedAt = const Value.absent(), + this.deletedAt = const Value.absent(), + this.lastSyncedAt = const Value.absent(), + required String budgetClientId, + required DateTime periodStart, + required DateTime periodEnd, + this.netSpent = const Value.absent(), + this.rolloverIn = const Value.absent(), + this.rolloverOut = const Value.absent(), + this.closedAt = const Value.absent(), + this.rowid = const Value.absent(), + }) : budgetClientId = Value(budgetClientId), + periodStart = Value(periodStart), + periodEnd = Value(periodEnd); + static Insertable custom({ + Expression? id, + Expression? userId, + Expression? clientId, + Expression? rev, + Expression? createdAt, + Expression? updatedAt, + Expression? deletedAt, + Expression? lastSyncedAt, + Expression? budgetClientId, + Expression? periodStart, + Expression? periodEnd, + Expression? netSpent, + Expression? rolloverIn, + Expression? rolloverOut, + Expression? closedAt, + Expression? rowid, + }) { + return RawValuesInsertable({ + if (id != null) 'id': id, + if (userId != null) 'user_id': userId, + if (clientId != null) 'client_id': clientId, + if (rev != null) 'rev': rev, + if (createdAt != null) 'created_at': createdAt, + if (updatedAt != null) 'updated_at': updatedAt, + if (deletedAt != null) 'deleted_at': deletedAt, + if (lastSyncedAt != null) 'last_synced_at': lastSyncedAt, + if (budgetClientId != null) 'budget_client_id': budgetClientId, + if (periodStart != null) 'period_start': periodStart, + if (periodEnd != null) 'period_end': periodEnd, + if (netSpent != null) 'net_spent': netSpent, + if (rolloverIn != null) 'rollover_in': rolloverIn, + if (rolloverOut != null) 'rollover_out': rolloverOut, + if (closedAt != null) 'closed_at': closedAt, + if (rowid != null) 'rowid': rowid, + }); + } + + BudgetPeriodStatesCompanion copyWith( + {Value? id, + Value? userId, + Value? clientId, + Value? rev, + Value? createdAt, + Value? updatedAt, + Value? deletedAt, + Value? lastSyncedAt, + Value? budgetClientId, + Value? periodStart, + Value? periodEnd, + Value? netSpent, + Value? rolloverIn, + Value? rolloverOut, + Value? closedAt, + Value? rowid}) { + return BudgetPeriodStatesCompanion( + id: id ?? this.id, + userId: userId ?? this.userId, + clientId: clientId ?? this.clientId, + rev: rev ?? this.rev, + createdAt: createdAt ?? this.createdAt, + updatedAt: updatedAt ?? this.updatedAt, + deletedAt: deletedAt ?? this.deletedAt, + lastSyncedAt: lastSyncedAt ?? this.lastSyncedAt, + budgetClientId: budgetClientId ?? this.budgetClientId, + periodStart: periodStart ?? this.periodStart, + periodEnd: periodEnd ?? this.periodEnd, + netSpent: netSpent ?? this.netSpent, + rolloverIn: rolloverIn ?? this.rolloverIn, + rolloverOut: rolloverOut ?? this.rolloverOut, + closedAt: closedAt ?? this.closedAt, + rowid: rowid ?? this.rowid, + ); + } + + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + if (id.present) { + map['id'] = Variable(id.value); + } + if (userId.present) { + map['user_id'] = Variable(userId.value); + } + if (clientId.present) { + map['client_id'] = Variable(clientId.value); + } + if (rev.present) { + map['rev'] = Variable(rev.value); + } + if (createdAt.present) { + map['created_at'] = Variable(createdAt.value); + } + if (updatedAt.present) { + map['updated_at'] = Variable(updatedAt.value); + } + if (deletedAt.present) { + map['deleted_at'] = Variable(deletedAt.value); + } + if (lastSyncedAt.present) { + map['last_synced_at'] = Variable(lastSyncedAt.value); + } + if (budgetClientId.present) { + map['budget_client_id'] = Variable(budgetClientId.value); + } + if (periodStart.present) { + map['period_start'] = Variable(periodStart.value); + } + if (periodEnd.present) { + map['period_end'] = Variable(periodEnd.value); + } + if (netSpent.present) { + map['net_spent'] = Variable(netSpent.value); + } + if (rolloverIn.present) { + map['rollover_in'] = Variable(rolloverIn.value); + } + if (rolloverOut.present) { + map['rollover_out'] = Variable(rolloverOut.value); + } + if (closedAt.present) { + map['closed_at'] = Variable(closedAt.value); + } + if (rowid.present) { + map['rowid'] = Variable(rowid.value); + } + return map; + } + + @override + String toString() { + return (StringBuffer('BudgetPeriodStatesCompanion(') + ..write('id: $id, ') + ..write('userId: $userId, ') + ..write('clientId: $clientId, ') + ..write('rev: $rev, ') + ..write('createdAt: $createdAt, ') + ..write('updatedAt: $updatedAt, ') + ..write('deletedAt: $deletedAt, ') + ..write('lastSyncedAt: $lastSyncedAt, ') + ..write('budgetClientId: $budgetClientId, ') + ..write('periodStart: $periodStart, ') + ..write('periodEnd: $periodEnd, ') + ..write('netSpent: $netSpent, ') + ..write('rolloverIn: $rolloverIn, ') + ..write('rolloverOut: $rolloverOut, ') + ..write('closedAt: $closedAt, ') + ..write('rowid: $rowid') + ..write(')')) + .toString(); + } +} + +class Holdings extends Table with TableInfo { + @override + final GeneratedDatabase attachedDatabase; + final String? _alias; + Holdings(this.attachedDatabase, [this._alias]); + late final GeneratedColumn id = GeneratedColumn( + 'id', aliasedName, false, + type: DriftSqlType.int, requiredDuringInsert: false); + late final GeneratedColumn name = GeneratedColumn( + 'name', aliasedName, false, + type: DriftSqlType.string, requiredDuringInsert: true); + late final GeneratedColumn symbol = GeneratedColumn( + 'symbol', aliasedName, true, + type: DriftSqlType.string, requiredDuringInsert: false); + late final GeneratedColumn quantity = GeneratedColumn( + 'quantity', aliasedName, false, + type: DriftSqlType.double, + requiredDuringInsert: false, + defaultValue: const CustomExpression('0.0')); + late final GeneratedColumn currency = GeneratedColumn( + 'currency', aliasedName, false, + type: DriftSqlType.string, requiredDuringInsert: true); + late final GeneratedColumn unitPrice = GeneratedColumn( + 'unit_price', aliasedName, false, + type: DriftSqlType.double, + requiredDuringInsert: false, + defaultValue: const CustomExpression('0.0')); + late final GeneratedColumn value = GeneratedColumn( + 'value', aliasedName, false, + type: DriftSqlType.double, + requiredDuringInsert: false, + defaultValue: const CustomExpression('0.0')); + late final GeneratedColumn priceSource = GeneratedColumn( + 'price_source', aliasedName, false, + type: DriftSqlType.string, + requiredDuringInsert: false, + defaultValue: const CustomExpression('\'manual\'')); + late final GeneratedColumn provider = GeneratedColumn( + 'provider', aliasedName, true, + type: DriftSqlType.string, requiredDuringInsert: false); + late final GeneratedColumn externalRef = GeneratedColumn( + 'external_ref', aliasedName, true, + type: DriftSqlType.string, requiredDuringInsert: false); + late final GeneratedColumn lastPricedAt = GeneratedColumn( + 'last_priced_at', aliasedName, true, + type: DriftSqlType.dateTime, requiredDuringInsert: false); + @override + List get $columns => [ + id, + name, + symbol, + quantity, + currency, + unitPrice, + value, + priceSource, + provider, + externalRef, + lastPricedAt + ]; + @override + String get aliasedName => _alias ?? actualTableName; + @override + String get actualTableName => $name; + static const String $name = 'holdings'; + @override + Set get $primaryKey => {id}; + @override + HoldingsData map(Map data, {String? tablePrefix}) { + final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; + return HoldingsData( + id: attachedDatabase.typeMapping + .read(DriftSqlType.int, data['${effectivePrefix}id'])!, + name: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}name'])!, + symbol: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}symbol']), + quantity: attachedDatabase.typeMapping + .read(DriftSqlType.double, data['${effectivePrefix}quantity'])!, + currency: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}currency'])!, + unitPrice: attachedDatabase.typeMapping + .read(DriftSqlType.double, data['${effectivePrefix}unit_price'])!, + value: attachedDatabase.typeMapping + .read(DriftSqlType.double, data['${effectivePrefix}value'])!, + priceSource: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}price_source'])!, + provider: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}provider']), + externalRef: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}external_ref']), + lastPricedAt: attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, data['${effectivePrefix}last_priced_at']), + ); + } + + @override + Holdings createAlias(String alias) { + return Holdings(attachedDatabase, alias); + } +} + +class HoldingsData extends DataClass implements Insertable { + final int id; + final String name; + final String? symbol; + final double quantity; + final String currency; + final double unitPrice; + final double value; + final String priceSource; + final String? provider; + final String? externalRef; + final DateTime? lastPricedAt; + const HoldingsData( + {required this.id, + required this.name, + this.symbol, + required this.quantity, + required this.currency, + required this.unitPrice, + required this.value, + required this.priceSource, + this.provider, + this.externalRef, + this.lastPricedAt}); + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + map['id'] = Variable(id); + map['name'] = Variable(name); + if (!nullToAbsent || symbol != null) { + map['symbol'] = Variable(symbol); + } + map['quantity'] = Variable(quantity); + map['currency'] = Variable(currency); + map['unit_price'] = Variable(unitPrice); + map['value'] = Variable(value); + map['price_source'] = Variable(priceSource); + if (!nullToAbsent || provider != null) { + map['provider'] = Variable(provider); + } + if (!nullToAbsent || externalRef != null) { + map['external_ref'] = Variable(externalRef); + } + if (!nullToAbsent || lastPricedAt != null) { + map['last_priced_at'] = Variable(lastPricedAt); + } + return map; + } + + HoldingsCompanion toCompanion(bool nullToAbsent) { + return HoldingsCompanion( + id: Value(id), + name: Value(name), + symbol: + symbol == null && nullToAbsent ? const Value.absent() : Value(symbol), + quantity: Value(quantity), + currency: Value(currency), + unitPrice: Value(unitPrice), + value: Value(value), + priceSource: Value(priceSource), + provider: provider == null && nullToAbsent + ? const Value.absent() + : Value(provider), + externalRef: externalRef == null && nullToAbsent + ? const Value.absent() + : Value(externalRef), + lastPricedAt: lastPricedAt == null && nullToAbsent + ? const Value.absent() + : Value(lastPricedAt), + ); + } + + factory HoldingsData.fromJson(Map json, + {ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return HoldingsData( + id: serializer.fromJson(json['id']), + name: serializer.fromJson(json['name']), + symbol: serializer.fromJson(json['symbol']), + quantity: serializer.fromJson(json['quantity']), + currency: serializer.fromJson(json['currency']), + unitPrice: serializer.fromJson(json['unitPrice']), + value: serializer.fromJson(json['value']), + priceSource: serializer.fromJson(json['priceSource']), + provider: serializer.fromJson(json['provider']), + externalRef: serializer.fromJson(json['externalRef']), + lastPricedAt: serializer.fromJson(json['lastPricedAt']), + ); + } + @override + Map toJson({ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return { + 'id': serializer.toJson(id), + 'name': serializer.toJson(name), + 'symbol': serializer.toJson(symbol), + 'quantity': serializer.toJson(quantity), + 'currency': serializer.toJson(currency), + 'unitPrice': serializer.toJson(unitPrice), + 'value': serializer.toJson(value), + 'priceSource': serializer.toJson(priceSource), + 'provider': serializer.toJson(provider), + 'externalRef': serializer.toJson(externalRef), + 'lastPricedAt': serializer.toJson(lastPricedAt), + }; + } + + HoldingsData copyWith( + {int? id, + String? name, + Value symbol = const Value.absent(), + double? quantity, + String? currency, + double? unitPrice, + double? value, + String? priceSource, + Value provider = const Value.absent(), + Value externalRef = const Value.absent(), + Value lastPricedAt = const Value.absent()}) => + HoldingsData( + id: id ?? this.id, + name: name ?? this.name, + symbol: symbol.present ? symbol.value : this.symbol, + quantity: quantity ?? this.quantity, + currency: currency ?? this.currency, + unitPrice: unitPrice ?? this.unitPrice, + value: value ?? this.value, + priceSource: priceSource ?? this.priceSource, + provider: provider.present ? provider.value : this.provider, + externalRef: externalRef.present ? externalRef.value : this.externalRef, + lastPricedAt: + lastPricedAt.present ? lastPricedAt.value : this.lastPricedAt, + ); + HoldingsData copyWithCompanion(HoldingsCompanion data) { + return HoldingsData( + id: data.id.present ? data.id.value : this.id, + name: data.name.present ? data.name.value : this.name, + symbol: data.symbol.present ? data.symbol.value : this.symbol, + quantity: data.quantity.present ? data.quantity.value : this.quantity, + currency: data.currency.present ? data.currency.value : this.currency, + unitPrice: data.unitPrice.present ? data.unitPrice.value : this.unitPrice, + value: data.value.present ? data.value.value : this.value, + priceSource: + data.priceSource.present ? data.priceSource.value : this.priceSource, + provider: data.provider.present ? data.provider.value : this.provider, + externalRef: + data.externalRef.present ? data.externalRef.value : this.externalRef, + lastPricedAt: data.lastPricedAt.present + ? data.lastPricedAt.value + : this.lastPricedAt, + ); + } + + @override + String toString() { + return (StringBuffer('HoldingsData(') + ..write('id: $id, ') + ..write('name: $name, ') + ..write('symbol: $symbol, ') + ..write('quantity: $quantity, ') + ..write('currency: $currency, ') + ..write('unitPrice: $unitPrice, ') + ..write('value: $value, ') + ..write('priceSource: $priceSource, ') + ..write('provider: $provider, ') + ..write('externalRef: $externalRef, ') + ..write('lastPricedAt: $lastPricedAt') + ..write(')')) + .toString(); + } + + @override + int get hashCode => Object.hash(id, name, symbol, quantity, currency, + unitPrice, value, priceSource, provider, externalRef, lastPricedAt); + @override + bool operator ==(Object other) => + identical(this, other) || + (other is HoldingsData && + other.id == this.id && + other.name == this.name && + other.symbol == this.symbol && + other.quantity == this.quantity && + other.currency == this.currency && + other.unitPrice == this.unitPrice && + other.value == this.value && + other.priceSource == this.priceSource && + other.provider == this.provider && + other.externalRef == this.externalRef && + other.lastPricedAt == this.lastPricedAt); +} + +class HoldingsCompanion extends UpdateCompanion { + final Value id; + final Value name; + final Value symbol; + final Value quantity; + final Value currency; + final Value unitPrice; + final Value value; + final Value priceSource; + final Value provider; + final Value externalRef; + final Value lastPricedAt; + const HoldingsCompanion({ + this.id = const Value.absent(), + this.name = const Value.absent(), + this.symbol = const Value.absent(), + this.quantity = const Value.absent(), + this.currency = const Value.absent(), + this.unitPrice = const Value.absent(), + this.value = const Value.absent(), + this.priceSource = const Value.absent(), + this.provider = const Value.absent(), + this.externalRef = const Value.absent(), + this.lastPricedAt = const Value.absent(), + }); + HoldingsCompanion.insert({ + this.id = const Value.absent(), + required String name, + this.symbol = const Value.absent(), + this.quantity = const Value.absent(), + required String currency, + this.unitPrice = const Value.absent(), + this.value = const Value.absent(), + this.priceSource = const Value.absent(), + this.provider = const Value.absent(), + this.externalRef = const Value.absent(), + this.lastPricedAt = const Value.absent(), + }) : name = Value(name), + currency = Value(currency); + static Insertable custom({ + Expression? id, + Expression? name, + Expression? symbol, + Expression? quantity, + Expression? currency, + Expression? unitPrice, + Expression? value, + Expression? priceSource, + Expression? provider, + Expression? externalRef, + Expression? lastPricedAt, + }) { + return RawValuesInsertable({ + if (id != null) 'id': id, + if (name != null) 'name': name, + if (symbol != null) 'symbol': symbol, + if (quantity != null) 'quantity': quantity, + if (currency != null) 'currency': currency, + if (unitPrice != null) 'unit_price': unitPrice, + if (value != null) 'value': value, + if (priceSource != null) 'price_source': priceSource, + if (provider != null) 'provider': provider, + if (externalRef != null) 'external_ref': externalRef, + if (lastPricedAt != null) 'last_priced_at': lastPricedAt, + }); + } + + HoldingsCompanion copyWith( + {Value? id, + Value? name, + Value? symbol, + Value? quantity, + Value? currency, + Value? unitPrice, + Value? value, + Value? priceSource, + Value? provider, + Value? externalRef, + Value? lastPricedAt}) { + return HoldingsCompanion( + id: id ?? this.id, + name: name ?? this.name, + symbol: symbol ?? this.symbol, + quantity: quantity ?? this.quantity, + currency: currency ?? this.currency, + unitPrice: unitPrice ?? this.unitPrice, + value: value ?? this.value, + priceSource: priceSource ?? this.priceSource, + provider: provider ?? this.provider, + externalRef: externalRef ?? this.externalRef, + lastPricedAt: lastPricedAt ?? this.lastPricedAt, + ); + } + + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + if (id.present) { + map['id'] = Variable(id.value); + } + if (name.present) { + map['name'] = Variable(name.value); + } + if (symbol.present) { + map['symbol'] = Variable(symbol.value); + } + if (quantity.present) { + map['quantity'] = Variable(quantity.value); + } + if (currency.present) { + map['currency'] = Variable(currency.value); + } + if (unitPrice.present) { + map['unit_price'] = Variable(unitPrice.value); + } + if (value.present) { + map['value'] = Variable(value.value); + } + if (priceSource.present) { + map['price_source'] = Variable(priceSource.value); + } + if (provider.present) { + map['provider'] = Variable(provider.value); + } + if (externalRef.present) { + map['external_ref'] = Variable(externalRef.value); + } + if (lastPricedAt.present) { + map['last_priced_at'] = Variable(lastPricedAt.value); + } + return map; + } + + @override + String toString() { + return (StringBuffer('HoldingsCompanion(') + ..write('id: $id, ') + ..write('name: $name, ') + ..write('symbol: $symbol, ') + ..write('quantity: $quantity, ') + ..write('currency: $currency, ') + ..write('unitPrice: $unitPrice, ') + ..write('value: $value, ') + ..write('priceSource: $priceSource, ') + ..write('provider: $provider, ') + ..write('externalRef: $externalRef, ') + ..write('lastPricedAt: $lastPricedAt') + ..write(')')) + .toString(); + } +} + +class FinancialPositionCache extends Table + with TableInfo { + @override + final GeneratedDatabase attachedDatabase; + final String? _alias; + FinancialPositionCache(this.attachedDatabase, [this._alias]); + late final GeneratedColumn cacheKey = GeneratedColumn( + 'cache_key', aliasedName, false, + type: DriftSqlType.string, requiredDuringInsert: true); + late final GeneratedColumn payload = GeneratedColumn( + 'payload', aliasedName, false, + type: DriftSqlType.string, requiredDuringInsert: true); + late final GeneratedColumn currency = GeneratedColumn( + 'currency', aliasedName, true, + type: DriftSqlType.string, requiredDuringInsert: false); + late final GeneratedColumn fetchedAt = GeneratedColumn( + 'fetched_at', aliasedName, false, + type: DriftSqlType.dateTime, requiredDuringInsert: true); + @override + List get $columns => + [cacheKey, payload, currency, fetchedAt]; + @override + String get aliasedName => _alias ?? actualTableName; + @override + String get actualTableName => $name; + static const String $name = 'financial_position_cache'; + @override + Set get $primaryKey => {cacheKey}; + @override + FinancialPositionCacheData map(Map data, + {String? tablePrefix}) { + final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; + return FinancialPositionCacheData( + cacheKey: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}cache_key'])!, + payload: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}payload'])!, + currency: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}currency']), + fetchedAt: attachedDatabase.typeMapping + .read(DriftSqlType.dateTime, data['${effectivePrefix}fetched_at'])!, + ); + } + + @override + FinancialPositionCache createAlias(String alias) { + return FinancialPositionCache(attachedDatabase, alias); + } +} + +class FinancialPositionCacheData extends DataClass + implements Insertable { + final String cacheKey; + final String payload; + final String? currency; + final DateTime fetchedAt; + const FinancialPositionCacheData( + {required this.cacheKey, + required this.payload, + this.currency, + required this.fetchedAt}); + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + map['cache_key'] = Variable(cacheKey); + map['payload'] = Variable(payload); + if (!nullToAbsent || currency != null) { + map['currency'] = Variable(currency); + } + map['fetched_at'] = Variable(fetchedAt); + return map; + } + + FinancialPositionCacheCompanion toCompanion(bool nullToAbsent) { + return FinancialPositionCacheCompanion( + cacheKey: Value(cacheKey), + payload: Value(payload), + currency: currency == null && nullToAbsent + ? const Value.absent() + : Value(currency), + fetchedAt: Value(fetchedAt), + ); + } + + factory FinancialPositionCacheData.fromJson(Map json, + {ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return FinancialPositionCacheData( + cacheKey: serializer.fromJson(json['cacheKey']), + payload: serializer.fromJson(json['payload']), + currency: serializer.fromJson(json['currency']), + fetchedAt: serializer.fromJson(json['fetchedAt']), + ); + } + @override + Map toJson({ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return { + 'cacheKey': serializer.toJson(cacheKey), + 'payload': serializer.toJson(payload), + 'currency': serializer.toJson(currency), + 'fetchedAt': serializer.toJson(fetchedAt), + }; + } + + FinancialPositionCacheData copyWith( + {String? cacheKey, + String? payload, + Value currency = const Value.absent(), + DateTime? fetchedAt}) => + FinancialPositionCacheData( + cacheKey: cacheKey ?? this.cacheKey, + payload: payload ?? this.payload, + currency: currency.present ? currency.value : this.currency, + fetchedAt: fetchedAt ?? this.fetchedAt, + ); + FinancialPositionCacheData copyWithCompanion( + FinancialPositionCacheCompanion data) { + return FinancialPositionCacheData( + cacheKey: data.cacheKey.present ? data.cacheKey.value : this.cacheKey, + payload: data.payload.present ? data.payload.value : this.payload, + currency: data.currency.present ? data.currency.value : this.currency, + fetchedAt: data.fetchedAt.present ? data.fetchedAt.value : this.fetchedAt, + ); + } + + @override + String toString() { + return (StringBuffer('FinancialPositionCacheData(') + ..write('cacheKey: $cacheKey, ') + ..write('payload: $payload, ') + ..write('currency: $currency, ') + ..write('fetchedAt: $fetchedAt') + ..write(')')) + .toString(); + } + + @override + int get hashCode => Object.hash(cacheKey, payload, currency, fetchedAt); + @override + bool operator ==(Object other) => + identical(this, other) || + (other is FinancialPositionCacheData && + other.cacheKey == this.cacheKey && + other.payload == this.payload && + other.currency == this.currency && + other.fetchedAt == this.fetchedAt); +} + +class FinancialPositionCacheCompanion + extends UpdateCompanion { + final Value cacheKey; + final Value payload; + final Value currency; + final Value fetchedAt; + final Value rowid; + const FinancialPositionCacheCompanion({ + this.cacheKey = const Value.absent(), + this.payload = const Value.absent(), + this.currency = const Value.absent(), + this.fetchedAt = const Value.absent(), + this.rowid = const Value.absent(), + }); + FinancialPositionCacheCompanion.insert({ + required String cacheKey, + required String payload, + this.currency = const Value.absent(), + required DateTime fetchedAt, + this.rowid = const Value.absent(), + }) : cacheKey = Value(cacheKey), + payload = Value(payload), + fetchedAt = Value(fetchedAt); + static Insertable custom({ + Expression? cacheKey, + Expression? payload, + Expression? currency, + Expression? fetchedAt, + Expression? rowid, + }) { + return RawValuesInsertable({ + if (cacheKey != null) 'cache_key': cacheKey, + if (payload != null) 'payload': payload, + if (currency != null) 'currency': currency, + if (fetchedAt != null) 'fetched_at': fetchedAt, + if (rowid != null) 'rowid': rowid, + }); + } + + FinancialPositionCacheCompanion copyWith( + {Value? cacheKey, + Value? payload, + Value? currency, + Value? fetchedAt, + Value? rowid}) { + return FinancialPositionCacheCompanion( + cacheKey: cacheKey ?? this.cacheKey, + payload: payload ?? this.payload, + currency: currency ?? this.currency, + fetchedAt: fetchedAt ?? this.fetchedAt, + rowid: rowid ?? this.rowid, + ); + } + + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + if (cacheKey.present) { + map['cache_key'] = Variable(cacheKey.value); + } + if (payload.present) { + map['payload'] = Variable(payload.value); + } + if (currency.present) { + map['currency'] = Variable(currency.value); + } + if (fetchedAt.present) { + map['fetched_at'] = Variable(fetchedAt.value); + } + if (rowid.present) { + map['rowid'] = Variable(rowid.value); + } + return map; + } + + @override + String toString() { + return (StringBuffer('FinancialPositionCacheCompanion(') + ..write('cacheKey: $cacheKey, ') + ..write('payload: $payload, ') + ..write('currency: $currency, ') + ..write('fetchedAt: $fetchedAt, ') + ..write('rowid: $rowid') + ..write(')')) + .toString(); + } +} + +class Reminders extends Table with TableInfo { + @override + final GeneratedDatabase attachedDatabase; + final String? _alias; + Reminders(this.attachedDatabase, [this._alias]); + late final GeneratedColumn id = GeneratedColumn( + 'id', aliasedName, true, + type: DriftSqlType.int, + requiredDuringInsert: false, + defaultConstraints: GeneratedColumn.constraintIsAlways('UNIQUE')); + late final GeneratedColumn userId = GeneratedColumn( + 'user_id', aliasedName, true, + type: DriftSqlType.int, requiredDuringInsert: false); + late final GeneratedColumn clientId = GeneratedColumn( + 'client_id', aliasedName, false, + type: DriftSqlType.string, + requiredDuringInsert: false, + defaultValue: const CustomExpression('\'\'')); + late final GeneratedColumn rev = GeneratedColumn( + 'rev', aliasedName, true, + type: DriftSqlType.string, + requiredDuringInsert: false, + defaultValue: const CustomExpression('\'1\'')); + late final GeneratedColumn createdAt = GeneratedColumn( + 'created_at', aliasedName, false, + type: DriftSqlType.dateTime, + requiredDuringInsert: false, + defaultValue: const CustomExpression('CURRENT_TIMESTAMP')); + late final GeneratedColumn updatedAt = GeneratedColumn( + 'updated_at', aliasedName, false, + type: DriftSqlType.dateTime, + requiredDuringInsert: false, + defaultValue: const CustomExpression('CURRENT_TIMESTAMP')); + late final GeneratedColumn deletedAt = GeneratedColumn( + 'deleted_at', aliasedName, true, + type: DriftSqlType.dateTime, requiredDuringInsert: false); + late final GeneratedColumn lastSyncedAt = GeneratedColumn( + 'last_synced_at', aliasedName, true, + type: DriftSqlType.dateTime, requiredDuringInsert: false); + late final GeneratedColumn title = GeneratedColumn( + 'title', aliasedName, false, + type: DriftSqlType.string, requiredDuringInsert: true); + late final GeneratedColumn description = GeneratedColumn( + 'description', aliasedName, true, + type: DriftSqlType.string, requiredDuringInsert: false); + late final GeneratedColumn type = GeneratedColumn( + 'type', aliasedName, false, + type: DriftSqlType.string, + requiredDuringInsert: false, + defaultValue: const CustomExpression('\'custom\'')); + late final GeneratedColumn triggerAt = GeneratedColumn( + 'trigger_at', aliasedName, true, + type: DriftSqlType.dateTime, requiredDuringInsert: false); + late final GeneratedColumn dueAt = GeneratedColumn( + 'due_at', aliasedName, true, + type: DriftSqlType.dateTime, requiredDuringInsert: false); + late final GeneratedColumn repeatRule = GeneratedColumn( + 'repeat_rule', aliasedName, true, + type: DriftSqlType.string, requiredDuringInsert: false); + late final GeneratedColumn timezone = GeneratedColumn( + 'timezone', aliasedName, true, + type: DriftSqlType.string, requiredDuringInsert: false); + late final GeneratedColumn status = GeneratedColumn( + 'status', aliasedName, false, + type: DriftSqlType.string, + requiredDuringInsert: false, + defaultValue: const CustomExpression('\'active\'')); + late final GeneratedColumn priority = GeneratedColumn( + 'priority', aliasedName, false, + type: DriftSqlType.int, + requiredDuringInsert: false, + defaultValue: const CustomExpression('0')); + late final GeneratedColumn snoozedUntil = GeneratedColumn( + 'snoozed_until', aliasedName, true, + type: DriftSqlType.dateTime, requiredDuringInsert: false); + late final GeneratedColumn lastTriggeredAt = + GeneratedColumn('last_triggered_at', aliasedName, true, + type: DriftSqlType.dateTime, requiredDuringInsert: false); + late final GeneratedColumn nextTriggerAt = + GeneratedColumn('next_trigger_at', aliasedName, true, + type: DriftSqlType.dateTime, requiredDuringInsert: false); + @override + List get $columns => [ + id, + userId, + clientId, + rev, + createdAt, + updatedAt, + deletedAt, + lastSyncedAt, + title, + description, + type, + triggerAt, + dueAt, + repeatRule, + timezone, + status, + priority, + snoozedUntil, + lastTriggeredAt, + nextTriggerAt + ]; + @override + String get aliasedName => _alias ?? actualTableName; + @override + String get actualTableName => $name; + static const String $name = 'reminders'; + @override + Set get $primaryKey => {clientId}; + @override + RemindersData map(Map data, {String? tablePrefix}) { + final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; + return RemindersData( + id: attachedDatabase.typeMapping + .read(DriftSqlType.int, data['${effectivePrefix}id']), + userId: attachedDatabase.typeMapping + .read(DriftSqlType.int, data['${effectivePrefix}user_id']), + clientId: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}client_id'])!, + rev: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}rev']), + createdAt: attachedDatabase.typeMapping + .read(DriftSqlType.dateTime, data['${effectivePrefix}created_at'])!, + updatedAt: attachedDatabase.typeMapping + .read(DriftSqlType.dateTime, data['${effectivePrefix}updated_at'])!, + deletedAt: attachedDatabase.typeMapping + .read(DriftSqlType.dateTime, data['${effectivePrefix}deleted_at']), + lastSyncedAt: attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, data['${effectivePrefix}last_synced_at']), + title: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}title'])!, + description: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}description']), + type: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}type'])!, + triggerAt: attachedDatabase.typeMapping + .read(DriftSqlType.dateTime, data['${effectivePrefix}trigger_at']), + dueAt: attachedDatabase.typeMapping + .read(DriftSqlType.dateTime, data['${effectivePrefix}due_at']), + repeatRule: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}repeat_rule']), + timezone: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}timezone']), + status: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}status'])!, + priority: attachedDatabase.typeMapping + .read(DriftSqlType.int, data['${effectivePrefix}priority'])!, + snoozedUntil: attachedDatabase.typeMapping + .read(DriftSqlType.dateTime, data['${effectivePrefix}snoozed_until']), + lastTriggeredAt: attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, data['${effectivePrefix}last_triggered_at']), + nextTriggerAt: attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, data['${effectivePrefix}next_trigger_at']), + ); + } + + @override + Reminders createAlias(String alias) { + return Reminders(attachedDatabase, alias); + } +} + +class RemindersData extends DataClass implements Insertable { + final int? id; + final int? userId; + final String clientId; + final String? rev; + final DateTime createdAt; + final DateTime updatedAt; + final DateTime? deletedAt; + final DateTime? lastSyncedAt; + final String title; + final String? description; + final String type; + final DateTime? triggerAt; + final DateTime? dueAt; + final String? repeatRule; + final String? timezone; + final String status; + final int priority; + final DateTime? snoozedUntil; + final DateTime? lastTriggeredAt; + final DateTime? nextTriggerAt; + const RemindersData( + {this.id, + this.userId, + required this.clientId, + this.rev, + required this.createdAt, + required this.updatedAt, + this.deletedAt, + this.lastSyncedAt, + required this.title, + this.description, + required this.type, + this.triggerAt, + this.dueAt, + this.repeatRule, + this.timezone, + required this.status, + required this.priority, + this.snoozedUntil, + this.lastTriggeredAt, + this.nextTriggerAt}); + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + if (!nullToAbsent || id != null) { + map['id'] = Variable(id); + } + if (!nullToAbsent || userId != null) { + map['user_id'] = Variable(userId); + } + map['client_id'] = Variable(clientId); + if (!nullToAbsent || rev != null) { + map['rev'] = Variable(rev); + } + map['created_at'] = Variable(createdAt); + map['updated_at'] = Variable(updatedAt); + if (!nullToAbsent || deletedAt != null) { + map['deleted_at'] = Variable(deletedAt); + } + if (!nullToAbsent || lastSyncedAt != null) { + map['last_synced_at'] = Variable(lastSyncedAt); + } + map['title'] = Variable(title); + if (!nullToAbsent || description != null) { + map['description'] = Variable(description); + } + map['type'] = Variable(type); + if (!nullToAbsent || triggerAt != null) { + map['trigger_at'] = Variable(triggerAt); + } + if (!nullToAbsent || dueAt != null) { + map['due_at'] = Variable(dueAt); + } + if (!nullToAbsent || repeatRule != null) { + map['repeat_rule'] = Variable(repeatRule); + } + if (!nullToAbsent || timezone != null) { + map['timezone'] = Variable(timezone); + } + map['status'] = Variable(status); + map['priority'] = Variable(priority); + if (!nullToAbsent || snoozedUntil != null) { + map['snoozed_until'] = Variable(snoozedUntil); + } + if (!nullToAbsent || lastTriggeredAt != null) { + map['last_triggered_at'] = Variable(lastTriggeredAt); + } + if (!nullToAbsent || nextTriggerAt != null) { + map['next_trigger_at'] = Variable(nextTriggerAt); + } + return map; + } + + RemindersCompanion toCompanion(bool nullToAbsent) { + return RemindersCompanion( + id: id == null && nullToAbsent ? const Value.absent() : Value(id), + userId: + userId == null && nullToAbsent ? const Value.absent() : Value(userId), + clientId: Value(clientId), + rev: rev == null && nullToAbsent ? const Value.absent() : Value(rev), + createdAt: Value(createdAt), + updatedAt: Value(updatedAt), + deletedAt: deletedAt == null && nullToAbsent + ? const Value.absent() + : Value(deletedAt), + lastSyncedAt: lastSyncedAt == null && nullToAbsent + ? const Value.absent() + : Value(lastSyncedAt), + title: Value(title), + description: description == null && nullToAbsent + ? const Value.absent() + : Value(description), + type: Value(type), + triggerAt: triggerAt == null && nullToAbsent + ? const Value.absent() + : Value(triggerAt), + dueAt: + dueAt == null && nullToAbsent ? const Value.absent() : Value(dueAt), + repeatRule: repeatRule == null && nullToAbsent + ? const Value.absent() + : Value(repeatRule), + timezone: timezone == null && nullToAbsent + ? const Value.absent() + : Value(timezone), + status: Value(status), + priority: Value(priority), + snoozedUntil: snoozedUntil == null && nullToAbsent + ? const Value.absent() + : Value(snoozedUntil), + lastTriggeredAt: lastTriggeredAt == null && nullToAbsent + ? const Value.absent() + : Value(lastTriggeredAt), + nextTriggerAt: nextTriggerAt == null && nullToAbsent + ? const Value.absent() + : Value(nextTriggerAt), + ); + } + + factory RemindersData.fromJson(Map json, + {ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return RemindersData( + id: serializer.fromJson(json['id']), + userId: serializer.fromJson(json['userId']), + clientId: serializer.fromJson(json['clientId']), + rev: serializer.fromJson(json['rev']), + createdAt: serializer.fromJson(json['createdAt']), + updatedAt: serializer.fromJson(json['updatedAt']), + deletedAt: serializer.fromJson(json['deletedAt']), + lastSyncedAt: serializer.fromJson(json['lastSyncedAt']), + title: serializer.fromJson(json['title']), + description: serializer.fromJson(json['description']), + type: serializer.fromJson(json['type']), + triggerAt: serializer.fromJson(json['triggerAt']), + dueAt: serializer.fromJson(json['dueAt']), + repeatRule: serializer.fromJson(json['repeatRule']), + timezone: serializer.fromJson(json['timezone']), + status: serializer.fromJson(json['status']), + priority: serializer.fromJson(json['priority']), + snoozedUntil: serializer.fromJson(json['snoozedUntil']), + lastTriggeredAt: serializer.fromJson(json['lastTriggeredAt']), + nextTriggerAt: serializer.fromJson(json['nextTriggerAt']), + ); + } + @override + Map toJson({ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return { + 'id': serializer.toJson(id), + 'userId': serializer.toJson(userId), + 'clientId': serializer.toJson(clientId), + 'rev': serializer.toJson(rev), + 'createdAt': serializer.toJson(createdAt), + 'updatedAt': serializer.toJson(updatedAt), + 'deletedAt': serializer.toJson(deletedAt), + 'lastSyncedAt': serializer.toJson(lastSyncedAt), + 'title': serializer.toJson(title), + 'description': serializer.toJson(description), + 'type': serializer.toJson(type), + 'triggerAt': serializer.toJson(triggerAt), + 'dueAt': serializer.toJson(dueAt), + 'repeatRule': serializer.toJson(repeatRule), + 'timezone': serializer.toJson(timezone), + 'status': serializer.toJson(status), + 'priority': serializer.toJson(priority), + 'snoozedUntil': serializer.toJson(snoozedUntil), + 'lastTriggeredAt': serializer.toJson(lastTriggeredAt), + 'nextTriggerAt': serializer.toJson(nextTriggerAt), + }; + } + + RemindersData copyWith( + {Value id = const Value.absent(), + Value userId = const Value.absent(), + String? clientId, + Value rev = const Value.absent(), + DateTime? createdAt, + DateTime? updatedAt, + Value deletedAt = const Value.absent(), + Value lastSyncedAt = const Value.absent(), + String? title, + Value description = const Value.absent(), + String? type, + Value triggerAt = const Value.absent(), + Value dueAt = const Value.absent(), + Value repeatRule = const Value.absent(), + Value timezone = const Value.absent(), + String? status, + int? priority, + Value snoozedUntil = const Value.absent(), + Value lastTriggeredAt = const Value.absent(), + Value nextTriggerAt = const Value.absent()}) => + RemindersData( + id: id.present ? id.value : this.id, + userId: userId.present ? userId.value : this.userId, + clientId: clientId ?? this.clientId, + rev: rev.present ? rev.value : this.rev, + createdAt: createdAt ?? this.createdAt, + updatedAt: updatedAt ?? this.updatedAt, + deletedAt: deletedAt.present ? deletedAt.value : this.deletedAt, + lastSyncedAt: + lastSyncedAt.present ? lastSyncedAt.value : this.lastSyncedAt, + title: title ?? this.title, + description: description.present ? description.value : this.description, + type: type ?? this.type, + triggerAt: triggerAt.present ? triggerAt.value : this.triggerAt, + dueAt: dueAt.present ? dueAt.value : this.dueAt, + repeatRule: repeatRule.present ? repeatRule.value : this.repeatRule, + timezone: timezone.present ? timezone.value : this.timezone, + status: status ?? this.status, + priority: priority ?? this.priority, + snoozedUntil: + snoozedUntil.present ? snoozedUntil.value : this.snoozedUntil, + lastTriggeredAt: lastTriggeredAt.present + ? lastTriggeredAt.value + : this.lastTriggeredAt, + nextTriggerAt: + nextTriggerAt.present ? nextTriggerAt.value : this.nextTriggerAt, + ); + RemindersData copyWithCompanion(RemindersCompanion data) { + return RemindersData( + id: data.id.present ? data.id.value : this.id, + userId: data.userId.present ? data.userId.value : this.userId, + clientId: data.clientId.present ? data.clientId.value : this.clientId, + rev: data.rev.present ? data.rev.value : this.rev, + createdAt: data.createdAt.present ? data.createdAt.value : this.createdAt, + updatedAt: data.updatedAt.present ? data.updatedAt.value : this.updatedAt, + deletedAt: data.deletedAt.present ? data.deletedAt.value : this.deletedAt, + lastSyncedAt: data.lastSyncedAt.present + ? data.lastSyncedAt.value + : this.lastSyncedAt, + title: data.title.present ? data.title.value : this.title, + description: + data.description.present ? data.description.value : this.description, + type: data.type.present ? data.type.value : this.type, + triggerAt: data.triggerAt.present ? data.triggerAt.value : this.triggerAt, + dueAt: data.dueAt.present ? data.dueAt.value : this.dueAt, + repeatRule: + data.repeatRule.present ? data.repeatRule.value : this.repeatRule, + timezone: data.timezone.present ? data.timezone.value : this.timezone, + status: data.status.present ? data.status.value : this.status, + priority: data.priority.present ? data.priority.value : this.priority, + snoozedUntil: data.snoozedUntil.present + ? data.snoozedUntil.value + : this.snoozedUntil, + lastTriggeredAt: data.lastTriggeredAt.present + ? data.lastTriggeredAt.value + : this.lastTriggeredAt, + nextTriggerAt: data.nextTriggerAt.present + ? data.nextTriggerAt.value + : this.nextTriggerAt, + ); + } + + @override + String toString() { + return (StringBuffer('RemindersData(') + ..write('id: $id, ') + ..write('userId: $userId, ') + ..write('clientId: $clientId, ') + ..write('rev: $rev, ') + ..write('createdAt: $createdAt, ') + ..write('updatedAt: $updatedAt, ') + ..write('deletedAt: $deletedAt, ') + ..write('lastSyncedAt: $lastSyncedAt, ') + ..write('title: $title, ') + ..write('description: $description, ') + ..write('type: $type, ') + ..write('triggerAt: $triggerAt, ') + ..write('dueAt: $dueAt, ') + ..write('repeatRule: $repeatRule, ') + ..write('timezone: $timezone, ') + ..write('status: $status, ') + ..write('priority: $priority, ') + ..write('snoozedUntil: $snoozedUntil, ') + ..write('lastTriggeredAt: $lastTriggeredAt, ') + ..write('nextTriggerAt: $nextTriggerAt') + ..write(')')) + .toString(); + } + + @override + int get hashCode => Object.hash( + id, + userId, + clientId, + rev, + createdAt, + updatedAt, + deletedAt, + lastSyncedAt, + title, + description, + type, + triggerAt, + dueAt, + repeatRule, + timezone, + status, + priority, + snoozedUntil, + lastTriggeredAt, + nextTriggerAt); + @override + bool operator ==(Object other) => + identical(this, other) || + (other is RemindersData && + other.id == this.id && + other.userId == this.userId && + other.clientId == this.clientId && + other.rev == this.rev && + other.createdAt == this.createdAt && + other.updatedAt == this.updatedAt && + other.deletedAt == this.deletedAt && + other.lastSyncedAt == this.lastSyncedAt && + other.title == this.title && + other.description == this.description && + other.type == this.type && + other.triggerAt == this.triggerAt && + other.dueAt == this.dueAt && + other.repeatRule == this.repeatRule && + other.timezone == this.timezone && + other.status == this.status && + other.priority == this.priority && + other.snoozedUntil == this.snoozedUntil && + other.lastTriggeredAt == this.lastTriggeredAt && + other.nextTriggerAt == this.nextTriggerAt); +} + +class RemindersCompanion extends UpdateCompanion { + final Value id; + final Value userId; + final Value clientId; + final Value rev; + final Value createdAt; + final Value updatedAt; + final Value deletedAt; + final Value lastSyncedAt; + final Value title; + final Value description; + final Value type; + final Value triggerAt; + final Value dueAt; + final Value repeatRule; + final Value timezone; + final Value status; + final Value priority; + final Value snoozedUntil; + final Value lastTriggeredAt; + final Value nextTriggerAt; + final Value rowid; + const RemindersCompanion({ + this.id = const Value.absent(), + this.userId = const Value.absent(), + this.clientId = const Value.absent(), + this.rev = const Value.absent(), + this.createdAt = const Value.absent(), + this.updatedAt = const Value.absent(), + this.deletedAt = const Value.absent(), + this.lastSyncedAt = const Value.absent(), + this.title = const Value.absent(), + this.description = const Value.absent(), + this.type = const Value.absent(), + this.triggerAt = const Value.absent(), + this.dueAt = const Value.absent(), + this.repeatRule = const Value.absent(), + this.timezone = const Value.absent(), + this.status = const Value.absent(), + this.priority = const Value.absent(), + this.snoozedUntil = const Value.absent(), + this.lastTriggeredAt = const Value.absent(), + this.nextTriggerAt = const Value.absent(), + this.rowid = const Value.absent(), + }); + RemindersCompanion.insert({ + this.id = const Value.absent(), + this.userId = const Value.absent(), + this.clientId = const Value.absent(), + this.rev = const Value.absent(), + this.createdAt = const Value.absent(), + this.updatedAt = const Value.absent(), + this.deletedAt = const Value.absent(), + this.lastSyncedAt = const Value.absent(), + required String title, + this.description = const Value.absent(), + this.type = const Value.absent(), + this.triggerAt = const Value.absent(), + this.dueAt = const Value.absent(), + this.repeatRule = const Value.absent(), + this.timezone = const Value.absent(), + this.status = const Value.absent(), + this.priority = const Value.absent(), + this.snoozedUntil = const Value.absent(), + this.lastTriggeredAt = const Value.absent(), + this.nextTriggerAt = const Value.absent(), + this.rowid = const Value.absent(), + }) : title = Value(title); + static Insertable custom({ + Expression? id, + Expression? userId, + Expression? clientId, + Expression? rev, + Expression? createdAt, + Expression? updatedAt, + Expression? deletedAt, + Expression? lastSyncedAt, + Expression? title, + Expression? description, + Expression? type, + Expression? triggerAt, + Expression? dueAt, + Expression? repeatRule, + Expression? timezone, + Expression? status, + Expression? priority, + Expression? snoozedUntil, + Expression? lastTriggeredAt, + Expression? nextTriggerAt, + Expression? rowid, + }) { + return RawValuesInsertable({ + if (id != null) 'id': id, + if (userId != null) 'user_id': userId, + if (clientId != null) 'client_id': clientId, + if (rev != null) 'rev': rev, + if (createdAt != null) 'created_at': createdAt, + if (updatedAt != null) 'updated_at': updatedAt, + if (deletedAt != null) 'deleted_at': deletedAt, + if (lastSyncedAt != null) 'last_synced_at': lastSyncedAt, + if (title != null) 'title': title, + if (description != null) 'description': description, + if (type != null) 'type': type, + if (triggerAt != null) 'trigger_at': triggerAt, + if (dueAt != null) 'due_at': dueAt, + if (repeatRule != null) 'repeat_rule': repeatRule, + if (timezone != null) 'timezone': timezone, + if (status != null) 'status': status, + if (priority != null) 'priority': priority, + if (snoozedUntil != null) 'snoozed_until': snoozedUntil, + if (lastTriggeredAt != null) 'last_triggered_at': lastTriggeredAt, + if (nextTriggerAt != null) 'next_trigger_at': nextTriggerAt, + if (rowid != null) 'rowid': rowid, + }); + } + + RemindersCompanion copyWith( + {Value? id, + Value? userId, + Value? clientId, + Value? rev, + Value? createdAt, + Value? updatedAt, + Value? deletedAt, + Value? lastSyncedAt, + Value? title, + Value? description, + Value? type, + Value? triggerAt, + Value? dueAt, + Value? repeatRule, + Value? timezone, + Value? status, + Value? priority, + Value? snoozedUntil, + Value? lastTriggeredAt, + Value? nextTriggerAt, + Value? rowid}) { + return RemindersCompanion( + id: id ?? this.id, + userId: userId ?? this.userId, + clientId: clientId ?? this.clientId, + rev: rev ?? this.rev, + createdAt: createdAt ?? this.createdAt, + updatedAt: updatedAt ?? this.updatedAt, + deletedAt: deletedAt ?? this.deletedAt, + lastSyncedAt: lastSyncedAt ?? this.lastSyncedAt, + title: title ?? this.title, + description: description ?? this.description, + type: type ?? this.type, + triggerAt: triggerAt ?? this.triggerAt, + dueAt: dueAt ?? this.dueAt, + repeatRule: repeatRule ?? this.repeatRule, + timezone: timezone ?? this.timezone, + status: status ?? this.status, + priority: priority ?? this.priority, + snoozedUntil: snoozedUntil ?? this.snoozedUntil, + lastTriggeredAt: lastTriggeredAt ?? this.lastTriggeredAt, + nextTriggerAt: nextTriggerAt ?? this.nextTriggerAt, + rowid: rowid ?? this.rowid, + ); + } + + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + if (id.present) { + map['id'] = Variable(id.value); + } + if (userId.present) { + map['user_id'] = Variable(userId.value); + } + if (clientId.present) { + map['client_id'] = Variable(clientId.value); + } + if (rev.present) { + map['rev'] = Variable(rev.value); + } + if (createdAt.present) { + map['created_at'] = Variable(createdAt.value); + } + if (updatedAt.present) { + map['updated_at'] = Variable(updatedAt.value); + } + if (deletedAt.present) { + map['deleted_at'] = Variable(deletedAt.value); + } + if (lastSyncedAt.present) { + map['last_synced_at'] = Variable(lastSyncedAt.value); + } + if (title.present) { + map['title'] = Variable(title.value); + } + if (description.present) { + map['description'] = Variable(description.value); + } + if (type.present) { + map['type'] = Variable(type.value); + } + if (triggerAt.present) { + map['trigger_at'] = Variable(triggerAt.value); + } + if (dueAt.present) { + map['due_at'] = Variable(dueAt.value); + } + if (repeatRule.present) { + map['repeat_rule'] = Variable(repeatRule.value); + } + if (timezone.present) { + map['timezone'] = Variable(timezone.value); + } + if (status.present) { + map['status'] = Variable(status.value); + } + if (priority.present) { + map['priority'] = Variable(priority.value); + } + if (snoozedUntil.present) { + map['snoozed_until'] = Variable(snoozedUntil.value); + } + if (lastTriggeredAt.present) { + map['last_triggered_at'] = Variable(lastTriggeredAt.value); + } + if (nextTriggerAt.present) { + map['next_trigger_at'] = Variable(nextTriggerAt.value); + } + if (rowid.present) { + map['rowid'] = Variable(rowid.value); + } + return map; + } + + @override + String toString() { + return (StringBuffer('RemindersCompanion(') + ..write('id: $id, ') + ..write('userId: $userId, ') + ..write('clientId: $clientId, ') + ..write('rev: $rev, ') + ..write('createdAt: $createdAt, ') + ..write('updatedAt: $updatedAt, ') + ..write('deletedAt: $deletedAt, ') + ..write('lastSyncedAt: $lastSyncedAt, ') + ..write('title: $title, ') + ..write('description: $description, ') + ..write('type: $type, ') + ..write('triggerAt: $triggerAt, ') + ..write('dueAt: $dueAt, ') + ..write('repeatRule: $repeatRule, ') + ..write('timezone: $timezone, ') + ..write('status: $status, ') + ..write('priority: $priority, ') + ..write('snoozedUntil: $snoozedUntil, ') + ..write('lastTriggeredAt: $lastTriggeredAt, ') + ..write('nextTriggerAt: $nextTriggerAt, ') + ..write('rowid: $rowid') + ..write(')')) + .toString(); + } +} + +class DeferredRemoteItems extends Table + with TableInfo { + @override + final GeneratedDatabase attachedDatabase; + final String? _alias; + DeferredRemoteItems(this.attachedDatabase, [this._alias]); + late final GeneratedColumn entityType = GeneratedColumn( + 'entity_type', aliasedName, false, + type: DriftSqlType.string, requiredDuringInsert: true); + late final GeneratedColumn clientId = GeneratedColumn( + 'client_id', aliasedName, false, + type: DriftSqlType.string, requiredDuringInsert: true); + late final GeneratedColumn data = GeneratedColumn( + 'data', aliasedName, false, + type: DriftSqlType.string, requiredDuringInsert: true); + late final GeneratedColumn parkedAt = GeneratedColumn( + 'parked_at', aliasedName, false, + type: DriftSqlType.dateTime, + requiredDuringInsert: false, + defaultValue: const CustomExpression('CURRENT_TIMESTAMP')); + @override + List get $columns => [entityType, clientId, data, parkedAt]; + @override + String get aliasedName => _alias ?? actualTableName; + @override + String get actualTableName => $name; + static const String $name = 'deferred_remote_items'; + @override + Set get $primaryKey => {entityType, clientId}; + @override + DeferredRemoteItemsData map(Map data, + {String? tablePrefix}) { + final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; + return DeferredRemoteItemsData( + entityType: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}entity_type'])!, + clientId: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}client_id'])!, + data: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}data'])!, + parkedAt: attachedDatabase.typeMapping + .read(DriftSqlType.dateTime, data['${effectivePrefix}parked_at'])!, + ); + } + + @override + DeferredRemoteItems createAlias(String alias) { + return DeferredRemoteItems(attachedDatabase, alias); + } +} + +class DeferredRemoteItemsData extends DataClass + implements Insertable { + final String entityType; + final String clientId; + final String data; + final DateTime parkedAt; + const DeferredRemoteItemsData( + {required this.entityType, + required this.clientId, + required this.data, + required this.parkedAt}); + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + map['entity_type'] = Variable(entityType); + map['client_id'] = Variable(clientId); + map['data'] = Variable(data); + map['parked_at'] = Variable(parkedAt); + return map; + } + + DeferredRemoteItemsCompanion toCompanion(bool nullToAbsent) { + return DeferredRemoteItemsCompanion( + entityType: Value(entityType), + clientId: Value(clientId), + data: Value(data), + parkedAt: Value(parkedAt), + ); + } + + factory DeferredRemoteItemsData.fromJson(Map json, + {ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return DeferredRemoteItemsData( + entityType: serializer.fromJson(json['entityType']), + clientId: serializer.fromJson(json['clientId']), + data: serializer.fromJson(json['data']), + parkedAt: serializer.fromJson(json['parkedAt']), + ); + } + @override + Map toJson({ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return { + 'entityType': serializer.toJson(entityType), + 'clientId': serializer.toJson(clientId), + 'data': serializer.toJson(data), + 'parkedAt': serializer.toJson(parkedAt), + }; + } + + DeferredRemoteItemsData copyWith( + {String? entityType, + String? clientId, + String? data, + DateTime? parkedAt}) => + DeferredRemoteItemsData( + entityType: entityType ?? this.entityType, + clientId: clientId ?? this.clientId, + data: data ?? this.data, + parkedAt: parkedAt ?? this.parkedAt, + ); + DeferredRemoteItemsData copyWithCompanion(DeferredRemoteItemsCompanion data) { + return DeferredRemoteItemsData( + entityType: + data.entityType.present ? data.entityType.value : this.entityType, + clientId: data.clientId.present ? data.clientId.value : this.clientId, + data: data.data.present ? data.data.value : this.data, + parkedAt: data.parkedAt.present ? data.parkedAt.value : this.parkedAt, + ); + } + + @override + String toString() { + return (StringBuffer('DeferredRemoteItemsData(') + ..write('entityType: $entityType, ') + ..write('clientId: $clientId, ') + ..write('data: $data, ') + ..write('parkedAt: $parkedAt') + ..write(')')) + .toString(); + } + + @override + int get hashCode => Object.hash(entityType, clientId, data, parkedAt); + @override + bool operator ==(Object other) => + identical(this, other) || + (other is DeferredRemoteItemsData && + other.entityType == this.entityType && + other.clientId == this.clientId && + other.data == this.data && + other.parkedAt == this.parkedAt); +} + +class DeferredRemoteItemsCompanion + extends UpdateCompanion { + final Value entityType; + final Value clientId; + final Value data; + final Value parkedAt; + final Value rowid; + const DeferredRemoteItemsCompanion({ + this.entityType = const Value.absent(), + this.clientId = const Value.absent(), + this.data = const Value.absent(), + this.parkedAt = const Value.absent(), + this.rowid = const Value.absent(), + }); + DeferredRemoteItemsCompanion.insert({ + required String entityType, + required String clientId, + required String data, + this.parkedAt = const Value.absent(), + this.rowid = const Value.absent(), + }) : entityType = Value(entityType), + clientId = Value(clientId), + data = Value(data); + static Insertable custom({ + Expression? entityType, + Expression? clientId, + Expression? data, + Expression? parkedAt, + Expression? rowid, + }) { + return RawValuesInsertable({ + if (entityType != null) 'entity_type': entityType, + if (clientId != null) 'client_id': clientId, + if (data != null) 'data': data, + if (parkedAt != null) 'parked_at': parkedAt, + if (rowid != null) 'rowid': rowid, + }); + } + + DeferredRemoteItemsCompanion copyWith( + {Value? entityType, + Value? clientId, + Value? data, + Value? parkedAt, + Value? rowid}) { + return DeferredRemoteItemsCompanion( + entityType: entityType ?? this.entityType, + clientId: clientId ?? this.clientId, + data: data ?? this.data, + parkedAt: parkedAt ?? this.parkedAt, + rowid: rowid ?? this.rowid, + ); + } + + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + if (entityType.present) { + map['entity_type'] = Variable(entityType.value); + } + if (clientId.present) { + map['client_id'] = Variable(clientId.value); + } + if (data.present) { + map['data'] = Variable(data.value); + } + if (parkedAt.present) { + map['parked_at'] = Variable(parkedAt.value); + } + if (rowid.present) { + map['rowid'] = Variable(rowid.value); + } + return map; + } + + @override + String toString() { + return (StringBuffer('DeferredRemoteItemsCompanion(') + ..write('entityType: $entityType, ') + ..write('clientId: $clientId, ') + ..write('data: $data, ') + ..write('parkedAt: $parkedAt, ') + ..write('rowid: $rowid') + ..write(')')) + .toString(); + } +} + +class DatabaseAtV9 extends GeneratedDatabase { + DatabaseAtV9(QueryExecutor e) : super(e); + late final Wallets wallets = Wallets(this); + late final Parties parties = Parties(this); + late final Groups groups = Groups(this); + late final Transactions transactions = Transactions(this); + late final Categories categories = Categories(this); + late final Configs configs = Configs(this); + late final Users users = Users(this); + late final LocalChanges localChanges = LocalChanges(this); + late final SyncMetadata syncMetadata = SyncMetadata(this); + late final Categorizables categorizables = Categorizables(this); + late final Notifications notifications = Notifications(this); + late final MediaFiles mediaFiles = MediaFiles(this); + late final Transfers transfers = Transfers(this); + late final Budgets budgets = Budgets(this); + late final BudgetTargets budgetTargets = BudgetTargets(this); + late final BudgetPeriodStates budgetPeriodStates = BudgetPeriodStates(this); + late final Holdings holdings = Holdings(this); + late final FinancialPositionCache financialPositionCache = + FinancialPositionCache(this); + late final Reminders reminders = Reminders(this); + late final DeferredRemoteItems deferredRemoteItems = + DeferredRemoteItems(this); + @override + Iterable> get allTables => + allSchemaEntities.whereType>(); + @override + List get allSchemaEntities => [ + wallets, + parties, + groups, + transactions, + categories, + configs, + users, + localChanges, + syncMetadata, + categorizables, + notifications, + mediaFiles, + transfers, + budgets, + budgetTargets, + budgetPeriodStates, + holdings, + financialPositionCache, + reminders, + deferredRemoteItems + ]; + @override + int get schemaVersion => 9; + @override + DriftDatabaseOptions get options => + const DriftDatabaseOptions(storeDateTimeAsText: true); +} diff --git a/test/unit/orphaned_change_reconciliation_test.dart b/test/unit/orphaned_change_reconciliation_test.dart index 93e66177..5fab403a 100644 --- a/test/unit/orphaned_change_reconciliation_test.dart +++ b/test/unit/orphaned_change_reconciliation_test.dart @@ -75,6 +75,14 @@ void main() { )); } + Future insertParty(String clientId, {int? serverId}) { + return db.into(db.parties).insert(PartiesCompanion.insert( + clientId: Value(clientId), + id: Value(serverId), + name: 'Party', + )); + } + Future insertChange( String entityType, String entityId, { @@ -147,6 +155,7 @@ void main() { typeHandlers: { _StubHandler('transaction', failFor: failFor), _StubHandler('transfer'), + _StubHandler('party'), }, dependencyManager: DefaultSyncDependencyManager(), requestAuthorizationService: _FakeAuth(), @@ -154,17 +163,18 @@ void main() { ); } - test('enqueues orphaned transactions and transfers', () async { + test('enqueues orphaned dependency models and dependents', () async { await insertTransaction('t1'); await insertTransfer('tr1'); + await insertParty('p1'); final enqueued = await buildSync().reconcileOrphanedLocalChanges(); - expect(enqueued, 2); + expect(enqueued, 3); final pending = await db.select(db.localChanges).get(); expect( {for (final c in pending) c.entityId: c.entityType}, - {'t1': 'transaction', 'tr1': 'transfer'}, + {'t1': 'transaction', 'tr1': 'transfer', 'p1': 'party'}, ); final data = pending.firstWhere((c) => c.entityId == 't1').data; expect(data, {'entity_type': 'transaction', 'client_id': 't1'});