File: /var/www/ipsremont-demo/app/Repository/Address/AddressRepository.php
<?php
namespace App\Repository\Address;
use App\Http\Requests\Address\CreateRequest;
use App\Http\Requests\Address\IndexRequest;
use App\Http\Requests\Address\UpdateRequest;
use App\Models\Address;
use App\Repository\BaseRepository;
use App\Traits\GridTrait;
use Illuminate\Support\Facades\Auth;
class AddressRepository extends BaseRepository
{
use GridTrait;
public static function getQuery()
{
return Address::query();
}
/**
* @param IndexRequest $request
*
* @return mixed
*/
public function search(IndexRequest $request)
{
$query = self::getAvailable();
$this->makeQueryOrdered(Address::class, $query, $request);
$perPage = $request->per_page ?? config('crud.defaultPerPage');
return $query->paginate((int) $perPage)->appends($request->all());
}
/**
* @param CreateRequest $request
*/
public function save(CreateRequest $request)
{
$model = new Address();
$request->validate($request->rules());
$fields = $request->all();
$fields['city'] = ($fields['city']) ?? '';
$model->fill($fields);
$model->service_id = Auth::user()->getCurrentServiceId();
$model->user_id = Auth::user()->id;
$model->save();
$this->updateMain($model);
}
public static function saveFirstAddress($fields, $service_id, $user)
{
$model = new Address();
$model->name = $fields['name'];
$model->country = $fields['country'];
$model->city = (isset($fields['city'])) ? $fields['city'] : '';
$model->address = $fields['physical_address'];
$model->service_id = $service_id;
$model->user_id = $user->id;
$model->main = 1;
$model->email = $user->email;
$model->phone = $user->phone;
$model->save();
}
/**
* @param UpdateRequest $request
*/
public function update(UpdateRequest $request)
{
$request->validate($request->rules());
$fields = $request->all();
$model = self::getById($request->id);
if (isset($fields['main'])) {
$upMain = ($fields['main'] && $fields['main'] <> $model->main);
}
if ($model->getOriginal('main')) {
$fields['main'] = 1;
} elseif (!isset($fields['main'])) {
$fields['main'] = 0;
}
$model->fill($fields)->update();
if (isset($upMain)) {
$this->updateMain($model);
}
}
protected function updateMain($model)
{
$model->refresh();
if ($model->main) {
Address::where('id', '<>', $model->id)
->where('main', 1)
->where('service_id', $model->service_id)
->update(['main' => 0]);
}
}
/**
* @param $id
*/
public function delete($id)
{
self::getById($id)->delete();
}
public static function getByServiceId($id)
{
return static::getAvailable()->where('service_id', $id)->orderBy('main', 'desc');
}
public static function getMainByServiceId($id)
{
return static::getAvailable()->where('service_id', $id)->where('main', 1)->first();
}
}