commit 9ac865d71c21daca1d80652759c9e4b0b3c5c328 Author: Jethro Lin (aider) Date: Wed Nov 13 12:34:43 2024 +0800 feat: implement API routes, controllers, middleware, OpenAI integration, and user management diff --git a/1. `routes/api.php b/1. `routes/api.php new file mode 100644 index 0000000..a5aff1c --- /dev/null +++ b/1. `routes/api.php @@ -0,0 +1,13 @@ +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']); +}); diff --git a/10. `database/migrations/xxxx_xx_xx_create_users_table.php b/10. `database/migrations/xxxx_xx_xx_create_users_table.php new file mode 100644 index 0000000..e69de29 diff --git a/11. `app/Http/Middleware/CheckUserActive.php b/11. `app/Http/Middleware/CheckUserActive.php new file mode 100644 index 0000000..40d3d15 --- /dev/null +++ b/11. `app/Http/Middleware/CheckUserActive.php @@ -0,0 +1,18 @@ +user()->is_active) { + return redirect('/inactive'); + } + + return $next($request); + } +} diff --git a/12. `app/Http/Controllers/Admin/UserManagementController.php b/12. `app/Http/Controllers/Admin/UserManagementController.php new file mode 100644 index 0000000..d0cfe25 --- /dev/null +++ b/12. `app/Http/Controllers/Admin/UserManagementController.php @@ -0,0 +1,32 @@ +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'); + } +} diff --git a/13. `app/Models/Role.php b/13. `app/Models/Role.php new file mode 100644 index 0000000..332a47d --- /dev/null +++ b/13. `app/Models/Role.php @@ -0,0 +1,15 @@ +belongsToMany(User::class); + } +} diff --git a/14. `app/Http/Requests/StoreUserRequest.php b/14. `app/Http/Requests/StoreUserRequest.php new file mode 100644 index 0000000..c14a1a3 --- /dev/null +++ b/14. `app/Http/Requests/StoreUserRequest.php @@ -0,0 +1,22 @@ + 'required|string|max:255', + 'email' => 'required|string|email|max:255|unique:users', + 'password' => 'required|string|min:8|confirmed', + ]; + } +} diff --git a/15. `tests/Feature/UserManagementTest.php b/15. `tests/Feature/UserManagementTest.php new file mode 100644 index 0000000..fd9ca65 --- /dev/null +++ b/15. `tests/Feature/UserManagementTest.php @@ -0,0 +1,25 @@ +post('/register', [ + 'name' => 'Test User', + 'email' => 'test@example.com', + 'password' => 'password', + 'password_confirmation' => 'password', + ]); + + $response->assertRedirect('/home'); + $this->assertCount(1, User::all()); + } +} diff --git a/16. `docs/api.md b/16. `docs/api.md new file mode 100644 index 0000000..af01cd4 --- /dev/null +++ b/16. `docs/api.md @@ -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. diff --git a/2. `app/Http/Controllers/Api/FrontendController.php b/2. `app/Http/Controllers/Api/FrontendController.php new file mode 100644 index 0000000..444fd72 --- /dev/null +++ b/2. `app/Http/Controllers/Api/FrontendController.php @@ -0,0 +1,19 @@ +json(['message' => 'Frontend API']); + } + + public function store(Request $request) + { + // Handle store request + } +} diff --git a/3. `app/Http/Controllers/Api/BackendController.php b/3. `app/Http/Controllers/Api/BackendController.php new file mode 100644 index 0000000..e9cc713 --- /dev/null +++ b/3. `app/Http/Controllers/Api/BackendController.php @@ -0,0 +1,19 @@ +json(['message' => 'Backend API']); + } + + public function store(Request $request) + { + // Handle store request + } +} diff --git a/4. `app/Http/Middleware/CustomMiddleware.php b/4. `app/Http/Middleware/CustomMiddleware.php new file mode 100644 index 0000000..3a488d0 --- /dev/null +++ b/4. `app/Http/Middleware/CustomMiddleware.php @@ -0,0 +1,15 @@ +client = $client; + } + + public function sendPrompt($prompt) + { + return $this->client->completions()->create([ + 'model' => 'text-davinci-003', + 'prompt' => $prompt, + 'max_tokens' => 150, + ]); + } +} diff --git a/7. `resources/js/app.js b/7. `resources/js/app.js new file mode 100644 index 0000000..a2efeb2 --- /dev/null +++ b/7. `resources/js/app.js @@ -0,0 +1,9 @@ +$(document).ready(function() { + $.ajax({ + url: '/api/frontend', + method: 'GET', + success: function(response) { + console.log(response); + } + }); +}); diff --git a/8. `app/Http/Controllers/Admin/ApiConfigController.php b/8. `app/Http/Controllers/Admin/ApiConfigController.php new file mode 100644 index 0000000..e2ed3e2 --- /dev/null +++ b/8. `app/Http/Controllers/Admin/ApiConfigController.php @@ -0,0 +1,26 @@ +name = $request->name; + $config->value = $request->value; + $config->save(); + + return redirect()->route('admin.api_config.index'); + } +} diff --git a/9. `app/Models/ApiConfig.php b/9. `app/Models/ApiConfig.php new file mode 100644 index 0000000..9ac23eb --- /dev/null +++ b/9. `app/Models/ApiConfig.php @@ -0,0 +1,10 @@ +