diff --git a/backend/app/Enums/OrderTypesEnum.php b/backend/app/Enums/OrderTypesEnum.php index 6ae3c41..64f7224 100644 --- a/backend/app/Enums/OrderTypesEnum.php +++ b/backend/app/Enums/OrderTypesEnum.php @@ -8,6 +8,5 @@ enum OrderTypesEnum: string case HOUSE = 'House'; case FLAT = 'Flat'; - case GUEST_HOUSE = 'Guest'; - case HOTEL = 'Hotel'; + case Land = 'Land'; } diff --git a/backend/app/Filters/OfferFilter.php b/backend/app/Filters/OfferFilter.php index 1cd0779..5a9ae7b 100644 --- a/backend/app/Filters/OfferFilter.php +++ b/backend/app/Filters/OfferFilter.php @@ -2,6 +2,7 @@ namespace App\Filters; +use App\Enums\OrderTypesEnum; use App\Enums\RoomTypesEnum; use Illuminate\Database\Eloquent\Builder; @@ -13,7 +14,7 @@ class OfferFilter extends QueryFilter */ protected function type(string $type): Builder { - if (RoomTypesEnum::tryFrom($type) !== null) + if (OrderTypesEnum::tryFrom($type) !== null) return $this->builder->where('type', $type); return $this->builder; @@ -23,10 +24,10 @@ class OfferFilter extends QueryFilter * @param int $rooms * @return \Illuminate\Database\Eloquent\Builder */ - protected function rooms(int $rooms): Builder + protected function rooms(string $type): Builder { - if ($rooms >= 1) - return $this->builder->where('rooms', '>=', $rooms); + if (RoomTypesEnum::tryFrom($type) !== null) + return $this->builder->where('rooms', $type); return $this->builder; } @@ -54,4 +55,28 @@ class OfferFilter extends QueryFilter return $this->builder; } + + /** + * @param int $space + * @return \Illuminate\Database\Eloquent\Builder + */ + protected function startSpace(int $space): Builder + { + if ($space >= 0) + return $this->builder->where('space', '>=', $space); + + return $this->builder; + } + + /** + * @param int $space + * @return \Illuminate\Database\Eloquent\Builder + */ + protected function endSpace(int $space): Builder + { + if ($space >= 0) + return $this->builder->where('space', '<=', $space); + + return $this->builder; + } } diff --git a/backend/app/Http/Controllers/OfferController.php b/backend/app/Http/Controllers/OfferController.php index eeaa127..48b66e3 100644 --- a/backend/app/Http/Controllers/OfferController.php +++ b/backend/app/Http/Controllers/OfferController.php @@ -36,7 +36,7 @@ class OfferController extends Controller */ public function show(int $id): OfferResource { - return new OfferResource(Offer::with('images')->findOrFail($id)); + return new OfferResource(Offer::with(['images', 'user'])->findOrFail($id)); } /** @@ -71,8 +71,18 @@ class OfferController extends Controller */ public function update(UpdateOfferRequest $request, int $id): void { - $offer = Offer::findOrFail($id); - $offer->update($request->validated()); + $data = $request->validated(); + $images = $data['images']; + + $offer = auth()->user()->offers()->findOrFail($id); + $offer->update($data); + + foreach ($images as $image) + { + $offer_photo = OfferPhoto::findOrFail($image['id']); + $offer_photo->offer_id = $offer->id; + $offer_photo->save(); + } } /** diff --git a/backend/app/Models/Feedback.php b/backend/app/Models/Feedback.php index 7084b9e..9f47e2c 100644 --- a/backend/app/Models/Feedback.php +++ b/backend/app/Models/Feedback.php @@ -4,6 +4,7 @@ namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; +use Illuminate\Database\Eloquent\Relations\BelongsTo; class Feedback extends Model { @@ -28,4 +29,14 @@ class Feedback extends Model protected $casts = [ 'rating' => 'integer', ]; + + /** + * @return \Illuminate\Database\Eloquent\Relations\BelongsTo + */ +// public function user(): BelongsTo +// { +// return $this +// ->belongsTo(User::class) +// ->select('first_name'); +// } } diff --git a/backend/app/Models/Offer.php b/backend/app/Models/Offer.php index 1671c78..d5e530b 100644 --- a/backend/app/Models/Offer.php +++ b/backend/app/Models/Offer.php @@ -7,6 +7,7 @@ use App\Enums\RoomTypesEnum; use App\Filters\Filterable; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; +use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\HasMany; class Offer extends Model @@ -51,4 +52,15 @@ class Offer extends Model { return $this->hasMany(OfferPhoto::class); } + + /** + * @return \Illuminate\Database\Eloquent\Relations\BelongsTo + */ + public function user(): BelongsTo + { + return $this + ->belongsTo(User::class) + ->select('id','first_name', 'last_name', 'middle_name', 'phone', 'photo') + ->with('feedback'); + } } diff --git a/backend/app/Models/User.php b/backend/app/Models/User.php index 7b63a17..75a3954 100644 --- a/backend/app/Models/User.php +++ b/backend/app/Models/User.php @@ -3,6 +3,7 @@ namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; +use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; use Laravel\Sanctum\HasApiTokens; @@ -35,12 +36,12 @@ class User extends Authenticatable 'password', ]; - public function feedback() + public function feedback(): HasMany { return $this->hasMany(Feedback::class); } - public function offers() + public function offers(): HasMany { return $this->hasMany(Offer::class); }