The code, provided here, appears to be a Laravel controller method for user registration. This method is typically used to handle user registration requests, validate the incoming data, create a new user in the database, and return a response with user information and an access token upon successful registration.

Here’s a breakdown of what this code does:

  1. It starts by validating the incoming data using Laravel’s built-in Validator class. It checks if the provided data meets the defined validation rules for fields like ‘name,’ ’email,’ ‘phone,’ and ‘password.’
  2. If the validation fails, it returns a JSON response with an error message containing validation errors.
  3. If the validation passes, it proceeds to create a new user in the database. It creates a user record in the ‘users’ table with the provided user details, including a hashed password.
  4. It also creates a related customer details record in the ‘customer_details’ table.
  5. It generates an access token for the newly registered user.
  6. After creating the user and customer details, it retrieves the user and customer details from the database to construct a response.
  7. Finally, it returns a JSON response with a success message, access token, and user information.

PHP
public function register(Request $request)
{
$validator = Validator::make($request->all(), [
        'name' => 'required|string|max:255',
        'email' => 'required|string|email|max:255|unique:users',
        'phone' => 'required|string|max:9|unique:customer_details',
        'password' => 'required|string|min:8',

    ]);

    if ($validator->fails()) {
        $response = [
            'code' => 200,
            'Status' => false,
            'Message' => $validator->errors()->first(),
        ];
        return response()->json($response, 200);
    }

    $user = User::create([
        'name' => $request->name,
        'email' => $request->email,
        'password' => Hash::make($request->password),
        'role_id' => 3,
        'fcm_token' => $request->fcm_token,
        'device_token' => $request->device_token,
        'phone_number' => $phone_number,
    ]);

    $userDetails = CustomerDetails::create([
        'user_id' => $user->id,
        'dob' => $request->dob,
        'age' => $request->age,
        'gender' => $request->gender,
        'phone' => $phone_number,
        'image_path' => '/upload/users_images/no_image.jpg',
        'firstname' => $request->firstname,
        'lastname' => $request->lastname,
        'address_line1' => $request->address_line1,
        'address_line2' => $request->address_line2,
        'address_city' => $request->address_city,
        'address_state' => $request->address_state,
        'address_country' => $request->address_country,
        'address_pincode' => $request->address_pincode,

    ]);


    $token = $user->createToken('auth_token')->plainTextToken;
    $user = User::select('id', 'name', 'email')->where('id', $user->id)->first();
    $userDetails = CustomerDetails::where('user_id', $user->id)->first();
    $userdata = [];
    $userdata['id'] = $user->id;
    $userdata['name'] = $user->name;
    $userdata['email'] = $user->email;
    $userdata['firstname'] = $userDetails->firstname;
    $userdata['lastname'] = $userDetails->lastname;
    $userdata['gender'] = $userDetails->gender;
    $userdata['phone'] = $userDetails->phone;
    $userdata['age'] = $userDetails->age;
    $userdata['address_line1'] = $userDetails->address_line1;
    $userdata['address_line2'] = $userDetails->address_line2;
    $userdata['address_city'] = $userDetails->address_city;
    $userdata['address_state'] = $userDetails->address_state;
    $userdata['address_country'] = $userDetails->address_country;
    $userdata['address_pincode'] = $userDetails->address_pincode;
    $userdata['image_path'] = $userDetails->image_path;
    

    return response()->json([
        'code' => 200,
        "Status" => true,
        "Message" => 'Registered Sucessfully',
        "access_token" => $token,
        "data" => $userdata,
    ], 200);
}

It’s a good practice to use try-catch blocks to handle exceptions in the code. Here’s the code refactored with try-catch blocks to handle exceptions:

Certainly, it’s a good practice to use try-catch blocks to handle exceptions in your code. Here’s the code refactored with try-catch blocks to handle exceptions:

PHP
public function register(Request $request)
{
    try {
        $validatedData = $request->validate([
            'name' => 'required|string|max:255',
            'email' => 'required|string|email|max:255|unique:users',
            'phone' => 'required|string|max:9|unique:customer_details',
            'password' => 'required|string|min:8',
            'dob' => 'required',
            'age' => 'required|integer',
            'gender' => 'required|in:Male,Female,Other',
        ]);

        $user = null;

        // Attempt to create the user within a transaction
        DB::beginTransaction();

        try {
            $user = User::create([
                'name' => $validatedData['name'],
                'email' => $validatedData['email'],
                'password' => Hash::make($validatedData['password']),
                'role_id' => 3,
                'fcm_token' => $request->input('fcm_token'),
                'device_token' => $request->input('device_token'),
                'phone_number' => $validatedData['phone'],
            ]);

            $user->customerDetails()->create([
                'dob' => $validatedData['dob'],
                'age' => $validatedData['age'],
                'gender' => $validatedData['gender'],
                'phone' => $validatedData['phone'],
                'image_path' => '/upload/users_images/no_image.jpg',
                'firstname' => $request->input('firstname'),
                'lastname' => $request->input('lastname'),
                'address_line1' => $request->input('address_line1'),
                'address_line2' => $request->input('address_line2'),
                'address_city' => $request->input('address_city'),
                'address_state' => $request->input('address_state'),
                'address_country' => $request->input('address_country'),
                'address_pincode' => $request->input('address_pincode'),
            ]);

            DB::commit();
        } catch (Exception $e) {
            DB::rollBack();
            throw $e; // Re-throw the exception
        }

        $token = $user->createToken('auth_token')->plainTextToken;
        $user->load('customerDetails');

        return response()->json([
            'code' => 200,
            'Status' => true,
            'Message' => 'Registered Successfully',
            'access_token' => $token,
            'data' => [
                'id' => $user->id,
                'name' => $user->name,
                'email' => $user->email,
                'firstname' => $user->customerDetails->firstname,
                'lastname' => $user->customerDetails->lastname,
                'gender' => $user->customerDetails->gender,
                'phone' => $user->customerDetails->phone,
                'age' => $user->customerDetails->age,
                'address_line1' => $user->customerDetails->address_line1,
                'address_line2' => $user->customerDetails->address_line2,
                'address_city' => $user->customerDetails->address_city,
                'address_state' => $user->customerDetails->address_state,
                'address_country' => $user->customerDetails->address_country,
                'address_pincode' => $user->customerDetails->address_pincode,
                'image_path' => $user->customerDetails->image_path,
                'productsincart' => $user->cartProducts()->count(),
            ],
        ], 200);
    } catch (ValidationException $e) {
        // Handle validation exception
        $response = [
            'code' => 400,
            'Status' => false,
            'Message' => $e->validator->getMessageBag()->first(),
        ];
        return response()->json($response, 400);
    } catch (Exception $e) {
        // Handle other exceptions
        $response = [
            'code' => 500,
            'Status' => false,
            'Message' => 'An error occurred while processing the request.',
        ];
        return response()->json($response, 500);
    }
}

In this refactored code: – We wrap the entire code in a `try` block to handle exceptions. – We use a nested `try-catch` block to handle database-related exceptions and roll back the transaction if an exception occurs during user and customer detail creation. We re-throw the exception after rolling back to ensure it’s caught by the outer `catch` block. – We handle validation exceptions using `ValidationException` and other exceptions using a generic `Exception` catch block. – We provide appropriate HTTP response codes and error messages based on the type of exception encountered.

Leave a comment

Your email address will not be published. Required fields are marked *

Translate ยป