Files
tasq/lib/brick/brick.g.dart
T
redz1029 627645056b 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>
2026-09-27 01:13:33 +08:00

123 lines
5.6 KiB
Dart

// 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/programmer_task.model.dart';
import '../models/programmer_task_activity_log.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/programmer_task_adapter.g.dart';
part 'adapters/programmer_task_activity_log_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(),
ProgrammerTask: ProgrammerTaskAdapter(),
ProgrammerTaskActivityLog: ProgrammerTaskActivityLogAdapter(),
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(),
ProgrammerTask: ProgrammerTaskAdapter(),
ProgrammerTaskActivityLog: ProgrammerTaskActivityLogAdapter(),
Service: ServiceAdapter(),
SwapRequest: SwapRequestAdapter(),
Task: TaskAdapter(),
TaskActivityLog: TaskActivityLogAdapter(),
Team: TeamAdapter(),
Ticket: TicketAdapter()
};
final sqliteModelDictionary = SqliteModelDictionary(sqliteMappings);