|
|
@@ -43,115 +43,111 @@ class ReviewService
|
|
|
->get();
|
|
|
}
|
|
|
|
|
|
- public function create(array $data): Review
|
|
|
- {
|
|
|
- try {
|
|
|
- DB::beginTransaction();
|
|
|
-
|
|
|
- $review = new Review;
|
|
|
-
|
|
|
- $review->fill($data);
|
|
|
- $review->save();
|
|
|
- $review->refresh();
|
|
|
-
|
|
|
- if (isset($data['origin']) && isset($data['origin_id'])) {
|
|
|
- switch ($data['origin']) {
|
|
|
- case 'client':
|
|
|
- $schedule = Schedule::find($data['schedule_id']);
|
|
|
- $provider = Provider::find($schedule->provider_id);
|
|
|
-
|
|
|
- $provider->updateAverageRating((float) $data['stars']);
|
|
|
- break;
|
|
|
- case 'provider':
|
|
|
- $schedule = Schedule::find($data['schedule_id']);
|
|
|
- $client = Client::find($schedule->client_id);
|
|
|
-
|
|
|
- $client->updateAverageRating((float) $data['stars']);
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- if (isset($data['improvements_ids'])) {
|
|
|
- $review->improvements()->sync($data['improvements_ids']);
|
|
|
- }
|
|
|
-
|
|
|
- if (! empty($data['block_provider'])) {
|
|
|
- $schedule = Schedule::find($data['schedule_id']);
|
|
|
-
|
|
|
- $alreadyBlocked = ClientProviderBlock::where('client_id', $schedule->client_id)
|
|
|
- ->where('provider_id', $schedule->provider_id)
|
|
|
- ->whereNull('deleted_at')
|
|
|
- ->exists();
|
|
|
-
|
|
|
- if (! $alreadyBlocked) {
|
|
|
- ClientProviderBlock::create([
|
|
|
- 'client_id' => $schedule->client_id,
|
|
|
- 'provider_id' => $schedule->provider_id,
|
|
|
- ]);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- if (! empty($data['block_client'])) {
|
|
|
- $schedule = Schedule::find($data['schedule_id']);
|
|
|
-
|
|
|
- $alreadyBlocked = ProviderClientBlock::where('provider_id', $schedule->provider_id)
|
|
|
- ->where('client_id', $schedule->client_id)
|
|
|
- ->whereNull('deleted_at')
|
|
|
- ->exists();
|
|
|
-
|
|
|
- if (! $alreadyBlocked) {
|
|
|
- ProviderClientBlock::create([
|
|
|
- 'provider_id' => $schedule->provider_id,
|
|
|
- 'client_id' => $schedule->client_id,
|
|
|
- ]);
|
|
|
- }
|
|
|
- }
|
|
|
+ public function create(array $data): Review
|
|
|
+ {
|
|
|
+ try {
|
|
|
+ DB::beginTransaction();
|
|
|
+ $review = new Review();
|
|
|
+ $review->fill($data);
|
|
|
+ $review->save();
|
|
|
+ $review->refresh();
|
|
|
+
|
|
|
+ if (isset($data['origin']) && isset($data['origin_id'])) {
|
|
|
+ switch ($data['origin']) {
|
|
|
+ case 'client':
|
|
|
+ $schedule = Schedule::find($data['schedule_id']);
|
|
|
+ $provider = Provider::find($schedule->provider_id);
|
|
|
+
|
|
|
+ $provider->updateAverageRating((float) $data['stars']);
|
|
|
+ break;
|
|
|
+ case 'provider':
|
|
|
+ $schedule = Schedule::find($data['schedule_id']);
|
|
|
+ $client = Client::find($schedule->client_id);
|
|
|
+
|
|
|
+ $client->updateAverageRating((float) $data['stars']);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (isset($data['improvements_ids'])) {
|
|
|
+ $review->improvements()->sync($data['improvements_ids']);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (! empty($data['block_provider'])) {
|
|
|
+ $schedule = Schedule::find($data['schedule_id']);
|
|
|
+
|
|
|
+ $alreadyBlocked = ClientProviderBlock::where('client_id', $schedule->client_id)
|
|
|
+ ->where('provider_id', $schedule->provider_id)
|
|
|
+ ->whereNull('deleted_at')
|
|
|
+ ->exists();
|
|
|
+
|
|
|
+ if (! $alreadyBlocked) {
|
|
|
+ ClientProviderBlock::create([
|
|
|
+ 'client_id' => $schedule->client_id,
|
|
|
+ 'provider_id' => $schedule->provider_id,
|
|
|
+ ]);
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
- if (! empty($data['favorite_provider'])) {
|
|
|
- $schedule = Schedule::find($data['schedule_id']);
|
|
|
+ if (! empty($data['block_client'])) {
|
|
|
+ $schedule = Schedule::find($data['schedule_id']);
|
|
|
|
|
|
- $alreadyFavorited = ClientFavoriteProvider::where('client_id', $schedule->client_id)
|
|
|
- ->where('provider_id', $schedule->provider_id)
|
|
|
- ->whereNull('deleted_at')
|
|
|
- ->exists();
|
|
|
+ $alreadyBlocked = ProviderClientBlock::where('provider_id', $schedule->provider_id)
|
|
|
+ ->where('client_id', $schedule->client_id)
|
|
|
+ ->whereNull('deleted_at')
|
|
|
+ ->exists();
|
|
|
|
|
|
- if (! $alreadyFavorited) {
|
|
|
- ClientFavoriteProvider::create([
|
|
|
- 'client_id' => $schedule->client_id,
|
|
|
- 'provider_id' => $schedule->provider_id,
|
|
|
- ]);
|
|
|
- }
|
|
|
- }
|
|
|
+ if (! $alreadyBlocked) {
|
|
|
+ ProviderClientBlock::create([
|
|
|
+ 'provider_id' => $schedule->provider_id,
|
|
|
+ 'client_id' => $schedule->client_id,
|
|
|
+ ]);
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
- if (! empty($data['photos'])) {
|
|
|
- $schedule = Schedule::find($data['schedule_id']);
|
|
|
- $origin = $data['origin'];
|
|
|
-
|
|
|
- foreach ($data['photos'] as $photo) {
|
|
|
- $media = $this->mediaService->createFromFile(
|
|
|
- file: $photo,
|
|
|
- folder: "review/{$schedule->id}/{$origin}",
|
|
|
- source: 'review',
|
|
|
- sourceId: $review->id,
|
|
|
- );
|
|
|
-
|
|
|
- ReviewMedia::create([
|
|
|
- 'review_id' => $review->id,
|
|
|
- 'media_id' => $media->id,
|
|
|
- 'origin' => $origin,
|
|
|
- ]);
|
|
|
- }
|
|
|
- }
|
|
|
+ if (! empty($data['favorite_provider'])) {
|
|
|
+ $schedule = Schedule::find($data['schedule_id']);
|
|
|
|
|
|
- DB::commit();
|
|
|
+ $alreadyFavorited = ClientFavoriteProvider::where('client_id', $schedule->client_id)
|
|
|
+ ->where('provider_id', $schedule->provider_id)
|
|
|
+ ->whereNull('deleted_at')
|
|
|
+ ->exists();
|
|
|
|
|
|
- return $review->load('reviewMedia.media');
|
|
|
- } catch (Exception $e) {
|
|
|
- DB::rollBack();
|
|
|
- Log::error('Error creating review: '.$e->getMessage());
|
|
|
- throw $e;
|
|
|
+ if (! $alreadyFavorited) {
|
|
|
+ ClientFavoriteProvider::create([
|
|
|
+ 'client_id' => $schedule->client_id,
|
|
|
+ 'provider_id' => $schedule->provider_id,
|
|
|
+ ]);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (! empty($data['photos'])) {
|
|
|
+ $schedule = Schedule::find($data['schedule_id']);
|
|
|
+ $origin = $data['origin'];
|
|
|
+
|
|
|
+ foreach ($data['photos'] as $photo) {
|
|
|
+ $media = $this->mediaService->createFromFile(
|
|
|
+ file: $photo,
|
|
|
+ folder: "review/{$schedule->id}/{$origin}",
|
|
|
+ source: 'review',
|
|
|
+ sourceId: $review->id,
|
|
|
+ );
|
|
|
+
|
|
|
+ ReviewMedia::create([
|
|
|
+ 'review_id' => $review->id,
|
|
|
+ 'media_id' => $media->id,
|
|
|
+ 'origin' => $origin,
|
|
|
+ ]);
|
|
|
}
|
|
|
+ }
|
|
|
+
|
|
|
+ DB::commit();
|
|
|
+ return $review;
|
|
|
+ } catch (Exception $e) {
|
|
|
+ DB::rollBack();
|
|
|
+ Log::error('Error creating review: ' . $e->getMessage());
|
|
|
+ throw $e;
|
|
|
}
|
|
|
+ }
|
|
|
|
|
|
private function detailEagerLoads(): array
|
|
|
{
|