Add Programmer Tasks module (work-log + time tracking)
Separate feature for the `programmer` role to record dev work by category, distinct from the IT help-desk `tasks` feature. Modeled on the IT Service Requests pattern (Brick offline-first model -> Riverpod stream/controller -> list/detail screens); seed of a future Project Management workflow. - programmer_tasks + programmer_task_activity_logs (category enum, RLS, realtime) via supabase migration - single assignee, self-logged or lead-assigned; assign/reassign logged - pause-on-switch: starting a task while another runs prompts to pause the running one, keeping one active task per user for accurate time attribution - worked-duration math shared with help-desk tasks via a generic core in task_duration.dart (existing callers unchanged) - list distinguishes running vs paused with a per-task Resume shortcut - accessible dialog labels; route /programmer-tasks + nav gated to admin/programmer - unit/widget tests: controller lifecycle, duration math, pause-switch dialog Co-Authored-By: claude-flow <ruv@ruv.net>
This commit is contained in:
@@ -0,0 +1,80 @@
|
||||
// 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_20260926162926_up = [
|
||||
InsertTable('ProgrammerTask'),
|
||||
InsertTable('ProgrammerTaskActivityLog'),
|
||||
InsertColumn('id', Column.varchar, onTable: 'ProgrammerTask'),
|
||||
InsertColumn('title', Column.varchar, onTable: 'ProgrammerTask'),
|
||||
InsertColumn('description', Column.varchar, onTable: 'ProgrammerTask'),
|
||||
InsertColumn('category', Column.varchar, onTable: 'ProgrammerTask'),
|
||||
InsertColumn('status', Column.varchar, onTable: 'ProgrammerTask'),
|
||||
InsertColumn('priority', Column.integer, onTable: 'ProgrammerTask'),
|
||||
InsertColumn('assignee_id', Column.varchar, onTable: 'ProgrammerTask'),
|
||||
InsertColumn('creator_id', Column.varchar, onTable: 'ProgrammerTask'),
|
||||
InsertColumn('created_at', Column.datetime, onTable: 'ProgrammerTask'),
|
||||
InsertColumn('started_at', Column.datetime, onTable: 'ProgrammerTask'),
|
||||
InsertColumn('completed_at', Column.datetime, onTable: 'ProgrammerTask'),
|
||||
InsertColumn('cancelled_at', Column.datetime, onTable: 'ProgrammerTask'),
|
||||
InsertColumn('cancellation_reason', Column.varchar, onTable: 'ProgrammerTask'),
|
||||
InsertColumn('updated_at', Column.datetime, onTable: 'ProgrammerTask'),
|
||||
InsertColumn('is_terminal', Column.boolean, onTable: 'ProgrammerTask'),
|
||||
InsertColumn('id', Column.varchar, onTable: 'ProgrammerTaskActivityLog'),
|
||||
InsertColumn('task_id', Column.varchar, onTable: 'ProgrammerTaskActivityLog'),
|
||||
InsertColumn('actor_id', Column.varchar, onTable: 'ProgrammerTaskActivityLog'),
|
||||
InsertColumn('action_type', Column.varchar, onTable: 'ProgrammerTaskActivityLog'),
|
||||
InsertColumn('meta', Column.varchar, onTable: 'ProgrammerTaskActivityLog'),
|
||||
InsertColumn('created_at', Column.datetime, onTable: 'ProgrammerTaskActivityLog')
|
||||
];
|
||||
|
||||
const List<MigrationCommand> _migration_20260926162926_down = [
|
||||
DropTable('ProgrammerTask'),
|
||||
DropTable('ProgrammerTaskActivityLog'),
|
||||
DropColumn('id', onTable: 'ProgrammerTask'),
|
||||
DropColumn('title', onTable: 'ProgrammerTask'),
|
||||
DropColumn('description', onTable: 'ProgrammerTask'),
|
||||
DropColumn('category', onTable: 'ProgrammerTask'),
|
||||
DropColumn('status', onTable: 'ProgrammerTask'),
|
||||
DropColumn('priority', onTable: 'ProgrammerTask'),
|
||||
DropColumn('assignee_id', onTable: 'ProgrammerTask'),
|
||||
DropColumn('creator_id', onTable: 'ProgrammerTask'),
|
||||
DropColumn('created_at', onTable: 'ProgrammerTask'),
|
||||
DropColumn('started_at', onTable: 'ProgrammerTask'),
|
||||
DropColumn('completed_at', onTable: 'ProgrammerTask'),
|
||||
DropColumn('cancelled_at', onTable: 'ProgrammerTask'),
|
||||
DropColumn('cancellation_reason', onTable: 'ProgrammerTask'),
|
||||
DropColumn('updated_at', onTable: 'ProgrammerTask'),
|
||||
DropColumn('is_terminal', onTable: 'ProgrammerTask'),
|
||||
DropColumn('id', onTable: 'ProgrammerTaskActivityLog'),
|
||||
DropColumn('task_id', onTable: 'ProgrammerTaskActivityLog'),
|
||||
DropColumn('actor_id', onTable: 'ProgrammerTaskActivityLog'),
|
||||
DropColumn('action_type', onTable: 'ProgrammerTaskActivityLog'),
|
||||
DropColumn('meta', onTable: 'ProgrammerTaskActivityLog'),
|
||||
DropColumn('created_at', onTable: 'ProgrammerTaskActivityLog')
|
||||
];
|
||||
|
||||
//
|
||||
// DO NOT EDIT BELOW THIS LINE
|
||||
//
|
||||
|
||||
@Migratable(
|
||||
version: '20260926162926',
|
||||
up: _migration_20260926162926_up,
|
||||
down: _migration_20260926162926_down,
|
||||
)
|
||||
class Migration20260926162926 extends Migration {
|
||||
const Migration20260926162926()
|
||||
: super(
|
||||
version: 20260926162926,
|
||||
up: _migration_20260926162926_up,
|
||||
down: _migration_20260926162926_down,
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user