diff --git a/app/Domains/Tenant/Controllers/TenantPropController.php b/app/Domains/Tenant/Controllers/TenantPropController.php new file mode 100644 index 0000000..94f3c34 --- /dev/null +++ b/app/Domains/Tenant/Controllers/TenantPropController.php @@ -0,0 +1,61 @@ +props()->latest()->get() + )->response(); + } + + public function store(StoreTenantPropRequest $request): JsonResponse + { + /** @var Prop $prop */ + $prop = Tenant::createProp($request->validated()); + + return PropResource::make($prop)->response()->setStatusCode(201); + } + + public function show(Prop $tenantProp): PropResource + { + return PropResource::make($this->resolveScopedProp($tenantProp)); + } + + public function update(UpdateTenantPropRequest $request, Prop $tenantProp): PropResource + { + $tenantProp = $this->resolveScopedProp($tenantProp); + $tenantProp->update($request->validated()); + + return PropResource::make($tenantProp); + } + + public function destroy(Prop $tenantProp): Response + { + $tenantProp = $this->resolveScopedProp($tenantProp); + $tenantProp->delete(); + + return response()->noContent(); + } + + protected function resolveScopedProp(Prop $prop): Prop + { + if ($prop->propable_type !== Tenant::class) { + throw new NotFoundHttpException('Tenant prop not found.'); + } + + return $prop; + } +} diff --git a/app/Domains/Tenant/Requests/StoreTenantPropRequest.php b/app/Domains/Tenant/Requests/StoreTenantPropRequest.php new file mode 100644 index 0000000..1b0b74a --- /dev/null +++ b/app/Domains/Tenant/Requests/StoreTenantPropRequest.php @@ -0,0 +1,28 @@ + + */ + public function rules(): array + { + return [ + 'codigo' => ['required', 'string', 'max:255', Rule::unique('props', 'codigo')], + 'nombre' => ['required', 'string', 'max:255'], + 'is_required' => ['sometimes', 'boolean'], + 'data_type' => ['required', Rule::enum(PropDataType::class)], + ]; + } +} diff --git a/app/Domains/Tenant/Requests/UpdateTenantPropRequest.php b/app/Domains/Tenant/Requests/UpdateTenantPropRequest.php new file mode 100644 index 0000000..b5388f8 --- /dev/null +++ b/app/Domains/Tenant/Requests/UpdateTenantPropRequest.php @@ -0,0 +1,32 @@ + + */ + public function rules(): array + { + /** @var Prop|null $tenantProp */ + $tenantProp = $this->route('tenantProp'); + + return [ + 'codigo' => ['required', 'string', 'max:255', Rule::unique('props', 'codigo')->ignore($tenantProp?->id)], + 'nombre' => ['required', 'string', 'max:255'], + 'is_required' => ['sometimes', 'boolean'], + 'data_type' => ['required', Rule::enum(PropDataType::class)], + ]; + } +} diff --git a/app/Domains/Tenant/routes/api.php b/app/Domains/Tenant/routes/api.php index 67aa667..4374bc9 100644 --- a/app/Domains/Tenant/routes/api.php +++ b/app/Domains/Tenant/routes/api.php @@ -1,6 +1,9 @@ parameters(['tenant-props' => 'tenantProp']);