diff --git a/app/Http/Controllers/API/AuthController.php b/app/Http/Controllers/API/AuthController.php index a038d97..95e8116 100644 --- a/app/Http/Controllers/API/AuthController.php +++ b/app/Http/Controllers/API/AuthController.php @@ -4,58 +4,116 @@ namespace App\Http\Controllers\API; use App\Http\Controllers\Controller; use Illuminate\Http\Request; -use App\Models\User; use Illuminate\Support\Facades\Auth; -use Illuminate\Support\Facades\Validator; +use App\Models\User; class AuthController extends Controller { + /** + * Create user + * + * @param [string] name + * @param [string] email + * @param [string] password + * @param [string] password_confirmation + * @return [string] message + */ public function register(Request $request) { - $validator = Validator::make($request->all(), [ - 'name' => 'required', - 'email' => 'required|email|unique:users', - 'password' => 'required', + $request->validate([ + 'name' => 'required|string', + 'email'=>'required|string|unique:users', + 'password'=>'required|string', + 'c_password' => 'required|same:password' ]); - if ($validator->fails()) { - return response()->json($validator->errors(), 422); - } - - $user = User::create([ - 'name' => $request->name, + $user = new User([ + 'name' => $request->name, 'email' => $request->email, 'password' => bcrypt($request->password), ]); - $token = $user->createToken('auth_token')->plainTextToken; + if($user->save()){ + $tokenResult = $user->createToken('Personal Access Token'); + $token = $tokenResult->plainTextToken; - return response()->json([ - 'user' => $user, - 'token' => $token, - ]); + return response()->json([ + 'message' => 'Successfully created user!', + 'user' => $user, + 'accessToken'=> $token, + ],201); + } + else{ + return response()->json(['error'=>'Provide proper details']); + } } + /** + * Login user and create token + * + * @param [string] email + * @param [string] password + * @param [boolean] remember_me + */ public function login(Request $request) { - if (!Auth::attempt($request->only('email', 'password'))) { - return response()->json(['message' => 'Invalid login details'], 401); + $request->validate([ + 'email' => 'required|string|email', + 'password' => 'required|string', + 'remember_me' => 'boolean' + ]); + + $credentials = request(['email','password']); + if(!Auth::attempt($credentials)) + { + return response()->json([ + 'message' => 'Unauthorized' + ],401); } - $user = User::where('email', $request['email'])->firstOrFail(); - - $token = $user->createToken('auth_token')->plainTextToken; + $user = $request->user(); + $tokenResult = $user->createToken('Personal Access Token'); + $token = $tokenResult->plainTextToken; return response()->json([ + 'accessToken' =>$token, 'user' => $user, - 'token' => $token, + 'token_type' => 'Bearer', ]); } + /** + * Get the authenticated User + * + * @return [json] user object + */ + public function user(Request $request) + { + return response()->json($request->user()); + } + + /** + * Get the authenticated User + * + * @return [json] user object + */ + public function username(Request $request) + { + return response()->json($request->user()['name']); + } + + /** + * Logout user (Revoke the token) + * + * @return [string] message + */ public function logout(Request $request) { - $request->user()->currentAccessToken()->delete(); + $request->user()->tokens()->delete(); + + return response()->json([ + 'message' => 'Successfully logged out' + ]); - return response()->json(['message' => 'Logged out']); } } diff --git a/app/Http/Controllers/ComputerController.php b/app/Http/Controllers/ComputerController.php new file mode 100644 index 0000000..4beb41c --- /dev/null +++ b/app/Http/Controllers/ComputerController.php @@ -0,0 +1,69 @@ +get(); + } + + public function getById(Request $request){ + return Computer::find($request->get('id')); + } + + public function getByUserId(Request $request){ + return Computer::select()->where('user_id', '=', $request->get('user_id'))->get(); + } + + public function create(Request $request) + { + $request->validate([ + 'user_id' => 'required|exists:users,id', + 'name' => 'required|string|max:256', + 'cpu' => 'nullable|string|max:256', + 'motherboard' => 'nullable|string|max:256', + 'gpu' => 'nullable|string|max:256', + 'additional_info' => 'nullable|string|max:256', + ]); + + $computer = Computer::create($request->all()); + return response()->json($wish, 201); + } + + public function update(Request $request) + { + $request->validate([ + 'id' => 'required|exists:computers,id', + 'name' => 'required|string|max:256', + 'cpu' => 'nullable|string|max:256', + 'motherboard' => 'nullable|string|max:256', + 'gpu' => 'nullable|string|max:256', + 'additional_info' => 'nullable|string|max:256', + ]); + + $computer = Computer::find($request->get('id')); + $computer->name = $request->get('name'); + $computer->cpu = $request->get('cpu'); + $computer->motherboard = $request->get('motherboard'); + $computer->gpu = $request->get('gpu'); + $computer->additional_info = $request->get('additional_info'); + $computer->save(); + return response()->json($computer); + + } + + public function destroy(Request $request) + { + $request->validate([ + 'id' => 'required|exists:wishes,id', + ]); + $destroyed = Computer::destroy($request->get('id')); + return response()->json($destroyed, 204); + + } +} diff --git a/app/Http/Controllers/JobController.php b/app/Http/Controllers/JobController.php new file mode 100644 index 0000000..efa3c10 --- /dev/null +++ b/app/Http/Controllers/JobController.php @@ -0,0 +1,65 @@ +id(); + $table->unsignedBigInteger('user_id'); + $table->foreign('user_id')->references('id')->on('users'); + $table->string('name', length: 256); + $table->string('cpu', length: 256)->nullable(); + $table->string('motherboard', length: 256)->nullable(); + $table->string('gpu', length: 256)->nullable(); + $table->string('additional_info', length: 256)->nullable(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('computers'); + } +}; diff --git a/database/migrations/2024_10_31_091129_create_jobs_table.php b/database/migrations/2024_10_31_091129_create_jobs_table.php new file mode 100644 index 0000000..4485e8f --- /dev/null +++ b/database/migrations/2024_10_31_091129_create_jobs_table.php @@ -0,0 +1,31 @@ +id(); + $table->unsignedBigInteger('computer_id'); + $table->foreign('computer_id')->references('id')->on('computers'); + $table->string('description', length: 256); + $table->boolean('status')->default(false); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('jobs'); + } +}; diff --git a/public/images/favicon.svg b/public/images/favicon.svg new file mode 100644 index 0000000..54e9180 --- /dev/null +++ b/public/images/favicon.svg @@ -0,0 +1,4 @@ + + \ No newline at end of file diff --git a/resources/App.vue b/resources/App.vue index d3ae563..5147bf8 100644 --- a/resources/App.vue +++ b/resources/App.vue @@ -31,9 +31,9 @@ :class="menuOpen ? 'mt-2 mb-2 pa-2' : 'mt-10 mb-3 pa-5'" >