ソースを参照

feat: :sparkles: crud prestadores dias trabalho

crud prestadores dias trabalho
Gustavo Zanatta 1 ヶ月 前
コミット
64ac6475ee

+ 9 - 0
app/Enums/WorkingPeriodEnum.php

@@ -0,0 +1,9 @@
+<?php
+
+namespace App\Enums;
+
+enum WorkingPeriodEnum: string
+{
+    case MORNING = 'morning';
+    case AFTERNOON = 'afternoon';
+}

+ 0 - 3
app/Http/Controllers/ProviderPaymentMethodController.php

@@ -17,9 +17,7 @@ class ProviderPaymentMethodController extends Controller
 
     public function index($id): JsonResponse
     {
-        // $providerId = $request->query('provider_id');
         $paymentMethods = $this->service->getByProvider($id);
-        // return ProviderPaymentMethodResource::collection($paymentMethods);
         return $this->successResponse(
             payload: ProviderPaymentMethodResource::collection($paymentMethods)
         );
@@ -54,7 +52,6 @@ class ProviderPaymentMethodController extends Controller
     public function destroy(int $id): JsonResponse
     {
         $paymentMethod = $this->service->findById($id);
-        abort_if(!$paymentMethod, 404);
         
         $this->service->delete($paymentMethod);
         return $this->successResponse(

+ 40 - 0
app/Http/Controllers/ProviderWorkingDayController.php

@@ -0,0 +1,40 @@
+<?php
+
+namespace App\Http\Controllers;
+
+use App\Http\Requests\ProviderWorkingDayRequest;
+use App\Http\Resources\ProviderWorkingDayResource;
+use App\Services\ProviderWorkingDayService;
+use Illuminate\Http\JsonResponse;
+use Illuminate\Http\Request;
+use Illuminate\Http\Resources\Json\AnonymousResourceCollection;
+
+class ProviderWorkingDayController extends Controller
+{
+    public function __construct(
+        private readonly ProviderWorkingDayService $service
+    ) {}
+
+    public function indexByProviderId($id): JsonResponse
+    {
+        $workingDays = $this->service->getByProvider($id);
+        return $this->successResponse(ProviderWorkingDayResource::collection($workingDays));
+    }
+
+    public function store(ProviderWorkingDayRequest $request): JsonResponse
+    {
+        $workingDay = $this->service->create($request->validated());
+        return $this->successResponse(new ProviderWorkingDayResource($workingDay));
+    }
+
+    public function destroy($id, Request $request): JsonResponse
+    {
+        $day = $request->query('day');
+        $period = $request->query('period');
+        $this->service->delete($id, $day, $period);
+        return $this->successResponse(
+            message: __("messages.deleted"),
+            code: 204,
+        );
+    }
+}

+ 24 - 0
app/Http/Requests/ProviderWorkingDayRequest.php

@@ -0,0 +1,24 @@
+<?php
+
+namespace App\Http\Requests;
+
+use App\Enums\WorkingPeriodEnum;
+use Illuminate\Foundation\Http\FormRequest;
+use Illuminate\Validation\Rule;
+
+class ProviderWorkingDayRequest extends FormRequest
+{
+    public function authorize(): bool
+    {
+        return true;
+    }
+
+    public function rules(): array
+    {
+        return [
+            'provider_id' => ['required', 'exists:providers,id'],
+            'day' => ['required', 'integer', 'min:1', 'max:7'],
+            'period' => ['required', Rule::in([WorkingPeriodEnum::MORNING->value, WorkingPeriodEnum::AFTERNOON->value])],
+        ];
+    }
+}

+ 21 - 0
app/Http/Resources/ProviderWorkingDayResource.php

@@ -0,0 +1,21 @@
+<?php
+
+namespace App\Http\Resources;
+
+use Illuminate\Http\Request;
+use Illuminate\Http\Resources\Json\JsonResource;
+
+class ProviderWorkingDayResource extends JsonResource
+{
+    public function toArray(Request $request): array
+    {
+        return [
+            'id' => $this->id,
+            'provider_id' => $this->provider_id,
+            'day' => $this->day,
+            'period' => $this->period?->value,
+            'created_at' => $this->created_at,
+            'updated_at' => $this->updated_at,
+        ];
+    }
+}

+ 30 - 0
app/Models/ProviderWorkingDay.php

@@ -0,0 +1,30 @@
+<?php
+
+namespace App\Models;
+
+use App\Enums\WorkingPeriodEnum;
+use Illuminate\Database\Eloquent\Factories\HasFactory;
+use Illuminate\Database\Eloquent\Model;
+use Illuminate\Database\Eloquent\Relations\BelongsTo;
+use Illuminate\Database\Eloquent\SoftDeletes;
+
+class ProviderWorkingDay extends Model
+{
+    use HasFactory, SoftDeletes;
+
+    protected $fillable = [
+        'provider_id',
+        'day',
+        'period',
+    ];
+
+    protected $casts = [
+        'day' => 'integer',
+        'period' => WorkingPeriodEnum::class,
+    ];
+
+    public function provider(): BelongsTo
+    {
+        return $this->belongsTo(Provider::class);
+    }
+}

+ 36 - 0
app/Services/ProviderWorkingDayService.php

@@ -0,0 +1,36 @@
+<?php
+
+namespace App\Services;
+
+use App\Models\ProviderWorkingDay;
+use Illuminate\Database\Eloquent\Collection;
+
+class ProviderWorkingDayService
+{
+    public function getByProvider(int $providerId): Collection
+    {
+        return ProviderWorkingDay::where('provider_id', $providerId)->get();
+    }
+
+    public function findByDayAndPeriod(int $providerId, int $day, string $period): ?ProviderWorkingDay
+    {
+        return ProviderWorkingDay::where('provider_id', $providerId)
+            ->where('day', $day)
+            ->where('period', $period)
+            ->first();
+    }
+
+    public function create(array $data): ProviderWorkingDay
+    {
+        return ProviderWorkingDay::create($data);
+    }
+
+    public function delete($id, $day, $period): bool
+    {
+        $workingDay = ProviderWorkingDay::where('provider_id', $id)
+            ->where('day', $day)
+            ->where('period', $period)
+            ->first();
+        return $workingDay ? $workingDay->delete() : false;
+    }
+}

+ 34 - 0
database/migrations/2026_02_09_180113_create_provider_working_days_table.php

@@ -0,0 +1,34 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+return new class extends Migration
+{
+    /**
+     * Run the migrations.
+     */
+    public function up(): void
+    {
+        Schema::create('provider_working_days', function (Blueprint $table) {
+            $table->id();
+            $table->foreignId('provider_id')->constrained('providers')->onDelete('cascade');
+            $table->integer('day'); // 1-7 (1=Sunday, 7=Saturday)
+            $table->enum('period', ['morning', 'afternoon']);
+            $table->timestamps();
+            $table->softDeletes();
+
+            $table->index('provider_id');
+            $table->unique(['provider_id', 'day', 'period', 'deleted_at'], 'unique_provider_day_period');
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     */
+    public function down(): void
+    {
+        Schema::dropIfExists('provider_working_days');
+    }
+};

+ 6 - 0
database/seeders/PermissionSeeder.php

@@ -106,6 +106,12 @@ class PermissionSeeder extends Seeder
                         "bits" => 271,
                         "children" => [],
                     ],
+                    [
+                        "scope" => "config.provider_working_day",
+                        "description" => "Configurações de Dias de Trabalho do Prestador",
+                        "bits" => 271,
+                        "children" => [],
+                    ],
                     [
                         "scope" => "config.improvement_type",
                         "description" => "Configurações de Tipos de Melhoria",

+ 1 - 0
database/seeders/UserTypePermissionSeeder.php

@@ -40,6 +40,7 @@ class UserTypePermissionSeeder extends Seeder
                         ['scope' => 'config.provider_speciality', 'bits' => 271],
                         ['scope' => 'config.provider_services_types', 'bits' => 271],
                         ['scope' => 'config.provider_payment_method', 'bits' => 271],
+                        ['scope' => 'config.provider_working_day', 'bits' => 271],
                         ['scope' => 'config.improvement_type', 'bits' => 271],
                         ['scope' => 'config.media', 'bits' => 271],
                         ['scope' => 'config.service_type', 'bits' => 271],

+ 8 - 0
routes/authRoutes/provider_working_day.php

@@ -0,0 +1,8 @@
+<?php
+
+use App\Http\Controllers\ProviderWorkingDayController;
+use Illuminate\Support\Facades\Route;
+
+Route::get('/provider/working-days/{id}', [ProviderWorkingDayController::class, 'indexByProviderId'])->middleware('permission:config.provider_working_day,view');
+Route::post('/provider/working-day', [ProviderWorkingDayController::class, 'store'])->middleware('permission:config.provider_working_day,add');
+Route::delete('/provider/working-day/{id}', [ProviderWorkingDayController::class, 'destroy'])->middleware('permission:config.provider_working_day,delete');