Added backend and refactored frond-end to support it.

* Removed unecesery home page
* Added PHP Api that provides auth and replaces the json-server for data storage
* Added support for alternate geocode-api
* Added registration  page
This commit is contained in:
2025-05-27 00:42:00 +02:00
parent 25c1b73e32
commit e88269224c
60 changed files with 4438 additions and 8994 deletions

40
api/calls/create_item.php Normal file
View File

@@ -0,0 +1,40 @@
<?php
session_start();
if (!isset($_SESSION['name'])) {
http_response_code(401);
echo json_encode(['message' => 'Unauthorized']);
die;
}
require_once 'config/db.php';
$data = json_decode(file_get_contents("php://input"));
if (isset($data->cityName) && isset($data->country) && isset($data->flag) && isset($data->date) && isset($data->notes) && isset($data->lat) && isset($data->lng) ) {
$date = new DateTime($data->date);
$data->date = $date->format('Y-m-d');
$query = "INSERT INTO items (cityName, country, flag, date, notes, lat, lng) VALUES (:cityName, :country, :flag, :date, :notes, :lat, :lng)";
$stmt = $pdo->prepare($query);
$stmt->bindParam(':cityName', $data->cityName);
$stmt->bindParam(':country', $data->country);
$stmt->bindParam(':flag', $data->flag);
$stmt->bindParam(':date', $data->date);
$stmt->bindParam(':notes', $data->notes);
$stmt->bindParam(':lat', $data->lat);
$stmt->bindParam(':lng', $data->lng);
if ($stmt->execute()) {
$data->id = $pdo->lastInsertId();
echo json_encode(['message' => 'Item created successfully','id' => $data->id ,'id' => $data->id, 'cityName' => $data->cityName, 'country' => $data->country, 'flag' => $data->flag, 'date' => $data->date, 'notes' => $data->notes, 'lat' => $data->lat, 'lng' => $data->lng ]);
} else {
http_response_code(500);
echo json_encode(['message' => 'Failed to create item']);
}
} else {
http_response_code(400);
echo json_encode(['message' => 'Invalid input']);
}

22
api/calls/delete_item.php Normal file
View File

@@ -0,0 +1,22 @@
<?php
session_start();
if (!isset($_SESSION['name'])) {
http_response_code(401);
echo json_encode(['message' => 'Unauthorized']);
die;
}
require_once 'config/db.php';
$id = isset($_GET['id']) ? $_GET['id'] : die('Item ID not provided');
$query = "DELETE FROM items WHERE id = :id";
$stmt = $pdo->prepare($query);
$stmt->bindParam(':id', $id);
if ($stmt->execute()) {
echo json_encode(['message' => 'Item deleted successfully']);
} else {
http_response_code(400);
echo json_encode(['message' => 'Failed to delete item']);
}

53
api/calls/geocode.php Normal file
View File

@@ -0,0 +1,53 @@
<?php
session_start();
if (!isset($_SESSION['name'])) {
http_response_code(401);
echo json_encode(['message' => 'Unauthorized']);
die;
}
if (!isset($_GET["latitude"]) || !isset($_GET["longitude"]) || empty($_GET["latitude"]) || empty($_GET["longitude"]) ) {
http_response_code(400);
echo json_encode(['message' => 'Invalid input']);
die;
}
require_once 'config/geocode.php';
$ch = curl_init();
switch ($geocodeType) {
case 'bigdatacloud':
$requrl = $geocodeApiurl . "?latitude=". $_GET["latitude"] ."&longitude=". $_GET["longitude"];
break;
case 'photon':
$requrl = $geocodeApiurl . "?lon=". $_GET["longitude"] ."&lat=". $_GET["latitude"];
break;
default:
http_response_code(401);
echo json_encode(['message' => 'Invalid request']);
die;
}
curl_setopt_array($ch, array(
CURLOPT_URL => $requrl,
CURLOPT_RETURNTRANSFER => true,
));
if ($geocodeApikey != false) {
curl_setopt($ch, CURLOPT_HTTPHEADER, ['X-Api-Key: '. $geocodeApikey]);
}
$response = json_decode(curl_exec($ch), true);
curl_close($ch);
switch ($geocodeType) {
case 'bigdatacloud':
echo json_encode(['city' => $response['city'], 'locality' => $response['locality'], 'countryName' => $response['countryName'],'countryCode' => $response['countryCode']]);
break;
case 'photon':
echo json_encode(['city' => $response['features'][0]['properties']['city'],'countryName' => $response['features'][0]['properties']['country'],'countryCode' => $response['features'][0]['properties']['countrycode']]);
break;
}

24
api/calls/get_item.php Normal file
View File

@@ -0,0 +1,24 @@
<?php
session_start();
if (!isset($_SESSION['name'])) {
http_response_code(401);
echo json_encode(['message' => 'Unauthorized']);
die;
}
require_once 'config/db.php';
$id = isset($_GET['id']) ? $_GET['id'] : die('Item ID not provided');
$query = "SELECT * FROM items WHERE id = :id";
$stmt = $pdo->prepare($query);
$stmt->bindParam(':id', $id);
$stmt->execute();
$item = $stmt->fetch(PDO::FETCH_ASSOC);
if ($item) {
echo json_encode($item);
} else {
http_response_code(404);
echo json_encode(['message' => 'Item not found']);
}

17
api/calls/get_items.php Normal file
View File

@@ -0,0 +1,17 @@
<?php
session_start();
if (!isset($_SESSION['name'])) {
http_response_code(401);
echo json_encode(['message' => 'Unauthorized']);
die;
}
require_once 'config/db.php';
$query = "SELECT * FROM items";
$stmt = $pdo->prepare($query);
$stmt->execute();
$items = $stmt->fetchAll(PDO::FETCH_ASSOC);
echo json_encode($items);