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