• File: StoreAmountGenerationController.php
  • Full Path: /var/www/imaliapi/app/Http/Controllers/StoreAmountGenerationController.php
  • Date Modified: 04/15/2024 8:53 PM
  • File size: 4.26 KB
  • MIME-type: text/x-php
  • Charset: utf-8
<?php

namespace App\Http\Controllers;

use App\Store;
use App\StoreAmountGeneration;
use Illuminate\Http\Request;
use Ramsey\Uuid\Uuid;
use DB;

class StoreAmountGenerationController extends Controller
{

    protected $request;
    protected $store;
    protected $response;

    public function generateTransaction(Request $request)
    {
        $this->validate($request, [
            'amount' => 'required',
            'store_id' => 'required'
        ], [
            'store_id.required' => 'O Campo store_id é Obrigatório',
            'amount.required' => 'O Campo amount é Obrigatório',
        ]);

        if ($request->isJson()) {
            $checkStore = Store::query()
                ->join('user_clients', 'user_clients.id', '=', 'stores.user_client_id')
                ->join('merchant_accounts', 'merchant_accounts.id', '=', 'stores.merchant_account_id')
                ->where('stores.public_id', $request->store_id)
                ->where('stores.user_client_id', $request->user()->id)
                ->select('stores.*', 'merchant_accounts.institution')
                ->first();

            if ($checkStore) {
                if (is_numeric($request->amount)) {
                    $res = StoreAmountGeneration::create([
                        'transaction' => Uuid::uuid4(),
                        'amount' => $request->amount,
                        'store_id' => $checkStore->id,
                        'user_client_id' => $request->user()->id
                    ]);
                    return response()->json(['message' => 'Transacção Gerada com Sucesso', 'transaction' => $res->transaction, 'account_number' => $checkStore->account_number, 'address_store' => $checkStore->address, 'institution' => $checkStore->institution], 201);
                } else {
                    return response()->json(['message' => 'Introduza um montante válido'], 400);
                }
            } else
                return response()->json(['message' => 'Loja Inválida'], 400);

        } else {
            return response()->json(['message' => 'Erro nos dados'], 400);
        }
    }

    public function generateTransactionStore(Request $request)
    {
        $this->validate($request, [
            'amount' => 'required',
            'store_id' => 'required'
        ], [
            'store_id.required' => 'O Campo store_id é Obrigatório',
            'amount.required' => 'O Campo amount é Obrigatório',
        ]);
        $checkStore = Store::query()
            ->join('merchant_accounts', 'merchant_accounts.id', '=', 'stores.merchant_account_id')
            ->where('stores.id', '=', $request->user()->id)
            ->select('stores.*', 'merchant_accounts.institution')
            ->first();

        if ($checkStore) {

            if (is_numeric($request->amount)) {

                $this->request = $request;
                $this->store = $checkStore;

                DB::transaction(function () {

                    $transaction = Uuid::uuid4();
                    DB::table('payments')->insert([
                        'transaction_id' => $transaction,
                        'amount' => $this->request->amount,
                        'store_id' => $this->store->id,
                        'firebase_token' => $this->request->firebase_token,
                        'status' => 'pending',
                        'estado' => 'pending',
                        'created_at' => now(),
                        'updated_at' => now()
                    ]);

                    $res = DB::table('payments')->where('transaction_id', $transaction)->first();

                    $this->response = $res;

                }, 2);
                return response()->json(['message' => trans('transaction_generated'), 'transaction' => $this->response->transaction_id, 'account_number' => $checkStore->account_number, 'address_store' => $checkStore->address, 'institution' => $checkStore->institution, 'firebase_token' => $this->response->firebase_token], 201);
            } else {
                return response()->json(['message' => trans('insert_valid_amount')], 400);
            }
        } else
            return response()->json(['message' => trans('invalid_store')], 400);

    }
}