PHP Classes

File: server/app/Http/Controllers/PaymentController.php

Recommend this page to a friend!
  Classes of mohammad anzawi   PHP Wallet API and Application   server/app/Http/Controllers/PaymentController.php   Download  
File: server/app/Http/Controllers/PaymentController.php
Role: Class source
Content type: text/plain
Description: Class source
Class: PHP Wallet API and Application
Application to manage a wallet by calling an API
Author: By
Last change:
Date: 2 years ago
Size: 4,042 bytes
 

Contents

Class file image Download
<?php

namespace App\Http\Controllers;

use
App\Models\Payment;
use
App\Transformers\PaymentTransformer;
use
Illuminate\Http\Request;
use
Illuminate\Support\Facades\Storage;
use
Illuminate\Support\Facades\Validator;
use
Illuminate\Support\Str;

class
PaymentController extends Controller
{
    public function
__construct()
    {
       
// all transaction need admin permissions except (index)
       
$this->middleware(['admin'])->except(['index']);
    }
   
/**
     * Get all payment methods
     * @return \Illuminate\Http\JsonResponse
     */
   
public function index()
    {
        return
response()->json(fractal()
            ->
collection(Payment::all())
            ->
transformWith(new PaymentTransformer())
            ->
toArray()['data']);
    }

   
/**
     * create new payment
     * @param Request $request
     * @return \Illuminate\Http\JsonResponse
     */
   
public function create(Request $request)
    {
       
// validate request
       
$validator = $this->validateRequest($request);

        if(
$validator->fails()){
            return
$this->sendError($validator->errors(), 422);
        }

       
// create new payment method
       
$values = $request->all();
       
$values['currencies'] = json_encode(explode(',', $values['currencies']));
        unset(
$values['errors']); // remove errors from requested data
        /*
         * add slug columns
         * we can generate uuid for slug from client side
         * but I want to generate it from server side its just my preferred
         */
       
$values['slug'] = Str::uuid();
       
// create payment method (insert into database)
       
$data = Payment::create($values);

       
// send created payment method to client-app
       
return response()->json(fractal()
            ->
item($data)
            ->
transformWith(new PaymentTransformer())
            ->
toArray()['data']);
    }

   
/**
     * upload image for the payment method
     * @param Request $request
     * @param Payment $payment
     * @return \Illuminate\Http\JsonResponse
     */
   
public function update(Request $request, Payment $payment)
    {
       
// validate request
       
$validator = $this->validateRequest($request);

        if(
$validator->fails()){
            return
$this->sendError( $validator->errors(), 422);
        }

       
$values = $request->all();

        if (!
is_array($values['currencies']))
           
$values['currencies'] = json_encode(explode(',', $values['currencies']));
       
// update payment method
       
$payment->update($values);

        return
response()->json(fractal()
            ->
item($payment)
            ->
transformWith(new PaymentTransformer())
            ->
toArray()['data']);
    }

   
/**
     * delete payment
     * @param Payment $payment
     * @return \Illuminate\Http\JsonResponse
     */
   
public function delete(Payment $payment)
    {
       
$payment->delete();

        return
$this->sendResponse([]);
    }

   
/**
     * upload payment method image
     * @param Request $request
     */
   
public function upload(Request $request)
    {
       
$uploadedFile = $request->file('File');
       
$filename = time().$uploadedFile->getClientOriginalName();

       
Storage::disk('local')->putFileAs(
           
'public/images/'. $filename,
           
$uploadedFile,
           
$filename
       
);

        return
response()->json($filename);
    }

   
/**
     * validation input
     * @param Request $request
     * @return \Illuminate\Contracts\Validation\Validator
     */
   
private function validateRequest(Request $request): \Illuminate\Contracts\Validation\Validator
   
{
        return
Validator::make($request->all(), [
           
'name' => 'required',
           
'currencies' => 'required',
           
'min_deposit' => 'required|numeric|min:0',
           
'max_deposit' => 'required|numeric',
           
'max_withdrawal' => 'required|numeric',
           
'min_withdrawal' => 'required|numeric|min:0',
           
'img' => 'required',
        ]);
    }
}