1
0
mirror of https://github.com/robonen/metr.git synced 2026-03-20 02:44:42 +00:00

Offer relations controller

This commit is contained in:
2022-06-01 23:32:14 +07:00
parent 675b692c81
commit 210077df9d
6 changed files with 69 additions and 11 deletions

View File

@@ -8,6 +8,5 @@ enum OrderTypesEnum: string
case HOUSE = 'House'; case HOUSE = 'House';
case FLAT = 'Flat'; case FLAT = 'Flat';
case GUEST_HOUSE = 'Guest'; case Land = 'Land';
case HOTEL = 'Hotel';
} }

View File

@@ -2,6 +2,7 @@
namespace App\Filters; namespace App\Filters;
use App\Enums\OrderTypesEnum;
use App\Enums\RoomTypesEnum; use App\Enums\RoomTypesEnum;
use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Builder;
@@ -13,7 +14,7 @@ class OfferFilter extends QueryFilter
*/ */
protected function type(string $type): Builder 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->where('type', $type);
return $this->builder; return $this->builder;
@@ -23,10 +24,10 @@ class OfferFilter extends QueryFilter
* @param int $rooms * @param int $rooms
* @return \Illuminate\Database\Eloquent\Builder * @return \Illuminate\Database\Eloquent\Builder
*/ */
protected function rooms(int $rooms): Builder protected function rooms(string $type): Builder
{ {
if ($rooms >= 1) if (RoomTypesEnum::tryFrom($type) !== null)
return $this->builder->where('rooms', '>=', $rooms); return $this->builder->where('rooms', $type);
return $this->builder; return $this->builder;
} }
@@ -54,4 +55,28 @@ class OfferFilter extends QueryFilter
return $this->builder; 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;
}
} }

View File

@@ -36,7 +36,7 @@ class OfferController extends Controller
*/ */
public function show(int $id): OfferResource 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 public function update(UpdateOfferRequest $request, int $id): void
{ {
$offer = Offer::findOrFail($id); $data = $request->validated();
$offer->update($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();
}
} }
/** /**

View File

@@ -4,6 +4,7 @@ namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
class Feedback extends Model class Feedback extends Model
{ {
@@ -28,4 +29,14 @@ class Feedback extends Model
protected $casts = [ protected $casts = [
'rating' => 'integer', 'rating' => 'integer',
]; ];
/**
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
*/
// public function user(): BelongsTo
// {
// return $this
// ->belongsTo(User::class)
// ->select('first_name');
// }
} }

View File

@@ -7,6 +7,7 @@ use App\Enums\RoomTypesEnum;
use App\Filters\Filterable; use App\Filters\Filterable;
use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Eloquent\Relations\HasMany;
class Offer extends Model class Offer extends Model
@@ -51,4 +52,15 @@ class Offer extends Model
{ {
return $this->hasMany(OfferPhoto::class); 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');
}
} }

View File

@@ -3,6 +3,7 @@
namespace App\Models; namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable; use Illuminate\Notifications\Notifiable;
use Laravel\Sanctum\HasApiTokens; use Laravel\Sanctum\HasApiTokens;
@@ -35,12 +36,12 @@ class User extends Authenticatable
'password', 'password',
]; ];
public function feedback() public function feedback(): HasMany
{ {
return $this->hasMany(Feedback::class); return $this->hasMany(Feedback::class);
} }
public function offers() public function offers(): HasMany
{ {
return $this->hasMany(Offer::class); return $this->hasMany(Offer::class);
} }