inicializovany composer pre projekt,
instalovane balicky tpsoft/dbmodel a tpsoft/apilite. vygenerovane subory dbmodel-files
This commit is contained in:
27
backend/composer.json
Normal file
27
backend/composer.json
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
{
|
||||||
|
"name": "tpsoft/nutrio",
|
||||||
|
"description": "Backend pre jedalnicky s vypoctom kalorii.",
|
||||||
|
"type": "project",
|
||||||
|
"license": "MIT",
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"TPsoft\\Nutrio\\": "src/"
|
||||||
|
},
|
||||||
|
"files": [
|
||||||
|
"config/Configuration.php"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "igor",
|
||||||
|
"email": "mino@tpsoft.org"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"require": {
|
||||||
|
"tpsoft/apilite": "^1.0",
|
||||||
|
"tpsoft/dbmodel": "^1.1"
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"model": "php scripts/createModel.php"
|
||||||
|
}
|
||||||
|
}
|
||||||
113
backend/composer.lock
generated
Normal file
113
backend/composer.lock
generated
Normal file
@ -0,0 +1,113 @@
|
|||||||
|
{
|
||||||
|
"_readme": [
|
||||||
|
"This file locks the dependencies of your project to a known state",
|
||||||
|
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||||
|
"This file is @generated automatically"
|
||||||
|
],
|
||||||
|
"content-hash": "9b92dc81ccf6b0cc7f350c56793c6523",
|
||||||
|
"packages": [
|
||||||
|
{
|
||||||
|
"name": "tpsoft/apilite",
|
||||||
|
"version": "v1.0.3",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://gitea.tpsoft.org/TPsoft.org/APIlite.git",
|
||||||
|
"reference": "c0fd7b3fe5270ee44a84a92e9255ada2438812b7"
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"php": ">=8.2"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"TPsoft\\APIlite\\": "src/"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"GPL-3.0-or-later"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Igor Mino",
|
||||||
|
"email": "mino@tpsoft.org",
|
||||||
|
"homepage": "https://www.tpsoft.org",
|
||||||
|
"role": "Developer"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "A set of tools to simplify the work of creating backend APIs for your frontend projects.",
|
||||||
|
"keywords": [
|
||||||
|
"api",
|
||||||
|
"json",
|
||||||
|
"php",
|
||||||
|
"rest",
|
||||||
|
"typescript"
|
||||||
|
],
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"url": "https://www.anycoin.cz/donate/igormino",
|
||||||
|
"type": "other"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"time": "2025-10-13T21:36:34+00:00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "tpsoft/dbmodel",
|
||||||
|
"version": "v1.1.1",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://gitea.tpsoft.org/TPsoft.org/DBmodel.git",
|
||||||
|
"reference": "ff5663282f1efaa6c79d36760afca25ac25c16e6"
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"ext-pdo": "*",
|
||||||
|
"php": ">=8.2"
|
||||||
|
},
|
||||||
|
"bin": [
|
||||||
|
"bin/dbmodel-files"
|
||||||
|
],
|
||||||
|
"type": "library",
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"TPsoft\\DBmodel\\": "src/"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"GPL-3.0-or-later"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Igor Mino",
|
||||||
|
"email": "mino@tpsoft.org",
|
||||||
|
"homepage": "https://www.tpsoft.org",
|
||||||
|
"role": "Developer"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "This library extends the builtin PDO object by several useful features. ",
|
||||||
|
"keywords": [
|
||||||
|
"db",
|
||||||
|
"model",
|
||||||
|
"mysql",
|
||||||
|
"pdo",
|
||||||
|
"sqlite"
|
||||||
|
],
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"url": "https://www.anycoin.cz/donate/igormino",
|
||||||
|
"type": "other"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"time": "2026-02-09T05:39:02+00:00"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"packages-dev": [],
|
||||||
|
"aliases": [],
|
||||||
|
"minimum-stability": "stable",
|
||||||
|
"stability-flags": {},
|
||||||
|
"prefer-stable": false,
|
||||||
|
"prefer-lowest": false,
|
||||||
|
"platform": {},
|
||||||
|
"platform-dev": {},
|
||||||
|
"plugin-api-version": "2.6.0"
|
||||||
|
}
|
||||||
31
backend/config/Configuration.php
Normal file
31
backend/config/Configuration.php
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
$others_config = scandir(__DIR__);
|
||||||
|
$loaded = false;
|
||||||
|
foreach ($others_config as $file) {
|
||||||
|
if ($file == basename(__FILE__)) continue;
|
||||||
|
if (substr($file, -4) == '.php') {
|
||||||
|
require_once __DIR__ . '/' . $file;
|
||||||
|
$loaded = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$loaded) {
|
||||||
|
class Configuration
|
||||||
|
{
|
||||||
|
public const DB_TYPE = 'sqlite';
|
||||||
|
// MySQL
|
||||||
|
public const DB_HOST = 'localhost';
|
||||||
|
public const DB_USER = 'username';
|
||||||
|
public const DB_PASS = '****************';
|
||||||
|
public const DB_NAME = 'databasename';
|
||||||
|
// SQLite
|
||||||
|
public const DB_FILEPATH = __DIR__ . '/../../data/database.db';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') ? "https://" : "http://";
|
||||||
|
$host = $_SERVER['HTTP_HOST'];
|
||||||
|
$uri = $_SERVER['REQUEST_URI']; // obsahuje aj query string
|
||||||
|
|
||||||
|
define('URL_PREFIX', $protocol.$host.str_replace(basename($_SERVER['SCRIPT_NAME']), '', $_SERVER['SCRIPT_NAME']));
|
||||||
9
backend/scripts/createModel.php
Normal file
9
backend/scripts/createModel.php
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
require_once __DIR__ . '/../src/Init.php';
|
||||||
|
use \TPsoft\DBmodel\Creator;
|
||||||
|
|
||||||
|
global $dbh;
|
||||||
|
$creator = new Creator($dbh);
|
||||||
|
$creator->rootDir(realpath(__DIR__.'/../src/'));
|
||||||
|
$creator->interact();
|
||||||
20
backend/src/Init.php
Normal file
20
backend/src/Init.php
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
require __DIR__ . '/../vendor/autoload.php';
|
||||||
|
|
||||||
|
use \Exception;
|
||||||
|
use \TPsoft\DBmodel\DBmodel;
|
||||||
|
use \TPsoft\Nutrio\Maintenance;
|
||||||
|
|
||||||
|
global $dbh;
|
||||||
|
|
||||||
|
if (Configuration::DB_TYPE == 'mysql') {
|
||||||
|
$dbh = new DBmodel(sprintf('mysql:host=%s;dbname=%s;charset=utf8mb4', Configuration::DB_HOST, Configuration::DB_NAME), Configuration::DB_USER, Configuration::DB_PASS);
|
||||||
|
} else if (Configuration::DB_TYPE == 'sqlite') {
|
||||||
|
$dbh = new DBmodel(sprintf('sqlite:%s', Configuration::DB_FILEPATH));
|
||||||
|
} else {
|
||||||
|
throw new Exception('Unknown database type');
|
||||||
|
}
|
||||||
|
|
||||||
|
$maintenance = new Maintenance($dbh);
|
||||||
|
$maintenance->database();
|
||||||
58
backend/src/Maintenance.php
Normal file
58
backend/src/Maintenance.php
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace TPsoft\Nutrio\;
|
||||||
|
|
||||||
|
class Maintenance extends \TPsoft\DBmodel\Maintenance
|
||||||
|
{
|
||||||
|
|
||||||
|
public function database()
|
||||||
|
{
|
||||||
|
if (!$this->existsTable('options')) {
|
||||||
|
$this->checkDBTable('options', '
|
||||||
|
`key` VARCHAR(255) NOT NULL PRIMARY KEY,
|
||||||
|
`value` VARCHAR(255) NOT NULL
|
||||||
|
');
|
||||||
|
$this->dbver(1);
|
||||||
|
}
|
||||||
|
$dbver = $this->dbver();
|
||||||
|
if ($dbver == 1) {
|
||||||
|
// create new
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function settings(string $key, ?string $value = null): string|false
|
||||||
|
{
|
||||||
|
if (is_null($value)) {
|
||||||
|
return $this->dbh->getOne(sprintf('SELECT `value` FROM `options` WHERE `key` = %s', $this->dbh->quote($key)));
|
||||||
|
} else {
|
||||||
|
$db_type = $this->dbh->getDBtype();
|
||||||
|
switch ($db_type) {
|
||||||
|
case 'mysql':
|
||||||
|
return $this->dbh->query(sprintf(
|
||||||
|
'INSERT INTO `options` (`key`, `value`) VALUES (%s, %s) ON DUPLICATE KEY UPDATE `value` = %s',
|
||||||
|
$this->dbh->quote($key),
|
||||||
|
$this->dbh->quote($value),
|
||||||
|
$this->dbh->quote($value)
|
||||||
|
)) !== false;
|
||||||
|
break;
|
||||||
|
case 'sqlite':
|
||||||
|
return $this->dbh->query(sprintf(
|
||||||
|
'INSERT INTO `options` (`key`, `value`) VALUES (%s, %s) ON CONFLICT(`key`) DO UPDATE SET `value` = %s',
|
||||||
|
$this->dbh->quote($key),
|
||||||
|
$this->dbh->quote($value),
|
||||||
|
$this->dbh->quote($value)
|
||||||
|
)) !== false;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
new \Exception('Unknown DB type: ' . $db_type);
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function dbver(?string $ver = null)
|
||||||
|
{
|
||||||
|
return $this->settings('version', $ver);
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user