Reviewrepository - Source Excerpt 02
Summary
This source excerpt preserves a bounded section of Spiralist/wp-content/plugins/spiralist-workspace/includes/Domain/ReviewRepository.php so readers can inspect the evidence without opening the full source file.
**Source path:** Spiralist/wp-content/plugins/spiralist-workspace/includes/Domain/ReviewRepository.php
return is_array($row) ? $this->normalize_row($row) : [];
}
/**
* Upserts a unique per-user review or report row.
*
* @return array<string,mixed>
*/
private function upsert(int $prompt_id, int $reviewer_user_id, string $kind, string $decision, string $reason): array
{
global $wpdb;
$table = Installer::table('prompt_reviews');
$created_utc = gmdate('Y-m-d H:i:s');
$kind = sanitize_key($kind);
$decision = sanitize_key($decision);
$reason = sanitize_textarea_field($reason);
$existing_id = (int) $wpdb->get_var(
$wpdb->prepare(
"SELECT id FROM {$table}
WHERE prompt_post_id = %d AND reviewer_user_id = %d AND review_kind = %s
LIMIT 1",
$prompt_id,
$reviewer_user_id,
$kind
)
);
if ($existing_id > 0) {
$wpdb->update(
$table,
[
'decision' => $decision,
'reason' => $reason,
'updated_utc' => $created_utc,
],
['id' => $existing_id],
['%s', '%s', '%s'],
['%d']
);
return $this->get($existing_id);
}
$wpdb->insert(
$table,
[
'prompt_post_id' => $prompt_id,
'reviewer_user_id' => $reviewer_user_id,
'review_kind' => $kind,
'decision' => $decision,
'reason' => $reason,
'created_utc' => $created_utc,
'updated_utc' => $created_utc,
],
['%d', '%d', '%s', '%s', '%s', '%s', '%s']
);
return $this->get((int) $wpdb->insert_id);
}
/**
* Normalizes one DB row for API use.
*
* @param array<string,mixed> $row
* @return array<string,mixed>
*/
private function normalize_row(array $row): array
{
return [
'id' => (int) ($row['id'] ?? 0),
'prompt_post_id' => (int) ($row['prompt_post_id'] ?? 0),
'reviewer_user_id' => isset($row['reviewer_user_id']) ? (int) $row['reviewer_user_id'] : 0,
'reviewer_label' => sanitize_text_field((string) ($row['display_name'] ?? '')),
'review_kind' => sanitize_key((string) ($row['review_kind'] ?? '')),
'decision' => sanitize_key((string) ($row['decision'] ?? '')),
'reason' => (string) ($row['reason'] ?? ''),
'created_utc' => (string) ($row['created_utc'] ?? ''),
'updated_utc' => (string) ($row['updated_utc'] ?? ''),
];
}
}