Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
No results found
Show changes
Commits on Source (6)
...@@ -112,4 +112,8 @@ Setup Docker: ...@@ -112,4 +112,8 @@ Setup Docker:
![Alt text](public/images/image5.png) ![Alt text](public/images/image5.png)
## Register Page (/register) ## Register Page (/register)
![Alt text](public/images/imagez.png) ![Alt text](public/images/imagez.png)
\ No newline at end of file
# Perubahan
Membuat /api/user dan /api/cat untuk mendapatkan GET dari entities di basis data PHP
version: '3.3' version: '3.3'
services: services:
# apache:
# container_name: tubes-1-apache
# image: httpd
# ports:
# - "8080:80"
# volumes:
# - .:/var/www/html/
web: web:
container_name: tubes-1-web container_name: tubes-1-web
build: . build: .
...@@ -15,7 +8,7 @@ services: ...@@ -15,7 +8,7 @@ services:
- ./httpd.conf:/usr/local/apache2/conf/httpd.conf - ./httpd.conf:/usr/local/apache2/conf/httpd.conf
- ./public/images/:/var/www/html/public/images/ - ./public/images/:/var/www/html/public/images/
ports: ports:
- "8081:80" - "8080:80"
depends_on: depends_on:
- db - db
db: db:
...@@ -31,8 +24,13 @@ services: ...@@ -31,8 +24,13 @@ services:
MYSQL_PASSWORD : Babybaby123 MYSQL_PASSWORD : Babybaby123
MYSQL_DATABASE : migrate MYSQL_DATABASE : migrate
ports: ports:
- "3306:3306" - "3309:3306"
networks:
default:
name: my-network
# run command below first # run command below first
# docker exec -i tubes-1-db /bin/mysql -u root -pBabybaby123 migrate < ./migrations/migrate.sql # docker exec -i tubes-1-db /bin/mysql -u root -pBabybaby123 migrate < ./migrations/migrate.sql
\ No newline at end of file
...@@ -12,6 +12,8 @@ require_once PROJECT_ROOT_PATH . "/src/controllers/auth/RegisterController.php"; ...@@ -12,6 +12,8 @@ require_once PROJECT_ROOT_PATH . "/src/controllers/auth/RegisterController.php";
require_once PROJECT_ROOT_PATH . "/src/controllers/cat/CatController.php"; require_once PROJECT_ROOT_PATH . "/src/controllers/cat/CatController.php";
require_once PROJECT_ROOT_PATH . "/src/controllers/sightings/SightingController.php"; require_once PROJECT_ROOT_PATH . "/src/controllers/sightings/SightingController.php";
require_once PROJECT_ROOT_PATH . "/src/controllers/user/UserController.php"; require_once PROJECT_ROOT_PATH . "/src/controllers/user/UserController.php";
require_once PROJECT_ROOT_PATH . "/src/controllers/api/CatApiController.php";
require_once PROJECT_ROOT_PATH . "/src/controllers/api/UserApiController.php";
session_start(); session_start();
$router = new Router(); $router = new Router();
...@@ -29,4 +31,10 @@ $router->route("/sighting/*", SightingController::getInstance(), ["POST" => "aut ...@@ -29,4 +31,10 @@ $router->route("/sighting/*", SightingController::getInstance(), ["POST" => "aut
$router->route("/user", UserController::getInstance(), ["GET" => "admin"]); $router->route("/user", UserController::getInstance(), ["GET" => "admin"]);
$router->route("/user/*", UserController::getInstance(), ["POST" => "admin", "PUT" => "admin", "DELETE" => "admin"]); $router->route("/user/*", UserController::getInstance(), ["POST" => "admin", "PUT" => "admin", "DELETE" => "admin"]);
$router->route("/api/cat", CatApiController::getInstance(),[]);
$router->route("/api/cat/*", CatApiController::getInstance(),[]);
$router->route("/api/user", UserApiController::getInstance(),[]);
$router->route("/api/user/*", UserApiController::getInstance(),[]);
$router->run($_SERVER['REQUEST_URI'], $_SERVER['REQUEST_METHOD']); $router->run($_SERVER['REQUEST_URI'], $_SERVER['REQUEST_METHOD']);
\ No newline at end of file
...@@ -13,7 +13,10 @@ CREATE TABLE users ( ...@@ -13,7 +13,10 @@ CREATE TABLE users (
); );
INSERT INTO users (user_id, nama, username, password, email, isAdmin) VALUES INSERT INTO users (user_id, nama, username, password, email, isAdmin) VALUES
(1,'Roga','Roga','$2y$10$HLwQODDVcroIcYVs/vPL6.dmo0fl.7j/rjkXlcjdJeqoAOx7NgfLS','p@gmail.com',1), (1,'Roga','Roga','$2y$10$HLwQODDVcroIcYVs/vPL6.dmo0fl.7j/rjkXlcjdJeqoAOx7NgfLS','p@gmail.com',1),
(2,'Saroga','Saroga','$2y$10$HLwQODDVcroIcYVs/vPL6.dmo0fl.7j/rjkXlcjdJeqoAOx7NgfLS','p2@gmail.com',1); (2,'Saroga','Saroga','$2y$10$HLwQODDVcroIcYVs/vPL6.dmo0fl.7j/rjkXlcjdJeqoAOx7NgfLS','p2@gmail.com',0),
(3,'Jelata','Jelata','$2y$10$HLwQODDVcroIcYVs/vPL6.dmo0fl.7j/rjkXlcjdJeqoAOx7NgfLS','pe@gmail.com',0),
(4,'Tomas','Tomas','$2y$10$HLwQODDVcroIcYVs/vPL6.dmo0fl.7j/rjkXlcjdJeqoAOx7NgfLS','pe3@gmail.com',0),
(5,'Dhimx','Dhimx','$2y$10$HLwQODDVcroIcYVs/vPL6.dmo0fl.7j/rjkXlcjdJeqoAOx7NgfLS','pe4@gmail.com',0);
-- Cats Table -- Cats Table
......
<?php
require_once PROJECT_ROOT_PATH . "/src/bases/BaseController.php";
require_once PROJECT_ROOT_PATH . "/src/services/CatSrv.php";
require_once PROJECT_ROOT_PATH . "/src/utils/FileUploader.php";
require_once PROJECT_ROOT_PATH . "/src/services/SightingSrv.php";
class CatApiController extends BaseController
{
protected static $instance;
private function __construct($srv)
{
parent::__construct($srv);
}
public static function getInstance()
{
if (!isset(self::$instance)) {
self::$instance = new static(
CatSrv::getInstance()
);
}
return self::$instance;
}
public function get($urlParams)
{
if (!$urlParams) {
// Return all cats in JSON format
$cats = $this->srv->getAll([ "search" => $_GET['search'] ?? null,
"gender" => $_GET['gender'] ?? null,
"spayed" => $_GET['spayed'] ?? null,
"order" => $_GET['order'] ?? null,
"pageNo" => $_GET['pageNo'] ?? null,
"pageSize" => $_GET['pageSize'] ?? null,
"isDesc" => $_GET['isDesc'] ?? null]);
$responseCats = array_map(function ($cat) {
return $cat->toResponse();
}, $cats["result"]);
$response = new BaseResponse(true, $responseCats, "Cats retrieved successfully", 200);
} else {
// Return a single cat by ID in JSON format
$cat_id = $urlParams[0];
$cat = $this->srv->getCatById($cat_id)->toResponse();
if ($cat) {
$response = new BaseResponse(true, $cat, "Cat retrieved successfully", 200);
} else {
$response = new BaseResponse(false, null, "Cat not found", 404);
}
}
header('Content-Type: application/json');
echo $response->toJSON();
}
}
<?php
require_once PROJECT_ROOT_PATH . "/src/bases/BaseController.php";
require_once PROJECT_ROOT_PATH . "/src/services/UserSrv.php";
class UserApiController extends BaseController
{
protected static $instance;
private function __construct($srv)
{
parent::__construct($srv);
}
public static function getInstance()
{
if (!isset(self::$instance)) {
self::$instance = new static(
UserSrv::getInstance()
);
}
return self::$instance;
}
public function get($urlParams)
{
if (!$urlParams) {
$users = $this->srv->getAll([
"order" => "registration_date",
"pageNo" => $_GET['pageNo'] ?? 1,
"pageSize" => $_GET['pageSize'] ?? 10
]);
$responseUsers = array_map(function ($user) {
return $user->toResponse();
}, $users["result"]);
$_count = $users["count"];
$response = new BaseResponse(true, $responseUsers, "Cats retrieved successfully", 200);
} else {
$user_id = $urlParams[0];
$user = $this->srv->getById($user_id)->toResponse();
if ($user) {
$response = new BaseResponse(true, $user, "Cat retrieved successfully", 200);
} else {
$response = new BaseResponse(false, null, "Cat not found", 404);
}
}
header('Content-Type: application/json');
return $response->toJSON();
}
public function post($urlParams)
{
if ($urlParams) {
$userIdFromUrl = $urlParams[0];
// $authenticatedUserId = isset($_SESSION['user_id']) ? $_SESSION['user_id'] : null;
// // Check if the authenticated user is authorized to edit the user's data
// if (($authenticatedUserId !== $userIdFromUrl)) {
// return (new BaseResponse(false, null, "You are not authorized to edit this user's data", 403))->toJSON();
// }
$name = $_POST["nama"];
$updatedUserData = [
"nama" => $name,
];
$user = $this->srv->updateUser($userIdFromUrl, $updatedUserData);
if ($user) {
$response = new BaseResponse(true, $user->toResponse(), "User data updated successfully", 200);
} else {
$response = new BaseResponse(false, null, "Failed to update user data", 400);
}
return $response->toJSON();
}
return (new BaseResponse(false, null, "NOT AVAILABLE", 404))->toJSON();
}
public function delete($urlParams)
{
if ($urlParams) {
$userIdToDelete = $urlParams[0];
$authenticatedUserId = isset($_SESSION['user_id']) ? $_SESSION['user_id'] : null;
if (!$_SESSION['isAdmin'] && $authenticatedUserId !== $userIdToDelete) {
return (new BaseResponse(false, null, "You are not authorized to delete this user", 403))->toJSON();
}
$user = $this->srv->deleteUser($userIdToDelete);
if ($user) {
$response = new BaseResponse(true, $user->toResponse(), "User deleted successfully", 200);
} else {
$response = new BaseResponse(false, null, "Failed to delete user", 400);
}
return $response->toJSON();
}
return (new BaseResponse(false, null, "NOT IMPLEMENTED", 404))->toJSON();
}
}
\ No newline at end of file
...@@ -69,6 +69,13 @@ class UserSrv extends BaseSrv ...@@ -69,6 +69,13 @@ class UserSrv extends BaseSrv
return $user->constructFromArray($sqlRes); return $user->constructFromArray($sqlRes);
} }
public function getById($id) {
$sqlRes = $this->repository->getById($id);
$user = new UserModel();
return $user->constructFromArray($sqlRes);
}
public function getAll($config) public function getAll($config)
{ {
$order = ["registration_date"]; $order = ["registration_date"];
......