Offline Support

This commit is contained in:
2026-04-27 06:20:39 +08:00
parent 7d8851a94a
commit 48cd3bcd60
121 changed files with 14798 additions and 2214 deletions
@@ -0,0 +1,319 @@
// GENERATED CODE DO NOT EDIT
part of '../brick.g.dart';
Future<Announcement> _$AnnouncementFromSupabase(
Map<String, dynamic> data, {
required SupabaseProvider provider,
OfflineFirstWithSupabaseRepository? repository,
}) async {
return Announcement(
id: data['id'] as String,
authorId: data['author_id'] as String,
title: data['title'] as String,
body: data['body'] as String,
visibleRoles: data['visible_roles'].toList().cast<String>(),
isTemplate: data['is_template'] as bool,
templateId: data['template_id'] == null
? null
: data['template_id'] as String?,
createdAt: DateTime.parse(data['created_at'] as String),
updatedAt: DateTime.parse(data['updated_at'] as String),
bannerEnabled: data['banner_enabled'] as bool,
bannerShowAt: data['banner_show_at'] == null
? null
: data['banner_show_at'] == null
? null
: DateTime.tryParse(data['banner_show_at'] as String),
bannerHideAt: data['banner_hide_at'] == null
? null
: data['banner_hide_at'] == null
? null
: DateTime.tryParse(data['banner_hide_at'] as String),
pushIntervalMinutes: data['push_interval_minutes'] == null
? null
: data['push_interval_minutes'] as int?,
);
}
Future<Map<String, dynamic>> _$AnnouncementToSupabase(
Announcement instance, {
required SupabaseProvider provider,
OfflineFirstWithSupabaseRepository? repository,
}) async {
return {
'id': instance.id,
'author_id': instance.authorId,
'title': instance.title,
'body': instance.body,
'visible_roles': instance.visibleRoles,
'is_template': instance.isTemplate,
'template_id': instance.templateId,
'created_at': instance.createdAt.toIso8601String(),
'updated_at': instance.updatedAt.toIso8601String(),
'banner_enabled': instance.bannerEnabled,
'banner_show_at': instance.bannerShowAt?.toIso8601String(),
'banner_hide_at': instance.bannerHideAt?.toIso8601String(),
'push_interval_minutes': instance.pushIntervalMinutes,
};
}
Future<Announcement> _$AnnouncementFromSqlite(
Map<String, dynamic> data, {
required SqliteProvider provider,
OfflineFirstWithSupabaseRepository? repository,
}) async {
return Announcement(
id: data['id'] as String,
authorId: data['author_id'] as String,
title: data['title'] as String,
body: data['body'] as String,
visibleRoles: jsonDecode(data['visible_roles']).toList().cast<String>(),
isTemplate: data['is_template'] == 1,
templateId: data['template_id'] == null
? null
: data['template_id'] as String?,
createdAt: DateTime.parse(data['created_at'] as String),
updatedAt: DateTime.parse(data['updated_at'] as String),
bannerEnabled: data['banner_enabled'] == 1,
bannerShowAt: data['banner_show_at'] == null
? null
: data['banner_show_at'] == null
? null
: DateTime.tryParse(data['banner_show_at'] as String),
bannerHideAt: data['banner_hide_at'] == null
? null
: data['banner_hide_at'] == null
? null
: DateTime.tryParse(data['banner_hide_at'] as String),
pushIntervalMinutes: data['push_interval_minutes'] == null
? null
: data['push_interval_minutes'] as int?,
)..primaryKey = data['_brick_id'] as int;
}
Future<Map<String, dynamic>> _$AnnouncementToSqlite(
Announcement instance, {
required SqliteProvider provider,
OfflineFirstWithSupabaseRepository? repository,
}) async {
return {
'id': instance.id,
'author_id': instance.authorId,
'title': instance.title,
'body': instance.body,
'visible_roles': jsonEncode(instance.visibleRoles),
'is_template': instance.isTemplate ? 1 : 0,
'template_id': instance.templateId,
'created_at': instance.createdAt.toIso8601String(),
'updated_at': instance.updatedAt.toIso8601String(),
'banner_enabled': instance.bannerEnabled ? 1 : 0,
'banner_show_at': instance.bannerShowAt?.toIso8601String(),
'banner_hide_at': instance.bannerHideAt?.toIso8601String(),
'push_interval_minutes': instance.pushIntervalMinutes,
};
}
/// Construct a [Announcement]
class AnnouncementAdapter
extends OfflineFirstWithSupabaseAdapter<Announcement> {
AnnouncementAdapter();
@override
final supabaseTableName = 'announcements';
@override
final defaultToNull = true;
@override
final fieldsToSupabaseColumns = {
'id': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'id',
),
'authorId': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'author_id',
),
'title': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'title',
),
'body': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'body',
),
'visibleRoles': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'visible_roles',
),
'isTemplate': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'is_template',
),
'templateId': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'template_id',
),
'createdAt': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'created_at',
),
'updatedAt': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'updated_at',
),
'bannerEnabled': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'banner_enabled',
),
'bannerShowAt': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'banner_show_at',
),
'bannerHideAt': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'banner_hide_at',
),
'pushIntervalMinutes': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'push_interval_minutes',
),
};
@override
final ignoreDuplicates = false;
@override
final uniqueFields = {};
@override
final Map<String, RuntimeSqliteColumnDefinition> fieldsToSqliteColumns = {
'primaryKey': const RuntimeSqliteColumnDefinition(
association: false,
columnName: '_brick_id',
iterable: false,
type: int,
),
'id': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'id',
iterable: false,
type: String,
),
'authorId': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'author_id',
iterable: false,
type: String,
),
'title': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'title',
iterable: false,
type: String,
),
'body': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'body',
iterable: false,
type: String,
),
'visibleRoles': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'visible_roles',
iterable: true,
type: String,
),
'isTemplate': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'is_template',
iterable: false,
type: bool,
),
'templateId': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'template_id',
iterable: false,
type: String,
),
'createdAt': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'created_at',
iterable: false,
type: DateTime,
),
'updatedAt': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'updated_at',
iterable: false,
type: DateTime,
),
'bannerEnabled': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'banner_enabled',
iterable: false,
type: bool,
),
'bannerShowAt': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'banner_show_at',
iterable: false,
type: DateTime,
),
'bannerHideAt': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'banner_hide_at',
iterable: false,
type: DateTime,
),
'pushIntervalMinutes': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'push_interval_minutes',
iterable: false,
type: int,
),
};
@override
Future<int?> primaryKeyByUniqueColumns(
Announcement instance,
DatabaseExecutor executor,
) async => instance.primaryKey;
@override
final String tableName = 'Announcement';
@override
Future<Announcement> fromSupabase(
Map<String, dynamic> input, {
required provider,
covariant OfflineFirstWithSupabaseRepository? repository,
}) async => await _$AnnouncementFromSupabase(
input,
provider: provider,
repository: repository,
);
@override
Future<Map<String, dynamic>> toSupabase(
Announcement input, {
required provider,
covariant OfflineFirstWithSupabaseRepository? repository,
}) async => await _$AnnouncementToSupabase(
input,
provider: provider,
repository: repository,
);
@override
Future<Announcement> fromSqlite(
Map<String, dynamic> input, {
required provider,
covariant OfflineFirstWithSupabaseRepository? repository,
}) async => await _$AnnouncementFromSqlite(
input,
provider: provider,
repository: repository,
);
@override
Future<Map<String, dynamic>> toSqlite(
Announcement input, {
required provider,
covariant OfflineFirstWithSupabaseRepository? repository,
}) async => await _$AnnouncementToSqlite(
input,
provider: provider,
repository: repository,
);
}
@@ -0,0 +1,183 @@
// GENERATED CODE DO NOT EDIT
part of '../brick.g.dart';
Future<AnnouncementComment> _$AnnouncementCommentFromSupabase(
Map<String, dynamic> data, {
required SupabaseProvider provider,
OfflineFirstWithSupabaseRepository? repository,
}) async {
return AnnouncementComment(
id: data['id'] as String,
announcementId: data['announcement_id'] as String,
authorId: data['author_id'] as String,
body: data['body'] as String,
createdAt: DateTime.parse(data['created_at'] as String),
);
}
Future<Map<String, dynamic>> _$AnnouncementCommentToSupabase(
AnnouncementComment instance, {
required SupabaseProvider provider,
OfflineFirstWithSupabaseRepository? repository,
}) async {
return {
'id': instance.id,
'announcement_id': instance.announcementId,
'author_id': instance.authorId,
'body': instance.body,
'created_at': instance.createdAt.toIso8601String(),
};
}
Future<AnnouncementComment> _$AnnouncementCommentFromSqlite(
Map<String, dynamic> data, {
required SqliteProvider provider,
OfflineFirstWithSupabaseRepository? repository,
}) async {
return AnnouncementComment(
id: data['id'] as String,
announcementId: data['announcement_id'] as String,
authorId: data['author_id'] as String,
body: data['body'] as String,
createdAt: DateTime.parse(data['created_at'] as String),
)..primaryKey = data['_brick_id'] as int;
}
Future<Map<String, dynamic>> _$AnnouncementCommentToSqlite(
AnnouncementComment instance, {
required SqliteProvider provider,
OfflineFirstWithSupabaseRepository? repository,
}) async {
return {
'id': instance.id,
'announcement_id': instance.announcementId,
'author_id': instance.authorId,
'body': instance.body,
'created_at': instance.createdAt.toIso8601String(),
};
}
/// Construct a [AnnouncementComment]
class AnnouncementCommentAdapter
extends OfflineFirstWithSupabaseAdapter<AnnouncementComment> {
AnnouncementCommentAdapter();
@override
final supabaseTableName = 'announcement_comments';
@override
final defaultToNull = true;
@override
final fieldsToSupabaseColumns = {
'id': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'id',
),
'announcementId': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'announcement_id',
),
'authorId': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'author_id',
),
'body': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'body',
),
'createdAt': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'created_at',
),
};
@override
final ignoreDuplicates = false;
@override
final uniqueFields = {};
@override
final Map<String, RuntimeSqliteColumnDefinition> fieldsToSqliteColumns = {
'primaryKey': const RuntimeSqliteColumnDefinition(
association: false,
columnName: '_brick_id',
iterable: false,
type: int,
),
'id': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'id',
iterable: false,
type: String,
),
'announcementId': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'announcement_id',
iterable: false,
type: String,
),
'authorId': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'author_id',
iterable: false,
type: String,
),
'body': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'body',
iterable: false,
type: String,
),
'createdAt': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'created_at',
iterable: false,
type: DateTime,
),
};
@override
Future<int?> primaryKeyByUniqueColumns(
AnnouncementComment instance,
DatabaseExecutor executor,
) async => instance.primaryKey;
@override
final String tableName = 'AnnouncementComment';
@override
Future<AnnouncementComment> fromSupabase(
Map<String, dynamic> input, {
required provider,
covariant OfflineFirstWithSupabaseRepository? repository,
}) async => await _$AnnouncementCommentFromSupabase(
input,
provider: provider,
repository: repository,
);
@override
Future<Map<String, dynamic>> toSupabase(
AnnouncementComment input, {
required provider,
covariant OfflineFirstWithSupabaseRepository? repository,
}) async => await _$AnnouncementCommentToSupabase(
input,
provider: provider,
repository: repository,
);
@override
Future<AnnouncementComment> fromSqlite(
Map<String, dynamic> input, {
required provider,
covariant OfflineFirstWithSupabaseRepository? repository,
}) async => await _$AnnouncementCommentFromSqlite(
input,
provider: provider,
repository: repository,
);
@override
Future<Map<String, dynamic>> toSqlite(
AnnouncementComment input, {
required provider,
covariant OfflineFirstWithSupabaseRepository? repository,
}) async => await _$AnnouncementCommentToSqlite(
input,
provider: provider,
repository: repository,
);
}
@@ -0,0 +1,357 @@
// GENERATED CODE DO NOT EDIT
part of '../brick.g.dart';
Future<AttendanceLog> _$AttendanceLogFromSupabase(
Map<String, dynamic> data, {
required SupabaseProvider provider,
OfflineFirstWithSupabaseRepository? repository,
}) async {
return AttendanceLog(
id: data['id'] as String,
userId: data['user_id'] as String,
dutyScheduleId: data['duty_schedule_id'] as String,
shiftType: data['shift_type'] as String,
checkInAt: DateTime.parse(data['check_in_at'] as String),
checkInLat: data['check_in_lat'] as double,
checkInLng: data['check_in_lng'] as double,
checkOutAt: data['check_out_at'] == null
? null
: data['check_out_at'] == null
? null
: DateTime.tryParse(data['check_out_at'] as String),
checkOutLat: data['check_out_lat'] == null
? null
: data['check_out_lat'] as double?,
checkOutLng: data['check_out_lng'] == null
? null
: data['check_out_lng'] as double?,
justification: data['justification'] == null
? null
: data['justification'] as String?,
checkOutJustification: data['check_out_justification'] == null
? null
: data['check_out_justification'] as String?,
verificationStatus: data['verification_status'] as String,
checkInVerificationPhotoUrl: data['check_in_verification_photo_url'] == null
? null
: data['check_in_verification_photo_url'] as String?,
checkOutVerificationPhotoUrl:
data['check_out_verification_photo_url'] == null
? null
: data['check_out_verification_photo_url'] as String?,
);
}
Future<Map<String, dynamic>> _$AttendanceLogToSupabase(
AttendanceLog instance, {
required SupabaseProvider provider,
OfflineFirstWithSupabaseRepository? repository,
}) async {
return {
'id': instance.id,
'user_id': instance.userId,
'duty_schedule_id': instance.dutyScheduleId,
'shift_type': instance.shiftType,
'check_in_at': instance.checkInAt.toIso8601String(),
'check_in_lat': instance.checkInLat,
'check_in_lng': instance.checkInLng,
'check_out_at': instance.checkOutAt?.toIso8601String(),
'check_out_lat': instance.checkOutLat,
'check_out_lng': instance.checkOutLng,
'justification': instance.justification,
'check_out_justification': instance.checkOutJustification,
'verification_status': instance.verificationStatus,
'check_in_verification_photo_url': instance.checkInVerificationPhotoUrl,
'check_out_verification_photo_url': instance.checkOutVerificationPhotoUrl,
};
}
Future<AttendanceLog> _$AttendanceLogFromSqlite(
Map<String, dynamic> data, {
required SqliteProvider provider,
OfflineFirstWithSupabaseRepository? repository,
}) async {
return AttendanceLog(
id: data['id'] as String,
userId: data['user_id'] as String,
dutyScheduleId: data['duty_schedule_id'] as String,
shiftType: data['shift_type'] as String,
checkInAt: DateTime.parse(data['check_in_at'] as String),
checkInLat: data['check_in_lat'] as double,
checkInLng: data['check_in_lng'] as double,
checkOutAt: data['check_out_at'] == null
? null
: data['check_out_at'] == null
? null
: DateTime.tryParse(data['check_out_at'] as String),
checkOutLat: data['check_out_lat'] == null
? null
: data['check_out_lat'] as double?,
checkOutLng: data['check_out_lng'] == null
? null
: data['check_out_lng'] as double?,
justification: data['justification'] == null
? null
: data['justification'] as String?,
checkOutJustification: data['check_out_justification'] == null
? null
: data['check_out_justification'] as String?,
verificationStatus: data['verification_status'] as String,
checkInVerificationPhotoUrl: data['check_in_verification_photo_url'] == null
? null
: data['check_in_verification_photo_url'] as String?,
checkOutVerificationPhotoUrl:
data['check_out_verification_photo_url'] == null
? null
: data['check_out_verification_photo_url'] as String?,
)..primaryKey = data['_brick_id'] as int;
}
Future<Map<String, dynamic>> _$AttendanceLogToSqlite(
AttendanceLog instance, {
required SqliteProvider provider,
OfflineFirstWithSupabaseRepository? repository,
}) async {
return {
'id': instance.id,
'user_id': instance.userId,
'duty_schedule_id': instance.dutyScheduleId,
'shift_type': instance.shiftType,
'check_in_at': instance.checkInAt.toIso8601String(),
'check_in_lat': instance.checkInLat,
'check_in_lng': instance.checkInLng,
'check_out_at': instance.checkOutAt?.toIso8601String(),
'check_out_lat': instance.checkOutLat,
'check_out_lng': instance.checkOutLng,
'justification': instance.justification,
'check_out_justification': instance.checkOutJustification,
'verification_status': instance.verificationStatus,
'check_in_verification_photo_url': instance.checkInVerificationPhotoUrl,
'check_out_verification_photo_url': instance.checkOutVerificationPhotoUrl,
};
}
/// Construct a [AttendanceLog]
class AttendanceLogAdapter
extends OfflineFirstWithSupabaseAdapter<AttendanceLog> {
AttendanceLogAdapter();
@override
final supabaseTableName = 'attendance_logs';
@override
final defaultToNull = true;
@override
final fieldsToSupabaseColumns = {
'id': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'id',
),
'userId': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'user_id',
),
'dutyScheduleId': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'duty_schedule_id',
),
'shiftType': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'shift_type',
),
'checkInAt': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'check_in_at',
),
'checkInLat': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'check_in_lat',
),
'checkInLng': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'check_in_lng',
),
'checkOutAt': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'check_out_at',
),
'checkOutLat': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'check_out_lat',
),
'checkOutLng': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'check_out_lng',
),
'justification': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'justification',
),
'checkOutJustification': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'check_out_justification',
),
'verificationStatus': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'verification_status',
),
'checkInVerificationPhotoUrl': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'check_in_verification_photo_url',
),
'checkOutVerificationPhotoUrl': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'check_out_verification_photo_url',
),
};
@override
final ignoreDuplicates = false;
@override
final uniqueFields = {};
@override
final Map<String, RuntimeSqliteColumnDefinition> fieldsToSqliteColumns = {
'primaryKey': const RuntimeSqliteColumnDefinition(
association: false,
columnName: '_brick_id',
iterable: false,
type: int,
),
'id': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'id',
iterable: false,
type: String,
),
'userId': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'user_id',
iterable: false,
type: String,
),
'dutyScheduleId': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'duty_schedule_id',
iterable: false,
type: String,
),
'shiftType': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'shift_type',
iterable: false,
type: String,
),
'checkInAt': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'check_in_at',
iterable: false,
type: DateTime,
),
'checkInLat': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'check_in_lat',
iterable: false,
type: double,
),
'checkInLng': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'check_in_lng',
iterable: false,
type: double,
),
'checkOutAt': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'check_out_at',
iterable: false,
type: DateTime,
),
'checkOutLat': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'check_out_lat',
iterable: false,
type: double,
),
'checkOutLng': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'check_out_lng',
iterable: false,
type: double,
),
'justification': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'justification',
iterable: false,
type: String,
),
'checkOutJustification': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'check_out_justification',
iterable: false,
type: String,
),
'verificationStatus': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'verification_status',
iterable: false,
type: String,
),
'checkInVerificationPhotoUrl': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'check_in_verification_photo_url',
iterable: false,
type: String,
),
'checkOutVerificationPhotoUrl': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'check_out_verification_photo_url',
iterable: false,
type: String,
),
};
@override
Future<int?> primaryKeyByUniqueColumns(
AttendanceLog instance,
DatabaseExecutor executor,
) async => instance.primaryKey;
@override
final String tableName = 'AttendanceLog';
@override
Future<AttendanceLog> fromSupabase(
Map<String, dynamic> input, {
required provider,
covariant OfflineFirstWithSupabaseRepository? repository,
}) async => await _$AttendanceLogFromSupabase(
input,
provider: provider,
repository: repository,
);
@override
Future<Map<String, dynamic>> toSupabase(
AttendanceLog input, {
required provider,
covariant OfflineFirstWithSupabaseRepository? repository,
}) async => await _$AttendanceLogToSupabase(
input,
provider: provider,
repository: repository,
);
@override
Future<AttendanceLog> fromSqlite(
Map<String, dynamic> input, {
required provider,
covariant OfflineFirstWithSupabaseRepository? repository,
}) async => await _$AttendanceLogFromSqlite(
input,
provider: provider,
repository: repository,
);
@override
Future<Map<String, dynamic>> toSqlite(
AttendanceLog input, {
required provider,
covariant OfflineFirstWithSupabaseRepository? repository,
}) async => await _$AttendanceLogToSqlite(
input,
provider: provider,
repository: repository,
);
}
@@ -0,0 +1,182 @@
// GENERATED CODE DO NOT EDIT
part of '../brick.g.dart';
Future<ChatMessage> _$ChatMessageFromSupabase(
Map<String, dynamic> data, {
required SupabaseProvider provider,
OfflineFirstWithSupabaseRepository? repository,
}) async {
return ChatMessage(
id: data['id'] as String,
threadId: data['thread_id'] as String,
senderId: data['sender_id'] as String,
body: data['body'] as String,
createdAt: DateTime.parse(data['created_at'] as String),
);
}
Future<Map<String, dynamic>> _$ChatMessageToSupabase(
ChatMessage instance, {
required SupabaseProvider provider,
OfflineFirstWithSupabaseRepository? repository,
}) async {
return {
'id': instance.id,
'thread_id': instance.threadId,
'sender_id': instance.senderId,
'body': instance.body,
'created_at': instance.createdAt.toIso8601String(),
};
}
Future<ChatMessage> _$ChatMessageFromSqlite(
Map<String, dynamic> data, {
required SqliteProvider provider,
OfflineFirstWithSupabaseRepository? repository,
}) async {
return ChatMessage(
id: data['id'] as String,
threadId: data['thread_id'] as String,
senderId: data['sender_id'] as String,
body: data['body'] as String,
createdAt: DateTime.parse(data['created_at'] as String),
)..primaryKey = data['_brick_id'] as int;
}
Future<Map<String, dynamic>> _$ChatMessageToSqlite(
ChatMessage instance, {
required SqliteProvider provider,
OfflineFirstWithSupabaseRepository? repository,
}) async {
return {
'id': instance.id,
'thread_id': instance.threadId,
'sender_id': instance.senderId,
'body': instance.body,
'created_at': instance.createdAt.toIso8601String(),
};
}
/// Construct a [ChatMessage]
class ChatMessageAdapter extends OfflineFirstWithSupabaseAdapter<ChatMessage> {
ChatMessageAdapter();
@override
final supabaseTableName = 'chat_messages';
@override
final defaultToNull = true;
@override
final fieldsToSupabaseColumns = {
'id': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'id',
),
'threadId': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'thread_id',
),
'senderId': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'sender_id',
),
'body': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'body',
),
'createdAt': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'created_at',
),
};
@override
final ignoreDuplicates = false;
@override
final uniqueFields = {};
@override
final Map<String, RuntimeSqliteColumnDefinition> fieldsToSqliteColumns = {
'primaryKey': const RuntimeSqliteColumnDefinition(
association: false,
columnName: '_brick_id',
iterable: false,
type: int,
),
'id': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'id',
iterable: false,
type: String,
),
'threadId': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'thread_id',
iterable: false,
type: String,
),
'senderId': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'sender_id',
iterable: false,
type: String,
),
'body': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'body',
iterable: false,
type: String,
),
'createdAt': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'created_at',
iterable: false,
type: DateTime,
),
};
@override
Future<int?> primaryKeyByUniqueColumns(
ChatMessage instance,
DatabaseExecutor executor,
) async => instance.primaryKey;
@override
final String tableName = 'ChatMessage';
@override
Future<ChatMessage> fromSupabase(
Map<String, dynamic> input, {
required provider,
covariant OfflineFirstWithSupabaseRepository? repository,
}) async => await _$ChatMessageFromSupabase(
input,
provider: provider,
repository: repository,
);
@override
Future<Map<String, dynamic>> toSupabase(
ChatMessage input, {
required provider,
covariant OfflineFirstWithSupabaseRepository? repository,
}) async => await _$ChatMessageToSupabase(
input,
provider: provider,
repository: repository,
);
@override
Future<ChatMessage> fromSqlite(
Map<String, dynamic> input, {
required provider,
covariant OfflineFirstWithSupabaseRepository? repository,
}) async => await _$ChatMessageFromSqlite(
input,
provider: provider,
repository: repository,
);
@override
Future<Map<String, dynamic>> toSqlite(
ChatMessage input, {
required provider,
covariant OfflineFirstWithSupabaseRepository? repository,
}) async => await _$ChatMessageToSqlite(
input,
provider: provider,
repository: repository,
);
}
@@ -0,0 +1,265 @@
// GENERATED CODE DO NOT EDIT
part of '../brick.g.dart';
Future<DutySchedule> _$DutyScheduleFromSupabase(
Map<String, dynamic> data, {
required SupabaseProvider provider,
OfflineFirstWithSupabaseRepository? repository,
}) async {
return DutySchedule(
id: data['id'] as String,
userId: data['user_id'] as String,
shiftType: data['shift_type'] as String,
startTime: DateTime.parse(data['start_time'] as String),
endTime: DateTime.parse(data['end_time'] as String),
status: data['status'] as String,
createdAt: DateTime.parse(data['created_at'] as String),
checkInAt: data['check_in_at'] == null
? null
: data['check_in_at'] == null
? null
: DateTime.tryParse(data['check_in_at'] as String),
relieverIds: data['reliever_ids'].toList().cast<String>(),
swapRequestId: data['swap_request_id'] == null
? null
: data['swap_request_id'] as String?,
);
}
Future<Map<String, dynamic>> _$DutyScheduleToSupabase(
DutySchedule instance, {
required SupabaseProvider provider,
OfflineFirstWithSupabaseRepository? repository,
}) async {
return {
'id': instance.id,
'user_id': instance.userId,
'shift_type': instance.shiftType,
'start_time': instance.startTime.toIso8601String(),
'end_time': instance.endTime.toIso8601String(),
'status': instance.status,
'created_at': instance.createdAt.toIso8601String(),
'check_in_at': instance.checkInAt?.toIso8601String(),
'reliever_ids': instance.relieverIds,
'swap_request_id': instance.swapRequestId,
};
}
Future<DutySchedule> _$DutyScheduleFromSqlite(
Map<String, dynamic> data, {
required SqliteProvider provider,
OfflineFirstWithSupabaseRepository? repository,
}) async {
return DutySchedule(
id: data['id'] as String,
userId: data['user_id'] as String,
shiftType: data['shift_type'] as String,
startTime: DateTime.parse(data['start_time'] as String),
endTime: DateTime.parse(data['end_time'] as String),
status: data['status'] as String,
createdAt: DateTime.parse(data['created_at'] as String),
checkInAt: data['check_in_at'] == null
? null
: data['check_in_at'] == null
? null
: DateTime.tryParse(data['check_in_at'] as String),
relieverIds: jsonDecode(data['reliever_ids']).toList().cast<String>(),
swapRequestId: data['swap_request_id'] == null
? null
: data['swap_request_id'] as String?,
)..primaryKey = data['_brick_id'] as int;
}
Future<Map<String, dynamic>> _$DutyScheduleToSqlite(
DutySchedule instance, {
required SqliteProvider provider,
OfflineFirstWithSupabaseRepository? repository,
}) async {
return {
'id': instance.id,
'user_id': instance.userId,
'shift_type': instance.shiftType,
'start_time': instance.startTime.toIso8601String(),
'end_time': instance.endTime.toIso8601String(),
'status': instance.status,
'created_at': instance.createdAt.toIso8601String(),
'check_in_at': instance.checkInAt?.toIso8601String(),
'reliever_ids': jsonEncode(instance.relieverIds),
'swap_request_id': instance.swapRequestId,
};
}
/// Construct a [DutySchedule]
class DutyScheduleAdapter
extends OfflineFirstWithSupabaseAdapter<DutySchedule> {
DutyScheduleAdapter();
@override
final supabaseTableName = 'duty_schedules';
@override
final defaultToNull = true;
@override
final fieldsToSupabaseColumns = {
'id': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'id',
),
'userId': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'user_id',
),
'shiftType': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'shift_type',
),
'startTime': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'start_time',
),
'endTime': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'end_time',
),
'status': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'status',
),
'createdAt': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'created_at',
),
'checkInAt': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'check_in_at',
),
'relieverIds': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'reliever_ids',
),
'swapRequestId': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'swap_request_id',
),
};
@override
final ignoreDuplicates = false;
@override
final uniqueFields = {};
@override
final Map<String, RuntimeSqliteColumnDefinition> fieldsToSqliteColumns = {
'primaryKey': const RuntimeSqliteColumnDefinition(
association: false,
columnName: '_brick_id',
iterable: false,
type: int,
),
'id': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'id',
iterable: false,
type: String,
),
'userId': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'user_id',
iterable: false,
type: String,
),
'shiftType': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'shift_type',
iterable: false,
type: String,
),
'startTime': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'start_time',
iterable: false,
type: DateTime,
),
'endTime': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'end_time',
iterable: false,
type: DateTime,
),
'status': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'status',
iterable: false,
type: String,
),
'createdAt': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'created_at',
iterable: false,
type: DateTime,
),
'checkInAt': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'check_in_at',
iterable: false,
type: DateTime,
),
'relieverIds': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'reliever_ids',
iterable: true,
type: String,
),
'swapRequestId': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'swap_request_id',
iterable: false,
type: String,
),
};
@override
Future<int?> primaryKeyByUniqueColumns(
DutySchedule instance,
DatabaseExecutor executor,
) async => instance.primaryKey;
@override
final String tableName = 'DutySchedule';
@override
Future<DutySchedule> fromSupabase(
Map<String, dynamic> input, {
required provider,
covariant OfflineFirstWithSupabaseRepository? repository,
}) async => await _$DutyScheduleFromSupabase(
input,
provider: provider,
repository: repository,
);
@override
Future<Map<String, dynamic>> toSupabase(
DutySchedule input, {
required provider,
covariant OfflineFirstWithSupabaseRepository? repository,
}) async => await _$DutyScheduleToSupabase(
input,
provider: provider,
repository: repository,
);
@override
Future<DutySchedule> fromSqlite(
Map<String, dynamic> input, {
required provider,
covariant OfflineFirstWithSupabaseRepository? repository,
}) async => await _$DutyScheduleFromSqlite(
input,
provider: provider,
repository: repository,
);
@override
Future<Map<String, dynamic>> toSqlite(
DutySchedule input, {
required provider,
covariant OfflineFirstWithSupabaseRepository? repository,
}) async => await _$DutyScheduleToSqlite(
input,
provider: provider,
repository: repository,
);
}
@@ -0,0 +1,201 @@
// GENERATED CODE DO NOT EDIT
part of '../brick.g.dart';
Future<ItServiceRequestAction> _$ItServiceRequestActionFromSupabase(
Map<String, dynamic> data, {
required SupabaseProvider provider,
OfflineFirstWithSupabaseRepository? repository,
}) async {
return ItServiceRequestAction(
id: data['id'] as String,
requestId: data['request_id'] as String,
userId: data['user_id'] as String,
actionTaken: data['action_taken'] == null
? null
: data['action_taken'] as String?,
createdAt: DateTime.parse(data['created_at'] as String),
updatedAt: DateTime.parse(data['updated_at'] as String),
);
}
Future<Map<String, dynamic>> _$ItServiceRequestActionToSupabase(
ItServiceRequestAction instance, {
required SupabaseProvider provider,
OfflineFirstWithSupabaseRepository? repository,
}) async {
return {
'id': instance.id,
'request_id': instance.requestId,
'user_id': instance.userId,
'action_taken': instance.actionTaken,
'created_at': instance.createdAt.toIso8601String(),
'updated_at': instance.updatedAt.toIso8601String(),
};
}
Future<ItServiceRequestAction> _$ItServiceRequestActionFromSqlite(
Map<String, dynamic> data, {
required SqliteProvider provider,
OfflineFirstWithSupabaseRepository? repository,
}) async {
return ItServiceRequestAction(
id: data['id'] as String,
requestId: data['request_id'] as String,
userId: data['user_id'] as String,
actionTaken: data['action_taken'] == null
? null
: data['action_taken'] as String?,
createdAt: DateTime.parse(data['created_at'] as String),
updatedAt: DateTime.parse(data['updated_at'] as String),
)..primaryKey = data['_brick_id'] as int;
}
Future<Map<String, dynamic>> _$ItServiceRequestActionToSqlite(
ItServiceRequestAction instance, {
required SqliteProvider provider,
OfflineFirstWithSupabaseRepository? repository,
}) async {
return {
'id': instance.id,
'request_id': instance.requestId,
'user_id': instance.userId,
'action_taken': instance.actionTaken,
'created_at': instance.createdAt.toIso8601String(),
'updated_at': instance.updatedAt.toIso8601String(),
};
}
/// Construct a [ItServiceRequestAction]
class ItServiceRequestActionAdapter
extends OfflineFirstWithSupabaseAdapter<ItServiceRequestAction> {
ItServiceRequestActionAdapter();
@override
final supabaseTableName = 'it_service_request_actions';
@override
final defaultToNull = true;
@override
final fieldsToSupabaseColumns = {
'id': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'id',
),
'requestId': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'request_id',
),
'userId': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'user_id',
),
'actionTaken': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'action_taken',
),
'createdAt': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'created_at',
),
'updatedAt': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'updated_at',
),
};
@override
final ignoreDuplicates = false;
@override
final uniqueFields = {};
@override
final Map<String, RuntimeSqliteColumnDefinition> fieldsToSqliteColumns = {
'primaryKey': const RuntimeSqliteColumnDefinition(
association: false,
columnName: '_brick_id',
iterable: false,
type: int,
),
'id': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'id',
iterable: false,
type: String,
),
'requestId': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'request_id',
iterable: false,
type: String,
),
'userId': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'user_id',
iterable: false,
type: String,
),
'actionTaken': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'action_taken',
iterable: false,
type: String,
),
'createdAt': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'created_at',
iterable: false,
type: DateTime,
),
'updatedAt': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'updated_at',
iterable: false,
type: DateTime,
),
};
@override
Future<int?> primaryKeyByUniqueColumns(
ItServiceRequestAction instance,
DatabaseExecutor executor,
) async => instance.primaryKey;
@override
final String tableName = 'ItServiceRequestAction';
@override
Future<ItServiceRequestAction> fromSupabase(
Map<String, dynamic> input, {
required provider,
covariant OfflineFirstWithSupabaseRepository? repository,
}) async => await _$ItServiceRequestActionFromSupabase(
input,
provider: provider,
repository: repository,
);
@override
Future<Map<String, dynamic>> toSupabase(
ItServiceRequestAction input, {
required provider,
covariant OfflineFirstWithSupabaseRepository? repository,
}) async => await _$ItServiceRequestActionToSupabase(
input,
provider: provider,
repository: repository,
);
@override
Future<ItServiceRequestAction> fromSqlite(
Map<String, dynamic> input, {
required provider,
covariant OfflineFirstWithSupabaseRepository? repository,
}) async => await _$ItServiceRequestActionFromSqlite(
input,
provider: provider,
repository: repository,
);
@override
Future<Map<String, dynamic>> toSqlite(
ItServiceRequestAction input, {
required provider,
covariant OfflineFirstWithSupabaseRepository? repository,
}) async => await _$ItServiceRequestActionToSqlite(
input,
provider: provider,
repository: repository,
);
}
@@ -0,0 +1,197 @@
// GENERATED CODE DO NOT EDIT
part of '../brick.g.dart';
Future<ItServiceRequestActivityLog> _$ItServiceRequestActivityLogFromSupabase(
Map<String, dynamic> data, {
required SupabaseProvider provider,
OfflineFirstWithSupabaseRepository? repository,
}) async {
return ItServiceRequestActivityLog(
id: data['id'] as String,
requestId: data['request_id'] as String,
actorId: data['actor_id'] == null ? null : data['actor_id'] as String?,
actionType: data['action_type'] as String,
meta: data['meta'] == null ? null : data['meta'],
createdAt: DateTime.parse(data['created_at'] as String),
);
}
Future<Map<String, dynamic>> _$ItServiceRequestActivityLogToSupabase(
ItServiceRequestActivityLog instance, {
required SupabaseProvider provider,
OfflineFirstWithSupabaseRepository? repository,
}) async {
return {
'id': instance.id,
'request_id': instance.requestId,
'actor_id': instance.actorId,
'action_type': instance.actionType,
'meta': instance.meta,
'created_at': instance.createdAt.toIso8601String(),
};
}
Future<ItServiceRequestActivityLog> _$ItServiceRequestActivityLogFromSqlite(
Map<String, dynamic> data, {
required SqliteProvider provider,
OfflineFirstWithSupabaseRepository? repository,
}) async {
return ItServiceRequestActivityLog(
id: data['id'] as String,
requestId: data['request_id'] as String,
actorId: data['actor_id'] == null ? null : data['actor_id'] as String?,
actionType: data['action_type'] as String,
meta: data['meta'] == null ? null : jsonDecode(data['meta']),
createdAt: DateTime.parse(data['created_at'] as String),
)..primaryKey = data['_brick_id'] as int;
}
Future<Map<String, dynamic>> _$ItServiceRequestActivityLogToSqlite(
ItServiceRequestActivityLog instance, {
required SqliteProvider provider,
OfflineFirstWithSupabaseRepository? repository,
}) async {
return {
'id': instance.id,
'request_id': instance.requestId,
'actor_id': instance.actorId,
'action_type': instance.actionType,
'meta': instance.meta != null ? jsonEncode(instance.meta) : null,
'created_at': instance.createdAt.toIso8601String(),
};
}
/// Construct a [ItServiceRequestActivityLog]
class ItServiceRequestActivityLogAdapter
extends OfflineFirstWithSupabaseAdapter<ItServiceRequestActivityLog> {
ItServiceRequestActivityLogAdapter();
@override
final supabaseTableName = 'it_service_request_activity_logs';
@override
final defaultToNull = true;
@override
final fieldsToSupabaseColumns = {
'id': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'id',
),
'requestId': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'request_id',
),
'actorId': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'actor_id',
),
'actionType': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'action_type',
),
'meta': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'meta',
),
'createdAt': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'created_at',
),
};
@override
final ignoreDuplicates = false;
@override
final uniqueFields = {};
@override
final Map<String, RuntimeSqliteColumnDefinition> fieldsToSqliteColumns = {
'primaryKey': const RuntimeSqliteColumnDefinition(
association: false,
columnName: '_brick_id',
iterable: false,
type: int,
),
'id': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'id',
iterable: false,
type: String,
),
'requestId': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'request_id',
iterable: false,
type: String,
),
'actorId': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'actor_id',
iterable: false,
type: String,
),
'actionType': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'action_type',
iterable: false,
type: String,
),
'meta': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'meta',
iterable: false,
type: Map,
),
'createdAt': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'created_at',
iterable: false,
type: DateTime,
),
};
@override
Future<int?> primaryKeyByUniqueColumns(
ItServiceRequestActivityLog instance,
DatabaseExecutor executor,
) async => instance.primaryKey;
@override
final String tableName = 'ItServiceRequestActivityLog';
@override
Future<ItServiceRequestActivityLog> fromSupabase(
Map<String, dynamic> input, {
required provider,
covariant OfflineFirstWithSupabaseRepository? repository,
}) async => await _$ItServiceRequestActivityLogFromSupabase(
input,
provider: provider,
repository: repository,
);
@override
Future<Map<String, dynamic>> toSupabase(
ItServiceRequestActivityLog input, {
required provider,
covariant OfflineFirstWithSupabaseRepository? repository,
}) async => await _$ItServiceRequestActivityLogToSupabase(
input,
provider: provider,
repository: repository,
);
@override
Future<ItServiceRequestActivityLog> fromSqlite(
Map<String, dynamic> input, {
required provider,
covariant OfflineFirstWithSupabaseRepository? repository,
}) async => await _$ItServiceRequestActivityLogFromSqlite(
input,
provider: provider,
repository: repository,
);
@override
Future<Map<String, dynamic>> toSqlite(
ItServiceRequestActivityLog input, {
required provider,
covariant OfflineFirstWithSupabaseRepository? repository,
}) async => await _$ItServiceRequestActivityLogToSqlite(
input,
provider: provider,
repository: repository,
);
}
@@ -0,0 +1,635 @@
// GENERATED CODE DO NOT EDIT
part of '../brick.g.dart';
Future<ItServiceRequest> _$ItServiceRequestFromSupabase(
Map<String, dynamic> data, {
required SupabaseProvider provider,
OfflineFirstWithSupabaseRepository? repository,
}) async {
return ItServiceRequest(
id: data['id'] as String,
requestNumber: data['request_number'] == null
? null
: data['request_number'] as String?,
services: data['services'].toList().cast<String>(),
servicesOther: data['services_other'] == null
? null
: data['services_other'] as String?,
eventName: data['event_name'] as String,
eventDetails: data['event_details'] == null
? null
: data['event_details'] as String?,
eventDate: data['event_date'] == null
? null
: data['event_date'] == null
? null
: DateTime.tryParse(data['event_date'] as String),
eventEndDate: data['event_end_date'] == null
? null
: data['event_end_date'] == null
? null
: DateTime.tryParse(data['event_end_date'] as String),
dryRunDate: data['dry_run_date'] == null
? null
: data['dry_run_date'] == null
? null
: DateTime.tryParse(data['dry_run_date'] as String),
dryRunEndDate: data['dry_run_end_date'] == null
? null
: data['dry_run_end_date'] == null
? null
: DateTime.tryParse(data['dry_run_end_date'] as String),
contactPerson: data['contact_person'] == null
? null
: data['contact_person'] as String?,
contactNumber: data['contact_number'] == null
? null
: data['contact_number'] as String?,
remarks: data['remarks'] == null ? null : data['remarks'] as String?,
officeId: data['office_id'] == null ? null : data['office_id'] as String?,
requestedBy: data['requested_by'] == null
? null
: data['requested_by'] as String?,
requestedByUserId: data['requested_by_user_id'] == null
? null
: data['requested_by_user_id'] as String?,
approvedBy: data['approved_by'] == null
? null
: data['approved_by'] as String?,
approvedByUserId: data['approved_by_user_id'] == null
? null
: data['approved_by_user_id'] as String?,
approvedAt: data['approved_at'] == null
? null
: data['approved_at'] == null
? null
: DateTime.tryParse(data['approved_at'] as String),
status: data['status'] as String,
outsidePremiseAllowed: data['outside_premise_allowed'] as bool,
cancellationReason: data['cancellation_reason'] == null
? null
: data['cancellation_reason'] as String?,
cancelledAt: data['cancelled_at'] == null
? null
: data['cancelled_at'] == null
? null
: DateTime.tryParse(data['cancelled_at'] as String),
creatorId: data['creator_id'] == null
? null
: data['creator_id'] as String?,
createdAt: DateTime.parse(data['created_at'] as String),
updatedAt: DateTime.parse(data['updated_at'] as String),
completedAt: data['completed_at'] == null
? null
: data['completed_at'] == null
? null
: DateTime.tryParse(data['completed_at'] as String),
dateTimeReceived: data['date_time_received'] == null
? null
: data['date_time_received'] == null
? null
: DateTime.tryParse(data['date_time_received'] as String),
dateTimeChecked: data['date_time_checked'] == null
? null
: data['date_time_checked'] == null
? null
: DateTime.tryParse(data['date_time_checked'] as String),
);
}
Future<Map<String, dynamic>> _$ItServiceRequestToSupabase(
ItServiceRequest instance, {
required SupabaseProvider provider,
OfflineFirstWithSupabaseRepository? repository,
}) async {
return {
'id': instance.id,
'request_number': instance.requestNumber,
'services': instance.services,
'services_other': instance.servicesOther,
'event_name': instance.eventName,
'event_details': instance.eventDetails,
'event_date': instance.eventDate?.toIso8601String(),
'event_end_date': instance.eventEndDate?.toIso8601String(),
'dry_run_date': instance.dryRunDate?.toIso8601String(),
'dry_run_end_date': instance.dryRunEndDate?.toIso8601String(),
'contact_person': instance.contactPerson,
'contact_number': instance.contactNumber,
'remarks': instance.remarks,
'office_id': instance.officeId,
'requested_by': instance.requestedBy,
'requested_by_user_id': instance.requestedByUserId,
'approved_by': instance.approvedBy,
'approved_by_user_id': instance.approvedByUserId,
'approved_at': instance.approvedAt?.toIso8601String(),
'status': instance.status,
'outside_premise_allowed': instance.outsidePremiseAllowed,
'cancellation_reason': instance.cancellationReason,
'cancelled_at': instance.cancelledAt?.toIso8601String(),
'creator_id': instance.creatorId,
'created_at': instance.createdAt.toIso8601String(),
'updated_at': instance.updatedAt.toIso8601String(),
'completed_at': instance.completedAt?.toIso8601String(),
'date_time_received': instance.dateTimeReceived?.toIso8601String(),
'date_time_checked': instance.dateTimeChecked?.toIso8601String(),
};
}
Future<ItServiceRequest> _$ItServiceRequestFromSqlite(
Map<String, dynamic> data, {
required SqliteProvider provider,
OfflineFirstWithSupabaseRepository? repository,
}) async {
return ItServiceRequest(
id: data['id'] as String,
requestNumber: data['request_number'] == null
? null
: data['request_number'] as String?,
services: jsonDecode(data['services']).toList().cast<String>(),
servicesOther: data['services_other'] == null
? null
: data['services_other'] as String?,
eventName: data['event_name'] as String,
eventDetails: data['event_details'] == null
? null
: data['event_details'] as String?,
eventDate: data['event_date'] == null
? null
: data['event_date'] == null
? null
: DateTime.tryParse(data['event_date'] as String),
eventEndDate: data['event_end_date'] == null
? null
: data['event_end_date'] == null
? null
: DateTime.tryParse(data['event_end_date'] as String),
dryRunDate: data['dry_run_date'] == null
? null
: data['dry_run_date'] == null
? null
: DateTime.tryParse(data['dry_run_date'] as String),
dryRunEndDate: data['dry_run_end_date'] == null
? null
: data['dry_run_end_date'] == null
? null
: DateTime.tryParse(data['dry_run_end_date'] as String),
contactPerson: data['contact_person'] == null
? null
: data['contact_person'] as String?,
contactNumber: data['contact_number'] == null
? null
: data['contact_number'] as String?,
remarks: data['remarks'] == null ? null : data['remarks'] as String?,
officeId: data['office_id'] == null ? null : data['office_id'] as String?,
requestedBy: data['requested_by'] == null
? null
: data['requested_by'] as String?,
requestedByUserId: data['requested_by_user_id'] == null
? null
: data['requested_by_user_id'] as String?,
approvedBy: data['approved_by'] == null
? null
: data['approved_by'] as String?,
approvedByUserId: data['approved_by_user_id'] == null
? null
: data['approved_by_user_id'] as String?,
approvedAt: data['approved_at'] == null
? null
: data['approved_at'] == null
? null
: DateTime.tryParse(data['approved_at'] as String),
status: data['status'] as String,
outsidePremiseAllowed: data['outside_premise_allowed'] == 1,
cancellationReason: data['cancellation_reason'] == null
? null
: data['cancellation_reason'] as String?,
cancelledAt: data['cancelled_at'] == null
? null
: data['cancelled_at'] == null
? null
: DateTime.tryParse(data['cancelled_at'] as String),
creatorId: data['creator_id'] == null
? null
: data['creator_id'] as String?,
createdAt: DateTime.parse(data['created_at'] as String),
updatedAt: DateTime.parse(data['updated_at'] as String),
completedAt: data['completed_at'] == null
? null
: data['completed_at'] == null
? null
: DateTime.tryParse(data['completed_at'] as String),
dateTimeReceived: data['date_time_received'] == null
? null
: data['date_time_received'] == null
? null
: DateTime.tryParse(data['date_time_received'] as String),
dateTimeChecked: data['date_time_checked'] == null
? null
: data['date_time_checked'] == null
? null
: DateTime.tryParse(data['date_time_checked'] as String),
)..primaryKey = data['_brick_id'] as int;
}
Future<Map<String, dynamic>> _$ItServiceRequestToSqlite(
ItServiceRequest instance, {
required SqliteProvider provider,
OfflineFirstWithSupabaseRepository? repository,
}) async {
return {
'id': instance.id,
'request_number': instance.requestNumber,
'services': jsonEncode(instance.services),
'services_other': instance.servicesOther,
'event_name': instance.eventName,
'event_details': instance.eventDetails,
'event_date': instance.eventDate?.toIso8601String(),
'event_end_date': instance.eventEndDate?.toIso8601String(),
'dry_run_date': instance.dryRunDate?.toIso8601String(),
'dry_run_end_date': instance.dryRunEndDate?.toIso8601String(),
'contact_person': instance.contactPerson,
'contact_number': instance.contactNumber,
'remarks': instance.remarks,
'office_id': instance.officeId,
'requested_by': instance.requestedBy,
'requested_by_user_id': instance.requestedByUserId,
'approved_by': instance.approvedBy,
'approved_by_user_id': instance.approvedByUserId,
'approved_at': instance.approvedAt?.toIso8601String(),
'status': instance.status,
'outside_premise_allowed': instance.outsidePremiseAllowed ? 1 : 0,
'cancellation_reason': instance.cancellationReason,
'cancelled_at': instance.cancelledAt?.toIso8601String(),
'creator_id': instance.creatorId,
'created_at': instance.createdAt.toIso8601String(),
'updated_at': instance.updatedAt.toIso8601String(),
'completed_at': instance.completedAt?.toIso8601String(),
'date_time_received': instance.dateTimeReceived?.toIso8601String(),
'date_time_checked': instance.dateTimeChecked?.toIso8601String(),
};
}
/// Construct a [ItServiceRequest]
class ItServiceRequestAdapter
extends OfflineFirstWithSupabaseAdapter<ItServiceRequest> {
ItServiceRequestAdapter();
@override
final supabaseTableName = 'it_service_requests';
@override
final defaultToNull = true;
@override
final fieldsToSupabaseColumns = {
'id': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'id',
),
'requestNumber': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'request_number',
),
'services': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'services',
),
'servicesOther': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'services_other',
),
'eventName': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'event_name',
),
'eventDetails': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'event_details',
),
'eventDate': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'event_date',
),
'eventEndDate': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'event_end_date',
),
'dryRunDate': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'dry_run_date',
),
'dryRunEndDate': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'dry_run_end_date',
),
'contactPerson': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'contact_person',
),
'contactNumber': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'contact_number',
),
'remarks': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'remarks',
),
'officeId': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'office_id',
),
'requestedBy': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'requested_by',
),
'requestedByUserId': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'requested_by_user_id',
),
'approvedBy': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'approved_by',
),
'approvedByUserId': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'approved_by_user_id',
),
'approvedAt': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'approved_at',
),
'status': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'status',
),
'outsidePremiseAllowed': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'outside_premise_allowed',
),
'cancellationReason': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'cancellation_reason',
),
'cancelledAt': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'cancelled_at',
),
'creatorId': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'creator_id',
),
'createdAt': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'created_at',
),
'updatedAt': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'updated_at',
),
'completedAt': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'completed_at',
),
'dateTimeReceived': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'date_time_received',
),
'dateTimeChecked': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'date_time_checked',
),
};
@override
final ignoreDuplicates = false;
@override
final uniqueFields = {};
@override
final Map<String, RuntimeSqliteColumnDefinition> fieldsToSqliteColumns = {
'primaryKey': const RuntimeSqliteColumnDefinition(
association: false,
columnName: '_brick_id',
iterable: false,
type: int,
),
'id': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'id',
iterable: false,
type: String,
),
'requestNumber': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'request_number',
iterable: false,
type: String,
),
'services': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'services',
iterable: true,
type: String,
),
'servicesOther': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'services_other',
iterable: false,
type: String,
),
'eventName': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'event_name',
iterable: false,
type: String,
),
'eventDetails': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'event_details',
iterable: false,
type: String,
),
'eventDate': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'event_date',
iterable: false,
type: DateTime,
),
'eventEndDate': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'event_end_date',
iterable: false,
type: DateTime,
),
'dryRunDate': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'dry_run_date',
iterable: false,
type: DateTime,
),
'dryRunEndDate': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'dry_run_end_date',
iterable: false,
type: DateTime,
),
'contactPerson': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'contact_person',
iterable: false,
type: String,
),
'contactNumber': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'contact_number',
iterable: false,
type: String,
),
'remarks': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'remarks',
iterable: false,
type: String,
),
'officeId': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'office_id',
iterable: false,
type: String,
),
'requestedBy': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'requested_by',
iterable: false,
type: String,
),
'requestedByUserId': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'requested_by_user_id',
iterable: false,
type: String,
),
'approvedBy': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'approved_by',
iterable: false,
type: String,
),
'approvedByUserId': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'approved_by_user_id',
iterable: false,
type: String,
),
'approvedAt': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'approved_at',
iterable: false,
type: DateTime,
),
'status': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'status',
iterable: false,
type: String,
),
'outsidePremiseAllowed': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'outside_premise_allowed',
iterable: false,
type: bool,
),
'cancellationReason': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'cancellation_reason',
iterable: false,
type: String,
),
'cancelledAt': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'cancelled_at',
iterable: false,
type: DateTime,
),
'creatorId': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'creator_id',
iterable: false,
type: String,
),
'createdAt': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'created_at',
iterable: false,
type: DateTime,
),
'updatedAt': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'updated_at',
iterable: false,
type: DateTime,
),
'completedAt': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'completed_at',
iterable: false,
type: DateTime,
),
'dateTimeReceived': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'date_time_received',
iterable: false,
type: DateTime,
),
'dateTimeChecked': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'date_time_checked',
iterable: false,
type: DateTime,
),
};
@override
Future<int?> primaryKeyByUniqueColumns(
ItServiceRequest instance,
DatabaseExecutor executor,
) async => instance.primaryKey;
@override
final String tableName = 'ItServiceRequest';
@override
Future<ItServiceRequest> fromSupabase(
Map<String, dynamic> input, {
required provider,
covariant OfflineFirstWithSupabaseRepository? repository,
}) async => await _$ItServiceRequestFromSupabase(
input,
provider: provider,
repository: repository,
);
@override
Future<Map<String, dynamic>> toSupabase(
ItServiceRequest input, {
required provider,
covariant OfflineFirstWithSupabaseRepository? repository,
}) async => await _$ItServiceRequestToSupabase(
input,
provider: provider,
repository: repository,
);
@override
Future<ItServiceRequest> fromSqlite(
Map<String, dynamic> input, {
required provider,
covariant OfflineFirstWithSupabaseRepository? repository,
}) async => await _$ItServiceRequestFromSqlite(
input,
provider: provider,
repository: repository,
);
@override
Future<Map<String, dynamic>> toSqlite(
ItServiceRequest input, {
required provider,
covariant OfflineFirstWithSupabaseRepository? repository,
}) async => await _$ItServiceRequestToSqlite(
input,
provider: provider,
repository: repository,
);
}
@@ -0,0 +1,169 @@
// GENERATED CODE DO NOT EDIT
part of '../brick.g.dart';
Future<ItServiceRequestAssignment> _$ItServiceRequestAssignmentFromSupabase(
Map<String, dynamic> data, {
required SupabaseProvider provider,
OfflineFirstWithSupabaseRepository? repository,
}) async {
return ItServiceRequestAssignment(
id: data['id'] as String,
requestId: data['request_id'] as String,
userId: data['user_id'] as String,
createdAt: DateTime.parse(data['created_at'] as String),
);
}
Future<Map<String, dynamic>> _$ItServiceRequestAssignmentToSupabase(
ItServiceRequestAssignment instance, {
required SupabaseProvider provider,
OfflineFirstWithSupabaseRepository? repository,
}) async {
return {
'id': instance.id,
'request_id': instance.requestId,
'user_id': instance.userId,
'created_at': instance.createdAt.toIso8601String(),
};
}
Future<ItServiceRequestAssignment> _$ItServiceRequestAssignmentFromSqlite(
Map<String, dynamic> data, {
required SqliteProvider provider,
OfflineFirstWithSupabaseRepository? repository,
}) async {
return ItServiceRequestAssignment(
id: data['id'] as String,
requestId: data['request_id'] as String,
userId: data['user_id'] as String,
createdAt: DateTime.parse(data['created_at'] as String),
)..primaryKey = data['_brick_id'] as int;
}
Future<Map<String, dynamic>> _$ItServiceRequestAssignmentToSqlite(
ItServiceRequestAssignment instance, {
required SqliteProvider provider,
OfflineFirstWithSupabaseRepository? repository,
}) async {
return {
'id': instance.id,
'request_id': instance.requestId,
'user_id': instance.userId,
'created_at': instance.createdAt.toIso8601String(),
};
}
/// Construct a [ItServiceRequestAssignment]
class ItServiceRequestAssignmentAdapter
extends OfflineFirstWithSupabaseAdapter<ItServiceRequestAssignment> {
ItServiceRequestAssignmentAdapter();
@override
final supabaseTableName = 'it_service_request_assignments';
@override
final defaultToNull = true;
@override
final fieldsToSupabaseColumns = {
'id': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'id',
),
'requestId': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'request_id',
),
'userId': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'user_id',
),
'createdAt': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'created_at',
),
};
@override
final ignoreDuplicates = false;
@override
final uniqueFields = {};
@override
final Map<String, RuntimeSqliteColumnDefinition> fieldsToSqliteColumns = {
'primaryKey': const RuntimeSqliteColumnDefinition(
association: false,
columnName: '_brick_id',
iterable: false,
type: int,
),
'id': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'id',
iterable: false,
type: String,
),
'requestId': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'request_id',
iterable: false,
type: String,
),
'userId': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'user_id',
iterable: false,
type: String,
),
'createdAt': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'created_at',
iterable: false,
type: DateTime,
),
};
@override
Future<int?> primaryKeyByUniqueColumns(
ItServiceRequestAssignment instance,
DatabaseExecutor executor,
) async => instance.primaryKey;
@override
final String tableName = 'ItServiceRequestAssignment';
@override
Future<ItServiceRequestAssignment> fromSupabase(
Map<String, dynamic> input, {
required provider,
covariant OfflineFirstWithSupabaseRepository? repository,
}) async => await _$ItServiceRequestAssignmentFromSupabase(
input,
provider: provider,
repository: repository,
);
@override
Future<Map<String, dynamic>> toSupabase(
ItServiceRequestAssignment input, {
required provider,
covariant OfflineFirstWithSupabaseRepository? repository,
}) async => await _$ItServiceRequestAssignmentToSupabase(
input,
provider: provider,
repository: repository,
);
@override
Future<ItServiceRequestAssignment> fromSqlite(
Map<String, dynamic> input, {
required provider,
covariant OfflineFirstWithSupabaseRepository? repository,
}) async => await _$ItServiceRequestAssignmentFromSqlite(
input,
provider: provider,
repository: repository,
);
@override
Future<Map<String, dynamic>> toSqlite(
ItServiceRequestAssignment input, {
required provider,
covariant OfflineFirstWithSupabaseRepository? repository,
}) async => await _$ItServiceRequestAssignmentToSqlite(
input,
provider: provider,
repository: repository,
);
}
@@ -0,0 +1,239 @@
// GENERATED CODE DO NOT EDIT
part of '../brick.g.dart';
Future<LeaveOfAbsence> _$LeaveOfAbsenceFromSupabase(
Map<String, dynamic> data, {
required SupabaseProvider provider,
OfflineFirstWithSupabaseRepository? repository,
}) async {
return LeaveOfAbsence(
id: data['id'] as String,
userId: data['user_id'] as String,
leaveType: data['leave_type'] as String,
justification: data['justification'] as String,
startTime: DateTime.parse(data['start_time'] as String),
endTime: DateTime.parse(data['end_time'] as String),
status: data['status'] as String,
filedBy: data['filed_by'] as String,
createdAt: DateTime.parse(data['created_at'] as String),
);
}
Future<Map<String, dynamic>> _$LeaveOfAbsenceToSupabase(
LeaveOfAbsence instance, {
required SupabaseProvider provider,
OfflineFirstWithSupabaseRepository? repository,
}) async {
return {
'id': instance.id,
'user_id': instance.userId,
'leave_type': instance.leaveType,
'justification': instance.justification,
'start_time': instance.startTime.toIso8601String(),
'end_time': instance.endTime.toIso8601String(),
'status': instance.status,
'filed_by': instance.filedBy,
'created_at': instance.createdAt.toIso8601String(),
};
}
Future<LeaveOfAbsence> _$LeaveOfAbsenceFromSqlite(
Map<String, dynamic> data, {
required SqliteProvider provider,
OfflineFirstWithSupabaseRepository? repository,
}) async {
return LeaveOfAbsence(
id: data['id'] as String,
userId: data['user_id'] as String,
leaveType: data['leave_type'] as String,
justification: data['justification'] as String,
startTime: DateTime.parse(data['start_time'] as String),
endTime: DateTime.parse(data['end_time'] as String),
status: data['status'] as String,
filedBy: data['filed_by'] as String,
createdAt: DateTime.parse(data['created_at'] as String),
)..primaryKey = data['_brick_id'] as int;
}
Future<Map<String, dynamic>> _$LeaveOfAbsenceToSqlite(
LeaveOfAbsence instance, {
required SqliteProvider provider,
OfflineFirstWithSupabaseRepository? repository,
}) async {
return {
'id': instance.id,
'user_id': instance.userId,
'leave_type': instance.leaveType,
'justification': instance.justification,
'start_time': instance.startTime.toIso8601String(),
'end_time': instance.endTime.toIso8601String(),
'status': instance.status,
'filed_by': instance.filedBy,
'created_at': instance.createdAt.toIso8601String(),
};
}
/// Construct a [LeaveOfAbsence]
class LeaveOfAbsenceAdapter
extends OfflineFirstWithSupabaseAdapter<LeaveOfAbsence> {
LeaveOfAbsenceAdapter();
@override
final supabaseTableName = 'leave_of_absence';
@override
final defaultToNull = true;
@override
final fieldsToSupabaseColumns = {
'id': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'id',
),
'userId': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'user_id',
),
'leaveType': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'leave_type',
),
'justification': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'justification',
),
'startTime': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'start_time',
),
'endTime': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'end_time',
),
'status': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'status',
),
'filedBy': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'filed_by',
),
'createdAt': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'created_at',
),
};
@override
final ignoreDuplicates = false;
@override
final uniqueFields = {};
@override
final Map<String, RuntimeSqliteColumnDefinition> fieldsToSqliteColumns = {
'primaryKey': const RuntimeSqliteColumnDefinition(
association: false,
columnName: '_brick_id',
iterable: false,
type: int,
),
'id': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'id',
iterable: false,
type: String,
),
'userId': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'user_id',
iterable: false,
type: String,
),
'leaveType': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'leave_type',
iterable: false,
type: String,
),
'justification': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'justification',
iterable: false,
type: String,
),
'startTime': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'start_time',
iterable: false,
type: DateTime,
),
'endTime': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'end_time',
iterable: false,
type: DateTime,
),
'status': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'status',
iterable: false,
type: String,
),
'filedBy': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'filed_by',
iterable: false,
type: String,
),
'createdAt': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'created_at',
iterable: false,
type: DateTime,
),
};
@override
Future<int?> primaryKeyByUniqueColumns(
LeaveOfAbsence instance,
DatabaseExecutor executor,
) async => instance.primaryKey;
@override
final String tableName = 'LeaveOfAbsence';
@override
Future<LeaveOfAbsence> fromSupabase(
Map<String, dynamic> input, {
required provider,
covariant OfflineFirstWithSupabaseRepository? repository,
}) async => await _$LeaveOfAbsenceFromSupabase(
input,
provider: provider,
repository: repository,
);
@override
Future<Map<String, dynamic>> toSupabase(
LeaveOfAbsence input, {
required provider,
covariant OfflineFirstWithSupabaseRepository? repository,
}) async => await _$LeaveOfAbsenceToSupabase(
input,
provider: provider,
repository: repository,
);
@override
Future<LeaveOfAbsence> fromSqlite(
Map<String, dynamic> input, {
required provider,
covariant OfflineFirstWithSupabaseRepository? repository,
}) async => await _$LeaveOfAbsenceFromSqlite(
input,
provider: provider,
repository: repository,
);
@override
Future<Map<String, dynamic>> toSqlite(
LeaveOfAbsence input, {
required provider,
covariant OfflineFirstWithSupabaseRepository? repository,
}) async => await _$LeaveOfAbsenceToSqlite(
input,
provider: provider,
repository: repository,
);
}
@@ -0,0 +1,315 @@
// GENERATED CODE DO NOT EDIT
part of '../brick.g.dart';
Future<NotificationItem> _$NotificationItemFromSupabase(
Map<String, dynamic> data, {
required SupabaseProvider provider,
OfflineFirstWithSupabaseRepository? repository,
}) async {
return NotificationItem(
id: data['id'] as String,
userId: data['user_id'] as String,
actorId: data['actor_id'] == null ? null : data['actor_id'] as String?,
ticketId: data['ticket_id'] == null ? null : data['ticket_id'] as String?,
taskId: data['task_id'] == null ? null : data['task_id'] as String?,
leaveId: data['leave_id'] == null ? null : data['leave_id'] as String?,
passSlipId: data['pass_slip_id'] == null
? null
: data['pass_slip_id'] as String?,
itServiceRequestId: data['it_service_request_id'] == null
? null
: data['it_service_request_id'] as String?,
announcementId: data['announcement_id'] == null
? null
: data['announcement_id'] as String?,
messageId: data['message_id'] == null ? null : data['message_id'] as int?,
type: data['type'] as String,
createdAt: DateTime.parse(data['created_at'] as String),
readAt: data['read_at'] == null
? null
: data['read_at'] == null
? null
: DateTime.tryParse(data['read_at'] as String),
);
}
Future<Map<String, dynamic>> _$NotificationItemToSupabase(
NotificationItem instance, {
required SupabaseProvider provider,
OfflineFirstWithSupabaseRepository? repository,
}) async {
return {
'id': instance.id,
'user_id': instance.userId,
'actor_id': instance.actorId,
'ticket_id': instance.ticketId,
'task_id': instance.taskId,
'leave_id': instance.leaveId,
'pass_slip_id': instance.passSlipId,
'it_service_request_id': instance.itServiceRequestId,
'announcement_id': instance.announcementId,
'message_id': instance.messageId,
'type': instance.type,
'created_at': instance.createdAt.toIso8601String(),
'read_at': instance.readAt?.toIso8601String(),
};
}
Future<NotificationItem> _$NotificationItemFromSqlite(
Map<String, dynamic> data, {
required SqliteProvider provider,
OfflineFirstWithSupabaseRepository? repository,
}) async {
return NotificationItem(
id: data['id'] as String,
userId: data['user_id'] as String,
actorId: data['actor_id'] == null ? null : data['actor_id'] as String?,
ticketId: data['ticket_id'] == null ? null : data['ticket_id'] as String?,
taskId: data['task_id'] == null ? null : data['task_id'] as String?,
leaveId: data['leave_id'] == null ? null : data['leave_id'] as String?,
passSlipId: data['pass_slip_id'] == null
? null
: data['pass_slip_id'] as String?,
itServiceRequestId: data['it_service_request_id'] == null
? null
: data['it_service_request_id'] as String?,
announcementId: data['announcement_id'] == null
? null
: data['announcement_id'] as String?,
messageId: data['message_id'] == null ? null : data['message_id'] as int?,
type: data['type'] as String,
createdAt: DateTime.parse(data['created_at'] as String),
readAt: data['read_at'] == null
? null
: data['read_at'] == null
? null
: DateTime.tryParse(data['read_at'] as String),
)..primaryKey = data['_brick_id'] as int;
}
Future<Map<String, dynamic>> _$NotificationItemToSqlite(
NotificationItem instance, {
required SqliteProvider provider,
OfflineFirstWithSupabaseRepository? repository,
}) async {
return {
'id': instance.id,
'user_id': instance.userId,
'actor_id': instance.actorId,
'ticket_id': instance.ticketId,
'task_id': instance.taskId,
'leave_id': instance.leaveId,
'pass_slip_id': instance.passSlipId,
'it_service_request_id': instance.itServiceRequestId,
'announcement_id': instance.announcementId,
'message_id': instance.messageId,
'type': instance.type,
'created_at': instance.createdAt.toIso8601String(),
'read_at': instance.readAt?.toIso8601String(),
};
}
/// Construct a [NotificationItem]
class NotificationItemAdapter
extends OfflineFirstWithSupabaseAdapter<NotificationItem> {
NotificationItemAdapter();
@override
final supabaseTableName = 'notifications';
@override
final defaultToNull = true;
@override
final fieldsToSupabaseColumns = {
'id': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'id',
),
'userId': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'user_id',
),
'actorId': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'actor_id',
),
'ticketId': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'ticket_id',
),
'taskId': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'task_id',
),
'leaveId': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'leave_id',
),
'passSlipId': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'pass_slip_id',
),
'itServiceRequestId': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'it_service_request_id',
),
'announcementId': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'announcement_id',
),
'messageId': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'message_id',
),
'type': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'type',
),
'createdAt': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'created_at',
),
'readAt': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'read_at',
),
};
@override
final ignoreDuplicates = false;
@override
final uniqueFields = {};
@override
final Map<String, RuntimeSqliteColumnDefinition> fieldsToSqliteColumns = {
'primaryKey': const RuntimeSqliteColumnDefinition(
association: false,
columnName: '_brick_id',
iterable: false,
type: int,
),
'id': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'id',
iterable: false,
type: String,
),
'userId': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'user_id',
iterable: false,
type: String,
),
'actorId': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'actor_id',
iterable: false,
type: String,
),
'ticketId': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'ticket_id',
iterable: false,
type: String,
),
'taskId': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'task_id',
iterable: false,
type: String,
),
'leaveId': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'leave_id',
iterable: false,
type: String,
),
'passSlipId': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'pass_slip_id',
iterable: false,
type: String,
),
'itServiceRequestId': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'it_service_request_id',
iterable: false,
type: String,
),
'announcementId': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'announcement_id',
iterable: false,
type: String,
),
'messageId': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'message_id',
iterable: false,
type: int,
),
'type': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'type',
iterable: false,
type: String,
),
'createdAt': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'created_at',
iterable: false,
type: DateTime,
),
'readAt': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'read_at',
iterable: false,
type: DateTime,
),
};
@override
Future<int?> primaryKeyByUniqueColumns(
NotificationItem instance,
DatabaseExecutor executor,
) async => instance.primaryKey;
@override
final String tableName = 'NotificationItem';
@override
Future<NotificationItem> fromSupabase(
Map<String, dynamic> input, {
required provider,
covariant OfflineFirstWithSupabaseRepository? repository,
}) async => await _$NotificationItemFromSupabase(
input,
provider: provider,
repository: repository,
);
@override
Future<Map<String, dynamic>> toSupabase(
NotificationItem input, {
required provider,
covariant OfflineFirstWithSupabaseRepository? repository,
}) async => await _$NotificationItemToSupabase(
input,
provider: provider,
repository: repository,
);
@override
Future<NotificationItem> fromSqlite(
Map<String, dynamic> input, {
required provider,
covariant OfflineFirstWithSupabaseRepository? repository,
}) async => await _$NotificationItemFromSqlite(
input,
provider: provider,
repository: repository,
);
@override
Future<Map<String, dynamic>> toSqlite(
NotificationItem input, {
required provider,
covariant OfflineFirstWithSupabaseRepository? repository,
}) async => await _$NotificationItemToSqlite(
input,
provider: provider,
repository: repository,
);
}
+155
View File
@@ -0,0 +1,155 @@
// GENERATED CODE DO NOT EDIT
part of '../brick.g.dart';
Future<Office> _$OfficeFromSupabase(
Map<String, dynamic> data, {
required SupabaseProvider provider,
OfflineFirstWithSupabaseRepository? repository,
}) async {
return Office(
id: data['id'] as String,
name: data['name'] as String,
serviceId: data['service_id'] == null
? null
: data['service_id'] as String?,
);
}
Future<Map<String, dynamic>> _$OfficeToSupabase(
Office instance, {
required SupabaseProvider provider,
OfflineFirstWithSupabaseRepository? repository,
}) async {
return {
'id': instance.id,
'name': instance.name,
'service_id': instance.serviceId,
};
}
Future<Office> _$OfficeFromSqlite(
Map<String, dynamic> data, {
required SqliteProvider provider,
OfflineFirstWithSupabaseRepository? repository,
}) async {
return Office(
id: data['id'] as String,
name: data['name'] as String,
serviceId: data['service_id'] == null
? null
: data['service_id'] as String?,
)..primaryKey = data['_brick_id'] as int;
}
Future<Map<String, dynamic>> _$OfficeToSqlite(
Office instance, {
required SqliteProvider provider,
OfflineFirstWithSupabaseRepository? repository,
}) async {
return {
'id': instance.id,
'name': instance.name,
'service_id': instance.serviceId,
};
}
/// Construct a [Office]
class OfficeAdapter extends OfflineFirstWithSupabaseAdapter<Office> {
OfficeAdapter();
@override
final supabaseTableName = 'offices';
@override
final defaultToNull = true;
@override
final fieldsToSupabaseColumns = {
'id': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'id',
),
'name': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'name',
),
'serviceId': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'service_id',
),
};
@override
final ignoreDuplicates = false;
@override
final uniqueFields = {};
@override
final Map<String, RuntimeSqliteColumnDefinition> fieldsToSqliteColumns = {
'primaryKey': const RuntimeSqliteColumnDefinition(
association: false,
columnName: '_brick_id',
iterable: false,
type: int,
),
'id': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'id',
iterable: false,
type: String,
),
'name': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'name',
iterable: false,
type: String,
),
'serviceId': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'service_id',
iterable: false,
type: String,
),
};
@override
Future<int?> primaryKeyByUniqueColumns(
Office instance,
DatabaseExecutor executor,
) async => instance.primaryKey;
@override
final String tableName = 'Office';
@override
Future<Office> fromSupabase(
Map<String, dynamic> input, {
required provider,
covariant OfflineFirstWithSupabaseRepository? repository,
}) async => await _$OfficeFromSupabase(
input,
provider: provider,
repository: repository,
);
@override
Future<Map<String, dynamic>> toSupabase(
Office input, {
required provider,
covariant OfflineFirstWithSupabaseRepository? repository,
}) async => await _$OfficeToSupabase(
input,
provider: provider,
repository: repository,
);
@override
Future<Office> fromSqlite(
Map<String, dynamic> input, {
required provider,
covariant OfflineFirstWithSupabaseRepository? repository,
}) async => await _$OfficeFromSqlite(
input,
provider: provider,
repository: repository,
);
@override
Future<Map<String, dynamic>> toSqlite(
Office input, {
required provider,
covariant OfflineFirstWithSupabaseRepository? repository,
}) async =>
await _$OfficeToSqlite(input, provider: provider, repository: repository);
}
+302
View File
@@ -0,0 +1,302 @@
// GENERATED CODE DO NOT EDIT
part of '../brick.g.dart';
Future<PassSlip> _$PassSlipFromSupabase(
Map<String, dynamic> data, {
required SupabaseProvider provider,
OfflineFirstWithSupabaseRepository? repository,
}) async {
return PassSlip(
id: data['id'] as String,
userId: data['user_id'] as String,
dutyScheduleId: data['duty_schedule_id'] as String,
reason: data['reason'] as String,
status: data['status'] as String,
requestedAt: DateTime.parse(data['requested_at'] as String),
approvedBy: data['approved_by'] == null
? null
: data['approved_by'] as String?,
approvedAt: data['approved_at'] == null
? null
: data['approved_at'] == null
? null
: DateTime.tryParse(data['approved_at'] as String),
slipStart: data['slip_start'] == null
? null
: data['slip_start'] == null
? null
: DateTime.tryParse(data['slip_start'] as String),
slipEnd: data['slip_end'] == null
? null
: data['slip_end'] == null
? null
: DateTime.tryParse(data['slip_end'] as String),
requestedStart: data['requested_start'] == null
? null
: data['requested_start'] == null
? null
: DateTime.tryParse(data['requested_start'] as String),
);
}
Future<Map<String, dynamic>> _$PassSlipToSupabase(
PassSlip instance, {
required SupabaseProvider provider,
OfflineFirstWithSupabaseRepository? repository,
}) async {
return {
'id': instance.id,
'user_id': instance.userId,
'duty_schedule_id': instance.dutyScheduleId,
'reason': instance.reason,
'status': instance.status,
'requested_at': instance.requestedAt.toIso8601String(),
'approved_by': instance.approvedBy,
'approved_at': instance.approvedAt?.toIso8601String(),
'slip_start': instance.slipStart?.toIso8601String(),
'slip_end': instance.slipEnd?.toIso8601String(),
'requested_start': instance.requestedStart?.toIso8601String(),
};
}
Future<PassSlip> _$PassSlipFromSqlite(
Map<String, dynamic> data, {
required SqliteProvider provider,
OfflineFirstWithSupabaseRepository? repository,
}) async {
return PassSlip(
id: data['id'] as String,
userId: data['user_id'] as String,
dutyScheduleId: data['duty_schedule_id'] as String,
reason: data['reason'] as String,
status: data['status'] as String,
requestedAt: DateTime.parse(data['requested_at'] as String),
approvedBy: data['approved_by'] == null
? null
: data['approved_by'] as String?,
approvedAt: data['approved_at'] == null
? null
: data['approved_at'] == null
? null
: DateTime.tryParse(data['approved_at'] as String),
slipStart: data['slip_start'] == null
? null
: data['slip_start'] == null
? null
: DateTime.tryParse(data['slip_start'] as String),
slipEnd: data['slip_end'] == null
? null
: data['slip_end'] == null
? null
: DateTime.tryParse(data['slip_end'] as String),
requestedStart: data['requested_start'] == null
? null
: data['requested_start'] == null
? null
: DateTime.tryParse(data['requested_start'] as String),
)..primaryKey = data['_brick_id'] as int;
}
Future<Map<String, dynamic>> _$PassSlipToSqlite(
PassSlip instance, {
required SqliteProvider provider,
OfflineFirstWithSupabaseRepository? repository,
}) async {
return {
'id': instance.id,
'user_id': instance.userId,
'duty_schedule_id': instance.dutyScheduleId,
'reason': instance.reason,
'status': instance.status,
'requested_at': instance.requestedAt.toIso8601String(),
'approved_by': instance.approvedBy,
'approved_at': instance.approvedAt?.toIso8601String(),
'slip_start': instance.slipStart?.toIso8601String(),
'slip_end': instance.slipEnd?.toIso8601String(),
'requested_start': instance.requestedStart?.toIso8601String(),
};
}
/// Construct a [PassSlip]
class PassSlipAdapter extends OfflineFirstWithSupabaseAdapter<PassSlip> {
PassSlipAdapter();
@override
final supabaseTableName = 'pass_slips';
@override
final defaultToNull = true;
@override
final fieldsToSupabaseColumns = {
'id': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'id',
),
'userId': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'user_id',
),
'dutyScheduleId': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'duty_schedule_id',
),
'reason': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'reason',
),
'status': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'status',
),
'requestedAt': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'requested_at',
),
'approvedBy': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'approved_by',
),
'approvedAt': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'approved_at',
),
'slipStart': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'slip_start',
),
'slipEnd': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'slip_end',
),
'requestedStart': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'requested_start',
),
};
@override
final ignoreDuplicates = false;
@override
final uniqueFields = {};
@override
final Map<String, RuntimeSqliteColumnDefinition> fieldsToSqliteColumns = {
'primaryKey': const RuntimeSqliteColumnDefinition(
association: false,
columnName: '_brick_id',
iterable: false,
type: int,
),
'id': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'id',
iterable: false,
type: String,
),
'userId': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'user_id',
iterable: false,
type: String,
),
'dutyScheduleId': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'duty_schedule_id',
iterable: false,
type: String,
),
'reason': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'reason',
iterable: false,
type: String,
),
'status': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'status',
iterable: false,
type: String,
),
'requestedAt': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'requested_at',
iterable: false,
type: DateTime,
),
'approvedBy': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'approved_by',
iterable: false,
type: String,
),
'approvedAt': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'approved_at',
iterable: false,
type: DateTime,
),
'slipStart': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'slip_start',
iterable: false,
type: DateTime,
),
'slipEnd': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'slip_end',
iterable: false,
type: DateTime,
),
'requestedStart': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'requested_start',
iterable: false,
type: DateTime,
),
};
@override
Future<int?> primaryKeyByUniqueColumns(
PassSlip instance,
DatabaseExecutor executor,
) async => instance.primaryKey;
@override
final String tableName = 'PassSlip';
@override
Future<PassSlip> fromSupabase(
Map<String, dynamic> input, {
required provider,
covariant OfflineFirstWithSupabaseRepository? repository,
}) async => await _$PassSlipFromSupabase(
input,
provider: provider,
repository: repository,
);
@override
Future<Map<String, dynamic>> toSupabase(
PassSlip input, {
required provider,
covariant OfflineFirstWithSupabaseRepository? repository,
}) async => await _$PassSlipToSupabase(
input,
provider: provider,
repository: repository,
);
@override
Future<PassSlip> fromSqlite(
Map<String, dynamic> input, {
required provider,
covariant OfflineFirstWithSupabaseRepository? repository,
}) async => await _$PassSlipFromSqlite(
input,
provider: provider,
repository: repository,
);
@override
Future<Map<String, dynamic>> toSqlite(
PassSlip input, {
required provider,
covariant OfflineFirstWithSupabaseRepository? repository,
}) async => await _$PassSlipToSqlite(
input,
provider: provider,
repository: repository,
);
}
+240
View File
@@ -0,0 +1,240 @@
// GENERATED CODE DO NOT EDIT
part of '../brick.g.dart';
Future<Profile> _$ProfileFromSupabase(
Map<String, dynamic> data, {
required SupabaseProvider provider,
OfflineFirstWithSupabaseRepository? repository,
}) async {
return Profile(
id: data['id'] as String,
role: data['role'] as String,
fullName: data['full_name'] as String,
religion: data['religion'] as String,
allowTracking: data['allow_tracking'] as bool,
avatarUrl: data['avatar_url'] == null
? null
: data['avatar_url'] as String?,
facePhotoUrl: data['face_photo_url'] == null
? null
: data['face_photo_url'] as String?,
faceEnrolledAt: data['face_enrolled_at'] == null
? null
: data['face_enrolled_at'] == null
? null
: DateTime.tryParse(data['face_enrolled_at'] as String),
);
}
Future<Map<String, dynamic>> _$ProfileToSupabase(
Profile instance, {
required SupabaseProvider provider,
OfflineFirstWithSupabaseRepository? repository,
}) async {
return {
'id': instance.id,
'role': instance.role,
'full_name': instance.fullName,
'religion': instance.religion,
'allow_tracking': instance.allowTracking,
'avatar_url': instance.avatarUrl,
'face_photo_url': instance.facePhotoUrl,
'face_enrolled_at': instance.faceEnrolledAt?.toIso8601String(),
};
}
Future<Profile> _$ProfileFromSqlite(
Map<String, dynamic> data, {
required SqliteProvider provider,
OfflineFirstWithSupabaseRepository? repository,
}) async {
return Profile(
id: data['id'] as String,
role: data['role'] as String,
fullName: data['full_name'] as String,
religion: data['religion'] as String,
allowTracking: data['allow_tracking'] == 1,
avatarUrl: data['avatar_url'] == null
? null
: data['avatar_url'] as String?,
facePhotoUrl: data['face_photo_url'] == null
? null
: data['face_photo_url'] as String?,
faceEnrolledAt: data['face_enrolled_at'] == null
? null
: data['face_enrolled_at'] == null
? null
: DateTime.tryParse(data['face_enrolled_at'] as String),
)..primaryKey = data['_brick_id'] as int;
}
Future<Map<String, dynamic>> _$ProfileToSqlite(
Profile instance, {
required SqliteProvider provider,
OfflineFirstWithSupabaseRepository? repository,
}) async {
return {
'id': instance.id,
'role': instance.role,
'full_name': instance.fullName,
'religion': instance.religion,
'allow_tracking': instance.allowTracking ? 1 : 0,
'avatar_url': instance.avatarUrl,
'face_photo_url': instance.facePhotoUrl,
'face_enrolled_at': instance.faceEnrolledAt?.toIso8601String(),
};
}
/// Construct a [Profile]
class ProfileAdapter extends OfflineFirstWithSupabaseAdapter<Profile> {
ProfileAdapter();
@override
final supabaseTableName = 'profiles';
@override
final defaultToNull = true;
@override
final fieldsToSupabaseColumns = {
'id': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'id',
),
'role': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'role',
),
'fullName': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'full_name',
),
'religion': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'religion',
),
'allowTracking': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'allow_tracking',
),
'avatarUrl': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'avatar_url',
),
'facePhotoUrl': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'face_photo_url',
),
'faceEnrolledAt': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'face_enrolled_at',
),
};
@override
final ignoreDuplicates = false;
@override
final uniqueFields = {};
@override
final Map<String, RuntimeSqliteColumnDefinition> fieldsToSqliteColumns = {
'primaryKey': const RuntimeSqliteColumnDefinition(
association: false,
columnName: '_brick_id',
iterable: false,
type: int,
),
'id': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'id',
iterable: false,
type: String,
),
'role': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'role',
iterable: false,
type: String,
),
'fullName': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'full_name',
iterable: false,
type: String,
),
'religion': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'religion',
iterable: false,
type: String,
),
'allowTracking': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'allow_tracking',
iterable: false,
type: bool,
),
'avatarUrl': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'avatar_url',
iterable: false,
type: String,
),
'facePhotoUrl': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'face_photo_url',
iterable: false,
type: String,
),
'faceEnrolledAt': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'face_enrolled_at',
iterable: false,
type: DateTime,
),
};
@override
Future<int?> primaryKeyByUniqueColumns(
Profile instance,
DatabaseExecutor executor,
) async => instance.primaryKey;
@override
final String tableName = 'Profile';
@override
Future<Profile> fromSupabase(
Map<String, dynamic> input, {
required provider,
covariant OfflineFirstWithSupabaseRepository? repository,
}) async => await _$ProfileFromSupabase(
input,
provider: provider,
repository: repository,
);
@override
Future<Map<String, dynamic>> toSupabase(
Profile input, {
required provider,
covariant OfflineFirstWithSupabaseRepository? repository,
}) async => await _$ProfileToSupabase(
input,
provider: provider,
repository: repository,
);
@override
Future<Profile> fromSqlite(
Map<String, dynamic> input, {
required provider,
covariant OfflineFirstWithSupabaseRepository? repository,
}) async => await _$ProfileFromSqlite(
input,
provider: provider,
repository: repository,
);
@override
Future<Map<String, dynamic>> toSqlite(
Profile input, {
required provider,
covariant OfflineFirstWithSupabaseRepository? repository,
}) async => await _$ProfileToSqlite(
input,
provider: provider,
repository: repository,
);
}
+129
View File
@@ -0,0 +1,129 @@
// GENERATED CODE DO NOT EDIT
part of '../brick.g.dart';
Future<Service> _$ServiceFromSupabase(
Map<String, dynamic> data, {
required SupabaseProvider provider,
OfflineFirstWithSupabaseRepository? repository,
}) async {
return Service(id: data['id'] as String, name: data['name'] as String);
}
Future<Map<String, dynamic>> _$ServiceToSupabase(
Service instance, {
required SupabaseProvider provider,
OfflineFirstWithSupabaseRepository? repository,
}) async {
return {'id': instance.id, 'name': instance.name};
}
Future<Service> _$ServiceFromSqlite(
Map<String, dynamic> data, {
required SqliteProvider provider,
OfflineFirstWithSupabaseRepository? repository,
}) async {
return Service(id: data['id'] as String, name: data['name'] as String)
..primaryKey = data['_brick_id'] as int;
}
Future<Map<String, dynamic>> _$ServiceToSqlite(
Service instance, {
required SqliteProvider provider,
OfflineFirstWithSupabaseRepository? repository,
}) async {
return {'id': instance.id, 'name': instance.name};
}
/// Construct a [Service]
class ServiceAdapter extends OfflineFirstWithSupabaseAdapter<Service> {
ServiceAdapter();
@override
final supabaseTableName = 'services';
@override
final defaultToNull = true;
@override
final fieldsToSupabaseColumns = {
'id': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'id',
),
'name': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'name',
),
};
@override
final ignoreDuplicates = false;
@override
final uniqueFields = {};
@override
final Map<String, RuntimeSqliteColumnDefinition> fieldsToSqliteColumns = {
'primaryKey': const RuntimeSqliteColumnDefinition(
association: false,
columnName: '_brick_id',
iterable: false,
type: int,
),
'id': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'id',
iterable: false,
type: String,
),
'name': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'name',
iterable: false,
type: String,
),
};
@override
Future<int?> primaryKeyByUniqueColumns(
Service instance,
DatabaseExecutor executor,
) async => instance.primaryKey;
@override
final String tableName = 'Service';
@override
Future<Service> fromSupabase(
Map<String, dynamic> input, {
required provider,
covariant OfflineFirstWithSupabaseRepository? repository,
}) async => await _$ServiceFromSupabase(
input,
provider: provider,
repository: repository,
);
@override
Future<Map<String, dynamic>> toSupabase(
Service input, {
required provider,
covariant OfflineFirstWithSupabaseRepository? repository,
}) async => await _$ServiceToSupabase(
input,
provider: provider,
repository: repository,
);
@override
Future<Service> fromSqlite(
Map<String, dynamic> input, {
required provider,
covariant OfflineFirstWithSupabaseRepository? repository,
}) async => await _$ServiceFromSqlite(
input,
provider: provider,
repository: repository,
);
@override
Future<Map<String, dynamic>> toSqlite(
Service input, {
required provider,
covariant OfflineFirstWithSupabaseRepository? repository,
}) async => await _$ServiceToSqlite(
input,
provider: provider,
repository: repository,
);
}
@@ -0,0 +1,332 @@
// GENERATED CODE DO NOT EDIT
part of '../brick.g.dart';
Future<SwapRequest> _$SwapRequestFromSupabase(
Map<String, dynamic> data, {
required SupabaseProvider provider,
OfflineFirstWithSupabaseRepository? repository,
}) async {
return SwapRequest(
id: data['id'] as String,
requesterId: data['requester_id'] as String,
recipientId: data['recipient_id'] as String,
requesterScheduleId: data['requester_schedule_id'] as String,
targetScheduleId: data['target_shift_id'] == null
? null
: data['target_shift_id'] as String?,
status: data['status'] as String,
createdAt: DateTime.parse(data['created_at'] as String),
updatedAt: data['updated_at'] == null
? null
: data['updated_at'] == null
? null
: DateTime.tryParse(data['updated_at'] as String),
chatThreadId: data['chat_thread_id'] == null
? null
: data['chat_thread_id'] as String?,
shiftType: data['shift_type'] == null
? null
: data['shift_type'] as String?,
shiftStartTime: data['shift_start_time'] == null
? null
: data['shift_start_time'] == null
? null
: DateTime.tryParse(data['shift_start_time'] as String),
relieverIds: data['reliever_ids'] == null
? null
: data['reliever_ids']?.toList().cast<String>(),
approvedBy: data['approved_by'] == null
? null
: data['approved_by'] as String?,
);
}
Future<Map<String, dynamic>> _$SwapRequestToSupabase(
SwapRequest instance, {
required SupabaseProvider provider,
OfflineFirstWithSupabaseRepository? repository,
}) async {
return {
'id': instance.id,
'requester_id': instance.requesterId,
'recipient_id': instance.recipientId,
'requester_schedule_id': instance.requesterScheduleId,
'target_shift_id': instance.targetScheduleId,
'status': instance.status,
'created_at': instance.createdAt.toIso8601String(),
'updated_at': instance.updatedAt?.toIso8601String(),
'chat_thread_id': instance.chatThreadId,
'shift_type': instance.shiftType,
'shift_start_time': instance.shiftStartTime?.toIso8601String(),
'reliever_ids': instance.relieverIds,
'approved_by': instance.approvedBy,
};
}
Future<SwapRequest> _$SwapRequestFromSqlite(
Map<String, dynamic> data, {
required SqliteProvider provider,
OfflineFirstWithSupabaseRepository? repository,
}) async {
return SwapRequest(
id: data['id'] as String,
requesterId: data['requester_id'] as String,
recipientId: data['recipient_id'] as String,
requesterScheduleId: data['requester_schedule_id'] as String,
targetScheduleId: data['target_schedule_id'] == null
? null
: data['target_schedule_id'] as String?,
status: data['status'] as String,
createdAt: DateTime.parse(data['created_at'] as String),
updatedAt: data['updated_at'] == null
? null
: data['updated_at'] == null
? null
: DateTime.tryParse(data['updated_at'] as String),
chatThreadId: data['chat_thread_id'] == null
? null
: data['chat_thread_id'] as String?,
shiftType: data['shift_type'] == null
? null
: data['shift_type'] as String?,
shiftStartTime: data['shift_start_time'] == null
? null
: data['shift_start_time'] == null
? null
: DateTime.tryParse(data['shift_start_time'] as String),
relieverIds: data['reliever_ids'] == null
? null
: jsonDecode(data['reliever_ids']).toList().cast<String>(),
approvedBy: data['approved_by'] == null
? null
: data['approved_by'] as String?,
)..primaryKey = data['_brick_id'] as int;
}
Future<Map<String, dynamic>> _$SwapRequestToSqlite(
SwapRequest instance, {
required SqliteProvider provider,
OfflineFirstWithSupabaseRepository? repository,
}) async {
return {
'id': instance.id,
'requester_id': instance.requesterId,
'recipient_id': instance.recipientId,
'requester_schedule_id': instance.requesterScheduleId,
'target_schedule_id': instance.targetScheduleId,
'status': instance.status,
'created_at': instance.createdAt.toIso8601String(),
'updated_at': instance.updatedAt?.toIso8601String(),
'chat_thread_id': instance.chatThreadId,
'shift_type': instance.shiftType,
'shift_start_time': instance.shiftStartTime?.toIso8601String(),
'reliever_ids': instance.relieverIds == null
? null
: jsonEncode(instance.relieverIds),
'approved_by': instance.approvedBy,
};
}
/// Construct a [SwapRequest]
class SwapRequestAdapter extends OfflineFirstWithSupabaseAdapter<SwapRequest> {
SwapRequestAdapter();
@override
final supabaseTableName = 'swap_requests';
@override
final defaultToNull = true;
@override
final fieldsToSupabaseColumns = {
'id': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'id',
),
'requesterId': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'requester_id',
),
'recipientId': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'recipient_id',
),
'requesterScheduleId': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'requester_schedule_id',
),
'targetScheduleId': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'target_shift_id',
),
'status': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'status',
),
'createdAt': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'created_at',
),
'updatedAt': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'updated_at',
),
'chatThreadId': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'chat_thread_id',
),
'shiftType': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'shift_type',
),
'shiftStartTime': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'shift_start_time',
),
'relieverIds': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'reliever_ids',
),
'approvedBy': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'approved_by',
),
};
@override
final ignoreDuplicates = false;
@override
final uniqueFields = {};
@override
final Map<String, RuntimeSqliteColumnDefinition> fieldsToSqliteColumns = {
'primaryKey': const RuntimeSqliteColumnDefinition(
association: false,
columnName: '_brick_id',
iterable: false,
type: int,
),
'id': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'id',
iterable: false,
type: String,
),
'requesterId': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'requester_id',
iterable: false,
type: String,
),
'recipientId': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'recipient_id',
iterable: false,
type: String,
),
'requesterScheduleId': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'requester_schedule_id',
iterable: false,
type: String,
),
'targetScheduleId': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'target_schedule_id',
iterable: false,
type: String,
),
'status': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'status',
iterable: false,
type: String,
),
'createdAt': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'created_at',
iterable: false,
type: DateTime,
),
'updatedAt': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'updated_at',
iterable: false,
type: DateTime,
),
'chatThreadId': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'chat_thread_id',
iterable: false,
type: String,
),
'shiftType': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'shift_type',
iterable: false,
type: String,
),
'shiftStartTime': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'shift_start_time',
iterable: false,
type: DateTime,
),
'relieverIds': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'reliever_ids',
iterable: true,
type: String,
),
'approvedBy': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'approved_by',
iterable: false,
type: String,
),
};
@override
Future<int?> primaryKeyByUniqueColumns(
SwapRequest instance,
DatabaseExecutor executor,
) async => instance.primaryKey;
@override
final String tableName = 'SwapRequest';
@override
Future<SwapRequest> fromSupabase(
Map<String, dynamic> input, {
required provider,
covariant OfflineFirstWithSupabaseRepository? repository,
}) async => await _$SwapRequestFromSupabase(
input,
provider: provider,
repository: repository,
);
@override
Future<Map<String, dynamic>> toSupabase(
SwapRequest input, {
required provider,
covariant OfflineFirstWithSupabaseRepository? repository,
}) async => await _$SwapRequestToSupabase(
input,
provider: provider,
repository: repository,
);
@override
Future<SwapRequest> fromSqlite(
Map<String, dynamic> input, {
required provider,
covariant OfflineFirstWithSupabaseRepository? repository,
}) async => await _$SwapRequestFromSqlite(
input,
provider: provider,
repository: repository,
);
@override
Future<Map<String, dynamic>> toSqlite(
SwapRequest input, {
required provider,
covariant OfflineFirstWithSupabaseRepository? repository,
}) async => await _$SwapRequestToSqlite(
input,
provider: provider,
repository: repository,
);
}
@@ -0,0 +1,197 @@
// GENERATED CODE DO NOT EDIT
part of '../brick.g.dart';
Future<TaskActivityLog> _$TaskActivityLogFromSupabase(
Map<String, dynamic> data, {
required SupabaseProvider provider,
OfflineFirstWithSupabaseRepository? repository,
}) async {
return TaskActivityLog(
id: data['id'] as String,
taskId: data['task_id'] as String,
actorId: data['actor_id'] == null ? null : data['actor_id'] as String?,
actionType: data['action_type'] as String,
meta: data['meta'] == null ? null : data['meta'],
createdAt: DateTime.parse(data['created_at'] as String),
);
}
Future<Map<String, dynamic>> _$TaskActivityLogToSupabase(
TaskActivityLog instance, {
required SupabaseProvider provider,
OfflineFirstWithSupabaseRepository? repository,
}) async {
return {
'id': instance.id,
'task_id': instance.taskId,
'actor_id': instance.actorId,
'action_type': instance.actionType,
'meta': instance.meta,
'created_at': instance.createdAt.toIso8601String(),
};
}
Future<TaskActivityLog> _$TaskActivityLogFromSqlite(
Map<String, dynamic> data, {
required SqliteProvider provider,
OfflineFirstWithSupabaseRepository? repository,
}) async {
return TaskActivityLog(
id: data['id'] as String,
taskId: data['task_id'] as String,
actorId: data['actor_id'] == null ? null : data['actor_id'] as String?,
actionType: data['action_type'] as String,
meta: data['meta'] == null ? null : jsonDecode(data['meta']),
createdAt: DateTime.parse(data['created_at'] as String),
)..primaryKey = data['_brick_id'] as int;
}
Future<Map<String, dynamic>> _$TaskActivityLogToSqlite(
TaskActivityLog instance, {
required SqliteProvider provider,
OfflineFirstWithSupabaseRepository? repository,
}) async {
return {
'id': instance.id,
'task_id': instance.taskId,
'actor_id': instance.actorId,
'action_type': instance.actionType,
'meta': instance.meta != null ? jsonEncode(instance.meta) : null,
'created_at': instance.createdAt.toIso8601String(),
};
}
/// Construct a [TaskActivityLog]
class TaskActivityLogAdapter
extends OfflineFirstWithSupabaseAdapter<TaskActivityLog> {
TaskActivityLogAdapter();
@override
final supabaseTableName = 'task_activity_logs';
@override
final defaultToNull = true;
@override
final fieldsToSupabaseColumns = {
'id': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'id',
),
'taskId': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'task_id',
),
'actorId': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'actor_id',
),
'actionType': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'action_type',
),
'meta': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'meta',
),
'createdAt': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'created_at',
),
};
@override
final ignoreDuplicates = false;
@override
final uniqueFields = {};
@override
final Map<String, RuntimeSqliteColumnDefinition> fieldsToSqliteColumns = {
'primaryKey': const RuntimeSqliteColumnDefinition(
association: false,
columnName: '_brick_id',
iterable: false,
type: int,
),
'id': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'id',
iterable: false,
type: String,
),
'taskId': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'task_id',
iterable: false,
type: String,
),
'actorId': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'actor_id',
iterable: false,
type: String,
),
'actionType': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'action_type',
iterable: false,
type: String,
),
'meta': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'meta',
iterable: false,
type: Map,
),
'createdAt': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'created_at',
iterable: false,
type: DateTime,
),
};
@override
Future<int?> primaryKeyByUniqueColumns(
TaskActivityLog instance,
DatabaseExecutor executor,
) async => instance.primaryKey;
@override
final String tableName = 'TaskActivityLog';
@override
Future<TaskActivityLog> fromSupabase(
Map<String, dynamic> input, {
required provider,
covariant OfflineFirstWithSupabaseRepository? repository,
}) async => await _$TaskActivityLogFromSupabase(
input,
provider: provider,
repository: repository,
);
@override
Future<Map<String, dynamic>> toSupabase(
TaskActivityLog input, {
required provider,
covariant OfflineFirstWithSupabaseRepository? repository,
}) async => await _$TaskActivityLogToSupabase(
input,
provider: provider,
repository: repository,
);
@override
Future<TaskActivityLog> fromSqlite(
Map<String, dynamic> input, {
required provider,
covariant OfflineFirstWithSupabaseRepository? repository,
}) async => await _$TaskActivityLogFromSqlite(
input,
provider: provider,
repository: repository,
);
@override
Future<Map<String, dynamic>> toSqlite(
TaskActivityLog input, {
required provider,
covariant OfflineFirstWithSupabaseRepository? repository,
}) async => await _$TaskActivityLogToSqlite(
input,
provider: provider,
repository: repository,
);
}
+529
View File
@@ -0,0 +1,529 @@
// GENERATED CODE DO NOT EDIT
part of '../brick.g.dart';
Future<Task> _$TaskFromSupabase(
Map<String, dynamic> data, {
required SupabaseProvider provider,
OfflineFirstWithSupabaseRepository? repository,
}) async {
return Task(
id: data['id'] as String,
ticketId: data['ticket_id'] == null ? null : data['ticket_id'] as String?,
taskNumber: data['task_number'] == null
? null
: data['task_number'] as String?,
title: data['title'] as String,
description: data['description'] as String,
officeId: data['office_id'] == null ? null : data['office_id'] as String?,
status: data['status'] as String,
priority: data['priority'] as int,
queueOrder: data['queue_order'] == null
? null
: data['queue_order'] as int?,
createdAt: DateTime.parse(data['created_at'] as String),
creatorId: data['creator_id'] == null
? null
: data['creator_id'] as String?,
startedAt: data['started_at'] == null
? null
: data['started_at'] == null
? null
: DateTime.tryParse(data['started_at'] as String),
completedAt: data['completed_at'] == null
? null
: data['completed_at'] == null
? null
: DateTime.tryParse(data['completed_at'] as String),
requestedBy: data['requested_by'] == null
? null
: data['requested_by'] as String?,
notedBy: data['noted_by'] == null ? null : data['noted_by'] as String?,
receivedBy: data['received_by'] == null
? null
: data['received_by'] as String?,
requestType: data['request_type'] == null
? null
: data['request_type'] as String?,
requestTypeOther: data['request_type_other'] == null
? null
: data['request_type_other'] as String?,
requestCategory: data['request_category'] == null
? null
: data['request_category'] as String?,
actionTaken: data['action_taken'] == null
? null
: data['action_taken'] as String?,
cancellationReason: data['cancellation_reason'] == null
? null
: data['cancellation_reason'] as String?,
cancelledAt: data['cancelled_at'] == null
? null
: data['cancelled_at'] == null
? null
: DateTime.tryParse(data['cancelled_at'] as String),
itJobPrinted: data['it_job_printed'] as bool,
itJobPrintedAt: data['it_job_printed_at'] == null
? null
: data['it_job_printed_at'] == null
? null
: DateTime.tryParse(data['it_job_printed_at'] as String),
itJobReceivedById: data['it_job_received_by_id'] == null
? null
: data['it_job_received_by_id'] as String?,
);
}
Future<Map<String, dynamic>> _$TaskToSupabase(
Task instance, {
required SupabaseProvider provider,
OfflineFirstWithSupabaseRepository? repository,
}) async {
return {
'id': instance.id,
'ticket_id': instance.ticketId,
'task_number': instance.taskNumber,
'title': instance.title,
'description': instance.description,
'office_id': instance.officeId,
'status': instance.status,
'priority': instance.priority,
'queue_order': instance.queueOrder,
'created_at': instance.createdAt.toIso8601String(),
'creator_id': instance.creatorId,
'started_at': instance.startedAt?.toIso8601String(),
'completed_at': instance.completedAt?.toIso8601String(),
'requested_by': instance.requestedBy,
'noted_by': instance.notedBy,
'received_by': instance.receivedBy,
'request_type': instance.requestType,
'request_type_other': instance.requestTypeOther,
'request_category': instance.requestCategory,
'action_taken': instance.actionTaken,
'cancellation_reason': instance.cancellationReason,
'cancelled_at': instance.cancelledAt?.toIso8601String(),
'it_job_printed': instance.itJobPrinted,
'it_job_printed_at': instance.itJobPrintedAt?.toIso8601String(),
'it_job_received_by_id': instance.itJobReceivedById,
};
}
Future<Task> _$TaskFromSqlite(
Map<String, dynamic> data, {
required SqliteProvider provider,
OfflineFirstWithSupabaseRepository? repository,
}) async {
return Task(
id: data['id'] as String,
ticketId: data['ticket_id'] == null ? null : data['ticket_id'] as String?,
taskNumber: data['task_number'] == null
? null
: data['task_number'] as String?,
title: data['title'] as String,
description: data['description'] as String,
officeId: data['office_id'] == null ? null : data['office_id'] as String?,
status: data['status'] as String,
priority: data['priority'] as int,
queueOrder: data['queue_order'] == null
? null
: data['queue_order'] as int?,
createdAt: DateTime.parse(data['created_at'] as String),
creatorId: data['creator_id'] == null
? null
: data['creator_id'] as String?,
startedAt: data['started_at'] == null
? null
: data['started_at'] == null
? null
: DateTime.tryParse(data['started_at'] as String),
completedAt: data['completed_at'] == null
? null
: data['completed_at'] == null
? null
: DateTime.tryParse(data['completed_at'] as String),
requestedBy: data['requested_by'] == null
? null
: data['requested_by'] as String?,
notedBy: data['noted_by'] == null ? null : data['noted_by'] as String?,
receivedBy: data['received_by'] == null
? null
: data['received_by'] as String?,
requestType: data['request_type'] == null
? null
: data['request_type'] as String?,
requestTypeOther: data['request_type_other'] == null
? null
: data['request_type_other'] as String?,
requestCategory: data['request_category'] == null
? null
: data['request_category'] as String?,
actionTaken: data['action_taken'] == null
? null
: data['action_taken'] as String?,
cancellationReason: data['cancellation_reason'] == null
? null
: data['cancellation_reason'] as String?,
cancelledAt: data['cancelled_at'] == null
? null
: data['cancelled_at'] == null
? null
: DateTime.tryParse(data['cancelled_at'] as String),
itJobPrinted: data['it_job_printed'] == 1,
itJobPrintedAt: data['it_job_printed_at'] == null
? null
: data['it_job_printed_at'] == null
? null
: DateTime.tryParse(data['it_job_printed_at'] as String),
itJobReceivedById: data['it_job_received_by_id'] == null
? null
: data['it_job_received_by_id'] as String?,
)..primaryKey = data['_brick_id'] as int;
}
Future<Map<String, dynamic>> _$TaskToSqlite(
Task instance, {
required SqliteProvider provider,
OfflineFirstWithSupabaseRepository? repository,
}) async {
return {
'id': instance.id,
'ticket_id': instance.ticketId,
'task_number': instance.taskNumber,
'title': instance.title,
'description': instance.description,
'office_id': instance.officeId,
'status': instance.status,
'priority': instance.priority,
'queue_order': instance.queueOrder,
'created_at': instance.createdAt.toIso8601String(),
'creator_id': instance.creatorId,
'started_at': instance.startedAt?.toIso8601String(),
'completed_at': instance.completedAt?.toIso8601String(),
'requested_by': instance.requestedBy,
'noted_by': instance.notedBy,
'received_by': instance.receivedBy,
'request_type': instance.requestType,
'request_type_other': instance.requestTypeOther,
'request_category': instance.requestCategory,
'action_taken': instance.actionTaken,
'cancellation_reason': instance.cancellationReason,
'cancelled_at': instance.cancelledAt?.toIso8601String(),
'it_job_printed': instance.itJobPrinted ? 1 : 0,
'it_job_printed_at': instance.itJobPrintedAt?.toIso8601String(),
'it_job_received_by_id': instance.itJobReceivedById,
};
}
/// Construct a [Task]
class TaskAdapter extends OfflineFirstWithSupabaseAdapter<Task> {
TaskAdapter();
@override
final supabaseTableName = 'tasks';
@override
final defaultToNull = true;
@override
final fieldsToSupabaseColumns = {
'id': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'id',
),
'ticketId': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'ticket_id',
),
'taskNumber': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'task_number',
),
'title': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'title',
),
'description': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'description',
),
'officeId': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'office_id',
),
'status': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'status',
),
'priority': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'priority',
),
'queueOrder': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'queue_order',
),
'createdAt': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'created_at',
),
'creatorId': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'creator_id',
),
'startedAt': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'started_at',
),
'completedAt': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'completed_at',
),
'requestedBy': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'requested_by',
),
'notedBy': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'noted_by',
),
'receivedBy': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'received_by',
),
'requestType': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'request_type',
),
'requestTypeOther': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'request_type_other',
),
'requestCategory': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'request_category',
),
'actionTaken': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'action_taken',
),
'cancellationReason': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'cancellation_reason',
),
'cancelledAt': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'cancelled_at',
),
'itJobPrinted': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'it_job_printed',
),
'itJobPrintedAt': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'it_job_printed_at',
),
'itJobReceivedById': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'it_job_received_by_id',
),
};
@override
final ignoreDuplicates = false;
@override
final uniqueFields = {};
@override
final Map<String, RuntimeSqliteColumnDefinition> fieldsToSqliteColumns = {
'primaryKey': const RuntimeSqliteColumnDefinition(
association: false,
columnName: '_brick_id',
iterable: false,
type: int,
),
'id': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'id',
iterable: false,
type: String,
),
'ticketId': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'ticket_id',
iterable: false,
type: String,
),
'taskNumber': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'task_number',
iterable: false,
type: String,
),
'title': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'title',
iterable: false,
type: String,
),
'description': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'description',
iterable: false,
type: String,
),
'officeId': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'office_id',
iterable: false,
type: String,
),
'status': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'status',
iterable: false,
type: String,
),
'priority': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'priority',
iterable: false,
type: int,
),
'queueOrder': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'queue_order',
iterable: false,
type: int,
),
'createdAt': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'created_at',
iterable: false,
type: DateTime,
),
'creatorId': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'creator_id',
iterable: false,
type: String,
),
'startedAt': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'started_at',
iterable: false,
type: DateTime,
),
'completedAt': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'completed_at',
iterable: false,
type: DateTime,
),
'requestedBy': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'requested_by',
iterable: false,
type: String,
),
'notedBy': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'noted_by',
iterable: false,
type: String,
),
'receivedBy': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'received_by',
iterable: false,
type: String,
),
'requestType': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'request_type',
iterable: false,
type: String,
),
'requestTypeOther': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'request_type_other',
iterable: false,
type: String,
),
'requestCategory': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'request_category',
iterable: false,
type: String,
),
'actionTaken': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'action_taken',
iterable: false,
type: String,
),
'cancellationReason': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'cancellation_reason',
iterable: false,
type: String,
),
'cancelledAt': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'cancelled_at',
iterable: false,
type: DateTime,
),
'itJobPrinted': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'it_job_printed',
iterable: false,
type: bool,
),
'itJobPrintedAt': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'it_job_printed_at',
iterable: false,
type: DateTime,
),
'itJobReceivedById': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'it_job_received_by_id',
iterable: false,
type: String,
),
};
@override
Future<int?> primaryKeyByUniqueColumns(
Task instance,
DatabaseExecutor executor,
) async => instance.primaryKey;
@override
final String tableName = 'Task';
@override
Future<Task> fromSupabase(
Map<String, dynamic> input, {
required provider,
covariant OfflineFirstWithSupabaseRepository? repository,
}) async => await _$TaskFromSupabase(
input,
provider: provider,
repository: repository,
);
@override
Future<Map<String, dynamic>> toSupabase(
Task input, {
required provider,
covariant OfflineFirstWithSupabaseRepository? repository,
}) async =>
await _$TaskToSupabase(input, provider: provider, repository: repository);
@override
Future<Task> fromSqlite(
Map<String, dynamic> input, {
required provider,
covariant OfflineFirstWithSupabaseRepository? repository,
}) async =>
await _$TaskFromSqlite(input, provider: provider, repository: repository);
@override
Future<Map<String, dynamic>> toSqlite(
Task input, {
required provider,
covariant OfflineFirstWithSupabaseRepository? repository,
}) async =>
await _$TaskToSqlite(input, provider: provider, repository: repository);
}
+187
View File
@@ -0,0 +1,187 @@
// GENERATED CODE DO NOT EDIT
part of '../brick.g.dart';
Future<Team> _$TeamFromSupabase(
Map<String, dynamic> data, {
required SupabaseProvider provider,
OfflineFirstWithSupabaseRepository? repository,
}) async {
return Team(
id: data['id'] as String,
name: data['name'] as String,
leaderId: data['leader_id'] as String,
officeIds: data['office_ids'].toList().cast<String>(),
createdAt: DateTime.parse(data['created_at'] as String),
color: data['color'] == null ? null : data['color'] as String?,
);
}
Future<Map<String, dynamic>> _$TeamToSupabase(
Team instance, {
required SupabaseProvider provider,
OfflineFirstWithSupabaseRepository? repository,
}) async {
return {
'id': instance.id,
'name': instance.name,
'leader_id': instance.leaderId,
'office_ids': instance.officeIds,
'created_at': instance.createdAt.toIso8601String(),
'color': instance.color,
};
}
Future<Team> _$TeamFromSqlite(
Map<String, dynamic> data, {
required SqliteProvider provider,
OfflineFirstWithSupabaseRepository? repository,
}) async {
return Team(
id: data['id'] as String,
name: data['name'] as String,
leaderId: data['leader_id'] as String,
officeIds: jsonDecode(data['office_ids']).toList().cast<String>(),
createdAt: DateTime.parse(data['created_at'] as String),
color: data['color'] == null ? null : data['color'] as String?,
)..primaryKey = data['_brick_id'] as int;
}
Future<Map<String, dynamic>> _$TeamToSqlite(
Team instance, {
required SqliteProvider provider,
OfflineFirstWithSupabaseRepository? repository,
}) async {
return {
'id': instance.id,
'name': instance.name,
'leader_id': instance.leaderId,
'office_ids': jsonEncode(instance.officeIds),
'created_at': instance.createdAt.toIso8601String(),
'color': instance.color,
};
}
/// Construct a [Team]
class TeamAdapter extends OfflineFirstWithSupabaseAdapter<Team> {
TeamAdapter();
@override
final supabaseTableName = 'teams';
@override
final defaultToNull = true;
@override
final fieldsToSupabaseColumns = {
'id': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'id',
),
'name': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'name',
),
'leaderId': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'leader_id',
),
'officeIds': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'office_ids',
),
'createdAt': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'created_at',
),
'color': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'color',
),
};
@override
final ignoreDuplicates = false;
@override
final uniqueFields = {};
@override
final Map<String, RuntimeSqliteColumnDefinition> fieldsToSqliteColumns = {
'primaryKey': const RuntimeSqliteColumnDefinition(
association: false,
columnName: '_brick_id',
iterable: false,
type: int,
),
'id': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'id',
iterable: false,
type: String,
),
'name': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'name',
iterable: false,
type: String,
),
'leaderId': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'leader_id',
iterable: false,
type: String,
),
'officeIds': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'office_ids',
iterable: true,
type: String,
),
'createdAt': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'created_at',
iterable: false,
type: DateTime,
),
'color': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'color',
iterable: false,
type: String,
),
};
@override
Future<int?> primaryKeyByUniqueColumns(
Team instance,
DatabaseExecutor executor,
) async => instance.primaryKey;
@override
final String tableName = 'Team';
@override
Future<Team> fromSupabase(
Map<String, dynamic> input, {
required provider,
covariant OfflineFirstWithSupabaseRepository? repository,
}) async => await _$TeamFromSupabase(
input,
provider: provider,
repository: repository,
);
@override
Future<Map<String, dynamic>> toSupabase(
Team input, {
required provider,
covariant OfflineFirstWithSupabaseRepository? repository,
}) async =>
await _$TeamToSupabase(input, provider: provider, repository: repository);
@override
Future<Team> fromSqlite(
Map<String, dynamic> input, {
required provider,
covariant OfflineFirstWithSupabaseRepository? repository,
}) async =>
await _$TeamFromSqlite(input, provider: provider, repository: repository);
@override
Future<Map<String, dynamic>> toSqlite(
Team input, {
required provider,
covariant OfflineFirstWithSupabaseRepository? repository,
}) async =>
await _$TeamToSqlite(input, provider: provider, repository: repository);
}
+277
View File
@@ -0,0 +1,277 @@
// GENERATED CODE DO NOT EDIT
part of '../brick.g.dart';
Future<Ticket> _$TicketFromSupabase(
Map<String, dynamic> data, {
required SupabaseProvider provider,
OfflineFirstWithSupabaseRepository? repository,
}) async {
return Ticket(
id: data['id'] as String,
subject: data['subject'] as String,
description: data['description'] as String,
officeId: data['office_id'] as String,
status: data['status'] as String,
createdAt: DateTime.parse(data['created_at'] as String),
creatorId: data['creator_id'] == null
? null
: data['creator_id'] as String?,
respondedAt: data['responded_at'] == null
? null
: data['responded_at'] == null
? null
: DateTime.tryParse(data['responded_at'] as String),
promotedAt: data['promoted_at'] == null
? null
: data['promoted_at'] == null
? null
: DateTime.tryParse(data['promoted_at'] as String),
closedAt: data['closed_at'] == null
? null
: data['closed_at'] == null
? null
: DateTime.tryParse(data['closed_at'] as String),
);
}
Future<Map<String, dynamic>> _$TicketToSupabase(
Ticket instance, {
required SupabaseProvider provider,
OfflineFirstWithSupabaseRepository? repository,
}) async {
return {
'id': instance.id,
'subject': instance.subject,
'description': instance.description,
'office_id': instance.officeId,
'status': instance.status,
'created_at': instance.createdAt.toIso8601String(),
'creator_id': instance.creatorId,
'responded_at': instance.respondedAt?.toIso8601String(),
'promoted_at': instance.promotedAt?.toIso8601String(),
'closed_at': instance.closedAt?.toIso8601String(),
};
}
Future<Ticket> _$TicketFromSqlite(
Map<String, dynamic> data, {
required SqliteProvider provider,
OfflineFirstWithSupabaseRepository? repository,
}) async {
return Ticket(
id: data['id'] as String,
subject: data['subject'] as String,
description: data['description'] as String,
officeId: data['office_id'] as String,
status: data['status'] as String,
createdAt: DateTime.parse(data['created_at'] as String),
creatorId: data['creator_id'] == null
? null
: data['creator_id'] as String?,
respondedAt: data['responded_at'] == null
? null
: data['responded_at'] == null
? null
: DateTime.tryParse(data['responded_at'] as String),
promotedAt: data['promoted_at'] == null
? null
: data['promoted_at'] == null
? null
: DateTime.tryParse(data['promoted_at'] as String),
closedAt: data['closed_at'] == null
? null
: data['closed_at'] == null
? null
: DateTime.tryParse(data['closed_at'] as String),
)..primaryKey = data['_brick_id'] as int;
}
Future<Map<String, dynamic>> _$TicketToSqlite(
Ticket instance, {
required SqliteProvider provider,
OfflineFirstWithSupabaseRepository? repository,
}) async {
return {
'id': instance.id,
'subject': instance.subject,
'description': instance.description,
'office_id': instance.officeId,
'status': instance.status,
'created_at': instance.createdAt.toIso8601String(),
'creator_id': instance.creatorId,
'responded_at': instance.respondedAt?.toIso8601String(),
'promoted_at': instance.promotedAt?.toIso8601String(),
'closed_at': instance.closedAt?.toIso8601String(),
};
}
/// Construct a [Ticket]
class TicketAdapter extends OfflineFirstWithSupabaseAdapter<Ticket> {
TicketAdapter();
@override
final supabaseTableName = 'tickets';
@override
final defaultToNull = true;
@override
final fieldsToSupabaseColumns = {
'id': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'id',
),
'subject': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'subject',
),
'description': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'description',
),
'officeId': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'office_id',
),
'status': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'status',
),
'createdAt': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'created_at',
),
'creatorId': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'creator_id',
),
'respondedAt': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'responded_at',
),
'promotedAt': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'promoted_at',
),
'closedAt': const RuntimeSupabaseColumnDefinition(
association: false,
columnName: 'closed_at',
),
};
@override
final ignoreDuplicates = false;
@override
final uniqueFields = {};
@override
final Map<String, RuntimeSqliteColumnDefinition> fieldsToSqliteColumns = {
'primaryKey': const RuntimeSqliteColumnDefinition(
association: false,
columnName: '_brick_id',
iterable: false,
type: int,
),
'id': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'id',
iterable: false,
type: String,
),
'subject': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'subject',
iterable: false,
type: String,
),
'description': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'description',
iterable: false,
type: String,
),
'officeId': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'office_id',
iterable: false,
type: String,
),
'status': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'status',
iterable: false,
type: String,
),
'createdAt': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'created_at',
iterable: false,
type: DateTime,
),
'creatorId': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'creator_id',
iterable: false,
type: String,
),
'respondedAt': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'responded_at',
iterable: false,
type: DateTime,
),
'promotedAt': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'promoted_at',
iterable: false,
type: DateTime,
),
'closedAt': const RuntimeSqliteColumnDefinition(
association: false,
columnName: 'closed_at',
iterable: false,
type: DateTime,
),
};
@override
Future<int?> primaryKeyByUniqueColumns(
Ticket instance,
DatabaseExecutor executor,
) async => instance.primaryKey;
@override
final String tableName = 'Ticket';
@override
Future<Ticket> fromSupabase(
Map<String, dynamic> input, {
required provider,
covariant OfflineFirstWithSupabaseRepository? repository,
}) async => await _$TicketFromSupabase(
input,
provider: provider,
repository: repository,
);
@override
Future<Map<String, dynamic>> toSupabase(
Ticket input, {
required provider,
covariant OfflineFirstWithSupabaseRepository? repository,
}) async => await _$TicketToSupabase(
input,
provider: provider,
repository: repository,
);
@override
Future<Ticket> fromSqlite(
Map<String, dynamic> input, {
required provider,
covariant OfflineFirstWithSupabaseRepository? repository,
}) async => await _$TicketFromSqlite(
input,
provider: provider,
repository: repository,
);
@override
Future<Map<String, dynamic>> toSqlite(
Ticket input, {
required provider,
covariant OfflineFirstWithSupabaseRepository? repository,
}) async =>
await _$TicketToSqlite(input, provider: provider, repository: repository);
}
+114
View File
@@ -0,0 +1,114 @@
// ignore: unused_import, unused_shown_name, unnecessary_import
import 'package:brick_core/query.dart';
// ignore: unused_import, unused_shown_name, unnecessary_import
import 'package:brick_sqlite/db.dart';
// ignore: unused_import, unused_shown_name, unnecessary_import
import 'package:brick_offline_first_with_supabase/brick_offline_first_with_supabase.dart';
// ignore: unused_import, unused_shown_name, unnecessary_import
import 'package:brick_sqlite/brick_sqlite.dart';
// ignore: unused_import, unused_shown_name, unnecessary_import
import 'package:brick_supabase/brick_supabase.dart';
// ignore: unused_import, unused_shown_name, unnecessary_import
import '../utils/app_time.dart';
// ignore: unused_import, unused_shown_name, unnecessary_import
import 'package:tasq/models/team_member.dart';// GENERATED CODE DO NOT EDIT
// ignore: unused_import
import 'dart:convert';
import 'package:brick_sqlite/brick_sqlite.dart' show SqliteModel, SqliteAdapter, SqliteModelDictionary, RuntimeSqliteColumnDefinition, SqliteProvider;
import 'package:brick_supabase/brick_supabase.dart' show SupabaseProvider, SupabaseModel, SupabaseAdapter, SupabaseModelDictionary;
// ignore: unused_import, unused_shown_name
import 'package:brick_offline_first/brick_offline_first.dart' show RuntimeOfflineFirstDefinition;
// ignore: unused_import, unused_shown_name
import 'package:sqflite_common/sqlite_api.dart' show DatabaseExecutor;
import '../models/announcement.model.dart';
import '../models/announcement_comment.model.dart';
import '../models/attendance_log.model.dart';
import '../models/chat_message.model.dart';
import '../models/duty_schedule.model.dart';
import '../models/it_service_request.model.dart';
import '../models/it_service_request_action.model.dart';
import '../models/it_service_request_activity_log.model.dart';
import '../models/it_service_request_assignment.model.dart';
import '../models/leave_of_absence.model.dart';
import '../models/notification_item.model.dart';
import '../models/office.model.dart';
import '../models/pass_slip.model.dart';
import '../models/profile.model.dart';
import '../models/service.model.dart';
import '../models/swap_request.model.dart';
import '../models/task.model.dart';
import '../models/task_activity_log.model.dart';
import '../models/team.model.dart';
import '../models/ticket.model.dart';
part 'adapters/announcement_adapter.g.dart';
part 'adapters/announcement_comment_adapter.g.dart';
part 'adapters/attendance_log_adapter.g.dart';
part 'adapters/chat_message_adapter.g.dart';
part 'adapters/duty_schedule_adapter.g.dart';
part 'adapters/it_service_request_adapter.g.dart';
part 'adapters/it_service_request_action_adapter.g.dart';
part 'adapters/it_service_request_activity_log_adapter.g.dart';
part 'adapters/it_service_request_assignment_adapter.g.dart';
part 'adapters/leave_of_absence_adapter.g.dart';
part 'adapters/notification_item_adapter.g.dart';
part 'adapters/office_adapter.g.dart';
part 'adapters/pass_slip_adapter.g.dart';
part 'adapters/profile_adapter.g.dart';
part 'adapters/service_adapter.g.dart';
part 'adapters/swap_request_adapter.g.dart';
part 'adapters/task_adapter.g.dart';
part 'adapters/task_activity_log_adapter.g.dart';
part 'adapters/team_adapter.g.dart';
part 'adapters/ticket_adapter.g.dart';
/// Supabase mappings should only be used when initializing a [SupabaseProvider]
final Map<Type, SupabaseAdapter<SupabaseModel>> supabaseMappings = {
Announcement: AnnouncementAdapter(),
AnnouncementComment: AnnouncementCommentAdapter(),
AttendanceLog: AttendanceLogAdapter(),
ChatMessage: ChatMessageAdapter(),
DutySchedule: DutyScheduleAdapter(),
ItServiceRequest: ItServiceRequestAdapter(),
ItServiceRequestAction: ItServiceRequestActionAdapter(),
ItServiceRequestActivityLog: ItServiceRequestActivityLogAdapter(),
ItServiceRequestAssignment: ItServiceRequestAssignmentAdapter(),
LeaveOfAbsence: LeaveOfAbsenceAdapter(),
NotificationItem: NotificationItemAdapter(),
Office: OfficeAdapter(),
PassSlip: PassSlipAdapter(),
Profile: ProfileAdapter(),
Service: ServiceAdapter(),
SwapRequest: SwapRequestAdapter(),
Task: TaskAdapter(),
TaskActivityLog: TaskActivityLogAdapter(),
Team: TeamAdapter(),
Ticket: TicketAdapter()
};
final supabaseModelDictionary = SupabaseModelDictionary(supabaseMappings);
/// Sqlite mappings should only be used when initializing a [SqliteProvider]
final Map<Type, SqliteAdapter<SqliteModel>> sqliteMappings = {
Announcement: AnnouncementAdapter(),
AnnouncementComment: AnnouncementCommentAdapter(),
AttendanceLog: AttendanceLogAdapter(),
ChatMessage: ChatMessageAdapter(),
DutySchedule: DutyScheduleAdapter(),
ItServiceRequest: ItServiceRequestAdapter(),
ItServiceRequestAction: ItServiceRequestActionAdapter(),
ItServiceRequestActivityLog: ItServiceRequestActivityLogAdapter(),
ItServiceRequestAssignment: ItServiceRequestAssignmentAdapter(),
LeaveOfAbsence: LeaveOfAbsenceAdapter(),
NotificationItem: NotificationItemAdapter(),
Office: OfficeAdapter(),
PassSlip: PassSlipAdapter(),
Profile: ProfileAdapter(),
Service: ServiceAdapter(),
SwapRequest: SwapRequestAdapter(),
Task: TaskAdapter(),
TaskActivityLog: TaskActivityLogAdapter(),
Team: TeamAdapter(),
Ticket: TicketAdapter()
};
final sqliteModelDictionary = SqliteModelDictionary(sqliteMappings);
+63
View File
@@ -0,0 +1,63 @@
import 'package:flutter/foundation.dart' show debugPrint;
import 'repository.dart';
/// Returns the locally cached list of [T] from Brick SQLite, or `[]` if Brick
/// isn't configured or the read fails. Never throws.
///
/// Use this as `onOfflineData` for [StreamRecoveryWrapper] so that screens
/// render data from the local cache when the device is offline:
///
/// ```dart
/// onOfflineData: () => cachedListFromBrick<Task>(),
/// ```
Future<List<T>> cachedListFromBrick<T extends OfflineFirstWithSupabaseModel>() async {
if (!AppRepository.isConfigured) {
debugPrint('[cachedListFromBrick<$T>] BRICK NOT CONFIGURED — returning []');
return const [];
}
try {
final rows = await AppRepository.instance.get<T>(
policy: OfflineFirstGetPolicy.localOnly,
);
if (rows.isEmpty) {
debugPrint('[cachedListFromBrick<$T>] empty cache (0 rows)');
}
return rows;
} catch (e) {
debugPrint('[cachedListFromBrick<$T>] failed: $e');
return const [];
}
}
/// Mirrors a batch of model rows into Brick's local SQLite cache as a
/// fire-and-forget side effect. Errors are caught and logged.
///
/// Use this as `onCacheMirror` for [StreamRecoveryWrapper] so that every
/// realtime emission keeps the local cache fresh — required for the cold-
/// launch-offline experience.
///
/// ```dart
/// onCacheMirror: (rows) => mirrorBatchToBrick<Task>(rows, tag: 'tasks'),
/// ```
void mirrorBatchToBrick<T extends OfflineFirstWithSupabaseModel>(
List<T> rows, {
String tag = 'mirror',
}) {
if (!AppRepository.isConfigured) return;
// Use sqliteProvider directly (local-only write). AppRepository.upsert is
// bidirectional — it re-POSTs rows to Supabase, which triggers RLS
// violations for other users' records and deadlocks from concurrent writes.
// Sequential processing prevents SQLite lock contention across providers.
// ignore: discarded_futures
Future(() async {
for (final row in rows) {
try {
await AppRepository.instance.sqliteProvider
.upsert<T>(row, repository: AppRepository.instance);
} catch (e) {
debugPrint('[$tag] mirror upsert<$T> failed: $e');
}
}
});
}
+360
View File
@@ -0,0 +1,360 @@
import 'dart:async';
import 'dart:convert';
import 'package:flutter/foundation.dart' show debugPrint, kIsWeb;
import 'package:shared_preferences/shared_preferences.dart';
import 'package:supabase_flutter/supabase_flutter.dart';
import '../models/announcement.model.dart';
import '../models/announcement_comment.model.dart';
import '../models/attendance_log.model.dart';
import '../models/duty_schedule.model.dart';
import '../models/it_service_request.model.dart';
import '../models/leave_of_absence.model.dart';
import '../models/notification_item.model.dart';
import '../models/office.model.dart';
import '../models/pass_slip.model.dart';
import '../models/profile.model.dart';
import '../models/service.model.dart';
import '../models/swap_request.model.dart';
import '../models/task.model.dart';
import '../models/team.model.dart';
import '../models/ticket.model.dart';
import 'repository.dart';
/// Proactively seeds the local Brick SQLite cache with the data the app needs
/// to render correctly when launched offline.
///
/// Triggered:
/// - After successful login.
/// - After the connectivity monitor flips offline → online.
/// - On a 1-hour timer in the foreground (defensive refresh).
///
/// Never throws — a single table failure must not abort the rest. Each table
/// is wrapped in try/catch and only logs the error.
///
/// Web is a no-op because Brick's SQLite is unavailable on web.
class CacheWarmer {
CacheWarmer._();
/// Window of mutable data to keep locally. 30 days is enough for the
/// "month of tasks/tickets" the user requested without bloating SQLite.
static const Duration window = Duration(days: 30);
/// SharedPreferences keys for association tables (no PK → not Brick models).
static const _kTeamMembersKey = 'cache_team_members_json';
static const _kUserOfficesKey = 'cache_user_offices_json';
/// Foreground timer handle so [start]/[stop] is idempotent.
static Timer? _refreshTimer;
/// True when at least one warm has completed since app start.
static bool _hasWarmedOnce = false;
static bool get hasWarmedOnce => _hasWarmedOnce;
/// Single-flight guard to prevent overlapping warms.
static Future<void>? _inflight;
/// Warm every cacheable table. Safe to call repeatedly.
static Future<void> warmAll(SupabaseClient client) {
if (kIsWeb) return Future.value();
if (!AppRepository.isConfigured) return Future.value();
final existing = _inflight;
if (existing != null) return existing;
final future = _runWarmAll(client);
_inflight = future;
return future.whenComplete(() => _inflight = null);
}
static Future<void> _runWarmAll(SupabaseClient client) async {
final stopwatch = Stopwatch()..start();
final since = DateTime.now().toUtc().subtract(window);
final sinceIso = since.toIso8601String();
debugPrint('[CacheWarmer] starting (since=$sinceIso)');
// Run reference + per-module warms in parallel — a single failure in one
// table must not block the others.
await Future.wait<void>([
_safe('reference', () => _warmReference(client)),
_safe('tasks', () => _warmTasks(client, sinceIso)),
_safe('tickets', () => _warmTickets(client, sinceIso)),
_safe('itsr', () => _warmItServiceRequests(client, sinceIso)),
_safe('announcements', () => _warmAnnouncements(client, sinceIso)),
_safe('attendance', () => _warmAttendance(client, sinceIso)),
_safe('pass_slips', () => _warmPassSlips(client, sinceIso)),
_safe('leaves', () => _warmLeaves(client, sinceIso)),
_safe('duty_schedules', () => _warmDutySchedules(client, sinceIso)),
_safe('swap_requests', () => _warmSwapRequests(client, sinceIso)),
_safe('notifications', () => _warmNotifications(client, sinceIso)),
]);
_hasWarmedOnce = true;
stopwatch.stop();
debugPrint('[CacheWarmer] done in ${stopwatch.elapsedMilliseconds}ms');
}
/// Schedule a periodic re-warm. Idempotent.
static void startPeriodicRefresh(SupabaseClient client) {
if (kIsWeb) return;
_refreshTimer?.cancel();
_refreshTimer = Timer.periodic(const Duration(hours: 1), (_) {
warmAll(client);
});
}
/// Cancel periodic re-warm (e.g. on sign-out).
static void stopPeriodicRefresh() {
_refreshTimer?.cancel();
_refreshTimer = null;
}
// ------------------------------------------------------------------
// Reference data — small, rarely-mutating. Pulled in full.
// ------------------------------------------------------------------
static Future<void> _warmReference(SupabaseClient client) async {
await Future.wait<void>([
_safe('offices', () async {
final rows = await client.from('offices').select();
for (final row in rows) {
await _localUpsert<Office>(Office.fromMap(row));
}
}),
_safe('services', () async {
final rows = await client.from('services').select();
for (final row in rows) {
await _localUpsert<Service>(Service.fromMap(row));
}
}),
_safe('profiles', () async {
final rows = await client.from('profiles').select();
for (final row in rows) {
await _localUpsert<Profile>(Profile.fromMap(row));
}
}),
_safe('teams', () async {
final rows = await client.from('teams').select();
for (final row in rows) {
await _localUpsert<Team>(Team.fromMap(row));
}
}),
// Association tables have composite PKs, so we cache them as JSON in
// SharedPreferences instead of Brick. The list is small and read-only.
_safe('team_members', () async {
final rows = await client.from('team_members').select();
final prefs = await SharedPreferences.getInstance();
await prefs.setString(_kTeamMembersKey, jsonEncode(rows));
}),
_safe('user_offices', () async {
final rows = await client.from('user_offices').select();
final prefs = await SharedPreferences.getInstance();
await prefs.setString(_kUserOfficesKey, jsonEncode(rows));
}),
]);
}
/// Read cached team_members rows from SharedPreferences.
/// Returns the same shape as the Supabase select (`[{team_id, user_id}, ...]`).
static Future<List<Map<String, dynamic>>> readCachedTeamMembers() async {
final prefs = await SharedPreferences.getInstance();
final raw = prefs.getString(_kTeamMembersKey);
if (raw == null) return const [];
try {
final list = jsonDecode(raw);
if (list is! List) return const [];
return list.cast<Map<String, dynamic>>();
} catch (_) {
return const [];
}
}
/// Read cached user_offices rows from SharedPreferences.
static Future<List<Map<String, dynamic>>> readCachedUserOffices() async {
final prefs = await SharedPreferences.getInstance();
final raw = prefs.getString(_kUserOfficesKey);
if (raw == null) return const [];
try {
final list = jsonDecode(raw);
if (list is! List) return const [];
return list.cast<Map<String, dynamic>>();
} catch (_) {
return const [];
}
}
// ------------------------------------------------------------------
// Per-module warms — windowed by created_at >= since
// ------------------------------------------------------------------
static Future<void> _warmTasks(SupabaseClient client, String sinceIso) async {
final rows = await client
.from('tasks')
.select()
.gte('created_at', sinceIso);
for (final row in rows) {
await _localUpsert<Task>(Task.fromMap(row));
}
}
static Future<void> _warmTickets(
SupabaseClient client,
String sinceIso,
) async {
final rows = await client
.from('tickets')
.select()
.gte('created_at', sinceIso);
for (final row in rows) {
await _localUpsert<Ticket>(Ticket.fromMap(row));
}
}
static Future<void> _warmItServiceRequests(
SupabaseClient client,
String sinceIso,
) async {
final rows = await client
.from('it_service_requests')
.select()
.gte('created_at', sinceIso);
for (final row in rows) {
await _localUpsert<ItServiceRequest>(ItServiceRequest.fromMap(row));
}
}
static Future<void> _warmAnnouncements(
SupabaseClient client,
String sinceIso,
) async {
final rows = await client
.from('announcements')
.select()
.gte('created_at', sinceIso);
for (final row in rows) {
await _localUpsert<Announcement>(Announcement.fromMap(row));
}
// Also pull comments for the windowed announcements so detail screens have
// them offline.
try {
final commentRows = await client
.from('announcement_comments')
.select()
.gte('created_at', sinceIso);
for (final row in commentRows) {
await _localUpsert<AnnouncementComment>(
AnnouncementComment.fromMap(row),
);
}
} catch (e) {
debugPrint('[CacheWarmer] announcement_comments failed: $e');
}
}
static Future<void> _warmAttendance(
SupabaseClient client,
String sinceIso,
) async {
final rows = await client
.from('attendance_logs')
.select()
.gte('check_in_at', sinceIso);
for (final row in rows) {
await _localUpsert<AttendanceLog>(AttendanceLog.fromMap(row));
}
}
static Future<void> _warmPassSlips(
SupabaseClient client,
String sinceIso,
) async {
final rows = await client
.from('pass_slips')
.select()
.gte('created_at', sinceIso);
for (final row in rows) {
await _localUpsert<PassSlip>(PassSlip.fromMap(row));
}
}
static Future<void> _warmLeaves(
SupabaseClient client,
String sinceIso,
) async {
final rows = await client
.from('leave_of_absence')
.select()
.gte('created_at', sinceIso);
for (final row in rows) {
await _localUpsert<LeaveOfAbsence>(LeaveOfAbsence.fromMap(row));
}
}
static Future<void> _warmDutySchedules(
SupabaseClient client,
String sinceIso,
) async {
// Duty schedules are upcoming-focused; pull a wider window so the user
// can see today + the next several weeks while offline.
final rows = await client
.from('duty_schedules')
.select()
.gte('start_time', sinceIso);
for (final row in rows) {
await _localUpsert<DutySchedule>(DutySchedule.fromMap(row));
}
}
static Future<void> _warmSwapRequests(
SupabaseClient client,
String sinceIso,
) async {
final rows = await client
.from('swap_requests')
.select()
.gte('created_at', sinceIso);
for (final row in rows) {
await _localUpsert<SwapRequest>(SwapRequest.fromMap(row));
}
}
static Future<void> _warmNotifications(
SupabaseClient client,
String sinceIso,
) async {
final rows = await client
.from('notifications')
.select()
.gte('created_at', sinceIso);
for (final row in rows) {
await _localUpsert<NotificationItem>(NotificationItem.fromMap(row));
}
}
// ------------------------------------------------------------------
// Helpers
// ------------------------------------------------------------------
/// Writes [model] to local SQLite only, bypassing Brick's bidirectional
/// sync. AppRepository.upsert would re-POST rows to Supabase, causing RLS
/// violations for other users' records and deadlocks from concurrent writes.
static Future<void> _localUpsert<T extends OfflineFirstWithSupabaseModel>(
T model,
) async {
await AppRepository.instance.sqliteProvider
.upsert<T>(model, repository: AppRepository.instance);
}
static Future<void> _safe(String label, Future<void> Function() task) async {
try {
await task();
} catch (e, st) {
debugPrint('[CacheWarmer] $label failed: $e');
assert(() {
debugPrint('$st');
return true;
}());
}
}
}
+502
View File
@@ -0,0 +1,502 @@
// GENERATED CODE EDIT WITH CAUTION
// THIS FILE **WILL NOT** BE REGENERATED
// This file should be version controlled and can be manually edited.
part of 'schema.g.dart';
// While migrations are intelligently created, the difference between some commands, such as
// DropTable vs. RenameTable, cannot be determined. For this reason, please review migrations after
// they are created to ensure the correct inference was made.
// The migration version must **always** mirror the file name
const List<MigrationCommand> _migration_20260411041808_up = [
InsertTable('Announcement'),
InsertTable('AnnouncementComment'),
InsertTable('AttendanceLog'),
InsertTable('ChatMessage'),
InsertTable('DutySchedule'),
InsertTable('ItServiceRequest'),
InsertTable('ItServiceRequestAction'),
InsertTable('ItServiceRequestActivityLog'),
InsertTable('ItServiceRequestAssignment'),
InsertTable('LeaveOfAbsence'),
InsertTable('NotificationItem'),
InsertTable('Office'),
InsertTable('PassSlip'),
InsertTable('Profile'),
InsertTable('Service'),
InsertTable('SwapRequest'),
InsertTable('Task'),
InsertTable('TaskActivityLog'),
InsertTable('Team'),
InsertTable('Ticket'),
InsertColumn('id', Column.varchar, onTable: 'Announcement'),
InsertColumn('author_id', Column.varchar, onTable: 'Announcement'),
InsertColumn('title', Column.varchar, onTable: 'Announcement'),
InsertColumn('body', Column.varchar, onTable: 'Announcement'),
InsertColumn('visible_roles', Column.varchar, onTable: 'Announcement'),
InsertColumn('is_template', Column.boolean, onTable: 'Announcement'),
InsertColumn('template_id', Column.varchar, onTable: 'Announcement'),
InsertColumn('created_at', Column.datetime, onTable: 'Announcement'),
InsertColumn('updated_at', Column.datetime, onTable: 'Announcement'),
InsertColumn('banner_enabled', Column.boolean, onTable: 'Announcement'),
InsertColumn('banner_show_at', Column.datetime, onTable: 'Announcement'),
InsertColumn('banner_hide_at', Column.datetime, onTable: 'Announcement'),
InsertColumn('push_interval_minutes', Column.integer, onTable: 'Announcement'),
InsertColumn('is_banner_active', Column.boolean, onTable: 'Announcement'),
InsertColumn('hash_code', Column.integer, onTable: 'Announcement'),
InsertColumn('id', Column.varchar, onTable: 'AnnouncementComment'),
InsertColumn('announcement_id', Column.varchar, onTable: 'AnnouncementComment'),
InsertColumn('author_id', Column.varchar, onTable: 'AnnouncementComment'),
InsertColumn('body', Column.varchar, onTable: 'AnnouncementComment'),
InsertColumn('created_at', Column.datetime, onTable: 'AnnouncementComment'),
InsertColumn('hash_code', Column.integer, onTable: 'AnnouncementComment'),
InsertColumn('id', Column.varchar, onTable: 'AttendanceLog'),
InsertColumn('user_id', Column.varchar, onTable: 'AttendanceLog'),
InsertColumn('duty_schedule_id', Column.varchar, onTable: 'AttendanceLog'),
InsertColumn('shift_type', Column.varchar, onTable: 'AttendanceLog'),
InsertColumn('check_in_at', Column.datetime, onTable: 'AttendanceLog'),
InsertColumn('check_in_lat', Column.Double, onTable: 'AttendanceLog'),
InsertColumn('check_in_lng', Column.Double, onTable: 'AttendanceLog'),
InsertColumn('check_out_at', Column.datetime, onTable: 'AttendanceLog'),
InsertColumn('check_out_lat', Column.Double, onTable: 'AttendanceLog'),
InsertColumn('check_out_lng', Column.Double, onTable: 'AttendanceLog'),
InsertColumn('justification', Column.varchar, onTable: 'AttendanceLog'),
InsertColumn('check_out_justification', Column.varchar, onTable: 'AttendanceLog'),
InsertColumn('verification_status', Column.varchar, onTable: 'AttendanceLog'),
InsertColumn('check_in_verification_photo_url', Column.varchar, onTable: 'AttendanceLog'),
InsertColumn('check_out_verification_photo_url', Column.varchar, onTable: 'AttendanceLog'),
InsertColumn('is_checked_out', Column.boolean, onTable: 'AttendanceLog'),
InsertColumn('is_verified', Column.boolean, onTable: 'AttendanceLog'),
InsertColumn('is_unverified', Column.boolean, onTable: 'AttendanceLog'),
InsertColumn('id', Column.varchar, onTable: 'ChatMessage'),
InsertColumn('thread_id', Column.varchar, onTable: 'ChatMessage'),
InsertColumn('sender_id', Column.varchar, onTable: 'ChatMessage'),
InsertColumn('body', Column.varchar, onTable: 'ChatMessage'),
InsertColumn('created_at', Column.datetime, onTable: 'ChatMessage'),
InsertColumn('id', Column.varchar, onTable: 'DutySchedule'),
InsertColumn('user_id', Column.varchar, onTable: 'DutySchedule'),
InsertColumn('shift_type', Column.varchar, onTable: 'DutySchedule'),
InsertColumn('start_time', Column.datetime, onTable: 'DutySchedule'),
InsertColumn('end_time', Column.datetime, onTable: 'DutySchedule'),
InsertColumn('status', Column.varchar, onTable: 'DutySchedule'),
InsertColumn('created_at', Column.datetime, onTable: 'DutySchedule'),
InsertColumn('check_in_at', Column.datetime, onTable: 'DutySchedule'),
InsertColumn('reliever_ids', Column.varchar, onTable: 'DutySchedule'),
InsertColumn('swap_request_id', Column.varchar, onTable: 'DutySchedule'),
InsertColumn('id', Column.varchar, onTable: 'ItServiceRequest'),
InsertColumn('request_number', Column.varchar, onTable: 'ItServiceRequest'),
InsertColumn('services', Column.varchar, onTable: 'ItServiceRequest'),
InsertColumn('services_other', Column.varchar, onTable: 'ItServiceRequest'),
InsertColumn('event_name', Column.varchar, onTable: 'ItServiceRequest'),
InsertColumn('event_details', Column.varchar, onTable: 'ItServiceRequest'),
InsertColumn('event_date', Column.datetime, onTable: 'ItServiceRequest'),
InsertColumn('event_end_date', Column.datetime, onTable: 'ItServiceRequest'),
InsertColumn('dry_run_date', Column.datetime, onTable: 'ItServiceRequest'),
InsertColumn('dry_run_end_date', Column.datetime, onTable: 'ItServiceRequest'),
InsertColumn('contact_person', Column.varchar, onTable: 'ItServiceRequest'),
InsertColumn('contact_number', Column.varchar, onTable: 'ItServiceRequest'),
InsertColumn('remarks', Column.varchar, onTable: 'ItServiceRequest'),
InsertColumn('office_id', Column.varchar, onTable: 'ItServiceRequest'),
InsertColumn('requested_by', Column.varchar, onTable: 'ItServiceRequest'),
InsertColumn('requested_by_user_id', Column.varchar, onTable: 'ItServiceRequest'),
InsertColumn('approved_by', Column.varchar, onTable: 'ItServiceRequest'),
InsertColumn('approved_by_user_id', Column.varchar, onTable: 'ItServiceRequest'),
InsertColumn('approved_at', Column.datetime, onTable: 'ItServiceRequest'),
InsertColumn('status', Column.varchar, onTable: 'ItServiceRequest'),
InsertColumn('outside_premise_allowed', Column.boolean, onTable: 'ItServiceRequest'),
InsertColumn('cancellation_reason', Column.varchar, onTable: 'ItServiceRequest'),
InsertColumn('cancelled_at', Column.datetime, onTable: 'ItServiceRequest'),
InsertColumn('creator_id', Column.varchar, onTable: 'ItServiceRequest'),
InsertColumn('created_at', Column.datetime, onTable: 'ItServiceRequest'),
InsertColumn('updated_at', Column.datetime, onTable: 'ItServiceRequest'),
InsertColumn('completed_at', Column.datetime, onTable: 'ItServiceRequest'),
InsertColumn('date_time_received', Column.datetime, onTable: 'ItServiceRequest'),
InsertColumn('date_time_checked', Column.datetime, onTable: 'ItServiceRequest'),
InsertColumn('hash_code', Column.integer, onTable: 'ItServiceRequest'),
InsertColumn('id', Column.varchar, onTable: 'ItServiceRequestAction'),
InsertColumn('request_id', Column.varchar, onTable: 'ItServiceRequestAction'),
InsertColumn('user_id', Column.varchar, onTable: 'ItServiceRequestAction'),
InsertColumn('action_taken', Column.varchar, onTable: 'ItServiceRequestAction'),
InsertColumn('created_at', Column.datetime, onTable: 'ItServiceRequestAction'),
InsertColumn('updated_at', Column.datetime, onTable: 'ItServiceRequestAction'),
InsertColumn('id', Column.varchar, onTable: 'ItServiceRequestActivityLog'),
InsertColumn('request_id', Column.varchar, onTable: 'ItServiceRequestActivityLog'),
InsertColumn('actor_id', Column.varchar, onTable: 'ItServiceRequestActivityLog'),
InsertColumn('action_type', Column.varchar, onTable: 'ItServiceRequestActivityLog'),
InsertColumn('meta', Column.varchar, onTable: 'ItServiceRequestActivityLog'),
InsertColumn('created_at', Column.datetime, onTable: 'ItServiceRequestActivityLog'),
InsertColumn('id', Column.varchar, onTable: 'ItServiceRequestAssignment'),
InsertColumn('request_id', Column.varchar, onTable: 'ItServiceRequestAssignment'),
InsertColumn('user_id', Column.varchar, onTable: 'ItServiceRequestAssignment'),
InsertColumn('created_at', Column.datetime, onTable: 'ItServiceRequestAssignment'),
InsertColumn('id', Column.varchar, onTable: 'LeaveOfAbsence'),
InsertColumn('user_id', Column.varchar, onTable: 'LeaveOfAbsence'),
InsertColumn('leave_type', Column.varchar, onTable: 'LeaveOfAbsence'),
InsertColumn('justification', Column.varchar, onTable: 'LeaveOfAbsence'),
InsertColumn('start_time', Column.datetime, onTable: 'LeaveOfAbsence'),
InsertColumn('end_time', Column.datetime, onTable: 'LeaveOfAbsence'),
InsertColumn('status', Column.varchar, onTable: 'LeaveOfAbsence'),
InsertColumn('filed_by', Column.varchar, onTable: 'LeaveOfAbsence'),
InsertColumn('created_at', Column.datetime, onTable: 'LeaveOfAbsence'),
InsertColumn('leave_type_label', Column.varchar, onTable: 'LeaveOfAbsence'),
InsertColumn('id', Column.varchar, onTable: 'NotificationItem'),
InsertColumn('user_id', Column.varchar, onTable: 'NotificationItem'),
InsertColumn('actor_id', Column.varchar, onTable: 'NotificationItem'),
InsertColumn('ticket_id', Column.varchar, onTable: 'NotificationItem'),
InsertColumn('task_id', Column.varchar, onTable: 'NotificationItem'),
InsertColumn('leave_id', Column.varchar, onTable: 'NotificationItem'),
InsertColumn('pass_slip_id', Column.varchar, onTable: 'NotificationItem'),
InsertColumn('it_service_request_id', Column.varchar, onTable: 'NotificationItem'),
InsertColumn('announcement_id', Column.varchar, onTable: 'NotificationItem'),
InsertColumn('message_id', Column.integer, onTable: 'NotificationItem'),
InsertColumn('type', Column.varchar, onTable: 'NotificationItem'),
InsertColumn('created_at', Column.datetime, onTable: 'NotificationItem'),
InsertColumn('read_at', Column.datetime, onTable: 'NotificationItem'),
InsertColumn('is_unread', Column.boolean, onTable: 'NotificationItem'),
InsertColumn('id', Column.varchar, onTable: 'Office'),
InsertColumn('name', Column.varchar, onTable: 'Office'),
InsertColumn('service_id', Column.varchar, onTable: 'Office'),
InsertColumn('id', Column.varchar, onTable: 'PassSlip'),
InsertColumn('user_id', Column.varchar, onTable: 'PassSlip'),
InsertColumn('duty_schedule_id', Column.varchar, onTable: 'PassSlip'),
InsertColumn('reason', Column.varchar, onTable: 'PassSlip'),
InsertColumn('status', Column.varchar, onTable: 'PassSlip'),
InsertColumn('requested_at', Column.datetime, onTable: 'PassSlip'),
InsertColumn('approved_by', Column.varchar, onTable: 'PassSlip'),
InsertColumn('approved_at', Column.datetime, onTable: 'PassSlip'),
InsertColumn('slip_start', Column.datetime, onTable: 'PassSlip'),
InsertColumn('slip_end', Column.datetime, onTable: 'PassSlip'),
InsertColumn('requested_start', Column.datetime, onTable: 'PassSlip'),
InsertColumn('is_active', Column.boolean, onTable: 'PassSlip'),
InsertColumn('is_exceeded', Column.boolean, onTable: 'PassSlip'),
InsertColumn('id', Column.varchar, onTable: 'Profile'),
InsertColumn('role', Column.varchar, onTable: 'Profile'),
InsertColumn('full_name', Column.varchar, onTable: 'Profile'),
InsertColumn('religion', Column.varchar, onTable: 'Profile'),
InsertColumn('allow_tracking', Column.boolean, onTable: 'Profile'),
InsertColumn('avatar_url', Column.varchar, onTable: 'Profile'),
InsertColumn('face_photo_url', Column.varchar, onTable: 'Profile'),
InsertColumn('face_enrolled_at', Column.datetime, onTable: 'Profile'),
InsertColumn('has_face_enrolled', Column.boolean, onTable: 'Profile'),
InsertColumn('id', Column.varchar, onTable: 'Service'),
InsertColumn('name', Column.varchar, onTable: 'Service'),
InsertColumn('id', Column.varchar, onTable: 'SwapRequest'),
InsertColumn('requester_id', Column.varchar, onTable: 'SwapRequest'),
InsertColumn('recipient_id', Column.varchar, onTable: 'SwapRequest'),
InsertColumn('requester_schedule_id', Column.varchar, onTable: 'SwapRequest'),
InsertColumn('target_schedule_id', Column.varchar, onTable: 'SwapRequest'),
InsertColumn('status', Column.varchar, onTable: 'SwapRequest'),
InsertColumn('created_at', Column.datetime, onTable: 'SwapRequest'),
InsertColumn('updated_at', Column.datetime, onTable: 'SwapRequest'),
InsertColumn('chat_thread_id', Column.varchar, onTable: 'SwapRequest'),
InsertColumn('shift_type', Column.varchar, onTable: 'SwapRequest'),
InsertColumn('shift_start_time', Column.datetime, onTable: 'SwapRequest'),
InsertColumn('reliever_ids', Column.varchar, onTable: 'SwapRequest'),
InsertColumn('approved_by', Column.varchar, onTable: 'SwapRequest'),
InsertColumn('id', Column.varchar, onTable: 'Task'),
InsertColumn('ticket_id', Column.varchar, onTable: 'Task'),
InsertColumn('task_number', Column.varchar, onTable: 'Task'),
InsertColumn('title', Column.varchar, onTable: 'Task'),
InsertColumn('description', Column.varchar, onTable: 'Task'),
InsertColumn('office_id', Column.varchar, onTable: 'Task'),
InsertColumn('status', Column.varchar, onTable: 'Task'),
InsertColumn('priority', Column.integer, onTable: 'Task'),
InsertColumn('queue_order', Column.integer, onTable: 'Task'),
InsertColumn('created_at', Column.datetime, onTable: 'Task'),
InsertColumn('creator_id', Column.varchar, onTable: 'Task'),
InsertColumn('started_at', Column.datetime, onTable: 'Task'),
InsertColumn('completed_at', Column.datetime, onTable: 'Task'),
InsertColumn('requested_by', Column.varchar, onTable: 'Task'),
InsertColumn('noted_by', Column.varchar, onTable: 'Task'),
InsertColumn('received_by', Column.varchar, onTable: 'Task'),
InsertColumn('request_type', Column.varchar, onTable: 'Task'),
InsertColumn('request_type_other', Column.varchar, onTable: 'Task'),
InsertColumn('request_category', Column.varchar, onTable: 'Task'),
InsertColumn('action_taken', Column.varchar, onTable: 'Task'),
InsertColumn('cancellation_reason', Column.varchar, onTable: 'Task'),
InsertColumn('cancelled_at', Column.datetime, onTable: 'Task'),
InsertColumn('it_job_printed', Column.boolean, onTable: 'Task'),
InsertColumn('it_job_printed_at', Column.datetime, onTable: 'Task'),
InsertColumn('it_job_received_by_id', Column.varchar, onTable: 'Task'),
InsertColumn('hash_code', Column.integer, onTable: 'Task'),
InsertColumn('has_incomplete_details', Column.boolean, onTable: 'Task'),
InsertColumn('id', Column.varchar, onTable: 'TaskActivityLog'),
InsertColumn('task_id', Column.varchar, onTable: 'TaskActivityLog'),
InsertColumn('actor_id', Column.varchar, onTable: 'TaskActivityLog'),
InsertColumn('action_type', Column.varchar, onTable: 'TaskActivityLog'),
InsertColumn('meta', Column.varchar, onTable: 'TaskActivityLog'),
InsertColumn('created_at', Column.datetime, onTable: 'TaskActivityLog'),
InsertColumn('id', Column.varchar, onTable: 'Team'),
InsertColumn('name', Column.varchar, onTable: 'Team'),
InsertColumn('leader_id', Column.varchar, onTable: 'Team'),
InsertColumn('office_ids', Column.varchar, onTable: 'Team'),
InsertColumn('created_at', Column.datetime, onTable: 'Team'),
InsertColumn('color', Column.varchar, onTable: 'Team'),
InsertColumn('id', Column.varchar, onTable: 'Ticket'),
InsertColumn('subject', Column.varchar, onTable: 'Ticket'),
InsertColumn('description', Column.varchar, onTable: 'Ticket'),
InsertColumn('office_id', Column.varchar, onTable: 'Ticket'),
InsertColumn('status', Column.varchar, onTable: 'Ticket'),
InsertColumn('created_at', Column.datetime, onTable: 'Ticket'),
InsertColumn('creator_id', Column.varchar, onTable: 'Ticket'),
InsertColumn('responded_at', Column.datetime, onTable: 'Ticket'),
InsertColumn('promoted_at', Column.datetime, onTable: 'Ticket'),
InsertColumn('closed_at', Column.datetime, onTable: 'Ticket'),
InsertColumn('hash_code', Column.integer, onTable: 'Ticket')
];
const List<MigrationCommand> _migration_20260411041808_down = [
DropTable('Announcement'),
DropTable('AnnouncementComment'),
DropTable('AttendanceLog'),
DropTable('ChatMessage'),
DropTable('DutySchedule'),
DropTable('ItServiceRequest'),
DropTable('ItServiceRequestAction'),
DropTable('ItServiceRequestActivityLog'),
DropTable('ItServiceRequestAssignment'),
DropTable('LeaveOfAbsence'),
DropTable('NotificationItem'),
DropTable('Office'),
DropTable('PassSlip'),
DropTable('Profile'),
DropTable('Service'),
DropTable('SwapRequest'),
DropTable('Task'),
DropTable('TaskActivityLog'),
DropTable('Team'),
DropTable('Ticket'),
DropColumn('id', onTable: 'Announcement'),
DropColumn('author_id', onTable: 'Announcement'),
DropColumn('title', onTable: 'Announcement'),
DropColumn('body', onTable: 'Announcement'),
DropColumn('visible_roles', onTable: 'Announcement'),
DropColumn('is_template', onTable: 'Announcement'),
DropColumn('template_id', onTable: 'Announcement'),
DropColumn('created_at', onTable: 'Announcement'),
DropColumn('updated_at', onTable: 'Announcement'),
DropColumn('banner_enabled', onTable: 'Announcement'),
DropColumn('banner_show_at', onTable: 'Announcement'),
DropColumn('banner_hide_at', onTable: 'Announcement'),
DropColumn('push_interval_minutes', onTable: 'Announcement'),
DropColumn('is_banner_active', onTable: 'Announcement'),
DropColumn('hash_code', onTable: 'Announcement'),
DropColumn('id', onTable: 'AnnouncementComment'),
DropColumn('announcement_id', onTable: 'AnnouncementComment'),
DropColumn('author_id', onTable: 'AnnouncementComment'),
DropColumn('body', onTable: 'AnnouncementComment'),
DropColumn('created_at', onTable: 'AnnouncementComment'),
DropColumn('hash_code', onTable: 'AnnouncementComment'),
DropColumn('id', onTable: 'AttendanceLog'),
DropColumn('user_id', onTable: 'AttendanceLog'),
DropColumn('duty_schedule_id', onTable: 'AttendanceLog'),
DropColumn('shift_type', onTable: 'AttendanceLog'),
DropColumn('check_in_at', onTable: 'AttendanceLog'),
DropColumn('check_in_lat', onTable: 'AttendanceLog'),
DropColumn('check_in_lng', onTable: 'AttendanceLog'),
DropColumn('check_out_at', onTable: 'AttendanceLog'),
DropColumn('check_out_lat', onTable: 'AttendanceLog'),
DropColumn('check_out_lng', onTable: 'AttendanceLog'),
DropColumn('justification', onTable: 'AttendanceLog'),
DropColumn('check_out_justification', onTable: 'AttendanceLog'),
DropColumn('verification_status', onTable: 'AttendanceLog'),
DropColumn('check_in_verification_photo_url', onTable: 'AttendanceLog'),
DropColumn('check_out_verification_photo_url', onTable: 'AttendanceLog'),
DropColumn('is_checked_out', onTable: 'AttendanceLog'),
DropColumn('is_verified', onTable: 'AttendanceLog'),
DropColumn('is_unverified', onTable: 'AttendanceLog'),
DropColumn('id', onTable: 'ChatMessage'),
DropColumn('thread_id', onTable: 'ChatMessage'),
DropColumn('sender_id', onTable: 'ChatMessage'),
DropColumn('body', onTable: 'ChatMessage'),
DropColumn('created_at', onTable: 'ChatMessage'),
DropColumn('id', onTable: 'DutySchedule'),
DropColumn('user_id', onTable: 'DutySchedule'),
DropColumn('shift_type', onTable: 'DutySchedule'),
DropColumn('start_time', onTable: 'DutySchedule'),
DropColumn('end_time', onTable: 'DutySchedule'),
DropColumn('status', onTable: 'DutySchedule'),
DropColumn('created_at', onTable: 'DutySchedule'),
DropColumn('check_in_at', onTable: 'DutySchedule'),
DropColumn('reliever_ids', onTable: 'DutySchedule'),
DropColumn('swap_request_id', onTable: 'DutySchedule'),
DropColumn('id', onTable: 'ItServiceRequest'),
DropColumn('request_number', onTable: 'ItServiceRequest'),
DropColumn('services', onTable: 'ItServiceRequest'),
DropColumn('services_other', onTable: 'ItServiceRequest'),
DropColumn('event_name', onTable: 'ItServiceRequest'),
DropColumn('event_details', onTable: 'ItServiceRequest'),
DropColumn('event_date', onTable: 'ItServiceRequest'),
DropColumn('event_end_date', onTable: 'ItServiceRequest'),
DropColumn('dry_run_date', onTable: 'ItServiceRequest'),
DropColumn('dry_run_end_date', onTable: 'ItServiceRequest'),
DropColumn('contact_person', onTable: 'ItServiceRequest'),
DropColumn('contact_number', onTable: 'ItServiceRequest'),
DropColumn('remarks', onTable: 'ItServiceRequest'),
DropColumn('office_id', onTable: 'ItServiceRequest'),
DropColumn('requested_by', onTable: 'ItServiceRequest'),
DropColumn('requested_by_user_id', onTable: 'ItServiceRequest'),
DropColumn('approved_by', onTable: 'ItServiceRequest'),
DropColumn('approved_by_user_id', onTable: 'ItServiceRequest'),
DropColumn('approved_at', onTable: 'ItServiceRequest'),
DropColumn('status', onTable: 'ItServiceRequest'),
DropColumn('outside_premise_allowed', onTable: 'ItServiceRequest'),
DropColumn('cancellation_reason', onTable: 'ItServiceRequest'),
DropColumn('cancelled_at', onTable: 'ItServiceRequest'),
DropColumn('creator_id', onTable: 'ItServiceRequest'),
DropColumn('created_at', onTable: 'ItServiceRequest'),
DropColumn('updated_at', onTable: 'ItServiceRequest'),
DropColumn('completed_at', onTable: 'ItServiceRequest'),
DropColumn('date_time_received', onTable: 'ItServiceRequest'),
DropColumn('date_time_checked', onTable: 'ItServiceRequest'),
DropColumn('hash_code', onTable: 'ItServiceRequest'),
DropColumn('id', onTable: 'ItServiceRequestAction'),
DropColumn('request_id', onTable: 'ItServiceRequestAction'),
DropColumn('user_id', onTable: 'ItServiceRequestAction'),
DropColumn('action_taken', onTable: 'ItServiceRequestAction'),
DropColumn('created_at', onTable: 'ItServiceRequestAction'),
DropColumn('updated_at', onTable: 'ItServiceRequestAction'),
DropColumn('id', onTable: 'ItServiceRequestActivityLog'),
DropColumn('request_id', onTable: 'ItServiceRequestActivityLog'),
DropColumn('actor_id', onTable: 'ItServiceRequestActivityLog'),
DropColumn('action_type', onTable: 'ItServiceRequestActivityLog'),
DropColumn('meta', onTable: 'ItServiceRequestActivityLog'),
DropColumn('created_at', onTable: 'ItServiceRequestActivityLog'),
DropColumn('id', onTable: 'ItServiceRequestAssignment'),
DropColumn('request_id', onTable: 'ItServiceRequestAssignment'),
DropColumn('user_id', onTable: 'ItServiceRequestAssignment'),
DropColumn('created_at', onTable: 'ItServiceRequestAssignment'),
DropColumn('id', onTable: 'LeaveOfAbsence'),
DropColumn('user_id', onTable: 'LeaveOfAbsence'),
DropColumn('leave_type', onTable: 'LeaveOfAbsence'),
DropColumn('justification', onTable: 'LeaveOfAbsence'),
DropColumn('start_time', onTable: 'LeaveOfAbsence'),
DropColumn('end_time', onTable: 'LeaveOfAbsence'),
DropColumn('status', onTable: 'LeaveOfAbsence'),
DropColumn('filed_by', onTable: 'LeaveOfAbsence'),
DropColumn('created_at', onTable: 'LeaveOfAbsence'),
DropColumn('leave_type_label', onTable: 'LeaveOfAbsence'),
DropColumn('id', onTable: 'NotificationItem'),
DropColumn('user_id', onTable: 'NotificationItem'),
DropColumn('actor_id', onTable: 'NotificationItem'),
DropColumn('ticket_id', onTable: 'NotificationItem'),
DropColumn('task_id', onTable: 'NotificationItem'),
DropColumn('leave_id', onTable: 'NotificationItem'),
DropColumn('pass_slip_id', onTable: 'NotificationItem'),
DropColumn('it_service_request_id', onTable: 'NotificationItem'),
DropColumn('announcement_id', onTable: 'NotificationItem'),
DropColumn('message_id', onTable: 'NotificationItem'),
DropColumn('type', onTable: 'NotificationItem'),
DropColumn('created_at', onTable: 'NotificationItem'),
DropColumn('read_at', onTable: 'NotificationItem'),
DropColumn('is_unread', onTable: 'NotificationItem'),
DropColumn('id', onTable: 'Office'),
DropColumn('name', onTable: 'Office'),
DropColumn('service_id', onTable: 'Office'),
DropColumn('id', onTable: 'PassSlip'),
DropColumn('user_id', onTable: 'PassSlip'),
DropColumn('duty_schedule_id', onTable: 'PassSlip'),
DropColumn('reason', onTable: 'PassSlip'),
DropColumn('status', onTable: 'PassSlip'),
DropColumn('requested_at', onTable: 'PassSlip'),
DropColumn('approved_by', onTable: 'PassSlip'),
DropColumn('approved_at', onTable: 'PassSlip'),
DropColumn('slip_start', onTable: 'PassSlip'),
DropColumn('slip_end', onTable: 'PassSlip'),
DropColumn('requested_start', onTable: 'PassSlip'),
DropColumn('is_active', onTable: 'PassSlip'),
DropColumn('is_exceeded', onTable: 'PassSlip'),
DropColumn('id', onTable: 'Profile'),
DropColumn('role', onTable: 'Profile'),
DropColumn('full_name', onTable: 'Profile'),
DropColumn('religion', onTable: 'Profile'),
DropColumn('allow_tracking', onTable: 'Profile'),
DropColumn('avatar_url', onTable: 'Profile'),
DropColumn('face_photo_url', onTable: 'Profile'),
DropColumn('face_enrolled_at', onTable: 'Profile'),
DropColumn('has_face_enrolled', onTable: 'Profile'),
DropColumn('id', onTable: 'Service'),
DropColumn('name', onTable: 'Service'),
DropColumn('id', onTable: 'SwapRequest'),
DropColumn('requester_id', onTable: 'SwapRequest'),
DropColumn('recipient_id', onTable: 'SwapRequest'),
DropColumn('requester_schedule_id', onTable: 'SwapRequest'),
DropColumn('target_schedule_id', onTable: 'SwapRequest'),
DropColumn('status', onTable: 'SwapRequest'),
DropColumn('created_at', onTable: 'SwapRequest'),
DropColumn('updated_at', onTable: 'SwapRequest'),
DropColumn('chat_thread_id', onTable: 'SwapRequest'),
DropColumn('shift_type', onTable: 'SwapRequest'),
DropColumn('shift_start_time', onTable: 'SwapRequest'),
DropColumn('reliever_ids', onTable: 'SwapRequest'),
DropColumn('approved_by', onTable: 'SwapRequest'),
DropColumn('id', onTable: 'Task'),
DropColumn('ticket_id', onTable: 'Task'),
DropColumn('task_number', onTable: 'Task'),
DropColumn('title', onTable: 'Task'),
DropColumn('description', onTable: 'Task'),
DropColumn('office_id', onTable: 'Task'),
DropColumn('status', onTable: 'Task'),
DropColumn('priority', onTable: 'Task'),
DropColumn('queue_order', onTable: 'Task'),
DropColumn('created_at', onTable: 'Task'),
DropColumn('creator_id', onTable: 'Task'),
DropColumn('started_at', onTable: 'Task'),
DropColumn('completed_at', onTable: 'Task'),
DropColumn('requested_by', onTable: 'Task'),
DropColumn('noted_by', onTable: 'Task'),
DropColumn('received_by', onTable: 'Task'),
DropColumn('request_type', onTable: 'Task'),
DropColumn('request_type_other', onTable: 'Task'),
DropColumn('request_category', onTable: 'Task'),
DropColumn('action_taken', onTable: 'Task'),
DropColumn('cancellation_reason', onTable: 'Task'),
DropColumn('cancelled_at', onTable: 'Task'),
DropColumn('it_job_printed', onTable: 'Task'),
DropColumn('it_job_printed_at', onTable: 'Task'),
DropColumn('it_job_received_by_id', onTable: 'Task'),
DropColumn('hash_code', onTable: 'Task'),
DropColumn('has_incomplete_details', onTable: 'Task'),
DropColumn('id', onTable: 'TaskActivityLog'),
DropColumn('task_id', onTable: 'TaskActivityLog'),
DropColumn('actor_id', onTable: 'TaskActivityLog'),
DropColumn('action_type', onTable: 'TaskActivityLog'),
DropColumn('meta', onTable: 'TaskActivityLog'),
DropColumn('created_at', onTable: 'TaskActivityLog'),
DropColumn('id', onTable: 'Team'),
DropColumn('name', onTable: 'Team'),
DropColumn('leader_id', onTable: 'Team'),
DropColumn('office_ids', onTable: 'Team'),
DropColumn('created_at', onTable: 'Team'),
DropColumn('color', onTable: 'Team'),
DropColumn('id', onTable: 'Ticket'),
DropColumn('subject', onTable: 'Ticket'),
DropColumn('description', onTable: 'Ticket'),
DropColumn('office_id', onTable: 'Ticket'),
DropColumn('status', onTable: 'Ticket'),
DropColumn('created_at', onTable: 'Ticket'),
DropColumn('creator_id', onTable: 'Ticket'),
DropColumn('responded_at', onTable: 'Ticket'),
DropColumn('promoted_at', onTable: 'Ticket'),
DropColumn('closed_at', onTable: 'Ticket'),
DropColumn('hash_code', onTable: 'Ticket')
];
//
// DO NOT EDIT BELOW THIS LINE
//
@Migratable(
version: '20260411041808',
up: _migration_20260411041808_up,
down: _migration_20260411041808_down,
)
class Migration20260411041808 extends Migration {
const Migration20260411041808()
: super(
version: 20260411041808,
up: _migration_20260411041808_up,
down: _migration_20260411041808_down,
);
}
@@ -0,0 +1,50 @@
// GENERATED CODE EDIT WITH CAUTION
// THIS FILE **WILL NOT** BE REGENERATED
// This file should be version controlled and can be manually edited.
part of 'schema.g.dart';
// While migrations are intelligently created, the difference between some commands, such as
// DropTable vs. RenameTable, cannot be determined. For this reason, please review migrations after
// they are created to ensure the correct inference was made.
// The migration version must **always** mirror the file name
const List<MigrationCommand> _migration_20260411042152_up = [
DropColumn('is_banner_active', onTable: 'Announcement'),
DropColumn('hash_code', onTable: 'Announcement'),
DropColumn('hash_code', onTable: 'AnnouncementComment'),
DropColumn('is_checked_out', onTable: 'AttendanceLog'),
DropColumn('is_verified', onTable: 'AttendanceLog'),
DropColumn('is_unverified', onTable: 'AttendanceLog'),
DropColumn('hash_code', onTable: 'ItServiceRequest'),
DropColumn('leave_type_label', onTable: 'LeaveOfAbsence'),
DropColumn('is_unread', onTable: 'NotificationItem'),
DropColumn('is_active', onTable: 'PassSlip'),
DropColumn('is_exceeded', onTable: 'PassSlip'),
DropColumn('has_face_enrolled', onTable: 'Profile'),
DropColumn('hash_code', onTable: 'Task'),
DropColumn('has_incomplete_details', onTable: 'Task'),
DropColumn('hash_code', onTable: 'Ticket')
];
const List<MigrationCommand> _migration_20260411042152_down = [
];
//
// DO NOT EDIT BELOW THIS LINE
//
@Migratable(
version: '20260411042152',
up: _migration_20260411042152_up,
down: _migration_20260411042152_down,
)
class Migration20260411042152 extends Migration {
const Migration20260411042152()
: super(
version: 20260411042152,
up: _migration_20260411042152_up,
down: _migration_20260411042152_down,
);
}
+478
View File
@@ -0,0 +1,478 @@
// GENERATED CODE DO NOT EDIT
// This file should be version controlled
import 'package:brick_sqlite/db.dart';
part '20260411041808.migration.dart';
part '20260411042152.migration.dart';
/// All intelligently-generated migrations from all `@Migratable` classes on disk
final migrations = <Migration>{
const Migration20260411041808(),
const Migration20260411042152(),
};
/// A consumable database structure including the latest generated migration.
final schema = Schema(
20260411042152,
generatorVersion: 1,
tables: <SchemaTable>{
SchemaTable(
'Announcement',
columns: <SchemaColumn>{
SchemaColumn(
'_brick_id',
Column.integer,
autoincrement: true,
nullable: false,
isPrimaryKey: true,
),
SchemaColumn('id', Column.varchar),
SchemaColumn('author_id', Column.varchar),
SchemaColumn('title', Column.varchar),
SchemaColumn('body', Column.varchar),
SchemaColumn('visible_roles', Column.varchar),
SchemaColumn('is_template', Column.boolean),
SchemaColumn('template_id', Column.varchar),
SchemaColumn('created_at', Column.datetime),
SchemaColumn('updated_at', Column.datetime),
SchemaColumn('banner_enabled', Column.boolean),
SchemaColumn('banner_show_at', Column.datetime),
SchemaColumn('banner_hide_at', Column.datetime),
SchemaColumn('push_interval_minutes', Column.integer),
},
indices: <SchemaIndex>{},
),
SchemaTable(
'AnnouncementComment',
columns: <SchemaColumn>{
SchemaColumn(
'_brick_id',
Column.integer,
autoincrement: true,
nullable: false,
isPrimaryKey: true,
),
SchemaColumn('id', Column.varchar),
SchemaColumn('announcement_id', Column.varchar),
SchemaColumn('author_id', Column.varchar),
SchemaColumn('body', Column.varchar),
SchemaColumn('created_at', Column.datetime),
},
indices: <SchemaIndex>{},
),
SchemaTable(
'AttendanceLog',
columns: <SchemaColumn>{
SchemaColumn(
'_brick_id',
Column.integer,
autoincrement: true,
nullable: false,
isPrimaryKey: true,
),
SchemaColumn('id', Column.varchar),
SchemaColumn('user_id', Column.varchar),
SchemaColumn('duty_schedule_id', Column.varchar),
SchemaColumn('shift_type', Column.varchar),
SchemaColumn('check_in_at', Column.datetime),
SchemaColumn('check_in_lat', Column.Double),
SchemaColumn('check_in_lng', Column.Double),
SchemaColumn('check_out_at', Column.datetime),
SchemaColumn('check_out_lat', Column.Double),
SchemaColumn('check_out_lng', Column.Double),
SchemaColumn('justification', Column.varchar),
SchemaColumn('check_out_justification', Column.varchar),
SchemaColumn('verification_status', Column.varchar),
SchemaColumn('check_in_verification_photo_url', Column.varchar),
SchemaColumn('check_out_verification_photo_url', Column.varchar),
},
indices: <SchemaIndex>{},
),
SchemaTable(
'ChatMessage',
columns: <SchemaColumn>{
SchemaColumn(
'_brick_id',
Column.integer,
autoincrement: true,
nullable: false,
isPrimaryKey: true,
),
SchemaColumn('id', Column.varchar),
SchemaColumn('thread_id', Column.varchar),
SchemaColumn('sender_id', Column.varchar),
SchemaColumn('body', Column.varchar),
SchemaColumn('created_at', Column.datetime),
},
indices: <SchemaIndex>{},
),
SchemaTable(
'DutySchedule',
columns: <SchemaColumn>{
SchemaColumn(
'_brick_id',
Column.integer,
autoincrement: true,
nullable: false,
isPrimaryKey: true,
),
SchemaColumn('id', Column.varchar),
SchemaColumn('user_id', Column.varchar),
SchemaColumn('shift_type', Column.varchar),
SchemaColumn('start_time', Column.datetime),
SchemaColumn('end_time', Column.datetime),
SchemaColumn('status', Column.varchar),
SchemaColumn('created_at', Column.datetime),
SchemaColumn('check_in_at', Column.datetime),
SchemaColumn('reliever_ids', Column.varchar),
SchemaColumn('swap_request_id', Column.varchar),
},
indices: <SchemaIndex>{},
),
SchemaTable(
'ItServiceRequest',
columns: <SchemaColumn>{
SchemaColumn(
'_brick_id',
Column.integer,
autoincrement: true,
nullable: false,
isPrimaryKey: true,
),
SchemaColumn('id', Column.varchar),
SchemaColumn('request_number', Column.varchar),
SchemaColumn('services', Column.varchar),
SchemaColumn('services_other', Column.varchar),
SchemaColumn('event_name', Column.varchar),
SchemaColumn('event_details', Column.varchar),
SchemaColumn('event_date', Column.datetime),
SchemaColumn('event_end_date', Column.datetime),
SchemaColumn('dry_run_date', Column.datetime),
SchemaColumn('dry_run_end_date', Column.datetime),
SchemaColumn('contact_person', Column.varchar),
SchemaColumn('contact_number', Column.varchar),
SchemaColumn('remarks', Column.varchar),
SchemaColumn('office_id', Column.varchar),
SchemaColumn('requested_by', Column.varchar),
SchemaColumn('requested_by_user_id', Column.varchar),
SchemaColumn('approved_by', Column.varchar),
SchemaColumn('approved_by_user_id', Column.varchar),
SchemaColumn('approved_at', Column.datetime),
SchemaColumn('status', Column.varchar),
SchemaColumn('outside_premise_allowed', Column.boolean),
SchemaColumn('cancellation_reason', Column.varchar),
SchemaColumn('cancelled_at', Column.datetime),
SchemaColumn('creator_id', Column.varchar),
SchemaColumn('created_at', Column.datetime),
SchemaColumn('updated_at', Column.datetime),
SchemaColumn('completed_at', Column.datetime),
SchemaColumn('date_time_received', Column.datetime),
SchemaColumn('date_time_checked', Column.datetime),
},
indices: <SchemaIndex>{},
),
SchemaTable(
'ItServiceRequestAction',
columns: <SchemaColumn>{
SchemaColumn(
'_brick_id',
Column.integer,
autoincrement: true,
nullable: false,
isPrimaryKey: true,
),
SchemaColumn('id', Column.varchar),
SchemaColumn('request_id', Column.varchar),
SchemaColumn('user_id', Column.varchar),
SchemaColumn('action_taken', Column.varchar),
SchemaColumn('created_at', Column.datetime),
SchemaColumn('updated_at', Column.datetime),
},
indices: <SchemaIndex>{},
),
SchemaTable(
'ItServiceRequestActivityLog',
columns: <SchemaColumn>{
SchemaColumn(
'_brick_id',
Column.integer,
autoincrement: true,
nullable: false,
isPrimaryKey: true,
),
SchemaColumn('id', Column.varchar),
SchemaColumn('request_id', Column.varchar),
SchemaColumn('actor_id', Column.varchar),
SchemaColumn('action_type', Column.varchar),
SchemaColumn('meta', Column.varchar),
SchemaColumn('created_at', Column.datetime),
},
indices: <SchemaIndex>{},
),
SchemaTable(
'ItServiceRequestAssignment',
columns: <SchemaColumn>{
SchemaColumn(
'_brick_id',
Column.integer,
autoincrement: true,
nullable: false,
isPrimaryKey: true,
),
SchemaColumn('id', Column.varchar),
SchemaColumn('request_id', Column.varchar),
SchemaColumn('user_id', Column.varchar),
SchemaColumn('created_at', Column.datetime),
},
indices: <SchemaIndex>{},
),
SchemaTable(
'LeaveOfAbsence',
columns: <SchemaColumn>{
SchemaColumn(
'_brick_id',
Column.integer,
autoincrement: true,
nullable: false,
isPrimaryKey: true,
),
SchemaColumn('id', Column.varchar),
SchemaColumn('user_id', Column.varchar),
SchemaColumn('leave_type', Column.varchar),
SchemaColumn('justification', Column.varchar),
SchemaColumn('start_time', Column.datetime),
SchemaColumn('end_time', Column.datetime),
SchemaColumn('status', Column.varchar),
SchemaColumn('filed_by', Column.varchar),
SchemaColumn('created_at', Column.datetime),
},
indices: <SchemaIndex>{},
),
SchemaTable(
'NotificationItem',
columns: <SchemaColumn>{
SchemaColumn(
'_brick_id',
Column.integer,
autoincrement: true,
nullable: false,
isPrimaryKey: true,
),
SchemaColumn('id', Column.varchar),
SchemaColumn('user_id', Column.varchar),
SchemaColumn('actor_id', Column.varchar),
SchemaColumn('ticket_id', Column.varchar),
SchemaColumn('task_id', Column.varchar),
SchemaColumn('leave_id', Column.varchar),
SchemaColumn('pass_slip_id', Column.varchar),
SchemaColumn('it_service_request_id', Column.varchar),
SchemaColumn('announcement_id', Column.varchar),
SchemaColumn('message_id', Column.integer),
SchemaColumn('type', Column.varchar),
SchemaColumn('created_at', Column.datetime),
SchemaColumn('read_at', Column.datetime),
},
indices: <SchemaIndex>{},
),
SchemaTable(
'Office',
columns: <SchemaColumn>{
SchemaColumn(
'_brick_id',
Column.integer,
autoincrement: true,
nullable: false,
isPrimaryKey: true,
),
SchemaColumn('id', Column.varchar),
SchemaColumn('name', Column.varchar),
SchemaColumn('service_id', Column.varchar),
},
indices: <SchemaIndex>{},
),
SchemaTable(
'PassSlip',
columns: <SchemaColumn>{
SchemaColumn(
'_brick_id',
Column.integer,
autoincrement: true,
nullable: false,
isPrimaryKey: true,
),
SchemaColumn('id', Column.varchar),
SchemaColumn('user_id', Column.varchar),
SchemaColumn('duty_schedule_id', Column.varchar),
SchemaColumn('reason', Column.varchar),
SchemaColumn('status', Column.varchar),
SchemaColumn('requested_at', Column.datetime),
SchemaColumn('approved_by', Column.varchar),
SchemaColumn('approved_at', Column.datetime),
SchemaColumn('slip_start', Column.datetime),
SchemaColumn('slip_end', Column.datetime),
SchemaColumn('requested_start', Column.datetime),
},
indices: <SchemaIndex>{},
),
SchemaTable(
'Profile',
columns: <SchemaColumn>{
SchemaColumn(
'_brick_id',
Column.integer,
autoincrement: true,
nullable: false,
isPrimaryKey: true,
),
SchemaColumn('id', Column.varchar),
SchemaColumn('role', Column.varchar),
SchemaColumn('full_name', Column.varchar),
SchemaColumn('religion', Column.varchar),
SchemaColumn('allow_tracking', Column.boolean),
SchemaColumn('avatar_url', Column.varchar),
SchemaColumn('face_photo_url', Column.varchar),
SchemaColumn('face_enrolled_at', Column.datetime),
},
indices: <SchemaIndex>{},
),
SchemaTable(
'Service',
columns: <SchemaColumn>{
SchemaColumn(
'_brick_id',
Column.integer,
autoincrement: true,
nullable: false,
isPrimaryKey: true,
),
SchemaColumn('id', Column.varchar),
SchemaColumn('name', Column.varchar),
},
indices: <SchemaIndex>{},
),
SchemaTable(
'SwapRequest',
columns: <SchemaColumn>{
SchemaColumn(
'_brick_id',
Column.integer,
autoincrement: true,
nullable: false,
isPrimaryKey: true,
),
SchemaColumn('id', Column.varchar),
SchemaColumn('requester_id', Column.varchar),
SchemaColumn('recipient_id', Column.varchar),
SchemaColumn('requester_schedule_id', Column.varchar),
SchemaColumn('target_schedule_id', Column.varchar),
SchemaColumn('status', Column.varchar),
SchemaColumn('created_at', Column.datetime),
SchemaColumn('updated_at', Column.datetime),
SchemaColumn('chat_thread_id', Column.varchar),
SchemaColumn('shift_type', Column.varchar),
SchemaColumn('shift_start_time', Column.datetime),
SchemaColumn('reliever_ids', Column.varchar),
SchemaColumn('approved_by', Column.varchar),
},
indices: <SchemaIndex>{},
),
SchemaTable(
'Task',
columns: <SchemaColumn>{
SchemaColumn(
'_brick_id',
Column.integer,
autoincrement: true,
nullable: false,
isPrimaryKey: true,
),
SchemaColumn('id', Column.varchar),
SchemaColumn('ticket_id', Column.varchar),
SchemaColumn('task_number', Column.varchar),
SchemaColumn('title', Column.varchar),
SchemaColumn('description', Column.varchar),
SchemaColumn('office_id', Column.varchar),
SchemaColumn('status', Column.varchar),
SchemaColumn('priority', Column.integer),
SchemaColumn('queue_order', Column.integer),
SchemaColumn('created_at', Column.datetime),
SchemaColumn('creator_id', Column.varchar),
SchemaColumn('started_at', Column.datetime),
SchemaColumn('completed_at', Column.datetime),
SchemaColumn('requested_by', Column.varchar),
SchemaColumn('noted_by', Column.varchar),
SchemaColumn('received_by', Column.varchar),
SchemaColumn('request_type', Column.varchar),
SchemaColumn('request_type_other', Column.varchar),
SchemaColumn('request_category', Column.varchar),
SchemaColumn('action_taken', Column.varchar),
SchemaColumn('cancellation_reason', Column.varchar),
SchemaColumn('cancelled_at', Column.datetime),
SchemaColumn('it_job_printed', Column.boolean),
SchemaColumn('it_job_printed_at', Column.datetime),
SchemaColumn('it_job_received_by_id', Column.varchar),
},
indices: <SchemaIndex>{},
),
SchemaTable(
'TaskActivityLog',
columns: <SchemaColumn>{
SchemaColumn(
'_brick_id',
Column.integer,
autoincrement: true,
nullable: false,
isPrimaryKey: true,
),
SchemaColumn('id', Column.varchar),
SchemaColumn('task_id', Column.varchar),
SchemaColumn('actor_id', Column.varchar),
SchemaColumn('action_type', Column.varchar),
SchemaColumn('meta', Column.varchar),
SchemaColumn('created_at', Column.datetime),
},
indices: <SchemaIndex>{},
),
SchemaTable(
'Team',
columns: <SchemaColumn>{
SchemaColumn(
'_brick_id',
Column.integer,
autoincrement: true,
nullable: false,
isPrimaryKey: true,
),
SchemaColumn('id', Column.varchar),
SchemaColumn('name', Column.varchar),
SchemaColumn('leader_id', Column.varchar),
SchemaColumn('office_ids', Column.varchar),
SchemaColumn('created_at', Column.datetime),
SchemaColumn('color', Column.varchar),
},
indices: <SchemaIndex>{},
),
SchemaTable(
'Ticket',
columns: <SchemaColumn>{
SchemaColumn(
'_brick_id',
Column.integer,
autoincrement: true,
nullable: false,
isPrimaryKey: true,
),
SchemaColumn('id', Column.varchar),
SchemaColumn('subject', Column.varchar),
SchemaColumn('description', Column.varchar),
SchemaColumn('office_id', Column.varchar),
SchemaColumn('status', Column.varchar),
SchemaColumn('created_at', Column.datetime),
SchemaColumn('creator_id', Column.varchar),
SchemaColumn('responded_at', Column.datetime),
SchemaColumn('promoted_at', Column.datetime),
SchemaColumn('closed_at', Column.datetime),
},
indices: <SchemaIndex>{},
),
},
);
+160
View File
@@ -0,0 +1,160 @@
import 'package:brick_offline_first_with_supabase/brick_offline_first_with_supabase.dart';
import 'package:brick_offline_first_with_rest/offline_queue.dart';
import 'package:brick_sqlite/brick_sqlite.dart';
import 'package:brick_sqlite/memory_cache_provider.dart';
// Hide the brick_supabase @Supabase annotation to avoid conflict with
// supabase_flutter's Supabase singleton class.
import 'package:brick_supabase/brick_supabase.dart' hide Supabase;
import 'package:flutter/foundation.dart' show kIsWeb, debugPrint;
import 'package:http/http.dart' as http;
import 'package:sqflite/sqflite.dart' show databaseFactory;
import 'package:supabase_flutter/supabase_flutter.dart';
// Generated by `flutter pub run build_runner build`.
// Run: flutter pub run build_runner build --delete-conflicting-outputs
// ignore: uri_does_not_exist
import 'brick.g.dart';
// migrations + schema are generated into db/schema.g.dart
// ignore: uri_does_not_exist
import 'db/schema.g.dart';
export 'package:brick_offline_first_with_supabase/brick_offline_first_with_supabase.dart'
show OfflineFirstWithSupabaseModel;
export 'package:brick_supabase/brick_supabase.dart'
show SupabaseSerializable;
export 'package:brick_offline_first_with_supabase/brick_offline_first_with_supabase.dart'
show ConnectOfflineFirstWithSupabase;
export 'package:brick_sqlite/brick_sqlite.dart' show SqliteSerializable;
export 'package:brick_offline_first/brick_offline_first.dart'
show OfflineFirstGetPolicy;
/// Singleton offline-first repository backed by Supabase + local SQLite.
///
/// Initialization sequence in [main]:
/// ```dart
/// // 1. Get the Brick HTTP client (mobile only; null on web)
/// final httpClient = AppRepository.createHttpClient();
///
/// // 2. Initialize Supabase WITH the Brick HTTP client so all REST
/// // writes are intercepted and queued when offline.
/// await Supabase.initialize(url: ..., anonKey: ..., httpClient: httpClient);
///
/// // 3. Configure the repository (reads model dictionary from brick.g.dart)
/// await AppRepository.configure();
/// ```
class AppRepository extends OfflineFirstWithSupabaseRepository {
static AppRepository? _instance;
static RestOfflineRequestQueue? _pendingQueue;
/// The singleton. Throws if [configure] was not called first.
static AppRepository get instance {
assert(_instance != null, 'Call AppRepository.configure() first');
return _instance!;
}
/// True when this platform supports offline SQLite storage (i.e. not web).
static bool get isOfflineSupported => !kIsWeb;
/// True after [configure] has completed successfully.
static bool get isConfigured => _instance != null;
/// The Brick HTTP offline queue. `null` before [configure] or on web.
///
/// Call [RestOfflineRequestQueue.stop] when offline to silence retry logs
/// and avoid hammering a network that is known to be unavailable.
/// Call [RestOfflineRequestQueue.start] when back online to replay queued
/// writes. The stored requests are preserved in both states.
static RestOfflineRequestQueue? get offlineQueue =>
_instance?.offlineRequestQueue;
AppRepository._({
required super.supabaseProvider,
required super.sqliteProvider,
required super.migrations,
required super.offlineRequestQueue,
super.memoryCacheProvider,
});
/// Creates and returns the Brick-managed HTTP client to pass to
/// [Supabase.initialize]. Returns `null` on web (SQLite unavailable).
///
/// Must be called *before* [Supabase.initialize] and *before* [configure].
static http.Client? createHttpClient() {
if (kIsWeb) return null;
final (client, queue) = OfflineFirstWithSupabaseRepository.clientQueue(
databaseFactory: databaseFactory,
// Only retry on truly transient server errors.
// 400/409 indicate a permanent failure (bad payload or conflict) and
// should NOT be retried — they will never self-heal and cause infinite
// retry loops that spam the logs.
reattemptForStatusCodes: const [408, 429, 500, 502, 503, 504],
);
_pendingQueue = queue;
return client;
}
/// Configures the repository singleton.
///
/// Must be called *after* [Supabase.initialize]. Reads the Brick-generated
/// model dictionaries from `brick.g.dart` (created by build_runner).
static Future<void> configure() async {
if (_instance != null) return;
if (kIsWeb) {
debugPrint('[AppRepository] web — offline queue disabled');
return;
}
final queue = _pendingQueue;
if (queue == null) {
throw StateError(
'Call AppRepository.createHttpClient() before configure()',
);
}
_instance = AppRepository._(
supabaseProvider: SupabaseProvider(
Supabase.instance.client,
modelDictionary: supabaseModelDictionary,
),
sqliteProvider: SqliteProvider(
'tasq_offline.sqlite',
databaseFactory: databaseFactory,
modelDictionary: sqliteModelDictionary,
),
migrations: migrations,
offlineRequestQueue: queue,
memoryCacheProvider: MemoryCacheProvider(),
);
await _instance!.initialize();
_pendingQueue = null;
debugPrint('[AppRepository] initialized — offline queue active');
}
}
/// Mirrors a Supabase realtime stream into the Brick local SQLite cache.
///
/// Wrap any `client.from('t').stream(...)` source so every emission is
/// upserted into Brick. The cache stays fresh during normal online use, which
/// means a cold launch with no network can read a recent snapshot via
/// `OfflineFirstGetPolicy.localOnly` instead of rendering an empty list.
///
/// Cache writes are fire-and-forget — they never block UI updates and any
/// upsert error is silently logged (mirroring is best-effort).
extension AppRepositoryStreamMirror on AppRepository {
Stream<List<T>> mirroredStream<T extends OfflineFirstWithSupabaseModel>(
Stream<List<T>> source,
) async* {
await for (final batch in source) {
for (final item in batch) {
// Fire-and-forget; never block the UI on cache writes.
// ignore: discarded_futures
upsert<T>(item).catchError((Object e) {
debugPrint('[AppRepository] mirror upsert<$T> failed: $e');
return item;
});
}
yield batch;
}
}
}