<?php
namespace App\Http\Controllers;
use App\BusinessLogin;
use App\Imali\BusinessAccount;
use App\Store;
use App\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Config;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Route;
use Illuminate\Validation\Rule;
use Laravel\Passport\Client;
class BusinessController extends Controller
{
private $client;
public function __construct()
{
$this->client = Client::find(27);
}
public function login(Request $request)
{
$this->validate($request, [
'username' => 'required',
'password' => 'required'
], [
'username.required' => 'O Campo username é Obrigatório',
'password.required' => 'O Campo Senha é Obrigatório',
]);
$params = [
'grant_type' => 'password',
'client_id' => $this->client->id,
'client_secret' => $this->client->secret,
'username' => request('username'),
'password' => request('password'),
'provider' => 'users',
'scope' => '*'
];
// return $request->username . ' ' . $request->password . ' ' . $params['client_id'];
$request->request->add($params);
Config::set('auth.guards.business-api.provider', $params['provider']);
$proxy = Request::create('oauth/token', 'POST');
return Route::dispatch($proxy);
}
// Get Authenticated User
public function getUserBKP()
{
return response()->json(User::getUserAccount());
}
// Get Authenticated User
public function getUser()
{
$user_business = auth()->user();
$user_business['business'] = BusinessAccount::find($user_business->business_accounts_id);
$user_business['user'] = User::find($user_business->user_id);
return response()->json($user_business);
}
// todo 20/10/2025
public function changePassword(Request $request)
{
$this->validate(
$request,
[
'new_password' => ['required', 'min:8', 'confirmed'],
'new_password_confirmation' => 'required|min:8',
'name' => 'required',
'last_name' => 'required',
'email' => 'required',
'username' => 'required|string|unique:business_logins,username',
],
[
'new_password.required' => 'O Campo Nova Senha é Obrigatório',
'new_password_confirmation.required' => 'O Campo Confirmar Senha é Obrigatório',
'new_password.confirmed' => 'Senhas incompatíveis',
'new_password.min' => 'A senha deve ter 8 digitos no mínimo',
'new_password_confirmation.min' => 'A senha deve ter 8 digitos no mínimo',
'name.required' => 'O Campo Name é Obrigatório',
'last_name.required' => 'O Campo Last_name é Obrigatório',
'email.required' => 'O Campo email é Obrigatório',
'username.required' => 'O Campo username é Obrigatório',
'username.unique' => 'Este nome de utilizador já está em uso.',
]
);
if (Hash::check($request->new_password, $request->user()->password)) {
return response()->json(['message' => 'Não deve usar a senha anterior'], 400);
} else {
// $request->user()->update([
// 'password' => bcrypt($request->new_password),
// 'session_status' => 1
// ]);
$user_id = auth()->user()->id;
$business_login = BusinessLogin::find($user_id);
if (!$business_login) return response()->json(['message' => 'Utilizador não autorizado'], 400);
$business_login->password = Hash::make($request->new_password);
$business_login->session_status = 1;
$business_login->name = $request->name;
$business_login->username = $request->username;
$business_login->last_name = $request->last_name;
$business_login->email = $request->email;
$business_login->save();
return response()->json(['message' => 'Senha Actualizada Com Sucesso!'], 200);
}
}
public function changePasswordIDEA(Request $request)
{
$user = auth()->user();
if (!$user) {
return response()->json(['message' => 'Utilizador não autorizado'], 401);
}
// Validação condicional
$rules = [];
$messages = [];
// Se a senha estiver sendo alterada
if ($request->filled('new_password') || $request->filled('new_password_confirmation')) {
$rules['new_password'] = ['required', 'min:8', 'confirmed'];
$rules['new_password_confirmation'] = ['required', 'min:8'];
$messages = array_merge($messages, [
'new_password.required' => 'O Campo Nova Senha é Obrigatório',
'new_password.min' => 'A senha deve ter 8 dígitos no mínimo',
'new_password.confirmed' => 'Senhas incompatíveis',
'new_password_confirmation.required' => 'O Campo Confirmar Senha é Obrigatório',
'new_password_confirmation.min' => 'A senha deve ter 8 dígitos no mínimo',
]);
}
// Se o nome estiver sendo alterado
if ($request->filled('name')) {
$rules['name'] = 'required|string';
$messages['name.required'] = 'O Campo Nome é Obrigatório';
}
// Se o último nome estiver sendo alterado
if ($request->filled('last_name')) {
$rules['last_name'] = 'required|string';
$messages['last_name.required'] = 'O Campo Apelido é Obrigatório';
}
// Se o e-mail estiver sendo alterado
if ($request->filled('email')) {
$rules['email'] = 'required|email';
$messages['email.required'] = 'O Campo Email é Obrigatório';
}
// Se o username estiver sendo alterado
if ($request->filled('username')) {
$rules['username'] = [
'required',
'string',
Rule::unique('business_logins', 'username')->ignore($user->id)
];
$messages['username.required'] = 'O Campo Username é Obrigatório';
$messages['username.unique'] = 'Este nome de utilizador já está em uso.';
}
// Caso nenhum campo seja enviado
if (empty($rules)) {
return response()->json(['message' => 'Nenhuma alteração detectada.'], 400);
}
// Validar apenas os campos enviados
$validated = $request->validate($rules, $messages);
$business_login = \App\BusinessLogin::find($user->id);
// return $business_login;
if (!$business_login) {
return response()->json(['message' => 'Utilizador não autorizado'], 401);
}
// Atualizar apenas os campos presentes no request
foreach ($validated as $key => $value) {
if ($key === 'new_password' || $key === 'new_password_confirmation') continue;
$business_login->$key = $value;
}
// Se o utilizador quiser alterar a senha
if ($request->filled('new_password')) {
if (Hash::check($request->new_password, $business_login->password)) {
return response()->json(['message' => 'Não deve usar a senha anterior'], 400);
Log::warning("Conta business de ID: {$business_login->name}, Last Name: {$business_login->last_name}, Email:{$business_login->email} reutilizou a senha anterior.");
}
$business_login->password = Hash::make($request->new_password);
$business_login->session_status = 1;
}
$business_login->save();
return response()->json(['message' => 'Alterações salvas com sucesso!'], 200);
}
// LOJAS CONTA EMPRESA
public function getAllStores(Request $request)
{
// $profile = User::getUserDetails(auth()->user()->id)->profile;
// $u1 = BusinessLogin::find(auth()->user()->id);
// if (!$u1) return ['data' => []];
// $business = BusinessAccount::find($u1->business_accounts_id);
// if (!$business) return ['data' => []];
$user = User::getUserDetails(auth()->user()->user_id)->account_id;
$perPage = !!$request->input('per_page') ? $request->input('per_page') : 10;
$orderType = $request->input('order_type') === 'ASC' ? 'ASC' : 'DESC';
$orderBy = !!$request->input('order_by') && $request->input('order_by') !== 'null' ? $request->input('order_by') : 'stores.id';
$stores = Store::query()
// ->join('users', 'users.id', '=', 'stores.user_id')
->join('ramo_activities', 'ramo_activities.id', '=', 'stores.industry_activity')
->join('merchant_contracts', 'stores.merchant_contract_id', '=', 'merchant_contracts.id')
->select(
'stores.*',
'ramo_activities.nome as industry',
'merchant_contracts.id as merchant_contract_id',
'merchant_contracts.taxa',
'merchant_contracts.max_balance',
'merchant_contracts.nr_transaction',
'merchant_contracts.min_amount',
'merchant_contracts.max_amount',
'merchant_contracts.use_point_limit',
'stores.name as store_name',
'stores.id as id_store'
)
// ->where('users.profile', $profile)
->where('stores.business_account_id', $user)
->orderBy($orderBy, $orderType)
->paginate($perPage);
return response()->json(['data' => $stores], 200);
}
}