diff --git a/app/Http/Controllers/API/v2/UserController.php b/app/Http/Controllers/API/v2/UserController.php new file mode 100644 index 0000000..c066269 --- /dev/null +++ b/app/Http/Controllers/API/v2/UserController.php @@ -0,0 +1,75 @@ +input('username') ?? ''; + $matrix_username = $request->input('matrix_username') ?? ''; + $phone = $request->input('phone') ?? ''; + + if($username == '') { + return response()->json([ + 'error' => 'The username is empty, please, write username!!!' + ]); + } + + $user = User::firstOrCreate( + ['username' => $username], + // if username is free then the new user will be created + // with addition arguments: + [ + 'matrix_username' => $matrix_username, + 'phone' => $phone + ] + ); + + if(!$user->wasRecentlyCreated) { + return response()->json([ + 'error' => 'A user with the username already exists!!!' + ]); + } + + return response()->json([ + 'ok' => 'A user with the username registered successfully.' + ]); + } + + public function login(Request $request) + { + $username = $request->input('username') ?? ''; + $matrix_username = $request->input('matrix_username') ?? ''; + + if($username == '') { + return response()->json([ + 'error' => 'The username is empty, please, write username!!!' + ]); + } + + $user = User::where('username', $username)->first(); + + if($user) { + return response()->json([ + 'error' => 'A user with the username does not exist!!!' + ]); + } + + // Update matrix user if needed + // TODO add verification check + if($user->matrix_username != $matrix_username) { + $user->matrix_username = $matrix_username; + $user->save(); + } + + return response()->json([ + 'ok' => 'Login was successful.' + ]); + } +} diff --git a/routes/api.php b/routes/api.php index 1ee3f3f..6c9a0ce 100644 --- a/routes/api.php +++ b/routes/api.php @@ -28,6 +28,10 @@ Route::group([ Route::apiResource('companies', CompanyController::class); Route::apiResource('categories', CategoryController::class); Route::apiResource('items', ItemController::class); + + // User + Route::post('register', 'UserController@register'); + Route::post('login', 'UserController@login'); } ); diff --git a/tests/Feature/UserTest.php b/tests/Feature/UserTest.php new file mode 100644 index 0000000..5a18f99 --- /dev/null +++ b/tests/Feature/UserTest.php @@ -0,0 +1,88 @@ +post('/api/v2/register', [ + 'username' => $username, + 'matrix_username' => $matrix_username, + 'phone' => $phone, + ]); + + $response->assertStatus(200); + + $response->assertJson([ + 'ok' => 'A user with the username registered successfully.' + ]); + + $this->assertDatabaseHas('users', [ + 'username' => $username + ]); + + $user = User::where('username', $username)->first(); + $user->delete(); + + $this->assertDatabaseMissing('users', [ + 'username' => $username + ]); + } + + public function test_register_existing_user(): void + { + $username = 'Oleg'; + $matrix_username = 'Oleg@oleg.com'; + $phone = '380671231212'; + + $response = $this->post('/api/v2/register', [ + 'username' => $username, + 'matrix_username' => $matrix_username, + 'phone' => $phone, + ]); + + $response->assertStatus(200); + + $response->assertJson([ + 'ok' => 'A user with the username registered successfully.' + ]); + + $this->assertDatabaseHas('users', [ + 'username' => $username + ]); + + // trying create again + + $response = $this->post('/api/v2/register', [ + 'username' => $username, + 'matrix_username' => $matrix_username, + 'phone' => $phone, + ]); + + $response->assertStatus(200); + + $response->assertJson([ + 'error' => 'A user with the username already exists!!!' + ]); + + // removing new user + + $user = User::where('username', $username)->first(); + $user->delete(); + + $this->assertDatabaseMissing('users', [ + 'username' => $username + ]); + } +}