updateTask method

  1. @override
Future<Either<Failure, TaskEntity>> updateTask(
  1. TaskDataRequest taskData,
  2. String id
)
override

Implementation

@override
Future<Either<Failure, TaskEntity>> updateTask(
    TaskDataRequest taskData, String id) async {
  try {
    if (await isConnected()) {
      final response = await remoteDataSource.updateTask(taskData, id);
      final tasks = await localDataSource.getTasks();
      final taskIndex = tasks.indexWhere((task) => task.id == id);
      if (taskIndex != -1) {
        tasks[taskIndex] = response;
        await localDataSource.saveTasks(tasks);
      }
      return Right(response.toEntity());
    } else {
      final tasks = await localDataSource.getTasks();
      final taskIndex = tasks.indexWhere((task) => task.id == id);
      final tempTask = TaskModelResponse(
        id: tasks[taskIndex].id,
        projectId: tasks[taskIndex].projectId,
        description: tasks[taskIndex].description,
        creatorId: tasks[taskIndex].creatorId,
        createdAt: tasks[taskIndex].createdAt,
        labels: tasks[taskIndex].labels,
        url: tasks[taskIndex].url,
        commentCount: tasks[taskIndex].commentCount,
        isCompleted: tasks[taskIndex].isCompleted,
        content: taskData.content ?? '',
        order: tasks[taskIndex].order,
        priority: taskData.priority ?? 1,
      );
      tasks[taskIndex] = tempTask;
      await localDataSource.saveTasks(tasks);
      await syncQueue.addOperation(SyncOperation(
        type: 'update',
        id: id,
        data: taskData.toJson(),
        entityType: 'task',
      ));
      return Right(tempTask.toEntity());
    }
  } catch (e) {
    return const Left(ServerFailure(message: 'Failed to update task'));
  }
}