sigd/app/Services/User/UserService.php

90 lines
2.0 KiB
PHP

<?php
namespace App\Services\User;
use App\Models\Agency;
use App\Models\User;
use App\Models\UserGroup;
use App\Notifications\EmailVerificationNotification;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Hash;
class UserService
{
public function create(array $data)
{
try {
DB::beginTransaction();
$user = User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => Hash::make($data['password']),
'user_group_id' => $data['user_group_id'],
'agency_id' => $data['agency_id'],
]);
DB::commit();
return $user;
} catch (\Exception $e) {
DB::rollBack();
throw $e;
}
}
public function update(User $user, array $data)
{
try {
DB::beginTransaction();
// $emailChanged = $user->email !== $data['email'];
$user->update([
'name' => $data['name'],
'email' => $data['email'],
'user_group_id' => $data['user_group_id'],
'agency_id' => $data['agency_id'],
]);
// if ($emailChanged) {
// $user->notify(new EmailVerificationNotification());
// }
DB::commit();
return $user;
} catch (\Exception $e) {
DB::rollBack();
throw $e;
}
}
public function delete(User $user)
{
try {
DB::beginTransaction();
$user->delete();
DB::commit();
} catch (\Exception $e) {
DB::rollBack();
throw $e;
}
}
public function getAgencies()
{
$data = Agency::rowActive()->orderBy('name','ASC')->get();
return $data;
}
public function getUserGroups()
{
$data = UserGroup::orderBy('name','ASC')->get();
return $data;
}
}