diff --git a/backend/app/Controllers/ElementController.php b/backend/app/Controllers/ElementController.php index 2e44931..0e71cea 100644 --- a/backend/app/Controllers/ElementController.php +++ b/backend/app/Controllers/ElementController.php @@ -36,6 +36,7 @@ class ElementController $childElements[] = [ 'id' => $childElement->getId(), 'title' => $childElement->getTitle(), + 'description' => $childElement->getDescription(), ]; } @@ -44,6 +45,7 @@ class ElementController 'element' => [ 'id' => $element->getId(), 'title' => $element->getTitle(), + 'description' => $element->getDescription(), ], ], 200); } diff --git a/backend/app/Element/CreateElementDto.php b/backend/app/Element/CreateElementDto.php index b815300..3bad829 100644 --- a/backend/app/Element/CreateElementDto.php +++ b/backend/app/Element/CreateElementDto.php @@ -9,6 +9,7 @@ class CreateElementDto public function __construct( public Set $set, public string $title, + public string $description, public ?Element $parentElement, ) { } diff --git a/backend/app/Element/Element.php b/backend/app/Element/Element.php index 143df26..7f007ce 100644 --- a/backend/app/Element/Element.php +++ b/backend/app/Element/Element.php @@ -9,6 +9,7 @@ class Element public function __construct( private int $id, private string $title, + private string $description, private Set $set, private ?Element $parentElement, ) { @@ -24,6 +25,11 @@ class Element return $this->title; } + public function getDescription(): string + { + return $this->description; + } + public function getSet(): Set { return $this->set; diff --git a/backend/app/Element/ElementModel.php b/backend/app/Element/ElementModel.php index 119d287..4f79f3b 100644 --- a/backend/app/Element/ElementModel.php +++ b/backend/app/Element/ElementModel.php @@ -9,6 +9,7 @@ use Illuminate\Database\Eloquent\Model; * @property int $id * @property int $set_id * @property string $title + * @property string $description * @property int|null $parent_element_id * * @method static Builder|ElementModel newModelQuery() @@ -18,6 +19,7 @@ use Illuminate\Database\Eloquent\Model; * @method static Builder|ElementModel whereParentElementId($value) * @method static Builder|ElementModel whereSetId($value) * @method static Builder|ElementModel whereTitle($value) + * @method static Builder|ElementModel whereDescription($value) * * @mixin \Eloquent */ @@ -30,6 +32,7 @@ class ElementModel extends Model protected $fillable = [ 'set_id', 'title', + 'description', 'parent_element_id', ]; diff --git a/backend/app/Element/EloquentElementRepository.php b/backend/app/Element/EloquentElementRepository.php index 350e37a..7b7065a 100644 --- a/backend/app/Element/EloquentElementRepository.php +++ b/backend/app/Element/EloquentElementRepository.php @@ -17,12 +17,14 @@ class EloquentElementRepository implements ElementRepository $model = ElementModel::create([ 'set_id' => $dto->set->getId(), 'title' => $dto->title, + 'description' => $dto->description, 'parent_element_id' => $dto->parentElement?->getId(), ]); return new Element( id: $model->id, title: $dto->title, + description: $dto->description, set: $dto->set, parentElement: $dto->parentElement, ); @@ -102,6 +104,7 @@ class EloquentElementRepository implements ElementRepository return new Element( id: $model->id, title: $model->title, + description: $model->description, set: $set, parentElement: $parentElement, ); diff --git a/backend/app/Element/UseCases/CreateElement/CreateElement.php b/backend/app/Element/UseCases/CreateElement/CreateElement.php index 9b32cd7..1cb4b37 100644 --- a/backend/app/Element/UseCases/CreateElement/CreateElement.php +++ b/backend/app/Element/UseCases/CreateElement/CreateElement.php @@ -30,6 +30,7 @@ class CreateElement if ($request->title === null || $request->title === '') { throw new BadRequestException('title is required'); } + $description = $request->description ?? ''; $set = $this->setRepo->find($request->setId); if ($set === null) { @@ -44,6 +45,7 @@ class CreateElement return $this->elementRepo->create(new CreateElementDto( set: $set, title: $request->title, + description: $description, parentElement: null, )); } @@ -65,6 +67,7 @@ class CreateElement return $this->elementRepo->create(new CreateElementDto( set: $set, title: $request->title, + description: $description, parentElement: $parentElement, )); } diff --git a/backend/app/Element/UseCases/CreateElement/CreateElementRequest.php b/backend/app/Element/UseCases/CreateElement/CreateElementRequest.php index eef7e7e..b028326 100644 --- a/backend/app/Element/UseCases/CreateElement/CreateElementRequest.php +++ b/backend/app/Element/UseCases/CreateElement/CreateElementRequest.php @@ -7,6 +7,7 @@ class CreateElementRequest public function __construct( public ?int $setId, public ?string $title, + public ?string $description, public ?int $parentElementId, ) { } diff --git a/backend/database/migrations/2026_05_26_000000_add_description_to_elements_table.php b/backend/database/migrations/2026_05_26_000000_add_description_to_elements_table.php new file mode 100644 index 0000000..704311b --- /dev/null +++ b/backend/database/migrations/2026_05_26_000000_add_description_to_elements_table.php @@ -0,0 +1,22 @@ +text('description')->default(''); + }); + } + + public function down(): void + { + Schema::table('elements', function (Blueprint $table) { + $table->dropColumn('description'); + }); + } +}; diff --git a/backend/database/seeders/ElementSeeder.php b/backend/database/seeders/ElementSeeder.php index 68ee7b9..b356df9 100644 --- a/backend/database/seeders/ElementSeeder.php +++ b/backend/database/seeders/ElementSeeder.php @@ -17,16 +17,20 @@ class ElementSeeder extends Seeder $rootElement = $elementRepository->create(new CreateElementDto( set: $baderechSet, title: $baderechSet->getName(), + description: $baderechSet->getDescription(), parentElement: null, )); $elementRepository->create(new CreateElementDto( set: $baderechSet, title: 'Avodah Foundations', + description: 'Core foundations for building a steady ' + . 'avodah practice.', parentElement: $rootElement, )); $elementRepository->create(new CreateElementDto( set: $baderechSet, title: 'Daily Practice', + description: 'Practical steps for consistent daily growth.', parentElement: $rootElement, )); } diff --git a/backend/tests/Fakes/FakeElementRepository.php b/backend/tests/Fakes/FakeElementRepository.php index b16be7f..09acc9d 100644 --- a/backend/tests/Fakes/FakeElementRepository.php +++ b/backend/tests/Fakes/FakeElementRepository.php @@ -20,6 +20,7 @@ class FakeElementRepository implements ElementRepository $element = new Element( id: $id, title: $dto->title, + description: $dto->description, set: $dto->set, parentElement: $dto->parentElement, ); @@ -95,6 +96,7 @@ class FakeElementRepository implements ElementRepository return new Element( id: $element->getId(), title: $element->getTitle(), + description: $element->getDescription(), set: $element->getSet(), parentElement: $parentElement, );