remove compose file to another repo
This commit is contained in:
@@ -0,0 +1,59 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Admin;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Http\Resources\Admin\PermissionResource;
|
||||
use app\Http\Traits\ApiResponse;
|
||||
use App\Models\Permission;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class PermissionManagementController extends Controller
|
||||
{
|
||||
use ApiResponse;
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
public function list(): JsonResponse
|
||||
{
|
||||
return $this->successResponse(PermissionResource::collection(Permission::all()));
|
||||
}
|
||||
|
||||
/**
|
||||
* Store a newly created resource in storage.
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Display the specified resource.
|
||||
*/
|
||||
public function show(string $id)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the specified resource in storage.
|
||||
*/
|
||||
public function update(Request $request, string $id)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the specified resource from storage.
|
||||
*/
|
||||
public function destroy(string $id)
|
||||
{
|
||||
//
|
||||
}
|
||||
}
|
||||
101
app/Http/Controllers/Admin/RoleManagementController.php
Normal file
101
app/Http/Controllers/Admin/RoleManagementController.php
Normal file
@@ -0,0 +1,101 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Admin;
|
||||
|
||||
use App\Facades\DataTable\DataTableFacade;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Http\Resources\Admin\RoleResource;
|
||||
use app\Http\Traits\ApiResponse;
|
||||
use App\Models\Role;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class RoleManagementController extends Controller
|
||||
{
|
||||
use ApiResponse;
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
*/
|
||||
public function index(Request $request): JsonResponse
|
||||
{
|
||||
$columns = array('id', 'name', 'name_fa');
|
||||
|
||||
$allowedFilters = $columns;
|
||||
$allowedSortings = $columns;
|
||||
$allowedRelations = array('permissions');
|
||||
|
||||
$query = Role::query();
|
||||
|
||||
$data = DataTableFacade::run(
|
||||
$query,
|
||||
$request,
|
||||
allowedFilters: $allowedFilters,
|
||||
allowedSortings: $allowedSortings,
|
||||
allowedRelations: $allowedRelations
|
||||
);
|
||||
|
||||
return response()->json($data);
|
||||
}
|
||||
|
||||
/**
|
||||
* Store a newly created resource in storage.
|
||||
*/
|
||||
public function store(Request $request): JsonResponse
|
||||
{
|
||||
DB::transaction(function () use ($request) {
|
||||
$role = Role::create([
|
||||
'name' => $request->name,
|
||||
'name_fa' => $request->name_fa,
|
||||
]);
|
||||
|
||||
$role->syncPermissions($request->permissions);
|
||||
});
|
||||
|
||||
return $this->successResponse();
|
||||
}
|
||||
|
||||
/**
|
||||
* Display the specified resource.
|
||||
*/
|
||||
public function show(Role $role): JsonResponse
|
||||
{
|
||||
return $this->successResponse(new RoleResource($role));
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the specified resource in storage.
|
||||
*/
|
||||
public function update(Request $request, Role $role): JsonResponse
|
||||
{
|
||||
DB::transaction(function () use ($request, $role) {
|
||||
$role->update([
|
||||
'name' => $request->name,
|
||||
'name_fa' => $request->name_fa,
|
||||
]);
|
||||
|
||||
$role->syncPermissions($request->permissions);
|
||||
});
|
||||
|
||||
return $this->successResponse();
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the specified resource from storage.
|
||||
*/
|
||||
public function destroy(Role $role): JsonResponse
|
||||
{
|
||||
DB::transaction(function () use ($role) {
|
||||
$role->syncPermissions([]);
|
||||
|
||||
$role->delete();
|
||||
});
|
||||
|
||||
return $this->successResponse();
|
||||
}
|
||||
|
||||
public function list(): JsonResponse
|
||||
{
|
||||
return $this->successResponse(RoleResource::collection(Role::all()));
|
||||
}
|
||||
}
|
||||
124
app/Http/Controllers/Admin/UserManagementController.php
Normal file
124
app/Http/Controllers/Admin/UserManagementController.php
Normal file
@@ -0,0 +1,124 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Admin;
|
||||
|
||||
use App\Facades\DataTable\DataTableFacade;
|
||||
use App\Facades\File\FileFacade;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Http\Requests\Admin\StoreRequest;
|
||||
use App\Http\Requests\Admin\UpdateRequest;
|
||||
use App\Http\Resources\Admin\UserResource;
|
||||
use App\Http\Traits\ApiResponse;
|
||||
use App\Models\Province;
|
||||
use App\Models\User;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Hash;
|
||||
|
||||
class UserManagementController extends Controller
|
||||
{
|
||||
use ApiResponse;
|
||||
|
||||
public function index(Request $request): JsonResponse
|
||||
{
|
||||
|
||||
$columns = array('id', 'full_name', 'username', 'province_id', 'phone_number', 'national_id', 'telephone_id');
|
||||
|
||||
$allowedFilters = $columns;
|
||||
|
||||
$allowedSortings = $columns;
|
||||
|
||||
$allowedRelations = array('roles');
|
||||
|
||||
$query = User::query()->where('username', "<>", "witel");
|
||||
|
||||
|
||||
$data = DataTableFacade::run(
|
||||
$query,
|
||||
$request,
|
||||
allowedFilters: $allowedFilters,
|
||||
allowedSortings: $allowedSortings,
|
||||
allowedRelations: $allowedRelations);
|
||||
|
||||
return response()->json($data);
|
||||
}
|
||||
|
||||
public function store(StoreRequest $request): JsonResponse
|
||||
{
|
||||
DB::transaction(function () use ($request) {
|
||||
$province = Province::query()->find($request->province_id);
|
||||
|
||||
$avatar = $request->avatar
|
||||
? FileFacade::save($request->file('avatar'), 'users/avatars/' . $request->username)
|
||||
: null;
|
||||
|
||||
$user = User::query()->create([
|
||||
'full_name' => $request->full_name,
|
||||
'username' => $request->username,
|
||||
'position' => $request->position,
|
||||
'gender' => $request->gender,
|
||||
'national_id' => $request->national_id,
|
||||
'phone_number' => $request->phone_number,
|
||||
'province_id' => $province->id,
|
||||
'province_fa' => $province->name,
|
||||
'password' => Hash::make($request->password),
|
||||
'avatar' => $avatar,
|
||||
'email' => $request->email,
|
||||
'telephone_id' => $request->telephone_id,
|
||||
]);
|
||||
|
||||
$user->syncPermissions($request->permissions);
|
||||
});
|
||||
|
||||
return $this->successResponse();
|
||||
}
|
||||
|
||||
public function show(User $user): JsonResponse
|
||||
{
|
||||
return $this->successResponse(new UserResource($user));
|
||||
}
|
||||
|
||||
public function update(UpdateRequest $request, User $user): JsonResponse
|
||||
{
|
||||
DB::transaction(function () use ($request, $user) {
|
||||
$province = Province::query()->find($request->province_id);
|
||||
|
||||
$avatar = $request->avatar ?
|
||||
$user->storeFile($request->file('avatar'), $request->username)
|
||||
: null;
|
||||
|
||||
$user->update([
|
||||
'full_name' => $request->full_name,
|
||||
'username' => $request->username,
|
||||
'position' => $request->position,
|
||||
'gender' => $request->gender,
|
||||
'national_id' => $request->national_id,
|
||||
'phone_number' => $request->phone_number,
|
||||
'province_id' => $province->id,
|
||||
'province_fa' => $province->name,
|
||||
'avatar' => $avatar,
|
||||
'email' => $request->email,
|
||||
'telephone_id' => $request->telephone_id
|
||||
]);
|
||||
|
||||
$user->syncPermissions($request->permissions);
|
||||
});
|
||||
|
||||
return $this->successResponse();
|
||||
}
|
||||
|
||||
public function destroy(User $user): JsonResponse
|
||||
{
|
||||
DB::transaction(function () use ($user) {
|
||||
if ($user->avatar) {
|
||||
FileFacade::delete($user->avatar, true);
|
||||
}
|
||||
|
||||
$user->syncRoles([]);
|
||||
$user->delete();
|
||||
});
|
||||
|
||||
return $this->successResponse();
|
||||
}
|
||||
}
|
||||
51
app/Http/Controllers/AuthController.php
Normal file
51
app/Http/Controllers/AuthController.php
Normal file
@@ -0,0 +1,51 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Http\Requests\Auth\LoginRequest;
|
||||
use App\Http\Traits\ApiResponse;
|
||||
use App\Models\User;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
|
||||
class AuthController extends Controller
|
||||
{
|
||||
use ApiResponse;
|
||||
|
||||
public function login(LoginRequest $request): JsonResponse
|
||||
{
|
||||
if ($this->attemptLogin($request))
|
||||
{
|
||||
$request->session()->regenerate();
|
||||
$this->updateLastLogin($request);
|
||||
return $this->successResponse();
|
||||
}
|
||||
|
||||
return $this->errorResponse();
|
||||
}
|
||||
|
||||
protected function attemptLogin(Request $request): bool
|
||||
{
|
||||
return Auth::guard()->attempt($request->only('username', 'password'));
|
||||
}
|
||||
|
||||
protected function updateLastLogin(Request $request): void
|
||||
{
|
||||
if (!$request->session()->exists('last_login')) {
|
||||
$request->session()->put('last_login', now());
|
||||
}
|
||||
|
||||
Auth::user()->update([
|
||||
'last_login' => now(),
|
||||
]);
|
||||
}
|
||||
|
||||
public function logout(Request $request): JsonResponse
|
||||
{
|
||||
Auth::guard()->logout();
|
||||
$request->session()->invalidate();
|
||||
$request->session()->regenerateToken();
|
||||
return $this->successResponse();
|
||||
}
|
||||
}
|
||||
135
app/Http/Controllers/CallController.php
Normal file
135
app/Http/Controllers/CallController.php
Normal file
@@ -0,0 +1,135 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Enums\CallEvents;
|
||||
use App\Http\Requests\Call\ListRequest;
|
||||
use App\Http\Requests\Call\StoreRequest;
|
||||
use App\Http\Requests\Call\UpdateRequest;
|
||||
use App\Http\Resources\Call\CallResource;
|
||||
use app\Http\Traits\ApiResponse;
|
||||
use App\Models\Call;
|
||||
use App\Models\CallHistory;
|
||||
use App\Models\Category;
|
||||
use App\Models\Event;
|
||||
use App\Models\User;
|
||||
use App\Services\Notification\Exceptions\NotificationServerNotRespondingException;
|
||||
use App\Services\Notification\Exceptions\OperatorNotConnectedException;
|
||||
use App\Services\Notification\Exceptions\OperatorOfflineException;
|
||||
use App\Services\Notification\NotificationService;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class CallController extends Controller
|
||||
{
|
||||
use ApiResponse;
|
||||
|
||||
/**
|
||||
* @throws OperatorNotConnectedException
|
||||
* @throws OperatorOfflineException
|
||||
* @throws NotificationServerNotRespondingException
|
||||
*/
|
||||
public function store(StoreRequest $request, NotificationService $notificationService): JsonResponse
|
||||
{
|
||||
try
|
||||
{
|
||||
$call = DB::transaction(function () use ($request)
|
||||
{
|
||||
$operator = User::query()->where('telephone_id', $request->extension)->first();
|
||||
|
||||
$call = Call::query()->create([
|
||||
'telephone_id' => $request->extension,
|
||||
'caller_phone_number' => $request->caller_id,
|
||||
'operator_id' => $operator->id,
|
||||
'operator_username' => $operator->username,
|
||||
'operator_full_name' => $operator->full_name
|
||||
]);
|
||||
|
||||
CallHistory::recordHistory($call, CallEvents::CALL_CREATED);
|
||||
|
||||
return $call;
|
||||
});
|
||||
|
||||
$data = [
|
||||
'telephone_id' => $call->telephone_id,
|
||||
'phone_number' => $call->caller_phone_number,
|
||||
'call_id' => $call->id,
|
||||
];
|
||||
|
||||
$notificationService->deliverDataToNotificationServer($data);
|
||||
|
||||
return $this->successResponse();
|
||||
}
|
||||
catch (NotificationServerNotRespondingException $exception)
|
||||
{
|
||||
CallHistory::recordHistory($call, CallEvents::NOTIFICATION_SERVER_NOT_RESPONDING);
|
||||
throw $exception;
|
||||
}
|
||||
catch (OperatorOfflineException $exception)
|
||||
{
|
||||
CallHistory::recordHistory($call, CallEvents::OPERATOR_IS_OFFLINE);
|
||||
throw $exception;
|
||||
}
|
||||
catch (OperatorNotConnectedException $exception)
|
||||
{
|
||||
CallHistory::recordHistory($call, CallEvents::OPERATOR_COULD_NOT_CONNECT);
|
||||
throw $exception;
|
||||
}
|
||||
}
|
||||
|
||||
public function update(UpdateRequest $request, Call $call): JsonResponse
|
||||
{
|
||||
DB::transaction(function () use ($request, $call) {
|
||||
$operator = User::query()->where('telephone_id', $call->telephone_id)->first();
|
||||
|
||||
$category = Category::query()->where([
|
||||
['category_id', $request->category_id],
|
||||
['subcategory_id', $request->subcategory_id]
|
||||
])->first();
|
||||
|
||||
$call->update([
|
||||
'province_id' => $operator->province_id,
|
||||
'province_fa' => $operator->province_fa,
|
||||
'operator_id' => $operator->id,
|
||||
'operator_username' => $operator->username,
|
||||
'operator_full_name' => $operator->full_name,
|
||||
'category_id' => $request->category_id,
|
||||
'category_name' => $category->category_name,
|
||||
'subcategory_id' => $request->subcategory_id,
|
||||
'subcategory_name' => $category->subcategory_name,
|
||||
'description' => $request->description,
|
||||
]);
|
||||
|
||||
$event_id = CallEvents::OPERATOR_STORED_CALL_DATA;
|
||||
|
||||
$event_name = Event::query()->find($event_id)->first()->name;
|
||||
|
||||
CallHistory::create([
|
||||
'call_id' => $call->id,
|
||||
'telephone_id' => $call->telephone_id,
|
||||
'caller_phone_number' => $call->caller_phone_number,
|
||||
'event_id' => $event_id,
|
||||
'event_name' => $event_name,
|
||||
]);
|
||||
});
|
||||
|
||||
return $this->successResponse();
|
||||
}
|
||||
|
||||
public function list(ListRequest $request): JsonResponse
|
||||
{
|
||||
User::query()->find(1)->givePermissionTo([1, 2, 3]);
|
||||
$phone_number = $request->phone_number;
|
||||
$size = $request->size ?? config('global_variables.MAX_RECORDS_COUNT');
|
||||
|
||||
$calls_data = Call::query()
|
||||
->when($phone_number, function ($query) use ($phone_number) {
|
||||
return $query->where('caller_phone_number', $phone_number);
|
||||
})->orderBy('created_at', 'DESC')
|
||||
->limit($size)
|
||||
->get();
|
||||
|
||||
return $this->successResponse(CallResource::collection($calls_data));
|
||||
}
|
||||
}
|
||||
19
app/Http/Controllers/CategoryController.php
Normal file
19
app/Http/Controllers/CategoryController.php
Normal file
@@ -0,0 +1,19 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use app\Http\Traits\ApiResponse;
|
||||
use App\Models\Category;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
|
||||
class CategoryController extends Controller
|
||||
{
|
||||
use ApiResponse;
|
||||
|
||||
public function list(): JsonResponse
|
||||
{
|
||||
$data = Category::all('category_id', 'category_name', 'subcategory_id', 'subcategory_name');
|
||||
|
||||
return $this->successResponse($data);
|
||||
}
|
||||
}
|
||||
8
app/Http/Controllers/Controller.php
Normal file
8
app/Http/Controllers/Controller.php
Normal file
@@ -0,0 +1,8 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
abstract class Controller
|
||||
{
|
||||
//
|
||||
}
|
||||
32
app/Http/Controllers/ProfileController.php
Normal file
32
app/Http/Controllers/ProfileController.php
Normal file
@@ -0,0 +1,32 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Http\Requests\ChangePasswordRequest;
|
||||
use App\Http\Resources\Admin\UserResource;
|
||||
use App\Http\Traits\ApiResponse;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Support\Facades\Hash;
|
||||
|
||||
class ProfileController extends Controller
|
||||
{
|
||||
use ApiResponse;
|
||||
|
||||
public function info(): JsonResponse
|
||||
{
|
||||
return $this->successResponse(new UserResource(auth()->user()));
|
||||
|
||||
}
|
||||
public function changePassword(ChangePasswordRequest $request): JsonResponse
|
||||
{
|
||||
$user = auth()->user();
|
||||
if (! Hash::check($request->current_password, $user->passwored)){
|
||||
return $this->errorResponse(__('messages.wrong_current_password'));
|
||||
}
|
||||
$user->update([
|
||||
'password' => Hash::make($request->new_password)
|
||||
]);
|
||||
|
||||
return $this->successResponse();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user