GOOD SHELL MAS BOY
Server: Apache/2.4.52 (Ubuntu)
System: Linux vmi1836763.contaboserver.net 5.15.0-130-generic #140-Ubuntu SMP Wed Dec 18 17:59:53 UTC 2024 x86_64
User: www-data (33)
PHP: 8.4.10
Disabled: NONE
Upload Files
File: /var/www/api.ayokah.co.uk/app/Http/Controllers/Profile/UpdateProfile.php
<?php

namespace App\Http\Controllers\Profile;

use App\Models\User;
use App\Models\Seller;
use Illuminate\Support\Str;
use Illuminate\Http\Request;
use App\Services\ActivityLogger;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Hash;
use Illuminate\Validation\ValidationException;

class UpdateProfile extends Controller
{
    public function updateProfile(Request $request)
    {
        try {
            $validatedData = $request->validate([
                'user_id' => ['required', 'exists:users,id'],
                'name' => ['nullable', 'string'],
                'lastname' => ['nullable', 'string'],
                'phone' => ['nullable', 'numeric'],
            ]);
        } catch (ValidationException $e) {
            return response()->json(['status' => 'error', 'message' => $e->getMessage()], 422);
        }

        try {
            $user = User::find($validatedData['user_id']);
            // Update user's profile information
            $user->name = $validatedData['name'];
            if ($request->has('email')) {
                unset($validatedData['email']);
            }
            $user->phone = $validatedData['phone'];
            $user->lastname = $validatedData['lastname'];
            $user->save();
            return response()->json(['status' => 'success', 'message' => 'Profile updated successfully.', 'data' => $user], 200);
        } catch (\Exception $th) {
            return response()->json(['status' => 'error', 'message' => 'Profile not updated successfully.', 'data' => $th->getMessage()], 400);
        }
    }

    public function UpdatebankDetail(Request $request)
    {
        try {
            $validatedData = $request->validate([
                'shop_id' => ['required', 'exists:sellers,id'],
                'sort_code' => ['nullable', 'string'],
                'account_no' => ['nullable', 'numeric'],
                'account_name' => ['nullable', 'string'],
                'bank_name' => ['nullable', 'string'],
                'device_name' => ['required', 'string'],
            ]);

            $seller = Seller::find($validatedData['shop_id']);
            // Update seller's profile information
            if ($seller) {
                $seller->sort_code = $validatedData['sort_code'];
                $seller->account_no = $validatedData['account_no'];
                $seller->account_name = $validatedData['account_name'];
                $seller->bank_name = $validatedData['bank_name'];
                $seller->save();
                // Log the user activity
                $device = $validatedData['device_name'];
                $activityLogger = app(ActivityLogger::class);
                $clientIp = request()->ip();
                $activityLogger->log('Seller update bank detail from mobile app  (API)', $clientIp, $seller->user_id, $seller->bank_name, $device);

                return response()->json(['status' => 'success', 'message' => 'Bank detail updated successfully.', 'data' => $seller], 200);
            } else {
                return response()->json(['status' => 'error', 'message' => 'Seller Shop Id not found',], 400);
            }
        } catch (\Exception $th) {
            info($th->getMessage());
            return response()->json(['status' => 'error', 'message' => 'Bank detail not updated successfully.', 'data' => $th->getMessage()], 400);
        }
    }

    public function updateProfilePhoto(Request $request)
    {
        try {
            $validatedData = $request->validate([
                'user_id' => ['required', 'exists:users,id'],
                'profile_photo_url' => ['required', 'string'],
                'photo_public_id' => ['required', 'string'],
            ]);
            $user = User::find($validatedData['user_id']);
            // Update uer's profile information
            if ($user) {
                $user->profile_photo_url = $validatedData['profile_photo_url'];
                $user->photo_public_id = $validatedData['photo_public_id'];
                $user->save();
                return response()->json(['status' => 'success', 'message' => 'Profile photo updated successfully.', 'data' => $user], 200);
            } else {
                return response()->json(['status' => 'error', 'message' => 'user id not found',], 400);
            }
        } catch (\Exception $th) {
            return response()->json(['status' => 'error', 'message' => 'Profile photo not updated successfully.', 'data' => $th->getMessage()], 400);
        }
    }
    public function UpdateShopLogo(Request $request)
    {
        try {
            $validatedData = $request->validate([
                'shop_id' => ['required', 'exists:sellers,id'],
                'logo' => ['required', 'string'],
                'logo_public_id' => ['required', 'string'],
            ]);
            $seller = Seller::find($validatedData['shop_id']);
            // Update seller's profile information
            if ($seller) {
                $seller->logo = $validatedData['logo'];
                $seller->logo_public_id = $validatedData['logo_public_id'];
                $seller->save();
                return response()->json(['status' => 'success', 'message' => 'Profile photo updated successfully.', 'data' => $seller], 200);
            } else {
                return response()->json(['status' => 'error', 'message' => 'Seller Shop Id not found',], 400);
            }
        } catch (\Exception $th) {
            return response()->json(['status' => 'error', 'message' => 'Profile photo not updated successfully.', 'data' => $th->getMessage()], 400);
        }
    }

    public function UpdatePin(Request $request)
    {
        try {
            $validatedData = $request->validate([
                'user_id' => ['required', 'exists:users,id'],
                'pin' => ['required', 'digits:4'],
                'device_name' => ['required', 'string'],
            ]);
            $user = User::find($validatedData['user_id']);
            // Update user's profile information
            if ($user) {
                $user->pin = Hash::make($validatedData['pin']);
                $user->set_pin = 0;
                $user->save();

                // Log the user activity
                $device = $validatedData['device_name'];
                $activityLogger = app(ActivityLogger::class);
                $clientIp = request()->ip();
                $activityLogger->log('User set pin from mobile app (API)', $clientIp, $user->id, $user->role, $device);

                return response()->json(['status' => 'success', 'message' => 'Pin updated successfully.', 'data' => $user], 200);
            } else {
                return response()->json(['status' => 'error', 'message' => 'User id not found',], 400);
            }
        } catch (\Exception $th) {
            return response()->json(['status' => 'error', 'message' => 'Profile photo not updated successfully.', 'data' => $th->getMessage()], 400);
        }
    }

    public function UpdatePickUpAddress(Request $request)
    {
        try {
            $validatedData = $request->validate([
                'shop_id' => ['required', 'exists:sellers,id'],
                'state' => ['required'],
                'place_id' => ['required'],
                'latitude' => ['required'],
                'longitude' => ['required'],
                'address' => ['required', 'string', 'max:255'],
                'device_name' => ['required', 'string'],
            ]);
            $shop = Seller::find($validatedData['shop_id']);
            if ($shop) {
                $shop->state = $validatedData['state'];
                $shop->place_id = $validatedData['place_id'];
                $shop->latitude = $validatedData['latitude'];
                $shop->longitude = $validatedData['longitude'];
                $shop->address = $validatedData['address'];
                $shop->save();

                // Log the user activity
                $device = $validatedData['device_name'];
                $activityLogger = app(ActivityLogger::class);
                $clientIp = request()->ip();
                $activityLogger->log('Seller Updated pickup address from app (API)', $clientIp, $shop->id, $shop->address, $device);

                
                return response()->json(['status' => 'success', 'message' => 'Pickup address updated successfully.', 'data' => $shop], 200);
            } else {
                return response()->json(['status' => 'error', 'message' => 'Shop id not found',], 400);
            }
        } catch (\Exception $th) {
            return response()->json(['status' => 'error', 'message' => 'Pickup address not updated successfully.', 'data' => $th->getMessage()], 400);
        }
    }

    public function updateShopInfo(Request $request)
    {
        try {

            $validatedData = $request->validate([
                'shop_id' => ['required', 'exists:sellers,id'],
                'business_name' => ['required', 'string'],
                'description' => ['required', 'string'],
                'type' => ['required', 'string'],
                'category_id' => ['required', 'integer'], // Assuming category_id is an integer
                'reg_no' => ['nullable', 'string'],
                'facebook' => ['required', 'url'], // Use 'url' for URL validation
                'instagram' => ['required', 'url'], // Use 'url' for URL validation
                'cover_image' => ['nullable', 'string'],
                'cover_image_public_id' => ['nullable', 'string'],
                'device_name' => ['nullable', 'string'],
            ]);
            $shop = Seller::find($validatedData['shop_id']);
            if ($shop) {
                $shop->business_name = $validatedData['business_name'];
                $shop->slug = Str::slug($validatedData['business_name']);
                $shop->description = $validatedData['description'];
                $shop->type = $validatedData['type'];
                $shop->category_id = $validatedData['category_id'];
                $shop->reg_no = $validatedData['reg_no'];
                $shop->facebook = $validatedData['facebook'];
                $shop->instagram = $validatedData['instagram'];
                $shop->cover_image = $validatedData['cover_image'];
                $shop->cover_image_public_id = $validatedData['cover_image_public_id'];
                $shop->save();

                // Log the user activity
                $device = $validatedData['device_name'];
                $activityLogger = app(ActivityLogger::class);
                $clientIp = request()->ip();
                $activityLogger->log('Seller Update Shop from app (API)', $clientIp, $shop->user_id, $shop->business_name, $device);

                return response()->json(['status' => 'success', 'message' => 'Shop info updated successfully.', 'data' => $shop], 200);
            } else {
                return response()->json(['status' => 'error', 'message' => 'Shop id not found',], 400);
            }
        } catch (\Throwable $th) {
            return response()->json(['status' => 'error', 'message' => $th->getMessage()], 400);
        }
    }
}