feat: implement API routes, controllers, middleware, OpenAI integration, and user management
This commit is contained in:
commit
9ac865d71c
16 changed files with 271 additions and 0 deletions
13
1. `routes/api.php
Normal file
13
1. `routes/api.php
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use Illuminate\Support\Facades\Route;
|
||||||
|
use App\Http\Controllers\Api\FrontendController;
|
||||||
|
use App\Http\Controllers\Api\BackendController;
|
||||||
|
|
||||||
|
Route::middleware('auth:sanctum')->group(function () {
|
||||||
|
Route::get('/frontend', [FrontendController::class, 'index']);
|
||||||
|
Route::post('/frontend', [FrontendController::class, 'store']);
|
||||||
|
Route::get('/backend', [BackendController::class, 'index']);
|
||||||
|
Route::post('/backend', [BackendController::class, 'store']);
|
||||||
|
});
|
||||||
18
11. `app/Http/Middleware/CheckUserActive.php
Normal file
18
11. `app/Http/Middleware/CheckUserActive.php
Normal file
|
|
@ -0,0 +1,18 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Middleware;
|
||||||
|
|
||||||
|
use Closure;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
|
||||||
|
class CheckUserActive
|
||||||
|
{
|
||||||
|
public function handle(Request $request, Closure $next)
|
||||||
|
{
|
||||||
|
if (!$request->user()->is_active) {
|
||||||
|
return redirect('/inactive');
|
||||||
|
}
|
||||||
|
|
||||||
|
return $next($request);
|
||||||
|
}
|
||||||
|
}
|
||||||
32
12. `app/Http/Controllers/Admin/UserManagementController.php
Normal file
32
12. `app/Http/Controllers/Admin/UserManagementController.php
Normal file
|
|
@ -0,0 +1,32 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers\Admin;
|
||||||
|
|
||||||
|
use App\Http\Controllers\Controller;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use App\Models\User;
|
||||||
|
|
||||||
|
class UserManagementController extends Controller
|
||||||
|
{
|
||||||
|
public function index()
|
||||||
|
{
|
||||||
|
$users = User::all();
|
||||||
|
return view('admin.users.index', compact('users'));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function activate(User $user)
|
||||||
|
{
|
||||||
|
$user->is_active = true;
|
||||||
|
$user->save();
|
||||||
|
|
||||||
|
return redirect()->route('admin.users.index');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function deactivate(User $user)
|
||||||
|
{
|
||||||
|
$user->is_active = false;
|
||||||
|
$user->save();
|
||||||
|
|
||||||
|
return redirect()->route('admin.users.index');
|
||||||
|
}
|
||||||
|
}
|
||||||
15
13. `app/Models/Role.php
Normal file
15
13. `app/Models/Role.php
Normal file
|
|
@ -0,0 +1,15 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Models;
|
||||||
|
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
|
||||||
|
class Role extends Model
|
||||||
|
{
|
||||||
|
protected $fillable = ['name', 'permissions'];
|
||||||
|
|
||||||
|
public function users()
|
||||||
|
{
|
||||||
|
return $this->belongsToMany(User::class);
|
||||||
|
}
|
||||||
|
}
|
||||||
22
14. `app/Http/Requests/StoreUserRequest.php
Normal file
22
14. `app/Http/Requests/StoreUserRequest.php
Normal file
|
|
@ -0,0 +1,22 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Requests;
|
||||||
|
|
||||||
|
use Illuminate\Foundation\Http\FormRequest;
|
||||||
|
|
||||||
|
class StoreUserRequest extends FormRequest
|
||||||
|
{
|
||||||
|
public function authorize()
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function rules()
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'name' => 'required|string|max:255',
|
||||||
|
'email' => 'required|string|email|max:255|unique:users',
|
||||||
|
'password' => 'required|string|min:8|confirmed',
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
25
15. `tests/Feature/UserManagementTest.php
Normal file
25
15. `tests/Feature/UserManagementTest.php
Normal file
|
|
@ -0,0 +1,25 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Tests\Feature;
|
||||||
|
|
||||||
|
use Illuminate\Foundation\Testing\RefreshDatabase;
|
||||||
|
use Tests\TestCase;
|
||||||
|
use App\Models\User;
|
||||||
|
|
||||||
|
class UserManagementTest extends TestCase
|
||||||
|
{
|
||||||
|
use RefreshDatabase;
|
||||||
|
|
||||||
|
public function test_user_can_be_created()
|
||||||
|
{
|
||||||
|
$response = $this->post('/register', [
|
||||||
|
'name' => 'Test User',
|
||||||
|
'email' => 'test@example.com',
|
||||||
|
'password' => 'password',
|
||||||
|
'password_confirmation' => 'password',
|
||||||
|
]);
|
||||||
|
|
||||||
|
$response->assertRedirect('/home');
|
||||||
|
$this->assertCount(1, User::all());
|
||||||
|
}
|
||||||
|
}
|
||||||
23
16. `docs/api.md
Normal file
23
16. `docs/api.md
Normal file
|
|
@ -0,0 +1,23 @@
|
||||||
|
# API Documentation
|
||||||
|
|
||||||
|
## Frontend API
|
||||||
|
|
||||||
|
### GET /api/frontend
|
||||||
|
- **Description**: Get frontend data.
|
||||||
|
- **Response**: JSON object with a message.
|
||||||
|
|
||||||
|
### POST /api/frontend
|
||||||
|
- **Description**: Store frontend data.
|
||||||
|
- **Request Body**: JSON object with required fields.
|
||||||
|
- **Response**: JSON object with a success message.
|
||||||
|
|
||||||
|
## Backend API
|
||||||
|
|
||||||
|
### GET /api/backend
|
||||||
|
- **Description**: Get backend data.
|
||||||
|
- **Response**: JSON object with a message.
|
||||||
|
|
||||||
|
### POST /api/backend
|
||||||
|
- **Description**: Store backend data.
|
||||||
|
- **Request Body**: JSON object with required fields.
|
||||||
|
- **Response**: JSON object with a success message.
|
||||||
19
2. `app/Http/Controllers/Api/FrontendController.php
Normal file
19
2. `app/Http/Controllers/Api/FrontendController.php
Normal file
|
|
@ -0,0 +1,19 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers\Api;
|
||||||
|
|
||||||
|
use App\Http\Controllers\Controller;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
|
||||||
|
class FrontendController extends Controller
|
||||||
|
{
|
||||||
|
public function index()
|
||||||
|
{
|
||||||
|
return response()->json(['message' => 'Frontend API']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function store(Request $request)
|
||||||
|
{
|
||||||
|
// Handle store request
|
||||||
|
}
|
||||||
|
}
|
||||||
19
3. `app/Http/Controllers/Api/BackendController.php
Normal file
19
3. `app/Http/Controllers/Api/BackendController.php
Normal file
|
|
@ -0,0 +1,19 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers\Api;
|
||||||
|
|
||||||
|
use App\Http\Controllers\Controller;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
|
||||||
|
class BackendController extends Controller
|
||||||
|
{
|
||||||
|
public function index()
|
||||||
|
{
|
||||||
|
return response()->json(['message' => 'Backend API']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function store(Request $request)
|
||||||
|
{
|
||||||
|
// Handle store request
|
||||||
|
}
|
||||||
|
}
|
||||||
15
4. `app/Http/Middleware/CustomMiddleware.php
Normal file
15
4. `app/Http/Middleware/CustomMiddleware.php
Normal file
|
|
@ -0,0 +1,15 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Middleware;
|
||||||
|
|
||||||
|
use Closure;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
|
||||||
|
class CustomMiddleware
|
||||||
|
{
|
||||||
|
public function handle(Request $request, Closure $next)
|
||||||
|
{
|
||||||
|
// Custom middleware logic
|
||||||
|
return $next($request);
|
||||||
|
}
|
||||||
|
}
|
||||||
1
5. `.env
Normal file
1
5. `.env
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
OPENAI_API_KEY=your-openai-api-key
|
||||||
24
6. `app/Services/OpenAIService.php
Normal file
24
6. `app/Services/OpenAIService.php
Normal file
|
|
@ -0,0 +1,24 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Services;
|
||||||
|
|
||||||
|
use OpenAI\Client;
|
||||||
|
|
||||||
|
class OpenAIService
|
||||||
|
{
|
||||||
|
protected $client;
|
||||||
|
|
||||||
|
public function __construct(Client $client)
|
||||||
|
{
|
||||||
|
$this->client = $client;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function sendPrompt($prompt)
|
||||||
|
{
|
||||||
|
return $this->client->completions()->create([
|
||||||
|
'model' => 'text-davinci-003',
|
||||||
|
'prompt' => $prompt,
|
||||||
|
'max_tokens' => 150,
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
||||||
9
7. `resources/js/app.js
Normal file
9
7. `resources/js/app.js
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
$(document).ready(function() {
|
||||||
|
$.ajax({
|
||||||
|
url: '/api/frontend',
|
||||||
|
method: 'GET',
|
||||||
|
success: function(response) {
|
||||||
|
console.log(response);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
26
8. `app/Http/Controllers/Admin/ApiConfigController.php
Normal file
26
8. `app/Http/Controllers/Admin/ApiConfigController.php
Normal file
|
|
@ -0,0 +1,26 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers\Admin;
|
||||||
|
|
||||||
|
use App\Http\Controllers\Controller;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use App\Models\ApiConfig;
|
||||||
|
|
||||||
|
class ApiConfigController extends Controller
|
||||||
|
{
|
||||||
|
public function index()
|
||||||
|
{
|
||||||
|
$configs = ApiConfig::all();
|
||||||
|
return view('admin.api_config.index', compact('configs'));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function store(Request $request)
|
||||||
|
{
|
||||||
|
$config = new ApiConfig();
|
||||||
|
$config->name = $request->name;
|
||||||
|
$config->value = $request->value;
|
||||||
|
$config->save();
|
||||||
|
|
||||||
|
return redirect()->route('admin.api_config.index');
|
||||||
|
}
|
||||||
|
}
|
||||||
10
9. `app/Models/ApiConfig.php
Normal file
10
9. `app/Models/ApiConfig.php
Normal file
|
|
@ -0,0 +1,10 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Models;
|
||||||
|
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
|
||||||
|
class ApiConfig extends Model
|
||||||
|
{
|
||||||
|
protected $fillable = ['name', 'value'];
|
||||||
|
}
|
||||||
Loading…
Reference in a new issue