diff --git a/lib/Controller/ApiController.php b/lib/Controller/ApiController.php index eeed3d673..3f378dfde 100644 --- a/lib/Controller/ApiController.php +++ b/lib/Controller/ApiController.php @@ -780,8 +780,6 @@ public function newOption(int $formId, int $questionId, array $optionTexts): Dat } } - $this->formMapper->update($form); - return new DataResponse($addedOptions); } @@ -850,8 +848,6 @@ public function updateOption(int $formId, int $questionId, int $optionId, array // Update changed Columns in Db. $this->optionMapper->update($option); - $this->formMapper->update($form); - return new DataResponse($option->getId()); } @@ -899,8 +895,6 @@ public function deleteOption(int $formId, int $questionId, int $optionId): DataR $this->optionMapper->delete($option); - $this->formMapper->update($form); - return new DataResponse($optionId); } diff --git a/lib/Db/OptionMapper.php b/lib/Db/OptionMapper.php index c307e9639..47733ee4a 100644 --- a/lib/Db/OptionMapper.php +++ b/lib/Db/OptionMapper.php @@ -28,6 +28,7 @@ namespace OCA\Forms\Db; use OCP\AppFramework\Db\DoesNotExistException; +use OCP\AppFramework\Db\Entity; use OCP\AppFramework\Db\QBMapper; use OCP\IDBConnection; @@ -40,16 +41,55 @@ class OptionMapper extends QBMapper { * OptionMapper constructor. * @param IDBConnection $db */ - public function __construct(IDBConnection $db) { + public function __construct( + IDBConnection $db, + private FormMapper $formMapper, + private QuestionMapper $questionMapper + ) { parent::__construct($db, 'forms_v2_options', Option::class); } + /** + * @param Entity $entity + * @psalm-param Option $entity + * @return Option + * @throws \OCP\DB\Exception + */ + public function insert(Entity $entity): Option { + $formId = $this->questionMapper->findById($entity->getQuestionId())->getFormId(); + $this->formMapper->update($this->formMapper->findById($formId)); + return parent::insert($entity); + } + + /** + * @param Entity $entity + * @psalm-param Option $entity + * @return Option + * @throws \OCP\DB\Exception + */ + public function update(Entity $entity): Option { + $formId = $this->questionMapper->findById($entity->getQuestionId())->getFormId(); + $this->formMapper->update($this->formMapper->findById($formId)); + return parent::update($entity); + } + + /** + * @param Entity $entity + * @psalm-param Option $entity + * @return Option + * @throws \OCP\DB\Exception + */ + public function delete(Entity $entity): Option { + $formId = $this->questionMapper->findById($entity->getQuestionId())->getFormId(); + $this->formMapper->update($this->formMapper->findById($formId)); + return parent::delete($entity); + } + /** * @param int $questionId * @throws DoesNotExistException if not found * @return Option[] */ - public function findByQuestion(int $questionId): array { $qb = $this->db->getQueryBuilder();