كود سلسلة دروس resful api

كود سلسلة دروس resful api

الكود الخاص ب PostsController
والكود الخاص ب ApiResponseTrait
الذي تم برمجته في سلسله دروس resful api

<?php
namespace App\Http\Controllers\Api;

use Illuminate\Support\Facades\Validator;

trait  ApiResponseTrait{

    public $paginateNumber = 10;

    /*
     * [
     *  'data' =>
     *  'status' => true , false
     *  'error' => ''
     * ]
     */

    public function apiResponse($data = null , $error = null , $code = 200){

        $array = [
            'data' => $data,
            'status' => in_array($code , $this->successCode()) ? true : false,
            'error' => $error
        ];

        return response($array , $code);

    }

    public function successCode(){
        return [
            200 , 201 , 202
        ];
    }

    public function createdResponse($data){
        return $this->apiResponse($data, null, 201);
    }

    public function deleteResponse(){
        return $this->apiResponse(true, null, 200);
    }


    public function notFoundResponse(){
        return $this->apiResponse(null, 'not found !', 404);
    }

    public function unKnowError(){
        return $this->apiResponse(null, 'Un know error', 520);
    }

    public function apiValidation($request, $array){

        $validate = Validator::make($request->all() , $array);

        if($validate->fails()){
            return $this->apiResponse(null, $validate->errors(), 422);
        }

    }

}


////// post controller 

<?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use App\Http\Resources\PostResource;
use App\Post;
use Illuminate\Http\Request;
use Illuminate\Http\Response;


class PostsController extends Controller
{

    use ApiResponseTrait;

    public function index()
    {
        $posts = PostResource::collection(Post::paginate($this->paginateNumber));
        return $this->apiResponse($posts);
    }

    public function show($id)
    {
        $post = Post::find($id);
        if ($post) {
            return $this->returnSuccessPost($post);
        }
        return $this->notFoundResponse();
    }

    public function delete($id)
    {
        $post = Post::find($id);
        if ($post) {
            $post->delete();
            return $this->deleteResponse();
        }
        return $this->notFoundResponse();
    }

    public function store(Request $request)
    {
        $validation = $this->validation($request);

        if($validation instanceof Response){
            return $validation;
        }

        $post = Post::create($request->all());

        if ($post) {
            return $this->createdResponse(new PostResource($post));
        }

        $this->unKnowError();
    }

    public function update($id , Request $request){

        $validation = $this->validation($request);

        if($validation instanceof Response){
            return $validation;
        }

        $post = Post::find($id);

        if (!$post) {
            return $this->notFoundResponse();
        }

        $post->update($request->all());

        if ($post) {
            return $this->returnSuccessPost($post);
        }
        $this->unKnowError();
    }

    public function validation($request){
        return $this->apiValidation($request , [
            'title' => 'required|min:3|max:191',
            'body' => 'required|min:10',
        ]);
    }

    public function returnSuccessPost($post){
        return $this->apiResponse(new PostResource($post));
    }


}


0 التعليقات


    لا يوجد تعليقات حتي الان

اضف تعليق


يجب ان يكون لديك حساب في الموقع تسجيل الدخول او تسجيل عضوية جديدة

خدمات ويب الفريق