• File: ServiceConfigController.php
  • Full Path: /var/www/imalipartnersapi/app/Http/Controllers/ServiceConfigController.php
  • Date Modified: 02/07/2023 8:01 PM
  • File size: 4.33 KB
  • MIME-type: text/x-php
  • Charset: utf-8
<?php

namespace App\Http\Controllers;

use App\Classes\TransactionGeneration;
use App\ServiceConfig;
use App\ServiceConfigAccount;
use App\TypeService;
use Illuminate\Http\Request;

class ServiceConfigController extends Controller
{
    protected $transaction;

    public function __construct()
    {
        $this->transaction = new TransactionGeneration();
    }

    public function index()
    {
        $data = ServiceConfig::query()
            ->with('serviceAccounts')->get();

        return response()->json(['data' => $data]);
    }

    public function store(Request $request)
    {
        $values = $this->validate($request, [
            'name' => 'required|string:100',
            'description' => 'required|string',
            'notification_group' => 'required|string',
            'notification_type' => 'required|string',
            'min_amount' => 'required',
            'max_amount' => 'required',
            'notification_time' => 'required|int',
        ]);


        if ($request->min_amount > $request->max_amount) {
            return response()->json(['message' => trans('min_value_up_max_value')], 400);
        } else {
            ServiceConfig::create([
                'public_id' => $this->transaction->generateID(),
                'name' => $values['name'],
                'description' => $values['description'],
                'min_amount' => $values['min_amount'],
                'max_amount' => $values['max_amount'],
                'notification_time' => $values['notification_time'],
                'notification_group' => strtolower($values['notification_group']),
                'notification_type' => strtolower($values['notification_type']),
            ]);
            return response()->json(['message' => trans('done')]);

        }
    }

    public function edit($id): \Illuminate\Http\JsonResponse
    {
        $type = ServiceConfig::where('public_id', '=', $id)
            ->with('serviceAccounts')->first();

        if ($type) {
            return response()->json($type);
        } else {
            return response()->json(['message' => trans('not_found')], 400);
        }
    }


    public function update(Request $request, $id)
    {
        $service = ServiceConfig::where('public_id', '=', $id)->first();

        if ($service) {

            $values = $this->validate($request, [
                'name' => 'required|string:100',
                'description' => 'required|string',
                'min_amount' => 'required',
                'max_amount' => 'required',
                'status' => 'required',
                'notification_time' => 'required|int',
                'notification_group' => 'required|string',
                'notification_type' => 'required|string',
            ]);

            if ($values['min_amount'] > $values['max_amount']) {
                return response()->json(['message' => trans('min_value_up_max_value')], 400);
            } else {
                ServiceConfig::where('public_id', '=', $id)
                    ->update([
                        'name' => $values['name'],
                        'status' => $values['status'],
                        'description' => $values['description'],
                        'min_amount' => $values['min_amount'],
                        'max_amount' => $values['max_amount'],
                        'notification_time' => $values['notification_time'],
                        'notification_group' => strtolower($values['notification_group']),
                        'notification_type' => strtolower($values['notification_type']),
                    ]);

                return response()->json(['message' => trans('done')]);
            }
        } else {
            return response()->json(['message' => trans('not_found')], 400);
        }
    }

    public function destroy($id): \Illuminate\Http\JsonResponse
    {
        $type = ServiceConfig::where('public_id', '=', $id)->first();

        if ($type) {

            $account = ServiceConfigAccount::where('service_config_id', '=', $type->id)->first();

            if ($account) {
                return response()->json(['message' => trans('cannot_delete')], 400);
            } else {
                $type->delete();
                return response()->json(['message' => trans('done')]);
            }
        } else
            return response()->json(['message' => trans('not_found')], 400);
    }
}