mirror of
				https://github.com/immich-app/immich.git
				synced 2025-11-03 19:17:11 -05:00 
			
		
		
		
	feat: sync AuthUserV1 (#21565)
* feat: sync AuthUserV1 * migration * chore: fix analyze * fix user updatedAt check * fix: auth user sync query * generate sql * bump schema version and update migration --------- Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com> Co-authored-by: Jason Rasmussen <jason@rasm.me> Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
This commit is contained in:
		
							parent
							
								
									6a55c36762
								
							
						
					
					
						commit
						059a0e8aa8
					
				
							
								
								
									
										1
									
								
								mobile/drift_schemas/main/drift_schema_v10.json
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								mobile/drift_schemas/main/drift_schema_v10.json
									
									
									
										generated
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							@ -1,7 +1,36 @@
 | 
			
		||||
// ignore_for_file: public_member_api_docs, sort_constructors_first
 | 
			
		||||
import 'dart:convert';
 | 
			
		||||
import 'dart:ui';
 | 
			
		||||
 | 
			
		||||
import 'package:immich_mobile/domain/models/user_metadata.model.dart';
 | 
			
		||||
enum AvatarColor {
 | 
			
		||||
  // do not change this order or reuse indices for other purposes, adding is OK
 | 
			
		||||
  primary("primary"),
 | 
			
		||||
  pink("pink"),
 | 
			
		||||
  red("red"),
 | 
			
		||||
  yellow("yellow"),
 | 
			
		||||
  blue("blue"),
 | 
			
		||||
  green("green"),
 | 
			
		||||
  purple("purple"),
 | 
			
		||||
  orange("orange"),
 | 
			
		||||
  gray("gray"),
 | 
			
		||||
  amber("amber");
 | 
			
		||||
 | 
			
		||||
  final String value;
 | 
			
		||||
  const AvatarColor(this.value);
 | 
			
		||||
 | 
			
		||||
  Color toColor({bool isDarkTheme = false}) => switch (this) {
 | 
			
		||||
    AvatarColor.primary => isDarkTheme ? const Color(0xFFABCBFA) : const Color(0xFF4250AF),
 | 
			
		||||
    AvatarColor.pink => const Color.fromARGB(255, 244, 114, 182),
 | 
			
		||||
    AvatarColor.red => const Color.fromARGB(255, 239, 68, 68),
 | 
			
		||||
    AvatarColor.yellow => const Color.fromARGB(255, 234, 179, 8),
 | 
			
		||||
    AvatarColor.blue => const Color.fromARGB(255, 59, 130, 246),
 | 
			
		||||
    AvatarColor.green => const Color.fromARGB(255, 22, 163, 74),
 | 
			
		||||
    AvatarColor.purple => const Color.fromARGB(255, 147, 51, 234),
 | 
			
		||||
    AvatarColor.orange => const Color.fromARGB(255, 234, 88, 12),
 | 
			
		||||
    AvatarColor.gray => const Color.fromARGB(255, 75, 85, 99),
 | 
			
		||||
    AvatarColor.amber => const Color.fromARGB(255, 217, 119, 6),
 | 
			
		||||
  };
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// TODO: Rename to User once Isar is removed
 | 
			
		||||
class UserDto {
 | 
			
		||||
@ -9,7 +38,7 @@ class UserDto {
 | 
			
		||||
  final String email;
 | 
			
		||||
  final String name;
 | 
			
		||||
  final bool isAdmin;
 | 
			
		||||
  final DateTime updatedAt;
 | 
			
		||||
  final DateTime? updatedAt;
 | 
			
		||||
 | 
			
		||||
  final AvatarColor avatarColor;
 | 
			
		||||
 | 
			
		||||
@ -31,8 +60,8 @@ class UserDto {
 | 
			
		||||
    required this.id,
 | 
			
		||||
    required this.email,
 | 
			
		||||
    required this.name,
 | 
			
		||||
    required this.isAdmin,
 | 
			
		||||
    required this.updatedAt,
 | 
			
		||||
    this.isAdmin = false,
 | 
			
		||||
    this.updatedAt,
 | 
			
		||||
    required this.profileChangedAt,
 | 
			
		||||
    this.avatarColor = AvatarColor.primary,
 | 
			
		||||
    this.memoryEnabled = true,
 | 
			
		||||
@ -99,7 +128,8 @@ profileChangedAt: $profileChangedAt
 | 
			
		||||
    if (identical(this, other)) return true;
 | 
			
		||||
 | 
			
		||||
    return other.id == id &&
 | 
			
		||||
        other.updatedAt.isAtSameMomentAs(updatedAt) &&
 | 
			
		||||
        ((updatedAt == null && other.updatedAt == null) ||
 | 
			
		||||
            (updatedAt != null && other.updatedAt != null && other.updatedAt!.isAtSameMomentAs(updatedAt!))) &&
 | 
			
		||||
        other.avatarColor == avatarColor &&
 | 
			
		||||
        other.email == email &&
 | 
			
		||||
        other.name == name &&
 | 
			
		||||
 | 
			
		||||
@ -1,4 +1,4 @@
 | 
			
		||||
import 'dart:ui';
 | 
			
		||||
import 'package:immich_mobile/domain/models/user.model.dart';
 | 
			
		||||
 | 
			
		||||
enum UserMetadataKey {
 | 
			
		||||
  // do not change this order!
 | 
			
		||||
@ -7,36 +7,6 @@ enum UserMetadataKey {
 | 
			
		||||
  license,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
enum AvatarColor {
 | 
			
		||||
  // do not change this order or reuse indices for other purposes, adding is OK
 | 
			
		||||
  primary("primary"),
 | 
			
		||||
  pink("pink"),
 | 
			
		||||
  red("red"),
 | 
			
		||||
  yellow("yellow"),
 | 
			
		||||
  blue("blue"),
 | 
			
		||||
  green("green"),
 | 
			
		||||
  purple("purple"),
 | 
			
		||||
  orange("orange"),
 | 
			
		||||
  gray("gray"),
 | 
			
		||||
  amber("amber");
 | 
			
		||||
 | 
			
		||||
  final String value;
 | 
			
		||||
  const AvatarColor(this.value);
 | 
			
		||||
 | 
			
		||||
  Color toColor({bool isDarkTheme = false}) => switch (this) {
 | 
			
		||||
    AvatarColor.primary => isDarkTheme ? const Color(0xFFABCBFA) : const Color(0xFF4250AF),
 | 
			
		||||
    AvatarColor.pink => const Color.fromARGB(255, 244, 114, 182),
 | 
			
		||||
    AvatarColor.red => const Color.fromARGB(255, 239, 68, 68),
 | 
			
		||||
    AvatarColor.yellow => const Color.fromARGB(255, 234, 179, 8),
 | 
			
		||||
    AvatarColor.blue => const Color.fromARGB(255, 59, 130, 246),
 | 
			
		||||
    AvatarColor.green => const Color.fromARGB(255, 22, 163, 74),
 | 
			
		||||
    AvatarColor.purple => const Color.fromARGB(255, 147, 51, 234),
 | 
			
		||||
    AvatarColor.orange => const Color.fromARGB(255, 234, 88, 12),
 | 
			
		||||
    AvatarColor.gray => const Color.fromARGB(255, 75, 85, 99),
 | 
			
		||||
    AvatarColor.amber => const Color.fromARGB(255, 217, 119, 6),
 | 
			
		||||
  };
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
class Onboarding {
 | 
			
		||||
  final bool isOnboarded;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -70,6 +70,8 @@ class SyncStreamService {
 | 
			
		||||
  Future<void> _handleSyncData(SyncEntityType type, Iterable<Object> data) async {
 | 
			
		||||
    _logger.fine("Processing sync data for $type of length ${data.length}");
 | 
			
		||||
    switch (type) {
 | 
			
		||||
      case SyncEntityType.authUserV1:
 | 
			
		||||
        return _syncStreamRepository.updateAuthUsersV1(data.cast());
 | 
			
		||||
      case SyncEntityType.userV1:
 | 
			
		||||
        return _syncStreamRepository.updateUsersV1(data.cast());
 | 
			
		||||
      case SyncEntityType.userDeleteV1:
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										27
									
								
								mobile/lib/infrastructure/entities/auth_user.entity.dart
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								mobile/lib/infrastructure/entities/auth_user.entity.dart
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,27 @@
 | 
			
		||||
import 'package:drift/drift.dart';
 | 
			
		||||
import 'package:immich_mobile/domain/models/user.model.dart';
 | 
			
		||||
import 'package:immich_mobile/infrastructure/utils/drift_default.mixin.dart';
 | 
			
		||||
 | 
			
		||||
class AuthUserEntity extends Table with DriftDefaultsMixin {
 | 
			
		||||
  const AuthUserEntity();
 | 
			
		||||
 | 
			
		||||
  TextColumn get id => text()();
 | 
			
		||||
  TextColumn get name => text()();
 | 
			
		||||
  TextColumn get email => text()();
 | 
			
		||||
  BoolColumn get isAdmin => boolean().withDefault(const Constant(false))();
 | 
			
		||||
 | 
			
		||||
  // Profile image
 | 
			
		||||
  BoolColumn get hasProfileImage => boolean().withDefault(const Constant(false))();
 | 
			
		||||
  DateTimeColumn get profileChangedAt => dateTime().withDefault(currentDateAndTime)();
 | 
			
		||||
  IntColumn get avatarColor => intEnum<AvatarColor>()();
 | 
			
		||||
 | 
			
		||||
  // Quota
 | 
			
		||||
  IntColumn get quotaSizeInBytes => integer().withDefault(const Constant(0))();
 | 
			
		||||
  IntColumn get quotaUsageInBytes => integer().withDefault(const Constant(0))();
 | 
			
		||||
 | 
			
		||||
  // Locked Folder
 | 
			
		||||
  TextColumn get pinCode => text().nullable()();
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
  Set<Column> get primaryKey => {id};
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										933
									
								
								mobile/lib/infrastructure/entities/auth_user.entity.drift.dart
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										933
									
								
								mobile/lib/infrastructure/entities/auth_user.entity.drift.dart
									
									
									
										generated
									
									
									
										Normal file
									
								
							@ -0,0 +1,933 @@
 | 
			
		||||
// dart format width=80
 | 
			
		||||
// ignore_for_file: type=lint
 | 
			
		||||
import 'package:drift/drift.dart' as i0;
 | 
			
		||||
import 'package:immich_mobile/infrastructure/entities/auth_user.entity.drift.dart'
 | 
			
		||||
    as i1;
 | 
			
		||||
import 'package:immich_mobile/domain/models/user.model.dart' as i2;
 | 
			
		||||
import 'package:immich_mobile/infrastructure/entities/auth_user.entity.dart'
 | 
			
		||||
    as i3;
 | 
			
		||||
import 'package:drift/src/runtime/query_builder/query_builder.dart' as i4;
 | 
			
		||||
 | 
			
		||||
typedef $$AuthUserEntityTableCreateCompanionBuilder =
 | 
			
		||||
    i1.AuthUserEntityCompanion Function({
 | 
			
		||||
      required String id,
 | 
			
		||||
      required String name,
 | 
			
		||||
      required String email,
 | 
			
		||||
      i0.Value<bool> isAdmin,
 | 
			
		||||
      i0.Value<bool> hasProfileImage,
 | 
			
		||||
      i0.Value<DateTime> profileChangedAt,
 | 
			
		||||
      required i2.AvatarColor avatarColor,
 | 
			
		||||
      i0.Value<int> quotaSizeInBytes,
 | 
			
		||||
      i0.Value<int> quotaUsageInBytes,
 | 
			
		||||
      i0.Value<String?> pinCode,
 | 
			
		||||
    });
 | 
			
		||||
typedef $$AuthUserEntityTableUpdateCompanionBuilder =
 | 
			
		||||
    i1.AuthUserEntityCompanion Function({
 | 
			
		||||
      i0.Value<String> id,
 | 
			
		||||
      i0.Value<String> name,
 | 
			
		||||
      i0.Value<String> email,
 | 
			
		||||
      i0.Value<bool> isAdmin,
 | 
			
		||||
      i0.Value<bool> hasProfileImage,
 | 
			
		||||
      i0.Value<DateTime> profileChangedAt,
 | 
			
		||||
      i0.Value<i2.AvatarColor> avatarColor,
 | 
			
		||||
      i0.Value<int> quotaSizeInBytes,
 | 
			
		||||
      i0.Value<int> quotaUsageInBytes,
 | 
			
		||||
      i0.Value<String?> pinCode,
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
class $$AuthUserEntityTableFilterComposer
 | 
			
		||||
    extends i0.Composer<i0.GeneratedDatabase, i1.$AuthUserEntityTable> {
 | 
			
		||||
  $$AuthUserEntityTableFilterComposer({
 | 
			
		||||
    required super.$db,
 | 
			
		||||
    required super.$table,
 | 
			
		||||
    super.joinBuilder,
 | 
			
		||||
    super.$addJoinBuilderToRootComposer,
 | 
			
		||||
    super.$removeJoinBuilderFromRootComposer,
 | 
			
		||||
  });
 | 
			
		||||
  i0.ColumnFilters<String> get id => $composableBuilder(
 | 
			
		||||
    column: $table.id,
 | 
			
		||||
    builder: (column) => i0.ColumnFilters(column),
 | 
			
		||||
  );
 | 
			
		||||
 | 
			
		||||
  i0.ColumnFilters<String> get name => $composableBuilder(
 | 
			
		||||
    column: $table.name,
 | 
			
		||||
    builder: (column) => i0.ColumnFilters(column),
 | 
			
		||||
  );
 | 
			
		||||
 | 
			
		||||
  i0.ColumnFilters<String> get email => $composableBuilder(
 | 
			
		||||
    column: $table.email,
 | 
			
		||||
    builder: (column) => i0.ColumnFilters(column),
 | 
			
		||||
  );
 | 
			
		||||
 | 
			
		||||
  i0.ColumnFilters<bool> get isAdmin => $composableBuilder(
 | 
			
		||||
    column: $table.isAdmin,
 | 
			
		||||
    builder: (column) => i0.ColumnFilters(column),
 | 
			
		||||
  );
 | 
			
		||||
 | 
			
		||||
  i0.ColumnFilters<bool> get hasProfileImage => $composableBuilder(
 | 
			
		||||
    column: $table.hasProfileImage,
 | 
			
		||||
    builder: (column) => i0.ColumnFilters(column),
 | 
			
		||||
  );
 | 
			
		||||
 | 
			
		||||
  i0.ColumnFilters<DateTime> get profileChangedAt => $composableBuilder(
 | 
			
		||||
    column: $table.profileChangedAt,
 | 
			
		||||
    builder: (column) => i0.ColumnFilters(column),
 | 
			
		||||
  );
 | 
			
		||||
 | 
			
		||||
  i0.ColumnWithTypeConverterFilters<i2.AvatarColor, i2.AvatarColor, int>
 | 
			
		||||
  get avatarColor => $composableBuilder(
 | 
			
		||||
    column: $table.avatarColor,
 | 
			
		||||
    builder: (column) => i0.ColumnWithTypeConverterFilters(column),
 | 
			
		||||
  );
 | 
			
		||||
 | 
			
		||||
  i0.ColumnFilters<int> get quotaSizeInBytes => $composableBuilder(
 | 
			
		||||
    column: $table.quotaSizeInBytes,
 | 
			
		||||
    builder: (column) => i0.ColumnFilters(column),
 | 
			
		||||
  );
 | 
			
		||||
 | 
			
		||||
  i0.ColumnFilters<int> get quotaUsageInBytes => $composableBuilder(
 | 
			
		||||
    column: $table.quotaUsageInBytes,
 | 
			
		||||
    builder: (column) => i0.ColumnFilters(column),
 | 
			
		||||
  );
 | 
			
		||||
 | 
			
		||||
  i0.ColumnFilters<String> get pinCode => $composableBuilder(
 | 
			
		||||
    column: $table.pinCode,
 | 
			
		||||
    builder: (column) => i0.ColumnFilters(column),
 | 
			
		||||
  );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
class $$AuthUserEntityTableOrderingComposer
 | 
			
		||||
    extends i0.Composer<i0.GeneratedDatabase, i1.$AuthUserEntityTable> {
 | 
			
		||||
  $$AuthUserEntityTableOrderingComposer({
 | 
			
		||||
    required super.$db,
 | 
			
		||||
    required super.$table,
 | 
			
		||||
    super.joinBuilder,
 | 
			
		||||
    super.$addJoinBuilderToRootComposer,
 | 
			
		||||
    super.$removeJoinBuilderFromRootComposer,
 | 
			
		||||
  });
 | 
			
		||||
  i0.ColumnOrderings<String> get id => $composableBuilder(
 | 
			
		||||
    column: $table.id,
 | 
			
		||||
    builder: (column) => i0.ColumnOrderings(column),
 | 
			
		||||
  );
 | 
			
		||||
 | 
			
		||||
  i0.ColumnOrderings<String> get name => $composableBuilder(
 | 
			
		||||
    column: $table.name,
 | 
			
		||||
    builder: (column) => i0.ColumnOrderings(column),
 | 
			
		||||
  );
 | 
			
		||||
 | 
			
		||||
  i0.ColumnOrderings<String> get email => $composableBuilder(
 | 
			
		||||
    column: $table.email,
 | 
			
		||||
    builder: (column) => i0.ColumnOrderings(column),
 | 
			
		||||
  );
 | 
			
		||||
 | 
			
		||||
  i0.ColumnOrderings<bool> get isAdmin => $composableBuilder(
 | 
			
		||||
    column: $table.isAdmin,
 | 
			
		||||
    builder: (column) => i0.ColumnOrderings(column),
 | 
			
		||||
  );
 | 
			
		||||
 | 
			
		||||
  i0.ColumnOrderings<bool> get hasProfileImage => $composableBuilder(
 | 
			
		||||
    column: $table.hasProfileImage,
 | 
			
		||||
    builder: (column) => i0.ColumnOrderings(column),
 | 
			
		||||
  );
 | 
			
		||||
 | 
			
		||||
  i0.ColumnOrderings<DateTime> get profileChangedAt => $composableBuilder(
 | 
			
		||||
    column: $table.profileChangedAt,
 | 
			
		||||
    builder: (column) => i0.ColumnOrderings(column),
 | 
			
		||||
  );
 | 
			
		||||
 | 
			
		||||
  i0.ColumnOrderings<int> get avatarColor => $composableBuilder(
 | 
			
		||||
    column: $table.avatarColor,
 | 
			
		||||
    builder: (column) => i0.ColumnOrderings(column),
 | 
			
		||||
  );
 | 
			
		||||
 | 
			
		||||
  i0.ColumnOrderings<int> get quotaSizeInBytes => $composableBuilder(
 | 
			
		||||
    column: $table.quotaSizeInBytes,
 | 
			
		||||
    builder: (column) => i0.ColumnOrderings(column),
 | 
			
		||||
  );
 | 
			
		||||
 | 
			
		||||
  i0.ColumnOrderings<int> get quotaUsageInBytes => $composableBuilder(
 | 
			
		||||
    column: $table.quotaUsageInBytes,
 | 
			
		||||
    builder: (column) => i0.ColumnOrderings(column),
 | 
			
		||||
  );
 | 
			
		||||
 | 
			
		||||
  i0.ColumnOrderings<String> get pinCode => $composableBuilder(
 | 
			
		||||
    column: $table.pinCode,
 | 
			
		||||
    builder: (column) => i0.ColumnOrderings(column),
 | 
			
		||||
  );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
class $$AuthUserEntityTableAnnotationComposer
 | 
			
		||||
    extends i0.Composer<i0.GeneratedDatabase, i1.$AuthUserEntityTable> {
 | 
			
		||||
  $$AuthUserEntityTableAnnotationComposer({
 | 
			
		||||
    required super.$db,
 | 
			
		||||
    required super.$table,
 | 
			
		||||
    super.joinBuilder,
 | 
			
		||||
    super.$addJoinBuilderToRootComposer,
 | 
			
		||||
    super.$removeJoinBuilderFromRootComposer,
 | 
			
		||||
  });
 | 
			
		||||
  i0.GeneratedColumn<String> get id =>
 | 
			
		||||
      $composableBuilder(column: $table.id, builder: (column) => column);
 | 
			
		||||
 | 
			
		||||
  i0.GeneratedColumn<String> get name =>
 | 
			
		||||
      $composableBuilder(column: $table.name, builder: (column) => column);
 | 
			
		||||
 | 
			
		||||
  i0.GeneratedColumn<String> get email =>
 | 
			
		||||
      $composableBuilder(column: $table.email, builder: (column) => column);
 | 
			
		||||
 | 
			
		||||
  i0.GeneratedColumn<bool> get isAdmin =>
 | 
			
		||||
      $composableBuilder(column: $table.isAdmin, builder: (column) => column);
 | 
			
		||||
 | 
			
		||||
  i0.GeneratedColumn<bool> get hasProfileImage => $composableBuilder(
 | 
			
		||||
    column: $table.hasProfileImage,
 | 
			
		||||
    builder: (column) => column,
 | 
			
		||||
  );
 | 
			
		||||
 | 
			
		||||
  i0.GeneratedColumn<DateTime> get profileChangedAt => $composableBuilder(
 | 
			
		||||
    column: $table.profileChangedAt,
 | 
			
		||||
    builder: (column) => column,
 | 
			
		||||
  );
 | 
			
		||||
 | 
			
		||||
  i0.GeneratedColumnWithTypeConverter<i2.AvatarColor, int> get avatarColor =>
 | 
			
		||||
      $composableBuilder(
 | 
			
		||||
        column: $table.avatarColor,
 | 
			
		||||
        builder: (column) => column,
 | 
			
		||||
      );
 | 
			
		||||
 | 
			
		||||
  i0.GeneratedColumn<int> get quotaSizeInBytes => $composableBuilder(
 | 
			
		||||
    column: $table.quotaSizeInBytes,
 | 
			
		||||
    builder: (column) => column,
 | 
			
		||||
  );
 | 
			
		||||
 | 
			
		||||
  i0.GeneratedColumn<int> get quotaUsageInBytes => $composableBuilder(
 | 
			
		||||
    column: $table.quotaUsageInBytes,
 | 
			
		||||
    builder: (column) => column,
 | 
			
		||||
  );
 | 
			
		||||
 | 
			
		||||
  i0.GeneratedColumn<String> get pinCode =>
 | 
			
		||||
      $composableBuilder(column: $table.pinCode, builder: (column) => column);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
class $$AuthUserEntityTableTableManager
 | 
			
		||||
    extends
 | 
			
		||||
        i0.RootTableManager<
 | 
			
		||||
          i0.GeneratedDatabase,
 | 
			
		||||
          i1.$AuthUserEntityTable,
 | 
			
		||||
          i1.AuthUserEntityData,
 | 
			
		||||
          i1.$$AuthUserEntityTableFilterComposer,
 | 
			
		||||
          i1.$$AuthUserEntityTableOrderingComposer,
 | 
			
		||||
          i1.$$AuthUserEntityTableAnnotationComposer,
 | 
			
		||||
          $$AuthUserEntityTableCreateCompanionBuilder,
 | 
			
		||||
          $$AuthUserEntityTableUpdateCompanionBuilder,
 | 
			
		||||
          (
 | 
			
		||||
            i1.AuthUserEntityData,
 | 
			
		||||
            i0.BaseReferences<
 | 
			
		||||
              i0.GeneratedDatabase,
 | 
			
		||||
              i1.$AuthUserEntityTable,
 | 
			
		||||
              i1.AuthUserEntityData
 | 
			
		||||
            >,
 | 
			
		||||
          ),
 | 
			
		||||
          i1.AuthUserEntityData,
 | 
			
		||||
          i0.PrefetchHooks Function()
 | 
			
		||||
        > {
 | 
			
		||||
  $$AuthUserEntityTableTableManager(
 | 
			
		||||
    i0.GeneratedDatabase db,
 | 
			
		||||
    i1.$AuthUserEntityTable table,
 | 
			
		||||
  ) : super(
 | 
			
		||||
        i0.TableManagerState(
 | 
			
		||||
          db: db,
 | 
			
		||||
          table: table,
 | 
			
		||||
          createFilteringComposer: () =>
 | 
			
		||||
              i1.$$AuthUserEntityTableFilterComposer($db: db, $table: table),
 | 
			
		||||
          createOrderingComposer: () =>
 | 
			
		||||
              i1.$$AuthUserEntityTableOrderingComposer($db: db, $table: table),
 | 
			
		||||
          createComputedFieldComposer: () => i1
 | 
			
		||||
              .$$AuthUserEntityTableAnnotationComposer($db: db, $table: table),
 | 
			
		||||
          updateCompanionCallback:
 | 
			
		||||
              ({
 | 
			
		||||
                i0.Value<String> id = const i0.Value.absent(),
 | 
			
		||||
                i0.Value<String> name = const i0.Value.absent(),
 | 
			
		||||
                i0.Value<String> email = const i0.Value.absent(),
 | 
			
		||||
                i0.Value<bool> isAdmin = const i0.Value.absent(),
 | 
			
		||||
                i0.Value<bool> hasProfileImage = const i0.Value.absent(),
 | 
			
		||||
                i0.Value<DateTime> profileChangedAt = const i0.Value.absent(),
 | 
			
		||||
                i0.Value<i2.AvatarColor> avatarColor = const i0.Value.absent(),
 | 
			
		||||
                i0.Value<int> quotaSizeInBytes = const i0.Value.absent(),
 | 
			
		||||
                i0.Value<int> quotaUsageInBytes = const i0.Value.absent(),
 | 
			
		||||
                i0.Value<String?> pinCode = const i0.Value.absent(),
 | 
			
		||||
              }) => i1.AuthUserEntityCompanion(
 | 
			
		||||
                id: id,
 | 
			
		||||
                name: name,
 | 
			
		||||
                email: email,
 | 
			
		||||
                isAdmin: isAdmin,
 | 
			
		||||
                hasProfileImage: hasProfileImage,
 | 
			
		||||
                profileChangedAt: profileChangedAt,
 | 
			
		||||
                avatarColor: avatarColor,
 | 
			
		||||
                quotaSizeInBytes: quotaSizeInBytes,
 | 
			
		||||
                quotaUsageInBytes: quotaUsageInBytes,
 | 
			
		||||
                pinCode: pinCode,
 | 
			
		||||
              ),
 | 
			
		||||
          createCompanionCallback:
 | 
			
		||||
              ({
 | 
			
		||||
                required String id,
 | 
			
		||||
                required String name,
 | 
			
		||||
                required String email,
 | 
			
		||||
                i0.Value<bool> isAdmin = const i0.Value.absent(),
 | 
			
		||||
                i0.Value<bool> hasProfileImage = const i0.Value.absent(),
 | 
			
		||||
                i0.Value<DateTime> profileChangedAt = const i0.Value.absent(),
 | 
			
		||||
                required i2.AvatarColor avatarColor,
 | 
			
		||||
                i0.Value<int> quotaSizeInBytes = const i0.Value.absent(),
 | 
			
		||||
                i0.Value<int> quotaUsageInBytes = const i0.Value.absent(),
 | 
			
		||||
                i0.Value<String?> pinCode = const i0.Value.absent(),
 | 
			
		||||
              }) => i1.AuthUserEntityCompanion.insert(
 | 
			
		||||
                id: id,
 | 
			
		||||
                name: name,
 | 
			
		||||
                email: email,
 | 
			
		||||
                isAdmin: isAdmin,
 | 
			
		||||
                hasProfileImage: hasProfileImage,
 | 
			
		||||
                profileChangedAt: profileChangedAt,
 | 
			
		||||
                avatarColor: avatarColor,
 | 
			
		||||
                quotaSizeInBytes: quotaSizeInBytes,
 | 
			
		||||
                quotaUsageInBytes: quotaUsageInBytes,
 | 
			
		||||
                pinCode: pinCode,
 | 
			
		||||
              ),
 | 
			
		||||
          withReferenceMapper: (p0) => p0
 | 
			
		||||
              .map((e) => (e.readTable(table), i0.BaseReferences(db, table, e)))
 | 
			
		||||
              .toList(),
 | 
			
		||||
          prefetchHooksCallback: null,
 | 
			
		||||
        ),
 | 
			
		||||
      );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
typedef $$AuthUserEntityTableProcessedTableManager =
 | 
			
		||||
    i0.ProcessedTableManager<
 | 
			
		||||
      i0.GeneratedDatabase,
 | 
			
		||||
      i1.$AuthUserEntityTable,
 | 
			
		||||
      i1.AuthUserEntityData,
 | 
			
		||||
      i1.$$AuthUserEntityTableFilterComposer,
 | 
			
		||||
      i1.$$AuthUserEntityTableOrderingComposer,
 | 
			
		||||
      i1.$$AuthUserEntityTableAnnotationComposer,
 | 
			
		||||
      $$AuthUserEntityTableCreateCompanionBuilder,
 | 
			
		||||
      $$AuthUserEntityTableUpdateCompanionBuilder,
 | 
			
		||||
      (
 | 
			
		||||
        i1.AuthUserEntityData,
 | 
			
		||||
        i0.BaseReferences<
 | 
			
		||||
          i0.GeneratedDatabase,
 | 
			
		||||
          i1.$AuthUserEntityTable,
 | 
			
		||||
          i1.AuthUserEntityData
 | 
			
		||||
        >,
 | 
			
		||||
      ),
 | 
			
		||||
      i1.AuthUserEntityData,
 | 
			
		||||
      i0.PrefetchHooks Function()
 | 
			
		||||
    >;
 | 
			
		||||
 | 
			
		||||
class $AuthUserEntityTable extends i3.AuthUserEntity
 | 
			
		||||
    with i0.TableInfo<$AuthUserEntityTable, i1.AuthUserEntityData> {
 | 
			
		||||
  @override
 | 
			
		||||
  final i0.GeneratedDatabase attachedDatabase;
 | 
			
		||||
  final String? _alias;
 | 
			
		||||
  $AuthUserEntityTable(this.attachedDatabase, [this._alias]);
 | 
			
		||||
  static const i0.VerificationMeta _idMeta = const i0.VerificationMeta('id');
 | 
			
		||||
  @override
 | 
			
		||||
  late final i0.GeneratedColumn<String> id = i0.GeneratedColumn<String>(
 | 
			
		||||
    'id',
 | 
			
		||||
    aliasedName,
 | 
			
		||||
    false,
 | 
			
		||||
    type: i0.DriftSqlType.string,
 | 
			
		||||
    requiredDuringInsert: true,
 | 
			
		||||
  );
 | 
			
		||||
  static const i0.VerificationMeta _nameMeta = const i0.VerificationMeta(
 | 
			
		||||
    'name',
 | 
			
		||||
  );
 | 
			
		||||
  @override
 | 
			
		||||
  late final i0.GeneratedColumn<String> name = i0.GeneratedColumn<String>(
 | 
			
		||||
    'name',
 | 
			
		||||
    aliasedName,
 | 
			
		||||
    false,
 | 
			
		||||
    type: i0.DriftSqlType.string,
 | 
			
		||||
    requiredDuringInsert: true,
 | 
			
		||||
  );
 | 
			
		||||
  static const i0.VerificationMeta _emailMeta = const i0.VerificationMeta(
 | 
			
		||||
    'email',
 | 
			
		||||
  );
 | 
			
		||||
  @override
 | 
			
		||||
  late final i0.GeneratedColumn<String> email = i0.GeneratedColumn<String>(
 | 
			
		||||
    'email',
 | 
			
		||||
    aliasedName,
 | 
			
		||||
    false,
 | 
			
		||||
    type: i0.DriftSqlType.string,
 | 
			
		||||
    requiredDuringInsert: true,
 | 
			
		||||
  );
 | 
			
		||||
  static const i0.VerificationMeta _isAdminMeta = const i0.VerificationMeta(
 | 
			
		||||
    'isAdmin',
 | 
			
		||||
  );
 | 
			
		||||
  @override
 | 
			
		||||
  late final i0.GeneratedColumn<bool> isAdmin = i0.GeneratedColumn<bool>(
 | 
			
		||||
    'is_admin',
 | 
			
		||||
    aliasedName,
 | 
			
		||||
    false,
 | 
			
		||||
    type: i0.DriftSqlType.bool,
 | 
			
		||||
    requiredDuringInsert: false,
 | 
			
		||||
    defaultConstraints: i0.GeneratedColumn.constraintIsAlways(
 | 
			
		||||
      'CHECK ("is_admin" IN (0, 1))',
 | 
			
		||||
    ),
 | 
			
		||||
    defaultValue: const i4.Constant(false),
 | 
			
		||||
  );
 | 
			
		||||
  static const i0.VerificationMeta _hasProfileImageMeta =
 | 
			
		||||
      const i0.VerificationMeta('hasProfileImage');
 | 
			
		||||
  @override
 | 
			
		||||
  late final i0.GeneratedColumn<bool> hasProfileImage =
 | 
			
		||||
      i0.GeneratedColumn<bool>(
 | 
			
		||||
        'has_profile_image',
 | 
			
		||||
        aliasedName,
 | 
			
		||||
        false,
 | 
			
		||||
        type: i0.DriftSqlType.bool,
 | 
			
		||||
        requiredDuringInsert: false,
 | 
			
		||||
        defaultConstraints: i0.GeneratedColumn.constraintIsAlways(
 | 
			
		||||
          'CHECK ("has_profile_image" IN (0, 1))',
 | 
			
		||||
        ),
 | 
			
		||||
        defaultValue: const i4.Constant(false),
 | 
			
		||||
      );
 | 
			
		||||
  static const i0.VerificationMeta _profileChangedAtMeta =
 | 
			
		||||
      const i0.VerificationMeta('profileChangedAt');
 | 
			
		||||
  @override
 | 
			
		||||
  late final i0.GeneratedColumn<DateTime> profileChangedAt =
 | 
			
		||||
      i0.GeneratedColumn<DateTime>(
 | 
			
		||||
        'profile_changed_at',
 | 
			
		||||
        aliasedName,
 | 
			
		||||
        false,
 | 
			
		||||
        type: i0.DriftSqlType.dateTime,
 | 
			
		||||
        requiredDuringInsert: false,
 | 
			
		||||
        defaultValue: i4.currentDateAndTime,
 | 
			
		||||
      );
 | 
			
		||||
  @override
 | 
			
		||||
  late final i0.GeneratedColumnWithTypeConverter<i2.AvatarColor, int>
 | 
			
		||||
  avatarColor =
 | 
			
		||||
      i0.GeneratedColumn<int>(
 | 
			
		||||
        'avatar_color',
 | 
			
		||||
        aliasedName,
 | 
			
		||||
        false,
 | 
			
		||||
        type: i0.DriftSqlType.int,
 | 
			
		||||
        requiredDuringInsert: true,
 | 
			
		||||
      ).withConverter<i2.AvatarColor>(
 | 
			
		||||
        i1.$AuthUserEntityTable.$converteravatarColor,
 | 
			
		||||
      );
 | 
			
		||||
  static const i0.VerificationMeta _quotaSizeInBytesMeta =
 | 
			
		||||
      const i0.VerificationMeta('quotaSizeInBytes');
 | 
			
		||||
  @override
 | 
			
		||||
  late final i0.GeneratedColumn<int> quotaSizeInBytes = i0.GeneratedColumn<int>(
 | 
			
		||||
    'quota_size_in_bytes',
 | 
			
		||||
    aliasedName,
 | 
			
		||||
    false,
 | 
			
		||||
    type: i0.DriftSqlType.int,
 | 
			
		||||
    requiredDuringInsert: false,
 | 
			
		||||
    defaultValue: const i4.Constant(0),
 | 
			
		||||
  );
 | 
			
		||||
  static const i0.VerificationMeta _quotaUsageInBytesMeta =
 | 
			
		||||
      const i0.VerificationMeta('quotaUsageInBytes');
 | 
			
		||||
  @override
 | 
			
		||||
  late final i0.GeneratedColumn<int> quotaUsageInBytes =
 | 
			
		||||
      i0.GeneratedColumn<int>(
 | 
			
		||||
        'quota_usage_in_bytes',
 | 
			
		||||
        aliasedName,
 | 
			
		||||
        false,
 | 
			
		||||
        type: i0.DriftSqlType.int,
 | 
			
		||||
        requiredDuringInsert: false,
 | 
			
		||||
        defaultValue: const i4.Constant(0),
 | 
			
		||||
      );
 | 
			
		||||
  static const i0.VerificationMeta _pinCodeMeta = const i0.VerificationMeta(
 | 
			
		||||
    'pinCode',
 | 
			
		||||
  );
 | 
			
		||||
  @override
 | 
			
		||||
  late final i0.GeneratedColumn<String> pinCode = i0.GeneratedColumn<String>(
 | 
			
		||||
    'pin_code',
 | 
			
		||||
    aliasedName,
 | 
			
		||||
    true,
 | 
			
		||||
    type: i0.DriftSqlType.string,
 | 
			
		||||
    requiredDuringInsert: false,
 | 
			
		||||
  );
 | 
			
		||||
  @override
 | 
			
		||||
  List<i0.GeneratedColumn> get $columns => [
 | 
			
		||||
    id,
 | 
			
		||||
    name,
 | 
			
		||||
    email,
 | 
			
		||||
    isAdmin,
 | 
			
		||||
    hasProfileImage,
 | 
			
		||||
    profileChangedAt,
 | 
			
		||||
    avatarColor,
 | 
			
		||||
    quotaSizeInBytes,
 | 
			
		||||
    quotaUsageInBytes,
 | 
			
		||||
    pinCode,
 | 
			
		||||
  ];
 | 
			
		||||
  @override
 | 
			
		||||
  String get aliasedName => _alias ?? actualTableName;
 | 
			
		||||
  @override
 | 
			
		||||
  String get actualTableName => $name;
 | 
			
		||||
  static const String $name = 'auth_user_entity';
 | 
			
		||||
  @override
 | 
			
		||||
  i0.VerificationContext validateIntegrity(
 | 
			
		||||
    i0.Insertable<i1.AuthUserEntityData> instance, {
 | 
			
		||||
    bool isInserting = false,
 | 
			
		||||
  }) {
 | 
			
		||||
    final context = i0.VerificationContext();
 | 
			
		||||
    final data = instance.toColumns(true);
 | 
			
		||||
    if (data.containsKey('id')) {
 | 
			
		||||
      context.handle(_idMeta, id.isAcceptableOrUnknown(data['id']!, _idMeta));
 | 
			
		||||
    } else if (isInserting) {
 | 
			
		||||
      context.missing(_idMeta);
 | 
			
		||||
    }
 | 
			
		||||
    if (data.containsKey('name')) {
 | 
			
		||||
      context.handle(
 | 
			
		||||
        _nameMeta,
 | 
			
		||||
        name.isAcceptableOrUnknown(data['name']!, _nameMeta),
 | 
			
		||||
      );
 | 
			
		||||
    } else if (isInserting) {
 | 
			
		||||
      context.missing(_nameMeta);
 | 
			
		||||
    }
 | 
			
		||||
    if (data.containsKey('email')) {
 | 
			
		||||
      context.handle(
 | 
			
		||||
        _emailMeta,
 | 
			
		||||
        email.isAcceptableOrUnknown(data['email']!, _emailMeta),
 | 
			
		||||
      );
 | 
			
		||||
    } else if (isInserting) {
 | 
			
		||||
      context.missing(_emailMeta);
 | 
			
		||||
    }
 | 
			
		||||
    if (data.containsKey('is_admin')) {
 | 
			
		||||
      context.handle(
 | 
			
		||||
        _isAdminMeta,
 | 
			
		||||
        isAdmin.isAcceptableOrUnknown(data['is_admin']!, _isAdminMeta),
 | 
			
		||||
      );
 | 
			
		||||
    }
 | 
			
		||||
    if (data.containsKey('has_profile_image')) {
 | 
			
		||||
      context.handle(
 | 
			
		||||
        _hasProfileImageMeta,
 | 
			
		||||
        hasProfileImage.isAcceptableOrUnknown(
 | 
			
		||||
          data['has_profile_image']!,
 | 
			
		||||
          _hasProfileImageMeta,
 | 
			
		||||
        ),
 | 
			
		||||
      );
 | 
			
		||||
    }
 | 
			
		||||
    if (data.containsKey('profile_changed_at')) {
 | 
			
		||||
      context.handle(
 | 
			
		||||
        _profileChangedAtMeta,
 | 
			
		||||
        profileChangedAt.isAcceptableOrUnknown(
 | 
			
		||||
          data['profile_changed_at']!,
 | 
			
		||||
          _profileChangedAtMeta,
 | 
			
		||||
        ),
 | 
			
		||||
      );
 | 
			
		||||
    }
 | 
			
		||||
    if (data.containsKey('quota_size_in_bytes')) {
 | 
			
		||||
      context.handle(
 | 
			
		||||
        _quotaSizeInBytesMeta,
 | 
			
		||||
        quotaSizeInBytes.isAcceptableOrUnknown(
 | 
			
		||||
          data['quota_size_in_bytes']!,
 | 
			
		||||
          _quotaSizeInBytesMeta,
 | 
			
		||||
        ),
 | 
			
		||||
      );
 | 
			
		||||
    }
 | 
			
		||||
    if (data.containsKey('quota_usage_in_bytes')) {
 | 
			
		||||
      context.handle(
 | 
			
		||||
        _quotaUsageInBytesMeta,
 | 
			
		||||
        quotaUsageInBytes.isAcceptableOrUnknown(
 | 
			
		||||
          data['quota_usage_in_bytes']!,
 | 
			
		||||
          _quotaUsageInBytesMeta,
 | 
			
		||||
        ),
 | 
			
		||||
      );
 | 
			
		||||
    }
 | 
			
		||||
    if (data.containsKey('pin_code')) {
 | 
			
		||||
      context.handle(
 | 
			
		||||
        _pinCodeMeta,
 | 
			
		||||
        pinCode.isAcceptableOrUnknown(data['pin_code']!, _pinCodeMeta),
 | 
			
		||||
      );
 | 
			
		||||
    }
 | 
			
		||||
    return context;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
  Set<i0.GeneratedColumn> get $primaryKey => {id};
 | 
			
		||||
  @override
 | 
			
		||||
  i1.AuthUserEntityData map(Map<String, dynamic> data, {String? tablePrefix}) {
 | 
			
		||||
    final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : '';
 | 
			
		||||
    return i1.AuthUserEntityData(
 | 
			
		||||
      id: attachedDatabase.typeMapping.read(
 | 
			
		||||
        i0.DriftSqlType.string,
 | 
			
		||||
        data['${effectivePrefix}id'],
 | 
			
		||||
      )!,
 | 
			
		||||
      name: attachedDatabase.typeMapping.read(
 | 
			
		||||
        i0.DriftSqlType.string,
 | 
			
		||||
        data['${effectivePrefix}name'],
 | 
			
		||||
      )!,
 | 
			
		||||
      email: attachedDatabase.typeMapping.read(
 | 
			
		||||
        i0.DriftSqlType.string,
 | 
			
		||||
        data['${effectivePrefix}email'],
 | 
			
		||||
      )!,
 | 
			
		||||
      isAdmin: attachedDatabase.typeMapping.read(
 | 
			
		||||
        i0.DriftSqlType.bool,
 | 
			
		||||
        data['${effectivePrefix}is_admin'],
 | 
			
		||||
      )!,
 | 
			
		||||
      hasProfileImage: attachedDatabase.typeMapping.read(
 | 
			
		||||
        i0.DriftSqlType.bool,
 | 
			
		||||
        data['${effectivePrefix}has_profile_image'],
 | 
			
		||||
      )!,
 | 
			
		||||
      profileChangedAt: attachedDatabase.typeMapping.read(
 | 
			
		||||
        i0.DriftSqlType.dateTime,
 | 
			
		||||
        data['${effectivePrefix}profile_changed_at'],
 | 
			
		||||
      )!,
 | 
			
		||||
      avatarColor: i1.$AuthUserEntityTable.$converteravatarColor.fromSql(
 | 
			
		||||
        attachedDatabase.typeMapping.read(
 | 
			
		||||
          i0.DriftSqlType.int,
 | 
			
		||||
          data['${effectivePrefix}avatar_color'],
 | 
			
		||||
        )!,
 | 
			
		||||
      ),
 | 
			
		||||
      quotaSizeInBytes: attachedDatabase.typeMapping.read(
 | 
			
		||||
        i0.DriftSqlType.int,
 | 
			
		||||
        data['${effectivePrefix}quota_size_in_bytes'],
 | 
			
		||||
      )!,
 | 
			
		||||
      quotaUsageInBytes: attachedDatabase.typeMapping.read(
 | 
			
		||||
        i0.DriftSqlType.int,
 | 
			
		||||
        data['${effectivePrefix}quota_usage_in_bytes'],
 | 
			
		||||
      )!,
 | 
			
		||||
      pinCode: attachedDatabase.typeMapping.read(
 | 
			
		||||
        i0.DriftSqlType.string,
 | 
			
		||||
        data['${effectivePrefix}pin_code'],
 | 
			
		||||
      ),
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
  $AuthUserEntityTable createAlias(String alias) {
 | 
			
		||||
    return $AuthUserEntityTable(attachedDatabase, alias);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  static i0.JsonTypeConverter2<i2.AvatarColor, int, int> $converteravatarColor =
 | 
			
		||||
      const i0.EnumIndexConverter<i2.AvatarColor>(i2.AvatarColor.values);
 | 
			
		||||
  @override
 | 
			
		||||
  bool get withoutRowId => true;
 | 
			
		||||
  @override
 | 
			
		||||
  bool get isStrict => true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
class AuthUserEntityData extends i0.DataClass
 | 
			
		||||
    implements i0.Insertable<i1.AuthUserEntityData> {
 | 
			
		||||
  final String id;
 | 
			
		||||
  final String name;
 | 
			
		||||
  final String email;
 | 
			
		||||
  final bool isAdmin;
 | 
			
		||||
  final bool hasProfileImage;
 | 
			
		||||
  final DateTime profileChangedAt;
 | 
			
		||||
  final i2.AvatarColor avatarColor;
 | 
			
		||||
  final int quotaSizeInBytes;
 | 
			
		||||
  final int quotaUsageInBytes;
 | 
			
		||||
  final String? pinCode;
 | 
			
		||||
  const AuthUserEntityData({
 | 
			
		||||
    required this.id,
 | 
			
		||||
    required this.name,
 | 
			
		||||
    required this.email,
 | 
			
		||||
    required this.isAdmin,
 | 
			
		||||
    required this.hasProfileImage,
 | 
			
		||||
    required this.profileChangedAt,
 | 
			
		||||
    required this.avatarColor,
 | 
			
		||||
    required this.quotaSizeInBytes,
 | 
			
		||||
    required this.quotaUsageInBytes,
 | 
			
		||||
    this.pinCode,
 | 
			
		||||
  });
 | 
			
		||||
  @override
 | 
			
		||||
  Map<String, i0.Expression> toColumns(bool nullToAbsent) {
 | 
			
		||||
    final map = <String, i0.Expression>{};
 | 
			
		||||
    map['id'] = i0.Variable<String>(id);
 | 
			
		||||
    map['name'] = i0.Variable<String>(name);
 | 
			
		||||
    map['email'] = i0.Variable<String>(email);
 | 
			
		||||
    map['is_admin'] = i0.Variable<bool>(isAdmin);
 | 
			
		||||
    map['has_profile_image'] = i0.Variable<bool>(hasProfileImage);
 | 
			
		||||
    map['profile_changed_at'] = i0.Variable<DateTime>(profileChangedAt);
 | 
			
		||||
    {
 | 
			
		||||
      map['avatar_color'] = i0.Variable<int>(
 | 
			
		||||
        i1.$AuthUserEntityTable.$converteravatarColor.toSql(avatarColor),
 | 
			
		||||
      );
 | 
			
		||||
    }
 | 
			
		||||
    map['quota_size_in_bytes'] = i0.Variable<int>(quotaSizeInBytes);
 | 
			
		||||
    map['quota_usage_in_bytes'] = i0.Variable<int>(quotaUsageInBytes);
 | 
			
		||||
    if (!nullToAbsent || pinCode != null) {
 | 
			
		||||
      map['pin_code'] = i0.Variable<String>(pinCode);
 | 
			
		||||
    }
 | 
			
		||||
    return map;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  factory AuthUserEntityData.fromJson(
 | 
			
		||||
    Map<String, dynamic> json, {
 | 
			
		||||
    i0.ValueSerializer? serializer,
 | 
			
		||||
  }) {
 | 
			
		||||
    serializer ??= i0.driftRuntimeOptions.defaultSerializer;
 | 
			
		||||
    return AuthUserEntityData(
 | 
			
		||||
      id: serializer.fromJson<String>(json['id']),
 | 
			
		||||
      name: serializer.fromJson<String>(json['name']),
 | 
			
		||||
      email: serializer.fromJson<String>(json['email']),
 | 
			
		||||
      isAdmin: serializer.fromJson<bool>(json['isAdmin']),
 | 
			
		||||
      hasProfileImage: serializer.fromJson<bool>(json['hasProfileImage']),
 | 
			
		||||
      profileChangedAt: serializer.fromJson<DateTime>(json['profileChangedAt']),
 | 
			
		||||
      avatarColor: i1.$AuthUserEntityTable.$converteravatarColor.fromJson(
 | 
			
		||||
        serializer.fromJson<int>(json['avatarColor']),
 | 
			
		||||
      ),
 | 
			
		||||
      quotaSizeInBytes: serializer.fromJson<int>(json['quotaSizeInBytes']),
 | 
			
		||||
      quotaUsageInBytes: serializer.fromJson<int>(json['quotaUsageInBytes']),
 | 
			
		||||
      pinCode: serializer.fromJson<String?>(json['pinCode']),
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
  @override
 | 
			
		||||
  Map<String, dynamic> toJson({i0.ValueSerializer? serializer}) {
 | 
			
		||||
    serializer ??= i0.driftRuntimeOptions.defaultSerializer;
 | 
			
		||||
    return <String, dynamic>{
 | 
			
		||||
      'id': serializer.toJson<String>(id),
 | 
			
		||||
      'name': serializer.toJson<String>(name),
 | 
			
		||||
      'email': serializer.toJson<String>(email),
 | 
			
		||||
      'isAdmin': serializer.toJson<bool>(isAdmin),
 | 
			
		||||
      'hasProfileImage': serializer.toJson<bool>(hasProfileImage),
 | 
			
		||||
      'profileChangedAt': serializer.toJson<DateTime>(profileChangedAt),
 | 
			
		||||
      'avatarColor': serializer.toJson<int>(
 | 
			
		||||
        i1.$AuthUserEntityTable.$converteravatarColor.toJson(avatarColor),
 | 
			
		||||
      ),
 | 
			
		||||
      'quotaSizeInBytes': serializer.toJson<int>(quotaSizeInBytes),
 | 
			
		||||
      'quotaUsageInBytes': serializer.toJson<int>(quotaUsageInBytes),
 | 
			
		||||
      'pinCode': serializer.toJson<String?>(pinCode),
 | 
			
		||||
    };
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  i1.AuthUserEntityData copyWith({
 | 
			
		||||
    String? id,
 | 
			
		||||
    String? name,
 | 
			
		||||
    String? email,
 | 
			
		||||
    bool? isAdmin,
 | 
			
		||||
    bool? hasProfileImage,
 | 
			
		||||
    DateTime? profileChangedAt,
 | 
			
		||||
    i2.AvatarColor? avatarColor,
 | 
			
		||||
    int? quotaSizeInBytes,
 | 
			
		||||
    int? quotaUsageInBytes,
 | 
			
		||||
    i0.Value<String?> pinCode = const i0.Value.absent(),
 | 
			
		||||
  }) => i1.AuthUserEntityData(
 | 
			
		||||
    id: id ?? this.id,
 | 
			
		||||
    name: name ?? this.name,
 | 
			
		||||
    email: email ?? this.email,
 | 
			
		||||
    isAdmin: isAdmin ?? this.isAdmin,
 | 
			
		||||
    hasProfileImage: hasProfileImage ?? this.hasProfileImage,
 | 
			
		||||
    profileChangedAt: profileChangedAt ?? this.profileChangedAt,
 | 
			
		||||
    avatarColor: avatarColor ?? this.avatarColor,
 | 
			
		||||
    quotaSizeInBytes: quotaSizeInBytes ?? this.quotaSizeInBytes,
 | 
			
		||||
    quotaUsageInBytes: quotaUsageInBytes ?? this.quotaUsageInBytes,
 | 
			
		||||
    pinCode: pinCode.present ? pinCode.value : this.pinCode,
 | 
			
		||||
  );
 | 
			
		||||
  AuthUserEntityData copyWithCompanion(i1.AuthUserEntityCompanion data) {
 | 
			
		||||
    return AuthUserEntityData(
 | 
			
		||||
      id: data.id.present ? data.id.value : this.id,
 | 
			
		||||
      name: data.name.present ? data.name.value : this.name,
 | 
			
		||||
      email: data.email.present ? data.email.value : this.email,
 | 
			
		||||
      isAdmin: data.isAdmin.present ? data.isAdmin.value : this.isAdmin,
 | 
			
		||||
      hasProfileImage: data.hasProfileImage.present
 | 
			
		||||
          ? data.hasProfileImage.value
 | 
			
		||||
          : this.hasProfileImage,
 | 
			
		||||
      profileChangedAt: data.profileChangedAt.present
 | 
			
		||||
          ? data.profileChangedAt.value
 | 
			
		||||
          : this.profileChangedAt,
 | 
			
		||||
      avatarColor: data.avatarColor.present
 | 
			
		||||
          ? data.avatarColor.value
 | 
			
		||||
          : this.avatarColor,
 | 
			
		||||
      quotaSizeInBytes: data.quotaSizeInBytes.present
 | 
			
		||||
          ? data.quotaSizeInBytes.value
 | 
			
		||||
          : this.quotaSizeInBytes,
 | 
			
		||||
      quotaUsageInBytes: data.quotaUsageInBytes.present
 | 
			
		||||
          ? data.quotaUsageInBytes.value
 | 
			
		||||
          : this.quotaUsageInBytes,
 | 
			
		||||
      pinCode: data.pinCode.present ? data.pinCode.value : this.pinCode,
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
  String toString() {
 | 
			
		||||
    return (StringBuffer('AuthUserEntityData(')
 | 
			
		||||
          ..write('id: $id, ')
 | 
			
		||||
          ..write('name: $name, ')
 | 
			
		||||
          ..write('email: $email, ')
 | 
			
		||||
          ..write('isAdmin: $isAdmin, ')
 | 
			
		||||
          ..write('hasProfileImage: $hasProfileImage, ')
 | 
			
		||||
          ..write('profileChangedAt: $profileChangedAt, ')
 | 
			
		||||
          ..write('avatarColor: $avatarColor, ')
 | 
			
		||||
          ..write('quotaSizeInBytes: $quotaSizeInBytes, ')
 | 
			
		||||
          ..write('quotaUsageInBytes: $quotaUsageInBytes, ')
 | 
			
		||||
          ..write('pinCode: $pinCode')
 | 
			
		||||
          ..write(')'))
 | 
			
		||||
        .toString();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
  int get hashCode => Object.hash(
 | 
			
		||||
    id,
 | 
			
		||||
    name,
 | 
			
		||||
    email,
 | 
			
		||||
    isAdmin,
 | 
			
		||||
    hasProfileImage,
 | 
			
		||||
    profileChangedAt,
 | 
			
		||||
    avatarColor,
 | 
			
		||||
    quotaSizeInBytes,
 | 
			
		||||
    quotaUsageInBytes,
 | 
			
		||||
    pinCode,
 | 
			
		||||
  );
 | 
			
		||||
  @override
 | 
			
		||||
  bool operator ==(Object other) =>
 | 
			
		||||
      identical(this, other) ||
 | 
			
		||||
      (other is i1.AuthUserEntityData &&
 | 
			
		||||
          other.id == this.id &&
 | 
			
		||||
          other.name == this.name &&
 | 
			
		||||
          other.email == this.email &&
 | 
			
		||||
          other.isAdmin == this.isAdmin &&
 | 
			
		||||
          other.hasProfileImage == this.hasProfileImage &&
 | 
			
		||||
          other.profileChangedAt == this.profileChangedAt &&
 | 
			
		||||
          other.avatarColor == this.avatarColor &&
 | 
			
		||||
          other.quotaSizeInBytes == this.quotaSizeInBytes &&
 | 
			
		||||
          other.quotaUsageInBytes == this.quotaUsageInBytes &&
 | 
			
		||||
          other.pinCode == this.pinCode);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
class AuthUserEntityCompanion
 | 
			
		||||
    extends i0.UpdateCompanion<i1.AuthUserEntityData> {
 | 
			
		||||
  final i0.Value<String> id;
 | 
			
		||||
  final i0.Value<String> name;
 | 
			
		||||
  final i0.Value<String> email;
 | 
			
		||||
  final i0.Value<bool> isAdmin;
 | 
			
		||||
  final i0.Value<bool> hasProfileImage;
 | 
			
		||||
  final i0.Value<DateTime> profileChangedAt;
 | 
			
		||||
  final i0.Value<i2.AvatarColor> avatarColor;
 | 
			
		||||
  final i0.Value<int> quotaSizeInBytes;
 | 
			
		||||
  final i0.Value<int> quotaUsageInBytes;
 | 
			
		||||
  final i0.Value<String?> pinCode;
 | 
			
		||||
  const AuthUserEntityCompanion({
 | 
			
		||||
    this.id = const i0.Value.absent(),
 | 
			
		||||
    this.name = const i0.Value.absent(),
 | 
			
		||||
    this.email = const i0.Value.absent(),
 | 
			
		||||
    this.isAdmin = const i0.Value.absent(),
 | 
			
		||||
    this.hasProfileImage = const i0.Value.absent(),
 | 
			
		||||
    this.profileChangedAt = const i0.Value.absent(),
 | 
			
		||||
    this.avatarColor = const i0.Value.absent(),
 | 
			
		||||
    this.quotaSizeInBytes = const i0.Value.absent(),
 | 
			
		||||
    this.quotaUsageInBytes = const i0.Value.absent(),
 | 
			
		||||
    this.pinCode = const i0.Value.absent(),
 | 
			
		||||
  });
 | 
			
		||||
  AuthUserEntityCompanion.insert({
 | 
			
		||||
    required String id,
 | 
			
		||||
    required String name,
 | 
			
		||||
    required String email,
 | 
			
		||||
    this.isAdmin = const i0.Value.absent(),
 | 
			
		||||
    this.hasProfileImage = const i0.Value.absent(),
 | 
			
		||||
    this.profileChangedAt = const i0.Value.absent(),
 | 
			
		||||
    required i2.AvatarColor avatarColor,
 | 
			
		||||
    this.quotaSizeInBytes = const i0.Value.absent(),
 | 
			
		||||
    this.quotaUsageInBytes = const i0.Value.absent(),
 | 
			
		||||
    this.pinCode = const i0.Value.absent(),
 | 
			
		||||
  }) : id = i0.Value(id),
 | 
			
		||||
       name = i0.Value(name),
 | 
			
		||||
       email = i0.Value(email),
 | 
			
		||||
       avatarColor = i0.Value(avatarColor);
 | 
			
		||||
  static i0.Insertable<i1.AuthUserEntityData> custom({
 | 
			
		||||
    i0.Expression<String>? id,
 | 
			
		||||
    i0.Expression<String>? name,
 | 
			
		||||
    i0.Expression<String>? email,
 | 
			
		||||
    i0.Expression<bool>? isAdmin,
 | 
			
		||||
    i0.Expression<bool>? hasProfileImage,
 | 
			
		||||
    i0.Expression<DateTime>? profileChangedAt,
 | 
			
		||||
    i0.Expression<int>? avatarColor,
 | 
			
		||||
    i0.Expression<int>? quotaSizeInBytes,
 | 
			
		||||
    i0.Expression<int>? quotaUsageInBytes,
 | 
			
		||||
    i0.Expression<String>? pinCode,
 | 
			
		||||
  }) {
 | 
			
		||||
    return i0.RawValuesInsertable({
 | 
			
		||||
      if (id != null) 'id': id,
 | 
			
		||||
      if (name != null) 'name': name,
 | 
			
		||||
      if (email != null) 'email': email,
 | 
			
		||||
      if (isAdmin != null) 'is_admin': isAdmin,
 | 
			
		||||
      if (hasProfileImage != null) 'has_profile_image': hasProfileImage,
 | 
			
		||||
      if (profileChangedAt != null) 'profile_changed_at': profileChangedAt,
 | 
			
		||||
      if (avatarColor != null) 'avatar_color': avatarColor,
 | 
			
		||||
      if (quotaSizeInBytes != null) 'quota_size_in_bytes': quotaSizeInBytes,
 | 
			
		||||
      if (quotaUsageInBytes != null) 'quota_usage_in_bytes': quotaUsageInBytes,
 | 
			
		||||
      if (pinCode != null) 'pin_code': pinCode,
 | 
			
		||||
    });
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  i1.AuthUserEntityCompanion copyWith({
 | 
			
		||||
    i0.Value<String>? id,
 | 
			
		||||
    i0.Value<String>? name,
 | 
			
		||||
    i0.Value<String>? email,
 | 
			
		||||
    i0.Value<bool>? isAdmin,
 | 
			
		||||
    i0.Value<bool>? hasProfileImage,
 | 
			
		||||
    i0.Value<DateTime>? profileChangedAt,
 | 
			
		||||
    i0.Value<i2.AvatarColor>? avatarColor,
 | 
			
		||||
    i0.Value<int>? quotaSizeInBytes,
 | 
			
		||||
    i0.Value<int>? quotaUsageInBytes,
 | 
			
		||||
    i0.Value<String?>? pinCode,
 | 
			
		||||
  }) {
 | 
			
		||||
    return i1.AuthUserEntityCompanion(
 | 
			
		||||
      id: id ?? this.id,
 | 
			
		||||
      name: name ?? this.name,
 | 
			
		||||
      email: email ?? this.email,
 | 
			
		||||
      isAdmin: isAdmin ?? this.isAdmin,
 | 
			
		||||
      hasProfileImage: hasProfileImage ?? this.hasProfileImage,
 | 
			
		||||
      profileChangedAt: profileChangedAt ?? this.profileChangedAt,
 | 
			
		||||
      avatarColor: avatarColor ?? this.avatarColor,
 | 
			
		||||
      quotaSizeInBytes: quotaSizeInBytes ?? this.quotaSizeInBytes,
 | 
			
		||||
      quotaUsageInBytes: quotaUsageInBytes ?? this.quotaUsageInBytes,
 | 
			
		||||
      pinCode: pinCode ?? this.pinCode,
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
  Map<String, i0.Expression> toColumns(bool nullToAbsent) {
 | 
			
		||||
    final map = <String, i0.Expression>{};
 | 
			
		||||
    if (id.present) {
 | 
			
		||||
      map['id'] = i0.Variable<String>(id.value);
 | 
			
		||||
    }
 | 
			
		||||
    if (name.present) {
 | 
			
		||||
      map['name'] = i0.Variable<String>(name.value);
 | 
			
		||||
    }
 | 
			
		||||
    if (email.present) {
 | 
			
		||||
      map['email'] = i0.Variable<String>(email.value);
 | 
			
		||||
    }
 | 
			
		||||
    if (isAdmin.present) {
 | 
			
		||||
      map['is_admin'] = i0.Variable<bool>(isAdmin.value);
 | 
			
		||||
    }
 | 
			
		||||
    if (hasProfileImage.present) {
 | 
			
		||||
      map['has_profile_image'] = i0.Variable<bool>(hasProfileImage.value);
 | 
			
		||||
    }
 | 
			
		||||
    if (profileChangedAt.present) {
 | 
			
		||||
      map['profile_changed_at'] = i0.Variable<DateTime>(profileChangedAt.value);
 | 
			
		||||
    }
 | 
			
		||||
    if (avatarColor.present) {
 | 
			
		||||
      map['avatar_color'] = i0.Variable<int>(
 | 
			
		||||
        i1.$AuthUserEntityTable.$converteravatarColor.toSql(avatarColor.value),
 | 
			
		||||
      );
 | 
			
		||||
    }
 | 
			
		||||
    if (quotaSizeInBytes.present) {
 | 
			
		||||
      map['quota_size_in_bytes'] = i0.Variable<int>(quotaSizeInBytes.value);
 | 
			
		||||
    }
 | 
			
		||||
    if (quotaUsageInBytes.present) {
 | 
			
		||||
      map['quota_usage_in_bytes'] = i0.Variable<int>(quotaUsageInBytes.value);
 | 
			
		||||
    }
 | 
			
		||||
    if (pinCode.present) {
 | 
			
		||||
      map['pin_code'] = i0.Variable<String>(pinCode.value);
 | 
			
		||||
    }
 | 
			
		||||
    return map;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
  String toString() {
 | 
			
		||||
    return (StringBuffer('AuthUserEntityCompanion(')
 | 
			
		||||
          ..write('id: $id, ')
 | 
			
		||||
          ..write('name: $name, ')
 | 
			
		||||
          ..write('email: $email, ')
 | 
			
		||||
          ..write('isAdmin: $isAdmin, ')
 | 
			
		||||
          ..write('hasProfileImage: $hasProfileImage, ')
 | 
			
		||||
          ..write('profileChangedAt: $profileChangedAt, ')
 | 
			
		||||
          ..write('avatarColor: $avatarColor, ')
 | 
			
		||||
          ..write('quotaSizeInBytes: $quotaSizeInBytes, ')
 | 
			
		||||
          ..write('quotaUsageInBytes: $quotaUsageInBytes, ')
 | 
			
		||||
          ..write('pinCode: $pinCode')
 | 
			
		||||
          ..write(')'))
 | 
			
		||||
        .toString();
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@ -1,6 +1,5 @@
 | 
			
		||||
import 'package:drift/drift.dart' hide Index;
 | 
			
		||||
import 'package:immich_mobile/domain/models/user.model.dart';
 | 
			
		||||
import 'package:immich_mobile/domain/models/user_metadata.model.dart';
 | 
			
		||||
import 'package:immich_mobile/infrastructure/utils/drift_default.mixin.dart';
 | 
			
		||||
import 'package:immich_mobile/utils/hash.dart';
 | 
			
		||||
import 'package:isar/isar.dart';
 | 
			
		||||
@ -44,7 +43,7 @@ class User {
 | 
			
		||||
 | 
			
		||||
  static User fromDto(UserDto dto) => User(
 | 
			
		||||
    id: dto.id,
 | 
			
		||||
    updatedAt: dto.updatedAt,
 | 
			
		||||
    updatedAt: dto.updatedAt ?? DateTime(2025),
 | 
			
		||||
    email: dto.email,
 | 
			
		||||
    name: dto.name,
 | 
			
		||||
    isAdmin: dto.isAdmin,
 | 
			
		||||
@ -81,13 +80,12 @@ class UserEntity extends Table with DriftDefaultsMixin {
 | 
			
		||||
 | 
			
		||||
  TextColumn get id => text()();
 | 
			
		||||
  TextColumn get name => text()();
 | 
			
		||||
  BoolColumn get isAdmin => boolean().withDefault(const Constant(false))();
 | 
			
		||||
  TextColumn get email => text()();
 | 
			
		||||
 | 
			
		||||
  // Profile image
 | 
			
		||||
  BoolColumn get hasProfileImage => boolean().withDefault(const Constant(false))();
 | 
			
		||||
  DateTimeColumn get profileChangedAt => dateTime().withDefault(currentDateAndTime)();
 | 
			
		||||
 | 
			
		||||
  DateTimeColumn get updatedAt => dateTime().withDefault(currentDateAndTime)();
 | 
			
		||||
  IntColumn get avatarColor => intEnum<AvatarColor>().withDefault(const Constant(0))();
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
  Set<Column> get primaryKey => {id};
 | 
			
		||||
 | 
			
		||||
@ -3,28 +3,27 @@
 | 
			
		||||
import 'package:drift/drift.dart' as i0;
 | 
			
		||||
import 'package:immich_mobile/infrastructure/entities/user.entity.drift.dart'
 | 
			
		||||
    as i1;
 | 
			
		||||
import 'package:immich_mobile/infrastructure/entities/user.entity.dart' as i2;
 | 
			
		||||
import 'package:drift/src/runtime/query_builder/query_builder.dart' as i3;
 | 
			
		||||
import 'package:immich_mobile/domain/models/user.model.dart' as i2;
 | 
			
		||||
import 'package:immich_mobile/infrastructure/entities/user.entity.dart' as i3;
 | 
			
		||||
import 'package:drift/src/runtime/query_builder/query_builder.dart' as i4;
 | 
			
		||||
 | 
			
		||||
typedef $$UserEntityTableCreateCompanionBuilder =
 | 
			
		||||
    i1.UserEntityCompanion Function({
 | 
			
		||||
      required String id,
 | 
			
		||||
      required String name,
 | 
			
		||||
      i0.Value<bool> isAdmin,
 | 
			
		||||
      required String email,
 | 
			
		||||
      i0.Value<bool> hasProfileImage,
 | 
			
		||||
      i0.Value<DateTime> profileChangedAt,
 | 
			
		||||
      i0.Value<DateTime> updatedAt,
 | 
			
		||||
      i0.Value<i2.AvatarColor> avatarColor,
 | 
			
		||||
    });
 | 
			
		||||
typedef $$UserEntityTableUpdateCompanionBuilder =
 | 
			
		||||
    i1.UserEntityCompanion Function({
 | 
			
		||||
      i0.Value<String> id,
 | 
			
		||||
      i0.Value<String> name,
 | 
			
		||||
      i0.Value<bool> isAdmin,
 | 
			
		||||
      i0.Value<String> email,
 | 
			
		||||
      i0.Value<bool> hasProfileImage,
 | 
			
		||||
      i0.Value<DateTime> profileChangedAt,
 | 
			
		||||
      i0.Value<DateTime> updatedAt,
 | 
			
		||||
      i0.Value<i2.AvatarColor> avatarColor,
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
class $$UserEntityTableFilterComposer
 | 
			
		||||
@ -46,11 +45,6 @@ class $$UserEntityTableFilterComposer
 | 
			
		||||
    builder: (column) => i0.ColumnFilters(column),
 | 
			
		||||
  );
 | 
			
		||||
 | 
			
		||||
  i0.ColumnFilters<bool> get isAdmin => $composableBuilder(
 | 
			
		||||
    column: $table.isAdmin,
 | 
			
		||||
    builder: (column) => i0.ColumnFilters(column),
 | 
			
		||||
  );
 | 
			
		||||
 | 
			
		||||
  i0.ColumnFilters<String> get email => $composableBuilder(
 | 
			
		||||
    column: $table.email,
 | 
			
		||||
    builder: (column) => i0.ColumnFilters(column),
 | 
			
		||||
@ -66,9 +60,10 @@ class $$UserEntityTableFilterComposer
 | 
			
		||||
    builder: (column) => i0.ColumnFilters(column),
 | 
			
		||||
  );
 | 
			
		||||
 | 
			
		||||
  i0.ColumnFilters<DateTime> get updatedAt => $composableBuilder(
 | 
			
		||||
    column: $table.updatedAt,
 | 
			
		||||
    builder: (column) => i0.ColumnFilters(column),
 | 
			
		||||
  i0.ColumnWithTypeConverterFilters<i2.AvatarColor, i2.AvatarColor, int>
 | 
			
		||||
  get avatarColor => $composableBuilder(
 | 
			
		||||
    column: $table.avatarColor,
 | 
			
		||||
    builder: (column) => i0.ColumnWithTypeConverterFilters(column),
 | 
			
		||||
  );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -91,11 +86,6 @@ class $$UserEntityTableOrderingComposer
 | 
			
		||||
    builder: (column) => i0.ColumnOrderings(column),
 | 
			
		||||
  );
 | 
			
		||||
 | 
			
		||||
  i0.ColumnOrderings<bool> get isAdmin => $composableBuilder(
 | 
			
		||||
    column: $table.isAdmin,
 | 
			
		||||
    builder: (column) => i0.ColumnOrderings(column),
 | 
			
		||||
  );
 | 
			
		||||
 | 
			
		||||
  i0.ColumnOrderings<String> get email => $composableBuilder(
 | 
			
		||||
    column: $table.email,
 | 
			
		||||
    builder: (column) => i0.ColumnOrderings(column),
 | 
			
		||||
@ -111,8 +101,8 @@ class $$UserEntityTableOrderingComposer
 | 
			
		||||
    builder: (column) => i0.ColumnOrderings(column),
 | 
			
		||||
  );
 | 
			
		||||
 | 
			
		||||
  i0.ColumnOrderings<DateTime> get updatedAt => $composableBuilder(
 | 
			
		||||
    column: $table.updatedAt,
 | 
			
		||||
  i0.ColumnOrderings<int> get avatarColor => $composableBuilder(
 | 
			
		||||
    column: $table.avatarColor,
 | 
			
		||||
    builder: (column) => i0.ColumnOrderings(column),
 | 
			
		||||
  );
 | 
			
		||||
}
 | 
			
		||||
@ -132,9 +122,6 @@ class $$UserEntityTableAnnotationComposer
 | 
			
		||||
  i0.GeneratedColumn<String> get name =>
 | 
			
		||||
      $composableBuilder(column: $table.name, builder: (column) => column);
 | 
			
		||||
 | 
			
		||||
  i0.GeneratedColumn<bool> get isAdmin =>
 | 
			
		||||
      $composableBuilder(column: $table.isAdmin, builder: (column) => column);
 | 
			
		||||
 | 
			
		||||
  i0.GeneratedColumn<String> get email =>
 | 
			
		||||
      $composableBuilder(column: $table.email, builder: (column) => column);
 | 
			
		||||
 | 
			
		||||
@ -148,8 +135,11 @@ class $$UserEntityTableAnnotationComposer
 | 
			
		||||
    builder: (column) => column,
 | 
			
		||||
  );
 | 
			
		||||
 | 
			
		||||
  i0.GeneratedColumn<DateTime> get updatedAt =>
 | 
			
		||||
      $composableBuilder(column: $table.updatedAt, builder: (column) => column);
 | 
			
		||||
  i0.GeneratedColumnWithTypeConverter<i2.AvatarColor, int> get avatarColor =>
 | 
			
		||||
      $composableBuilder(
 | 
			
		||||
        column: $table.avatarColor,
 | 
			
		||||
        builder: (column) => column,
 | 
			
		||||
      );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
class $$UserEntityTableTableManager
 | 
			
		||||
@ -191,37 +181,33 @@ class $$UserEntityTableTableManager
 | 
			
		||||
              ({
 | 
			
		||||
                i0.Value<String> id = const i0.Value.absent(),
 | 
			
		||||
                i0.Value<String> name = const i0.Value.absent(),
 | 
			
		||||
                i0.Value<bool> isAdmin = const i0.Value.absent(),
 | 
			
		||||
                i0.Value<String> email = const i0.Value.absent(),
 | 
			
		||||
                i0.Value<bool> hasProfileImage = const i0.Value.absent(),
 | 
			
		||||
                i0.Value<DateTime> profileChangedAt = const i0.Value.absent(),
 | 
			
		||||
                i0.Value<DateTime> updatedAt = const i0.Value.absent(),
 | 
			
		||||
                i0.Value<i2.AvatarColor> avatarColor = const i0.Value.absent(),
 | 
			
		||||
              }) => i1.UserEntityCompanion(
 | 
			
		||||
                id: id,
 | 
			
		||||
                name: name,
 | 
			
		||||
                isAdmin: isAdmin,
 | 
			
		||||
                email: email,
 | 
			
		||||
                hasProfileImage: hasProfileImage,
 | 
			
		||||
                profileChangedAt: profileChangedAt,
 | 
			
		||||
                updatedAt: updatedAt,
 | 
			
		||||
                avatarColor: avatarColor,
 | 
			
		||||
              ),
 | 
			
		||||
          createCompanionCallback:
 | 
			
		||||
              ({
 | 
			
		||||
                required String id,
 | 
			
		||||
                required String name,
 | 
			
		||||
                i0.Value<bool> isAdmin = const i0.Value.absent(),
 | 
			
		||||
                required String email,
 | 
			
		||||
                i0.Value<bool> hasProfileImage = const i0.Value.absent(),
 | 
			
		||||
                i0.Value<DateTime> profileChangedAt = const i0.Value.absent(),
 | 
			
		||||
                i0.Value<DateTime> updatedAt = const i0.Value.absent(),
 | 
			
		||||
                i0.Value<i2.AvatarColor> avatarColor = const i0.Value.absent(),
 | 
			
		||||
              }) => i1.UserEntityCompanion.insert(
 | 
			
		||||
                id: id,
 | 
			
		||||
                name: name,
 | 
			
		||||
                isAdmin: isAdmin,
 | 
			
		||||
                email: email,
 | 
			
		||||
                hasProfileImage: hasProfileImage,
 | 
			
		||||
                profileChangedAt: profileChangedAt,
 | 
			
		||||
                updatedAt: updatedAt,
 | 
			
		||||
                avatarColor: avatarColor,
 | 
			
		||||
              ),
 | 
			
		||||
          withReferenceMapper: (p0) => p0
 | 
			
		||||
              .map((e) => (e.readTable(table), i0.BaseReferences(db, table, e)))
 | 
			
		||||
@ -253,7 +239,7 @@ typedef $$UserEntityTableProcessedTableManager =
 | 
			
		||||
      i0.PrefetchHooks Function()
 | 
			
		||||
    >;
 | 
			
		||||
 | 
			
		||||
class $UserEntityTable extends i2.UserEntity
 | 
			
		||||
class $UserEntityTable extends i3.UserEntity
 | 
			
		||||
    with i0.TableInfo<$UserEntityTable, i1.UserEntityData> {
 | 
			
		||||
  @override
 | 
			
		||||
  final i0.GeneratedDatabase attachedDatabase;
 | 
			
		||||
@ -279,21 +265,6 @@ class $UserEntityTable extends i2.UserEntity
 | 
			
		||||
    type: i0.DriftSqlType.string,
 | 
			
		||||
    requiredDuringInsert: true,
 | 
			
		||||
  );
 | 
			
		||||
  static const i0.VerificationMeta _isAdminMeta = const i0.VerificationMeta(
 | 
			
		||||
    'isAdmin',
 | 
			
		||||
  );
 | 
			
		||||
  @override
 | 
			
		||||
  late final i0.GeneratedColumn<bool> isAdmin = i0.GeneratedColumn<bool>(
 | 
			
		||||
    'is_admin',
 | 
			
		||||
    aliasedName,
 | 
			
		||||
    false,
 | 
			
		||||
    type: i0.DriftSqlType.bool,
 | 
			
		||||
    requiredDuringInsert: false,
 | 
			
		||||
    defaultConstraints: i0.GeneratedColumn.constraintIsAlways(
 | 
			
		||||
      'CHECK ("is_admin" IN (0, 1))',
 | 
			
		||||
    ),
 | 
			
		||||
    defaultValue: const i3.Constant(false),
 | 
			
		||||
  );
 | 
			
		||||
  static const i0.VerificationMeta _emailMeta = const i0.VerificationMeta(
 | 
			
		||||
    'email',
 | 
			
		||||
  );
 | 
			
		||||
@ -318,7 +289,7 @@ class $UserEntityTable extends i2.UserEntity
 | 
			
		||||
        defaultConstraints: i0.GeneratedColumn.constraintIsAlways(
 | 
			
		||||
          'CHECK ("has_profile_image" IN (0, 1))',
 | 
			
		||||
        ),
 | 
			
		||||
        defaultValue: const i3.Constant(false),
 | 
			
		||||
        defaultValue: const i4.Constant(false),
 | 
			
		||||
      );
 | 
			
		||||
  static const i0.VerificationMeta _profileChangedAtMeta =
 | 
			
		||||
      const i0.VerificationMeta('profileChangedAt');
 | 
			
		||||
@ -330,30 +301,26 @@ class $UserEntityTable extends i2.UserEntity
 | 
			
		||||
        false,
 | 
			
		||||
        type: i0.DriftSqlType.dateTime,
 | 
			
		||||
        requiredDuringInsert: false,
 | 
			
		||||
        defaultValue: i3.currentDateAndTime,
 | 
			
		||||
      );
 | 
			
		||||
  static const i0.VerificationMeta _updatedAtMeta = const i0.VerificationMeta(
 | 
			
		||||
    'updatedAt',
 | 
			
		||||
        defaultValue: i4.currentDateAndTime,
 | 
			
		||||
      );
 | 
			
		||||
  @override
 | 
			
		||||
  late final i0.GeneratedColumn<DateTime> updatedAt =
 | 
			
		||||
      i0.GeneratedColumn<DateTime>(
 | 
			
		||||
        'updated_at',
 | 
			
		||||
  late final i0.GeneratedColumnWithTypeConverter<i2.AvatarColor, int>
 | 
			
		||||
  avatarColor = i0.GeneratedColumn<int>(
 | 
			
		||||
    'avatar_color',
 | 
			
		||||
    aliasedName,
 | 
			
		||||
    false,
 | 
			
		||||
        type: i0.DriftSqlType.dateTime,
 | 
			
		||||
    type: i0.DriftSqlType.int,
 | 
			
		||||
    requiredDuringInsert: false,
 | 
			
		||||
        defaultValue: i3.currentDateAndTime,
 | 
			
		||||
      );
 | 
			
		||||
    defaultValue: const i4.Constant(0),
 | 
			
		||||
  ).withConverter<i2.AvatarColor>(i1.$UserEntityTable.$converteravatarColor);
 | 
			
		||||
  @override
 | 
			
		||||
  List<i0.GeneratedColumn> get $columns => [
 | 
			
		||||
    id,
 | 
			
		||||
    name,
 | 
			
		||||
    isAdmin,
 | 
			
		||||
    email,
 | 
			
		||||
    hasProfileImage,
 | 
			
		||||
    profileChangedAt,
 | 
			
		||||
    updatedAt,
 | 
			
		||||
    avatarColor,
 | 
			
		||||
  ];
 | 
			
		||||
  @override
 | 
			
		||||
  String get aliasedName => _alias ?? actualTableName;
 | 
			
		||||
@ -380,12 +347,6 @@ class $UserEntityTable extends i2.UserEntity
 | 
			
		||||
    } else if (isInserting) {
 | 
			
		||||
      context.missing(_nameMeta);
 | 
			
		||||
    }
 | 
			
		||||
    if (data.containsKey('is_admin')) {
 | 
			
		||||
      context.handle(
 | 
			
		||||
        _isAdminMeta,
 | 
			
		||||
        isAdmin.isAcceptableOrUnknown(data['is_admin']!, _isAdminMeta),
 | 
			
		||||
      );
 | 
			
		||||
    }
 | 
			
		||||
    if (data.containsKey('email')) {
 | 
			
		||||
      context.handle(
 | 
			
		||||
        _emailMeta,
 | 
			
		||||
@ -412,12 +373,6 @@ class $UserEntityTable extends i2.UserEntity
 | 
			
		||||
        ),
 | 
			
		||||
      );
 | 
			
		||||
    }
 | 
			
		||||
    if (data.containsKey('updated_at')) {
 | 
			
		||||
      context.handle(
 | 
			
		||||
        _updatedAtMeta,
 | 
			
		||||
        updatedAt.isAcceptableOrUnknown(data['updated_at']!, _updatedAtMeta),
 | 
			
		||||
      );
 | 
			
		||||
    }
 | 
			
		||||
    return context;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
@ -435,10 +390,6 @@ class $UserEntityTable extends i2.UserEntity
 | 
			
		||||
        i0.DriftSqlType.string,
 | 
			
		||||
        data['${effectivePrefix}name'],
 | 
			
		||||
      )!,
 | 
			
		||||
      isAdmin: attachedDatabase.typeMapping.read(
 | 
			
		||||
        i0.DriftSqlType.bool,
 | 
			
		||||
        data['${effectivePrefix}is_admin'],
 | 
			
		||||
      )!,
 | 
			
		||||
      email: attachedDatabase.typeMapping.read(
 | 
			
		||||
        i0.DriftSqlType.string,
 | 
			
		||||
        data['${effectivePrefix}email'],
 | 
			
		||||
@ -451,10 +402,12 @@ class $UserEntityTable extends i2.UserEntity
 | 
			
		||||
        i0.DriftSqlType.dateTime,
 | 
			
		||||
        data['${effectivePrefix}profile_changed_at'],
 | 
			
		||||
      )!,
 | 
			
		||||
      updatedAt: attachedDatabase.typeMapping.read(
 | 
			
		||||
        i0.DriftSqlType.dateTime,
 | 
			
		||||
        data['${effectivePrefix}updated_at'],
 | 
			
		||||
      avatarColor: i1.$UserEntityTable.$converteravatarColor.fromSql(
 | 
			
		||||
        attachedDatabase.typeMapping.read(
 | 
			
		||||
          i0.DriftSqlType.int,
 | 
			
		||||
          data['${effectivePrefix}avatar_color'],
 | 
			
		||||
        )!,
 | 
			
		||||
      ),
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
@ -463,6 +416,8 @@ class $UserEntityTable extends i2.UserEntity
 | 
			
		||||
    return $UserEntityTable(attachedDatabase, alias);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  static i0.JsonTypeConverter2<i2.AvatarColor, int, int> $converteravatarColor =
 | 
			
		||||
      const i0.EnumIndexConverter<i2.AvatarColor>(i2.AvatarColor.values);
 | 
			
		||||
  @override
 | 
			
		||||
  bool get withoutRowId => true;
 | 
			
		||||
  @override
 | 
			
		||||
@ -473,30 +428,31 @@ class UserEntityData extends i0.DataClass
 | 
			
		||||
    implements i0.Insertable<i1.UserEntityData> {
 | 
			
		||||
  final String id;
 | 
			
		||||
  final String name;
 | 
			
		||||
  final bool isAdmin;
 | 
			
		||||
  final String email;
 | 
			
		||||
  final bool hasProfileImage;
 | 
			
		||||
  final DateTime profileChangedAt;
 | 
			
		||||
  final DateTime updatedAt;
 | 
			
		||||
  final i2.AvatarColor avatarColor;
 | 
			
		||||
  const UserEntityData({
 | 
			
		||||
    required this.id,
 | 
			
		||||
    required this.name,
 | 
			
		||||
    required this.isAdmin,
 | 
			
		||||
    required this.email,
 | 
			
		||||
    required this.hasProfileImage,
 | 
			
		||||
    required this.profileChangedAt,
 | 
			
		||||
    required this.updatedAt,
 | 
			
		||||
    required this.avatarColor,
 | 
			
		||||
  });
 | 
			
		||||
  @override
 | 
			
		||||
  Map<String, i0.Expression> toColumns(bool nullToAbsent) {
 | 
			
		||||
    final map = <String, i0.Expression>{};
 | 
			
		||||
    map['id'] = i0.Variable<String>(id);
 | 
			
		||||
    map['name'] = i0.Variable<String>(name);
 | 
			
		||||
    map['is_admin'] = i0.Variable<bool>(isAdmin);
 | 
			
		||||
    map['email'] = i0.Variable<String>(email);
 | 
			
		||||
    map['has_profile_image'] = i0.Variable<bool>(hasProfileImage);
 | 
			
		||||
    map['profile_changed_at'] = i0.Variable<DateTime>(profileChangedAt);
 | 
			
		||||
    map['updated_at'] = i0.Variable<DateTime>(updatedAt);
 | 
			
		||||
    {
 | 
			
		||||
      map['avatar_color'] = i0.Variable<int>(
 | 
			
		||||
        i1.$UserEntityTable.$converteravatarColor.toSql(avatarColor),
 | 
			
		||||
      );
 | 
			
		||||
    }
 | 
			
		||||
    return map;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
@ -508,11 +464,12 @@ class UserEntityData extends i0.DataClass
 | 
			
		||||
    return UserEntityData(
 | 
			
		||||
      id: serializer.fromJson<String>(json['id']),
 | 
			
		||||
      name: serializer.fromJson<String>(json['name']),
 | 
			
		||||
      isAdmin: serializer.fromJson<bool>(json['isAdmin']),
 | 
			
		||||
      email: serializer.fromJson<String>(json['email']),
 | 
			
		||||
      hasProfileImage: serializer.fromJson<bool>(json['hasProfileImage']),
 | 
			
		||||
      profileChangedAt: serializer.fromJson<DateTime>(json['profileChangedAt']),
 | 
			
		||||
      updatedAt: serializer.fromJson<DateTime>(json['updatedAt']),
 | 
			
		||||
      avatarColor: i1.$UserEntityTable.$converteravatarColor.fromJson(
 | 
			
		||||
        serializer.fromJson<int>(json['avatarColor']),
 | 
			
		||||
      ),
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
  @override
 | 
			
		||||
@ -521,36 +478,34 @@ class UserEntityData extends i0.DataClass
 | 
			
		||||
    return <String, dynamic>{
 | 
			
		||||
      'id': serializer.toJson<String>(id),
 | 
			
		||||
      'name': serializer.toJson<String>(name),
 | 
			
		||||
      'isAdmin': serializer.toJson<bool>(isAdmin),
 | 
			
		||||
      'email': serializer.toJson<String>(email),
 | 
			
		||||
      'hasProfileImage': serializer.toJson<bool>(hasProfileImage),
 | 
			
		||||
      'profileChangedAt': serializer.toJson<DateTime>(profileChangedAt),
 | 
			
		||||
      'updatedAt': serializer.toJson<DateTime>(updatedAt),
 | 
			
		||||
      'avatarColor': serializer.toJson<int>(
 | 
			
		||||
        i1.$UserEntityTable.$converteravatarColor.toJson(avatarColor),
 | 
			
		||||
      ),
 | 
			
		||||
    };
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  i1.UserEntityData copyWith({
 | 
			
		||||
    String? id,
 | 
			
		||||
    String? name,
 | 
			
		||||
    bool? isAdmin,
 | 
			
		||||
    String? email,
 | 
			
		||||
    bool? hasProfileImage,
 | 
			
		||||
    DateTime? profileChangedAt,
 | 
			
		||||
    DateTime? updatedAt,
 | 
			
		||||
    i2.AvatarColor? avatarColor,
 | 
			
		||||
  }) => i1.UserEntityData(
 | 
			
		||||
    id: id ?? this.id,
 | 
			
		||||
    name: name ?? this.name,
 | 
			
		||||
    isAdmin: isAdmin ?? this.isAdmin,
 | 
			
		||||
    email: email ?? this.email,
 | 
			
		||||
    hasProfileImage: hasProfileImage ?? this.hasProfileImage,
 | 
			
		||||
    profileChangedAt: profileChangedAt ?? this.profileChangedAt,
 | 
			
		||||
    updatedAt: updatedAt ?? this.updatedAt,
 | 
			
		||||
    avatarColor: avatarColor ?? this.avatarColor,
 | 
			
		||||
  );
 | 
			
		||||
  UserEntityData copyWithCompanion(i1.UserEntityCompanion data) {
 | 
			
		||||
    return UserEntityData(
 | 
			
		||||
      id: data.id.present ? data.id.value : this.id,
 | 
			
		||||
      name: data.name.present ? data.name.value : this.name,
 | 
			
		||||
      isAdmin: data.isAdmin.present ? data.isAdmin.value : this.isAdmin,
 | 
			
		||||
      email: data.email.present ? data.email.value : this.email,
 | 
			
		||||
      hasProfileImage: data.hasProfileImage.present
 | 
			
		||||
          ? data.hasProfileImage.value
 | 
			
		||||
@ -558,7 +513,9 @@ class UserEntityData extends i0.DataClass
 | 
			
		||||
      profileChangedAt: data.profileChangedAt.present
 | 
			
		||||
          ? data.profileChangedAt.value
 | 
			
		||||
          : this.profileChangedAt,
 | 
			
		||||
      updatedAt: data.updatedAt.present ? data.updatedAt.value : this.updatedAt,
 | 
			
		||||
      avatarColor: data.avatarColor.present
 | 
			
		||||
          ? data.avatarColor.value
 | 
			
		||||
          : this.avatarColor,
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
@ -567,11 +524,10 @@ class UserEntityData extends i0.DataClass
 | 
			
		||||
    return (StringBuffer('UserEntityData(')
 | 
			
		||||
          ..write('id: $id, ')
 | 
			
		||||
          ..write('name: $name, ')
 | 
			
		||||
          ..write('isAdmin: $isAdmin, ')
 | 
			
		||||
          ..write('email: $email, ')
 | 
			
		||||
          ..write('hasProfileImage: $hasProfileImage, ')
 | 
			
		||||
          ..write('profileChangedAt: $profileChangedAt, ')
 | 
			
		||||
          ..write('updatedAt: $updatedAt')
 | 
			
		||||
          ..write('avatarColor: $avatarColor')
 | 
			
		||||
          ..write(')'))
 | 
			
		||||
        .toString();
 | 
			
		||||
  }
 | 
			
		||||
@ -580,11 +536,10 @@ class UserEntityData extends i0.DataClass
 | 
			
		||||
  int get hashCode => Object.hash(
 | 
			
		||||
    id,
 | 
			
		||||
    name,
 | 
			
		||||
    isAdmin,
 | 
			
		||||
    email,
 | 
			
		||||
    hasProfileImage,
 | 
			
		||||
    profileChangedAt,
 | 
			
		||||
    updatedAt,
 | 
			
		||||
    avatarColor,
 | 
			
		||||
  );
 | 
			
		||||
  @override
 | 
			
		||||
  bool operator ==(Object other) =>
 | 
			
		||||
@ -592,78 +547,70 @@ class UserEntityData extends i0.DataClass
 | 
			
		||||
      (other is i1.UserEntityData &&
 | 
			
		||||
          other.id == this.id &&
 | 
			
		||||
          other.name == this.name &&
 | 
			
		||||
          other.isAdmin == this.isAdmin &&
 | 
			
		||||
          other.email == this.email &&
 | 
			
		||||
          other.hasProfileImage == this.hasProfileImage &&
 | 
			
		||||
          other.profileChangedAt == this.profileChangedAt &&
 | 
			
		||||
          other.updatedAt == this.updatedAt);
 | 
			
		||||
          other.avatarColor == this.avatarColor);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
class UserEntityCompanion extends i0.UpdateCompanion<i1.UserEntityData> {
 | 
			
		||||
  final i0.Value<String> id;
 | 
			
		||||
  final i0.Value<String> name;
 | 
			
		||||
  final i0.Value<bool> isAdmin;
 | 
			
		||||
  final i0.Value<String> email;
 | 
			
		||||
  final i0.Value<bool> hasProfileImage;
 | 
			
		||||
  final i0.Value<DateTime> profileChangedAt;
 | 
			
		||||
  final i0.Value<DateTime> updatedAt;
 | 
			
		||||
  final i0.Value<i2.AvatarColor> avatarColor;
 | 
			
		||||
  const UserEntityCompanion({
 | 
			
		||||
    this.id = const i0.Value.absent(),
 | 
			
		||||
    this.name = const i0.Value.absent(),
 | 
			
		||||
    this.isAdmin = const i0.Value.absent(),
 | 
			
		||||
    this.email = const i0.Value.absent(),
 | 
			
		||||
    this.hasProfileImage = const i0.Value.absent(),
 | 
			
		||||
    this.profileChangedAt = const i0.Value.absent(),
 | 
			
		||||
    this.updatedAt = const i0.Value.absent(),
 | 
			
		||||
    this.avatarColor = const i0.Value.absent(),
 | 
			
		||||
  });
 | 
			
		||||
  UserEntityCompanion.insert({
 | 
			
		||||
    required String id,
 | 
			
		||||
    required String name,
 | 
			
		||||
    this.isAdmin = const i0.Value.absent(),
 | 
			
		||||
    required String email,
 | 
			
		||||
    this.hasProfileImage = const i0.Value.absent(),
 | 
			
		||||
    this.profileChangedAt = const i0.Value.absent(),
 | 
			
		||||
    this.updatedAt = const i0.Value.absent(),
 | 
			
		||||
    this.avatarColor = const i0.Value.absent(),
 | 
			
		||||
  }) : id = i0.Value(id),
 | 
			
		||||
       name = i0.Value(name),
 | 
			
		||||
       email = i0.Value(email);
 | 
			
		||||
  static i0.Insertable<i1.UserEntityData> custom({
 | 
			
		||||
    i0.Expression<String>? id,
 | 
			
		||||
    i0.Expression<String>? name,
 | 
			
		||||
    i0.Expression<bool>? isAdmin,
 | 
			
		||||
    i0.Expression<String>? email,
 | 
			
		||||
    i0.Expression<bool>? hasProfileImage,
 | 
			
		||||
    i0.Expression<DateTime>? profileChangedAt,
 | 
			
		||||
    i0.Expression<DateTime>? updatedAt,
 | 
			
		||||
    i0.Expression<int>? avatarColor,
 | 
			
		||||
  }) {
 | 
			
		||||
    return i0.RawValuesInsertable({
 | 
			
		||||
      if (id != null) 'id': id,
 | 
			
		||||
      if (name != null) 'name': name,
 | 
			
		||||
      if (isAdmin != null) 'is_admin': isAdmin,
 | 
			
		||||
      if (email != null) 'email': email,
 | 
			
		||||
      if (hasProfileImage != null) 'has_profile_image': hasProfileImage,
 | 
			
		||||
      if (profileChangedAt != null) 'profile_changed_at': profileChangedAt,
 | 
			
		||||
      if (updatedAt != null) 'updated_at': updatedAt,
 | 
			
		||||
      if (avatarColor != null) 'avatar_color': avatarColor,
 | 
			
		||||
    });
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  i1.UserEntityCompanion copyWith({
 | 
			
		||||
    i0.Value<String>? id,
 | 
			
		||||
    i0.Value<String>? name,
 | 
			
		||||
    i0.Value<bool>? isAdmin,
 | 
			
		||||
    i0.Value<String>? email,
 | 
			
		||||
    i0.Value<bool>? hasProfileImage,
 | 
			
		||||
    i0.Value<DateTime>? profileChangedAt,
 | 
			
		||||
    i0.Value<DateTime>? updatedAt,
 | 
			
		||||
    i0.Value<i2.AvatarColor>? avatarColor,
 | 
			
		||||
  }) {
 | 
			
		||||
    return i1.UserEntityCompanion(
 | 
			
		||||
      id: id ?? this.id,
 | 
			
		||||
      name: name ?? this.name,
 | 
			
		||||
      isAdmin: isAdmin ?? this.isAdmin,
 | 
			
		||||
      email: email ?? this.email,
 | 
			
		||||
      hasProfileImage: hasProfileImage ?? this.hasProfileImage,
 | 
			
		||||
      profileChangedAt: profileChangedAt ?? this.profileChangedAt,
 | 
			
		||||
      updatedAt: updatedAt ?? this.updatedAt,
 | 
			
		||||
      avatarColor: avatarColor ?? this.avatarColor,
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
@ -676,9 +623,6 @@ class UserEntityCompanion extends i0.UpdateCompanion<i1.UserEntityData> {
 | 
			
		||||
    if (name.present) {
 | 
			
		||||
      map['name'] = i0.Variable<String>(name.value);
 | 
			
		||||
    }
 | 
			
		||||
    if (isAdmin.present) {
 | 
			
		||||
      map['is_admin'] = i0.Variable<bool>(isAdmin.value);
 | 
			
		||||
    }
 | 
			
		||||
    if (email.present) {
 | 
			
		||||
      map['email'] = i0.Variable<String>(email.value);
 | 
			
		||||
    }
 | 
			
		||||
@ -688,8 +632,10 @@ class UserEntityCompanion extends i0.UpdateCompanion<i1.UserEntityData> {
 | 
			
		||||
    if (profileChangedAt.present) {
 | 
			
		||||
      map['profile_changed_at'] = i0.Variable<DateTime>(profileChangedAt.value);
 | 
			
		||||
    }
 | 
			
		||||
    if (updatedAt.present) {
 | 
			
		||||
      map['updated_at'] = i0.Variable<DateTime>(updatedAt.value);
 | 
			
		||||
    if (avatarColor.present) {
 | 
			
		||||
      map['avatar_color'] = i0.Variable<int>(
 | 
			
		||||
        i1.$UserEntityTable.$converteravatarColor.toSql(avatarColor.value),
 | 
			
		||||
      );
 | 
			
		||||
    }
 | 
			
		||||
    return map;
 | 
			
		||||
  }
 | 
			
		||||
@ -699,11 +645,10 @@ class UserEntityCompanion extends i0.UpdateCompanion<i1.UserEntityData> {
 | 
			
		||||
    return (StringBuffer('UserEntityCompanion(')
 | 
			
		||||
          ..write('id: $id, ')
 | 
			
		||||
          ..write('name: $name, ')
 | 
			
		||||
          ..write('isAdmin: $isAdmin, ')
 | 
			
		||||
          ..write('email: $email, ')
 | 
			
		||||
          ..write('hasProfileImage: $hasProfileImage, ')
 | 
			
		||||
          ..write('profileChangedAt: $profileChangedAt, ')
 | 
			
		||||
          ..write('updatedAt: $updatedAt')
 | 
			
		||||
          ..write('avatarColor: $avatarColor')
 | 
			
		||||
          ..write(')'))
 | 
			
		||||
        .toString();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
@ -5,6 +5,7 @@ import 'package:drift_flutter/drift_flutter.dart';
 | 
			
		||||
import 'package:flutter/foundation.dart';
 | 
			
		||||
import 'package:immich_mobile/domain/interfaces/db.interface.dart';
 | 
			
		||||
import 'package:immich_mobile/infrastructure/entities/asset_face.entity.dart';
 | 
			
		||||
import 'package:immich_mobile/infrastructure/entities/auth_user.entity.dart';
 | 
			
		||||
import 'package:immich_mobile/infrastructure/entities/exif.entity.dart';
 | 
			
		||||
import 'package:immich_mobile/infrastructure/entities/local_album.entity.dart';
 | 
			
		||||
import 'package:immich_mobile/infrastructure/entities/local_album_asset.entity.dart';
 | 
			
		||||
@ -43,6 +44,7 @@ class IsarDatabaseRepository implements IDatabaseRepository {
 | 
			
		||||
 | 
			
		||||
@DriftDatabase(
 | 
			
		||||
  tables: [
 | 
			
		||||
    AuthUserEntity,
 | 
			
		||||
    UserEntity,
 | 
			
		||||
    UserMetadataEntity,
 | 
			
		||||
    PartnerEntity,
 | 
			
		||||
@ -68,7 +70,7 @@ class Drift extends $Drift implements IDatabaseRepository {
 | 
			
		||||
    : super(executor ?? driftDatabase(name: 'immich', native: const DriftNativeOptions(shareAcrossIsolates: true)));
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
  int get schemaVersion => 9;
 | 
			
		||||
  int get schemaVersion => 10;
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
  MigrationStrategy get migration => MigrationStrategy(
 | 
			
		||||
@ -126,6 +128,11 @@ class Drift extends $Drift implements IDatabaseRepository {
 | 
			
		||||
          from8To9: (m, v9) async {
 | 
			
		||||
            await m.addColumn(v9.localAlbumEntity, v9.localAlbumEntity.linkedRemoteAlbumId);
 | 
			
		||||
          },
 | 
			
		||||
          from9To10: (m, v10) async {
 | 
			
		||||
            await m.createTable(v10.authUserEntity);
 | 
			
		||||
            await m.addColumn(v10.userEntity, v10.userEntity.avatarColor);
 | 
			
		||||
            await m.alterTable(TableMigration(v10.userEntity));
 | 
			
		||||
          },
 | 
			
		||||
        ),
 | 
			
		||||
      );
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -15,29 +15,31 @@ import 'package:immich_mobile/infrastructure/entities/local_album.entity.drift.d
 | 
			
		||||
    as i6;
 | 
			
		||||
import 'package:immich_mobile/infrastructure/entities/local_album_asset.entity.drift.dart'
 | 
			
		||||
    as i7;
 | 
			
		||||
import 'package:immich_mobile/infrastructure/entities/user_metadata.entity.drift.dart'
 | 
			
		||||
import 'package:immich_mobile/infrastructure/entities/auth_user.entity.drift.dart'
 | 
			
		||||
    as i8;
 | 
			
		||||
import 'package:immich_mobile/infrastructure/entities/partner.entity.drift.dart'
 | 
			
		||||
import 'package:immich_mobile/infrastructure/entities/user_metadata.entity.drift.dart'
 | 
			
		||||
    as i9;
 | 
			
		||||
import 'package:immich_mobile/infrastructure/entities/exif.entity.drift.dart'
 | 
			
		||||
import 'package:immich_mobile/infrastructure/entities/partner.entity.drift.dart'
 | 
			
		||||
    as i10;
 | 
			
		||||
import 'package:immich_mobile/infrastructure/entities/remote_album_asset.entity.drift.dart'
 | 
			
		||||
import 'package:immich_mobile/infrastructure/entities/exif.entity.drift.dart'
 | 
			
		||||
    as i11;
 | 
			
		||||
import 'package:immich_mobile/infrastructure/entities/remote_album_user.entity.drift.dart'
 | 
			
		||||
import 'package:immich_mobile/infrastructure/entities/remote_album_asset.entity.drift.dart'
 | 
			
		||||
    as i12;
 | 
			
		||||
import 'package:immich_mobile/infrastructure/entities/memory.entity.drift.dart'
 | 
			
		||||
import 'package:immich_mobile/infrastructure/entities/remote_album_user.entity.drift.dart'
 | 
			
		||||
    as i13;
 | 
			
		||||
import 'package:immich_mobile/infrastructure/entities/memory_asset.entity.drift.dart'
 | 
			
		||||
import 'package:immich_mobile/infrastructure/entities/memory.entity.drift.dart'
 | 
			
		||||
    as i14;
 | 
			
		||||
import 'package:immich_mobile/infrastructure/entities/person.entity.drift.dart'
 | 
			
		||||
import 'package:immich_mobile/infrastructure/entities/memory_asset.entity.drift.dart'
 | 
			
		||||
    as i15;
 | 
			
		||||
import 'package:immich_mobile/infrastructure/entities/asset_face.entity.drift.dart'
 | 
			
		||||
import 'package:immich_mobile/infrastructure/entities/person.entity.drift.dart'
 | 
			
		||||
    as i16;
 | 
			
		||||
import 'package:immich_mobile/infrastructure/entities/store.entity.drift.dart'
 | 
			
		||||
import 'package:immich_mobile/infrastructure/entities/asset_face.entity.drift.dart'
 | 
			
		||||
    as i17;
 | 
			
		||||
import 'package:immich_mobile/infrastructure/entities/merged_asset.drift.dart'
 | 
			
		||||
import 'package:immich_mobile/infrastructure/entities/store.entity.drift.dart'
 | 
			
		||||
    as i18;
 | 
			
		||||
import 'package:drift/internal/modular.dart' as i19;
 | 
			
		||||
import 'package:immich_mobile/infrastructure/entities/merged_asset.drift.dart'
 | 
			
		||||
    as i19;
 | 
			
		||||
import 'package:drift/internal/modular.dart' as i20;
 | 
			
		||||
 | 
			
		||||
abstract class $Drift extends i0.GeneratedDatabase {
 | 
			
		||||
  $Drift(i0.QueryExecutor e) : super(e);
 | 
			
		||||
@ -54,27 +56,30 @@ abstract class $Drift extends i0.GeneratedDatabase {
 | 
			
		||||
      .$LocalAlbumEntityTable(this);
 | 
			
		||||
  late final i7.$LocalAlbumAssetEntityTable localAlbumAssetEntity = i7
 | 
			
		||||
      .$LocalAlbumAssetEntityTable(this);
 | 
			
		||||
  late final i8.$UserMetadataEntityTable userMetadataEntity = i8
 | 
			
		||||
      .$UserMetadataEntityTable(this);
 | 
			
		||||
  late final i9.$PartnerEntityTable partnerEntity = i9.$PartnerEntityTable(
 | 
			
		||||
  late final i8.$AuthUserEntityTable authUserEntity = i8.$AuthUserEntityTable(
 | 
			
		||||
    this,
 | 
			
		||||
  );
 | 
			
		||||
  late final i10.$RemoteExifEntityTable remoteExifEntity = i10
 | 
			
		||||
      .$RemoteExifEntityTable(this);
 | 
			
		||||
  late final i11.$RemoteAlbumAssetEntityTable remoteAlbumAssetEntity = i11
 | 
			
		||||
      .$RemoteAlbumAssetEntityTable(this);
 | 
			
		||||
  late final i12.$RemoteAlbumUserEntityTable remoteAlbumUserEntity = i12
 | 
			
		||||
      .$RemoteAlbumUserEntityTable(this);
 | 
			
		||||
  late final i13.$MemoryEntityTable memoryEntity = i13.$MemoryEntityTable(this);
 | 
			
		||||
  late final i14.$MemoryAssetEntityTable memoryAssetEntity = i14
 | 
			
		||||
      .$MemoryAssetEntityTable(this);
 | 
			
		||||
  late final i15.$PersonEntityTable personEntity = i15.$PersonEntityTable(this);
 | 
			
		||||
  late final i16.$AssetFaceEntityTable assetFaceEntity = i16
 | 
			
		||||
      .$AssetFaceEntityTable(this);
 | 
			
		||||
  late final i17.$StoreEntityTable storeEntity = i17.$StoreEntityTable(this);
 | 
			
		||||
  i18.MergedAssetDrift get mergedAssetDrift => i19.ReadDatabaseContainer(
 | 
			
		||||
  late final i9.$UserMetadataEntityTable userMetadataEntity = i9
 | 
			
		||||
      .$UserMetadataEntityTable(this);
 | 
			
		||||
  late final i10.$PartnerEntityTable partnerEntity = i10.$PartnerEntityTable(
 | 
			
		||||
    this,
 | 
			
		||||
  ).accessor<i18.MergedAssetDrift>(i18.MergedAssetDrift.new);
 | 
			
		||||
  );
 | 
			
		||||
  late final i11.$RemoteExifEntityTable remoteExifEntity = i11
 | 
			
		||||
      .$RemoteExifEntityTable(this);
 | 
			
		||||
  late final i12.$RemoteAlbumAssetEntityTable remoteAlbumAssetEntity = i12
 | 
			
		||||
      .$RemoteAlbumAssetEntityTable(this);
 | 
			
		||||
  late final i13.$RemoteAlbumUserEntityTable remoteAlbumUserEntity = i13
 | 
			
		||||
      .$RemoteAlbumUserEntityTable(this);
 | 
			
		||||
  late final i14.$MemoryEntityTable memoryEntity = i14.$MemoryEntityTable(this);
 | 
			
		||||
  late final i15.$MemoryAssetEntityTable memoryAssetEntity = i15
 | 
			
		||||
      .$MemoryAssetEntityTable(this);
 | 
			
		||||
  late final i16.$PersonEntityTable personEntity = i16.$PersonEntityTable(this);
 | 
			
		||||
  late final i17.$AssetFaceEntityTable assetFaceEntity = i17
 | 
			
		||||
      .$AssetFaceEntityTable(this);
 | 
			
		||||
  late final i18.$StoreEntityTable storeEntity = i18.$StoreEntityTable(this);
 | 
			
		||||
  i19.MergedAssetDrift get mergedAssetDrift => i20.ReadDatabaseContainer(
 | 
			
		||||
    this,
 | 
			
		||||
  ).accessor<i19.MergedAssetDrift>(i19.MergedAssetDrift.new);
 | 
			
		||||
  @override
 | 
			
		||||
  Iterable<i0.TableInfo<i0.Table, Object?>> get allTables =>
 | 
			
		||||
      allSchemaEntities.whereType<i0.TableInfo<i0.Table, Object?>>();
 | 
			
		||||
@ -92,6 +97,7 @@ abstract class $Drift extends i0.GeneratedDatabase {
 | 
			
		||||
    i2.uQRemoteAssetsOwnerChecksum,
 | 
			
		||||
    i2.uQRemoteAssetsOwnerLibraryChecksum,
 | 
			
		||||
    i2.idxRemoteAssetChecksum,
 | 
			
		||||
    authUserEntity,
 | 
			
		||||
    userMetadataEntity,
 | 
			
		||||
    partnerEntity,
 | 
			
		||||
    remoteExifEntity,
 | 
			
		||||
@ -102,7 +108,7 @@ abstract class $Drift extends i0.GeneratedDatabase {
 | 
			
		||||
    personEntity,
 | 
			
		||||
    assetFaceEntity,
 | 
			
		||||
    storeEntity,
 | 
			
		||||
    i10.idxLatLng,
 | 
			
		||||
    i11.idxLatLng,
 | 
			
		||||
  ];
 | 
			
		||||
  @override
 | 
			
		||||
  i0.StreamQueryUpdateRules
 | 
			
		||||
@ -305,27 +311,29 @@ class $DriftManager {
 | 
			
		||||
      i6.$$LocalAlbumEntityTableTableManager(_db, _db.localAlbumEntity);
 | 
			
		||||
  i7.$$LocalAlbumAssetEntityTableTableManager get localAlbumAssetEntity => i7
 | 
			
		||||
      .$$LocalAlbumAssetEntityTableTableManager(_db, _db.localAlbumAssetEntity);
 | 
			
		||||
  i8.$$UserMetadataEntityTableTableManager get userMetadataEntity =>
 | 
			
		||||
      i8.$$UserMetadataEntityTableTableManager(_db, _db.userMetadataEntity);
 | 
			
		||||
  i9.$$PartnerEntityTableTableManager get partnerEntity =>
 | 
			
		||||
      i9.$$PartnerEntityTableTableManager(_db, _db.partnerEntity);
 | 
			
		||||
  i10.$$RemoteExifEntityTableTableManager get remoteExifEntity =>
 | 
			
		||||
      i10.$$RemoteExifEntityTableTableManager(_db, _db.remoteExifEntity);
 | 
			
		||||
  i11.$$RemoteAlbumAssetEntityTableTableManager get remoteAlbumAssetEntity =>
 | 
			
		||||
      i11.$$RemoteAlbumAssetEntityTableTableManager(
 | 
			
		||||
  i8.$$AuthUserEntityTableTableManager get authUserEntity =>
 | 
			
		||||
      i8.$$AuthUserEntityTableTableManager(_db, _db.authUserEntity);
 | 
			
		||||
  i9.$$UserMetadataEntityTableTableManager get userMetadataEntity =>
 | 
			
		||||
      i9.$$UserMetadataEntityTableTableManager(_db, _db.userMetadataEntity);
 | 
			
		||||
  i10.$$PartnerEntityTableTableManager get partnerEntity =>
 | 
			
		||||
      i10.$$PartnerEntityTableTableManager(_db, _db.partnerEntity);
 | 
			
		||||
  i11.$$RemoteExifEntityTableTableManager get remoteExifEntity =>
 | 
			
		||||
      i11.$$RemoteExifEntityTableTableManager(_db, _db.remoteExifEntity);
 | 
			
		||||
  i12.$$RemoteAlbumAssetEntityTableTableManager get remoteAlbumAssetEntity =>
 | 
			
		||||
      i12.$$RemoteAlbumAssetEntityTableTableManager(
 | 
			
		||||
        _db,
 | 
			
		||||
        _db.remoteAlbumAssetEntity,
 | 
			
		||||
      );
 | 
			
		||||
  i12.$$RemoteAlbumUserEntityTableTableManager get remoteAlbumUserEntity => i12
 | 
			
		||||
  i13.$$RemoteAlbumUserEntityTableTableManager get remoteAlbumUserEntity => i13
 | 
			
		||||
      .$$RemoteAlbumUserEntityTableTableManager(_db, _db.remoteAlbumUserEntity);
 | 
			
		||||
  i13.$$MemoryEntityTableTableManager get memoryEntity =>
 | 
			
		||||
      i13.$$MemoryEntityTableTableManager(_db, _db.memoryEntity);
 | 
			
		||||
  i14.$$MemoryAssetEntityTableTableManager get memoryAssetEntity =>
 | 
			
		||||
      i14.$$MemoryAssetEntityTableTableManager(_db, _db.memoryAssetEntity);
 | 
			
		||||
  i15.$$PersonEntityTableTableManager get personEntity =>
 | 
			
		||||
      i15.$$PersonEntityTableTableManager(_db, _db.personEntity);
 | 
			
		||||
  i16.$$AssetFaceEntityTableTableManager get assetFaceEntity =>
 | 
			
		||||
      i16.$$AssetFaceEntityTableTableManager(_db, _db.assetFaceEntity);
 | 
			
		||||
  i17.$$StoreEntityTableTableManager get storeEntity =>
 | 
			
		||||
      i17.$$StoreEntityTableTableManager(_db, _db.storeEntity);
 | 
			
		||||
  i14.$$MemoryEntityTableTableManager get memoryEntity =>
 | 
			
		||||
      i14.$$MemoryEntityTableTableManager(_db, _db.memoryEntity);
 | 
			
		||||
  i15.$$MemoryAssetEntityTableTableManager get memoryAssetEntity =>
 | 
			
		||||
      i15.$$MemoryAssetEntityTableTableManager(_db, _db.memoryAssetEntity);
 | 
			
		||||
  i16.$$PersonEntityTableTableManager get personEntity =>
 | 
			
		||||
      i16.$$PersonEntityTableTableManager(_db, _db.personEntity);
 | 
			
		||||
  i17.$$AssetFaceEntityTableTableManager get assetFaceEntity =>
 | 
			
		||||
      i17.$$AssetFaceEntityTableTableManager(_db, _db.assetFaceEntity);
 | 
			
		||||
  i18.$$StoreEntityTableTableManager get storeEntity =>
 | 
			
		||||
      i18.$$StoreEntityTableTableManager(_db, _db.storeEntity);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -3820,6 +3820,456 @@ i1.GeneratedColumn<String> _column_90(String aliasedName) =>
 | 
			
		||||
        'REFERENCES remote_album_entity (id) ON DELETE SET NULL',
 | 
			
		||||
      ),
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
final class Schema10 extends i0.VersionedSchema {
 | 
			
		||||
  Schema10({required super.database}) : super(version: 10);
 | 
			
		||||
  @override
 | 
			
		||||
  late final List<i1.DatabaseSchemaEntity> entities = [
 | 
			
		||||
    userEntity,
 | 
			
		||||
    remoteAssetEntity,
 | 
			
		||||
    stackEntity,
 | 
			
		||||
    localAssetEntity,
 | 
			
		||||
    remoteAlbumEntity,
 | 
			
		||||
    localAlbumEntity,
 | 
			
		||||
    localAlbumAssetEntity,
 | 
			
		||||
    idxLocalAssetChecksum,
 | 
			
		||||
    idxRemoteAssetOwnerChecksum,
 | 
			
		||||
    uQRemoteAssetsOwnerChecksum,
 | 
			
		||||
    uQRemoteAssetsOwnerLibraryChecksum,
 | 
			
		||||
    idxRemoteAssetChecksum,
 | 
			
		||||
    authUserEntity,
 | 
			
		||||
    userMetadataEntity,
 | 
			
		||||
    partnerEntity,
 | 
			
		||||
    remoteExifEntity,
 | 
			
		||||
    remoteAlbumAssetEntity,
 | 
			
		||||
    remoteAlbumUserEntity,
 | 
			
		||||
    memoryEntity,
 | 
			
		||||
    memoryAssetEntity,
 | 
			
		||||
    personEntity,
 | 
			
		||||
    assetFaceEntity,
 | 
			
		||||
    storeEntity,
 | 
			
		||||
    idxLatLng,
 | 
			
		||||
  ];
 | 
			
		||||
  late final Shape20 userEntity = Shape20(
 | 
			
		||||
    source: i0.VersionedTable(
 | 
			
		||||
      entityName: 'user_entity',
 | 
			
		||||
      withoutRowId: true,
 | 
			
		||||
      isStrict: true,
 | 
			
		||||
      tableConstraints: ['PRIMARY KEY(id)'],
 | 
			
		||||
      columns: [
 | 
			
		||||
        _column_0,
 | 
			
		||||
        _column_1,
 | 
			
		||||
        _column_3,
 | 
			
		||||
        _column_84,
 | 
			
		||||
        _column_85,
 | 
			
		||||
        _column_91,
 | 
			
		||||
      ],
 | 
			
		||||
      attachedDatabase: database,
 | 
			
		||||
    ),
 | 
			
		||||
    alias: null,
 | 
			
		||||
  );
 | 
			
		||||
  late final Shape17 remoteAssetEntity = Shape17(
 | 
			
		||||
    source: i0.VersionedTable(
 | 
			
		||||
      entityName: 'remote_asset_entity',
 | 
			
		||||
      withoutRowId: true,
 | 
			
		||||
      isStrict: true,
 | 
			
		||||
      tableConstraints: ['PRIMARY KEY(id)'],
 | 
			
		||||
      columns: [
 | 
			
		||||
        _column_1,
 | 
			
		||||
        _column_8,
 | 
			
		||||
        _column_9,
 | 
			
		||||
        _column_5,
 | 
			
		||||
        _column_10,
 | 
			
		||||
        _column_11,
 | 
			
		||||
        _column_12,
 | 
			
		||||
        _column_0,
 | 
			
		||||
        _column_13,
 | 
			
		||||
        _column_14,
 | 
			
		||||
        _column_15,
 | 
			
		||||
        _column_16,
 | 
			
		||||
        _column_17,
 | 
			
		||||
        _column_18,
 | 
			
		||||
        _column_19,
 | 
			
		||||
        _column_20,
 | 
			
		||||
        _column_21,
 | 
			
		||||
        _column_86,
 | 
			
		||||
      ],
 | 
			
		||||
      attachedDatabase: database,
 | 
			
		||||
    ),
 | 
			
		||||
    alias: null,
 | 
			
		||||
  );
 | 
			
		||||
  late final Shape3 stackEntity = Shape3(
 | 
			
		||||
    source: i0.VersionedTable(
 | 
			
		||||
      entityName: 'stack_entity',
 | 
			
		||||
      withoutRowId: true,
 | 
			
		||||
      isStrict: true,
 | 
			
		||||
      tableConstraints: ['PRIMARY KEY(id)'],
 | 
			
		||||
      columns: [_column_0, _column_9, _column_5, _column_15, _column_75],
 | 
			
		||||
      attachedDatabase: database,
 | 
			
		||||
    ),
 | 
			
		||||
    alias: null,
 | 
			
		||||
  );
 | 
			
		||||
  late final Shape2 localAssetEntity = Shape2(
 | 
			
		||||
    source: i0.VersionedTable(
 | 
			
		||||
      entityName: 'local_asset_entity',
 | 
			
		||||
      withoutRowId: true,
 | 
			
		||||
      isStrict: true,
 | 
			
		||||
      tableConstraints: ['PRIMARY KEY(id)'],
 | 
			
		||||
      columns: [
 | 
			
		||||
        _column_1,
 | 
			
		||||
        _column_8,
 | 
			
		||||
        _column_9,
 | 
			
		||||
        _column_5,
 | 
			
		||||
        _column_10,
 | 
			
		||||
        _column_11,
 | 
			
		||||
        _column_12,
 | 
			
		||||
        _column_0,
 | 
			
		||||
        _column_22,
 | 
			
		||||
        _column_14,
 | 
			
		||||
        _column_23,
 | 
			
		||||
      ],
 | 
			
		||||
      attachedDatabase: database,
 | 
			
		||||
    ),
 | 
			
		||||
    alias: null,
 | 
			
		||||
  );
 | 
			
		||||
  late final Shape9 remoteAlbumEntity = Shape9(
 | 
			
		||||
    source: i0.VersionedTable(
 | 
			
		||||
      entityName: 'remote_album_entity',
 | 
			
		||||
      withoutRowId: true,
 | 
			
		||||
      isStrict: true,
 | 
			
		||||
      tableConstraints: ['PRIMARY KEY(id)'],
 | 
			
		||||
      columns: [
 | 
			
		||||
        _column_0,
 | 
			
		||||
        _column_1,
 | 
			
		||||
        _column_56,
 | 
			
		||||
        _column_9,
 | 
			
		||||
        _column_5,
 | 
			
		||||
        _column_15,
 | 
			
		||||
        _column_57,
 | 
			
		||||
        _column_58,
 | 
			
		||||
        _column_59,
 | 
			
		||||
      ],
 | 
			
		||||
      attachedDatabase: database,
 | 
			
		||||
    ),
 | 
			
		||||
    alias: null,
 | 
			
		||||
  );
 | 
			
		||||
  late final Shape19 localAlbumEntity = Shape19(
 | 
			
		||||
    source: i0.VersionedTable(
 | 
			
		||||
      entityName: 'local_album_entity',
 | 
			
		||||
      withoutRowId: true,
 | 
			
		||||
      isStrict: true,
 | 
			
		||||
      tableConstraints: ['PRIMARY KEY(id)'],
 | 
			
		||||
      columns: [
 | 
			
		||||
        _column_0,
 | 
			
		||||
        _column_1,
 | 
			
		||||
        _column_5,
 | 
			
		||||
        _column_31,
 | 
			
		||||
        _column_32,
 | 
			
		||||
        _column_90,
 | 
			
		||||
        _column_33,
 | 
			
		||||
      ],
 | 
			
		||||
      attachedDatabase: database,
 | 
			
		||||
    ),
 | 
			
		||||
    alias: null,
 | 
			
		||||
  );
 | 
			
		||||
  late final Shape7 localAlbumAssetEntity = Shape7(
 | 
			
		||||
    source: i0.VersionedTable(
 | 
			
		||||
      entityName: 'local_album_asset_entity',
 | 
			
		||||
      withoutRowId: true,
 | 
			
		||||
      isStrict: true,
 | 
			
		||||
      tableConstraints: ['PRIMARY KEY(asset_id, album_id)'],
 | 
			
		||||
      columns: [_column_34, _column_35],
 | 
			
		||||
      attachedDatabase: database,
 | 
			
		||||
    ),
 | 
			
		||||
    alias: null,
 | 
			
		||||
  );
 | 
			
		||||
  final i1.Index idxLocalAssetChecksum = i1.Index(
 | 
			
		||||
    'idx_local_asset_checksum',
 | 
			
		||||
    'CREATE INDEX IF NOT EXISTS idx_local_asset_checksum ON local_asset_entity (checksum)',
 | 
			
		||||
  );
 | 
			
		||||
  final i1.Index idxRemoteAssetOwnerChecksum = i1.Index(
 | 
			
		||||
    'idx_remote_asset_owner_checksum',
 | 
			
		||||
    'CREATE INDEX IF NOT EXISTS idx_remote_asset_owner_checksum ON remote_asset_entity (owner_id, checksum)',
 | 
			
		||||
  );
 | 
			
		||||
  final i1.Index uQRemoteAssetsOwnerChecksum = i1.Index(
 | 
			
		||||
    'UQ_remote_assets_owner_checksum',
 | 
			
		||||
    'CREATE UNIQUE INDEX IF NOT EXISTS UQ_remote_assets_owner_checksum ON remote_asset_entity (owner_id, checksum) WHERE(library_id IS NULL)',
 | 
			
		||||
  );
 | 
			
		||||
  final i1.Index uQRemoteAssetsOwnerLibraryChecksum = i1.Index(
 | 
			
		||||
    'UQ_remote_assets_owner_library_checksum',
 | 
			
		||||
    'CREATE UNIQUE INDEX IF NOT EXISTS UQ_remote_assets_owner_library_checksum ON remote_asset_entity (owner_id, library_id, checksum) WHERE(library_id IS NOT NULL)',
 | 
			
		||||
  );
 | 
			
		||||
  final i1.Index idxRemoteAssetChecksum = i1.Index(
 | 
			
		||||
    'idx_remote_asset_checksum',
 | 
			
		||||
    'CREATE INDEX IF NOT EXISTS idx_remote_asset_checksum ON remote_asset_entity (checksum)',
 | 
			
		||||
  );
 | 
			
		||||
  late final Shape21 authUserEntity = Shape21(
 | 
			
		||||
    source: i0.VersionedTable(
 | 
			
		||||
      entityName: 'auth_user_entity',
 | 
			
		||||
      withoutRowId: true,
 | 
			
		||||
      isStrict: true,
 | 
			
		||||
      tableConstraints: ['PRIMARY KEY(id)'],
 | 
			
		||||
      columns: [
 | 
			
		||||
        _column_0,
 | 
			
		||||
        _column_1,
 | 
			
		||||
        _column_3,
 | 
			
		||||
        _column_2,
 | 
			
		||||
        _column_84,
 | 
			
		||||
        _column_85,
 | 
			
		||||
        _column_92,
 | 
			
		||||
        _column_93,
 | 
			
		||||
        _column_7,
 | 
			
		||||
        _column_94,
 | 
			
		||||
      ],
 | 
			
		||||
      attachedDatabase: database,
 | 
			
		||||
    ),
 | 
			
		||||
    alias: null,
 | 
			
		||||
  );
 | 
			
		||||
  late final Shape4 userMetadataEntity = Shape4(
 | 
			
		||||
    source: i0.VersionedTable(
 | 
			
		||||
      entityName: 'user_metadata_entity',
 | 
			
		||||
      withoutRowId: true,
 | 
			
		||||
      isStrict: true,
 | 
			
		||||
      tableConstraints: ['PRIMARY KEY(user_id, "key")'],
 | 
			
		||||
      columns: [_column_25, _column_26, _column_27],
 | 
			
		||||
      attachedDatabase: database,
 | 
			
		||||
    ),
 | 
			
		||||
    alias: null,
 | 
			
		||||
  );
 | 
			
		||||
  late final Shape5 partnerEntity = Shape5(
 | 
			
		||||
    source: i0.VersionedTable(
 | 
			
		||||
      entityName: 'partner_entity',
 | 
			
		||||
      withoutRowId: true,
 | 
			
		||||
      isStrict: true,
 | 
			
		||||
      tableConstraints: ['PRIMARY KEY(shared_by_id, shared_with_id)'],
 | 
			
		||||
      columns: [_column_28, _column_29, _column_30],
 | 
			
		||||
      attachedDatabase: database,
 | 
			
		||||
    ),
 | 
			
		||||
    alias: null,
 | 
			
		||||
  );
 | 
			
		||||
  late final Shape8 remoteExifEntity = Shape8(
 | 
			
		||||
    source: i0.VersionedTable(
 | 
			
		||||
      entityName: 'remote_exif_entity',
 | 
			
		||||
      withoutRowId: true,
 | 
			
		||||
      isStrict: true,
 | 
			
		||||
      tableConstraints: ['PRIMARY KEY(asset_id)'],
 | 
			
		||||
      columns: [
 | 
			
		||||
        _column_36,
 | 
			
		||||
        _column_37,
 | 
			
		||||
        _column_38,
 | 
			
		||||
        _column_39,
 | 
			
		||||
        _column_40,
 | 
			
		||||
        _column_41,
 | 
			
		||||
        _column_11,
 | 
			
		||||
        _column_10,
 | 
			
		||||
        _column_42,
 | 
			
		||||
        _column_43,
 | 
			
		||||
        _column_44,
 | 
			
		||||
        _column_45,
 | 
			
		||||
        _column_46,
 | 
			
		||||
        _column_47,
 | 
			
		||||
        _column_48,
 | 
			
		||||
        _column_49,
 | 
			
		||||
        _column_50,
 | 
			
		||||
        _column_51,
 | 
			
		||||
        _column_52,
 | 
			
		||||
        _column_53,
 | 
			
		||||
        _column_54,
 | 
			
		||||
        _column_55,
 | 
			
		||||
      ],
 | 
			
		||||
      attachedDatabase: database,
 | 
			
		||||
    ),
 | 
			
		||||
    alias: null,
 | 
			
		||||
  );
 | 
			
		||||
  late final Shape7 remoteAlbumAssetEntity = Shape7(
 | 
			
		||||
    source: i0.VersionedTable(
 | 
			
		||||
      entityName: 'remote_album_asset_entity',
 | 
			
		||||
      withoutRowId: true,
 | 
			
		||||
      isStrict: true,
 | 
			
		||||
      tableConstraints: ['PRIMARY KEY(asset_id, album_id)'],
 | 
			
		||||
      columns: [_column_36, _column_60],
 | 
			
		||||
      attachedDatabase: database,
 | 
			
		||||
    ),
 | 
			
		||||
    alias: null,
 | 
			
		||||
  );
 | 
			
		||||
  late final Shape10 remoteAlbumUserEntity = Shape10(
 | 
			
		||||
    source: i0.VersionedTable(
 | 
			
		||||
      entityName: 'remote_album_user_entity',
 | 
			
		||||
      withoutRowId: true,
 | 
			
		||||
      isStrict: true,
 | 
			
		||||
      tableConstraints: ['PRIMARY KEY(album_id, user_id)'],
 | 
			
		||||
      columns: [_column_60, _column_25, _column_61],
 | 
			
		||||
      attachedDatabase: database,
 | 
			
		||||
    ),
 | 
			
		||||
    alias: null,
 | 
			
		||||
  );
 | 
			
		||||
  late final Shape11 memoryEntity = Shape11(
 | 
			
		||||
    source: i0.VersionedTable(
 | 
			
		||||
      entityName: 'memory_entity',
 | 
			
		||||
      withoutRowId: true,
 | 
			
		||||
      isStrict: true,
 | 
			
		||||
      tableConstraints: ['PRIMARY KEY(id)'],
 | 
			
		||||
      columns: [
 | 
			
		||||
        _column_0,
 | 
			
		||||
        _column_9,
 | 
			
		||||
        _column_5,
 | 
			
		||||
        _column_18,
 | 
			
		||||
        _column_15,
 | 
			
		||||
        _column_8,
 | 
			
		||||
        _column_62,
 | 
			
		||||
        _column_63,
 | 
			
		||||
        _column_64,
 | 
			
		||||
        _column_65,
 | 
			
		||||
        _column_66,
 | 
			
		||||
        _column_67,
 | 
			
		||||
      ],
 | 
			
		||||
      attachedDatabase: database,
 | 
			
		||||
    ),
 | 
			
		||||
    alias: null,
 | 
			
		||||
  );
 | 
			
		||||
  late final Shape12 memoryAssetEntity = Shape12(
 | 
			
		||||
    source: i0.VersionedTable(
 | 
			
		||||
      entityName: 'memory_asset_entity',
 | 
			
		||||
      withoutRowId: true,
 | 
			
		||||
      isStrict: true,
 | 
			
		||||
      tableConstraints: ['PRIMARY KEY(asset_id, memory_id)'],
 | 
			
		||||
      columns: [_column_36, _column_68],
 | 
			
		||||
      attachedDatabase: database,
 | 
			
		||||
    ),
 | 
			
		||||
    alias: null,
 | 
			
		||||
  );
 | 
			
		||||
  late final Shape14 personEntity = Shape14(
 | 
			
		||||
    source: i0.VersionedTable(
 | 
			
		||||
      entityName: 'person_entity',
 | 
			
		||||
      withoutRowId: true,
 | 
			
		||||
      isStrict: true,
 | 
			
		||||
      tableConstraints: ['PRIMARY KEY(id)'],
 | 
			
		||||
      columns: [
 | 
			
		||||
        _column_0,
 | 
			
		||||
        _column_9,
 | 
			
		||||
        _column_5,
 | 
			
		||||
        _column_15,
 | 
			
		||||
        _column_1,
 | 
			
		||||
        _column_69,
 | 
			
		||||
        _column_71,
 | 
			
		||||
        _column_72,
 | 
			
		||||
        _column_73,
 | 
			
		||||
        _column_74,
 | 
			
		||||
      ],
 | 
			
		||||
      attachedDatabase: database,
 | 
			
		||||
    ),
 | 
			
		||||
    alias: null,
 | 
			
		||||
  );
 | 
			
		||||
  late final Shape15 assetFaceEntity = Shape15(
 | 
			
		||||
    source: i0.VersionedTable(
 | 
			
		||||
      entityName: 'asset_face_entity',
 | 
			
		||||
      withoutRowId: true,
 | 
			
		||||
      isStrict: true,
 | 
			
		||||
      tableConstraints: ['PRIMARY KEY(id)'],
 | 
			
		||||
      columns: [
 | 
			
		||||
        _column_0,
 | 
			
		||||
        _column_36,
 | 
			
		||||
        _column_76,
 | 
			
		||||
        _column_77,
 | 
			
		||||
        _column_78,
 | 
			
		||||
        _column_79,
 | 
			
		||||
        _column_80,
 | 
			
		||||
        _column_81,
 | 
			
		||||
        _column_82,
 | 
			
		||||
        _column_83,
 | 
			
		||||
      ],
 | 
			
		||||
      attachedDatabase: database,
 | 
			
		||||
    ),
 | 
			
		||||
    alias: null,
 | 
			
		||||
  );
 | 
			
		||||
  late final Shape18 storeEntity = Shape18(
 | 
			
		||||
    source: i0.VersionedTable(
 | 
			
		||||
      entityName: 'store_entity',
 | 
			
		||||
      withoutRowId: true,
 | 
			
		||||
      isStrict: true,
 | 
			
		||||
      tableConstraints: ['PRIMARY KEY(id)'],
 | 
			
		||||
      columns: [_column_87, _column_88, _column_89],
 | 
			
		||||
      attachedDatabase: database,
 | 
			
		||||
    ),
 | 
			
		||||
    alias: null,
 | 
			
		||||
  );
 | 
			
		||||
  final i1.Index idxLatLng = i1.Index(
 | 
			
		||||
    'idx_lat_lng',
 | 
			
		||||
    'CREATE INDEX IF NOT EXISTS idx_lat_lng ON remote_exif_entity (latitude, longitude)',
 | 
			
		||||
  );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
class Shape20 extends i0.VersionedTable {
 | 
			
		||||
  Shape20({required super.source, required super.alias}) : super.aliased();
 | 
			
		||||
  i1.GeneratedColumn<String> get id =>
 | 
			
		||||
      columnsByName['id']! as i1.GeneratedColumn<String>;
 | 
			
		||||
  i1.GeneratedColumn<String> get name =>
 | 
			
		||||
      columnsByName['name']! as i1.GeneratedColumn<String>;
 | 
			
		||||
  i1.GeneratedColumn<String> get email =>
 | 
			
		||||
      columnsByName['email']! as i1.GeneratedColumn<String>;
 | 
			
		||||
  i1.GeneratedColumn<bool> get hasProfileImage =>
 | 
			
		||||
      columnsByName['has_profile_image']! as i1.GeneratedColumn<bool>;
 | 
			
		||||
  i1.GeneratedColumn<DateTime> get profileChangedAt =>
 | 
			
		||||
      columnsByName['profile_changed_at']! as i1.GeneratedColumn<DateTime>;
 | 
			
		||||
  i1.GeneratedColumn<int> get avatarColor =>
 | 
			
		||||
      columnsByName['avatar_color']! as i1.GeneratedColumn<int>;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
i1.GeneratedColumn<int> _column_91(String aliasedName) =>
 | 
			
		||||
    i1.GeneratedColumn<int>(
 | 
			
		||||
      'avatar_color',
 | 
			
		||||
      aliasedName,
 | 
			
		||||
      false,
 | 
			
		||||
      type: i1.DriftSqlType.int,
 | 
			
		||||
      defaultValue: const CustomExpression('0'),
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
class Shape21 extends i0.VersionedTable {
 | 
			
		||||
  Shape21({required super.source, required super.alias}) : super.aliased();
 | 
			
		||||
  i1.GeneratedColumn<String> get id =>
 | 
			
		||||
      columnsByName['id']! as i1.GeneratedColumn<String>;
 | 
			
		||||
  i1.GeneratedColumn<String> get name =>
 | 
			
		||||
      columnsByName['name']! as i1.GeneratedColumn<String>;
 | 
			
		||||
  i1.GeneratedColumn<String> get email =>
 | 
			
		||||
      columnsByName['email']! as i1.GeneratedColumn<String>;
 | 
			
		||||
  i1.GeneratedColumn<bool> get isAdmin =>
 | 
			
		||||
      columnsByName['is_admin']! as i1.GeneratedColumn<bool>;
 | 
			
		||||
  i1.GeneratedColumn<bool> get hasProfileImage =>
 | 
			
		||||
      columnsByName['has_profile_image']! as i1.GeneratedColumn<bool>;
 | 
			
		||||
  i1.GeneratedColumn<DateTime> get profileChangedAt =>
 | 
			
		||||
      columnsByName['profile_changed_at']! as i1.GeneratedColumn<DateTime>;
 | 
			
		||||
  i1.GeneratedColumn<int> get avatarColor =>
 | 
			
		||||
      columnsByName['avatar_color']! as i1.GeneratedColumn<int>;
 | 
			
		||||
  i1.GeneratedColumn<int> get quotaSizeInBytes =>
 | 
			
		||||
      columnsByName['quota_size_in_bytes']! as i1.GeneratedColumn<int>;
 | 
			
		||||
  i1.GeneratedColumn<int> get quotaUsageInBytes =>
 | 
			
		||||
      columnsByName['quota_usage_in_bytes']! as i1.GeneratedColumn<int>;
 | 
			
		||||
  i1.GeneratedColumn<String> get pinCode =>
 | 
			
		||||
      columnsByName['pin_code']! as i1.GeneratedColumn<String>;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
i1.GeneratedColumn<int> _column_92(String aliasedName) =>
 | 
			
		||||
    i1.GeneratedColumn<int>(
 | 
			
		||||
      'avatar_color',
 | 
			
		||||
      aliasedName,
 | 
			
		||||
      false,
 | 
			
		||||
      type: i1.DriftSqlType.int,
 | 
			
		||||
    );
 | 
			
		||||
i1.GeneratedColumn<int> _column_93(String aliasedName) =>
 | 
			
		||||
    i1.GeneratedColumn<int>(
 | 
			
		||||
      'quota_size_in_bytes',
 | 
			
		||||
      aliasedName,
 | 
			
		||||
      false,
 | 
			
		||||
      type: i1.DriftSqlType.int,
 | 
			
		||||
      defaultValue: const CustomExpression('0'),
 | 
			
		||||
    );
 | 
			
		||||
i1.GeneratedColumn<String> _column_94(String aliasedName) =>
 | 
			
		||||
    i1.GeneratedColumn<String>(
 | 
			
		||||
      'pin_code',
 | 
			
		||||
      aliasedName,
 | 
			
		||||
      true,
 | 
			
		||||
      type: i1.DriftSqlType.string,
 | 
			
		||||
    );
 | 
			
		||||
i0.MigrationStepWithVersion migrationSteps({
 | 
			
		||||
  required Future<void> Function(i1.Migrator m, Schema2 schema) from1To2,
 | 
			
		||||
  required Future<void> Function(i1.Migrator m, Schema3 schema) from2To3,
 | 
			
		||||
@ -3829,6 +4279,7 @@ i0.MigrationStepWithVersion migrationSteps({
 | 
			
		||||
  required Future<void> Function(i1.Migrator m, Schema7 schema) from6To7,
 | 
			
		||||
  required Future<void> Function(i1.Migrator m, Schema8 schema) from7To8,
 | 
			
		||||
  required Future<void> Function(i1.Migrator m, Schema9 schema) from8To9,
 | 
			
		||||
  required Future<void> Function(i1.Migrator m, Schema10 schema) from9To10,
 | 
			
		||||
}) {
 | 
			
		||||
  return (currentVersion, database) async {
 | 
			
		||||
    switch (currentVersion) {
 | 
			
		||||
@ -3872,6 +4323,11 @@ i0.MigrationStepWithVersion migrationSteps({
 | 
			
		||||
        final migrator = i1.Migrator(database, schema);
 | 
			
		||||
        await from8To9(migrator, schema);
 | 
			
		||||
        return 9;
 | 
			
		||||
      case 9:
 | 
			
		||||
        final schema = Schema10(database: database);
 | 
			
		||||
        final migrator = i1.Migrator(database, schema);
 | 
			
		||||
        await from9To10(migrator, schema);
 | 
			
		||||
        return 10;
 | 
			
		||||
      default:
 | 
			
		||||
        throw ArgumentError.value('Unknown migration from $currentVersion');
 | 
			
		||||
    }
 | 
			
		||||
@ -3887,6 +4343,7 @@ i1.OnUpgrade stepByStep({
 | 
			
		||||
  required Future<void> Function(i1.Migrator m, Schema7 schema) from6To7,
 | 
			
		||||
  required Future<void> Function(i1.Migrator m, Schema8 schema) from7To8,
 | 
			
		||||
  required Future<void> Function(i1.Migrator m, Schema9 schema) from8To9,
 | 
			
		||||
  required Future<void> Function(i1.Migrator m, Schema10 schema) from9To10,
 | 
			
		||||
}) => i0.VersionedSchema.stepByStepHelper(
 | 
			
		||||
  step: migrationSteps(
 | 
			
		||||
    from1To2: from1To2,
 | 
			
		||||
@ -3897,5 +4354,6 @@ i1.OnUpgrade stepByStep({
 | 
			
		||||
    from6To7: from6To7,
 | 
			
		||||
    from7To8: from7To8,
 | 
			
		||||
    from8To9: from8To9,
 | 
			
		||||
    from9To10: from9To10,
 | 
			
		||||
  ),
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
@ -202,14 +202,13 @@ class DriftRemoteAlbumRepository extends DriftDatabaseRepository {
 | 
			
		||||
            id: user.id,
 | 
			
		||||
            email: user.email,
 | 
			
		||||
            name: user.name,
 | 
			
		||||
            isAdmin: user.isAdmin,
 | 
			
		||||
            updatedAt: user.updatedAt,
 | 
			
		||||
            memoryEnabled: true,
 | 
			
		||||
            inTimeline: false,
 | 
			
		||||
            isPartnerSharedBy: false,
 | 
			
		||||
            isPartnerSharedWith: false,
 | 
			
		||||
            profileChangedAt: user.profileChangedAt,
 | 
			
		||||
            hasProfileImage: user.hasProfileImage,
 | 
			
		||||
            avatarColor: user.avatarColor,
 | 
			
		||||
          ),
 | 
			
		||||
        )
 | 
			
		||||
        .get();
 | 
			
		||||
 | 
			
		||||
@ -173,7 +173,7 @@ class DriftStoreRepository extends DriftDatabaseRepository implements IStoreRepo
 | 
			
		||||
            const (bool) => entity.intValue == 1,
 | 
			
		||||
            const (DateTime) => entity.intValue == null ? null : DateTime.fromMillisecondsSinceEpoch(entity.intValue!),
 | 
			
		||||
            const (UserDto) =>
 | 
			
		||||
              entity.stringValue == null ? null : await DriftUserRepository(_db).get(entity.stringValue!),
 | 
			
		||||
              entity.stringValue == null ? null : await DriftAuthUserRepository(_db).get(entity.stringValue!),
 | 
			
		||||
            _ => null,
 | 
			
		||||
          }
 | 
			
		||||
          as T?;
 | 
			
		||||
@ -184,7 +184,7 @@ class DriftStoreRepository extends DriftDatabaseRepository implements IStoreRepo
 | 
			
		||||
      const (String) => (null, value as String),
 | 
			
		||||
      const (bool) => ((value as bool) ? 1 : 0, null),
 | 
			
		||||
      const (DateTime) => ((value as DateTime).millisecondsSinceEpoch, null),
 | 
			
		||||
      const (UserDto) => (null, (await DriftUserRepository(_db).upsert(value as UserDto)).id),
 | 
			
		||||
      const (UserDto) => (null, (await DriftAuthUserRepository(_db).upsert(value as UserDto)).id),
 | 
			
		||||
      _ => throw UnsupportedError("Unsupported primitive type: ${key.type} for key: ${key.name}"),
 | 
			
		||||
    };
 | 
			
		||||
    return StoreEntityCompanion(id: Value(key.id), intValue: Value(intValue), stringValue: Value(strValue));
 | 
			
		||||
 | 
			
		||||
@ -38,6 +38,7 @@ class SyncApiRepository {
 | 
			
		||||
    request.body = jsonEncode(
 | 
			
		||||
      SyncStreamDto(
 | 
			
		||||
        types: [
 | 
			
		||||
          SyncRequestType.authUsersV1,
 | 
			
		||||
          SyncRequestType.usersV1,
 | 
			
		||||
          SyncRequestType.assetsV1,
 | 
			
		||||
          SyncRequestType.assetExifsV1,
 | 
			
		||||
@ -133,6 +134,7 @@ class SyncApiRepository {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const _kResponseMap = <SyncEntityType, Function(Object)>{
 | 
			
		||||
  SyncEntityType.authUserV1: SyncAuthUserV1.fromJson,
 | 
			
		||||
  SyncEntityType.userV1: SyncUserV1.fromJson,
 | 
			
		||||
  SyncEntityType.userDeleteV1: SyncUserDeleteV1.fromJson,
 | 
			
		||||
  SyncEntityType.partnerV1: SyncPartnerV1.fromJson,
 | 
			
		||||
 | 
			
		||||
@ -1,11 +1,14 @@
 | 
			
		||||
import 'dart:convert';
 | 
			
		||||
 | 
			
		||||
import 'package:collection/collection.dart';
 | 
			
		||||
import 'package:drift/drift.dart';
 | 
			
		||||
import 'package:immich_mobile/domain/models/album/album.model.dart';
 | 
			
		||||
import 'package:immich_mobile/domain/models/asset/base_asset.model.dart';
 | 
			
		||||
import 'package:immich_mobile/domain/models/memory.model.dart';
 | 
			
		||||
import 'package:immich_mobile/domain/models/user.model.dart';
 | 
			
		||||
import 'package:immich_mobile/domain/models/user_metadata.model.dart';
 | 
			
		||||
import 'package:immich_mobile/infrastructure/entities/asset_face.entity.drift.dart';
 | 
			
		||||
import 'package:immich_mobile/infrastructure/entities/auth_user.entity.drift.dart';
 | 
			
		||||
import 'package:immich_mobile/infrastructure/entities/exif.entity.drift.dart';
 | 
			
		||||
import 'package:immich_mobile/infrastructure/entities/memory.entity.drift.dart';
 | 
			
		||||
import 'package:immich_mobile/infrastructure/entities/memory_asset.entity.drift.dart';
 | 
			
		||||
@ -59,6 +62,35 @@ class SyncStreamRepository extends DriftDatabaseRepository {
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  Future<void> updateAuthUsersV1(Iterable<SyncAuthUserV1> data) async {
 | 
			
		||||
    try {
 | 
			
		||||
      await _db.batch((batch) {
 | 
			
		||||
        for (final user in data) {
 | 
			
		||||
          final companion = AuthUserEntityCompanion(
 | 
			
		||||
            name: Value(user.name),
 | 
			
		||||
            email: Value(user.email),
 | 
			
		||||
            hasProfileImage: Value(user.hasProfileImage),
 | 
			
		||||
            profileChangedAt: Value(user.profileChangedAt),
 | 
			
		||||
            avatarColor: Value(user.avatarColor?.toAvatarColor() ?? AvatarColor.primary),
 | 
			
		||||
            isAdmin: Value(user.isAdmin),
 | 
			
		||||
            pinCode: Value(user.pinCode),
 | 
			
		||||
            quotaSizeInBytes: Value(user.quotaSizeInBytes ?? 0),
 | 
			
		||||
            quotaUsageInBytes: Value(user.quotaUsageInBytes),
 | 
			
		||||
          );
 | 
			
		||||
 | 
			
		||||
          batch.insert(
 | 
			
		||||
            _db.authUserEntity,
 | 
			
		||||
            companion.copyWith(id: Value(user.id)),
 | 
			
		||||
            onConflict: DoUpdate((_) => companion),
 | 
			
		||||
          );
 | 
			
		||||
        }
 | 
			
		||||
      });
 | 
			
		||||
    } catch (error, stack) {
 | 
			
		||||
      _logger.severe('Error: SyncAuthUserV1', error, stack);
 | 
			
		||||
      rethrow;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  Future<void> deleteUsersV1(Iterable<SyncUserDeleteV1> data) async {
 | 
			
		||||
    try {
 | 
			
		||||
      await _db.userEntity.deleteWhere((row) => row.id.isIn(data.map((e) => e.userId)));
 | 
			
		||||
@ -77,6 +109,7 @@ class SyncStreamRepository extends DriftDatabaseRepository {
 | 
			
		||||
            email: Value(user.email),
 | 
			
		||||
            hasProfileImage: Value(user.hasProfileImage),
 | 
			
		||||
            profileChangedAt: Value(user.profileChangedAt),
 | 
			
		||||
            avatarColor: Value(user.avatarColor?.toAvatarColor() ?? AvatarColor.primary),
 | 
			
		||||
          );
 | 
			
		||||
 | 
			
		||||
          batch.insert(_db.userEntity, companion.copyWith(id: Value(user.id)), onConflict: DoUpdate((_) => companion));
 | 
			
		||||
@ -603,3 +636,7 @@ extension on String {
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
extension on UserAvatarColor {
 | 
			
		||||
  AvatarColor? toAvatarColor() => AvatarColor.values.firstWhereOrNull((c) => c.name == value);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -2,8 +2,8 @@ import 'package:drift/drift.dart';
 | 
			
		||||
import 'package:immich_mobile/constants/enums.dart';
 | 
			
		||||
import 'package:immich_mobile/domain/models/user.model.dart';
 | 
			
		||||
import 'package:immich_mobile/domain/models/user_metadata.model.dart';
 | 
			
		||||
import 'package:immich_mobile/infrastructure/entities/auth_user.entity.drift.dart';
 | 
			
		||||
import 'package:immich_mobile/infrastructure/entities/user.entity.dart' as entity;
 | 
			
		||||
import 'package:immich_mobile/infrastructure/entities/user.entity.drift.dart';
 | 
			
		||||
import 'package:immich_mobile/infrastructure/repositories/db.repository.dart';
 | 
			
		||||
import 'package:immich_mobile/infrastructure/repositories/user_metadata.repository.dart';
 | 
			
		||||
import 'package:isar/isar.dart';
 | 
			
		||||
@ -68,12 +68,12 @@ class IsarUserRepository extends IsarDatabaseRepository {
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
class DriftUserRepository extends DriftDatabaseRepository {
 | 
			
		||||
class DriftAuthUserRepository extends DriftDatabaseRepository {
 | 
			
		||||
  final Drift _db;
 | 
			
		||||
  const DriftUserRepository(super.db) : _db = db;
 | 
			
		||||
  const DriftAuthUserRepository(super.db) : _db = db;
 | 
			
		||||
 | 
			
		||||
  Future<UserDto?> get(String id) async {
 | 
			
		||||
    final user = await _db.managers.userEntity.filter((user) => user.id.equals(id)).getSingleOrNull();
 | 
			
		||||
    final user = await _db.managers.authUserEntity.filter((user) => user.id.equals(id)).getSingleOrNull();
 | 
			
		||||
 | 
			
		||||
    if (user == null) return null;
 | 
			
		||||
 | 
			
		||||
@ -84,43 +84,30 @@ class DriftUserRepository extends DriftDatabaseRepository {
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  Future<UserDto> upsert(UserDto user) async {
 | 
			
		||||
    await _db.userEntity.insertOnConflictUpdate(
 | 
			
		||||
      UserEntityCompanion(
 | 
			
		||||
    await _db.authUserEntity.insertOnConflictUpdate(
 | 
			
		||||
      AuthUserEntityCompanion(
 | 
			
		||||
        id: Value(user.id),
 | 
			
		||||
        isAdmin: Value(user.isAdmin),
 | 
			
		||||
        updatedAt: Value(user.updatedAt),
 | 
			
		||||
        name: Value(user.name),
 | 
			
		||||
        email: Value(user.email),
 | 
			
		||||
        hasProfileImage: Value(user.hasProfileImage),
 | 
			
		||||
        profileChangedAt: Value(user.profileChangedAt),
 | 
			
		||||
        isAdmin: Value(user.isAdmin),
 | 
			
		||||
        quotaSizeInBytes: Value(user.quotaSizeInBytes),
 | 
			
		||||
        quotaUsageInBytes: Value(user.quotaUsageInBytes),
 | 
			
		||||
        avatarColor: Value(user.avatarColor),
 | 
			
		||||
      ),
 | 
			
		||||
    );
 | 
			
		||||
    return user;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  Future<List<UserDto>> getAll() async {
 | 
			
		||||
    final users = await _db.userEntity.select().get();
 | 
			
		||||
    final List<UserDto> result = [];
 | 
			
		||||
 | 
			
		||||
    for (final user in users) {
 | 
			
		||||
      final query = _db.userMetadataEntity.select()..where((e) => e.userId.equals(user.id));
 | 
			
		||||
      final metadata = await query.map((row) => row.toDto()).get();
 | 
			
		||||
      result.add(user.toDto(metadata));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
    return result;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
extension on UserEntityData {
 | 
			
		||||
extension on AuthUserEntityData {
 | 
			
		||||
  UserDto toDto([List<UserMetadata>? metadata]) {
 | 
			
		||||
    AvatarColor avatarColor = AvatarColor.primary;
 | 
			
		||||
    bool memoryEnabled = true;
 | 
			
		||||
 | 
			
		||||
    if (metadata != null) {
 | 
			
		||||
      for (final meta in metadata) {
 | 
			
		||||
        if (meta.key == UserMetadataKey.preferences && meta.preferences != null) {
 | 
			
		||||
          avatarColor = meta.preferences?.userAvatarColor ?? AvatarColor.primary;
 | 
			
		||||
          memoryEnabled = meta.preferences?.memoriesEnabled ?? true;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
@ -130,12 +117,13 @@ extension on UserEntityData {
 | 
			
		||||
      id: id,
 | 
			
		||||
      email: email,
 | 
			
		||||
      name: name,
 | 
			
		||||
      isAdmin: isAdmin,
 | 
			
		||||
      updatedAt: updatedAt,
 | 
			
		||||
      profileChangedAt: profileChangedAt,
 | 
			
		||||
      hasProfileImage: hasProfileImage,
 | 
			
		||||
      avatarColor: avatarColor,
 | 
			
		||||
      memoryEnabled: memoryEnabled,
 | 
			
		||||
      isAdmin: isAdmin,
 | 
			
		||||
      quotaSizeInBytes: quotaSizeInBytes,
 | 
			
		||||
      quotaUsageInBytes: quotaUsageInBytes,
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -1,5 +1,4 @@
 | 
			
		||||
import 'package:immich_mobile/domain/models/user.model.dart';
 | 
			
		||||
import 'package:immich_mobile/domain/models/user_metadata.model.dart';
 | 
			
		||||
import 'package:openapi/api.dart';
 | 
			
		||||
 | 
			
		||||
// TODO: Move to repository once all classes are refactored
 | 
			
		||||
 | 
			
		||||
@ -3,9 +3,8 @@ import 'package:easy_localization/easy_localization.dart';
 | 
			
		||||
import 'package:flutter/material.dart';
 | 
			
		||||
import 'package:flutter_hooks/flutter_hooks.dart';
 | 
			
		||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
 | 
			
		||||
import 'package:immich_mobile/domain/models/user.model.dart';
 | 
			
		||||
import 'package:immich_mobile/domain/models/album/album.model.dart';
 | 
			
		||||
import 'package:immich_mobile/domain/models/user_metadata.model.dart';
 | 
			
		||||
import 'package:immich_mobile/domain/models/user.model.dart';
 | 
			
		||||
import 'package:immich_mobile/extensions/asyncvalue_extensions.dart';
 | 
			
		||||
import 'package:immich_mobile/extensions/build_context_extensions.dart';
 | 
			
		||||
import 'package:immich_mobile/providers/infrastructure/db.provider.dart';
 | 
			
		||||
@ -26,11 +25,9 @@ final driftUsersProvider = FutureProvider.autoDispose<List<UserDto>>((ref) async
 | 
			
		||||
          id: entity.id,
 | 
			
		||||
          name: entity.name,
 | 
			
		||||
          email: entity.email,
 | 
			
		||||
          isAdmin: entity.isAdmin,
 | 
			
		||||
          updatedAt: entity.updatedAt,
 | 
			
		||||
          isPartnerSharedBy: false,
 | 
			
		||||
          isPartnerSharedWith: false,
 | 
			
		||||
          avatarColor: AvatarColor.primary,
 | 
			
		||||
          avatarColor: entity.avatarColor,
 | 
			
		||||
          memoryEnabled: true,
 | 
			
		||||
          inTimeline: true,
 | 
			
		||||
          profileChangedAt: entity.profileChangedAt,
 | 
			
		||||
 | 
			
		||||
@ -147,7 +147,9 @@ class SyncService {
 | 
			
		||||
      dbUsers,
 | 
			
		||||
      compare: (UserDto a, UserDto b) => a.id.compareTo(b.id),
 | 
			
		||||
      both: (UserDto a, UserDto b) {
 | 
			
		||||
        if (!a.updatedAt.isAtSameMomentAs(b.updatedAt) ||
 | 
			
		||||
        if ((a.updatedAt == null && b.updatedAt != null) ||
 | 
			
		||||
            (a.updatedAt != null && b.updatedAt == null) ||
 | 
			
		||||
            (a.updatedAt != null && b.updatedAt != null && !a.updatedAt!.isAtSameMomentAs(b.updatedAt!)) ||
 | 
			
		||||
            a.isPartnerSharedBy != b.isPartnerSharedBy ||
 | 
			
		||||
            a.isPartnerSharedWith != b.isPartnerSharedWith ||
 | 
			
		||||
            a.inTimeline != b.inTimeline) {
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										5
									
								
								mobile/test/drift/main/generated/schema.dart
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										5
									
								
								mobile/test/drift/main/generated/schema.dart
									
									
									
										generated
									
									
									
								
							@ -12,6 +12,7 @@ import 'schema_v6.dart' as v6;
 | 
			
		||||
import 'schema_v7.dart' as v7;
 | 
			
		||||
import 'schema_v8.dart' as v8;
 | 
			
		||||
import 'schema_v9.dart' as v9;
 | 
			
		||||
import 'schema_v10.dart' as v10;
 | 
			
		||||
 | 
			
		||||
class GeneratedHelper implements SchemaInstantiationHelper {
 | 
			
		||||
  @override
 | 
			
		||||
@ -35,10 +36,12 @@ class GeneratedHelper implements SchemaInstantiationHelper {
 | 
			
		||||
        return v8.DatabaseAtV8(db);
 | 
			
		||||
      case 9:
 | 
			
		||||
        return v9.DatabaseAtV9(db);
 | 
			
		||||
      case 10:
 | 
			
		||||
        return v10.DatabaseAtV10(db);
 | 
			
		||||
      default:
 | 
			
		||||
        throw MissingSchemaException(version, versions);
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  static const versions = const [1, 2, 3, 4, 5, 6, 7, 8, 9];
 | 
			
		||||
  static const versions = const [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										7159
									
								
								mobile/test/drift/main/generated/schema_v10.dart
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										7159
									
								
								mobile/test/drift/main/generated/schema_v10.dart
									
									
									
										generated
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										1
									
								
								mobile/test/fixtures/user.stub.dart
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								mobile/test/fixtures/user.stub.dart
									
									
									
									
										vendored
									
									
								
							@ -1,5 +1,4 @@
 | 
			
		||||
import 'package:immich_mobile/domain/models/user.model.dart';
 | 
			
		||||
import 'package:immich_mobile/domain/models/user_metadata.model.dart';
 | 
			
		||||
 | 
			
		||||
abstract final class UserStub {
 | 
			
		||||
  const UserStub._();
 | 
			
		||||
 | 
			
		||||
@ -591,6 +591,7 @@ from
 | 
			
		||||
where
 | 
			
		||||
  "user"."updateId" < $1
 | 
			
		||||
  and "user"."updateId" > $2
 | 
			
		||||
  and "id" = $3
 | 
			
		||||
order by
 | 
			
		||||
  "user"."updateId" asc
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -412,6 +412,7 @@ class AuthUserSync extends BaseSync {
 | 
			
		||||
    return this.upsertQuery('user', options)
 | 
			
		||||
      .select(columns.syncUser)
 | 
			
		||||
      .select(['isAdmin', 'pinCode', 'oauthId', 'storageLabel', 'quotaSizeInBytes', 'quotaUsageInBytes'])
 | 
			
		||||
      .where('id', '=', options.userId)
 | 
			
		||||
      .stream();
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -84,4 +84,23 @@ describe(SyncEntityType.AuthUserV1, () => {
 | 
			
		||||
      expect.objectContaining({ type: SyncEntityType.SyncCompleteV1 }),
 | 
			
		||||
    ]);
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('should only sync the auth user', async () => {
 | 
			
		||||
    const { auth, user, ctx } = await setup(await getKyselyDB());
 | 
			
		||||
 | 
			
		||||
    await ctx.newUser();
 | 
			
		||||
 | 
			
		||||
    const response = await ctx.syncStream(auth, [SyncRequestType.AuthUsersV1]);
 | 
			
		||||
    expect(response).toEqual([
 | 
			
		||||
      {
 | 
			
		||||
        ack: expect.any(String),
 | 
			
		||||
        data: expect.objectContaining({
 | 
			
		||||
          id: user.id,
 | 
			
		||||
          isAdmin: false,
 | 
			
		||||
        }),
 | 
			
		||||
        type: 'AuthUserV1',
 | 
			
		||||
      },
 | 
			
		||||
      expect.objectContaining({ type: SyncEntityType.SyncCompleteV1 }),
 | 
			
		||||
    ]);
 | 
			
		||||
  });
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user