|
|
@@ -6,6 +6,7 @@ use App\Enums\GenderEnum;
|
|
|
use App\Models\Address;
|
|
|
use App\Models\Client;
|
|
|
use App\Models\Provider;
|
|
|
+use App\Models\ProviderServicesType;
|
|
|
use App\Rules\ScheduleBusinessRules;
|
|
|
use Illuminate\Support\Facades\Auth;
|
|
|
use Illuminate\Support\Facades\DB;
|
|
|
@@ -189,6 +190,56 @@ class SearchService
|
|
|
})->values()->toArray();
|
|
|
}
|
|
|
|
|
|
+ public function perfilPrestador(int $providerId): array
|
|
|
+ {
|
|
|
+ $provider = Provider::query()
|
|
|
+ ->visibleToCustomers()
|
|
|
+ ->whereNull('providers.deleted_at')
|
|
|
+ ->with(['user:id,name', 'profileMedia'])
|
|
|
+ ->findOrFail($providerId);
|
|
|
+
|
|
|
+ $address = Address::where('source', 'provider')
|
|
|
+ ->where('source_id', $provider->id)
|
|
|
+ ->orderByDesc('is_primary')
|
|
|
+ ->orderByDesc('id')
|
|
|
+ ->first();
|
|
|
+
|
|
|
+ $serviceTypes = ProviderServicesType::query()
|
|
|
+ ->join('service_types', 'service_types.id', '=', 'provider_services_types.service_type_id')
|
|
|
+ ->where('provider_services_types.provider_id', $provider->id)
|
|
|
+ ->whereNull('provider_services_types.deleted_at')
|
|
|
+ ->whereNull('service_types.deleted_at')
|
|
|
+ ->where('service_types.is_active', true)
|
|
|
+ ->orderBy('service_types.description')
|
|
|
+ ->get([
|
|
|
+ 'service_types.id',
|
|
|
+ 'service_types.description',
|
|
|
+ ])
|
|
|
+ ->toArray();
|
|
|
+
|
|
|
+ $totalReviews = DB::table('reviews')
|
|
|
+ ->leftJoin('schedules', 'schedules.id', '=', 'reviews.schedule_id')
|
|
|
+ ->where('reviews.origin', 'provider')
|
|
|
+ ->where('schedules.provider_id', $provider->id)
|
|
|
+ ->count();
|
|
|
+
|
|
|
+ return [
|
|
|
+ 'provider_id' => $provider->id,
|
|
|
+ 'provider_name' => $provider->user?->name,
|
|
|
+ 'district' => $address?->district,
|
|
|
+ 'age' => $provider->birth_date?->age,
|
|
|
+ 'gender' => $provider->gender,
|
|
|
+ 'gender_label' => GenderEnum::labelFor($provider->gender),
|
|
|
+ 'average_rating' => $provider->average_rating,
|
|
|
+ 'total_services' => $provider->total_services,
|
|
|
+ 'total_reviews' => $totalReviews,
|
|
|
+ 'profile_media_url' => $provider->profileMedia?->path
|
|
|
+ ? Storage::temporaryUrl($provider->profileMedia->path, now()->addMinutes(60))
|
|
|
+ : null,
|
|
|
+ 'service_types' => $serviceTypes,
|
|
|
+ ];
|
|
|
+ }
|
|
|
+
|
|
|
//
|
|
|
|
|
|
private function applyCreditCardFee(?float $price): ?float
|