import '../../../../core/utils/date_utils.dart'; import '../error/error_model.dart'; class BoardResponse { BoardResponse({ required this.success, required this.message, required this.data, required this.error, }); final bool? success; final String? message; final BoardDetailData? data; final ErrorModel? error; factory BoardResponse.fromJson(Map json) { final dataJson = json['data']; final errorJson = json['error']; return BoardResponse( success: json['success'] as bool?, message: json['message'] as String?, data: dataJson is Map ? BoardDetailData.fromJson(dataJson) : null, error: errorJson is Map ? ErrorModel.fromJson(errorJson) : null, ); } } class BoardDetailData { BoardDetailData({required this.board}); final Board? board; factory BoardDetailData.fromJson(Map json) { final boardJson = json['board']; return BoardDetailData( board: boardJson is Map ? Board.fromJson(boardJson) : null, ); } } class Board { Board({ required this.id, required this.name, required this.description, required this.columns, required this.isDefault, required this.userId, required this.createdAt, required this.updatedAt, }); final String? id; final String? name; final String? description; final List columns; final bool? isDefault; final String? userId; final int? createdAt; final int? updatedAt; factory Board.fromJson(Map json) { final columnsJson = json['columns']; return Board( id: json['id'] as String?, name: json['name'] as String?, description: json['description'] as String?, columns: columnsJson is List ? columnsJson .whereType>() .map(BoardColumn.fromJson) .toList() : [], isDefault: json['is_default'] as bool?, userId: json['user_id'] as String?, createdAt: unixTimestampFromJson(json['created_at']), updatedAt: unixTimestampFromJson(json['updated_at']), ); } Board copyWith({List? columns}) { return Board( id: id, name: name, description: description, columns: columns ?? this.columns, isDefault: isDefault, userId: userId, createdAt: createdAt, updatedAt: updatedAt, ); } } class BoardColumn { BoardColumn({ required this.id, required this.boardId, required this.name, required this.order, required this.color, required this.limit, required this.cards, required this.cardCount, required this.isOverLimit, required this.createdAt, required this.updatedAt, }); final String? id; final String? boardId; final String? name; final int? order; final String? color; final int? limit; final List cards; final int? cardCount; final bool? isOverLimit; final int? createdAt; final int? updatedAt; factory BoardColumn.fromJson(Map json) { final cardsJson = json['cards']; return BoardColumn( id: json['id'] as String?, boardId: json['board_id'] as String?, name: json['name'] as String?, order: (json['order'] as num?)?.toInt(), color: json['color'] as String?, limit: (json['limit'] as num?)?.toInt(), cards: cardsJson is List ? cardsJson .whereType>() .map(BoardCard.fromJson) .toList() : [], cardCount: (json['card_count'] as num?)?.toInt(), isOverLimit: json['is_over_limit'] as bool?, createdAt: unixTimestampFromJson(json['created_at']), updatedAt: unixTimestampFromJson(json['updated_at']), ); } BoardColumn copyWith({List? cards, int? cardCount}) { return BoardColumn( id: id, boardId: boardId, name: name, order: order, color: color, limit: limit, cards: cards ?? this.cards, cardCount: cardCount ?? this.cardCount, isOverLimit: isOverLimit, createdAt: createdAt, updatedAt: updatedAt, ); } } class BoardCard { BoardCard({ required this.id, required this.columnId, required this.tenderId, required this.title, required this.order, required this.priority, required this.labels, required this.dueDate, required this.createdAt, required this.updatedAt, }); final String? id; final String? columnId; final String? tenderId; final String? title; final int? order; final String? priority; final List labels; final int? dueDate; final int? createdAt; final int? updatedAt; factory BoardCard.fromJson(Map json) { final labelsJson = json['labels']; return BoardCard( id: json['id'] as String?, columnId: json['column_id'] as String?, tenderId: json['tender_id'] as String?, title: json['title'] as String?, order: (json['order'] as num?)?.toInt(), priority: json['priority'] as String?, labels: labelsJson is List ? labelsJson.whereType().toList() : [], dueDate: unixTimestampFromJson(json['due_date']), createdAt: unixTimestampFromJson(json['created_at']), updatedAt: unixTimestampFromJson(json['updated_at']), ); } BoardCard copyWith({String? columnId, int? order}) { return BoardCard( id: id, columnId: columnId ?? this.columnId, tenderId: tenderId, title: title, order: order ?? this.order, priority: priority, labels: labels, dueDate: dueDate, createdAt: createdAt, updatedAt: updatedAt, ); } }