<?php namespace App\Repositories\Eloquent; use App\Exceptions\GeneralException; use App\Models\Currency; use App\Repositories\Contracts\CurrencyRepository; use Exception; use Illuminate\Support\Arr; use Illuminate\Support\Facades\DB; use Throwable; class EloquentCurrencyRepository extends EloquentBaseRepository implements CurrencyRepository { /** * EloquentCurrencyRepository constructor. * * @param Currency $currency */ public function __construct(Currency $currency) { parent::__construct($currency); } /** * @param array $input * * @return Currency|mixed * * @throws GeneralException */ public function store(array $input): Currency { /** @var Currency $currency */ $currency = $this->make(Arr::only($input, ['name', 'code', 'format'])); $currency->status = true; $currency->user_id = auth()->user()->id; if ( ! $this->save($currency)) { throw new GeneralException(__('locale.exceptions.something_went_wrong')); } return $currency; } /** * @param Currency $currency * * @return bool */ private function save(Currency $currency): bool { if ( ! $currency->save()) { return false; } return true; } /** * @param Currency $currency * @param array $input * * @return Currency * @throws Exception|Throwable * * @throws Exception */ public function update(Currency $currency, array $input): Currency { if ( ! $currency->update($input)) { throw new GeneralException(__('locale.exceptions.something_went_wrong')); } return $currency; } /** * @param Currency $currency * * @return bool|null * @throws Exception|Throwable * */ public function destroy(Currency $currency) { if ( ! $currency->delete()) { throw new GeneralException(__('locale.exceptions.something_went_wrong')); } return true; } /** * @param array $ids * * @return mixed * @throws Exception|Throwable * */ public function batchDestroy(array $ids): bool { DB::transaction(function () use ($ids) { // This wont call eloquent events, change to destroy if needed if ($this->query()->whereIn('uid', $ids)->delete()) { return true; } throw new GeneralException(__('locale.exceptions.something_went_wrong')); }); return true; } /** * @param array $ids * * @return mixed * @throws Exception|Throwable * */ public function batchActive(array $ids): bool { DB::transaction(function () use ($ids) { if ($this->query()->whereIn('uid', $ids) ->update(['status' => true]) ) { return true; } throw new GeneralException(__('locale.exceptions.something_went_wrong')); }); return true; } /** * @param array $ids * * @return mixed * @throws Exception|Throwable * */ public function batchDisable(array $ids): bool { DB::transaction(function () use ($ids) { if ($this->query()->whereIn('uid', $ids) ->update(['status' => false]) ) { return true; } throw new GeneralException(__('locale.exceptions.something_went_wrong')); }); return true; } }