b307f66f2c
Projects: Brick-backed model with list/detail screens and nav entry. Work Logs: per-contributor time ledger, assignee running-clock + helper logged minutes with Hours/Minutes input; pause-after-save and helper-deduct prompts. Comments: threaded comments with file attachments and Quill composer. Detail screen: tabbed layout (Work Log / Comments / Activity), editable title + description via edit dialog, Quill-rendered descriptions with legacy plain-text fallback. Create dialog: fixed-width (480px max), Quill description editor. Shared QuillFieldEditor + QuillReadOnly widgets extracted for reuse. RLS: hardened activity-log actor binding, immutable creator_id/ created_at triggers, SECURITY INVOKER visibility helper, append-only work-log and scoped comment policies. Brick migration for project_id FK on programmer_tasks. Co-Authored-By: claude-flow <ruv@ruv.net>
232 lines
6.5 KiB
Dart
232 lines
6.5 KiB
Dart
// GENERATED CODE DO NOT EDIT
|
|
part of '../brick.g.dart';
|
|
|
|
Future<ProgrammerProject> _$ProgrammerProjectFromSupabase(
|
|
Map<String, dynamic> data, {
|
|
required SupabaseProvider provider,
|
|
OfflineFirstWithSupabaseRepository? repository,
|
|
}) async {
|
|
return ProgrammerProject(
|
|
id: data['id'] as String,
|
|
name: data['name'] as String,
|
|
description: data['description'] == null
|
|
? null
|
|
: data['description'] as String?,
|
|
status: data['status'] 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),
|
|
);
|
|
}
|
|
|
|
Future<Map<String, dynamic>> _$ProgrammerProjectToSupabase(
|
|
ProgrammerProject instance, {
|
|
required SupabaseProvider provider,
|
|
OfflineFirstWithSupabaseRepository? repository,
|
|
}) async {
|
|
return {
|
|
'id': instance.id,
|
|
'name': instance.name,
|
|
'description': instance.description,
|
|
'status': instance.status,
|
|
'creator_id': instance.creatorId,
|
|
'created_at': instance.createdAt.toIso8601String(),
|
|
'updated_at': instance.updatedAt.toIso8601String(),
|
|
'is_archived': instance.isArchived,
|
|
};
|
|
}
|
|
|
|
Future<ProgrammerProject> _$ProgrammerProjectFromSqlite(
|
|
Map<String, dynamic> data, {
|
|
required SqliteProvider provider,
|
|
OfflineFirstWithSupabaseRepository? repository,
|
|
}) async {
|
|
return ProgrammerProject(
|
|
id: data['id'] as String,
|
|
name: data['name'] as String,
|
|
description: data['description'] == null
|
|
? null
|
|
: data['description'] as String?,
|
|
status: data['status'] 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),
|
|
)..primaryKey = data['_brick_id'] as int;
|
|
}
|
|
|
|
Future<Map<String, dynamic>> _$ProgrammerProjectToSqlite(
|
|
ProgrammerProject instance, {
|
|
required SqliteProvider provider,
|
|
OfflineFirstWithSupabaseRepository? repository,
|
|
}) async {
|
|
return {
|
|
'id': instance.id,
|
|
'name': instance.name,
|
|
'description': instance.description,
|
|
'status': instance.status,
|
|
'creator_id': instance.creatorId,
|
|
'created_at': instance.createdAt.toIso8601String(),
|
|
'updated_at': instance.updatedAt.toIso8601String(),
|
|
'is_archived': instance.isArchived ? 1 : 0,
|
|
};
|
|
}
|
|
|
|
/// Construct a [ProgrammerProject]
|
|
class ProgrammerProjectAdapter
|
|
extends OfflineFirstWithSupabaseAdapter<ProgrammerProject> {
|
|
ProgrammerProjectAdapter();
|
|
|
|
@override
|
|
final supabaseTableName = 'programmer_projects';
|
|
@override
|
|
final defaultToNull = true;
|
|
@override
|
|
final fieldsToSupabaseColumns = {
|
|
'id': const RuntimeSupabaseColumnDefinition(
|
|
association: false,
|
|
columnName: 'id',
|
|
),
|
|
'name': const RuntimeSupabaseColumnDefinition(
|
|
association: false,
|
|
columnName: 'name',
|
|
),
|
|
'description': const RuntimeSupabaseColumnDefinition(
|
|
association: false,
|
|
columnName: 'description',
|
|
),
|
|
'status': const RuntimeSupabaseColumnDefinition(
|
|
association: false,
|
|
columnName: 'status',
|
|
),
|
|
'creatorId': const RuntimeSupabaseColumnDefinition(
|
|
association: false,
|
|
columnName: 'creator_id',
|
|
),
|
|
'createdAt': const RuntimeSupabaseColumnDefinition(
|
|
association: false,
|
|
columnName: 'created_at',
|
|
),
|
|
'updatedAt': const RuntimeSupabaseColumnDefinition(
|
|
association: false,
|
|
columnName: 'updated_at',
|
|
),
|
|
'isArchived': const RuntimeSupabaseColumnDefinition(
|
|
association: false,
|
|
columnName: 'is_archived',
|
|
),
|
|
};
|
|
@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,
|
|
),
|
|
'description': const RuntimeSqliteColumnDefinition(
|
|
association: false,
|
|
columnName: 'description',
|
|
iterable: false,
|
|
type: String,
|
|
),
|
|
'status': const RuntimeSqliteColumnDefinition(
|
|
association: false,
|
|
columnName: 'status',
|
|
iterable: false,
|
|
type: String,
|
|
),
|
|
'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,
|
|
),
|
|
'isArchived': const RuntimeSqliteColumnDefinition(
|
|
association: false,
|
|
columnName: 'is_archived',
|
|
iterable: false,
|
|
type: bool,
|
|
),
|
|
};
|
|
@override
|
|
Future<int?> primaryKeyByUniqueColumns(
|
|
ProgrammerProject instance,
|
|
DatabaseExecutor executor,
|
|
) async => instance.primaryKey;
|
|
@override
|
|
final String tableName = 'ProgrammerProject';
|
|
|
|
@override
|
|
Future<ProgrammerProject> fromSupabase(
|
|
Map<String, dynamic> input, {
|
|
required provider,
|
|
covariant OfflineFirstWithSupabaseRepository? repository,
|
|
}) async => await _$ProgrammerProjectFromSupabase(
|
|
input,
|
|
provider: provider,
|
|
repository: repository,
|
|
);
|
|
@override
|
|
Future<Map<String, dynamic>> toSupabase(
|
|
ProgrammerProject input, {
|
|
required provider,
|
|
covariant OfflineFirstWithSupabaseRepository? repository,
|
|
}) async => await _$ProgrammerProjectToSupabase(
|
|
input,
|
|
provider: provider,
|
|
repository: repository,
|
|
);
|
|
@override
|
|
Future<ProgrammerProject> fromSqlite(
|
|
Map<String, dynamic> input, {
|
|
required provider,
|
|
covariant OfflineFirstWithSupabaseRepository? repository,
|
|
}) async => await _$ProgrammerProjectFromSqlite(
|
|
input,
|
|
provider: provider,
|
|
repository: repository,
|
|
);
|
|
@override
|
|
Future<Map<String, dynamic>> toSqlite(
|
|
ProgrammerProject input, {
|
|
required provider,
|
|
covariant OfflineFirstWithSupabaseRepository? repository,
|
|
}) async => await _$ProgrammerProjectToSqlite(
|
|
input,
|
|
provider: provider,
|
|
repository: repository,
|
|
);
|
|
}
|