Files
api/services/nginx/app/objects/selfserve_wash_session_answers_o.php
T

98 lines
3.4 KiB
PHP

<?php
namespace objects;
use classes\db;
use classes\object_property;
use classes\selfserve_schema_bootstrap;
use traits\db_object_t;
class selfserve_wash_session_answers_o extends db
{
use db_object_t;
public object_property $session_id;
public object_property $question_id;
public object_property $question_text;
public object_property $answer_value;
public object_property $answered_at;
public object_property $created_at;
public object_property $updated_at;
public object_property $deleted_at;
public function structure(): void
{
selfserve_schema_bootstrap::ensureTables();
$this->setTable('selfserve_wash_session_answers');
}
public function getObjectProperties(): void
{
$this->session_id = new object_property($this->table, $this->id, 'session_id', 'int', false);
$this->question_id = new object_property($this->table, $this->id, 'question_id', 'int', false);
$this->question_text = new object_property($this->table, $this->id, 'question_text', 'string', false);
$this->answer_value = new object_property($this->table, $this->id, 'answer_value', 'bool', false);
$this->answered_at = new object_property($this->table, $this->id, 'answered_at', 'datetime', false);
$this->created_at = new object_property($this->table, $this->id, 'created_at', 'timestamp', false);
$this->updated_at = new object_property($this->table, $this->id, 'updated_at', 'timestamp', false);
$this->deleted_at = new object_property($this->table, $this->id, 'deleted_at', 'timestamp', false);
}
public function objectChanged(): void
{
// No dedicated cache invalidation yet.
}
public function upsert(int $sessionId, int $questionId, string $questionText, bool $answerValue): self
{
$rows = $this->getFieldsWhere([
'session_id' => $sessionId,
'question_id' => $questionId,
'deleted_at' => null,
], ['id']);
if ($rows !== []) {
$this->select((int)$rows[0]['id']);
$this->question_text->set($questionText);
$this->answer_value->set($answerValue);
$this->answered_at->set(date('Y-m-d H:i:s'));
return $this;
}
$this->id = self::add_object([
'session_id' => $sessionId,
'question_id' => $questionId,
'question_text' => $questionText,
'answer_value' => $answerValue,
'answered_at' => date('Y-m-d H:i:s'),
]);
$this->getObjectProperties();
$this->objectChanged();
return $this;
}
public function listBySession(int $sessionId): array
{
return $this->getFieldsWhere([
'session_id' => $sessionId,
'deleted_at' => null,
], ['id', 'question_id', 'question_text', 'answer_value', 'answered_at']);
}
public function deleteMissingForSession(int $sessionId, array $questionIds): void
{
global $db;
$sessionId = (int)$sessionId;
$questionIds = array_values(array_unique(array_map(static fn(mixed $value): int => (int)$value, $questionIds)));
if ($questionIds === []) {
$db->query("DELETE FROM $this->table WHERE session_id = $sessionId");
return;
}
$questionIdsSql = implode(',', $questionIds);
$db->query("DELETE FROM $this->table WHERE session_id = $sessionId AND question_id NOT IN ($questionIdsSql)");
}
}