fieldRepository = $fieldRepository; } /** * Create a new field. * * @param Field $fieldData * * @return int Form ID * * @throws InvalidArgumentException If the field data is invalid */ public function addField(Field $fieldData): int { // Validate form data if (empty($fieldData->getFormId())) { throw new InvalidArgumentException('Form id is required.'); } // Create form via repository and return new form ID return $this->fieldRepository->add($fieldData); } /** * Update an existing field. * * @param int $fieldId * @param Field $fieldData * * @return bool * * @throws InvalidArgumentException If the form data is invalid */ public function updateField(int $fieldId, Field $fieldData): bool { // Validate form data before updating if (empty($fieldData->getId())) { throw new InvalidArgumentException('Filed id is required.'); } return $this->fieldRepository->update($fieldId, $fieldData); } /** * Delete a field by its ID. * * @param int $fieldId * @return int */ public function deleteField(int $fieldId): int { return $this->fieldRepository->delete($fieldId); } /** * Get fields by form ID * * @param int $id * * @return mixed[]|null */ public function getAllFields(int $id): ?array { return $this->fieldRepository->getFieldsById($id); } /** * Delete fields by form ID * * @param int $id * * @throws NotFoundException * @throws InvalidArgumentException */ public function deleteFieldsByFormId(int $id): void { $fields = $this->getAllFields($id); if (!$fields) { return; } foreach ($fields as $field) { $this->deleteField($field->getId()); } } }