obsidian/MyObsidianVault/WebDev/2 CodeIgniter/API Project setup/03.) API Routes Setup.md
2024-12-08 09:19:03 +01:00

1.9 KiB

https://www.youtube.com/watch?v=_ZRHt-fWJpc&list=PLT9miexWCpPW6Z_OXNv2d78cqCrZaPrVG&index=29

app/Config/Routes.php

Remember: Shield added =>

service('auth')->routes($routes)
// API routes (put below service('auth'))
$routes->group("api", ["namespace" => "App\Controller\Api"], function($routes) {
	$routes->post("register", "AuthController::register");
	$routes->post("login", "AuthController::login");
	$routes->get("profile", "AuthController::profile");
	$routes->get("logout", "AuthController::logout", ["filter"=>"apiauth"]);

	//$routes->post("add-project", "ProjectController::addProject");
	//$routes->get("list-projects", "ProjectController::listProjects");
	//$routes->delete("delete-project/(:num)", "ProjectController::deleteProject/$1");
});

$routes->get("logout", "AuthController::logout", ["filter" => "apiauth"]);


use CodeIgniter\Restful\ResourceController;
use CodeIgniter\Shield\Models\UserModel;
use CodeIgniter\Shield\Entities\User;

class AuthController extends ResourceController
{
	//Post
	public function register()
	{
		$rules = [
			"username" => "required|is_unique[users.username]", 
			"email" => "required|valid_email|is_unique[auth_identities.secret]",  // gets written to secret field in user table
			"password" => "required" // gets written to secret 2 field in user table
		];

		if (!$this->validate($rules)) {
			return $this->respondCreated([
				"status" => false,
				"message"  => $this->validator->getErrors(),
				"data" => []
			]
		);
			
		$um = new UserModel(); // coming from Shield
		$userEntity = new User([
			"username" => $this->request->getVar("username"),
			"email" => $this->request->getVar("email"),
			"password" => $this->request->getVar("password")
		]);
		$um->save($userEntity);
		
		return $this->respondCreated( [
			"status" => true,
			"message" => "User saved successfully",
			"data" => []
		]);
	}

}