import 'package:brick_offline_first_with_supabase/brick_offline_first_with_supabase.dart'; import 'package:brick_supabase/brick_supabase.dart'; import '../utils/app_time.dart'; @ConnectOfflineFirstWithSupabase( supabaseConfig: SupabaseSerializable(tableName: 'swap_requests'), ) class SwapRequest extends OfflineFirstWithSupabaseModel { final String id; final String requesterId; final String recipientId; final String requesterScheduleId; // DB column is 'target_shift_id' (legacy name differs from Dart field). @Supabase(name: 'target_shift_id') final String? targetScheduleId; final String status; final DateTime createdAt; final DateTime? updatedAt; final String? chatThreadId; final String? shiftType; final DateTime? shiftStartTime; final List? relieverIds; final String? approvedBy; SwapRequest({ required this.id, required this.requesterId, required this.recipientId, required this.requesterScheduleId, required this.targetScheduleId, required this.status, required this.createdAt, required this.updatedAt, this.chatThreadId, this.shiftType, this.shiftStartTime, this.relieverIds, this.approvedBy, }); factory SwapRequest.fromMap(Map map) { return SwapRequest( id: map['id'] as String, requesterId: map['requester_id'] as String, recipientId: map['recipient_id'] as String, requesterScheduleId: (map['requester_schedule_id'] as String?) ?? (map['shift_id'] as String), targetScheduleId: map['target_shift_id'] as String?, status: map['status'] as String? ?? 'pending', createdAt: AppTime.parse(map['created_at'] as String), updatedAt: map['updated_at'] == null ? null : AppTime.parse(map['updated_at'] as String), chatThreadId: map['chat_thread_id'] as String?, shiftType: map['shift_type'] as String?, shiftStartTime: map['shift_start_time'] == null ? null : AppTime.parse(map['shift_start_time'] as String), relieverIds: map['reliever_ids'] is List ? (map['reliever_ids'] as List) .where((e) => e != null) .map((e) => e.toString()) .toList() : const [], approvedBy: map['approved_by'] as String?, ); } }