Add response and request objects and interfaces
diff --git a/README.md b/README.md
index 4b64da1..c860957 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,7 @@
 Todos:
 - [ ] Collect routes properly
 - [ ] Process routes correctly
+- [ ] Add request and response objects
diff --git a/app/Controller/BaseController.php b/app/Controller/BaseController.php
index aa0a79b..7df9387 100644
--- a/app/Controller/BaseController.php
+++ b/app/Controller/BaseController.php
@@ -3,12 +3,14 @@
 namespace App\Controller;
 use Ardent\Undercurrent\Attribute\Route;
+use Ardent\Undercurrent\Http\GenericResponse;
+use Ardent\Undercurrent\Http\ResponseInterface;
 class BaseController
 {
     #[Route('/hello')]
-    public function HelloWorld(): string
+    public function HelloWorld(): ResponseInterface
     {
-        return 'Hello, World!';
+        return new GenericResponse('Hello World!');
     }
 }
\ No newline at end of file
diff --git a/src/Http/GenericRequest.php b/src/Http/GenericRequest.php
new file mode 100644
index 0000000..c758a40
--- /dev/null
+++ b/src/Http/GenericRequest.php
@@ -0,0 +1,30 @@
+<?php
+
+namespace Ardent\Undercurrent\Http;
+
+class GenericRequest implements RequestInterface
+{
+
+    public function __construct(
+        private readonly MethodEnum $method,
+        private readonly string $uri,
+        private readonly array  $body,
+    )
+    {
+    }
+
+    public function getMethod(): MethodEnum
+    {
+        return $this->method;
+    }
+
+    public function getUri(): string
+    {
+        return $this->uri;
+    }
+
+    public function getBody(): array
+    {
+        return $this->body;
+    }
+}
\ No newline at end of file
diff --git a/src/Http/GenericResponse.php b/src/Http/GenericResponse.php
new file mode 100644
index 0000000..d80d350
--- /dev/null
+++ b/src/Http/GenericResponse.php
@@ -0,0 +1,23 @@
+<?php
+
+namespace Ardent\Undercurrent\Http;
+
+class GenericResponse implements ResponseInterface
+{
+    public function __construct(
+        private readonly string     $body,
+        private readonly StatusEnum $status = StatusEnum::OK,
+    )
+    {
+    }
+
+    public function getStatus(): StatusEnum
+    {
+        return $this->status;
+    }
+
+    public function getBody(): string
+    {
+        return $this->body;
+    }
+}
\ No newline at end of file
diff --git a/src/Controller/GenericRouter.php b/src/Http/GenericRouter.php
similarity index 89%
rename from src/Controller/GenericRouter.php
rename to src/Http/GenericRouter.php
index 28f75b1..0332ce5 100644
--- a/src/Controller/GenericRouter.php
+++ b/src/Http/GenericRouter.php
@@ -1,6 +1,6 @@
 <?php
-namespace Ardent\Undercurrent\Controller;
+namespace Ardent\Undercurrent\Http;
 use App\Controller\BaseController;
 use Ardent\Undercurrent\Attribute\Route;
diff --git a/src/Http/MethodEnum.php b/src/Http/MethodEnum.php
new file mode 100644
index 0000000..76948c9
--- /dev/null
+++ b/src/Http/MethodEnum.php
@@ -0,0 +1,16 @@
+<?php
+
+namespace Ardent\Undercurrent\Http;
+
+enum MethodEnum: string
+{
+    case GET = 'GET';
+    case POST = 'POST';
+//    case PUT = 'PUT';
+//    case PATCH = 'PATCH';
+//    case DELETE = 'DELETE';
+//    case HEAD = 'HEAD';
+//    case OPTIONS = 'OPTIONS';
+//    case TRACE = 'TRACE';
+//    case CONNECT = 'CONNECT';
+}
diff --git a/src/Http/RequestInterface.php b/src/Http/RequestInterface.php
new file mode 100644
index 0000000..0f564b8
--- /dev/null
+++ b/src/Http/RequestInterface.php
@@ -0,0 +1,12 @@
+<?php
+
+namespace Ardent\Undercurrent\Http;
+
+interface RequestInterface
+{
+    public function getMethod(): MethodEnum;
+
+    public function getUri(): string;
+
+    public function getBody(): array;
+}
\ No newline at end of file
diff --git a/src/Http/ResponseInterface.php b/src/Http/ResponseInterface.php
new file mode 100644
index 0000000..abdc290
--- /dev/null
+++ b/src/Http/ResponseInterface.php
@@ -0,0 +1,10 @@
+<?php
+
+namespace Ardent\Undercurrent\Http;
+
+interface ResponseInterface
+{
+    public function getStatus(): StatusEnum;
+
+    public function getBody(): string;
+}
\ No newline at end of file
diff --git a/src/Http/RouterInterface.php b/src/Http/RouterInterface.php
new file mode 100644
index 0000000..186baac
--- /dev/null
+++ b/src/Http/RouterInterface.php
@@ -0,0 +1,8 @@
+<?php
+
+namespace Ardent\Undercurrent\Http;
+
+interface RouterInterface
+{
+    public function dispatch(RequestInterface $request): ResponseInterface;
+}
\ No newline at end of file
diff --git a/src/Http/StatusEnum.php b/src/Http/StatusEnum.php
new file mode 100644
index 0000000..6dce100
--- /dev/null
+++ b/src/Http/StatusEnum.php
@@ -0,0 +1,10 @@
+<?php
+
+namespace Ardent\Undercurrent\Http;
+
+enum StatusEnum: int
+{
+    case OK = 200;
+    case FORBIDDEN = 403;
+    case NOT_FOUND = 404;
+}
diff --git a/src/Kernel/BaseKernel.php b/src/Kernel/BaseKernel.php
index 6bc8ed5..05ecf06 100644
--- a/src/Kernel/BaseKernel.php
+++ b/src/Kernel/BaseKernel.php
@@ -4,11 +4,12 @@ namespace Ardent\Undercurrent\Kernel;
 use App\Controller\BaseController;
 use Ardent\Undercurrent\Container\GenericContainer;
-use Ardent\Undercurrent\Controller\GenericRouter;
+use Ardent\Undercurrent\Http\GenericRouter;
+use Ardent\Undercurrent\Http\ResponseInterface;
 class BaseKernel
 {
-    public function __invoke()
+    public function __invoke(): void
     {
         $container = new GenericContainer();
         $container->add(GenericRouter::class);
@@ -23,6 +24,6 @@ class BaseKernel
         $route = $router->getRoute($_SERVER['REQUEST_URI']);
         $controller = $container->get($route['controller']);
         $method = $route['method'];
-        echo $controller->$method();
+        echo $controller->$method()->getBody();
     }
 }
\ No newline at end of file
			
			
This commit is contained in:
		| @@ -1,6 +1,7 @@ | |||||||
| Todos: | Todos: | ||||||
| - [ ] Collect routes properly | - [ ] Collect routes properly | ||||||
| - [ ] Process routes correctly | - [ ] Process routes correctly | ||||||
|  | - [ ] Add request and response objects | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|   | |||||||
| @@ -3,12 +3,14 @@ | |||||||
| namespace App\Controller; | namespace App\Controller; | ||||||
|  |  | ||||||
| use Ardent\Undercurrent\Attribute\Route; | use Ardent\Undercurrent\Attribute\Route; | ||||||
|  | use Ardent\Undercurrent\Http\GenericResponse; | ||||||
|  | use Ardent\Undercurrent\Http\ResponseInterface; | ||||||
|  |  | ||||||
| class BaseController | class BaseController | ||||||
| { | { | ||||||
|     #[Route('/hello')] |     #[Route('/hello')] | ||||||
|     public function HelloWorld(): string |     public function HelloWorld(): ResponseInterface | ||||||
|     { |     { | ||||||
|         return 'Hello, World!'; |         return new GenericResponse('Hello World!'); | ||||||
|     } |     } | ||||||
| } | } | ||||||
							
								
								
									
										30
									
								
								src/Http/GenericRequest.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								src/Http/GenericRequest.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,30 @@ | |||||||
|  | <?php | ||||||
|  |  | ||||||
|  | namespace Ardent\Undercurrent\Http; | ||||||
|  |  | ||||||
|  | class GenericRequest implements RequestInterface | ||||||
|  | { | ||||||
|  |  | ||||||
|  |     public function __construct( | ||||||
|  |         private readonly MethodEnum $method, | ||||||
|  |         private readonly string $uri, | ||||||
|  |         private readonly array  $body, | ||||||
|  |     ) | ||||||
|  |     { | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public function getMethod(): MethodEnum | ||||||
|  |     { | ||||||
|  |         return $this->method; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public function getUri(): string | ||||||
|  |     { | ||||||
|  |         return $this->uri; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public function getBody(): array | ||||||
|  |     { | ||||||
|  |         return $this->body; | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										23
									
								
								src/Http/GenericResponse.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								src/Http/GenericResponse.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,23 @@ | |||||||
|  | <?php | ||||||
|  |  | ||||||
|  | namespace Ardent\Undercurrent\Http; | ||||||
|  |  | ||||||
|  | class GenericResponse implements ResponseInterface | ||||||
|  | { | ||||||
|  |     public function __construct( | ||||||
|  |         private readonly string     $body, | ||||||
|  |         private readonly StatusEnum $status = StatusEnum::OK, | ||||||
|  |     ) | ||||||
|  |     { | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public function getStatus(): StatusEnum | ||||||
|  |     { | ||||||
|  |         return $this->status; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public function getBody(): string | ||||||
|  |     { | ||||||
|  |         return $this->body; | ||||||
|  |     } | ||||||
|  | } | ||||||
| @@ -1,6 +1,6 @@ | |||||||
| <?php | <?php | ||||||
| 
 | 
 | ||||||
| namespace Ardent\Undercurrent\Controller; | namespace Ardent\Undercurrent\Http; | ||||||
| 
 | 
 | ||||||
| use App\Controller\BaseController; | use App\Controller\BaseController; | ||||||
| use Ardent\Undercurrent\Attribute\Route; | use Ardent\Undercurrent\Attribute\Route; | ||||||
							
								
								
									
										16
									
								
								src/Http/MethodEnum.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								src/Http/MethodEnum.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,16 @@ | |||||||
|  | <?php | ||||||
|  |  | ||||||
|  | namespace Ardent\Undercurrent\Http; | ||||||
|  |  | ||||||
|  | enum MethodEnum: string | ||||||
|  | { | ||||||
|  |     case GET = 'GET'; | ||||||
|  |     case POST = 'POST'; | ||||||
|  | //    case PUT = 'PUT'; | ||||||
|  | //    case PATCH = 'PATCH'; | ||||||
|  | //    case DELETE = 'DELETE'; | ||||||
|  | //    case HEAD = 'HEAD'; | ||||||
|  | //    case OPTIONS = 'OPTIONS'; | ||||||
|  | //    case TRACE = 'TRACE'; | ||||||
|  | //    case CONNECT = 'CONNECT'; | ||||||
|  | } | ||||||
							
								
								
									
										12
									
								
								src/Http/RequestInterface.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								src/Http/RequestInterface.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,12 @@ | |||||||
|  | <?php | ||||||
|  |  | ||||||
|  | namespace Ardent\Undercurrent\Http; | ||||||
|  |  | ||||||
|  | interface RequestInterface | ||||||
|  | { | ||||||
|  |     public function getMethod(): MethodEnum; | ||||||
|  |  | ||||||
|  |     public function getUri(): string; | ||||||
|  |  | ||||||
|  |     public function getBody(): array; | ||||||
|  | } | ||||||
							
								
								
									
										10
									
								
								src/Http/ResponseInterface.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								src/Http/ResponseInterface.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,10 @@ | |||||||
|  | <?php | ||||||
|  |  | ||||||
|  | namespace Ardent\Undercurrent\Http; | ||||||
|  |  | ||||||
|  | interface ResponseInterface | ||||||
|  | { | ||||||
|  |     public function getStatus(): StatusEnum; | ||||||
|  |  | ||||||
|  |     public function getBody(): string; | ||||||
|  | } | ||||||
							
								
								
									
										8
									
								
								src/Http/RouterInterface.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								src/Http/RouterInterface.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,8 @@ | |||||||
|  | <?php | ||||||
|  |  | ||||||
|  | namespace Ardent\Undercurrent\Http; | ||||||
|  |  | ||||||
|  | interface RouterInterface | ||||||
|  | { | ||||||
|  |     public function dispatch(RequestInterface $request): ResponseInterface; | ||||||
|  | } | ||||||
							
								
								
									
										10
									
								
								src/Http/StatusEnum.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								src/Http/StatusEnum.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,10 @@ | |||||||
|  | <?php | ||||||
|  |  | ||||||
|  | namespace Ardent\Undercurrent\Http; | ||||||
|  |  | ||||||
|  | enum StatusEnum: int | ||||||
|  | { | ||||||
|  |     case OK = 200; | ||||||
|  |     case FORBIDDEN = 403; | ||||||
|  |     case NOT_FOUND = 404; | ||||||
|  | } | ||||||
| @@ -4,11 +4,12 @@ namespace Ardent\Undercurrent\Kernel; | |||||||
|  |  | ||||||
| use App\Controller\BaseController; | use App\Controller\BaseController; | ||||||
| use Ardent\Undercurrent\Container\GenericContainer; | use Ardent\Undercurrent\Container\GenericContainer; | ||||||
| use Ardent\Undercurrent\Controller\GenericRouter; | use Ardent\Undercurrent\Http\GenericRouter; | ||||||
|  | use Ardent\Undercurrent\Http\ResponseInterface; | ||||||
|  |  | ||||||
| class BaseKernel | class BaseKernel | ||||||
| { | { | ||||||
|     public function __invoke() |     public function __invoke(): void | ||||||
|     { |     { | ||||||
|         $container = new GenericContainer(); |         $container = new GenericContainer(); | ||||||
|         $container->add(GenericRouter::class); |         $container->add(GenericRouter::class); | ||||||
| @@ -23,6 +24,6 @@ class BaseKernel | |||||||
|         $route = $router->getRoute($_SERVER['REQUEST_URI']); |         $route = $router->getRoute($_SERVER['REQUEST_URI']); | ||||||
|         $controller = $container->get($route['controller']); |         $controller = $container->get($route['controller']); | ||||||
|         $method = $route['method']; |         $method = $route['method']; | ||||||
|         echo $controller->$method(); |         echo $controller->$method()->getBody(); | ||||||
|     } |     } | ||||||
| } | } | ||||||
		Reference in New Issue
	
	Block a user