DEV Community

Cover image for No : 1 - Example Of How Not To Write Code in Laravel
Saravana Sai
Saravana Sai

Posted on

No : 1 - Example Of How Not To Write Code in Laravel

Story Behind

Hi Guys . I am Saravana Thiyagarajan a PHP developer with 1.5years on experience. I have built some decent level of apps in Laravel.

After a Long Search joined in new organization which has a CRM & other small social networking apps . I have joined a Junior PHP developer & They assigned me a task on CRM Application And That is the reason for this post .

The Sample Code - 1

 /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        //check if the user is relational manager then show selected user data else login user data
        $this->middleware('auth');
        $this->middleware(function ($request, $next) {
            $this->login_user_id = (auth()->user()->roles->contains('slug', 'relational-manager') && auth()->user()->selected_realtor) ? auth()->user()->selected_realtor->realtor_id : auth()->user()->id;
            $this->login_user = User::where('id',$this->login_user_id)->first();

            return $next($request);
        });
    }
Enter fullscreen mode Exit fullscreen mode

Try to understand what is happening is constructor

In whole application all controllers are simply copy pasted same the code was written by my Team Lead.

Solution - 1

Just create a middleware & assign on routes file for all the enpoints

Example

Route::group(['middleware'=>'xxxx'],function()
{
    Route::get('payments',PaymentsController::class);
    Route::get('transactions',TransactionsController::class);

});

Enter fullscreen mode Exit fullscreen mode

Lets see one another function to in that same controller.
Plz forgive me . Just take a look at the sample code. This how the whole project code is done.

Its just for example how not to code

The Sample Code - 2

/**
     * XXXXXXX transfer.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function XXXXXXXXXX_new(Request $request)
    { 
        if (!auth()->user()->canAccess('xxxxxxx')) {
            return response()->json([
                'status' => 'error',
                'message'=> "Permission denied"
            ]);
        }

        $customMessages = [
            'required' => 'The :attribute field can not be empty',
            'array' =>'The :attribute field must be array'
        ];

        $validator = Validator::make($request->all(),[
            'xxxxxxx' =>'required',
            'xxxxxx' => 'nullable|string',
            'xxxxxx' => 'nullable',
            'xxxxxx' => 'nullable|array',
            'id' => "required_if:select_all,==,false|array",
            "xxxxxxx" => 'nullable',
        ],$customMessages);

        if($validator->fails()){
            return response()->json([
                'ststus'=>'error',
                'message' =>implode(',', $validator->errors()->all())
            ]);
        }

        $to = $request->xxxxxxx;

        $transfer = [
            'status' => false,
            'lead_data' => []
        ];


        $filter_info_test = $request->xxxxxxx;
        $filter_info = json_decode($filter_info_test, true);
        if($request->filled('select_all')){
            if($request->select_all == "true"){
                if($request->uncheck){
                    if(count($request->uncheck) > 0){
                        //remove unselected leads

                        $xxxx = Lxxxx::where(function($query){
                            if(auth()->user()->hasRole('brokerage')){
                                $query->whereHas('bbbbbbbbb',function($query){
                                    $query->whereHas('rrrrrrrr',function($qu){
                                        $qu->where('sssss', 'brokerage');
                                    });
                                });
                            }
                            else{
                                $query->where('owner',$this->login_user_id)->orWhereHas('tttttt',function($query1){
                                    $query1->where('tttttt',$this->login_user_id);
                                });
                            }
                        })->whereNotIn('id',$request->uuuuuuu);

                        if(!empty($infooo)){

                            if(array_key_exists('search', $infooo) == true){
                                $ls->where(function($query)use($request, $filter_info){
                                    $query->where('name', 'LIKE', '%'.$filter_info['search'] .'%');

                                });
                            }
                            if(array_key_exists('phone', $filter_info) == true){
                                $leads->whereHas('nono', function($query) use($request, $filter_info) {
                                    $query->where('label', $filter_info['phone']) ;
                                });
                            }

                            if(array_key_exists('email', $filter) == true){
                                $leads->whereHas('email_address', function($query1) use($request, $filter_info) {
                                    $query1->where('label', $filter_info['email']);
                                });
                            }

                            if(array_key_exists('source', $filter_info) == true){
                                $leads->whereHas('sources',function($query) use($request, $filter_info) {
                                    $query->whereIn('id',json_decode($filter_info['source']));
                                });
                            }

                            if(array_key_exists('stage', $filter_info) == true){
                                $leads->whereHas('stages',function($query) use($request, $filter_info) {
                                    $query->whereIn('id',json_decode($filter_info['stage']));
                                });
                            }

                            if(array_key_exists('tag', $filter_info) == true){
                                $leads->whereHas('tags_leads',function($query) use($request, $filter_info) {
                                    $query->whereIn('lead_tag_id',json_decode($filter_info['tg']));
                                });
                            }

                            if(array_key_exists('expert', $filter_info) == true){
                                $leads->whereHas('transaction',function($query) use($request, $filter_info) {
                                    $query->whereIn('to',json_decode($filter_info['expert']));
                                })->orWhere(function($query1) use($request, $filter_info) {
                                    $query1->doesntHave('transaction')->whereIn('owner',json_decode($filter_info['expert']));
                                });
                            }
                        }



                        $leads_id = $leads->pluck('id');
                    }
                    else{
                        //work with all leads

                        $leads = Lead::where(function($query){
                            if(auth()->user()->hasRole('brokerage')){
                                $query->whereHas('brokerage_user',function($query){
                                    $query->whereHas('roles',function($qu){
                                        $qu->where('slug', 'brokerage');
                                    });
                                });
                            }
                            else{
                                $query->where('owner',$this->login_user_id)->orWhereHas('transaction',function($query1){
                                    $query1->where('to',$this->login_user_id);
                                });
                            }
                        });

                        if(!empty($filter_info)){

                            if(array_key_exists('search', $filter_info) == true){
                                $leads->where(function($query)use($request, $filter_info){
                                    $query->where('name', 'LIKE', '%'.$filter_info['search'] .'%');

                                });
                            }
                            if(array_key_exists('phone', $filter_info) == true){
                                $leads->whereHas('phone_number', function($query) use($request, $filter_info) {
                                    $query->where('label', $filter_info['phone']) ;
                                });
                            }

                            if(array_key_exists('email', $filter_info) == true){
                                $leads->whereHas('email_address', function($query1) use($request, $filter_info) {
                                    $query1->where('label', $filter_info['email']);
                                });
                            }

                            if(array_key_exists('source', $filter_info) == true){
                                $leads->whereHas('sources',function($query) use($request, $filter_info) {
                                    $query->whereIn('id',json_decode($filter_info['source']));
                                });
                            }

                            if(array_key_exists('stage', $filter_info) == true){
                                $leads->whereHas('stages',function($query) use($request, $filter_info) {
                                    $query->whereIn('id',json_decode($filter_info['stage']));
                                });
                            }

                            if(array_key_exists('tag', $filter_info) == true){
                                $leads->whereHas('tags_leads',function($query) use($request, $filter_info) {
                                    $query->whereIn('lead_tag_id',json_decode($filter_info['tg']));
                                });
                            }

                            if(array_key_exists('expert', $filter_info) == true){
                                $leads->whereHas('transaction',function($query) use($request, $filter_info) {
                                    $query->whereIn('to',json_decode($filter_info['expert']));
                                })->orWhere(function($query1) use($request, $filter_info) {
                                    $query1->doesntHave('transaction')->whereIn('owner',json_decode($filter_info['expert']));
                                });
                            }
                        }


                        $leads_id = $leads->pluck('id');
                    }
                }else{
                    $leads = Lead::where(function($query){
                        if(auth()->user()->hasRole('brokerage')){
                            $query->whereHas('brokerage_user',function($query){
                                $query->whereHas('roles',function($qu){
                                    $qu->where('slug', 'brokerage');
                                });
                            });
                        }
                        else{
                            $query->where('owner',$this->login_user_id)->orWhereHas('transaction',function($query1){
                                $query1->where('to',$this->login_user_id);
                            });
                        }
                    });

                    if(!empty($filter_info)){

                        if(array_key_exists('search', $filter_info) == true){
                            $leads->where(function($query)use($request, $filter_info){
                                $query->where('name', 'LIKE', '%'.$filter_info['search'] .'%');

                            });
                        }
                        if(array_key_exists('phone', $filter_info) == true){
                            $leads->whereHas('phone_number', function($query) use($request, $filter_info) {
                                $query->where('label', $filter_info['phone']) ;
                            });
                        }

                        if(array_key_exists('email', $filter_info) == true){
                            $leads->whereHas('email_address', function($query1) use($request, $filter_info) {
                                $query1->where('label', $filter_info['email']);
                            });
                        }

                        if(array_key_exists('source', $filter_info) == true){
                            $leads->whereHas('sources',function($query) use($request, $filter_info) {
                                $query->whereIn('id',json_decode($filter_info['source']));
                            });
                        }

                        if(array_key_exists('stage', $filter_info) == true){
                            $leads->whereHas('stages',function($query) use($request, $filter_info) {
                                $query->whereIn('id',json_decode($filter_info['stage']));
                            });
                        }

                        if(array_key_exists('tag', $filter_info) == true){
                            $leads->whereHas('tags_leads',function($query) use($request, $filter_info) {
                                $query->whereIn('lead_tag_id',json_decode($filter_info['tg']));
                            });
                        }

                        if(array_key_exists('expert', $filter_info) == true){
                            $leads->whereHas('transaction',function($query) use($request, $filter_info) {
                                $query->whereIn('to',json_decode($filter_info['expert']));
                            })->orWhere(function($query1) use($request, $filter_info) {
                                $query1->doesntHave('transaction')->whereIn('owner',json_decode($filter_info['expert']));
                            });
                        }
                    }

                    $leads_id = $leads->pluck('id');
                }
            }
            else{
                //use old code
                $leads = Lead::where(function($query){
                    if(auth()->user()->hasRole('brokerage')){
                        $query->whereHas('brokerage_user',function($query){
                            $query->whereHas('roles',function($qu){
                                $qu->where('slug', 'brokerage');
                            });
                        });
                    }
                    else{
                        $query->where('owner',$this->login_user_id)->orWhereHas('transaction',function($query1){
                            $query1->where('to',$this->login_user_id);
                        });
                    }
                })->whereIn('id',$request->id);

                if(!empty($filter_info)){

                    if(array_key_exists('search', $filter_info) == true){
                        $leads->where(function($query)use($request, $filter_info){
                            $query->where('name', 'LIKE', '%'.$filter_info['search'] .'%');

                        });
                    }
                    if(array_key_exists('phone', $filter_info) == true){
                        $leads->whereHas('phone_number', function($query) use($request, $filter_info) {
                            $query->where('label', $filter_info['phone']) ;
                        });
                    }

                    if(array_key_exists('email', $filter_info) == true){
                        $leads->whereHas('email_address', function($query1) use($request, $filter_info) {
                            $query1->where('label', $filter_info['email']);
                        });
                    }

                    if(array_key_exists('source', $filter_info) == true){
                        $leads->whereHas('sources',function($query) use($request, $filter_info) {
                            $query->whereIn('id',json_decode($filter_info['source']));
                        });
                    }

                    if(array_key_exists('stage', $filter_info) == true){
                        $leads->whereHas('stages',function($query) use($request, $filter_info) {
                            $query->whereIn('id',json_decode($filter_info['stage']));
                        });
                    }

                    if(array_key_exists('tag', $filter_info) == true){
                        $leads->whereHas('tags_leads',function($query) use($request, $filter_info) {
                            $query->whereIn('lead_tag_id',json_decode($filter_info['tg']));
                        });
                    }

                    if(array_key_exists('expert', $filter_info) == true){
                        $leads->whereHas('transaction',function($query) use($request, $filter_info) {
                            $query->whereIn('to',json_decode($filter_info['expert']));
                        })->orWhere(function($query1) use($request, $filter_info) {
                            $query1->doesntHave('transaction')->whereIn('owner',json_decode($filter_info['expert']));
                        });
                    }
                }

                $leads_id = $leads->pluck('id');
            }
        } else{
            //use old code
            $leads = Lead::where(function($query){
                if(auth()->user()->hasRole('brokerage')){
                    $query->whereHas('brokerage_user',function($query){
                        $query->whereHas('roles',function($qu){
                            $qu->where('slug', 'brokerage');
                        });
                    });
                }
                else{
                    $query->where('owner',$this->login_user_id)->orWhereHas('transaction',function($query1){
                        $query1->where('to',$this->login_user_id);
                    });
                }
            })->whereIn('id',$request->id);

            if(!empty($filter_info)){

                if(array_key_exists('search', $filter_info) == true){
                    $leads->where(function($query)use($request, $filter_info){
                        $query->where('name', 'LIKE', '%'.$filter_info['search'] .'%');

                    });
                }
                if(array_key_exists('phone', $filter_info) == true){
                    $leads->whereHas('phone_number', function($query) use($request, $filter_info) {
                        $query->where('label', $filter_info['phone']) ;
                    });
                }

                if(array_key_exists('email', $filter_info) == true){
                    $leads->whereHas('email_address', function($query1) use($request, $filter_info) {
                        $query1->where('label', $filter_info['email']);
                    });
                }

                if(array_key_exists('source', $filter_info) == true){
                    $leads->whereHas('sources',function($query) use($request, $filter_info) {
                        $query->whereIn('id',json_decode($filter_info['source']));
                    });
                }

                if(array_key_exists('stage', $filter_info) == true){
                    $leads->whereHas('stages',function($query) use($request, $filter_info) {
                        $query->whereIn('id',json_decode($filter_info['stage']));
                    });
                }

                if(array_key_exists('tag', $filter_info) == true){
                    $leads->whereHas('tags_leads',function($query) use($request, $filter_info) {
                        $query->whereIn('lead_tag_id',json_decode($filter_info['tg']));
                    });
                }

                if(array_key_exists('expert', $filter_info) == true){
                    $leads->whereHas('transaction',function($query) use($request, $filter_info) {
                        $query->whereIn('to',json_decode($filter_info['expert']));
                    })->orWhere(function($query1) use($request, $filter_info) {
                        $query1->doesntHave('transaction')->whereIn('owner',json_decode($filter_info['expert']));
                    });
                }
            }

            $leads_id = $leads->pluck('id');
        }

        foreach($leads_id as $id){

            $lead = Lead::where('id',$id)->first();
            if($lead){
                $from = empty($lead->transaction) ? config('envs.super_user_id') : $lead->transaction->to;
                $leda_user = User::where('id',$lead->user_id)->first();
                if(empty($lead->transaction)||$from != $to){

                    $lead_transfer_data = [
                        'lead_id' => $id,
                        'from' => $from,
                        'to' => $to,
                        "assign_type" => "Manual",
                        'user_id' => auth()->user()->id,
                        "reason" => $request->reason ?? null
                    ];
                    LeadTransfer::create($lead_transfer_data);  

                    $user_from = User::where('id',$from)->first();
                    $user_to = User::where('id',$to)->first();

                    if($leda_user){
                        $leda_user->update(['expert'=>$to]);

                        $transfer_data = [
                            'lead_id' => $lead->user_id,
                            'realtor_from' => $from,
                            'realtor_to' => $to,
                            'relation_manager_from' => optional($user_from->relational_manager)->relational_manager_id,
                            'relation_manager_to' => (!empty($user_to->relational_manager) && $user_to->relational_manager->permission->contains('slug', 'chat-auto-join')) ? optional($user_to->relational_manager)->relational_manager_id : null,
                        ];

                        $this->chatTransferCall($transfer_data);
                    }

                    //send notification

                    $transfer['status'] = true;
                    $transfer['lead_data'][] = $lead;

                    //add transaction note
                    $data22['lead_id'] = $id;
                    $data22['content'] = ucfirst(auth()->user()->name)." transferred the lead from ". $user_from->name." to ".$user_to->name .(!empty($request->reason) ? " due to ".$request->reason."." : "." );
                    $data22['user_id'] = auth()->user()->id;
                    $data22['type'] = "Automatic";
                    Note::create($data22);   

                }
            }
        }

        if($transfer['status']){
            if(auth()->user()->id != $to){
                //send notification

                $details = [
                    'body' => ucfirst(auth()->user()->name).' transferred some leads',
                    'data' => $transfer['lead_data'],
                    'description' => ucfirst(auth()->user()->name).' transferred some leads',
                    'subject' => 'Lead transfer - '.ucfirst(auth()->user()->name),
                    'user' => $user_to,
                    'lead_id' => $transfer['lead_data'][0]->id,
                    'lead_name' => $transfer['lead_data'][0]->name,
                    'notificationFor' =>'Enquiry',
                    'lead_email' => $transfer['lead_data'][0]->email_address->email,
                    'lead_phone' => $transfer['lead_data'][0]->phone_number->number,
                    'lead_source'=>$transfer['lead_data'][0]->sources->name,
                    'lead_stage' =>$transfer['lead_data'][0]->stages->name
                ];

                Notification::send($user_to, new EnquiryNotification($details));
            }
        }


        return response()->json([
            'status' => 'success',
            'message' => 'Leads transferred successfully'
        ]);

    }

Enter fullscreen mode Exit fullscreen mode

For Solution


I post it on next post according to the response for this post.

just feel free to share your experience like this in comments section.

Just Share your thoughts on this & give a Tip for me as a Junior developer what can i do in this Situation.


like share & comment

Top comments (2)

Collapse
 
dima2306 profile image
Dimitri Simonishvili

Oh crap. I've not read all the code but it was enough to understand what spaghetti code is.

Unfortunately, currently, where I work (and I'm leaving soon), I have an exactly similar situation: middleware in a controller constructor, 2-6K lines of code, nested ifs, and so on.

What can you do? Mostly nothing, of course, you can try refactor existing functionality without affecting the ending result, try to optimize where you can. Every developer's purpose is to write better code where you see it can be improved.

I'll recommend you leave ASAP and find jobs where are better projects. You can stay for a while, refactoring such a project will be good for improving your skills, just don't put too much energy into it and leave your job when you feel it's right and enough for your experience.

Collapse
 
saravanasai profile image
Saravana Sai • Edited

Yes i have resigned the job . not only this issue my team lead missing the code which i done done and merged it .. then asked me to work on that again . so i just sent a mail to HR for resignation.