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);
}
}
}