fix: question controller fit with last vr
This commit is contained in:
@@ -41,7 +41,48 @@ public function index(Request $request)
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
return response()->json($query->get());
|
return response()->json(
|
||||||
|
$query->get()->map(fn ($q) => $this->formatQuestion($q))->values()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Shape a question into the legacy (old Flutter) response: category_id and
|
||||||
|
* category are always present and non-null, tags is always an array, and
|
||||||
|
* timestamps are always ISO strings — so the old client never hits a null.
|
||||||
|
*/
|
||||||
|
private function formatQuestion(Question $question): array
|
||||||
|
{
|
||||||
|
$question->loadMissing(['tags', 'category']);
|
||||||
|
|
||||||
|
$createdAt = optional($question->created_at)->toIso8601String();
|
||||||
|
$updatedAt = optional($question->updated_at)->toIso8601String();
|
||||||
|
$categoryId = $question->category_id ?? 0;
|
||||||
|
|
||||||
|
$category = $question->category;
|
||||||
|
$categoryPayload = $category
|
||||||
|
? [
|
||||||
|
'id' => $category->id,
|
||||||
|
'name' => $category->name ?? '',
|
||||||
|
'created_at' => optional($category->created_at)->toIso8601String() ?? $createdAt,
|
||||||
|
'updated_at' => optional($category->updated_at)->toIso8601String() ?? $updatedAt,
|
||||||
|
]
|
||||||
|
: [
|
||||||
|
'id' => $categoryId,
|
||||||
|
'name' => '',
|
||||||
|
'created_at' => $createdAt,
|
||||||
|
'updated_at' => $updatedAt,
|
||||||
|
];
|
||||||
|
|
||||||
|
return [
|
||||||
|
'id' => $question->id,
|
||||||
|
'title' => $question->title ?? '',
|
||||||
|
'category_id' => $categoryId,
|
||||||
|
'created_at' => $createdAt,
|
||||||
|
'updated_at' => $updatedAt,
|
||||||
|
'tags' => $question->tags->values(),
|
||||||
|
'category' => $categoryPayload,
|
||||||
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -75,7 +116,7 @@ public function store(Request $request)
|
|||||||
$question->tags()->sync($tagIds);
|
$question->tags()->sync($tagIds);
|
||||||
}
|
}
|
||||||
|
|
||||||
return response()->json($question->load(['tags', 'category']), 201);
|
return response()->json($this->formatQuestion($question), 201);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -83,7 +124,7 @@ public function store(Request $request)
|
|||||||
*/
|
*/
|
||||||
public function show(Question $question)
|
public function show(Question $question)
|
||||||
{
|
{
|
||||||
return response()->json($question->load(['tags', 'category']));
|
return response()->json($this->formatQuestion($question));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -120,7 +161,7 @@ public function update(Request $request, Question $question)
|
|||||||
$question->tags()->sync($tagIds);
|
$question->tags()->sync($tagIds);
|
||||||
}
|
}
|
||||||
|
|
||||||
return response()->json($question->load(['tags', 'category']));
|
return response()->json($this->formatQuestion($question->fresh()));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user