Browse Source

initial commit

Andrew 3 weeks ago
commit
c452eb4b4d
41 changed files with 5065 additions and 0 deletions
  1. 5 0
      .gitignore
  2. 8 0
      .idea/.gitignore
  3. 29 0
      .idea/backend.iml
  4. 8 0
      .idea/modules.xml
  5. 46 0
      .idea/php.xml
  6. 10 0
      .idea/phpspec.xml
  7. 6 0
      .idea/vcs.xml
  8. 33 0
      README.md
  9. 32 0
      app/Config.php
  10. 254 0
      app/Controllers/AccountController.php
  11. 107 0
      app/Controllers/ErrorController.php
  12. 25 0
      app/Controllers/HomeController.php
  13. 110 0
      app/Controllers/VideoController.php
  14. 16 0
      app/Exceptions/AccountNotFoundException.php
  15. 16 0
      app/Exceptions/CommentNotFoundException.php
  16. 15 0
      app/Exceptions/ConfigEntryNotFoundException.php
  17. 16 0
      app/Exceptions/FollowNotFoundException.php
  18. 16 0
      app/Exceptions/MessageNotFoundException.php
  19. 71 0
      app/Exceptions/SecurityFaultException.php
  20. 16 0
      app/Exceptions/SessionNotFoundException.php
  21. 16 0
      app/Exceptions/UnauthenticatedException.php
  22. 16 0
      app/Exceptions/VideoNotFoundException.php
  23. 68 0
      app/Hajeebtok.php
  24. 116 0
      app/Helpers.php
  25. 102 0
      app/Interfaces/IDatabase.php
  26. 50 0
      app/Interfaces/IDatabaseObject.php
  27. 19 0
      app/Interfaces/IRouteController.php
  28. 240 0
      app/Logger.php
  29. 121 0
      app/Types/DatabaseObjects/Account.php
  30. 83 0
      app/Types/DatabaseObjects/Comment.php
  31. 88 0
      app/Types/DatabaseObjects/Follow.php
  32. 93 0
      app/Types/DatabaseObjects/Message.php
  33. 100 0
      app/Types/DatabaseObjects/Session.php
  34. 96 0
      app/Types/DatabaseObjects/Video.php
  35. 153 0
      app/Types/MariaDBDatabase.php
  36. 12 0
      composer.json
  37. 937 0
      composer.lock
  38. 10 0
      config.ini.example
  39. 24 0
      log.ps1
  40. 1867 0
      logs/rajesh.log
  41. 15 0
      public/index.php

+ 5 - 0
.gitignore

@@ -0,0 +1,5 @@
+usercontent/
+config.ini
+run.bat
+.vscode
+vendor/

+ 8 - 0
.idea/.gitignore

@@ -0,0 +1,8 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Editor-based HTTP Client requests
+/httpRequests/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml

+ 29 - 0
.idea/backend.iml

@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module type="WEB_MODULE" version="4">
+  <component name="NewModuleRootManager">
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$/app" isTestSource="false" packagePrefix="app\" />
+      <sourceFolder url="file://$MODULE_DIR$/spec" isTestSource="true" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/composer" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/pecee/simple-router" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/ralouphie/mimey" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/evenement/evenement" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/php-ffmpeg/php-ffmpeg" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/psr/cache" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/psr/container" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/psr/log" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/spatie/temporary-directory" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/cache" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/cache-contracts" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/deprecation-contracts" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/process" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/service-contracts" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/var-exporter" />
+      <excludeFolder url="file://$MODULE_DIR$/.vscode" />
+      <excludeFolder url="file://$MODULE_DIR$/usercontent" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor" />
+    </content>
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+  </component>
+</module>

+ 8 - 0
.idea/modules.xml

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ProjectModuleManager">
+    <modules>
+      <module fileurl="file://$PROJECT_DIR$/.idea/backend.iml" filepath="$PROJECT_DIR$/.idea/backend.iml" />
+    </modules>
+  </component>
+</project>

+ 46 - 0
.idea/php.xml

@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="MessDetectorOptionsConfiguration">
+    <option name="transferred" value="true" />
+  </component>
+  <component name="PHPCSFixerOptionsConfiguration">
+    <option name="transferred" value="true" />
+  </component>
+  <component name="PHPCodeSnifferOptionsConfiguration">
+    <option name="highlightLevel" value="WARNING" />
+    <option name="transferred" value="true" />
+  </component>
+  <component name="PhpIncludePathManager">
+    <include_path>
+      <path value="$PROJECT_DIR$/vendor/composer" />
+      <path value="$PROJECT_DIR$/vendor/ralouphie/mimey" />
+      <path value="$PROJECT_DIR$/vendor/pecee/simple-router" />
+      <path value="$PROJECT_DIR$/vendor/psr/cache" />
+      <path value="$PROJECT_DIR$/vendor/psr/container" />
+      <path value="$PROJECT_DIR$/vendor/psr/log" />
+      <path value="$PROJECT_DIR$/vendor/symfony/cache" />
+      <path value="$PROJECT_DIR$/vendor/symfony/cache-contracts" />
+      <path value="$PROJECT_DIR$/vendor/symfony/deprecation-contracts" />
+      <path value="$PROJECT_DIR$/vendor/symfony/process" />
+      <path value="$PROJECT_DIR$/vendor/symfony/service-contracts" />
+      <path value="$PROJECT_DIR$/vendor/symfony/var-exporter" />
+      <path value="$PROJECT_DIR$/vendor/evenement/evenement" />
+      <path value="$PROJECT_DIR$/vendor/php-ffmpeg/php-ffmpeg" />
+      <path value="$PROJECT_DIR$/vendor/spatie/temporary-directory" />
+    </include_path>
+  </component>
+  <component name="PhpProjectSharedConfiguration" php_language_level="8.4">
+    <option name="suggestChangeDefaultLanguageLevel" value="false" />
+  </component>
+  <component name="PhpStanOptionsConfiguration">
+    <option name="transferred" value="true" />
+  </component>
+  <component name="PhpUnit">
+    <phpunit_settings>
+      <PhpUnitSettings custom_loader_path="$PROJECT_DIR$/vendor/autoload.php" />
+    </phpunit_settings>
+  </component>
+  <component name="PsalmOptionsConfiguration">
+    <option name="transferred" value="true" />
+  </component>
+</project>

+ 10 - 0
.idea/phpspec.xml

@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="PHPSpec">
+    <suites>
+      <PhpSpecSuiteConfiguration>
+        <option name="myPath" value="$PROJECT_DIR$" />
+      </PhpSpecSuiteConfiguration>
+    </suites>
+  </component>
+</project>

+ 6 - 0
.idea/vcs.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="VcsDirectoryMappings">
+    <mapping directory="$PROJECT_DIR$" vcs="Git" />
+  </component>
+</project>

+ 33 - 0
README.md

@@ -0,0 +1,33 @@
+# Hajeebtok Backend
+
+Skibidi? Hub? You must've hit your head pretty hard.
+Come on bro, let's go doomscroll hajeebtok!
+
+# Setup
+
+```aiignore
+git clone http://git.buttplugstudios.xyz/andrew/hajeebtok-backend.git
+cd hajeebtok-backend
+
+# Config
+mv config.ini.example config.ini
+nano config.ini
+
+# User Content setup
+mkdir usercontent
+cd usercontent
+mkdir videos
+mkdir pictures
+cd ..
+
+# PHP Setup
+composer install
+php -S 0.0.0.0:8080 -t public 
+# please run this with any other web server
+# other than the php one
+```
+
+# Database 
+
+Hajeebtok uses MariaDB as a database.
+Run hajeebtok.sql on your database to automatically setup the structure.

+ 32 - 0
app/Config.php

@@ -0,0 +1,32 @@
+<?php
+
+namespace app;
+
+use app\Exceptions\ConfigEntryNotFoundException;
+
+class Config {
+    private array $configArray;
+
+    public function __construct() {
+        $this->configArray = parse_ini_file(APP_ROOT . "/config.ini", true);
+    }
+
+    public function GetByDotKey(string $dotKey): string|int|float|array
+    {
+        $explodedKey = explode(".", $dotKey);
+
+        $currentTraversal = $this->configArray;
+        $finalValue = null;
+
+        foreach ($explodedKey as $key) {
+            if (array_key_exists($key, $currentTraversal))
+                $currentTraversal = $currentTraversal[$key];
+            else
+                throw new ConfigEntryNotFoundException($dotKey);
+
+            $finalValue = $currentTraversal;
+        }
+
+        return $finalValue;
+    }
+}

+ 254 - 0
app/Controllers/AccountController.php

@@ -0,0 +1,254 @@
+<?php
+
+namespace app\Controllers;
+
+use app\Exceptions\UnauthenticatedException;
+use app\Exceptions\VideoNotFoundException;
+use app\Hajeebtok;
+use app\Logger;
+use app\Types\DatabaseObjects\Account;
+use app\Types\DatabaseObjects\Session;
+use FFMpeg\FFMpeg;
+use Hajeebtok\Types\Exceptions\SecurityFaultException;
+use Mimey\MimeTypes;
+use Pecee\SimpleRouter\SimpleRouter;
+use app\Interfaces\IRouteController;
+
+class AccountController implements IRouteController
+{
+    public static function getToken(): string
+    {
+        $username = input("username");
+        $password = password_hash(input("password"), PASSWORD_DEFAULT);
+
+        $account = new Account(
+            username: $username,
+            password: $password,
+            picture_hash: "default",
+            verified: false
+        );
+
+        if ($account->Exists()) { // Account already exists
+            $account->Load();
+            if (password_verify($password, $account->password)) throw new UnauthenticatedException($account->id, 401);
+            $session = new Session(account_id: $account->id);
+        } else { // Create a new account
+            $session = new Session(account_id: $account->Save());
+        }
+
+        return api_json([
+            "token" => $session->Save(),
+            "auth_date" => $session->date_authenticated
+        ]);
+    }
+
+    public static function getAccount($id): string
+    {
+        $account = new Account(id: $id);
+        $account->Load();
+        return api_json([
+            "id" => $id,
+            "username" => $account->username,
+            "verified" => $account->verified,
+            "bio" => $account->bio,
+            "pictureHash" => $account->picture_hash
+        ]);
+    }
+
+    public static function search(): string
+    {
+        $query = input("query");
+        $account = new Account(username: $query);
+        $accounts = $account->LoadMany();
+        return api_json($accounts);
+    }
+
+    public static function getVideos($id): string
+    {
+        $account = new Account(id: $id);
+        $data = Hajeebtok::$Database->Query("SELECT * FROM videos WHERE author_id = :author_id", ["author_id" => $account->id]);
+        if (empty($data)) throw new VideoNotFoundException(0, 404);
+        return api_json($data);
+    }
+
+    public static function getPicture($id): string
+    {
+        $signedIn = signed_in(request());
+
+        if($signedIn) {
+            $account = new Account(id: $id);
+            $account->Load();
+
+            $picturePath = APP_ROOT . "/usercontent/pictures/$account->picture_hash.png";
+        } else {
+            // this is hardcoded because i dont care
+            $picturePath = APP_ROOT . "/usercontent/pictures/premium_" . rand(1, 57) . ".png";
+        }
+
+        $mimeTypes = new MimeTypes();
+
+        $pictureContents = file_get_contents($picturePath);
+        $pictureSize = filesize($picturePath);
+
+        $mime = $mimeTypes->getMimeType(pathinfo($picturePath, PATHINFO_EXTENSION));
+
+        $response = response();
+        $response->header("Content-Type: $mime");
+        $response->header("Content-Length: $pictureSize");
+        $response->header("Cache-Control: max-age=3600, public");
+
+        return $pictureContents;
+    }
+
+    public static function getAvailablePremiumProfilePictures(): string
+    {
+        $pictures = [];
+        for ($i = 1; $i <= 57; $i++) {
+            $pictures[] = $i;
+        }
+        return api_json($pictures);
+    }
+
+    public static function getPremiumProfilePicture($id): string
+    {
+        $picturePath = APP_ROOT . "/usercontent/pictures/premium_$id.png";
+
+        $mimeTypes = new MimeTypes();
+
+        $pictureContents = file_get_contents($picturePath);
+        $pictureSize = filesize($picturePath);
+
+        $mime = $mimeTypes->getMimeType(pathinfo($picturePath, PATHINFO_EXTENSION));
+
+        $response = response();
+        $response->header("Content-Type: $mime");
+        $response->header("Content-Length: $pictureSize");
+        $response->header("Cache-Control: max-age=3600, public");
+
+        return $pictureContents;
+    }
+
+    public static function updateAccount(): string
+    {
+        if(!signed_in(request())) throw new UnauthenticatedException(0, 401);
+        $id = get_token_id(request());
+
+        $picture_hash = input("picture_hash");
+        $picture = request()->getInputHandler()->file("picture");
+        $bio = input("bio");
+
+        if(empty($picture) && !empty($picture_hash)) {
+            $validPictureHashList = [
+                "default",
+                "premium_1",
+                "premium_2",
+                "premium_3",
+                "premium_4",
+                "premium_5",
+                "premium_6",
+                "premium_7",
+                "premium_8",
+                "premium_9",
+                "premium_10",
+                "premium_11",
+                "premium_12",
+                "premium_13",
+                "premium_14",
+                "premium_15",
+                "premium_16",
+                "premium_17",
+                "premium_18",
+                "premium_19",
+                "premium_20",
+                "premium_21",
+                "premium_22",
+                "premium_23",
+                "premium_24",
+                "premium_25",
+                "premium_26",
+                "premium_27",
+                "premium_28",
+                "premium_29",
+                "premium_30",
+                "premium_31",
+                "premium_32",
+                "premium_33",
+                "premium_34",
+                "premium_35",
+                "premium_36",
+                "premium_37",
+                "premium_38",
+                "premium_39",
+                "premium_40",
+                "premium_41",
+                "premium_42",
+                "premium_43",
+                "premium_44",
+                "premium_45",
+                "premium_46",
+                "premium_47",
+                "premium_48",
+                "premium_49",
+                "premium_50",
+                "premium_51",
+                "premium_52",
+                "premium_53",
+                "premium_54",
+                "premium_55",
+                "premium_56",
+                "premium_57"
+            ];
+
+            if(!in_array($picture_hash, $validPictureHashList)) throw new SecurityFaultException("Attempt to path trace on /update endpoint.",400);
+        } else if (!empty($picture) && empty($picture_hash)) {
+            $picture_hash = hash("sha256", $picture);
+            $picturePath =  APP_ROOT . "/usercontent/pictures/$picture_hash.png";
+
+            imagepng(imagecreatefromstring(file_get_contents($picture), $picturePath)); // save image
+        }
+
+        $old_account = new Account(id: $id);
+        $old_account->Load();
+        $new_account = new Account(
+            id: $id,
+            username: $old_account->username,
+            password: $old_account->password,
+            picture_hash: $picture_hash ?? $old_account->picture_hash,
+            verified: $old_account->verified,
+            bio: $bio ?? $old_account->bio,
+        );
+
+        $new_account->Update();
+        return api_json([
+            "id" => $new_account->id,
+            "username" => $new_account->username,
+            "pictureHash" => $new_account->picture_hash,
+            "bio" => $new_account->bio,
+            "verified" => $new_account->verified,
+        ]);
+    }
+
+    // todo turn this into middleware
+    public static function corsBullshit() {
+        $response = response();
+        $response->header("Access-Control-Allow-Origin: *");
+        $response->header("Access-Control-Allow-Headers: Authorization, Content-Type");
+    }
+
+    public static function RegisterRoutes(): void
+    {
+        SimpleRouter::group([
+            "prefix" => "/account/",
+        ], function () {
+            SimpleRouter::get("/{id}/get", [AccountController::class, "getAccount"]);
+            SimpleRouter::get("/{id}/videos", [AccountController::class, "getVideos"]);
+            SimpleRouter::get("/{id}/picture", [AccountController::class, "getPicture"]);
+            SimpleRouter::post("/token", [AccountController::class, "getToken"]);
+            SimpleRouter::post("/search", [AccountController::class, "search"]);
+            SimpleRouter::post("/update", [AccountController::class, "updateAccount"]);
+            SimpleRouter::options("/update", [AccountController::class, "corsBullshit"]);
+            SimpleRouter::get("/availablePremiumProfilePictures", [AccountController::class, "getAvailablePremiumProfilePictures"]);
+            SimpleRouter::get("/getPremiumProfilePicture/{id}", [AccountController::class, "getPremiumProfilePicture"]);
+        });
+    }
+}

+ 107 - 0
app/Controllers/ErrorController.php

@@ -0,0 +1,107 @@
+<?php
+/*
+ * Part of Shuzanne - An extensible sequel to an open-source imageboard.
+ *
+ * @package   Shuzanne
+ * @author    MisleadingName, Shuzanne Contributors
+ * @license   MPL v2.0
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/.
+ */
+
+namespace app\Controllers;
+
+use Pecee\SimpleRouter\SimpleRouter;
+use app\Interfaces\IRouteController;
+
+class ErrorController implements IRouteController
+{
+    /**
+     * @var array<int, string> HTTP status code lookup
+     */
+    private static array $codeLookup = [
+        100 => "Continue",
+        101 => "Switching Protocols",
+        102 => "Processing",
+        103 => "Early Hints",
+        200 => "OK",
+        201 => "Created",
+        202 => "Accepted",
+        203 => "Non-Authoritative Information",
+        204 => "No Content",
+        205 => "Reset Content",
+        206 => "Partial Content",
+        207 => "Multi-Status",
+        208 => "Already Reported",
+        226 => "IM Used",
+        300 => "Multiple Choices",
+        301 => "Moved Permanently",
+        302 => "Found",
+        303 => "See Other",
+        304 => "Not Modified",
+        305 => "Use Proxy",
+        306 => "Switch Proxy",
+        307 => "Temporary Redirect",
+        308 => "Permanent Redirect",
+        400 => "Bad Request",
+        401 => "Unauthorized",
+        402 => "Payment Required",
+        403 => "Forbidden",
+        404 => "Not Found",
+        405 => "Method Not Allowed",
+        406 => "Not Acceptable",
+        407 => "Proxy Authentication Required",
+        408 => "Request Timeout",
+        409 => "Conflict",
+        410 => "Gone",
+        411 => "Length Required",
+        412 => "Precondition Failed",
+        413 => "Request Entity Too Large",
+        414 => "Request-URI Too Long",
+        415 => "Unsupported Media Type",
+        416 => "Requested Range Not Satisfiable",
+        417 => "Expectation Failed",
+        418 => "I'm a teapot",
+        421 => "Misdirected Request",
+        422 => "Unprocessable Entity",
+        423 => "Locked",
+        424 => "Failed Dependency",
+        425 => "Too Early",
+        426 => "Upgrade Required",
+        428 => "Precondition Required",
+        429 => "Too Many Requests",
+        431 => "Request Header Fields Too Large",
+        451 => "Unavailable For Legal Reasons",
+        500 => "Internal Server Error",
+        501 => "Not Implemented",
+        502 => "Bad Gateway",
+        503 => "Service Unavailable",
+        504 => "Gateway Timeout",
+        505 => "HTTP Version Not Supported",
+        506 => "Variant Also Negotiates",
+        507 => "Insufficient Storage",
+        508 => "Loop Detected",
+        510 => "Not Extended",
+        511 => "Network Authentication Required",
+        599 => "Network Connect Timeout Error",
+    ];
+
+    public static function HtmlError($code): string
+    {
+        return render("pages/error.twig", ["error_code" => $code, "error_name" => array_key_exists($code, self::$codeLookup) ? self::$codeLookup[$code] : "Unknown Error"]);
+    }
+    public static function ApiError($code)
+    {
+        return api_json([
+            "error" => $code,
+            "message" => self::$codeLookup[$code],
+        ]);
+    }
+
+    static function RegisterRoutes(): void
+    {
+        // It's an error handler, no need for routing.
+    }
+}

+ 25 - 0
app/Controllers/HomeController.php

@@ -0,0 +1,25 @@
+<?php
+
+namespace app\Controllers;
+
+use Pecee\SimpleRouter\SimpleRouter;
+use app\Interfaces\IRouteController;
+use app\Hajeebtok;
+
+class HomeController implements IRouteController
+{
+	public static function redirect(): void {
+        if(Hajeebtok::$Config->GetByDotKey("Instance.DebugMode")) return;
+		response()->redirect("https://" . Hajeebtok::$Config->GetByDotKey("Instance.URL"));
+	}
+
+	public static function RegisterRoutes(): void
+	{
+		SimpleRouter::group([
+			"prefix" => "/",
+
+		], function () {
+			SimpleRouter::get("/", [HomeController::class, "redirect"]);
+		});
+	}
+}

+ 110 - 0
app/Controllers/VideoController.php

@@ -0,0 +1,110 @@
+<?php
+
+namespace app\Controllers;
+
+use app\Exceptions\AccountNotFoundException;
+use app\Exceptions\VideoNotFoundException;
+use app\Hajeebtok;
+use Pecee\SimpleRouter\SimpleRouter;
+use Mimey\MimeTypes;
+use app\Interfaces\IRouteController;
+use app\Types\DatabaseObjects\Video;
+use app\Types\DatabaseObjects\Account;
+use app\Logger;
+
+class VideoController implements IRouteController
+{
+	public static function getVideo(string $id): string
+	{
+        $signedIn = signed_in(request());
+
+        $videoInformation = new Video($id);
+        $videoInformation->Load();
+        $mimeTypes = new MimeTypes();
+
+        if($signedIn) { // Signed in
+            $videoPath = APP_ROOT . "/usercontent/videos/$id/video.mp4";
+        } else { // not signed in
+            $videoPath = APP_ROOT . "/usercontent/videos/1/video.mp4";
+        }
+
+        if (file_exists($videoPath)) {
+            $videoContents = file_get_contents($videoPath);
+            $videoSize = filesize($videoPath);
+
+            $mime = $mimeTypes->getMimeType(pathinfo($videoPath, PATHINFO_EXTENSION));
+
+            $response = response();
+            $response->header("Content-Type: $mime");
+            $response->header("Content-Length: $videoSize");
+            $response->header("Cache-Control: max-age=86400, public");
+
+            return $videoContents;
+        } else {
+            throw new VideoNotFoundException($id, 404);
+        }
+	}
+
+	public static function getInfo(string $id): string
+	{
+		$videoInformation = new Video($id);
+		$videoInformation->Load();
+		$authorInformation = new Account($videoInformation->author_id);
+		$authorInformation->Load();
+
+		return api_json([
+			"title" => $videoInformation->title,
+			"description" => $videoInformation->description,
+			"likes" => $videoInformation->likes,
+			"dislikes" => $videoInformation->dislikes,
+			"comments" => $videoInformation->comments,
+			"shares" => $videoInformation->shares,
+			"author" => [
+				"id" => $authorInformation->id,
+				"pictureHash" => $authorInformation->picture_hash,
+				"username" => $authorInformation->username
+			],
+		]);
+	}
+
+    public static function search(): string {
+        $query = input("query");
+        $video = new Video(title: $query);
+        $videos = $video->LoadMany();
+
+        // idk if this is the greatest thing to do but jetbrains phpfart ai recommended it and it looks fine to me /shurg
+        $accounts = Hajeebtok::$Database->Query("SELECT * FROM accounts WHERE id IN (SELECT author_id FROM videos WHERE title LIKE :title)", ["title" => "%$query%"]);
+        if(empty($accounts)) throw new AccountNotFoundException(0, 404);
+
+        $data = [];
+        foreach($videos as $vid) {
+            $data[] = [
+                "title" => $vid["title"],
+                "description" => $vid["description"],
+                "likes" => $vid["likes"],
+                "dislikes" => $vid["dislikes"],
+                "comments" => $vid["comments"],
+                "shares" => $vid["shares"],
+                "author" => [
+                    "id" => $vid["author_id"],
+                    "pictureHash" => $accounts[$vid["author_id"] - 1]["picture_hash"], // kinda scuffed fix
+                    "username" => $accounts[$vid["author_id"] - 1]["username"]
+                ],
+            ];
+        }
+
+        return api_json($data);
+    }
+
+	public static function RegisterRoutes(): void
+	{
+		SimpleRouter::group([
+			"prefix" => "/video",
+		], function () {
+			SimpleRouter::get("/{id}", [VideoController::class, "getVideo"]);
+			//SimpleRouter::post("/upload", [VideoController::class, "uploadVideo"]);
+			SimpleRouter::get("/{id}/info", [VideoController::class, "getInfo"]);
+            SimpleRouter::post("/search", [VideoController::class, "search"]);
+		});
+	}
+}

+ 16 - 0
app/Exceptions/AccountNotFoundException.php

@@ -0,0 +1,16 @@
+<?php
+
+namespace app\Exceptions;
+
+use app\Logger;
+use \Exception;
+use \Throwable;
+
+class AccountNotFoundException extends Exception
+{
+	public function __construct(int $id, int $code = 0, ?Throwable $previous = null)
+	{
+		Logger::Error("Couldn't find account id ($id)");
+		parent::__construct("Couldn't find account id ($id)", $code, $previous);
+	}
+}

+ 16 - 0
app/Exceptions/CommentNotFoundException.php

@@ -0,0 +1,16 @@
+<?php
+
+namespace app\Exceptions;
+
+use app\Logger;
+use \Exception;
+use \Throwable;
+
+class CommentNotFoundException extends Exception
+{
+	public function __construct(int $id, int $code = 0, ?Throwable $previous = null)
+	{
+		Logger::Error("Couldn't find comment id ($id)");
+		parent::__construct("Couldn't find comment id ($id)", $code, $previous);
+	}
+}

+ 15 - 0
app/Exceptions/ConfigEntryNotFoundException.php

@@ -0,0 +1,15 @@
+<?php
+
+namespace app\Exceptions;
+
+use app\Logger;
+use \Exception;
+use \Throwable;
+
+class ConfigEntryNotFoundException extends Exception {
+    public function __construct(string $config = "", int $code = 0, ?Throwable $previous = null)
+	{
+		Logger::Error("Couldn't find config key entry ($config)");
+		parent::__construct("Couldn't find config key entry ($config)", $code, $previous);
+	}
+}

+ 16 - 0
app/Exceptions/FollowNotFoundException.php

@@ -0,0 +1,16 @@
+<?php
+
+namespace app\Exceptions;
+
+use app\Logger;
+use \Exception;
+use \Throwable;
+
+class FollowNotFoundException extends Exception
+{
+	public function __construct(int $id, int $code = 0, ?Throwable $previous = null)
+	{
+		Logger::Error("Couldn't find follow id ($id)");
+		parent::__construct("Couldn't find follow id ($id)", $code, $previous);
+	}
+}

+ 16 - 0
app/Exceptions/MessageNotFoundException.php

@@ -0,0 +1,16 @@
+<?php
+
+namespace app\Exceptions;
+
+use app\Logger;
+use \Exception;
+use \Throwable;
+
+class MessageNotFoundException extends Exception
+{
+	public function __construct(int $id, int $code = 0, ?Throwable $previous = null)
+	{
+		Logger::Error("Couldn't find message id ($id)");
+		parent::__construct("Couldn't find message id ($id)", $code, $previous);
+	}
+}

+ 71 - 0
app/Exceptions/SecurityFaultException.php

@@ -0,0 +1,71 @@
+<?php
+/*
+ * Part of Shuzanne - An extensible sequel to an open-source imageboard.
+ *
+ * @package   Shuzanne
+ * @author    MisleadingName, Shuzanne Contributors
+ * @license   MPL v2.0
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/.
+ */
+
+namespace Hajeebtok\Types\Exceptions;
+
+use Exception;
+use JetBrains\PhpStorm\Pure;
+use app\Logger;
+use app\Hajeebtok;
+use Throwable;
+
+class SecurityFaultException extends Exception
+{
+	public function __construct(string $message = "", int $code = 0, ?Throwable $previous = null)
+	{
+		Logger::Fatal("Security fault tripped: $message Request details:");
+
+		$incidentId = bin2hex(random_bytes(16));
+		$devmode = Hajeebtok::$Config->GetByDotKey("Instance.DebugMode") == "true";
+
+		Logger::Fatal("Incident ID: $incidentId");
+		$details = json_encode($_SERVER, JSON_PRETTY_PRINT);
+		Logger::Fatal($details);
+
+		$otherDetails = json_encode($_REQUEST, JSON_PRETTY_PRINT);
+		Logger::Fatal($otherDetails);
+
+		parent::__construct("Security fault tripped: $message", $code, $previous);
+
+		$details = $devmode ? $details : "Redacted";
+		$otherDetails = $devmode ? $otherDetails : "Redacted";
+
+		http_response_code(403);
+		die(<<<HTML
+<!doctype html>
+<html lang="en">
+<head>
+<meta charset="UTF-8">
+             <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
+                         <meta http-equiv="X-UA-Compatible" content="ie=edge">
+             <title>Shuzanne</title>
+</head>
+<body style="font-family: sans-serif; background-color: #eee; color: #333; padding: 20px;">
+<div style="border: 8px solid #f00; padding: 1em; background-color: #ffff00;">
+	<h1 style="margin: 0;">You have triggered a security fault.</h1>
+	<p style="margin: 1em 0;">Your request has been terminated, and the incident has been logged. Please contact the site administrator if you believe this was in error.</p>
+	<summary>
+		<details>
+			<summary>Request details</summary>
+			<p>Incident ID: $incidentId</p>
+			<pre style="white-space: pre-wrap;">$details</pre>
+			<pre style="white-space: pre-wrap;">$otherDetails</pre>
+		</details>
+</summary>
+</div>
+<p><a href="javascript:history.back()">Go back</a></p>
+</body>
+</html>
+HTML);
+	}
+}

+ 16 - 0
app/Exceptions/SessionNotFoundException.php

@@ -0,0 +1,16 @@
+<?php
+
+namespace app\Exceptions;
+
+use app\Logger;
+use \Exception;
+use \Throwable;
+
+class SessionNotFoundException extends Exception
+{
+	public function __construct(int $id, int $code = 0, ?Throwable $previous = null)
+	{
+		Logger::Error("Couldn't find session token ($id)");
+		parent::__construct("Couldn't find session token ($id)", $code, $previous);
+	}
+}

+ 16 - 0
app/Exceptions/UnauthenticatedException.php

@@ -0,0 +1,16 @@
+<?php
+
+namespace app\Exceptions;
+
+use app\Logger;
+use \Exception;
+use \Throwable;
+
+class UnauthenticatedException extends Exception
+{
+	public function __construct(int $id, int $code = 0, ?Throwable $previous = null)
+	{
+		Logger::Error("Unauthenticated exception. ($id)");
+		parent::__construct("Unauthenticated exception. ($id)", $code, $previous);
+	}
+}

+ 16 - 0
app/Exceptions/VideoNotFoundException.php

@@ -0,0 +1,16 @@
+<?php
+
+namespace app\Exceptions;
+
+use app\Logger;
+use \Exception;
+use \Throwable;
+
+class VideoNotFoundException extends Exception
+{
+	public function __construct(int $id, int $code = 0, ?Throwable $previous = null)
+	{
+		Logger::Error("Couldn't find video id ($id)");
+		parent::__construct("Couldn't find video id ($id)", $code, $previous);
+	}
+}

+ 68 - 0
app/Hajeebtok.php

@@ -0,0 +1,68 @@
+<?php
+
+namespace app;
+
+use app\Controllers\AccountController;
+use app\Types\DatabaseObjects\Message;
+use app\Types\DatabaseObjects\Comment;
+use Exception;
+use Pecee\Http\Request;
+use Pecee\SimpleRouter\SimpleRouter;
+use Pecee\Http\Middleware\BaseCsrfVerifier;
+use app\Controllers\VideoController;
+use app\Controllers\HomeController;
+use app\Interfaces\IDatabase;
+use app\Types\MariaDBDatabase;
+use app\Types\DatabaseObjects\Video;
+use app\Types\DatabaseObjects\Account;
+use app\Controllers\ErrorController;
+
+class Hajeebtok {
+	public static IDatabase $Database;
+	public static Config $Config;
+
+	public static function InitializeApp() {
+		Logger::SetMinLevel(LogLevel::DBUG);
+		Logger::SetMaxLogSizeKB(5000);
+
+		self::$Config = new Config();
+
+		self::$Database = new MariaDBDatabase([
+			"Host" => self::$Config->GetByDotKey("Database.Host"),
+			"Port" => self::$Config->GetByDotKey("Database.Port"),
+			"Username" => self::$Config->GetByDotKey("Database.Username"),
+			"Password" => self::$Config->GetByDotKey("Database.Password"),
+			"Database" => self::$Config->GetByDotKey("Database.Database"),
+			"Charset" => self::$Config->GetByDotKey("Database.Charset"),
+		]);
+
+		//SimpleRouter::csrfVerifier(new BaseCsrfVerifier());
+		SimpleRouter::setDefaultNamespace('app\Controllers');
+		
+		VideoController::RegisterRoutes();
+		HomeController::RegisterRoutes();
+        AccountController::RegisterRoutes();
+		
+		Logger::Info("Hajeebtok application initialized.");
+
+		/*
+		$hajeebtokAcc = new Account(username: "hajeebtok", password: "CENSORED", picture_hash: "default", verified: true, bio: "The best short form content platform!");
+		$hajeebtokAcc->Save();
+
+		$johnClapperAcc = new Account(username: "johnclapper", password: "CENSORED", picture_hash: "default", verified: true, bio: "My name is John Clapper. I clap everyone. I clap first at the cinema. No one else claps. Why does a jewish vrchat furry avatar bring a brisket to the vrchat furry convention? Because even in the metaverse they never show up empty handed!");
+		$johnClapperAcc->Save();
+
+		$hajeebtokVideo = new Video(title: "Habibi video", description: "🌹❤❤❤😍😍😍💖💖🎶🎶✌✌", author_id: 1, likes: 1000000, dislikes: 0);
+		$hajeebtokVideo->Save();
+		*/
+
+        SimpleRouter::error(function (Request $request, Exception $error) {
+            Logger::Error("Route fault: $error");
+            $request->setRewriteCallback(function () use ($error) {
+                return ErrorController::ApiError($error->getCode());
+            });
+        });
+
+		SimpleRouter::start();
+	}
+}

+ 116 - 0
app/Helpers.php

@@ -0,0 +1,116 @@
+<?php
+
+use app\Hajeebtok;
+use Pecee\SimpleRouter\SimpleRouter as Router;
+use Pecee\Http\Url;
+use Pecee\Http\Response;
+use Pecee\Http\Request;
+
+/**
+ * Get url for a route by using either name/alias, class or method name.
+ *
+ * The name parameter supports the following values:
+ * - Route name
+ * - Controller/resource name (with or without method)
+ * - Controller class name
+ *
+ * When searching for controller/resource by name, you can use this syntax "route.name@method".
+ * You can also use the same syntax when searching for a specific controller-class "MyController@home".
+ * If no arguments is specified, it will return the url for the current loaded route.
+ *
+ * @param string|null $name
+ * @param string|array|null $parameters
+ * @param array|null $getParams
+ * @return \Pecee\Http\Url
+ * @throws \InvalidArgumentException
+ */
+function url(?string $name = null, $parameters = null, ?array $getParams = null): Url
+{
+    return Router::getUrl($name, $parameters, $getParams);
+}
+
+/**
+ * @return \Pecee\Http\Response
+ */
+function response(): Response
+{
+    return Router::response();
+}
+
+/**
+ * @return \Pecee\Http\Request
+ */
+function request(): Request
+{
+    return Router::request();
+}
+
+/**
+ * Get input class
+ * @param string|null $index Parameter index name
+ * @param string|mixed|null $defaultValue Default return value
+ * @param array ...$methods Default methods
+ * @return \Pecee\Http\Input\InputHandler|array|string|null
+ */
+function input($index = null, $defaultValue = null, ...$methods)
+{
+    if ($index !== null) {
+        return request()->getInputHandler()->value($index, $defaultValue, ...$methods);
+    }
+
+    return request()->getInputHandler();
+}
+
+/**
+ * @param string $url
+ * @param int|null $code
+ */
+function redirect(string $url, ?int $code = null): void
+{
+    if ($code !== null) {
+        response()->httpCode($code);
+    }
+
+    response()->redirect($url);
+}
+
+/**
+ * Get current csrf-token
+ * @return string|null
+ */
+function csrf_token(): ?string
+{
+    $baseVerifier = Router::router()->getCsrfVerifier();
+    if ($baseVerifier !== null) {
+        return $baseVerifier->getTokenProvider()->getToken();
+    }
+
+    return null;
+}
+
+/**
+ * @param array $data
+ * @return string
+ */
+function api_json(array $data): string
+{
+    header("Content-Type: application/json");
+    return json_encode($data);
+}
+
+function signed_in(Request $request): bool
+{
+    $authorizationHeader = $request->getHeader("Authorization");
+    $token = explode(" ", $authorizationHeader)[1];
+    $tokenData = Hajeebtok::$Database->Row("SELECT * FROM sessions WHERE token = :token", ["token" => $token]);
+    return !empty($tokenData);
+}
+
+function get_token_id(Request $request): int
+{
+    $authorizationHeader = $request->getHeader("Authorization");
+    $token = explode(" ", $authorizationHeader)[1];
+    $tokenData = Hajeebtok::$Database->Row("SELECT * FROM sessions WHERE token = :token", ["token" => $token]);
+    if(!empty($tokenData)) return $tokenData["account_id"];
+    return 0;
+}

+ 102 - 0
app/Interfaces/IDatabase.php

@@ -0,0 +1,102 @@
+<?php
+/*
+ * Part of Shuzanne - An extensible sequel to an open-source imageboard.
+ *
+ * @package   Shuzanne
+ * @author    MisleadingName, Shuzanne Contributors
+ * @license   MPL v2.0
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/.
+ */
+
+namespace app\Interfaces;
+
+use PDO;
+
+interface IDatabase
+{
+    /**
+     * Closes the database connection.
+     */
+    public function CloseConnection(): void;
+
+    /**
+     * Binds a single parameter to the query.
+     */
+    public function Bind(string $param, mixed $value): void;
+
+    /**
+     * Binds multiple parameters to the query.
+     */
+    public function BindMore(array $params): void;
+
+    /**
+     * Executes a SQL query.
+     *
+     * @param string $query
+     * @param array|null $params
+     * @param int $fetchMode
+     * @return mixed
+     */
+    public function Query(string $query, ?array $params = null, int $fetchMode = PDO::FETCH_ASSOC): mixed;
+
+    /**
+     * Executes a SQL query and returns the row count.
+     *
+     * @param string $query
+     * @param array|null $params
+     * @param int $fetchMode
+     * @return int
+     */
+    public function QueryRowCount(string $query, ?array $params = null, int $fetchMode = PDO::FETCH_ASSOC): int;
+
+    /**
+     * Returns the ID of the last inserted row.
+     */
+    public function LastInsertId(): string;
+
+    /**
+     * Begins a transaction.
+     */
+    public function BeginTransaction(): bool;
+
+    /**
+     * Commits a transaction.
+     */
+    public function ExecuteTransaction(): bool;
+
+    /**
+     * Rolls back a transaction.
+     */
+    public function Rollback(): bool;
+
+    /**
+     * Returns a single column from a result set.
+     *
+     * @param string $query
+     * @param array|null $params
+     * @return array
+     */
+    public function Column(string $query, ?array $params = null): array;
+
+    /**
+     * Returns a single row from a result set.
+     *
+     * @param string $query
+     * @param array|null $params
+     * @param int $fetchMode
+     * @return array
+     */
+    public function Row(string $query, ?array $params = null, int $fetchMode = PDO::FETCH_ASSOC): array;
+
+    /**
+     * Returns a single value from a result set.
+     *
+     * @param string $query
+     * @param array|null $params
+     * @return mixed
+     */
+    public function Single(string $query, ?array $params = null): mixed;
+}

+ 50 - 0
app/Interfaces/IDatabaseObject.php

@@ -0,0 +1,50 @@
+<?php
+/*
+ * Part of Shuzanne - An extensible sequel to an open-source imageboard.
+ *
+ * @package   Shuzanne
+ * @author    MisleadingName, Shuzanne Contributors
+ * @license   MPL v2.0
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/.
+ */
+
+namespace app\Interfaces;
+
+/*
+ * Objects that implement this interface can be stored in the database.
+ */
+interface IDatabaseObject
+{
+    /**
+     * Creates the table for the object type in the database.
+     */
+    public static function CreateTable(): void;
+
+    /**
+     * Drops the table for the object type from the database.
+     */
+    public static function DropTable(): void;
+
+    /**
+     * Saves the object to the database.
+     */
+    public function Save();
+
+    /**
+     * Deletes the object from the database.
+     */
+    public function Delete();
+
+    /**
+     * Loads the object from the database.
+     */
+    public function Load();
+
+    /**
+     * Loads multiple objects from the database.
+     */
+    public function LoadMany();
+}

+ 19 - 0
app/Interfaces/IRouteController.php

@@ -0,0 +1,19 @@
+<?php
+/*
+ * Part of Shuzanne - An extensible sequel to an open-source imageboard.
+ *
+ * @package   Shuzanne
+ * @author    MisleadingName, Shuzanne Contributors
+ * @license   MPL v2.0
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/.
+ */
+
+namespace app\Interfaces;
+
+interface IRouteController
+{
+    static function RegisterRoutes(): void;
+}

+ 240 - 0
app/Logger.php

@@ -0,0 +1,240 @@
+<?php
+/*
+ * Part of Shuzanne - An extensible sequel to an open-source imageboard.
+ *
+ * @package   Shuzanne
+ * @author    MisleadingName, Shuzanne Contributors
+ * @license   MPL v2.0
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/.
+ */
+
+namespace app;
+
+class Logger
+{
+    private const LOG_FILE = "rajesh.log";
+    private const DEFAULT_MAX_SIZE_KB = 5000; // 5MB default max size
+
+    private static ?string $logPath = null;
+    private static LogLevel $minLevel = LogLevel::DBUG;
+    private static int $maxSizeKB = self::DEFAULT_MAX_SIZE_KB;
+
+
+    /**
+     * Initialize the logger
+     */
+    public static function Initialize(): void
+    {
+        self::$logPath = APP_ROOT . "/logs/" . self::LOG_FILE;
+
+        register_shutdown_function(function () {
+            $error = error_get_last();
+            if ($error && in_array($error["type"], [E_ERROR, E_PARSE, E_CORE_ERROR, E_COMPILE_ERROR])) {
+                self::Fatal("PHP Fatal Error: {$error["message"]} in {$error["file"]} on line {$error["line"]}");
+            }
+        });
+
+        // Register hook for plugin access
+        // Hooks::Register("Shuzanne.LoggerWrite", function ($data) {
+        //     self::Write($data["level"], $data["message"], $data["context"] ?? []);
+        //     return $data;
+        // });
+
+        self::Info("Logger initialized. Log file: " . self::$logPath);
+    }
+
+    /**
+     * Set minimum log level
+     */
+    public static function SetMinLevel(LogLevel $level): void
+    {
+        self::$minLevel = $level;
+    }
+
+    /**
+     * Set maximum log file size in kilobytes before rotation
+     */
+    public static function SetMaxLogSizeKB(int $sizeKB): void
+    {
+        self::$maxSizeKB = max(1, $sizeKB); // Ensure at least 1KB
+        self::CheckRotation();
+    }
+
+    /**
+     * Write a message to the log file
+     */
+    public static function Write(LogLevel $level, string $message, array $context = [], string $file = "Unknown", int $line = 0): void
+    {
+        if ($level->value < self::$minLevel->value) {
+            return;
+        }
+
+        if (self::$logPath === null) {
+            self::Initialize();
+        }
+        self::CheckRotation();
+
+        foreach ($context as $key => $value) {
+            if (is_array($value) || is_object($value)) {
+                $value = json_encode($value);
+            }
+            $message = str_replace("{{$key}}", $value, $message);
+        }
+
+        $timestamp = date("Y-m-d H:i:s");
+        $levelName = $level->name;
+
+        $file = basename($file);
+
+        $formattedMessage = "[$timestamp] <$file:$line> [$levelName] $message" . PHP_EOL;
+
+        file_put_contents(self::$logPath, $formattedMessage, FILE_APPEND);
+    }
+
+    /**
+     * Check if log rotation is needed and rotate if necessary
+     */
+    private static function CheckRotation(): void
+    {
+        if (!file_exists(self::$logPath)) {
+            return;
+        }
+
+        $sizeKB = filesize(self::$logPath) / 1024;
+        if ($sizeKB >= self::$maxSizeKB) {
+            self::RotateLog();
+        }
+    }
+
+    /**
+     * Rotate the log file
+     */
+    public static function RotateLog(): bool
+    {
+        if (!file_exists(self::$logPath)) {
+            return false;
+        }
+
+        $timestamp = date("Y-m-d_H-i-s");
+        $rotatedFileName = "old_logs_{$timestamp}.log.gz";
+        $rotatedFilePath = dirname(self::$logPath) . DIRECTORY_SEPARATOR . $rotatedFileName;
+
+        $logContent = file_get_contents(self::$logPath);
+
+        $compressedContent = gzencode($logContent, 9);
+
+        if (file_put_contents($rotatedFilePath, $compressedContent) === false) {
+            self::Error("Failed to create rotated log file: {$rotatedFilePath}");
+            return false;
+        }
+
+        if (file_put_contents(self::$logPath, "") === false) {
+            self::Error("Failed to clear log file after rotation");
+            return false;
+        }
+
+        self::Info("Old log rotated to {$rotatedFileName}");
+        return true;
+    }
+
+    /**
+     * Debug level message
+     */
+    public static function Debug(string $message, array $context = []): void
+    {
+        $key = array_search(__FUNCTION__, array_column(debug_backtrace(), "function"));
+        $file = debug_backtrace()[$key]["file"];
+        $line = debug_backtrace()[$key]["line"];
+
+        self::Write(LogLevel::DBUG, $message, $context, $file, $line);
+    }
+
+    /**
+     * Info level message
+     */
+    public static function Info(string $message, array $context = []): void
+    {
+        $key = array_search(__FUNCTION__, array_column(debug_backtrace(), "function"));
+        $file = debug_backtrace()[$key]["file"];
+        $line = debug_backtrace()[$key]["line"];
+
+        self::Write(LogLevel::INFO, $message, $context, $file, $line);
+    }
+
+    /**
+     * Warning level message
+     */
+    public static function Warn(string $message, array $context = []): void
+    {
+        $key = array_search(__FUNCTION__, array_column(debug_backtrace(), "function"));
+        $file = debug_backtrace()[$key]["file"];
+        $line = debug_backtrace()[$key]["line"];
+
+        self::Write(LogLevel::WARN, $message, $context, $file, $line);
+    }
+
+    /**
+     * Error level message
+     */
+    public static function Error(string $message, array $context = []): void
+    {
+        $key = array_search(__FUNCTION__, array_column(debug_backtrace(), "function"));
+        $file = debug_backtrace()[$key]["file"];
+        $line = debug_backtrace()[$key]["line"];
+
+        self::Write(LogLevel::EROR, $message, $context, $file, $line);
+    }
+
+    /**
+     * Fatal level message
+     */
+    public static function Fatal(string $message, array $context = []): void
+    {
+        $key = array_search(__FUNCTION__, array_column(debug_backtrace(), "function"));
+        $file = debug_backtrace()[$key]["file"];
+        $line = debug_backtrace()[$key]["line"];
+
+        self::Write(LogLevel::FTAL, $message, $context, $file, $line);
+    }
+
+    /**
+     * Get the log file path
+     */
+    public static function GetLogPath(): string
+    {
+        if (self::$logPath === null) {
+            self::Initialize();
+        }
+
+        return self::$logPath;
+    }
+
+    /**
+     * Clear the log file
+     */
+    public static function Clear(): bool
+    {
+        if (self::$logPath === null) {
+            self::Initialize();
+        }
+
+        return file_put_contents(self::$logPath, "") !== false;
+    }
+}
+
+enum LogLevel: int
+{
+    case DBUG = 0;
+    case INFO = 1;
+    case WARN = 2;
+    case EROR = 3;
+    case FTAL = 4;
+
+    public static function tryFromName(string $name): ?LogLevel
+    {
+        return array_find(self::cases(), fn($case) => $case->name === $name);
+    }
+}

+ 121 - 0
app/Types/DatabaseObjects/Account.php

@@ -0,0 +1,121 @@
+<?php
+
+namespace app\Types\DatabaseObjects;
+
+use app\Exceptions\AccountNotFoundException;
+use app\Interfaces\IDatabaseObject;
+use app\Hajeebtok;
+use app\Logger;
+use Hajeebtok\Types\Exceptions\SecurityFaultException;
+
+class Account implements IDatabaseObject
+{
+
+	public private(set) ?int $id;
+	public private(set) ?string $username;
+	public private(set) ?string $password;
+	public private(set) ?string $picture_hash;
+	public private(set) ?bool $verified;
+	public private(set) ?string $bio;
+
+	public function __construct(?int $id = null, ?string $username = null, ?string $password=null, ?string $picture_hash=null, ?bool $verified=null, ?string $bio=null)
+	{
+		$this->id = $id;
+		$this->username = $username;
+		$this->password = $password ? password_hash($password, PASSWORD_DEFAULT) : null;
+		$this->picture_hash = $picture_hash;
+		$this->verified = $verified;
+		$this->bio = $bio;
+	}
+
+	/**
+	 * Creates the table for the object type in the database.
+	 */
+	public static function CreateTable(): void
+	{
+		throw new SecurityFaultException("Attempt to create table on user object.");
+	}
+
+	/**
+	 * Drops the table for the object type from the database.
+	 */
+	public static function DropTable(): void
+	{
+		throw new SecurityFaultException("Attempt to drop table on user object.");
+	}
+	
+	/**
+	 * Saves the object to the database.
+	 */
+	public function Save(): int
+	{
+		Hajeebtok::$Database->Query("INSERT INTO accounts (username, password, picture_hash, verified, bio) VALUES (:username, :password, :picture_hash, :verified, :bio)", [
+			"username" => $this->username,
+			"password" => $this->password,
+			"picture_hash" => $this->picture_hash,
+			"verified" => $this->verified,
+			"bio" => $this->bio
+		]);
+		$id = Hajeebtok::$Database->LastInsertId();
+		Logger::Debug("Saved account id ($id).");
+        return $id;
+	}
+
+	/**
+	 * Deletes the object from the database.
+	 */
+	public function Delete()
+	{
+		Hajeebtok::$Database->Query("DELETE FROM accounts WHERE id = :id", ["id" => $this->id]);
+	}
+
+	/**
+	 * Loads the object from the database.
+	 */
+	public function Load()
+	{
+		if (empty($this->id)) { // search by username
+            $data = Hajeebtok::$Database->Row("SELECT * FROM accounts WHERE username = :username", ["username" => $this->username]);
+        } else {
+            // search by id
+            $data = Hajeebtok::$Database->Row("SELECT * FROM accounts WHERE id = :id", ["id" => $this->id]);
+        }
+
+		if (empty($data)) throw new AccountNotFoundException($this->id, 404);
+
+        $this->id = $data["id"];
+		$this->username = $data["username"];
+		$this->password = $data["password"];
+		$this->picture_hash = $data["picture_hash"];
+		$this->verified = $data["verified"];
+		$this->bio = $data["bio"];
+	}
+
+    public function Update() {
+        Hajeebtok::$Database->Query("UPDATE accounts SET username = :username, password = :password, picture_hash = :picture_hash, verified = :verified, bio = :bio WHERE id = :id", [
+            "id" => $this->id,
+            "username" => $this->username,
+            "password" => $this->password,
+            "picture_hash" => $this->picture_hash,
+            "verified" => $this->verified,
+            "bio" => $this->bio
+        ]);
+        Logger::Debug("Updated account id ($this->id).");;
+    }
+    
+    public function LoadMany(): array {
+        if(empty($this->username)) throw new AccountNotFoundException(0, 404);
+        $data = Hajeebtok::$Database->Query("SELECT * FROM accounts WHERE username LIKE :username", ["username" => "%$this->username%"]);
+        if(empty($data)) throw new AccountNotFoundException(0, 404);
+        return $data;
+    }
+
+    public function Exists(): bool {
+        if ($this->id === null) { // search by username
+            $data = Hajeebtok::$Database->Row("SELECT * FROM accounts WHERE username = :username", ["username" => $this->username]);
+        } else { // search by id
+            $data = Hajeebtok::$Database->Row("SELECT * FROM accounts WHERE id = :id", ["id" => $this->id]);
+        }
+        return !empty($data);
+    }
+}

+ 83 - 0
app/Types/DatabaseObjects/Comment.php

@@ -0,0 +1,83 @@
+<?php
+
+namespace app\Types\DatabaseObjects;
+
+use app\Exceptions\CommentNotFoundException;
+use app\Interfaces\IDatabaseObject;
+use app\Hajeebtok;
+use app\Logger;
+use Hajeebtok\Types\Exceptions\SecurityFaultException;
+
+class Comment implements IDatabaseObject
+{
+
+	public private(set) ?int $id;
+    public private(set) ?int $author_id;
+    public private(set) ?int $video_id;
+    public private(set) ?int $reply_id;
+    public private(set) ?string $content;
+	
+	public function __construct(?int $id=null, ?int $author_id=null, ?int $video_id=null, ?int $reply_id=null, ?string $content=null) {
+		$this->id = $id;
+        $this->author_id = $author_id;
+        $this->video_id = $video_id;
+        $this->reply_id = $reply_id;
+        $this->content = $content;
+	}
+
+	/**
+	 * Creates the table for the object type in the database.
+	 */
+	public static function CreateTable(): void {
+		throw new SecurityFaultException("Attempt to create table on comment object.");
+	}
+
+	/**
+	 * Drops the table for the object type from the database.
+	 */
+	public static function DropTable(): void {
+		throw new SecurityFaultException("Attempt to drop table on comment object.");
+	}
+
+	/**
+	 * Saves the object to the database.
+	 */
+	public function Save() {
+		Hajeebtok::$Database->Query("INSERT INTO comments (author_id, video_id, reply_id, content) VALUES (:author_id, :video_id, :reply_id, :content)", [
+            "author_id" => $this->author_id,
+            "video_id" => $this->video_id,
+            "reply_id" => $this->reply_id,
+            "content" => $this->content
+		]);
+		$id = Hajeebtok::$Database->LastInsertId();
+		Logger::Debug("Saved comment id ($id).");
+	}
+
+	/**
+	 * Deletes the object from the database.
+	 */
+	public function Delete() {
+		Hajeebtok::$Database->Query("DELETE FROM comments WHERE id = :id", ["id" => $this->id]);
+	}
+
+	/**
+	 * Loads the object from the database.
+	 */
+	public function Load() {
+		if($this->id === null) throw new CommentNotFoundException(0, 404);
+		$data = Hajeebtok::$Database->Row("SELECT * FROM comments WHERE id = :id", ["id" => $this->id]);
+		if(empty($data)) throw new CommentNotFoundException($this->id, 404);
+
+        $this->author_id = $data["author_id"];
+        $this->video_id = $data["video_id"];
+        $this->reply_id = $data["reply_id"];
+        $this->content = $data["content"];
+	}
+
+    public function LoadMany(): array {
+        if($this->video_id === null) throw new CommentNotFoundException(0, 404);
+        $data = Hajeebtok::$Database->Query("SELECT * FROM comments WHERE video_id = :video_id", ["video_id" => $this->video_id]);
+        if(empty($data)) throw new CommentNotFoundException($this->video_id, 404);
+        return $data;
+    }
+}

+ 88 - 0
app/Types/DatabaseObjects/Follow.php

@@ -0,0 +1,88 @@
+<?php
+
+namespace app\Types\DatabaseObjects;
+
+use app\Exceptions\FollowNotFoundException;
+use app\Interfaces\IDatabaseObject;
+use app\Hajeebtok;
+use app\Logger;
+use Hajeebtok\Types\Exceptions\SecurityFaultException;
+
+class Follow implements IDatabaseObject
+{
+
+	public private(set) ?int $follower_id;
+	public private(set) ?int $followee_id;
+	public function __construct(?int $follower_id = null, ?int $followee_id = null)
+	{
+        $this->follower_id = $follower_id;
+        $this->followee_id = $followee_id;
+	}
+
+	/**
+	 * Creates the table for the object type in the database.
+	 */
+	public static function CreateTable(): void
+	{
+		throw new SecurityFaultException("Attempt to create table on follow object.");
+	}
+
+	/**
+	 * Drops the table for the object type from the database.
+	 */
+	public static function DropTable(): void
+	{
+		throw new SecurityFaultException("Attempt to drop table on follow object.");
+	}
+	
+	/**
+	 * Saves the object to the database.
+	 */
+	public function Save()
+	{
+		Hajeebtok::$Database->Query("INSERT INTO follows (follower_id, followee_id) VALUES (:follower_id, :followee_id)", [
+			"follower_id" => $this->follower_id,
+            "followee_id" => $this->followee_id
+		]);
+		$id = Hajeebtok::$Database->LastInsertId();
+		Logger::Debug("Saved account id ($id).");
+	}
+
+	/**
+	 * Deletes the object from the database.
+	 */
+	public function Delete()
+	{
+        if(empty($this->follower_id) || empty($this->followee_id)) throw new FollowNotFoundException(0, 404);
+		Hajeebtok::$Database->Query("DELETE FROM follows WHERE follower_id = :follower_id AND followee_id = :followee_id", [
+            "follower_id" => $this->follower_id,
+            "followee_id" => $this->followee_id
+        ]);
+	}
+
+	/**
+	 * Loads the object from the database.
+	 */
+
+	public function Load()
+	{
+        // unimplemented
+	}
+
+    public function LoadMany(): array {
+        if(!empty($this->follower_id) && empty($this->followee_id)) {
+            $command = "SELECT * FROM follows WHERE follower_id = :follower_id";
+            $array = ["follower_id" => $this->follower_id];
+        } else if(empty($this->follower_id) && !empty($this->followee_id)) {
+            $command = "SELECT * FROM follows WHERE followee_id = :followee_id";
+            $array = ["followee_id" => $this->followee_id];
+        } else {
+            throw new FollowNotFoundException(0, 404);
+        }
+
+        if(empty($this->follower_id)) throw new FollowNotFoundException(0, 404);
+        $data = Hajeebtok::$Database->Query($command, $array);
+        if(empty($data)) throw new FollowNotFoundException($this->follower_id, 404);
+        return $data;
+    }
+}

+ 93 - 0
app/Types/DatabaseObjects/Message.php

@@ -0,0 +1,93 @@
+<?php
+
+namespace app\Types\DatabaseObjects;
+
+use app\Exceptions\MessageNotFoundException;
+use app\Interfaces\IDatabaseObject;
+use app\Hajeebtok;
+use app\Logger;
+use Hajeebtok\Types\Exceptions\SecurityFaultException;
+
+class Message implements IDatabaseObject
+{
+
+    public private(set) ?int $id;
+    public private(set) ?int $sender_id;
+    public private(set) ?int $recipient_id;
+    public private(set) ?int $reply_id;
+    public private(set) ?int $video_id;
+    public private(set) ?string $content;
+
+    public function __construct(?int $id = null, ?int $sender_id = null, ?int $recipient_id = null, ?int $reply_id = null, ?int $video_id = null, ?string $content = null)
+    {
+        $this->id = $id;
+        $this->sender_id = $sender_id;
+        $this->recipient_id = $recipient_id;
+        $this->reply_id = $reply_id;
+        $this->video_id = $video_id;
+        $this->content = $content;
+    }
+
+    /**
+     * Creates the table for the object type in the database.
+     */
+    public static function CreateTable(): void
+    {
+        throw new SecurityFaultException("Attempt to create table on message object.");
+    }
+
+    /**
+     * Drops the table for the object type from the database.
+     */
+    public static function DropTable(): void
+    {
+        throw new SecurityFaultException("Attempt to drop table on message object.");
+    }
+
+    /**
+     * Saves the object to the database.
+     */
+    public function Save()
+    {
+        Hajeebtok::$Database->Query("INSERT INTO messages (sender_id, recipient_id, reply_id, video_id, content) VALUES (:sender_id, :recipient_id, :reply_id, :video_id,:content);", [
+            "sender_id" => $this->sender_id,
+            "recipient_id" => $this->recipient_id,
+            "reply_id" => $this->reply_id,
+            "video_id" => $this->video_id,
+            "content" => $this->content,
+        ]);
+        $id = Hajeebtok::$Database->LastInsertId();
+        Logger::Debug("Saved message id ($id).");
+    }
+
+    /**
+     * Deletes the object from the database.
+     */
+    public function Delete()
+    {
+        Hajeebtok::$Database->Query("DELETE FROM messages WHERE id = :id", ["id" => $this->id]);
+    }
+
+    /**
+     * Loads the object from the database.
+     */
+    public function Load()
+    {
+        if ($this->id === null) throw new MessageNotFoundException(0, 404);
+        $data = Hajeebtok::$Database->Row("SELECT * FROM messages WHERE id = :id", ["id" => $this->id]);
+        if (empty($data)) throw new MessageNotFoundException($this->id, 404);
+
+        $this->recipient_id = $data["recipient_id"];
+        $this->sender_id = $data["sender_id"];
+        $this->reply_id = $data["reply_id"];
+        $this->video_id = $data["video_id"];
+        $this->content = $data["content"];
+    }
+
+    public function LoadMany(): array {
+        if($this->recipient_id === null) throw new MessageNotFoundException(0, 404);
+        $data = Hajeebtok::$Database->Query("SELECT * FROM messages WHERE recipient_id = :recipient_id", ["recipient_id" => $this->recipient_id]);
+        if(empty($data)) throw new MessageNotFoundException($this->recipient_id, 404);
+        return $data;
+    }
+}

+ 100 - 0
app/Types/DatabaseObjects/Session.php

@@ -0,0 +1,100 @@
+<?php
+
+namespace app\Types\DatabaseObjects;
+
+use app\Exceptions\SessionNotFoundException;
+use app\Interfaces\IDatabaseObject;
+use app\Hajeebtok;
+use app\Logger;
+use Hajeebtok\Types\Exceptions\SecurityFaultException;
+use Random\RandomException;
+
+class Session implements IDatabaseObject
+{
+
+	public private(set) ?string $token;
+    public private(set) ?int $account_id;
+    public private(set) ?int $date_authenticated;
+
+    /**
+     * @throws SecurityFaultException
+     */
+    public function __construct(?string $token = null, ?int $account_id = null, ?int $date_authenticated = null)
+	{
+        try {
+            $this->token = bin2hex(random_bytes(32));
+        } catch (RandomException $e) {
+            throw new SecurityFaultException("yo the server caught fire and maybe my house burnt down im soRRY GANG (my ears burn).");
+        }
+        $this->account_id = $account_id;
+        $this->date_authenticated = $date_authenticated;
+	}
+
+	/**
+	 * Creates the table for the object type in the database.
+	 */
+	public static function CreateTable(): void
+	{
+		throw new SecurityFaultException("Attempt to create table on session object.");
+	}
+
+	/**
+	 * Drops the table for the object type from the database.
+	 */
+	public static function DropTable(): void
+	{
+		throw new SecurityFaultException("Attempt to drop table on session object.");
+	}
+	
+	/**
+	 * Saves the object to the database.
+	 */
+	public function Save(): string
+	{
+		Hajeebtok::$Database->Query("INSERT INTO sessions (token, account_id) VALUES (:token, :account_id);", [
+            "token" => $this->token,
+            "account_id" => $this->account_id
+        ]);
+        
+        $token = Hajeebtok::$Database->Row("SELECT token FROM sessions WHERE account_id = :account_id", ["account_id" => $this->account_id]);
+        Logger::Debug("Saved session token ($token) for account id ($this->account_id).");
+
+        return $this->token;
+	}
+
+	/**
+	 * Deletes the object from the database.
+	 */
+	public function Delete()
+	{
+        if(empty($this->token)) throw new SessionNotFoundException(0, 404);
+        Hajeebtok::$Database->Query("DELETE FROM session WHERE token = :token", ["token" => $this->token]);
+	}
+
+    public function DeleteMany() {
+        if(empty($this->account_id)) throw new SessionNotFoundException(0, 404);
+        Hajeebtok::$Database->Query("DELETE FROM session WHERE account_id = :account_id", ["account_id" => $this->account_id]);
+    }
+
+	/**
+	 * Loads the object from the database.
+	 */
+	public function Load()
+	{
+        if (empty($this->token)) throw new SessionNotFoundException($this->token, 404);
+		$data = Hajeebtok::$Database->Row("SELECT * FROM sessions WHERE token = :token", ["token" => $this->token]);
+		if (empty($data)) throw new SessionNotFoundException($this->token, 404);
+
+        $this->token = $data["token"];
+		$this->account_id = $data["account_id"];
+        $this->date_authenticated = strtotime($data["date_authenticated"]);
+	}
+
+    public function LoadMany(): array {
+        if(empty($this->account_id)) throw new SessionNotFoundException(0, 404);
+        $data = Hajeebtok::$Database->Query("SELECT * FROM sessions WHERE account_id = :account_id", ["account_id" => $this->account_id]);
+        if(empty($data)) throw new SessionNotFoundException($this->account_id, 404);
+
+        return $data;
+    }
+}

+ 96 - 0
app/Types/DatabaseObjects/Video.php

@@ -0,0 +1,96 @@
+<?php
+
+namespace app\Types\DatabaseObjects;
+
+use app\Exceptions\AccountNotFoundException;
+use app\Exceptions\VideoNotFoundException;
+use app\Interfaces\IDatabaseObject;
+use app\Hajeebtok;
+use app\Logger;
+use Hajeebtok\Types\Exceptions\SecurityFaultException;
+
+class Video implements IDatabaseObject
+{
+
+	public private(set) ?int $id;
+	public private(set) ?string $title;
+	public private(set) ?string $description;
+	public private(set) ?int $author_id;
+	public private(set) ?int $likes;
+	public private(set) ?int $dislikes;
+	public private(set) ?int $shares;
+	public private(set) ?int $comments;
+	
+	public function __construct(?int $id=null, ?string $title=null, ?string $description=null, ?int $author_id=null, ?int $likes=0, ?int $dislikes=0) {
+		$this->id = $id;
+		$this->title = $title;
+		$this->description = $description;
+		$this->author_id = $author_id;
+		$this->likes = $likes;
+		$this->dislikes = $dislikes;
+	}
+
+	/**
+	 * Creates the table for the object type in the database.
+	 */
+	public static function CreateTable(): void {
+		throw new SecurityFaultException("Attempt to create table on video object.");
+	}
+
+	/**
+	 * Drops the table for the object type from the database.
+	 */
+	public static function DropTable(): void {
+		throw new SecurityFaultException("Attempt to drop table on video object.");
+	}
+
+	/**
+	 * Saves the object to the database.
+	 */
+	public function Save() {
+		Hajeebtok::$Database->Query("INSERT INTO videos (title, description, author_id, likes, dislikes) VALUES (:title, :description, :author_id, :likes, :dislikes)", [
+			"title" => $this->title,
+			"description" => $this->description,
+			"author_id" => $this->author_id,
+			"likes" => $this->likes,
+			"dislikes" => $this->dislikes
+		]);
+		$id = Hajeebtok::$Database->LastInsertId();
+		Logger::Debug("Saved video id ($id).");
+	}
+
+	/**
+	 * Deletes the object from the database.
+	 */
+	public function Delete() {
+		Hajeebtok::$Database->Query("DELETE FROM videos WHERE id = :id", ["id" => $this->id]);
+	}
+
+	/**
+	 * Loads the object from the database.
+	 */
+	public function Load() {
+		if($this->id === null) throw new VideoNotFoundException(0, 404);
+		$data = Hajeebtok::$Database->Row("SELECT * FROM videos WHERE id = :id", ["id" => $this->id]);
+		if(empty($data)) throw new VideoNotFoundException($this->id, 404);
+		Logger::Debug("$data");
+
+		$this->title = $data["title"];
+		$this->description = $data["description"];
+		$this->author_id = $data["author_id"];
+		$this->likes = $data["likes"];
+		$this->dislikes = $data["dislikes"];
+
+		$this->comments = Hajeebtok::$Database->Single("SELECT COUNT(*) FROM comments WHERE video_id = :id", ["id" => $this->id]);
+		$this->shares = Hajeebtok::$Database->Single("SELECT COUNT(*) FROM messages INNER JOIN videos ON messages.video_id = videos.id WHERE videos.id = :id", ["id" => $this->id]);
+	}
+
+    public function LoadMany(): array {
+        if(empty($this->title)) throw new VideoNotFoundException(0, 404);
+
+        $videos = Hajeebtok::$Database->Query("SELECT * FROM videos WHERE title LIKE :title", ["title" => "%$this->title%"]);
+        if(empty($videos)) throw new VideoNotFoundException(0, 404);
+
+        return $videos;
+    }
+}

+ 153 - 0
app/Types/MariaDBDatabase.php

@@ -0,0 +1,153 @@
+<?php
+/*
+ * Part of Shuzanne - An extensible sequel to an open-source imageboard.
+ *
+ * @package   Shuzanne
+ * @author    MisleadingName, Shuzanne Contributors
+ * @license   MPL v2.0
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this  
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/.
+ */
+
+namespace app\Types;
+
+use app\Interfaces\IDatabase;
+use app\Logger;
+use PDO;
+use PDOStatement;
+use PDOException;
+
+class MariaDBDatabase implements IDatabase
+{
+    private ?PDO $pdo;
+    private PDOStatement $stmt;
+    private array $parameters = [];
+
+    public function __construct(array $engineConfig)
+    {
+        $host = $engineConfig["Host"];
+        $port = $engineConfig["Port"] ?? 3306;
+
+        $username = $engineConfig["Username"];
+        $password = $engineConfig["Password"];
+
+        $dbname = $engineConfig["Database"];
+        $charset = $engineConfig["Charset"] ?? "utf8mb4";
+
+        $dsn = "mysql:host=$host;dbname=$dbname;port=$port;charset=$charset";
+        $options = [
+			PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
+			PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
+			PDO::ATTR_EMULATE_PREPARES => false,
+		];
+
+        try {
+            $this->pdo = new PDO($dsn, $username, $password, $options);
+        } catch (PDOException $e) {
+            Logger::Error("Database connection failed: " . $e->getMessage());
+            throw $e;
+        }
+    }
+
+    public function CloseConnection(): void
+    {
+        $this->pdo = null;
+    }
+
+    public function Bind(string $param, mixed $value): void
+    {
+        $this->parameters[$param] = $value;
+    }
+
+    public function BindMore(array $params): void
+    {
+        foreach ($params as $param => $value) {
+            $this->Bind($param, $value);
+        }
+    }
+
+    private function executeStatement(string $query, ?array $params = null): PDOStatement
+    {
+        try {
+            $this->stmt = $this->pdo->prepare($query);
+
+            if ($params) {
+                foreach ($params as $param => $value) {
+                    $paramType = match (gettype($value)) {
+                        'integer' => PDO::PARAM_INT,
+                        'boolean' => PDO::PARAM_BOOL,
+                        'NULL' => PDO::PARAM_NULL,
+                        default => PDO::PARAM_STR
+                    };
+
+                    $this->stmt->bindValue(is_numeric($param) ? $param + 1 : $param, $value, $paramType);
+                }
+            }
+
+            $this->stmt->execute();
+            return $this->stmt;
+        } catch (PDOException $e) {
+            Logger::Error("Query execution failed: " . $e->getMessage() . " - Query: $query");
+            throw $e;
+        }
+    }
+
+    public function Query(string $query, ?array $params = null, int $fetchMode = PDO::FETCH_ASSOC): mixed
+    {
+        $stmt = $this->executeStatement($query, $params ?? $this->parameters);
+        $this->parameters = [];
+        return $stmt->fetchAll($fetchMode);
+    }
+
+    public function QueryRowCount(string $query, ?array $params = null, int $fetchMode = PDO::FETCH_ASSOC): int
+    {
+        $stmt = $this->executeStatement($query, $params ?? $this->parameters);
+        $this->parameters = [];
+        return $stmt->rowCount();
+    }
+
+    public function LastInsertId(): string
+    {
+        return $this->pdo->lastInsertId();
+    }
+
+    public function BeginTransaction(): bool
+    {
+        return $this->pdo->beginTransaction();
+    }
+
+    public function ExecuteTransaction(): bool
+    {
+        return $this->pdo->commit();
+    }
+
+    public function Rollback(): bool
+    {
+        return $this->pdo->rollBack();
+    }
+
+    public function Column(string $query, ?array $params = null): array
+    {
+        $stmt = $this->executeStatement($query, $params ?? $this->parameters);
+        $this->parameters = [];
+        return $stmt->fetchAll(PDO::FETCH_COLUMN);
+    }
+
+    public function Row(string $query, ?array $params = null, int $fetchMode = PDO::FETCH_ASSOC): array
+    {
+        $stmt = $this->executeStatement($query, $params ?? $this->parameters);
+        $this->parameters = [];
+        $result = $stmt->fetch($fetchMode);
+        return $result ?: [];
+    }
+
+    public function Single(string $query, ?array $params = null): mixed
+    {
+        $stmt = $this->executeStatement($query, $params ?? $this->parameters);
+        $this->parameters = [];
+        $result = $stmt->fetchColumn();
+        return $result !== false ? $result : null;
+    }
+}

+ 12 - 0
composer.json

@@ -0,0 +1,12 @@
+{
+    "require": {
+        "pecee/simple-router": "^5.4",
+        "ralouphie/mimey": "^1.0",
+        "php-ffmpeg/php-ffmpeg": "^1.3"
+    },
+    "autoload": {
+        "psr-4": {
+            "app\\": "app"
+        }
+    }
+}

+ 937 - 0
composer.lock

@@ -0,0 +1,937 @@
+{
+    "_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": "86c80d1610a0e57781400e8ae2182a67",
+    "packages": [
+        {
+            "name": "evenement/evenement",
+            "version": "v3.0.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/igorw/evenement.git",
+                "reference": "0a16b0d71ab13284339abb99d9d2bd813640efbc"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/igorw/evenement/zipball/0a16b0d71ab13284339abb99d9d2bd813640efbc",
+                "reference": "0a16b0d71ab13284339abb99d9d2bd813640efbc",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^9 || ^6"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Evenement\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Igor Wiedler",
+                    "email": "[email protected]"
+                }
+            ],
+            "description": "Événement is a very simple event dispatching library for PHP",
+            "keywords": [
+                "event-dispatcher",
+                "event-emitter"
+            ],
+            "support": {
+                "issues": "https://github.com/igorw/evenement/issues",
+                "source": "https://github.com/igorw/evenement/tree/v3.0.2"
+            },
+            "time": "2023-08-08T05:53:35+00:00"
+        },
+        {
+            "name": "pecee/simple-router",
+            "version": "5.4.1.7",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/skipperbent/simple-php-router.git",
+                "reference": "a2843d5b1e037f8b61cc99f27eab52a28bf41dfd"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/skipperbent/simple-php-router/zipball/a2843d5b1e037f8b61cc99f27eab52a28bf41dfd",
+                "reference": "a2843d5b1e037f8b61cc99f27eab52a28bf41dfd",
+                "shasum": ""
+            },
+            "require": {
+                "ext-json": "*",
+                "php": ">=7.4"
+            },
+            "require-dev": {
+                "mockery/mockery": "^1",
+                "phpstan/phpstan": "^1",
+                "phpstan/phpstan-deprecation-rules": "^1",
+                "phpstan/phpstan-phpunit": "^1",
+                "phpstan/phpstan-strict-rules": "^1",
+                "phpunit/phpunit": "^8"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Pecee\\": "src/Pecee/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Simon Sessingø",
+                    "email": "[email protected]"
+                }
+            ],
+            "description": "Simple, fast PHP router that is easy to get integrated and in almost any project. Heavily inspired by the Laravel router.",
+            "keywords": [
+                "framework",
+                "input-handler",
+                "laravel",
+                "pecee",
+                "php",
+                "request-handler",
+                "route",
+                "router",
+                "routing",
+                "routing-engine",
+                "simple-php-router",
+                "url-handling"
+            ],
+            "support": {
+                "issues": "https://github.com/skipperbent/simple-php-router/issues",
+                "source": "https://github.com/skipperbent/simple-php-router/issues"
+            },
+            "time": "2023-12-11T21:48:25+00:00"
+        },
+        {
+            "name": "php-ffmpeg/php-ffmpeg",
+            "version": "v1.3.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/PHP-FFMpeg/PHP-FFMpeg.git",
+                "reference": "8e74bdc07ad200da7a6cfb21ec2652875e4368e0"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/PHP-FFMpeg/PHP-FFMpeg/zipball/8e74bdc07ad200da7a6cfb21ec2652875e4368e0",
+                "reference": "8e74bdc07ad200da7a6cfb21ec2652875e4368e0",
+                "shasum": ""
+            },
+            "require": {
+                "evenement/evenement": "^3.0",
+                "php": "^8.0 || ^8.1 || ^8.2 || ^8.3 || ^8.4",
+                "psr/log": "^1.0 || ^2.0 || ^3.0",
+                "spatie/temporary-directory": "^2.0",
+                "symfony/cache": "^5.4 || ^6.0 || ^7.0",
+                "symfony/process": "^5.4 || ^6.0 || ^7.0"
+            },
+            "require-dev": {
+                "mockery/mockery": "^1.5",
+                "phpunit/phpunit": "^9.5.10 || ^10.0"
+            },
+            "suggest": {
+                "php-ffmpeg/extras": "A compilation of common audio & video drivers for PHP-FFMpeg"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "FFMpeg\\": "src/FFMpeg",
+                    "Alchemy\\BinaryDriver\\": "src/Alchemy/BinaryDriver"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Romain Neutron",
+                    "email": "[email protected]",
+                    "homepage": "http://www.lickmychip.com/"
+                },
+                {
+                    "name": "Phraseanet Team",
+                    "email": "[email protected]",
+                    "homepage": "http://www.phraseanet.com/"
+                },
+                {
+                    "name": "Patrik Karisch",
+                    "email": "[email protected]",
+                    "homepage": "http://www.karisch.guru"
+                },
+                {
+                    "name": "Romain Biard",
+                    "email": "[email protected]",
+                    "homepage": "https://www.strime.io/"
+                },
+                {
+                    "name": "Jens Hausdorf",
+                    "email": "[email protected]",
+                    "homepage": "https://jens-hausdorf.de"
+                },
+                {
+                    "name": "Pascal Baljet",
+                    "email": "[email protected]",
+                    "homepage": "https://protone.media"
+                }
+            ],
+            "description": "FFMpeg PHP, an Object Oriented library to communicate with AVconv / ffmpeg",
+            "keywords": [
+                "audio",
+                "audio processing",
+                "avconv",
+                "avprobe",
+                "ffmpeg",
+                "ffprobe",
+                "video",
+                "video processing"
+            ],
+            "support": {
+                "issues": "https://github.com/PHP-FFMpeg/PHP-FFMpeg/issues",
+                "source": "https://github.com/PHP-FFMpeg/PHP-FFMpeg/tree/v1.3.2"
+            },
+            "time": "2025-04-01T20:36:46+00:00"
+        },
+        {
+            "name": "psr/cache",
+            "version": "3.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/php-fig/cache.git",
+                "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/php-fig/cache/zipball/aa5030cfa5405eccfdcb1083ce040c2cb8d253bf",
+                "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=8.0.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Psr\\Cache\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "PHP-FIG",
+                    "homepage": "https://www.php-fig.org/"
+                }
+            ],
+            "description": "Common interface for caching libraries",
+            "keywords": [
+                "cache",
+                "psr",
+                "psr-6"
+            ],
+            "support": {
+                "source": "https://github.com/php-fig/cache/tree/3.0.0"
+            },
+            "time": "2021-02-03T23:26:27+00:00"
+        },
+        {
+            "name": "psr/container",
+            "version": "2.0.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/php-fig/container.git",
+                "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963",
+                "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.4.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.0.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Psr\\Container\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "PHP-FIG",
+                    "homepage": "https://www.php-fig.org/"
+                }
+            ],
+            "description": "Common Container Interface (PHP FIG PSR-11)",
+            "homepage": "https://github.com/php-fig/container",
+            "keywords": [
+                "PSR-11",
+                "container",
+                "container-interface",
+                "container-interop",
+                "psr"
+            ],
+            "support": {
+                "issues": "https://github.com/php-fig/container/issues",
+                "source": "https://github.com/php-fig/container/tree/2.0.2"
+            },
+            "time": "2021-11-05T16:47:00+00:00"
+        },
+        {
+            "name": "psr/log",
+            "version": "3.0.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/php-fig/log.git",
+                "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/php-fig/log/zipball/f16e1d5863e37f8d8c2a01719f5b34baa2b714d3",
+                "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=8.0.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "3.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Psr\\Log\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "PHP-FIG",
+                    "homepage": "https://www.php-fig.org/"
+                }
+            ],
+            "description": "Common interface for logging libraries",
+            "homepage": "https://github.com/php-fig/log",
+            "keywords": [
+                "log",
+                "psr",
+                "psr-3"
+            ],
+            "support": {
+                "source": "https://github.com/php-fig/log/tree/3.0.2"
+            },
+            "time": "2024-09-11T13:17:53+00:00"
+        },
+        {
+            "name": "ralouphie/mimey",
+            "version": "1.0.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/ralouphie/mimey.git",
+                "reference": "2a0e997c733b7c2f9f8b61cafb006fd5fb9fa15a"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/ralouphie/mimey/zipball/2a0e997c733b7c2f9f8b61cafb006fd5fb9fa15a",
+                "reference": "2a0e997c733b7c2f9f8b61cafb006fd5fb9fa15a",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~3.7.0",
+                "satooshi/php-coveralls": ">=1.0"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Mimey\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Ralph Khattar",
+                    "email": "[email protected]"
+                }
+            ],
+            "description": "PHP package for converting file extensions to MIME types and vice versa.",
+            "support": {
+                "issues": "https://github.com/ralouphie/mimey/issues",
+                "source": "https://github.com/ralouphie/mimey/tree/master"
+            },
+            "time": "2016-09-28T03:36:23+00:00"
+        },
+        {
+            "name": "spatie/temporary-directory",
+            "version": "2.3.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/spatie/temporary-directory.git",
+                "reference": "580eddfe9a0a41a902cac6eeb8f066b42e65a32b"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/spatie/temporary-directory/zipball/580eddfe9a0a41a902cac6eeb8f066b42e65a32b",
+                "reference": "580eddfe9a0a41a902cac6eeb8f066b42e65a32b",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^8.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^9.5"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Spatie\\TemporaryDirectory\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Alex Vanderbist",
+                    "email": "[email protected]",
+                    "homepage": "https://spatie.be",
+                    "role": "Developer"
+                }
+            ],
+            "description": "Easily create, use and destroy temporary directories",
+            "homepage": "https://github.com/spatie/temporary-directory",
+            "keywords": [
+                "php",
+                "spatie",
+                "temporary-directory"
+            ],
+            "support": {
+                "issues": "https://github.com/spatie/temporary-directory/issues",
+                "source": "https://github.com/spatie/temporary-directory/tree/2.3.0"
+            },
+            "funding": [
+                {
+                    "url": "https://spatie.be/open-source/support-us",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/spatie",
+                    "type": "github"
+                }
+            ],
+            "time": "2025-01-13T13:04:43+00:00"
+        },
+        {
+            "name": "symfony/cache",
+            "version": "v7.3.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/cache.git",
+                "reference": "c4b217b578c11ec764867aa0c73e602c602965de"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/cache/zipball/c4b217b578c11ec764867aa0c73e602c602965de",
+                "reference": "c4b217b578c11ec764867aa0c73e602c602965de",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=8.2",
+                "psr/cache": "^2.0|^3.0",
+                "psr/log": "^1.1|^2|^3",
+                "symfony/cache-contracts": "^3.6",
+                "symfony/deprecation-contracts": "^2.5|^3.0",
+                "symfony/service-contracts": "^2.5|^3",
+                "symfony/var-exporter": "^6.4|^7.0"
+            },
+            "conflict": {
+                "doctrine/dbal": "<3.6",
+                "symfony/dependency-injection": "<6.4",
+                "symfony/http-kernel": "<6.4",
+                "symfony/var-dumper": "<6.4"
+            },
+            "provide": {
+                "psr/cache-implementation": "2.0|3.0",
+                "psr/simple-cache-implementation": "1.0|2.0|3.0",
+                "symfony/cache-implementation": "1.1|2.0|3.0"
+            },
+            "require-dev": {
+                "cache/integration-tests": "dev-master",
+                "doctrine/dbal": "^3.6|^4",
+                "predis/predis": "^1.1|^2.0",
+                "psr/simple-cache": "^1.0|^2.0|^3.0",
+                "symfony/clock": "^6.4|^7.0",
+                "symfony/config": "^6.4|^7.0",
+                "symfony/dependency-injection": "^6.4|^7.0",
+                "symfony/filesystem": "^6.4|^7.0",
+                "symfony/http-kernel": "^6.4|^7.0",
+                "symfony/messenger": "^6.4|^7.0",
+                "symfony/var-dumper": "^6.4|^7.0"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\Cache\\": ""
+                },
+                "classmap": [
+                    "Traits/ValueWrapper.php"
+                ],
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "[email protected]"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Provides extended PSR-6, PSR-16 (and tags) implementations",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "caching",
+                "psr6"
+            ],
+            "support": {
+                "source": "https://github.com/symfony/cache/tree/v7.3.0"
+            },
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2025-05-06T19:00:13+00:00"
+        },
+        {
+            "name": "symfony/cache-contracts",
+            "version": "v3.6.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/cache-contracts.git",
+                "reference": "5d68a57d66910405e5c0b63d6f0af941e66fc868"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/5d68a57d66910405e5c0b63d6f0af941e66fc868",
+                "reference": "5d68a57d66910405e5c0b63d6f0af941e66fc868",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=8.1",
+                "psr/cache": "^3.0"
+            },
+            "type": "library",
+            "extra": {
+                "thanks": {
+                    "url": "https://github.com/symfony/contracts",
+                    "name": "symfony/contracts"
+                },
+                "branch-alias": {
+                    "dev-main": "3.6-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Contracts\\Cache\\": ""
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "[email protected]"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Generic abstractions related to caching",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "abstractions",
+                "contracts",
+                "decoupling",
+                "interfaces",
+                "interoperability",
+                "standards"
+            ],
+            "support": {
+                "source": "https://github.com/symfony/cache-contracts/tree/v3.6.0"
+            },
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2025-03-13T15:25:07+00:00"
+        },
+        {
+            "name": "symfony/deprecation-contracts",
+            "version": "v3.6.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/deprecation-contracts.git",
+                "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/63afe740e99a13ba87ec199bb07bbdee937a5b62",
+                "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=8.1"
+            },
+            "type": "library",
+            "extra": {
+                "thanks": {
+                    "url": "https://github.com/symfony/contracts",
+                    "name": "symfony/contracts"
+                },
+                "branch-alias": {
+                    "dev-main": "3.6-dev"
+                }
+            },
+            "autoload": {
+                "files": [
+                    "function.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "[email protected]"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "A generic function and convention to trigger deprecation notices",
+            "homepage": "https://symfony.com",
+            "support": {
+                "source": "https://github.com/symfony/deprecation-contracts/tree/v3.6.0"
+            },
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2024-09-25T14:21:43+00:00"
+        },
+        {
+            "name": "symfony/process",
+            "version": "v7.3.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/process.git",
+                "reference": "40c295f2deb408d5e9d2d32b8ba1dd61e36f05af"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/process/zipball/40c295f2deb408d5e9d2d32b8ba1dd61e36f05af",
+                "reference": "40c295f2deb408d5e9d2d32b8ba1dd61e36f05af",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=8.2"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\Process\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "[email protected]"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Executes commands in sub-processes",
+            "homepage": "https://symfony.com",
+            "support": {
+                "source": "https://github.com/symfony/process/tree/v7.3.0"
+            },
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2025-04-17T09:11:12+00:00"
+        },
+        {
+            "name": "symfony/service-contracts",
+            "version": "v3.6.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/service-contracts.git",
+                "reference": "f021b05a130d35510bd6b25fe9053c2a8a15d5d4"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/service-contracts/zipball/f021b05a130d35510bd6b25fe9053c2a8a15d5d4",
+                "reference": "f021b05a130d35510bd6b25fe9053c2a8a15d5d4",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=8.1",
+                "psr/container": "^1.1|^2.0",
+                "symfony/deprecation-contracts": "^2.5|^3"
+            },
+            "conflict": {
+                "ext-psr": "<1.1|>=2"
+            },
+            "type": "library",
+            "extra": {
+                "thanks": {
+                    "url": "https://github.com/symfony/contracts",
+                    "name": "symfony/contracts"
+                },
+                "branch-alias": {
+                    "dev-main": "3.6-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Contracts\\Service\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Test/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "[email protected]"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Generic abstractions related to writing services",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "abstractions",
+                "contracts",
+                "decoupling",
+                "interfaces",
+                "interoperability",
+                "standards"
+            ],
+            "support": {
+                "source": "https://github.com/symfony/service-contracts/tree/v3.6.0"
+            },
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2025-04-25T09:37:31+00:00"
+        },
+        {
+            "name": "symfony/var-exporter",
+            "version": "v7.3.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/var-exporter.git",
+                "reference": "c9a1168891b5aaadfd6332ef44393330b3498c4c"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/var-exporter/zipball/c9a1168891b5aaadfd6332ef44393330b3498c4c",
+                "reference": "c9a1168891b5aaadfd6332ef44393330b3498c4c",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=8.2",
+                "symfony/deprecation-contracts": "^2.5|^3"
+            },
+            "require-dev": {
+                "symfony/property-access": "^6.4|^7.0",
+                "symfony/serializer": "^6.4|^7.0",
+                "symfony/var-dumper": "^6.4|^7.0"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\VarExporter\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "[email protected]"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Allows exporting any serializable PHP data structure to plain PHP code",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "clone",
+                "construct",
+                "export",
+                "hydrate",
+                "instantiate",
+                "lazy-loading",
+                "proxy",
+                "serialize"
+            ],
+            "support": {
+                "source": "https://github.com/symfony/var-exporter/tree/v7.3.0"
+            },
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2025-05-15T09:04:05+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"
+}

+ 10 - 0
config.ini.example

@@ -0,0 +1,10 @@
+[Database]
+Host = "localhost"
+Port = "3306"
+Username = "DatabaseUser"
+Password = "DatabasePassword"
+Database = "Database"
+Charset = "utf8mb4"
+
+[Instance]
+DebugMode = "false"

+ 24 - 0
log.ps1

@@ -0,0 +1,24 @@
+Get-Content -Path .\logs\rajesh.log -Wait | ForEach-Object {
+    if ($_ -match '^\[(.*?)\] <(.*?)> \[(.*?)\] (.*)') {
+        $timestamp = $matches[1]
+        $fileInfo = $matches[2]
+        $level = $matches[3]
+        $message = $matches[4]
+
+        switch ($level) {
+            'INFO'   { $color = 'Cyan' }
+            'DBUG'   { $color = 'Gray' }
+            'WARN'   { $color = 'Yellow' }
+            'EROR'   { $color = 'Red' }
+            'FTAL'   { $color = 'Magenta' }
+            default  { $color = 'White' }
+        }
+
+        Write-Host "[$timestamp]" -ForegroundColor DarkGray -NoNewline
+        Write-Host " <$fileInfo>" -ForegroundColor DarkCyan -NoNewline
+        Write-Host " [$level]" -ForegroundColor $color -NoNewline
+        Write-Host " $message" -ForegroundColor White
+    } else {
+        Write-Host $_ -ForegroundColor White
+    }
+}

+ 1867 - 0
logs/rajesh.log

@@ -0,0 +1,1867 @@
+[2025-06-12 15:48:36] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-12 15:48:36] <hajeebtok.php:13> [INFO] Hajeebtok application initialized.
+[2025-06-12 15:48:43] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-12 15:48:43] <hajeebtok.php:13> [INFO] Hajeebtok application initialized.
+[2025-06-12 15:48:44] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-12 15:48:44] <hajeebtok.php:13> [INFO] Hajeebtok application initialized.
+[2025-06-12 15:48:44] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-12 15:48:44] <hajeebtok.php:13> [INFO] Hajeebtok application initialized.
+[2025-06-12 15:48:44] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-12 15:48:44] <hajeebtok.php:13> [INFO] Hajeebtok application initialized.
+[2025-06-12 15:48:44] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-12 15:48:44] <hajeebtok.php:13> [INFO] Hajeebtok application initialized.
+[2025-06-12 15:48:44] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-12 15:48:44] <hajeebtok.php:13> [INFO] Hajeebtok application initialized.
+[2025-06-12 16:03:09] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-12 16:03:09] <Hajeebtok.php:21> [INFO] Hajeebtok application initialized.
+[2025-06-12 16:03:20] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-12 16:03:20] <Hajeebtok.php:21> [INFO] Hajeebtok application initialized.
+[2025-06-12 16:03:24] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-12 16:03:24] <Hajeebtok.php:21> [INFO] Hajeebtok application initialized.
+[2025-06-12 16:03:51] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-12 16:03:51] <Hajeebtok.php:21> [INFO] Hajeebtok application initialized.
+[2025-06-12 16:03:52] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-12 16:03:52] <Hajeebtok.php:21> [INFO] Hajeebtok application initialized.
+[2025-06-12 16:03:52] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-12 16:03:52] <Hajeebtok.php:21> [INFO] Hajeebtok application initialized.
+[2025-06-12 16:04:49] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-12 16:04:49] <Hajeebtok.php:21> [INFO] Hajeebtok application initialized.
+[2025-06-12 16:05:03] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-12 16:05:03] <Hajeebtok.php:21> [INFO] Hajeebtok application initialized.
+[2025-06-12 16:05:03] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-12 16:05:03] <Hajeebtok.php:21> [INFO] Hajeebtok application initialized.
+[2025-06-12 16:05:03] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-12 16:05:03] <Hajeebtok.php:21> [INFO] Hajeebtok application initialized.
+[2025-06-12 16:05:03] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-12 16:05:03] <Hajeebtok.php:21> [INFO] Hajeebtok application initialized.
+[2025-06-12 16:05:03] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-12 16:05:03] <Hajeebtok.php:21> [INFO] Hajeebtok application initialized.
+[2025-06-12 16:05:22] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-12 16:05:22] <Hajeebtok.php:21> [INFO] Hajeebtok application initialized.
+[2025-06-12 16:05:49] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-12 16:05:49] <Hajeebtok.php:21> [INFO] Hajeebtok application initialized.
+[2025-06-12 16:05:49] <index.php:14> [FTAL] Shuzanne Init Fail: Pecee\SimpleRouter\Exceptions\NotFoundHttpException: Route not found: "/fwefewf/" in C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php:467
+Stack trace:
+#0 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(353): Pecee\SimpleRouter\Router->routeRequest()
+#1 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\SimpleRouter.php(69): Pecee\SimpleRouter\Router->start()
+#2 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php(23): Pecee\SimpleRouter\SimpleRouter::start()
+#3 C:\Users\Andrew\Desktop\hajeebtok\backend\public\index.php(12): app\Hajeebtok::InitializeApp()
+#4 {main}
+[2025-06-12 16:05:50] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-12 16:05:50] <Hajeebtok.php:21> [INFO] Hajeebtok application initialized.
+[2025-06-12 16:05:50] <index.php:14> [FTAL] Shuzanne Init Fail: Pecee\SimpleRouter\Exceptions\NotFoundHttpException: Route not found: "/fwefewf/" in C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php:467
+Stack trace:
+#0 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(353): Pecee\SimpleRouter\Router->routeRequest()
+#1 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\SimpleRouter.php(69): Pecee\SimpleRouter\Router->start()
+#2 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php(23): Pecee\SimpleRouter\SimpleRouter::start()
+#3 C:\Users\Andrew\Desktop\hajeebtok\backend\public\index.php(12): app\Hajeebtok::InitializeApp()
+#4 {main}
+[2025-06-12 16:05:52] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-12 16:05:52] <Hajeebtok.php:21> [INFO] Hajeebtok application initialized.
+[2025-06-12 16:09:14] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-12 16:09:14] <Hajeebtok.php:21> [INFO] Hajeebtok application initialized.
+[2025-06-12 16:09:14] <index.php:14> [FTAL] Shuzanne Init Fail: Pecee\SimpleRouter\Exceptions\NotFoundHttpException: Route not found: "/video/get/" in C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php:467
+Stack trace:
+#0 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(353): Pecee\SimpleRouter\Router->routeRequest()
+#1 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\SimpleRouter.php(69): Pecee\SimpleRouter\Router->start()
+#2 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php(23): Pecee\SimpleRouter\SimpleRouter::start()
+#3 C:\Users\Andrew\Desktop\hajeebtok\backend\public\index.php(12): app\Hajeebtok::InitializeApp()
+#4 {main}
+[2025-06-12 16:09:18] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-12 16:09:18] <Hajeebtok.php:21> [INFO] Hajeebtok application initialized.
+[2025-06-12 16:16:26] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-12 16:16:26] <Hajeebtok.php:21> [INFO] Hajeebtok application initialized.
+[2025-06-12 16:16:26] <Logger.php:36> [FTAL] PHP Fatal Error: Uncaught Error: Class "app\Controllers\MimeTypes" not found in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Controllers\VideoController.php:14
+Stack trace:
+#0 [internal function]: app\Controllers\VideoController::getVideo()
+#1 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\ClassLoader\ClassLoader.php(46): call_user_func_array()
+#2 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Route\Route.php(95): Pecee\SimpleRouter\ClassLoader\ClassLoader->loadClosure()
+#3 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(427): Pecee\SimpleRouter\Route\Route->renderRoute()
+#4 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(353): Pecee\SimpleRouter\Router->routeRequest()
+#5 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\SimpleRouter.php(69): Pecee\SimpleRouter\Router->start()
+#6 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php(23): Pecee\SimpleRouter\SimpleRouter::start()
+#7 C:\Users\Andrew\Desktop\hajeebtok\backend\public\index.php(12): app\Hajeebtok::InitializeApp()
+#8 {main}
+  thrown in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Controllers\VideoController.php on line 14
+[2025-06-12 16:16:40] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-12 16:16:40] <Hajeebtok.php:21> [INFO] Hajeebtok application initialized.
+[2025-06-12 20:13:28] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-12 20:13:28] <MariaDBDatabase.php:49> [EROR] Database connection failed: could not find driver
+[2025-06-12 20:13:28] <index.php:14> [FTAL] Hajeebtok Init Fail: PDOException: could not find driver in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Types\MariaDBDatabase.php:47
+Stack trace:
+#0 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Types\MariaDBDatabase.php(47): PDO->__construct()
+#1 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php(21): app\Types\MariaDBDatabase->__construct()
+#2 C:\Users\Andrew\Desktop\hajeebtok\backend\public\index.php(12): app\Hajeebtok::InitializeApp()
+#3 {main}
+[2025-06-13 17:17:28] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-13 17:17:28] <Hajeebtok.php:35> [INFO] Hajeebtok application initialized.
+[2025-06-13 17:17:28] <index.php:14> [FTAL] Hajeebtok Init Fail: Pecee\SimpleRouter\Exceptions\NotFoundHttpException: Route not found: "/favicon.ico/" in C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php:467
+Stack trace:
+#0 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(353): Pecee\SimpleRouter\Router->routeRequest()
+#1 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\SimpleRouter.php(69): Pecee\SimpleRouter\Router->start()
+#2 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php(37): Pecee\SimpleRouter\SimpleRouter::start()
+#3 C:\Users\Andrew\Desktop\hajeebtok\backend\public\index.php(12): app\Hajeebtok::InitializeApp()
+#4 {main}
+[2025-06-13 17:29:29] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-13 17:29:29] <Hajeebtok.php:36> [INFO] Hajeebtok application initialized.
+[2025-06-13 17:29:29] <index.php:14> [FTAL] Hajeebtok Init Fail: Pecee\SimpleRouter\Exceptions\NotFoundHttpException: Route not found: "/" in C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php:467
+Stack trace:
+#0 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(353): Pecee\SimpleRouter\Router->routeRequest()
+#1 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\SimpleRouter.php(69): Pecee\SimpleRouter\Router->start()
+#2 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php(38): Pecee\SimpleRouter\SimpleRouter::start()
+#3 C:\Users\Andrew\Desktop\hajeebtok\backend\public\index.php(12): app\Hajeebtok::InitializeApp()
+#4 {main}
+[2025-06-13 17:31:22] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-13 17:31:22] <Hajeebtok.php:36> [INFO] Hajeebtok application initialized.
+[2025-06-13 17:31:22] <index.php:14> [FTAL] Hajeebtok Init Fail: Pecee\SimpleRouter\Exceptions\NotFoundHttpException: Route not found: "/" in C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php:467
+Stack trace:
+#0 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(353): Pecee\SimpleRouter\Router->routeRequest()
+#1 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\SimpleRouter.php(69): Pecee\SimpleRouter\Router->start()
+#2 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php(38): Pecee\SimpleRouter\SimpleRouter::start()
+#3 C:\Users\Andrew\Desktop\hajeebtok\backend\public\index.php(12): app\Hajeebtok::InitializeApp()
+#4 {main}
+[2025-06-13 17:34:32] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-13 17:34:32] <Hajeebtok.php:38> [INFO] Hajeebtok application initialized.
+[2025-06-13 17:34:51] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-13 17:34:51] <Hajeebtok.php:38> [INFO] Hajeebtok application initialized.
+[2025-06-13 17:34:51] <MariaDBDatabase.php:92> [EROR] Query execution failed: SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`hajeebtok`.`videos`, CONSTRAINT `fk_videos_accounts` FOREIGN KEY (`author_id`) REFERENCES `accounts` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION) - Query: INSERT INTO videos (title, description, author_id, likes, dislikes) VALUES (:title, :description, :author_id, :likes, :dislikes)
+[2025-06-13 17:34:51] <index.php:14> [FTAL] Hajeebtok Init Fail: PDOException: SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`hajeebtok`.`videos`, CONSTRAINT `fk_videos_accounts` FOREIGN KEY (`author_id`) REFERENCES `accounts` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION) in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Types\MariaDBDatabase.php:89
+Stack trace:
+#0 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Types\MariaDBDatabase.php(89): PDOStatement->execute()
+#1 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Types\MariaDBDatabase.php(99): app\Types\MariaDBDatabase->executeStatement()
+#2 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Types\DatabaseObjects\Video.php(48): app\Types\MariaDBDatabase->Query()
+#3 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php(41): app\Types\DatabaseObjects\Video->Save()
+#4 C:\Users\Andrew\Desktop\hajeebtok\backend\public\index.php(12): app\Hajeebtok::InitializeApp()
+#5 {main}
+[2025-06-13 17:36:13] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-13 17:36:13] <Hajeebtok.php:38> [INFO] Hajeebtok application initialized.
+[2025-06-13 17:36:13] <MariaDBDatabase.php:92> [EROR] Query execution failed: SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`hajeebtok`.`videos`, CONSTRAINT `fk_videos_accounts` FOREIGN KEY (`author_id`) REFERENCES `accounts` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION) - Query: INSERT INTO videos (title, description, author_id, likes, dislikes) VALUES (:title, :description, :author_id, :likes, :dislikes)
+[2025-06-13 17:36:13] <index.php:14> [FTAL] Hajeebtok Init Fail: PDOException: SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`hajeebtok`.`videos`, CONSTRAINT `fk_videos_accounts` FOREIGN KEY (`author_id`) REFERENCES `accounts` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION) in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Types\MariaDBDatabase.php:89
+Stack trace:
+#0 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Types\MariaDBDatabase.php(89): PDOStatement->execute()
+#1 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Types\MariaDBDatabase.php(99): app\Types\MariaDBDatabase->executeStatement()
+#2 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Types\DatabaseObjects\Video.php(48): app\Types\MariaDBDatabase->Query()
+#3 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php(41): app\Types\DatabaseObjects\Video->Save()
+#4 C:\Users\Andrew\Desktop\hajeebtok\backend\public\index.php(12): app\Hajeebtok::InitializeApp()
+#5 {main}
+[2025-06-13 17:54:44] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-13 17:54:44] <Hajeebtok.php:39> [INFO] Hajeebtok application initialized.
+[2025-06-13 17:54:45] <Account.php:60> [DBUG] Saved account id (1).
+[2025-06-13 17:54:45] <Account.php:60> [DBUG] Saved account id (2).
+[2025-06-13 17:54:45] <Video.php:56> [DBUG] Saved video id (3).
+[2025-06-13 18:18:00] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-13 18:18:00] <Hajeebtok.php:39> [INFO] Hajeebtok application initialized.
+[2025-06-13 18:18:00] <Video.php:75> [DBUG] Array
+[2025-06-13 18:18:00] <Account.php:79> [DBUG] Array
+[2025-06-13 18:18:00] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-13 18:18:00] <Hajeebtok.php:39> [INFO] Hajeebtok application initialized.
+[2025-06-13 18:18:00] <index.php:14> [FTAL] Hajeebtok Init Fail: Pecee\SimpleRouter\Exceptions\NotFoundHttpException: Route not found: "/favicon.ico/" in C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php:467
+Stack trace:
+#0 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(353): Pecee\SimpleRouter\Router->routeRequest()
+#1 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\SimpleRouter.php(69): Pecee\SimpleRouter\Router->start()
+#2 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php(41): Pecee\SimpleRouter\SimpleRouter::start()
+#3 C:\Users\Andrew\Desktop\hajeebtok\backend\public\index.php(12): app\Hajeebtok::InitializeApp()
+#4 {main}
+[2025-06-13 18:18:46] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-13 18:18:46] <Hajeebtok.php:39> [INFO] Hajeebtok application initialized.
+[2025-06-13 18:18:46] <Video.php:75> [DBUG] Array
+[2025-06-13 18:18:46] <Account.php:79> [DBUG] Array
+[2025-06-13 18:20:39] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-13 18:20:39] <Hajeebtok.php:39> [INFO] Hajeebtok application initialized.
+[2025-06-13 18:20:39] <Video.php:75> [DBUG] Array
+[2025-06-13 18:20:39] <Account.php:79> [DBUG] Array
+[2025-06-15 19:24:46] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-15 19:24:46] <Hajeebtok.php:39> [INFO] Hajeebtok application initialized.
+[2025-06-15 19:24:46] <Account.php:60> [DBUG] Saved account id (1).
+[2025-06-15 19:24:46] <Account.php:60> [DBUG] Saved account id (2).
+[2025-06-15 19:24:46] <Video.php:58> [DBUG] Saved video id (1).
+[2025-06-15 19:47:03] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-15 19:47:03] <Hajeebtok.php:40> [INFO] Hajeebtok application initialized.
+[2025-06-15 19:47:03] <Hajeebtok.php:55> [DBUG] Hello, John Clapper. 
+
+You should watch this video! It's absolutely hilarious!! And, just so you know, you're on thin ice buddy. If you don't watch that video, we're putting you on the ball stretcher. And just so you know, after you get on the ball stretcher, you don't get off.
+
+ - Hajeebtok Team XOXO
+[2025-06-15 19:48:42] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-15 19:48:42] <Hajeebtok.php:40> [INFO] Hajeebtok application initialized.
+[2025-06-15 19:48:42] <Hajeebtok.php:55> [DBUG] Hello, John Clapper. 
+
+You should watch this video! It's absolutely hilarious!! And, just so you know, you're on thin ice buddy. If you don't watch that video, we're putting you on the ball stretcher. And just so you know, after you get on the ball stretcher, you don't get off.
+
+ - Hajeebtok Team XOXO
+[2025-06-15 19:49:25] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-15 19:49:25] <Hajeebtok.php:40> [INFO] Hajeebtok application initialized.
+[2025-06-15 19:49:25] <Hajeebtok.php:55> [DBUG] Hello, John Clapper. 
+
+You should watch this video! It's absolutely hilarious!! And, just so you know, you're on thin ice buddy. If you don't watch that video, we're putting you on the ball stretcher. And just so you know, after you get on the ball stretcher, you don't get off.
+
+ - Hajeebtok Team XOXO
+[2025-06-15 19:49:32] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-15 19:49:32] <Hajeebtok.php:40> [INFO] Hajeebtok application initialized.
+[2025-06-15 19:49:32] <Hajeebtok.php:55> [DBUG] Hello, John Clapper. 
+
+You should watch this video! It's absolutely hilarious!! And, just so you know, you're on thin ice buddy. If you don't watch that video, we're putting you on the ball stretcher. And just so you know, after you get on the ball stretcher, you don't get off.
+
+ - Hajeebtok Team XOXO
+[2025-06-17 18:00:10] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-17 18:00:10] <Hajeebtok.php:40> [INFO] Hajeebtok application initialized.
+[2025-06-17 18:00:10] <Hajeebtok.php:55> [DBUG] Hello, John Clapper. 
+
+You should watch this video! It's absolutely hilarious!! And, just so you know, you're on thin ice buddy. If you don't watch that video, we're putting you on the ball stretcher. And just so you know, after you get on the ball stretcher, you don't get off.
+
+ - Hajeebtok Team XOXO
+[2025-06-17 18:00:11] <index.php:14> [FTAL] Hajeebtok Init Fail: Pecee\SimpleRouter\Exceptions\NotFoundHttpException: Route not found: "/1/" in C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php:467
+Stack trace:
+#0 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(353): Pecee\SimpleRouter\Router->routeRequest()
+#1 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\SimpleRouter.php(69): Pecee\SimpleRouter\Router->start()
+#2 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php(57): Pecee\SimpleRouter\SimpleRouter::start()
+#3 C:\Users\Andrew\Desktop\hajeebtok\backend\public\index.php(12): app\Hajeebtok::InitializeApp()
+#4 {main}
+[2025-06-17 18:00:41] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-17 18:00:41] <Hajeebtok.php:40> [INFO] Hajeebtok application initialized.
+[2025-06-17 18:00:41] <Hajeebtok.php:55> [DBUG] Hello, John Clapper. 
+
+You should watch this video! It's absolutely hilarious!! And, just so you know, you're on thin ice buddy. If you don't watch that video, we're putting you on the ball stretcher. And just so you know, after you get on the ball stretcher, you don't get off.
+
+ - Hajeebtok Team XOXO
+[2025-06-17 18:00:41] <index.php:14> [FTAL] Hajeebtok Init Fail: Pecee\SimpleRouter\Exceptions\NotFoundHttpException: Route not found: "/account/1/" in C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php:467
+Stack trace:
+#0 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(353): Pecee\SimpleRouter\Router->routeRequest()
+#1 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\SimpleRouter.php(69): Pecee\SimpleRouter\Router->start()
+#2 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php(57): Pecee\SimpleRouter\SimpleRouter::start()
+#3 C:\Users\Andrew\Desktop\hajeebtok\backend\public\index.php(12): app\Hajeebtok::InitializeApp()
+#4 {main}
+[2025-06-17 18:00:58] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-17 18:00:58] <Hajeebtok.php:42> [INFO] Hajeebtok application initialized.
+[2025-06-17 18:00:58] <Hajeebtok.php:57> [DBUG] Hello, John Clapper. 
+
+You should watch this video! It's absolutely hilarious!! And, just so you know, you're on thin ice buddy. If you don't watch that video, we're putting you on the ball stretcher. And just so you know, after you get on the ball stretcher, you don't get off.
+
+ - Hajeebtok Team XOXO
+[2025-06-17 18:00:58] <Account.php:79> [DBUG] Array
+[2025-06-17 18:00:58] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-17 18:00:58] <Hajeebtok.php:42> [INFO] Hajeebtok application initialized.
+[2025-06-17 18:00:58] <Hajeebtok.php:57> [DBUG] Hello, John Clapper. 
+
+You should watch this video! It's absolutely hilarious!! And, just so you know, you're on thin ice buddy. If you don't watch that video, we're putting you on the ball stretcher. And just so you know, after you get on the ball stretcher, you don't get off.
+
+ - Hajeebtok Team XOXO
+[2025-06-17 18:00:58] <index.php:14> [FTAL] Hajeebtok Init Fail: Pecee\SimpleRouter\Exceptions\NotFoundHttpException: Route not found: "/favicon.ico/" in C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php:467
+Stack trace:
+#0 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(353): Pecee\SimpleRouter\Router->routeRequest()
+#1 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\SimpleRouter.php(69): Pecee\SimpleRouter\Router->start()
+#2 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php(59): Pecee\SimpleRouter\SimpleRouter::start()
+#3 C:\Users\Andrew\Desktop\hajeebtok\backend\public\index.php(12): app\Hajeebtok::InitializeApp()
+#4 {main}
+[2025-06-17 18:01:07] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-17 18:01:07] <Hajeebtok.php:42> [INFO] Hajeebtok application initialized.
+[2025-06-17 18:01:07] <Hajeebtok.php:57> [DBUG] Hello, John Clapper. 
+
+You should watch this video! It's absolutely hilarious!! And, just so you know, you're on thin ice buddy. If you don't watch that video, we're putting you on the ball stretcher. And just so you know, after you get on the ball stretcher, you don't get off.
+
+ - Hajeebtok Team XOXO
+[2025-06-17 18:01:07] <Account.php:79> [DBUG] Array
+[2025-06-17 18:01:10] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-17 18:01:10] <Hajeebtok.php:42> [INFO] Hajeebtok application initialized.
+[2025-06-17 18:01:10] <Hajeebtok.php:57> [DBUG] Hello, John Clapper. 
+
+You should watch this video! It's absolutely hilarious!! And, just so you know, you're on thin ice buddy. If you don't watch that video, we're putting you on the ball stretcher. And just so you know, after you get on the ball stretcher, you don't get off.
+
+ - Hajeebtok Team XOXO
+[2025-06-17 18:01:10] <AccountNotFoundException.php:13> [EROR] Couldn't find account id (3)
+[2025-06-17 18:01:10] <index.php:14> [FTAL] Hajeebtok Init Fail: app\Exceptions\AccountNotFoundException: Couldn't find account id (3) in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Types\DatabaseObjects\Account.php:78
+Stack trace:
+#0 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Controllers\AccountController.php(35): app\Types\DatabaseObjects\Account->Load()
+#1 [internal function]: app\Controllers\AccountController::getAccount()
+#2 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\ClassLoader\ClassLoader.php(46): call_user_func_array()
+#3 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Route\Route.php(95): Pecee\SimpleRouter\ClassLoader\ClassLoader->loadClosure()
+#4 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(427): Pecee\SimpleRouter\Route\Route->renderRoute()
+#5 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(353): Pecee\SimpleRouter\Router->routeRequest()
+#6 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\SimpleRouter.php(69): Pecee\SimpleRouter\Router->start()
+#7 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php(59): Pecee\SimpleRouter\SimpleRouter::start()
+#8 C:\Users\Andrew\Desktop\hajeebtok\backend\public\index.php(12): app\Hajeebtok::InitializeApp()
+#9 {main}
+[2025-06-17 18:01:20] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-17 18:01:20] <Hajeebtok.php:42> [INFO] Hajeebtok application initialized.
+[2025-06-17 18:01:20] <Hajeebtok.php:57> [DBUG] Hello, John Clapper. 
+
+You should watch this video! It's absolutely hilarious!! And, just so you know, you're on thin ice buddy. If you don't watch that video, we're putting you on the ball stretcher. And just so you know, after you get on the ball stretcher, you don't get off.
+
+ - Hajeebtok Team XOXO
+[2025-06-17 18:01:20] <AccountNotFoundException.php:13> [EROR] Couldn't find account id (3)
+[2025-06-17 18:01:20] <index.php:14> [FTAL] Hajeebtok Init Fail: app\Exceptions\AccountNotFoundException: Couldn't find account id (3) in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Types\DatabaseObjects\Account.php:78
+Stack trace:
+#0 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Controllers\AccountController.php(35): app\Types\DatabaseObjects\Account->Load()
+#1 [internal function]: app\Controllers\AccountController::getAccount()
+#2 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\ClassLoader\ClassLoader.php(46): call_user_func_array()
+#3 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Route\Route.php(95): Pecee\SimpleRouter\ClassLoader\ClassLoader->loadClosure()
+#4 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(427): Pecee\SimpleRouter\Route\Route->renderRoute()
+#5 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(353): Pecee\SimpleRouter\Router->routeRequest()
+#6 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\SimpleRouter.php(69): Pecee\SimpleRouter\Router->start()
+#7 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php(59): Pecee\SimpleRouter\SimpleRouter::start()
+#8 C:\Users\Andrew\Desktop\hajeebtok\backend\public\index.php(12): app\Hajeebtok::InitializeApp()
+#9 {main}
+[2025-06-17 18:29:19] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-17 18:29:19] <Hajeebtok.php:42> [INFO] Hajeebtok application initialized.
+[2025-06-17 18:29:19] <Hajeebtok.php:57> [DBUG] Hello, John Clapper. 
+
+You should watch this video! It's absolutely hilarious!! And, just so you know, you're on thin ice buddy. If you don't watch that video, we're putting you on the ball stretcher. And just so you know, after you get on the ball stretcher, you don't get off.
+
+ - Hajeebtok Team XOXO
+[2025-06-17 18:29:19] <index.php:14> [FTAL] Hajeebtok Init Fail: Pecee\SimpleRouter\Exceptions\NotFoundHttpException: Route "/account/token/" or method "options" not allowed. in C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php:452
+Stack trace:
+#0 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(353): Pecee\SimpleRouter\Router->routeRequest()
+#1 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\SimpleRouter.php(69): Pecee\SimpleRouter\Router->start()
+#2 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php(59): Pecee\SimpleRouter\SimpleRouter::start()
+#3 C:\Users\Andrew\Desktop\hajeebtok\backend\public\index.php(12): app\Hajeebtok::InitializeApp()
+#4 {main}
+[2025-06-17 18:51:05] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-17 18:51:05] <Hajeebtok.php:42> [INFO] Hajeebtok application initialized.
+[2025-06-17 18:51:05] <Hajeebtok.php:57> [DBUG] Hello, John Clapper. 
+
+You should watch this video! It's absolutely hilarious!! And, just so you know, you're on thin ice buddy. If you don't watch that video, we're putting you on the ball stretcher. And just so you know, after you get on the ball stretcher, you don't get off.
+
+ - Hajeebtok Team XOXO
+[2025-06-17 18:51:05] <index.php:14> [FTAL] Hajeebtok Init Fail: Pecee\SimpleRouter\Exceptions\NotFoundHttpException: Route "/account/token/" or method "options" not allowed. in C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php:452
+Stack trace:
+#0 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(353): Pecee\SimpleRouter\Router->routeRequest()
+#1 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\SimpleRouter.php(69): Pecee\SimpleRouter\Router->start()
+#2 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php(59): Pecee\SimpleRouter\SimpleRouter::start()
+#3 C:\Users\Andrew\Desktop\hajeebtok\backend\public\index.php(12): app\Hajeebtok::InitializeApp()
+#4 {main}
+[2025-06-17 18:51:23] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-17 18:51:23] <Hajeebtok.php:42> [INFO] Hajeebtok application initialized.
+[2025-06-17 18:51:23] <Hajeebtok.php:57> [DBUG] Hello, John Clapper. 
+
+You should watch this video! It's absolutely hilarious!! And, just so you know, you're on thin ice buddy. If you don't watch that video, we're putting you on the ball stretcher. And just so you know, after you get on the ball stretcher, you don't get off.
+
+ - Hajeebtok Team XOXO
+[2025-06-17 18:51:23] <index.php:14> [FTAL] Hajeebtok Init Fail: Pecee\SimpleRouter\Exceptions\NotFoundHttpException: Route "/account/token/" or method "options" not allowed. in C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php:452
+Stack trace:
+#0 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(353): Pecee\SimpleRouter\Router->routeRequest()
+#1 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\SimpleRouter.php(69): Pecee\SimpleRouter\Router->start()
+#2 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php(59): Pecee\SimpleRouter\SimpleRouter::start()
+#3 C:\Users\Andrew\Desktop\hajeebtok\backend\public\index.php(12): app\Hajeebtok::InitializeApp()
+#4 {main}
+[2025-06-18 14:46:52] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-18 14:46:52] <MariaDBDatabase.php:49> [EROR] Database connection failed: SQLSTATE[HY000] [2002] No connection could be made because the target machine actively refused it
+[2025-06-18 14:46:52] <index.php:14> [FTAL] Hajeebtok Init Fail: PDOException: SQLSTATE[HY000] [2002] No connection could be made because the target machine actively refused it in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Types\MariaDBDatabase.php:47
+Stack trace:
+#0 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Types\MariaDBDatabase.php(47): PDO->__construct()
+#1 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php(27): app\Types\MariaDBDatabase->__construct()
+#2 C:\Users\Andrew\Desktop\hajeebtok\backend\public\index.php(12): app\Hajeebtok::InitializeApp()
+#3 {main}
+[2025-06-18 14:47:01] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-18 14:47:01] <MariaDBDatabase.php:49> [EROR] Database connection failed: SQLSTATE[HY000] [2002] No connection could be made because the target machine actively refused it
+[2025-06-18 14:47:01] <index.php:14> [FTAL] Hajeebtok Init Fail: PDOException: SQLSTATE[HY000] [2002] No connection could be made because the target machine actively refused it in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Types\MariaDBDatabase.php:47
+Stack trace:
+#0 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Types\MariaDBDatabase.php(47): PDO->__construct()
+#1 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php(27): app\Types\MariaDBDatabase->__construct()
+#2 C:\Users\Andrew\Desktop\hajeebtok\backend\public\index.php(12): app\Hajeebtok::InitializeApp()
+#3 {main}
+[2025-06-18 14:47:11] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-18 14:47:11] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-18 14:47:11] <Hajeebtok.php:58> [DBUG] Hello, John Clapper. 
+
+You should watch this video! It's absolutely hilarious!! And, just so you know, you're on thin ice buddy. If you don't watch that video, we're putting you on the ball stretcher. And just so you know, after you get on the ball stretcher, you don't get off.
+
+ - Hajeebtok Team XOXO
+[2025-06-18 14:47:11] <CommentNotFoundException.php:13> [EROR] Couldn't find comment id (1)
+[2025-06-18 14:47:11] <index.php:14> [FTAL] Hajeebtok Init Fail: app\Exceptions\CommentNotFoundException: Couldn't find comment id (1) in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Types\DatabaseObjects\Comment.php:80
+Stack trace:
+#0 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php(61): app\Types\DatabaseObjects\Comment->LoadMany()
+#1 C:\Users\Andrew\Desktop\hajeebtok\backend\public\index.php(12): app\Hajeebtok::InitializeApp()
+#2 {main}
+[2025-06-18 14:47:13] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-18 14:47:13] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-18 14:47:13] <Hajeebtok.php:58> [DBUG] Hello, John Clapper. 
+
+You should watch this video! It's absolutely hilarious!! And, just so you know, you're on thin ice buddy. If you don't watch that video, we're putting you on the ball stretcher. And just so you know, after you get on the ball stretcher, you don't get off.
+
+ - Hajeebtok Team XOXO
+[2025-06-18 14:47:13] <CommentNotFoundException.php:13> [EROR] Couldn't find comment id (1)
+[2025-06-18 14:47:13] <index.php:14> [FTAL] Hajeebtok Init Fail: app\Exceptions\CommentNotFoundException: Couldn't find comment id (1) in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Types\DatabaseObjects\Comment.php:80
+Stack trace:
+#0 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php(61): app\Types\DatabaseObjects\Comment->LoadMany()
+#1 C:\Users\Andrew\Desktop\hajeebtok\backend\public\index.php(12): app\Hajeebtok::InitializeApp()
+#2 {main}
+[2025-06-18 14:47:14] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-18 14:47:14] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-18 14:47:14] <Hajeebtok.php:58> [DBUG] Hello, John Clapper. 
+
+You should watch this video! It's absolutely hilarious!! And, just so you know, you're on thin ice buddy. If you don't watch that video, we're putting you on the ball stretcher. And just so you know, after you get on the ball stretcher, you don't get off.
+
+ - Hajeebtok Team XOXO
+[2025-06-18 14:47:14] <CommentNotFoundException.php:13> [EROR] Couldn't find comment id (1)
+[2025-06-18 14:47:14] <index.php:14> [FTAL] Hajeebtok Init Fail: app\Exceptions\CommentNotFoundException: Couldn't find comment id (1) in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Types\DatabaseObjects\Comment.php:80
+Stack trace:
+#0 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php(61): app\Types\DatabaseObjects\Comment->LoadMany()
+#1 C:\Users\Andrew\Desktop\hajeebtok\backend\public\index.php(12): app\Hajeebtok::InitializeApp()
+#2 {main}
+[2025-06-18 14:47:15] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-18 14:47:15] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-18 14:47:15] <Hajeebtok.php:58> [DBUG] Hello, John Clapper. 
+
+You should watch this video! It's absolutely hilarious!! And, just so you know, you're on thin ice buddy. If you don't watch that video, we're putting you on the ball stretcher. And just so you know, after you get on the ball stretcher, you don't get off.
+
+ - Hajeebtok Team XOXO
+[2025-06-18 14:47:15] <CommentNotFoundException.php:13> [EROR] Couldn't find comment id (1)
+[2025-06-18 14:47:15] <index.php:14> [FTAL] Hajeebtok Init Fail: app\Exceptions\CommentNotFoundException: Couldn't find comment id (1) in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Types\DatabaseObjects\Comment.php:80
+Stack trace:
+#0 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php(61): app\Types\DatabaseObjects\Comment->LoadMany()
+#1 C:\Users\Andrew\Desktop\hajeebtok\backend\public\index.php(12): app\Hajeebtok::InitializeApp()
+#2 {main}
+[2025-06-18 14:49:42] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-18 14:49:42] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-18 14:49:42] <Hajeebtok.php:58> [DBUG] Hello, John Clapper. 
+
+You should watch this video! It's absolutely hilarious!! And, just so you know, you're on thin ice buddy. If you don't watch that video, we're putting you on the ball stretcher. And just so you know, after you get on the ball stretcher, you don't get off.
+
+ - Hajeebtok Team XOXO
+[2025-06-18 14:49:42] <Logger.php:36> [FTAL] PHP Fatal Error: Uncaught TypeError: app\Logger::Debug(): Argument #1 ($message) must be of type string, array given, called in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php on line 62 and defined in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Logger.php:146
+Stack trace:
+#0 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php(62): app\Logger::Debug()
+#1 C:\Users\Andrew\Desktop\hajeebtok\backend\public\index.php(12): app\Hajeebtok::InitializeApp()
+#2 {main}
+  thrown in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Logger.php on line 146
+[2025-06-18 14:50:09] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-18 14:50:09] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-18 14:50:09] <Hajeebtok.php:58> [DBUG] Hello, John Clapper. 
+
+You should watch this video! It's absolutely hilarious!! And, just so you know, you're on thin ice buddy. If you don't watch that video, we're putting you on the ball stretcher. And just so you know, after you get on the ball stretcher, you don't get off.
+
+ - Hajeebtok Team XOXO
+[2025-06-18 14:50:09] <Logger.php:36> [FTAL] PHP Fatal Error: Uncaught Error: Class name must be a valid object or a string in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php:62
+Stack trace:
+#0 C:\Users\Andrew\Desktop\hajeebtok\backend\public\index.php(12): app\Hajeebtok::InitializeApp()
+#1 {main}
+  thrown in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php on line 62
+[2025-06-18 14:50:26] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-18 14:50:26] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-18 14:50:26] <Hajeebtok.php:58> [DBUG] Hello, John Clapper. 
+
+You should watch this video! It's absolutely hilarious!! And, just so you know, you're on thin ice buddy. If you don't watch that video, we're putting you on the ball stretcher. And just so you know, after you get on the ball stretcher, you don't get off.
+
+ - Hajeebtok Team XOXO
+[2025-06-18 14:50:26] <Logger.php:36> [FTAL] PHP Fatal Error: Uncaught Error: Call to a member function forEach() on array in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php:62
+Stack trace:
+#0 C:\Users\Andrew\Desktop\hajeebtok\backend\public\index.php(12): app\Hajeebtok::InitializeApp()
+#1 {main}
+  thrown in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php on line 62
+[2025-06-18 14:50:51] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-18 14:50:51] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-18 14:50:51] <Hajeebtok.php:58> [DBUG] Hello, John Clapper. 
+
+You should watch this video! It's absolutely hilarious!! And, just so you know, you're on thin ice buddy. If you don't watch that video, we're putting you on the ball stretcher. And just so you know, after you get on the ball stretcher, you don't get off.
+
+ - Hajeebtok Team XOXO
+[2025-06-18 14:50:51] <Hajeebtok.php:62> [DBUG] Array
+[2025-06-18 14:51:04] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-18 14:51:04] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-18 14:51:04] <Hajeebtok.php:58> [DBUG] Hello, John Clapper. 
+
+You should watch this video! It's absolutely hilarious!! And, just so you know, you're on thin ice buddy. If you don't watch that video, we're putting you on the ball stretcher. And just so you know, after you get on the ball stretcher, you don't get off.
+
+ - Hajeebtok Team XOXO
+[2025-06-18 14:51:04] <Logger.php:36> [FTAL] PHP Fatal Error: Uncaught TypeError: app\Logger::Debug(): Argument #1 ($message) must be of type string, null given, called in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php on line 63 and defined in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Logger.php:146
+Stack trace:
+#0 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php(63): app\Logger::Debug()
+#1 C:\Users\Andrew\Desktop\hajeebtok\backend\public\index.php(12): app\Hajeebtok::InitializeApp()
+#2 {main}
+  thrown in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Logger.php on line 146
+[2025-06-18 14:51:24] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-18 14:51:24] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-18 14:51:24] <Hajeebtok.php:58> [DBUG] Hello, John Clapper. 
+
+You should watch this video! It's absolutely hilarious!! And, just so you know, you're on thin ice buddy. If you don't watch that video, we're putting you on the ball stretcher. And just so you know, after you get on the ball stretcher, you don't get off.
+
+ - Hajeebtok Team XOXO
+[2025-06-18 14:51:24] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-18 14:51:24] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-18 14:51:24] <Hajeebtok.php:58> [DBUG] Hello, John Clapper. 
+
+You should watch this video! It's absolutely hilarious!! And, just so you know, you're on thin ice buddy. If you don't watch that video, we're putting you on the ball stretcher. And just so you know, after you get on the ball stretcher, you don't get off.
+
+ - Hajeebtok Team XOXO
+[2025-06-18 14:51:38] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-18 14:51:38] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-18 14:51:38] <Hajeebtok.php:58> [DBUG] Hello, John Clapper. 
+
+You should watch this video! It's absolutely hilarious!! And, just so you know, you're on thin ice buddy. If you don't watch that video, we're putting you on the ball stretcher. And just so you know, after you get on the ball stretcher, you don't get off.
+
+ - Hajeebtok Team XOXO
+[2025-06-18 14:51:38] <Logger.php:36> [FTAL] PHP Fatal Error: Uncaught TypeError: app\Logger::Debug(): Argument #1 ($message) must be of type string, null given, called in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php on line 63 and defined in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Logger.php:146
+Stack trace:
+#0 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php(63): app\Logger::Debug()
+#1 C:\Users\Andrew\Desktop\hajeebtok\backend\public\index.php(12): app\Hajeebtok::InitializeApp()
+#2 {main}
+  thrown in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Logger.php on line 146
+[2025-06-18 14:51:42] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-18 14:51:42] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-18 14:51:42] <Hajeebtok.php:58> [DBUG] Hello, John Clapper. 
+
+You should watch this video! It's absolutely hilarious!! And, just so you know, you're on thin ice buddy. If you don't watch that video, we're putting you on the ball stretcher. And just so you know, after you get on the ball stretcher, you don't get off.
+
+ - Hajeebtok Team XOXO
+[2025-06-18 14:51:42] <Hajeebtok.php:63> [DBUG] 
+[2025-06-18 15:02:32] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-18 15:02:32] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-18 15:02:32] <Hajeebtok.php:58> [DBUG] Hello, John Clapper. 
+
+You should watch this video! It's absolutely hilarious!! And, just so you know, you're on thin ice buddy. If you don't watch that video, we're putting you on the ball stretcher. And just so you know, after you get on the ball stretcher, you don't get off.
+
+ - Hajeebtok Team XOXO
+[2025-06-18 15:02:32] <Logger.php:36> [FTAL] PHP Fatal Error: Uncaught TypeError: app\Logger::Debug(): Argument #1 ($message) must be of type string, null given, called in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php on line 63 and defined in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Logger.php:146
+Stack trace:
+#0 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php(63): app\Logger::Debug()
+#1 C:\Users\Andrew\Desktop\hajeebtok\backend\public\index.php(12): app\Hajeebtok::InitializeApp()
+#2 {main}
+  thrown in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Logger.php on line 146
+[2025-06-18 15:02:32] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-18 15:02:32] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-18 15:02:32] <Hajeebtok.php:58> [DBUG] Hello, John Clapper. 
+
+You should watch this video! It's absolutely hilarious!! And, just so you know, you're on thin ice buddy. If you don't watch that video, we're putting you on the ball stretcher. And just so you know, after you get on the ball stretcher, you don't get off.
+
+ - Hajeebtok Team XOXO
+[2025-06-18 15:02:32] <Logger.php:36> [FTAL] PHP Fatal Error: Uncaught TypeError: app\Logger::Debug(): Argument #1 ($message) must be of type string, null given, called in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php on line 63 and defined in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Logger.php:146
+Stack trace:
+#0 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php(63): app\Logger::Debug()
+#1 C:\Users\Andrew\Desktop\hajeebtok\backend\public\index.php(12): app\Hajeebtok::InitializeApp()
+#2 {main}
+  thrown in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Logger.php on line 146
+[2025-06-18 15:02:59] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-18 15:02:59] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-18 15:02:59] <Hajeebtok.php:58> [DBUG] Hello, John Clapper. 
+
+You should watch this video! It's absolutely hilarious!! And, just so you know, you're on thin ice buddy. If you don't watch that video, we're putting you on the ball stretcher. And just so you know, after you get on the ball stretcher, you don't get off.
+
+ - Hajeebtok Team XOXO
+[2025-06-18 15:02:59] <Logger.php:36> [FTAL] PHP Fatal Error: Uncaught TypeError: app\Logger::Debug(): Argument #1 ($message) must be of type string, null given, called in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php on line 63 and defined in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Logger.php:146
+Stack trace:
+#0 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php(63): app\Logger::Debug()
+#1 C:\Users\Andrew\Desktop\hajeebtok\backend\public\index.php(12): app\Hajeebtok::InitializeApp()
+#2 {main}
+  thrown in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Logger.php on line 146
+[2025-06-18 15:03:00] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-18 15:03:00] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-18 15:03:00] <Hajeebtok.php:58> [DBUG] Hello, John Clapper. 
+
+You should watch this video! It's absolutely hilarious!! And, just so you know, you're on thin ice buddy. If you don't watch that video, we're putting you on the ball stretcher. And just so you know, after you get on the ball stretcher, you don't get off.
+
+ - Hajeebtok Team XOXO
+[2025-06-18 15:03:00] <Logger.php:36> [FTAL] PHP Fatal Error: Uncaught TypeError: app\Logger::Debug(): Argument #1 ($message) must be of type string, null given, called in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php on line 63 and defined in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Logger.php:146
+Stack trace:
+#0 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php(63): app\Logger::Debug()
+#1 C:\Users\Andrew\Desktop\hajeebtok\backend\public\index.php(12): app\Hajeebtok::InitializeApp()
+#2 {main}
+  thrown in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Logger.php on line 146
+[2025-06-18 15:03:04] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-18 15:03:04] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-18 15:03:04] <Hajeebtok.php:58> [DBUG] Hello, John Clapper. 
+
+You should watch this video! It's absolutely hilarious!! And, just so you know, you're on thin ice buddy. If you don't watch that video, we're putting you on the ball stretcher. And just so you know, after you get on the ball stretcher, you don't get off.
+
+ - Hajeebtok Team XOXO
+[2025-06-18 15:03:04] <Logger.php:36> [FTAL] PHP Fatal Error: Uncaught TypeError: app\Logger::Debug(): Argument #1 ($message) must be of type string, null given, called in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php on line 63 and defined in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Logger.php:146
+Stack trace:
+#0 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php(63): app\Logger::Debug()
+#1 C:\Users\Andrew\Desktop\hajeebtok\backend\public\index.php(12): app\Hajeebtok::InitializeApp()
+#2 {main}
+  thrown in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Logger.php on line 146
+[2025-06-18 15:03:06] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-18 15:03:06] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-18 15:03:06] <Hajeebtok.php:58> [DBUG] Hello, John Clapper. 
+
+You should watch this video! It's absolutely hilarious!! And, just so you know, you're on thin ice buddy. If you don't watch that video, we're putting you on the ball stretcher. And just so you know, after you get on the ball stretcher, you don't get off.
+
+ - Hajeebtok Team XOXO
+[2025-06-18 15:03:06] <Logger.php:36> [FTAL] PHP Fatal Error: Uncaught TypeError: app\Logger::Debug(): Argument #1 ($message) must be of type string, null given, called in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php on line 63 and defined in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Logger.php:146
+Stack trace:
+#0 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php(63): app\Logger::Debug()
+#1 C:\Users\Andrew\Desktop\hajeebtok\backend\public\index.php(12): app\Hajeebtok::InitializeApp()
+#2 {main}
+  thrown in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Logger.php on line 146
+[2025-06-18 15:03:15] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-18 15:03:15] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-18 15:03:15] <Hajeebtok.php:58> [DBUG] Hello, John Clapper. 
+
+You should watch this video! It's absolutely hilarious!! And, just so you know, you're on thin ice buddy. If you don't watch that video, we're putting you on the ball stretcher. And just so you know, after you get on the ball stretcher, you don't get off.
+
+ - Hajeebtok Team XOXO
+[2025-06-18 15:03:15] <Logger.php:36> [FTAL] PHP Fatal Error: Uncaught TypeError: app\Logger::Debug(): Argument #1 ($message) must be of type string, null given, called in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php on line 63 and defined in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Logger.php:146
+Stack trace:
+#0 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php(63): app\Logger::Debug()
+#1 C:\Users\Andrew\Desktop\hajeebtok\backend\public\index.php(12): app\Hajeebtok::InitializeApp()
+#2 {main}
+  thrown in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Logger.php on line 146
+[2025-06-18 15:04:34] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-18 15:04:34] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-18 15:04:34] <Hajeebtok.php:58> [DBUG] Hello, John Clapper. 
+
+You should watch this video! It's absolutely hilarious!! And, just so you know, you're on thin ice buddy. If you don't watch that video, we're putting you on the ball stretcher. And just so you know, after you get on the ball stretcher, you don't get off.
+
+ - Hajeebtok Team XOXO
+[2025-06-18 15:04:34] <Comment.php:81> [DBUG] Array
+[2025-06-18 15:04:34] <Logger.php:36> [FTAL] PHP Fatal Error: Uncaught TypeError: app\Logger::Debug(): Argument #1 ($message) must be of type string, null given, called in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php on line 63 and defined in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Logger.php:146
+Stack trace:
+#0 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php(63): app\Logger::Debug()
+#1 C:\Users\Andrew\Desktop\hajeebtok\backend\public\index.php(12): app\Hajeebtok::InitializeApp()
+#2 {main}
+  thrown in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Logger.php on line 146
+[2025-06-18 15:28:40] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-18 15:28:40] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-18 15:28:40] <Hajeebtok.php:58> [DBUG] Hello, John Clapper. 
+
+You should watch this video! It's absolutely hilarious!! And, just so you know, you're on thin ice buddy. If you don't watch that video, we're putting you on the ball stretcher. And just so you know, after you get on the ball stretcher, you don't get off.
+
+ - Hajeebtok Team XOXO
+[2025-06-18 15:28:40] <Hajeebtok.php:63> [DBUG] Man... This Video... It was an experience! Hajeebtok told me to watch it, and I don't regret it at all!
+[2025-06-18 15:28:40] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-18 15:28:40] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-18 15:28:40] <Hajeebtok.php:58> [DBUG] Hello, John Clapper. 
+
+You should watch this video! It's absolutely hilarious!! And, just so you know, you're on thin ice buddy. If you don't watch that video, we're putting you on the ball stretcher. And just so you know, after you get on the ball stretcher, you don't get off.
+
+ - Hajeebtok Team XOXO
+[2025-06-18 15:28:40] <Hajeebtok.php:63> [DBUG] Man... This Video... It was an experience! Hajeebtok told me to watch it, and I don't regret it at all!
+[2025-06-18 15:28:40] <index.php:14> [FTAL] Hajeebtok Init Fail: Pecee\SimpleRouter\Exceptions\NotFoundHttpException: Route not found: "/favicon.ico/" in C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php:467
+Stack trace:
+#0 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(353): Pecee\SimpleRouter\Router->routeRequest()
+#1 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\SimpleRouter.php(69): Pecee\SimpleRouter\Router->start()
+#2 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php(66): Pecee\SimpleRouter\SimpleRouter::start()
+#3 C:\Users\Andrew\Desktop\hajeebtok\backend\public\index.php(12): app\Hajeebtok::InitializeApp()
+#4 {main}
+[2025-06-18 16:07:20] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-18 16:07:20] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-18 16:07:20] <Hajeebtok.php:58> [DBUG] Hello, John Clapper. 
+
+You should watch this video! It's absolutely hilarious!! And, just so you know, you're on thin ice buddy. If you don't watch that video, we're putting you on the ball stretcher. And just so you know, after you get on the ball stretcher, you don't get off.
+
+ - Hajeebtok Team XOXO
+[2025-06-18 16:07:20] <Hajeebtok.php:63> [DBUG] Man... This Video... It was an experience! Hajeebtok told me to watch it, and I don't regret it at all!
+[2025-06-18 16:07:20] <Logger.php:36> [FTAL] PHP Fatal Error: Uncaught TypeError: app\Exceptions\VideoNotFoundException::__construct(): Argument #1 ($id) must be of type int, string given, called in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Types\DatabaseObjects\Video.php on line 90 and defined in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Exceptions\VideoNotFoundException.php:11
+Stack trace:
+#0 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Types\DatabaseObjects\Video.php(90): app\Exceptions\VideoNotFoundException->__construct()
+#1 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Controllers\VideoController.php(65): app\Types\DatabaseObjects\Video->LoadMany()
+#2 [internal function]: app\Controllers\VideoController::search()
+#3 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\ClassLoader\ClassLoader.php(46): call_user_func_array()
+#4 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Route\Route.php(95): Pecee\SimpleRouter\ClassLoader\ClassLoader->loadClosure()
+#5 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(427): Pecee\SimpleRouter\Route\Route->renderRoute()
+#6 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(353): Pecee\SimpleRouter\Router->routeRequest()
+#7 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\SimpleRouter.php(69): Pecee\SimpleRouter\Router->start()
+#8 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php(66): Pecee\SimpleRouter\SimpleRouter::start()
+#9 C:\Users\Andrew\Desktop\hajeebtok\backend\public\index.php(12): app\Hajeebtok::InitializeApp()
+#10 {main}
+  thrown in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Exceptions\VideoNotFoundException.php on line 11
+[2025-06-18 16:07:49] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-18 16:07:49] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-18 16:07:49] <Hajeebtok.php:58> [DBUG] Hello, John Clapper. 
+
+You should watch this video! It's absolutely hilarious!! And, just so you know, you're on thin ice buddy. If you don't watch that video, we're putting you on the ball stretcher. And just so you know, after you get on the ball stretcher, you don't get off.
+
+ - Hajeebtok Team XOXO
+[2025-06-18 16:07:49] <Hajeebtok.php:63> [DBUG] Man... This Video... It was an experience! Hajeebtok told me to watch it, and I don't regret it at all!
+[2025-06-18 16:07:49] <Logger.php:36> [FTAL] PHP Fatal Error: Uncaught TypeError: app\Exceptions\VideoNotFoundException::__construct(): Argument #1 ($id) must be of type int, null given, called in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Types\DatabaseObjects\Video.php on line 90 and defined in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Exceptions\VideoNotFoundException.php:11
+Stack trace:
+#0 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Types\DatabaseObjects\Video.php(90): app\Exceptions\VideoNotFoundException->__construct()
+#1 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Controllers\VideoController.php(65): app\Types\DatabaseObjects\Video->LoadMany()
+#2 [internal function]: app\Controllers\VideoController::search()
+#3 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\ClassLoader\ClassLoader.php(46): call_user_func_array()
+#4 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Route\Route.php(95): Pecee\SimpleRouter\ClassLoader\ClassLoader->loadClosure()
+#5 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(427): Pecee\SimpleRouter\Route\Route->renderRoute()
+#6 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(353): Pecee\SimpleRouter\Router->routeRequest()
+#7 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\SimpleRouter.php(69): Pecee\SimpleRouter\Router->start()
+#8 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php(66): Pecee\SimpleRouter\SimpleRouter::start()
+#9 C:\Users\Andrew\Desktop\hajeebtok\backend\public\index.php(12): app\Hajeebtok::InitializeApp()
+#10 {main}
+  thrown in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Exceptions\VideoNotFoundException.php on line 11
+[2025-06-18 16:07:54] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-18 16:07:54] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-18 16:07:54] <Hajeebtok.php:58> [DBUG] Hello, John Clapper. 
+
+You should watch this video! It's absolutely hilarious!! And, just so you know, you're on thin ice buddy. If you don't watch that video, we're putting you on the ball stretcher. And just so you know, after you get on the ball stretcher, you don't get off.
+
+ - Hajeebtok Team XOXO
+[2025-06-18 16:07:54] <Hajeebtok.php:63> [DBUG] Man... This Video... It was an experience! Hajeebtok told me to watch it, and I don't regret it at all!
+[2025-06-18 16:07:54] <Logger.php:36> [FTAL] PHP Fatal Error: Uncaught TypeError: app\Exceptions\VideoNotFoundException::__construct(): Argument #1 ($id) must be of type int, null given, called in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Types\DatabaseObjects\Video.php on line 90 and defined in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Exceptions\VideoNotFoundException.php:11
+Stack trace:
+#0 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Types\DatabaseObjects\Video.php(90): app\Exceptions\VideoNotFoundException->__construct()
+#1 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Controllers\VideoController.php(65): app\Types\DatabaseObjects\Video->LoadMany()
+#2 [internal function]: app\Controllers\VideoController::search()
+#3 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\ClassLoader\ClassLoader.php(46): call_user_func_array()
+#4 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Route\Route.php(95): Pecee\SimpleRouter\ClassLoader\ClassLoader->loadClosure()
+#5 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(427): Pecee\SimpleRouter\Route\Route->renderRoute()
+#6 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(353): Pecee\SimpleRouter\Router->routeRequest()
+#7 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\SimpleRouter.php(69): Pecee\SimpleRouter\Router->start()
+#8 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php(66): Pecee\SimpleRouter\SimpleRouter::start()
+#9 C:\Users\Andrew\Desktop\hajeebtok\backend\public\index.php(12): app\Hajeebtok::InitializeApp()
+#10 {main}
+  thrown in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Exceptions\VideoNotFoundException.php on line 11
+[2025-06-18 16:08:03] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-18 16:08:03] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-18 16:08:03] <Hajeebtok.php:58> [DBUG] Hello, John Clapper. 
+
+You should watch this video! It's absolutely hilarious!! And, just so you know, you're on thin ice buddy. If you don't watch that video, we're putting you on the ball stretcher. And just so you know, after you get on the ball stretcher, you don't get off.
+
+ - Hajeebtok Team XOXO
+[2025-06-18 16:08:03] <Hajeebtok.php:63> [DBUG] Man... This Video... It was an experience! Hajeebtok told me to watch it, and I don't regret it at all!
+[2025-06-18 16:08:03] <VideoNotFoundException.php:13> [EROR] Couldn't find video id (0)
+[2025-06-18 16:08:03] <index.php:14> [FTAL] Hajeebtok Init Fail: app\Exceptions\VideoNotFoundException: Couldn't find video id (0) in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Types\DatabaseObjects\Video.php:90
+Stack trace:
+#0 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Controllers\VideoController.php(65): app\Types\DatabaseObjects\Video->LoadMany()
+#1 [internal function]: app\Controllers\VideoController::search()
+#2 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\ClassLoader\ClassLoader.php(46): call_user_func_array()
+#3 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Route\Route.php(95): Pecee\SimpleRouter\ClassLoader\ClassLoader->loadClosure()
+#4 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(427): Pecee\SimpleRouter\Route\Route->renderRoute()
+#5 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(353): Pecee\SimpleRouter\Router->routeRequest()
+#6 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\SimpleRouter.php(69): Pecee\SimpleRouter\Router->start()
+#7 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php(66): Pecee\SimpleRouter\SimpleRouter::start()
+#8 C:\Users\Andrew\Desktop\hajeebtok\backend\public\index.php(12): app\Hajeebtok::InitializeApp()
+#9 {main}
+[2025-06-18 16:08:24] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-18 16:08:24] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-18 16:08:24] <Hajeebtok.php:58> [DBUG] Hello, John Clapper. 
+
+You should watch this video! It's absolutely hilarious!! And, just so you know, you're on thin ice buddy. If you don't watch that video, we're putting you on the ball stretcher. And just so you know, after you get on the ball stretcher, you don't get off.
+
+ - Hajeebtok Team XOXO
+[2025-06-18 16:08:24] <Hajeebtok.php:63> [DBUG] Man... This Video... It was an experience! Hajeebtok told me to watch it, and I don't regret it at all!
+[2025-06-18 16:08:24] <Video.php:89> [DBUG] habibi
+[2025-06-18 16:08:24] <VideoNotFoundException.php:13> [EROR] Couldn't find video id (0)
+[2025-06-18 16:08:24] <index.php:14> [FTAL] Hajeebtok Init Fail: app\Exceptions\VideoNotFoundException: Couldn't find video id (0) in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Types\DatabaseObjects\Video.php:91
+Stack trace:
+#0 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Controllers\VideoController.php(65): app\Types\DatabaseObjects\Video->LoadMany()
+#1 [internal function]: app\Controllers\VideoController::search()
+#2 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\ClassLoader\ClassLoader.php(46): call_user_func_array()
+#3 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Route\Route.php(95): Pecee\SimpleRouter\ClassLoader\ClassLoader->loadClosure()
+#4 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(427): Pecee\SimpleRouter\Route\Route->renderRoute()
+#5 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(353): Pecee\SimpleRouter\Router->routeRequest()
+#6 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\SimpleRouter.php(69): Pecee\SimpleRouter\Router->start()
+#7 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php(66): Pecee\SimpleRouter\SimpleRouter::start()
+#8 C:\Users\Andrew\Desktop\hajeebtok\backend\public\index.php(12): app\Hajeebtok::InitializeApp()
+#9 {main}
+[2025-06-18 16:08:37] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-18 16:08:37] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-18 16:08:37] <Hajeebtok.php:58> [DBUG] Hello, John Clapper. 
+
+You should watch this video! It's absolutely hilarious!! And, just so you know, you're on thin ice buddy. If you don't watch that video, we're putting you on the ball stretcher. And just so you know, after you get on the ball stretcher, you don't get off.
+
+ - Hajeebtok Team XOXO
+[2025-06-18 16:08:37] <Hajeebtok.php:63> [DBUG] Man... This Video... It was an experience! Hajeebtok told me to watch it, and I don't regret it at all!
+[2025-06-18 16:08:37] <Video.php:89> [DBUG] Habibi
+[2025-06-18 16:08:37] <VideoNotFoundException.php:13> [EROR] Couldn't find video id (0)
+[2025-06-18 16:08:37] <index.php:14> [FTAL] Hajeebtok Init Fail: app\Exceptions\VideoNotFoundException: Couldn't find video id (0) in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Types\DatabaseObjects\Video.php:91
+Stack trace:
+#0 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Controllers\VideoController.php(65): app\Types\DatabaseObjects\Video->LoadMany()
+#1 [internal function]: app\Controllers\VideoController::search()
+#2 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\ClassLoader\ClassLoader.php(46): call_user_func_array()
+#3 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Route\Route.php(95): Pecee\SimpleRouter\ClassLoader\ClassLoader->loadClosure()
+#4 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(427): Pecee\SimpleRouter\Route\Route->renderRoute()
+#5 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(353): Pecee\SimpleRouter\Router->routeRequest()
+#6 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\SimpleRouter.php(69): Pecee\SimpleRouter\Router->start()
+#7 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php(66): Pecee\SimpleRouter\SimpleRouter::start()
+#8 C:\Users\Andrew\Desktop\hajeebtok\backend\public\index.php(12): app\Hajeebtok::InitializeApp()
+#9 {main}
+[2025-06-18 16:09:26] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-18 16:09:26] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-18 16:09:26] <Hajeebtok.php:58> [DBUG] Hello, John Clapper. 
+
+You should watch this video! It's absolutely hilarious!! And, just so you know, you're on thin ice buddy. If you don't watch that video, we're putting you on the ball stretcher. And just so you know, after you get on the ball stretcher, you don't get off.
+
+ - Hajeebtok Team XOXO
+[2025-06-18 16:09:26] <Hajeebtok.php:63> [DBUG] Man... This Video... It was an experience! Hajeebtok told me to watch it, and I don't regret it at all!
+[2025-06-18 16:09:26] <Video.php:89> [DBUG] video
+[2025-06-18 16:09:26] <VideoNotFoundException.php:13> [EROR] Couldn't find video id (0)
+[2025-06-18 16:09:26] <index.php:14> [FTAL] Hajeebtok Init Fail: app\Exceptions\VideoNotFoundException: Couldn't find video id (0) in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Types\DatabaseObjects\Video.php:91
+Stack trace:
+#0 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Controllers\VideoController.php(65): app\Types\DatabaseObjects\Video->LoadMany()
+#1 [internal function]: app\Controllers\VideoController::search()
+#2 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\ClassLoader\ClassLoader.php(46): call_user_func_array()
+#3 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Route\Route.php(95): Pecee\SimpleRouter\ClassLoader\ClassLoader->loadClosure()
+#4 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(427): Pecee\SimpleRouter\Route\Route->renderRoute()
+#5 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(353): Pecee\SimpleRouter\Router->routeRequest()
+#6 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\SimpleRouter.php(69): Pecee\SimpleRouter\Router->start()
+#7 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php(66): Pecee\SimpleRouter\SimpleRouter::start()
+#8 C:\Users\Andrew\Desktop\hajeebtok\backend\public\index.php(12): app\Hajeebtok::InitializeApp()
+#9 {main}
+[2025-06-18 16:09:36] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-18 16:09:36] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-18 16:09:36] <Hajeebtok.php:58> [DBUG] Hello, John Clapper. 
+
+You should watch this video! It's absolutely hilarious!! And, just so you know, you're on thin ice buddy. If you don't watch that video, we're putting you on the ball stretcher. And just so you know, after you get on the ball stretcher, you don't get off.
+
+ - Hajeebtok Team XOXO
+[2025-06-18 16:09:36] <Hajeebtok.php:63> [DBUG] Man... This Video... It was an experience! Hajeebtok told me to watch it, and I don't regret it at all!
+[2025-06-18 16:09:36] <Video.php:89> [DBUG] Habibi video
+[2025-06-18 16:10:45] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-18 16:10:45] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-18 16:10:45] <Hajeebtok.php:58> [DBUG] Hello, John Clapper. 
+
+You should watch this video! It's absolutely hilarious!! And, just so you know, you're on thin ice buddy. If you don't watch that video, we're putting you on the ball stretcher. And just so you know, after you get on the ball stretcher, you don't get off.
+
+ - Hajeebtok Team XOXO
+[2025-06-18 16:10:45] <Hajeebtok.php:63> [DBUG] Man... This Video... It was an experience! Hajeebtok told me to watch it, and I don't regret it at all!
+[2025-06-18 16:10:47] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-18 16:10:47] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-18 16:10:47] <Hajeebtok.php:58> [DBUG] Hello, John Clapper. 
+
+You should watch this video! It's absolutely hilarious!! And, just so you know, you're on thin ice buddy. If you don't watch that video, we're putting you on the ball stretcher. And just so you know, after you get on the ball stretcher, you don't get off.
+
+ - Hajeebtok Team XOXO
+[2025-06-18 16:10:47] <Hajeebtok.php:63> [DBUG] Man... This Video... It was an experience! Hajeebtok told me to watch it, and I don't regret it at all!
+[2025-06-18 16:10:51] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-18 16:10:51] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-18 16:10:51] <Hajeebtok.php:58> [DBUG] Hello, John Clapper. 
+
+You should watch this video! It's absolutely hilarious!! And, just so you know, you're on thin ice buddy. If you don't watch that video, we're putting you on the ball stretcher. And just so you know, after you get on the ball stretcher, you don't get off.
+
+ - Hajeebtok Team XOXO
+[2025-06-18 16:10:51] <Hajeebtok.php:63> [DBUG] Man... This Video... It was an experience! Hajeebtok told me to watch it, and I don't regret it at all!
+[2025-06-18 16:10:55] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-18 16:10:55] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-18 16:10:55] <Hajeebtok.php:58> [DBUG] Hello, John Clapper. 
+
+You should watch this video! It's absolutely hilarious!! And, just so you know, you're on thin ice buddy. If you don't watch that video, we're putting you on the ball stretcher. And just so you know, after you get on the ball stretcher, you don't get off.
+
+ - Hajeebtok Team XOXO
+[2025-06-18 16:10:55] <Hajeebtok.php:63> [DBUG] Man... This Video... It was an experience! Hajeebtok told me to watch it, and I don't regret it at all!
+[2025-06-18 16:11:02] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-18 16:11:02] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-18 16:11:02] <Hajeebtok.php:58> [DBUG] Hello, John Clapper. 
+
+You should watch this video! It's absolutely hilarious!! And, just so you know, you're on thin ice buddy. If you don't watch that video, we're putting you on the ball stretcher. And just so you know, after you get on the ball stretcher, you don't get off.
+
+ - Hajeebtok Team XOXO
+[2025-06-18 16:11:02] <Hajeebtok.php:63> [DBUG] Man... This Video... It was an experience! Hajeebtok told me to watch it, and I don't regret it at all!
+[2025-06-18 16:22:45] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-18 16:22:45] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-18 16:22:45] <Hajeebtok.php:58> [DBUG] Hello, John Clapper. 
+
+You should watch this video! It's absolutely hilarious!! And, just so you know, you're on thin ice buddy. If you don't watch that video, we're putting you on the ball stretcher. And just so you know, after you get on the ball stretcher, you don't get off.
+
+ - Hajeebtok Team XOXO
+[2025-06-18 16:22:45] <Hajeebtok.php:63> [DBUG] Man... This Video... It was an experience! Hajeebtok told me to watch it, and I don't regret it at all!
+[2025-06-18 16:22:45] <Logger.php:36> [FTAL] PHP Fatal Error: Uncaught Error: Using $this when not in object context in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Controllers\VideoController.php:70
+Stack trace:
+#0 [internal function]: app\Controllers\VideoController::search()
+#1 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\ClassLoader\ClassLoader.php(46): call_user_func_array()
+#2 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Route\Route.php(95): Pecee\SimpleRouter\ClassLoader\ClassLoader->loadClosure()
+#3 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(427): Pecee\SimpleRouter\Route\Route->renderRoute()
+#4 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(353): Pecee\SimpleRouter\Router->routeRequest()
+#5 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\SimpleRouter.php(69): Pecee\SimpleRouter\Router->start()
+#6 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php(66): Pecee\SimpleRouter\SimpleRouter::start()
+#7 C:\Users\Andrew\Desktop\hajeebtok\backend\public\index.php(12): app\Hajeebtok::InitializeApp()
+#8 {main}
+  thrown in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Controllers\VideoController.php on line 70
+[2025-06-18 16:23:12] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-18 16:23:12] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-18 16:23:12] <Hajeebtok.php:58> [DBUG] Hello, John Clapper. 
+
+You should watch this video! It's absolutely hilarious!! And, just so you know, you're on thin ice buddy. If you don't watch that video, we're putting you on the ball stretcher. And just so you know, after you get on the ball stretcher, you don't get off.
+
+ - Hajeebtok Team XOXO
+[2025-06-18 16:23:12] <Hajeebtok.php:63> [DBUG] Man... This Video... It was an experience! Hajeebtok told me to watch it, and I don't regret it at all!
+[2025-06-18 16:23:53] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-18 16:23:53] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-18 16:23:53] <VideoController.php:75> [DBUG] 1
+[2025-06-18 16:23:53] <Logger.php:36> [FTAL] PHP Fatal Error: Uncaught TypeError: app\Logger::Debug(): Argument #1 ($message) must be of type string, null given, called in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Controllers\VideoController.php on line 76 and defined in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Logger.php:146
+Stack trace:
+#0 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Controllers\VideoController.php(76): app\Logger::Debug()
+#1 [internal function]: app\Controllers\VideoController::search()
+#2 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\ClassLoader\ClassLoader.php(46): call_user_func_array()
+#3 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Route\Route.php(95): Pecee\SimpleRouter\ClassLoader\ClassLoader->loadClosure()
+#4 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(427): Pecee\SimpleRouter\Route\Route->renderRoute()
+#5 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(353): Pecee\SimpleRouter\Router->routeRequest()
+#6 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\SimpleRouter.php(69): Pecee\SimpleRouter\Router->start()
+#7 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php(56): Pecee\SimpleRouter\SimpleRouter::start()
+#8 C:\Users\Andrew\Desktop\hajeebtok\backend\public\index.php(12): app\Hajeebtok::InitializeApp()
+#9 {main}
+  thrown in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Logger.php on line 146
+[2025-06-18 16:24:07] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-18 16:24:07] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-18 16:24:07] <VideoController.php:75> [DBUG] 1
+[2025-06-18 16:24:07] <Logger.php:36> [FTAL] PHP Fatal Error: Uncaught TypeError: app\Logger::Debug(): Argument #1 ($message) must be of type string, null given, called in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Controllers\VideoController.php on line 76 and defined in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Logger.php:146
+Stack trace:
+#0 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Controllers\VideoController.php(76): app\Logger::Debug()
+#1 [internal function]: app\Controllers\VideoController::search()
+#2 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\ClassLoader\ClassLoader.php(46): call_user_func_array()
+#3 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Route\Route.php(95): Pecee\SimpleRouter\ClassLoader\ClassLoader->loadClosure()
+#4 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(427): Pecee\SimpleRouter\Route\Route->renderRoute()
+#5 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(353): Pecee\SimpleRouter\Router->routeRequest()
+#6 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\SimpleRouter.php(69): Pecee\SimpleRouter\Router->start()
+#7 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php(56): Pecee\SimpleRouter\SimpleRouter::start()
+#8 C:\Users\Andrew\Desktop\hajeebtok\backend\public\index.php(12): app\Hajeebtok::InitializeApp()
+#9 {main}
+  thrown in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Logger.php on line 146
+[2025-06-18 16:24:12] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-18 16:24:12] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-18 16:24:12] <VideoController.php:75> [DBUG] 1
+[2025-06-18 16:24:12] <VideoController.php:76> [DBUG] 
+[2025-06-18 16:24:42] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-18 16:24:42] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-18 16:24:42] <VideoController.php:75> [DBUG] 1
+[2025-06-18 16:25:51] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-18 16:25:51] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-18 16:25:51] <VideoController.php:75> [DBUG] 1
+[2025-06-18 16:25:51] <Logger.php:36> [FTAL] PHP Fatal Error: Uncaught TypeError: app\Logger::Debug(): Argument #1 ($message) must be of type string, null given, called in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Controllers\VideoController.php on line 76 and defined in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Logger.php:146
+Stack trace:
+#0 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Controllers\VideoController.php(76): app\Logger::Debug()
+#1 [internal function]: app\Controllers\VideoController::search()
+#2 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\ClassLoader\ClassLoader.php(46): call_user_func_array()
+#3 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Route\Route.php(95): Pecee\SimpleRouter\ClassLoader\ClassLoader->loadClosure()
+#4 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(427): Pecee\SimpleRouter\Route\Route->renderRoute()
+#5 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(353): Pecee\SimpleRouter\Router->routeRequest()
+#6 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\SimpleRouter.php(69): Pecee\SimpleRouter\Router->start()
+#7 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php(56): Pecee\SimpleRouter\SimpleRouter::start()
+#8 C:\Users\Andrew\Desktop\hajeebtok\backend\public\index.php(12): app\Hajeebtok::InitializeApp()
+#9 {main}
+  thrown in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Logger.php on line 146
+[2025-06-18 16:25:55] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-18 16:25:55] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-18 16:25:55] <VideoController.php:75> [DBUG] 1
+[2025-06-18 16:25:55] <VideoController.php:76> [DBUG] hajeebtok
+[2025-06-18 16:26:02] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-18 16:26:02] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-18 16:26:02] <VideoController.php:75> [DBUG] 1
+[2025-06-18 16:26:02] <VideoController.php:76> [DBUG] hajeebtok
+[2025-06-18 16:27:09] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-18 16:27:09] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-18 16:27:09] <index.php:14> [FTAL] Hajeebtok Init Fail: Pecee\SimpleRouter\Exceptions\NotFoundHttpException: Route not found: "/accounts/search/" in C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php:467
+Stack trace:
+#0 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(353): Pecee\SimpleRouter\Router->routeRequest()
+#1 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\SimpleRouter.php(69): Pecee\SimpleRouter\Router->start()
+#2 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php(56): Pecee\SimpleRouter\SimpleRouter::start()
+#3 C:\Users\Andrew\Desktop\hajeebtok\backend\public\index.php(12): app\Hajeebtok::InitializeApp()
+#4 {main}
+[2025-06-18 16:27:21] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-18 16:27:21] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-18 16:27:21] <Logger.php:36> [FTAL] PHP Fatal Error: Uncaught TypeError: app\Exceptions\AccountNotFoundException::__construct(): Argument #1 ($id) must be of type int, string given, called in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Types\DatabaseObjects\Account.php on line 91 and defined in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Exceptions\AccountNotFoundException.php:11
+Stack trace:
+#0 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Types\DatabaseObjects\Account.php(91): app\Exceptions\AccountNotFoundException->__construct()
+#1 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Controllers\AccountController.php(48): app\Types\DatabaseObjects\Account->LoadMany()
+#2 [internal function]: app\Controllers\AccountController::search()
+#3 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\ClassLoader\ClassLoader.php(46): call_user_func_array()
+#4 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Route\Route.php(95): Pecee\SimpleRouter\ClassLoader\ClassLoader->loadClosure()
+#5 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(427): Pecee\SimpleRouter\Route\Route->renderRoute()
+#6 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(353): Pecee\SimpleRouter\Router->routeRequest()
+#7 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\SimpleRouter.php(69): Pecee\SimpleRouter\Router->start()
+#8 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php(56): Pecee\SimpleRouter\SimpleRouter::start()
+#9 C:\Users\Andrew\Desktop\hajeebtok\backend\public\index.php(12): app\Hajeebtok::InitializeApp()
+#10 {main}
+  thrown in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Exceptions\AccountNotFoundException.php on line 11
+[2025-06-18 16:27:44] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-18 16:27:44] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-18 16:27:44] <AccountNotFoundException.php:13> [EROR] Couldn't find account id (0)
+[2025-06-18 16:27:44] <index.php:14> [FTAL] Hajeebtok Init Fail: app\Exceptions\AccountNotFoundException: Couldn't find account id (0) in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Types\DatabaseObjects\Account.php:91
+Stack trace:
+#0 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Controllers\AccountController.php(48): app\Types\DatabaseObjects\Account->LoadMany()
+#1 [internal function]: app\Controllers\AccountController::search()
+#2 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\ClassLoader\ClassLoader.php(46): call_user_func_array()
+#3 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Route\Route.php(95): Pecee\SimpleRouter\ClassLoader\ClassLoader->loadClosure()
+#4 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(427): Pecee\SimpleRouter\Route\Route->renderRoute()
+#5 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(353): Pecee\SimpleRouter\Router->routeRequest()
+#6 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\SimpleRouter.php(69): Pecee\SimpleRouter\Router->start()
+#7 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php(56): Pecee\SimpleRouter\SimpleRouter::start()
+#8 C:\Users\Andrew\Desktop\hajeebtok\backend\public\index.php(12): app\Hajeebtok::InitializeApp()
+#9 {main}
+[2025-06-18 16:27:57] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-18 16:27:57] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-18 16:29:54] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-18 16:29:54] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-18 16:29:58] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-18 16:29:58] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-18 16:31:08] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-18 16:31:08] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-18 16:32:35] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-18 16:32:35] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-18 16:32:35] <index.php:14> [FTAL] Hajeebtok Init Fail: Pecee\SimpleRouter\Exceptions\NotFoundHttpException: Route "/account/token/" or method "options" not allowed. in C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php:452
+Stack trace:
+#0 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(353): Pecee\SimpleRouter\Router->routeRequest()
+#1 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\SimpleRouter.php(69): Pecee\SimpleRouter\Router->start()
+#2 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php(56): Pecee\SimpleRouter\SimpleRouter::start()
+#3 C:\Users\Andrew\Desktop\hajeebtok\backend\public\index.php(12): app\Hajeebtok::InitializeApp()
+#4 {main}
+[2025-06-18 16:55:40] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-18 16:55:40] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-18 16:55:40] <index.php:14> [FTAL] Hajeebtok Init Fail: Pecee\SimpleRouter\Exceptions\NotFoundHttpException: Route not found: "/video/1/" in C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php:467
+Stack trace:
+#0 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(353): Pecee\SimpleRouter\Router->routeRequest()
+#1 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\SimpleRouter.php(69): Pecee\SimpleRouter\Router->start()
+#2 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php(56): Pecee\SimpleRouter\SimpleRouter::start()
+#3 C:\Users\Andrew\Desktop\hajeebtok\backend\public\index.php(12): app\Hajeebtok::InitializeApp()
+#4 {main}
+[2025-06-18 16:55:54] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-18 16:55:54] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-18 16:56:00] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-18 16:56:00] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-18 16:57:51] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-18 16:57:51] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-18 17:34:20] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-18 17:34:20] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-18 17:34:20] <index.php:14> [FTAL] Hajeebtok Init Fail: Pecee\Http\Middleware\Exceptions\TokenMismatchException: Invalid CSRF-token. in C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\Http\Middleware\BaseCsrfVerifier.php:109
+Stack trace:
+#0 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(347): Pecee\Http\Middleware\BaseCsrfVerifier->handle()
+#1 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\SimpleRouter.php(69): Pecee\SimpleRouter\Router->start()
+#2 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php(56): Pecee\SimpleRouter\SimpleRouter::start()
+#3 C:\Users\Andrew\Desktop\hajeebtok\backend\public\index.php(12): app\Hajeebtok::InitializeApp()
+#4 {main}
+[2025-06-18 17:36:20] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-18 17:36:20] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-18 17:36:20] <index.php:14> [FTAL] Hajeebtok Init Fail: Pecee\SimpleRouter\Exceptions\NotFoundHttpException: Route "/account/token/" or method "post" not allowed. in C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php:452
+Stack trace:
+#0 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(353): Pecee\SimpleRouter\Router->routeRequest()
+#1 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\SimpleRouter.php(69): Pecee\SimpleRouter\Router->start()
+#2 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php(56): Pecee\SimpleRouter\SimpleRouter::start()
+#3 C:\Users\Andrew\Desktop\hajeebtok\backend\public\index.php(12): app\Hajeebtok::InitializeApp()
+#4 {main}
+[2025-06-18 17:36:41] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-18 17:36:41] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-18 17:36:42] <AccountNotFoundException.php:13> [EROR] Couldn't find account id (0)
+[2025-06-18 17:36:42] <index.php:14> [FTAL] Hajeebtok Init Fail: app\Exceptions\AccountNotFoundException: Couldn't find account id (0) in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Types\DatabaseObjects\Account.php:76
+Stack trace:
+#0 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Controllers\AccountController.php(20): app\Types\DatabaseObjects\Account->Load()
+#1 [internal function]: app\Controllers\AccountController::getToken()
+#2 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\ClassLoader\ClassLoader.php(46): call_user_func_array()
+#3 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Route\Route.php(95): Pecee\SimpleRouter\ClassLoader\ClassLoader->loadClosure()
+#4 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(427): Pecee\SimpleRouter\Route\Route->renderRoute()
+#5 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(353): Pecee\SimpleRouter\Router->routeRequest()
+#6 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\SimpleRouter.php(69): Pecee\SimpleRouter\Router->start()
+#7 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php(56): Pecee\SimpleRouter\SimpleRouter::start()
+#8 C:\Users\Andrew\Desktop\hajeebtok\backend\public\index.php(12): app\Hajeebtok::InitializeApp()
+#9 {main}
+[2025-06-18 17:41:01] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-18 17:41:01] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-18 17:41:02] <Account.php:84> [DBUG] Array
+[2025-06-18 17:42:26] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-18 17:42:26] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-18 17:42:27] <Account.php:84> [DBUG] Array
+[2025-06-18 17:43:23] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-18 17:43:23] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-18 17:43:23] <Account.php:84> [DBUG] Array
+[2025-06-18 17:43:43] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-18 17:43:43] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-18 17:43:44] <MariaDBDatabase.php:92> [EROR] Query execution failed: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'picture_url' cannot be null - Query: INSERT INTO accounts (username, password, picture_url, verified, bio) VALUES (:username, :password, :picture_url, :verified, :bio)
+[2025-06-18 17:43:44] <index.php:14> [FTAL] Hajeebtok Init Fail: PDOException: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'picture_url' cannot be null in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Types\MariaDBDatabase.php:89
+Stack trace:
+#0 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Types\MariaDBDatabase.php(89): PDOStatement->execute()
+#1 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Types\MariaDBDatabase.php(99): app\Types\MariaDBDatabase->executeStatement()
+#2 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Types\DatabaseObjects\Account.php(52): app\Types\MariaDBDatabase->Query()
+#3 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Controllers\AccountController.php(26): app\Types\DatabaseObjects\Account->Save()
+#4 [internal function]: app\Controllers\AccountController::getToken()
+#5 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\ClassLoader\ClassLoader.php(46): call_user_func_array()
+#6 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Route\Route.php(95): Pecee\SimpleRouter\ClassLoader\ClassLoader->loadClosure()
+#7 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(427): Pecee\SimpleRouter\Route\Route->renderRoute()
+#8 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(353): Pecee\SimpleRouter\Router->routeRequest()
+#9 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\SimpleRouter.php(69): Pecee\SimpleRouter\Router->start()
+#10 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php(56): Pecee\SimpleRouter\SimpleRouter::start()
+#11 C:\Users\Andrew\Desktop\hajeebtok\backend\public\index.php(12): app\Hajeebtok::InitializeApp()
+#12 {main}
+[2025-06-18 18:58:14] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-18 18:58:14] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-18 18:58:14] <index.php:14> [FTAL] Hajeebtok Init Fail: Pecee\SimpleRouter\Exceptions\NotFoundHttpException: Route not found: "/account/1/picture/" in C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php:467
+Stack trace:
+#0 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(353): Pecee\SimpleRouter\Router->routeRequest()
+#1 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\SimpleRouter.php(69): Pecee\SimpleRouter\Router->start()
+#2 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php(56): Pecee\SimpleRouter\SimpleRouter::start()
+#3 C:\Users\Andrew\Desktop\hajeebtok\backend\public\index.php(12): app\Hajeebtok::InitializeApp()
+#4 {main}
+[2025-06-18 18:58:14] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-18 18:58:14] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-18 18:58:14] <index.php:14> [FTAL] Hajeebtok Init Fail: Pecee\SimpleRouter\Exceptions\NotFoundHttpException: Route not found: "/favicon.ico/" in C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php:467
+Stack trace:
+#0 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(353): Pecee\SimpleRouter\Router->routeRequest()
+#1 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\SimpleRouter.php(69): Pecee\SimpleRouter\Router->start()
+#2 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php(56): Pecee\SimpleRouter\SimpleRouter::start()
+#3 C:\Users\Andrew\Desktop\hajeebtok\backend\public\index.php(12): app\Hajeebtok::InitializeApp()
+#4 {main}
+[2025-06-18 18:58:20] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-18 18:58:20] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-18 18:58:20] <index.php:14> [FTAL] Hajeebtok Init Fail: Pecee\SimpleRouter\Exceptions\NotFoundHttpException: Route not found: "/account/1/picture/" in C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php:467
+Stack trace:
+#0 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(353): Pecee\SimpleRouter\Router->routeRequest()
+#1 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\SimpleRouter.php(69): Pecee\SimpleRouter\Router->start()
+#2 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php(56): Pecee\SimpleRouter\SimpleRouter::start()
+#3 C:\Users\Andrew\Desktop\hajeebtok\backend\public\index.php(12): app\Hajeebtok::InitializeApp()
+#4 {main}
+[2025-06-18 18:58:46] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-18 18:58:46] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-18 18:58:46] <index.php:14> [FTAL] Hajeebtok Init Fail: Pecee\SimpleRouter\Exceptions\NotFoundHttpException: Route not found: "/account/1/picture/" in C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php:467
+Stack trace:
+#0 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(353): Pecee\SimpleRouter\Router->routeRequest()
+#1 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\SimpleRouter.php(69): Pecee\SimpleRouter\Router->start()
+#2 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php(56): Pecee\SimpleRouter\SimpleRouter::start()
+#3 C:\Users\Andrew\Desktop\hajeebtok\backend\public\index.php(12): app\Hajeebtok::InitializeApp()
+#4 {main}
+[2025-06-18 18:58:58] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-18 18:58:58] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-18 18:58:58] <Account.php:84> [DBUG] Array
+[2025-06-18 18:59:19] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-18 18:59:19] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-18 18:59:19] <index.php:14> [FTAL] Hajeebtok Init Fail: Pecee\SimpleRouter\Exceptions\NotFoundHttpException: Route not found: "/account/1/picture/" in C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php:467
+Stack trace:
+#0 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(353): Pecee\SimpleRouter\Router->routeRequest()
+#1 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\SimpleRouter.php(69): Pecee\SimpleRouter\Router->start()
+#2 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php(56): Pecee\SimpleRouter\SimpleRouter::start()
+#3 C:\Users\Andrew\Desktop\hajeebtok\backend\public\index.php(12): app\Hajeebtok::InitializeApp()
+#4 {main}
+[2025-06-18 18:59:41] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-18 18:59:41] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-18 18:59:41] <index.php:14> [FTAL] Hajeebtok Init Fail: Pecee\SimpleRouter\Exceptions\NotFoundHttpException: Route not found: "/account/1/picture/" in C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php:467
+Stack trace:
+#0 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(353): Pecee\SimpleRouter\Router->routeRequest()
+#1 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\SimpleRouter.php(69): Pecee\SimpleRouter\Router->start()
+#2 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php(56): Pecee\SimpleRouter\SimpleRouter::start()
+#3 C:\Users\Andrew\Desktop\hajeebtok\backend\public\index.php(12): app\Hajeebtok::InitializeApp()
+#4 {main}
+[2025-06-18 18:59:46] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-18 18:59:46] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-18 18:59:47] <Account.php:84> [DBUG] Array
+[2025-06-18 18:59:52] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-18 18:59:52] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-18 18:59:52] <Account.php:84> [DBUG] Array
+[2025-06-18 19:00:12] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-18 19:00:12] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-18 19:00:13] <Account.php:60> [DBUG] Saved account id (3).
+[2025-06-18 19:00:13] <MariaDBDatabase.php:92> [EROR] Query execution failed: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'account_id' cannot be null - Query: INSERT INTO sessions (account_id) VALUES (:account_id);
+[2025-06-18 19:00:13] <index.php:14> [FTAL] Hajeebtok Init Fail: PDOException: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'account_id' cannot be null in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Types\MariaDBDatabase.php:89
+Stack trace:
+#0 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Types\MariaDBDatabase.php(89): PDOStatement->execute()
+#1 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Types\MariaDBDatabase.php(99): app\Types\MariaDBDatabase->executeStatement()
+#2 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Types\DatabaseObjects\Session.php(44): app\Types\MariaDBDatabase->Query()
+#3 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Controllers\AccountController.php(36): app\Types\DatabaseObjects\Session->Save()
+#4 [internal function]: app\Controllers\AccountController::getToken()
+#5 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\ClassLoader\ClassLoader.php(46): call_user_func_array()
+#6 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Route\Route.php(95): Pecee\SimpleRouter\ClassLoader\ClassLoader->loadClosure()
+#7 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(427): Pecee\SimpleRouter\Route\Route->renderRoute()
+#8 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(353): Pecee\SimpleRouter\Router->routeRequest()
+#9 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\SimpleRouter.php(69): Pecee\SimpleRouter\Router->start()
+#10 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php(56): Pecee\SimpleRouter\SimpleRouter::start()
+#11 C:\Users\Andrew\Desktop\hajeebtok\backend\public\index.php(12): app\Hajeebtok::InitializeApp()
+#12 {main}
+[2025-06-18 19:01:51] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-18 19:01:51] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-18 19:01:51] <Account.php:60> [DBUG] Saved account id (4).
+[2025-06-18 19:01:51] <Account.php:85> [DBUG] Array
+[2025-06-18 19:01:51] <MariaDBDatabase.php:92> [EROR] Query execution failed: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'account_id' cannot be null - Query: INSERT INTO sessions (account_id) VALUES (:account_id);
+[2025-06-18 19:01:51] <index.php:14> [FTAL] Hajeebtok Init Fail: PDOException: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'account_id' cannot be null in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Types\MariaDBDatabase.php:89
+Stack trace:
+#0 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Types\MariaDBDatabase.php(89): PDOStatement->execute()
+#1 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Types\MariaDBDatabase.php(99): app\Types\MariaDBDatabase->executeStatement()
+#2 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Types\DatabaseObjects\Session.php(44): app\Types\MariaDBDatabase->Query()
+#3 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Controllers\AccountController.php(37): app\Types\DatabaseObjects\Session->Save()
+#4 [internal function]: app\Controllers\AccountController::getToken()
+#5 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\ClassLoader\ClassLoader.php(46): call_user_func_array()
+#6 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Route\Route.php(95): Pecee\SimpleRouter\ClassLoader\ClassLoader->loadClosure()
+#7 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(427): Pecee\SimpleRouter\Route\Route->renderRoute()
+#8 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(353): Pecee\SimpleRouter\Router->routeRequest()
+#9 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\SimpleRouter.php(69): Pecee\SimpleRouter\Router->start()
+#10 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php(56): Pecee\SimpleRouter\SimpleRouter::start()
+#11 C:\Users\Andrew\Desktop\hajeebtok\backend\public\index.php(12): app\Hajeebtok::InitializeApp()
+#12 {main}
+[2025-06-18 19:02:46] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-18 19:02:46] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-18 19:02:47] <Account.php:60> [DBUG] Saved account id (5).
+[2025-06-18 19:02:47] <MariaDBDatabase.php:92> [EROR] Query execution failed: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'account_id' cannot be null - Query: INSERT INTO sessions (account_id) VALUES (:account_id);
+[2025-06-18 19:02:47] <index.php:14> [FTAL] Hajeebtok Init Fail: PDOException: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'account_id' cannot be null in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Types\MariaDBDatabase.php:89
+Stack trace:
+#0 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Types\MariaDBDatabase.php(89): PDOStatement->execute()
+#1 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Types\MariaDBDatabase.php(99): app\Types\MariaDBDatabase->executeStatement()
+#2 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Types\DatabaseObjects\Session.php(44): app\Types\MariaDBDatabase->Query()
+#3 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Controllers\AccountController.php(36): app\Types\DatabaseObjects\Session->Save()
+#4 [internal function]: app\Controllers\AccountController::getToken()
+#5 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\ClassLoader\ClassLoader.php(46): call_user_func_array()
+#6 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Route\Route.php(95): Pecee\SimpleRouter\ClassLoader\ClassLoader->loadClosure()
+#7 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(427): Pecee\SimpleRouter\Route\Route->renderRoute()
+#8 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(353): Pecee\SimpleRouter\Router->routeRequest()
+#9 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\SimpleRouter.php(69): Pecee\SimpleRouter\Router->start()
+#10 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php(56): Pecee\SimpleRouter\SimpleRouter::start()
+#11 C:\Users\Andrew\Desktop\hajeebtok\backend\public\index.php(12): app\Hajeebtok::InitializeApp()
+#12 {main}
+[2025-06-18 19:03:39] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-18 19:03:39] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-18 19:03:39] <Account.php:60> [DBUG] Saved account id (6).
+[2025-06-18 19:03:39] <Session.php:46> [DBUG] Saved session token (0) for account id (6).
+[2025-06-21 18:53:37] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-21 18:53:37] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-21 18:53:37] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-21 18:53:37] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-21 18:53:37] <index.php:14> [FTAL] Hajeebtok Init Fail: Pecee\SimpleRouter\Exceptions\NotFoundHttpException: Route not found: "/favicon.ico/" in C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php:467
+Stack trace:
+#0 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(353): Pecee\SimpleRouter\Router->routeRequest()
+#1 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\SimpleRouter.php(69): Pecee\SimpleRouter\Router->start()
+#2 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php(56): Pecee\SimpleRouter\SimpleRouter::start()
+#3 C:\Users\Andrew\Desktop\hajeebtok\backend\public\index.php(12): app\Hajeebtok::InitializeApp()
+#4 {main}
+[2025-06-21 18:54:13] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-21 18:54:13] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-21 18:54:14] <Account.php:85> [DBUG] Array
+[2025-06-21 18:54:14] <Logger.php:36> [FTAL] PHP Fatal Error: Uncaught TypeError: app\Exceptions\UnauthenticatedException::__construct(): Argument #1 ($id) must be of type int, null given, called in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Controllers\AccountController.php on line 31 and defined in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Exceptions\UnauthenticatedException.php:11
+Stack trace:
+#0 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Controllers\AccountController.php(31): app\Exceptions\UnauthenticatedException->__construct()
+#1 [internal function]: app\Controllers\AccountController::getToken()
+#2 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\ClassLoader\ClassLoader.php(46): call_user_func_array()
+#3 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Route\Route.php(95): Pecee\SimpleRouter\ClassLoader\ClassLoader->loadClosure()
+#4 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(427): Pecee\SimpleRouter\Route\Route->renderRoute()
+#5 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(353): Pecee\SimpleRouter\Router->routeRequest()
+#6 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\SimpleRouter.php(69): Pecee\SimpleRouter\Router->start()
+#7 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php(56): Pecee\SimpleRouter\SimpleRouter::start()
+#8 C:\Users\Andrew\Desktop\hajeebtok\backend\public\index.php(12): app\Hajeebtok::InitializeApp()
+#9 {main}
+  thrown in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Exceptions\UnauthenticatedException.php on line 11
+[2025-06-21 18:54:39] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-21 18:54:39] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-21 18:54:39] <Account.php:85> [DBUG] Array
+[2025-06-21 18:54:39] <Logger.php:36> [FTAL] PHP Fatal Error: Uncaught TypeError: app\Exceptions\UnauthenticatedException::__construct(): Argument #1 ($id) must be of type int, null given, called in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Controllers\AccountController.php on line 31 and defined in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Exceptions\UnauthenticatedException.php:11
+Stack trace:
+#0 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Controllers\AccountController.php(31): app\Exceptions\UnauthenticatedException->__construct()
+#1 [internal function]: app\Controllers\AccountController::getToken()
+#2 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\ClassLoader\ClassLoader.php(46): call_user_func_array()
+#3 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Route\Route.php(95): Pecee\SimpleRouter\ClassLoader\ClassLoader->loadClosure()
+#4 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(427): Pecee\SimpleRouter\Route\Route->renderRoute()
+#5 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(353): Pecee\SimpleRouter\Router->routeRequest()
+#6 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\SimpleRouter.php(69): Pecee\SimpleRouter\Router->start()
+#7 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php(56): Pecee\SimpleRouter\SimpleRouter::start()
+#8 C:\Users\Andrew\Desktop\hajeebtok\backend\public\index.php(12): app\Hajeebtok::InitializeApp()
+#9 {main}
+  thrown in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Exceptions\UnauthenticatedException.php on line 11
+[2025-06-21 18:55:34] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-21 18:55:34] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-21 18:55:35] <Account.php:85> [DBUG] Array
+[2025-06-21 18:55:35] <UnauthenticatedException.php:13> [EROR] Unauthenticated exception. (6)
+[2025-06-21 18:55:35] <index.php:14> [FTAL] Hajeebtok Init Fail: app\Exceptions\UnauthenticatedException: Unauthenticated exception. (6) in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Controllers\AccountController.php:31
+Stack trace:
+#0 [internal function]: app\Controllers\AccountController::getToken()
+#1 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\ClassLoader\ClassLoader.php(46): call_user_func_array()
+#2 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Route\Route.php(95): Pecee\SimpleRouter\ClassLoader\ClassLoader->loadClosure()
+#3 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(427): Pecee\SimpleRouter\Route\Route->renderRoute()
+#4 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(353): Pecee\SimpleRouter\Router->routeRequest()
+#5 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\SimpleRouter.php(69): Pecee\SimpleRouter\Router->start()
+#6 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php(56): Pecee\SimpleRouter\SimpleRouter::start()
+#7 C:\Users\Andrew\Desktop\hajeebtok\backend\public\index.php(12): app\Hajeebtok::InitializeApp()
+#8 {main}
+[2025-06-21 18:56:36] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-21 18:56:36] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-21 18:56:36] <Account.php:85> [DBUG] Array
+[2025-06-21 18:56:36] <Logger.php:36> [FTAL] PHP Fatal Error: Uncaught ArgumentCountError: app\Types\DatabaseObjects\Session::__construct(): Argument #1 ($token) not passed in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Types\DatabaseObjects\Session.php:21
+Stack trace:
+#0 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Controllers\AccountController.php(32): app\Types\DatabaseObjects\Session->__construct()
+#1 [internal function]: app\Controllers\AccountController::getToken()
+#2 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\ClassLoader\ClassLoader.php(46): call_user_func_array()
+#3 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Route\Route.php(95): Pecee\SimpleRouter\ClassLoader\ClassLoader->loadClosure()
+#4 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(427): Pecee\SimpleRouter\Route\Route->renderRoute()
+#5 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(353): Pecee\SimpleRouter\Router->routeRequest()
+#6 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\SimpleRouter.php(69): Pecee\SimpleRouter\Router->start()
+#7 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php(56): Pecee\SimpleRouter\SimpleRouter::start()
+#8 C:\Users\Andrew\Desktop\hajeebtok\backend\public\index.php(12): app\Hajeebtok::InitializeApp()
+#9 {main}
+  thrown in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Types\DatabaseObjects\Session.php on line 21
+[2025-06-21 18:56:53] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-21 18:56:53] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-21 18:56:54] <Account.php:85> [DBUG] Array
+[2025-06-21 18:56:54] <Session.php:58> [DBUG] Saved session token (Array) for account id (6).
+[2025-06-22 20:27:05] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-22 20:27:05] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-22 20:27:05] <Account.php:85> [DBUG] Array
+[2025-06-22 20:27:09] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-22 20:27:09] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-22 20:27:09] <Account.php:85> [DBUG] Array
+[2025-06-22 20:27:12] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-22 20:27:12] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-22 20:27:12] <Logger.php:36> [FTAL] PHP Fatal Error: Uncaught TypeError: app\Types\DatabaseObjects\Account::__construct(): Argument #1 ($id) must be of type ?int, string given, called in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Controllers\AccountController.php on line 44 and defined in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Types\DatabaseObjects\Account.php:21
+Stack trace:
+#0 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Controllers\AccountController.php(44): app\Types\DatabaseObjects\Account->__construct()
+#1 [internal function]: app\Controllers\AccountController::getAccount()
+#2 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\ClassLoader\ClassLoader.php(46): call_user_func_array()
+#3 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Route\Route.php(95): Pecee\SimpleRouter\ClassLoader\ClassLoader->loadClosure()
+#4 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(427): Pecee\SimpleRouter\Route\Route->renderRoute()
+#5 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(353): Pecee\SimpleRouter\Router->routeRequest()
+#6 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\SimpleRouter.php(69): Pecee\SimpleRouter\Router->start()
+#7 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php(56): Pecee\SimpleRouter\SimpleRouter::start()
+#8 C:\Users\Andrew\Desktop\hajeebtok\backend\public\index.php(12): app\Hajeebtok::InitializeApp()
+#9 {main}
+  thrown in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Types\DatabaseObjects\Account.php on line 21
+[2025-06-22 20:27:16] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-22 20:27:16] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-22 20:27:16] <AccountNotFoundException.php:13> [EROR] Couldn't find account id (3)
+[2025-06-22 20:27:16] <index.php:14> [FTAL] Hajeebtok Init Fail: app\Exceptions\AccountNotFoundException: Couldn't find account id (3) in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Types\DatabaseObjects\Account.php:84
+Stack trace:
+#0 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Controllers\AccountController.php(77): app\Types\DatabaseObjects\Account->Load()
+#1 [internal function]: app\Controllers\AccountController::getPicture()
+#2 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\ClassLoader\ClassLoader.php(46): call_user_func_array()
+#3 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Route\Route.php(95): Pecee\SimpleRouter\ClassLoader\ClassLoader->loadClosure()
+#4 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(427): Pecee\SimpleRouter\Route\Route->renderRoute()
+#5 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(353): Pecee\SimpleRouter\Router->routeRequest()
+#6 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\SimpleRouter.php(69): Pecee\SimpleRouter\Router->start()
+#7 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php(56): Pecee\SimpleRouter\SimpleRouter::start()
+#8 C:\Users\Andrew\Desktop\hajeebtok\backend\public\index.php(12): app\Hajeebtok::InitializeApp()
+#9 {main}
+[2025-06-22 20:27:23] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-22 20:27:23] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-22 20:27:23] <Account.php:85> [DBUG] Array
+[2025-06-22 20:27:34] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-22 20:27:34] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-22 20:27:34] <Account.php:85> [DBUG] Array
+[2025-06-22 20:27:35] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-22 20:27:35] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-22 20:27:35] <Account.php:85> [DBUG] Array
+[2025-06-22 20:27:39] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-22 20:27:39] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-22 20:27:39] <Account.php:85> [DBUG] Array
+[2025-06-22 20:27:40] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-22 20:27:40] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-22 20:27:40] <Account.php:85> [DBUG] Array
+[2025-06-22 20:27:40] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-22 20:27:40] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-22 20:27:40] <Account.php:85> [DBUG] Array
+[2025-06-22 20:27:40] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-22 20:27:40] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-22 20:27:40] <Account.php:85> [DBUG] Array
+[2025-06-22 20:27:41] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-22 20:27:41] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-22 20:27:41] <Account.php:85> [DBUG] Array
+[2025-06-22 20:27:41] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-22 20:27:41] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-22 20:27:41] <Account.php:85> [DBUG] Array
+[2025-06-22 20:27:41] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-22 20:27:41] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-22 20:27:41] <Account.php:85> [DBUG] Array
+[2025-06-22 20:28:17] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-22 20:28:17] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-22 20:28:20] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-22 20:28:20] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-22 20:29:03] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-22 20:29:03] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-22 20:29:17] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-22 20:29:17] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-22 20:32:21] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-22 20:32:21] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-22 20:32:25] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-22 20:32:25] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-22 20:32:28] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-22 20:32:28] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-22 20:32:33] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-22 20:32:33] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-22 20:32:49] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-22 20:32:49] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-22 20:32:53] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-22 20:32:53] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-22 20:32:56] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-22 20:32:56] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-22 20:32:59] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-22 20:32:59] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-22 20:33:09] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-22 20:33:09] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-22 20:33:24] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-22 20:33:24] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-22 20:33:27] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-22 20:33:27] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-22 20:33:30] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-22 20:33:30] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-22 20:33:33] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-22 20:33:33] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-22 20:33:36] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-22 20:33:36] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-22 20:33:39] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-22 20:33:39] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-22 20:44:14] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-22 20:44:14] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-22 20:44:14] <Logger.php:36> [FTAL] PHP Fatal Error: Uncaught TypeError: app\Types\DatabaseObjects\Account::__construct(): Argument #1 ($id) must be of type ?int, string given, called in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Controllers\AccountController.php on line 44 and defined in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Types\DatabaseObjects\Account.php:21
+Stack trace:
+#0 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Controllers\AccountController.php(44): app\Types\DatabaseObjects\Account->__construct()
+#1 [internal function]: app\Controllers\AccountController::getAccount()
+#2 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\ClassLoader\ClassLoader.php(46): call_user_func_array()
+#3 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Route\Route.php(95): Pecee\SimpleRouter\ClassLoader\ClassLoader->loadClosure()
+#4 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(427): Pecee\SimpleRouter\Route\Route->renderRoute()
+#5 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(353): Pecee\SimpleRouter\Router->routeRequest()
+#6 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\SimpleRouter.php(69): Pecee\SimpleRouter\Router->start()
+#7 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php(56): Pecee\SimpleRouter\SimpleRouter::start()
+#8 C:\Users\Andrew\Desktop\hajeebtok\backend\public\index.php(12): app\Hajeebtok::InitializeApp()
+#9 {main}
+  thrown in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Types\DatabaseObjects\Account.php on line 21
+[2025-06-22 20:44:19] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-22 20:44:19] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-22 20:44:19] <Logger.php:36> [FTAL] PHP Fatal Error: Uncaught TypeError: app\Types\DatabaseObjects\Account::__construct(): Argument #1 ($id) must be of type ?int, string given, called in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Controllers\AccountController.php on line 44 and defined in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Types\DatabaseObjects\Account.php:21
+Stack trace:
+#0 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Controllers\AccountController.php(44): app\Types\DatabaseObjects\Account->__construct()
+#1 [internal function]: app\Controllers\AccountController::getAccount()
+#2 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\ClassLoader\ClassLoader.php(46): call_user_func_array()
+#3 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Route\Route.php(95): Pecee\SimpleRouter\ClassLoader\ClassLoader->loadClosure()
+#4 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(427): Pecee\SimpleRouter\Route\Route->renderRoute()
+#5 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(353): Pecee\SimpleRouter\Router->routeRequest()
+#6 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\SimpleRouter.php(69): Pecee\SimpleRouter\Router->start()
+#7 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php(56): Pecee\SimpleRouter\SimpleRouter::start()
+#8 C:\Users\Andrew\Desktop\hajeebtok\backend\public\index.php(12): app\Hajeebtok::InitializeApp()
+#9 {main}
+  thrown in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Types\DatabaseObjects\Account.php on line 21
+[2025-06-22 20:44:26] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-22 20:44:26] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-22 20:44:26] <Logger.php:36> [FTAL] PHP Fatal Error: Uncaught TypeError: app\Types\DatabaseObjects\Account::__construct(): Argument #1 ($id) must be of type ?int, string given, called in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Controllers\AccountController.php on line 44 and defined in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Types\DatabaseObjects\Account.php:21
+Stack trace:
+#0 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Controllers\AccountController.php(44): app\Types\DatabaseObjects\Account->__construct()
+#1 [internal function]: app\Controllers\AccountController::getAccount()
+#2 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\ClassLoader\ClassLoader.php(46): call_user_func_array()
+#3 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Route\Route.php(95): Pecee\SimpleRouter\ClassLoader\ClassLoader->loadClosure()
+#4 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(427): Pecee\SimpleRouter\Route\Route->renderRoute()
+#5 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(353): Pecee\SimpleRouter\Router->routeRequest()
+#6 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\SimpleRouter.php(69): Pecee\SimpleRouter\Router->start()
+#7 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php(56): Pecee\SimpleRouter\SimpleRouter::start()
+#8 C:\Users\Andrew\Desktop\hajeebtok\backend\public\index.php(12): app\Hajeebtok::InitializeApp()
+#9 {main}
+  thrown in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Types\DatabaseObjects\Account.php on line 21
+[2025-06-22 20:44:31] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-22 20:44:31] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-22 20:44:31] <Logger.php:36> [FTAL] PHP Fatal Error: Uncaught TypeError: app\Types\DatabaseObjects\Account::__construct(): Argument #1 ($id) must be of type ?int, string given, called in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Controllers\AccountController.php on line 44 and defined in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Types\DatabaseObjects\Account.php:21
+Stack trace:
+#0 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Controllers\AccountController.php(44): app\Types\DatabaseObjects\Account->__construct()
+#1 [internal function]: app\Controllers\AccountController::getAccount()
+#2 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\ClassLoader\ClassLoader.php(46): call_user_func_array()
+#3 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Route\Route.php(95): Pecee\SimpleRouter\ClassLoader\ClassLoader->loadClosure()
+#4 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(427): Pecee\SimpleRouter\Route\Route->renderRoute()
+#5 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(353): Pecee\SimpleRouter\Router->routeRequest()
+#6 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\SimpleRouter.php(69): Pecee\SimpleRouter\Router->start()
+#7 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php(56): Pecee\SimpleRouter\SimpleRouter::start()
+#8 C:\Users\Andrew\Desktop\hajeebtok\backend\public\index.php(12): app\Hajeebtok::InitializeApp()
+#9 {main}
+  thrown in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Types\DatabaseObjects\Account.php on line 21
+[2025-06-22 20:44:59] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-22 20:44:59] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-22 20:44:59] <Logger.php:36> [FTAL] PHP Fatal Error: Uncaught TypeError: app\Types\DatabaseObjects\Account::__construct(): Argument #1 ($id) must be of type ?int, string given, called in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Controllers\AccountController.php on line 44 and defined in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Types\DatabaseObjects\Account.php:21
+Stack trace:
+#0 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Controllers\AccountController.php(44): app\Types\DatabaseObjects\Account->__construct()
+#1 [internal function]: app\Controllers\AccountController::getAccount()
+#2 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\ClassLoader\ClassLoader.php(46): call_user_func_array()
+#3 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Route\Route.php(95): Pecee\SimpleRouter\ClassLoader\ClassLoader->loadClosure()
+#4 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(427): Pecee\SimpleRouter\Route\Route->renderRoute()
+#5 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(353): Pecee\SimpleRouter\Router->routeRequest()
+#6 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\SimpleRouter.php(69): Pecee\SimpleRouter\Router->start()
+#7 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php(56): Pecee\SimpleRouter\SimpleRouter::start()
+#8 C:\Users\Andrew\Desktop\hajeebtok\backend\public\index.php(12): app\Hajeebtok::InitializeApp()
+#9 {main}
+  thrown in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Types\DatabaseObjects\Account.php on line 21
+[2025-06-22 20:45:14] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-22 20:45:14] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-22 20:45:28] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-22 20:45:28] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-22 20:45:28] <index.php:14> [FTAL] Hajeebtok Init Fail: Pecee\SimpleRouter\Exceptions\NotFoundHttpException: Route not found: "/account/getPremiumprofilePicture/18/" in C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php:467
+Stack trace:
+#0 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(353): Pecee\SimpleRouter\Router->routeRequest()
+#1 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\SimpleRouter.php(69): Pecee\SimpleRouter\Router->start()
+#2 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php(56): Pecee\SimpleRouter\SimpleRouter::start()
+#3 C:\Users\Andrew\Desktop\hajeebtok\backend\public\index.php(12): app\Hajeebtok::InitializeApp()
+#4 {main}
+[2025-06-22 20:45:34] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-22 20:45:34] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-22 20:45:34] <index.php:14> [FTAL] Hajeebtok Init Fail: Pecee\SimpleRouter\Exceptions\NotFoundHttpException: Route not found: "/account/getPremiumprofilePicture/premium_18/" in C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php:467
+Stack trace:
+#0 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(353): Pecee\SimpleRouter\Router->routeRequest()
+#1 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\SimpleRouter.php(69): Pecee\SimpleRouter\Router->start()
+#2 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php(56): Pecee\SimpleRouter\SimpleRouter::start()
+#3 C:\Users\Andrew\Desktop\hajeebtok\backend\public\index.php(12): app\Hajeebtok::InitializeApp()
+#4 {main}
+[2025-06-22 20:45:46] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-22 20:45:46] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-22 20:45:46] <index.php:14> [FTAL] Hajeebtok Init Fail: Pecee\SimpleRouter\Exceptions\NotFoundHttpException: Route not found: "/account/getPremiumprofilePicture/18/" in C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php:467
+Stack trace:
+#0 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(353): Pecee\SimpleRouter\Router->routeRequest()
+#1 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\SimpleRouter.php(69): Pecee\SimpleRouter\Router->start()
+#2 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php(56): Pecee\SimpleRouter\SimpleRouter::start()
+#3 C:\Users\Andrew\Desktop\hajeebtok\backend\public\index.php(12): app\Hajeebtok::InitializeApp()
+#4 {main}
+[2025-06-22 20:45:58] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-22 20:45:58] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-22 20:48:12] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-22 20:48:12] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-22 20:48:16] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-22 20:48:16] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-22 20:48:19] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-22 20:48:19] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-22 20:48:21] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-22 20:48:21] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-22 20:48:46] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-22 20:48:46] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-23 12:09:14] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-23 12:09:14] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-23 12:09:14] <UnauthenticatedException.php:13> [EROR] Unauthenticated exception. (0)
+[2025-06-23 12:09:14] <index.php:14> [FTAL] Hajeebtok Init Fail: app\Exceptions\UnauthenticatedException: Unauthenticated exception. (0) in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Controllers\AccountController.php:130
+Stack trace:
+#0 [internal function]: app\Controllers\AccountController::updateAccount()
+#1 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\ClassLoader\ClassLoader.php(46): call_user_func_array()
+#2 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Route\Route.php(95): Pecee\SimpleRouter\ClassLoader\ClassLoader->loadClosure()
+#3 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(427): Pecee\SimpleRouter\Route\Route->renderRoute()
+#4 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(353): Pecee\SimpleRouter\Router->routeRequest()
+#5 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\SimpleRouter.php(69): Pecee\SimpleRouter\Router->start()
+#6 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php(56): Pecee\SimpleRouter\SimpleRouter::start()
+#7 C:\Users\Andrew\Desktop\hajeebtok\backend\public\index.php(12): app\Hajeebtok::InitializeApp()
+#8 {main}
+[2025-06-23 12:09:48] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-23 12:09:48] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-23 12:09:48] <UnauthenticatedException.php:13> [EROR] Unauthenticated exception. (0)
+[2025-06-23 12:09:48] <index.php:14> [FTAL] Hajeebtok Init Fail: app\Exceptions\UnauthenticatedException: Unauthenticated exception. (0) in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Controllers\AccountController.php:130
+Stack trace:
+#0 [internal function]: app\Controllers\AccountController::updateAccount()
+#1 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\ClassLoader\ClassLoader.php(46): call_user_func_array()
+#2 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Route\Route.php(95): Pecee\SimpleRouter\ClassLoader\ClassLoader->loadClosure()
+#3 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(427): Pecee\SimpleRouter\Route\Route->renderRoute()
+#4 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(353): Pecee\SimpleRouter\Router->routeRequest()
+#5 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\SimpleRouter.php(69): Pecee\SimpleRouter\Router->start()
+#6 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php(56): Pecee\SimpleRouter\SimpleRouter::start()
+#7 C:\Users\Andrew\Desktop\hajeebtok\backend\public\index.php(12): app\Hajeebtok::InitializeApp()
+#8 {main}
+[2025-06-23 12:10:02] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-23 12:10:02] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-23 12:10:48] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-23 12:10:48] <Hajeebtok.php:43> [INFO] Hajeebtok application initialized.
+[2025-06-23 12:23:09] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-23 12:23:09] <Hajeebtok.php:46> [INFO] Hajeebtok application initialized.
+[2025-06-23 12:23:16] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-23 12:23:16] <Hajeebtok.php:46> [INFO] Hajeebtok application initialized.
+[2025-06-23 12:26:38] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-23 12:26:38] <Hajeebtok.php:46> [INFO] Hajeebtok application initialized.
+[2025-06-23 12:27:24] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-23 12:27:24] <Hajeebtok.php:46> [INFO] Hajeebtok application initialized.
+[2025-06-23 12:29:51] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-23 12:29:51] <Hajeebtok.php:46> [INFO] Hajeebtok application initialized.
+[2025-06-23 12:29:52] <Account.php:60> [DBUG] Saved account id (7).
+[2025-06-23 12:29:52] <Logger.php:36> [FTAL] PHP Fatal Error: Uncaught TypeError: api_json(): Argument #1 ($data) must be of type array, app\Types\DatabaseObjects\Account given, called in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Controllers\AccountController.php on line 146 and defined in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Helpers.php:95
+Stack trace:
+#0 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Controllers\AccountController.php(146): api_json()
+#1 [internal function]: app\Controllers\AccountController::updateAccount()
+#2 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\ClassLoader\ClassLoader.php(46): call_user_func_array()
+#3 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Route\Route.php(95): Pecee\SimpleRouter\ClassLoader\ClassLoader->loadClosure()
+#4 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(427): Pecee\SimpleRouter\Route\Route->renderRoute()
+#5 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(353): Pecee\SimpleRouter\Router->routeRequest()
+#6 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\SimpleRouter.php(69): Pecee\SimpleRouter\Router->start()
+#7 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php(66): Pecee\SimpleRouter\SimpleRouter::start()
+#8 C:\Users\Andrew\Desktop\hajeebtok\backend\public\index.php(12): app\Hajeebtok::InitializeApp()
+#9 {main}
+  thrown in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Helpers.php on line 95
+[2025-06-23 12:30:31] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-23 12:30:31] <Hajeebtok.php:46> [INFO] Hajeebtok application initialized.
+[2025-06-23 12:30:31] <Account.php:60> [DBUG] Saved account id (8).
+[2025-06-23 12:31:07] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-23 12:31:07] <Hajeebtok.php:46> [INFO] Hajeebtok application initialized.
+[2025-06-23 12:31:13] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-23 12:31:13] <Hajeebtok.php:46> [INFO] Hajeebtok application initialized.
+[2025-06-23 12:31:14] <Account.php:60> [DBUG] Saved account id (9).
+[2025-06-23 12:31:15] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-23 12:31:15] <Hajeebtok.php:46> [INFO] Hajeebtok application initialized.
+[2025-06-23 12:31:21] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-23 12:31:21] <Hajeebtok.php:46> [INFO] Hajeebtok application initialized.
+[2025-06-23 12:34:38] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-23 12:34:38] <Hajeebtok.php:46> [INFO] Hajeebtok application initialized.
+[2025-06-23 12:34:38] <Account.php:60> [DBUG] Saved account id (10).
+[2025-06-23 12:34:45] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-23 12:34:45] <Hajeebtok.php:46> [INFO] Hajeebtok application initialized.
+[2025-06-23 12:34:45] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-23 12:34:45] <Hajeebtok.php:46> [INFO] Hajeebtok application initialized.
+[2025-06-23 12:34:47] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-23 12:34:47] <Hajeebtok.php:46> [INFO] Hajeebtok application initialized.
+[2025-06-23 12:34:47] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-23 12:34:47] <Hajeebtok.php:46> [INFO] Hajeebtok application initialized.
+[2025-06-23 12:35:55] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-23 12:35:55] <Hajeebtok.php:46> [INFO] Hajeebtok application initialized.
+[2025-06-23 12:35:56] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-23 12:35:56] <Hajeebtok.php:46> [INFO] Hajeebtok application initialized.
+[2025-06-23 12:35:57] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-23 12:35:57] <Hajeebtok.php:46> [INFO] Hajeebtok application initialized.
+[2025-06-23 12:35:57] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-23 12:35:57] <Hajeebtok.php:46> [INFO] Hajeebtok application initialized.
+[2025-06-23 12:35:58] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-23 12:35:58] <Hajeebtok.php:46> [INFO] Hajeebtok application initialized.
+[2025-06-23 12:35:58] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-23 12:35:58] <Hajeebtok.php:46> [INFO] Hajeebtok application initialized.
+[2025-06-23 12:35:58] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-23 12:35:58] <Hajeebtok.php:46> [INFO] Hajeebtok application initialized.
+[2025-06-23 12:35:58] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-23 12:35:58] <Hajeebtok.php:46> [INFO] Hajeebtok application initialized.
+[2025-06-23 12:35:59] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-23 12:35:59] <Hajeebtok.php:46> [INFO] Hajeebtok application initialized.
+[2025-06-23 12:35:59] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-23 12:35:59] <Hajeebtok.php:46> [INFO] Hajeebtok application initialized.
+[2025-06-23 12:46:00] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-23 12:46:00] <Hajeebtok.php:46> [INFO] Hajeebtok application initialized.
+[2025-06-23 12:46:00] <Account.php:103> [DBUG] Updated account id (6).
+[2025-06-23 12:46:03] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-23 12:46:03] <Hajeebtok.php:46> [INFO] Hajeebtok application initialized.
+[2025-06-23 12:46:14] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-23 12:46:14] <Hajeebtok.php:46> [INFO] Hajeebtok application initialized.
+[2025-06-23 12:46:14] <Account.php:103> [DBUG] Updated account id (6).
+[2025-06-23 12:46:16] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-23 12:46:16] <Hajeebtok.php:46> [INFO] Hajeebtok application initialized.
+[2025-06-23 13:21:58] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-23 13:21:58] <Hajeebtok.php:46> [INFO] Hajeebtok application initialized.
+[2025-06-23 13:21:58] <MariaDBDatabase.php:92> [EROR] Query execution failed: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'picture_hash' cannot be null - Query: UPDATE accounts SET username = :username, password = :password, picture_hash = :picture_hash, verified = :verified, bio = :bio WHERE id = :id
+[2025-06-23 13:21:58] <Hajeebtok.php:60> [EROR] Route fault: PDOException: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'picture_hash' cannot be null in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Types\MariaDBDatabase.php:89
+Stack trace:
+#0 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Types\MariaDBDatabase.php(89): PDOStatement->execute()
+#1 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Types\MariaDBDatabase.php(99): app\Types\MariaDBDatabase->executeStatement()
+#2 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Types\DatabaseObjects\Account.php(95): app\Types\MariaDBDatabase->Query()
+#3 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Controllers\AccountController.php(145): app\Types\DatabaseObjects\Account->Update()
+#4 [internal function]: app\Controllers\AccountController::updateAccount()
+#5 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\ClassLoader\ClassLoader.php(46): call_user_func_array()
+#6 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Route\Route.php(95): Pecee\SimpleRouter\ClassLoader\ClassLoader->loadClosure()
+#7 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(427): Pecee\SimpleRouter\Route\Route->renderRoute()
+#8 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(353): Pecee\SimpleRouter\Router->routeRequest()
+#9 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\SimpleRouter.php(69): Pecee\SimpleRouter\Router->start()
+#10 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php(66): Pecee\SimpleRouter\SimpleRouter::start()
+#11 C:\Users\Andrew\Desktop\hajeebtok\backend\public\index.php(12): app\Hajeebtok::InitializeApp()
+#12 {main}
+[2025-06-23 13:23:26] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-23 13:23:26] <Hajeebtok.php:46> [INFO] Hajeebtok application initialized.
+[2025-06-23 13:23:26] <MariaDBDatabase.php:92> [EROR] Query execution failed: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'picture_hash' cannot be null - Query: UPDATE accounts SET username = :username, password = :password, picture_hash = :picture_hash, verified = :verified, bio = :bio WHERE id = :id
+[2025-06-23 13:23:26] <Hajeebtok.php:60> [EROR] Route fault: PDOException: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'picture_hash' cannot be null in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Types\MariaDBDatabase.php:89
+Stack trace:
+#0 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Types\MariaDBDatabase.php(89): PDOStatement->execute()
+#1 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Types\MariaDBDatabase.php(99): app\Types\MariaDBDatabase->executeStatement()
+#2 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Types\DatabaseObjects\Account.php(95): app\Types\MariaDBDatabase->Query()
+#3 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Controllers\AccountController.php(147): app\Types\DatabaseObjects\Account->Update()
+#4 [internal function]: app\Controllers\AccountController::updateAccount()
+#5 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\ClassLoader\ClassLoader.php(46): call_user_func_array()
+#6 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Route\Route.php(95): Pecee\SimpleRouter\ClassLoader\ClassLoader->loadClosure()
+#7 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(427): Pecee\SimpleRouter\Route\Route->renderRoute()
+#8 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(353): Pecee\SimpleRouter\Router->routeRequest()
+#9 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\SimpleRouter.php(69): Pecee\SimpleRouter\Router->start()
+#10 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php(66): Pecee\SimpleRouter\SimpleRouter::start()
+#11 C:\Users\Andrew\Desktop\hajeebtok\backend\public\index.php(12): app\Hajeebtok::InitializeApp()
+#12 {main}
+[2025-06-23 13:24:52] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-23 13:24:52] <Hajeebtok.php:46> [INFO] Hajeebtok application initialized.
+[2025-06-23 13:24:53] <MariaDBDatabase.php:92> [EROR] Query execution failed: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'picture_hash' cannot be null - Query: UPDATE accounts SET username = :username, password = :password, picture_hash = :picture_hash, verified = :verified, bio = :bio WHERE id = :id
+[2025-06-23 13:24:53] <Hajeebtok.php:60> [EROR] Route fault: PDOException: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'picture_hash' cannot be null in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Types\MariaDBDatabase.php:89
+Stack trace:
+#0 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Types\MariaDBDatabase.php(89): PDOStatement->execute()
+#1 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Types\MariaDBDatabase.php(99): app\Types\MariaDBDatabase->executeStatement()
+#2 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Types\DatabaseObjects\Account.php(95): app\Types\MariaDBDatabase->Query()
+#3 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Controllers\AccountController.php(146): app\Types\DatabaseObjects\Account->Update()
+#4 [internal function]: app\Controllers\AccountController::updateAccount()
+#5 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\ClassLoader\ClassLoader.php(46): call_user_func_array()
+#6 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Route\Route.php(95): Pecee\SimpleRouter\ClassLoader\ClassLoader->loadClosure()
+#7 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(427): Pecee\SimpleRouter\Route\Route->renderRoute()
+#8 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(353): Pecee\SimpleRouter\Router->routeRequest()
+#9 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\SimpleRouter.php(69): Pecee\SimpleRouter\Router->start()
+#10 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php(66): Pecee\SimpleRouter\SimpleRouter::start()
+#11 C:\Users\Andrew\Desktop\hajeebtok\backend\public\index.php(12): app\Hajeebtok::InitializeApp()
+#12 {main}
+[2025-06-23 13:25:09] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-23 13:25:09] <Hajeebtok.php:46> [INFO] Hajeebtok application initialized.
+[2025-06-23 13:25:09] <Logger.php:36> [FTAL] PHP Fatal Error: Uncaught Error: Call to undefined method app\Logger::log() in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Controllers\AccountController.php:134
+Stack trace:
+#0 [internal function]: app\Controllers\AccountController::updateAccount()
+#1 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\ClassLoader\ClassLoader.php(46): call_user_func_array()
+#2 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Route\Route.php(95): Pecee\SimpleRouter\ClassLoader\ClassLoader->loadClosure()
+#3 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(427): Pecee\SimpleRouter\Route\Route->renderRoute()
+#4 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(353): Pecee\SimpleRouter\Router->routeRequest()
+#5 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\SimpleRouter.php(69): Pecee\SimpleRouter\Router->start()
+#6 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php(66): Pecee\SimpleRouter\SimpleRouter::start()
+#7 C:\Users\Andrew\Desktop\hajeebtok\backend\public\index.php(12): app\Hajeebtok::InitializeApp()
+#8 {main}
+  thrown in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Controllers\AccountController.php on line 134
+[2025-06-23 13:25:22] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-23 13:25:22] <Hajeebtok.php:46> [INFO] Hajeebtok application initialized.
+[2025-06-23 13:25:22] <AccountController.php:134> [DBUG] picture hash: 
+[2025-06-23 13:25:23] <MariaDBDatabase.php:92> [EROR] Query execution failed: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'picture_hash' cannot be null - Query: UPDATE accounts SET username = :username, password = :password, picture_hash = :picture_hash, verified = :verified, bio = :bio WHERE id = :id
+[2025-06-23 13:25:23] <Hajeebtok.php:60> [EROR] Route fault: PDOException: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'picture_hash' cannot be null in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Types\MariaDBDatabase.php:89
+Stack trace:
+#0 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Types\MariaDBDatabase.php(89): PDOStatement->execute()
+#1 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Types\MariaDBDatabase.php(99): app\Types\MariaDBDatabase->executeStatement()
+#2 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Types\DatabaseObjects\Account.php(95): app\Types\MariaDBDatabase->Query()
+#3 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Controllers\AccountController.php(148): app\Types\DatabaseObjects\Account->Update()
+#4 [internal function]: app\Controllers\AccountController::updateAccount()
+#5 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\ClassLoader\ClassLoader.php(46): call_user_func_array()
+#6 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Route\Route.php(95): Pecee\SimpleRouter\ClassLoader\ClassLoader->loadClosure()
+#7 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(427): Pecee\SimpleRouter\Route\Route->renderRoute()
+#8 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(353): Pecee\SimpleRouter\Router->routeRequest()
+#9 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\SimpleRouter.php(69): Pecee\SimpleRouter\Router->start()
+#10 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php(66): Pecee\SimpleRouter\SimpleRouter::start()
+#11 C:\Users\Andrew\Desktop\hajeebtok\backend\public\index.php(12): app\Hajeebtok::InitializeApp()
+#12 {main}
+[2025-06-23 13:32:35] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-23 13:32:35] <Hajeebtok.php:46> [INFO] Hajeebtok application initialized.
+[2025-06-23 13:32:35] <AccountController.php:134> [DBUG] picture hash: 
+[2025-06-23 13:32:35] <MariaDBDatabase.php:92> [EROR] Query execution failed: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'picture_hash' cannot be null - Query: UPDATE accounts SET username = :username, password = :password, picture_hash = :picture_hash, verified = :verified, bio = :bio WHERE id = :id
+[2025-06-23 13:32:35] <Hajeebtok.php:60> [EROR] Route fault: PDOException: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'picture_hash' cannot be null in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Types\MariaDBDatabase.php:89
+Stack trace:
+#0 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Types\MariaDBDatabase.php(89): PDOStatement->execute()
+#1 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Types\MariaDBDatabase.php(99): app\Types\MariaDBDatabase->executeStatement()
+#2 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Types\DatabaseObjects\Account.php(95): app\Types\MariaDBDatabase->Query()
+#3 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Controllers\AccountController.php(148): app\Types\DatabaseObjects\Account->Update()
+#4 [internal function]: app\Controllers\AccountController::updateAccount()
+#5 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\ClassLoader\ClassLoader.php(46): call_user_func_array()
+#6 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Route\Route.php(95): Pecee\SimpleRouter\ClassLoader\ClassLoader->loadClosure()
+#7 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(427): Pecee\SimpleRouter\Route\Route->renderRoute()
+#8 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(353): Pecee\SimpleRouter\Router->routeRequest()
+#9 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\SimpleRouter.php(69): Pecee\SimpleRouter\Router->start()
+#10 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php(66): Pecee\SimpleRouter\SimpleRouter::start()
+#11 C:\Users\Andrew\Desktop\hajeebtok\backend\public\index.php(12): app\Hajeebtok::InitializeApp()
+#12 {main}
+[2025-06-23 13:32:39] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-23 13:32:39] <Hajeebtok.php:46> [INFO] Hajeebtok application initialized.
+[2025-06-23 13:32:39] <AccountController.php:134> [DBUG] picture hash: 
+[2025-06-23 13:32:39] <MariaDBDatabase.php:92> [EROR] Query execution failed: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'picture_hash' cannot be null - Query: UPDATE accounts SET username = :username, password = :password, picture_hash = :picture_hash, verified = :verified, bio = :bio WHERE id = :id
+[2025-06-23 13:32:39] <Hajeebtok.php:60> [EROR] Route fault: PDOException: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'picture_hash' cannot be null in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Types\MariaDBDatabase.php:89
+Stack trace:
+#0 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Types\MariaDBDatabase.php(89): PDOStatement->execute()
+#1 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Types\MariaDBDatabase.php(99): app\Types\MariaDBDatabase->executeStatement()
+#2 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Types\DatabaseObjects\Account.php(95): app\Types\MariaDBDatabase->Query()
+#3 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Controllers\AccountController.php(148): app\Types\DatabaseObjects\Account->Update()
+#4 [internal function]: app\Controllers\AccountController::updateAccount()
+#5 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\ClassLoader\ClassLoader.php(46): call_user_func_array()
+#6 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Route\Route.php(95): Pecee\SimpleRouter\ClassLoader\ClassLoader->loadClosure()
+#7 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(427): Pecee\SimpleRouter\Route\Route->renderRoute()
+#8 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(353): Pecee\SimpleRouter\Router->routeRequest()
+#9 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\SimpleRouter.php(69): Pecee\SimpleRouter\Router->start()
+#10 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php(66): Pecee\SimpleRouter\SimpleRouter::start()
+#11 C:\Users\Andrew\Desktop\hajeebtok\backend\public\index.php(12): app\Hajeebtok::InitializeApp()
+#12 {main}
+[2025-06-23 13:32:59] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-23 13:32:59] <Hajeebtok.php:46> [INFO] Hajeebtok application initialized.
+[2025-06-23 13:32:59] <AccountController.php:134> [DBUG] picture hash: 
+[2025-06-23 13:33:00] <MariaDBDatabase.php:92> [EROR] Query execution failed: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'picture_hash' cannot be null - Query: UPDATE accounts SET username = :username, password = :password, picture_hash = :picture_hash, verified = :verified, bio = :bio WHERE id = :id
+[2025-06-23 13:33:00] <Hajeebtok.php:60> [EROR] Route fault: PDOException: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'picture_hash' cannot be null in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Types\MariaDBDatabase.php:89
+Stack trace:
+#0 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Types\MariaDBDatabase.php(89): PDOStatement->execute()
+#1 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Types\MariaDBDatabase.php(99): app\Types\MariaDBDatabase->executeStatement()
+#2 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Types\DatabaseObjects\Account.php(95): app\Types\MariaDBDatabase->Query()
+#3 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Controllers\AccountController.php(148): app\Types\DatabaseObjects\Account->Update()
+#4 [internal function]: app\Controllers\AccountController::updateAccount()
+#5 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\ClassLoader\ClassLoader.php(46): call_user_func_array()
+#6 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Route\Route.php(95): Pecee\SimpleRouter\ClassLoader\ClassLoader->loadClosure()
+#7 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(427): Pecee\SimpleRouter\Route\Route->renderRoute()
+#8 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(353): Pecee\SimpleRouter\Router->routeRequest()
+#9 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\SimpleRouter.php(69): Pecee\SimpleRouter\Router->start()
+#10 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php(66): Pecee\SimpleRouter\SimpleRouter::start()
+#11 C:\Users\Andrew\Desktop\hajeebtok\backend\public\index.php(12): app\Hajeebtok::InitializeApp()
+#12 {main}
+[2025-06-23 13:33:49] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-23 13:33:49] <Hajeebtok.php:46> [INFO] Hajeebtok application initialized.
+[2025-06-23 13:35:00] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-23 13:35:00] <Hajeebtok.php:46> [INFO] Hajeebtok application initialized.
+[2025-06-23 13:35:01] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-23 13:35:01] <Hajeebtok.php:46> [INFO] Hajeebtok application initialized.
+[2025-06-23 13:35:01] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-23 13:35:01] <Hajeebtok.php:46> [INFO] Hajeebtok application initialized.
+[2025-06-23 13:35:01] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-23 13:35:01] <Hajeebtok.php:46> [INFO] Hajeebtok application initialized.
+[2025-06-23 13:39:43] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-23 13:39:43] <Hajeebtok.php:46> [INFO] Hajeebtok application initialized.
+[2025-06-23 13:40:04] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-23 13:40:04] <Hajeebtok.php:46> [INFO] Hajeebtok application initialized.
+[2025-06-23 13:40:04] <Logger.php:36> [FTAL] PHP Fatal Error: Uncaught TypeError: app\Controllers\AccountController::updateAccount(): Return value must be of type string, null returned in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Controllers\AccountController.php:135
+Stack trace:
+#0 [internal function]: app\Controllers\AccountController::updateAccount()
+#1 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\ClassLoader\ClassLoader.php(46): call_user_func_array()
+#2 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Route\Route.php(95): Pecee\SimpleRouter\ClassLoader\ClassLoader->loadClosure()
+#3 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(427): Pecee\SimpleRouter\Route\Route->renderRoute()
+#4 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(353): Pecee\SimpleRouter\Router->routeRequest()
+#5 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\SimpleRouter.php(69): Pecee\SimpleRouter\Router->start()
+#6 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php(66): Pecee\SimpleRouter\SimpleRouter::start()
+#7 C:\Users\Andrew\Desktop\hajeebtok\backend\public\index.php(12): app\Hajeebtok::InitializeApp()
+#8 {main}
+  thrown in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Controllers\AccountController.php on line 135
+[2025-06-23 13:40:41] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-23 13:40:41] <Hajeebtok.php:46> [INFO] Hajeebtok application initialized.
+[2025-06-23 13:53:04] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-23 13:53:04] <Hajeebtok.php:46> [INFO] Hajeebtok application initialized.
+[2025-06-23 13:53:04] <Hajeebtok.php:60> [EROR] Route fault: Pecee\SimpleRouter\Exceptions\NotFoundHttpException: Route "/account/update/" or method "get" not allowed. in C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php:452
+Stack trace:
+#0 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(353): Pecee\SimpleRouter\Router->routeRequest()
+#1 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\SimpleRouter.php(69): Pecee\SimpleRouter\Router->start()
+#2 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php(66): Pecee\SimpleRouter\SimpleRouter::start()
+#3 C:\Users\Andrew\Desktop\hajeebtok\backend\public\index.php(12): app\Hajeebtok::InitializeApp()
+#4 {main}
+[2025-06-23 13:53:57] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-23 13:53:57] <Hajeebtok.php:46> [INFO] Hajeebtok application initialized.
+[2025-06-23 13:53:58] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-23 13:53:58] <Hajeebtok.php:46> [INFO] Hajeebtok application initialized.
+[2025-06-23 13:53:58] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-23 13:53:58] <Hajeebtok.php:46> [INFO] Hajeebtok application initialized.
+[2025-06-23 13:53:58] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-23 13:53:58] <Hajeebtok.php:46> [INFO] Hajeebtok application initialized.
+[2025-06-23 13:53:59] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-23 13:53:59] <Hajeebtok.php:46> [INFO] Hajeebtok application initialized.
+[2025-06-23 13:53:59] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-23 13:53:59] <Hajeebtok.php:46> [INFO] Hajeebtok application initialized.
+[2025-06-23 13:53:59] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-23 13:53:59] <Hajeebtok.php:46> [INFO] Hajeebtok application initialized.
+[2025-06-23 13:53:59] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-23 13:53:59] <Hajeebtok.php:46> [INFO] Hajeebtok application initialized.
+[2025-06-23 13:53:59] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-23 13:53:59] <Hajeebtok.php:46> [INFO] Hajeebtok application initialized.
+[2025-06-23 13:54:01] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-23 13:54:01] <Hajeebtok.php:46> [INFO] Hajeebtok application initialized.
+[2025-06-23 13:54:17] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-23 13:54:17] <Hajeebtok.php:46> [INFO] Hajeebtok application initialized.
+[2025-06-23 13:54:17] <Hajeebtok.php:60> [EROR] Route fault: Pecee\SimpleRouter\Exceptions\NotFoundHttpException: Route "/account/update/" or method "get" not allowed. in C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php:452
+Stack trace:
+#0 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(353): Pecee\SimpleRouter\Router->routeRequest()
+#1 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\SimpleRouter.php(69): Pecee\SimpleRouter\Router->start()
+#2 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php(66): Pecee\SimpleRouter\SimpleRouter::start()
+#3 C:\Users\Andrew\Desktop\hajeebtok\backend\public\index.php(12): app\Hajeebtok::InitializeApp()
+#4 {main}
+[2025-06-23 13:54:52] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-23 13:54:52] <Hajeebtok.php:46> [INFO] Hajeebtok application initialized.
+[2025-06-23 13:54:52] <Hajeebtok.php:60> [EROR] Route fault: Pecee\SimpleRouter\Exceptions\NotFoundHttpException: Route "/account/update/" or method "get" not allowed. in C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php:452
+Stack trace:
+#0 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(353): Pecee\SimpleRouter\Router->routeRequest()
+#1 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\SimpleRouter.php(69): Pecee\SimpleRouter\Router->start()
+#2 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php(66): Pecee\SimpleRouter\SimpleRouter::start()
+#3 C:\Users\Andrew\Desktop\hajeebtok\backend\public\index.php(12): app\Hajeebtok::InitializeApp()
+#4 {main}
+[2025-06-23 13:55:00] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-23 13:55:00] <Hajeebtok.php:46> [INFO] Hajeebtok application initialized.
+[2025-06-23 13:56:37] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-23 13:56:37] <Hajeebtok.php:46> [INFO] Hajeebtok application initialized.
+[2025-06-23 13:56:37] <Logger.php:36> [FTAL] PHP Fatal Error: Uncaught TypeError: app\Controllers\AccountController::updateAccount(): Return value must be of type string, null returned in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Controllers\AccountController.php:137
+Stack trace:
+#0 [internal function]: app\Controllers\AccountController::updateAccount()
+#1 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\ClassLoader\ClassLoader.php(46): call_user_func_array()
+#2 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Route\Route.php(95): Pecee\SimpleRouter\ClassLoader\ClassLoader->loadClosure()
+#3 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(427): Pecee\SimpleRouter\Route\Route->renderRoute()
+#4 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(353): Pecee\SimpleRouter\Router->routeRequest()
+#5 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\SimpleRouter.php(69): Pecee\SimpleRouter\Router->start()
+#6 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php(66): Pecee\SimpleRouter\SimpleRouter::start()
+#7 C:\Users\Andrew\Desktop\hajeebtok\backend\public\index.php(12): app\Hajeebtok::InitializeApp()
+#8 {main}
+  thrown in C:\Users\Andrew\Desktop\hajeebtok\backend\app\Controllers\AccountController.php on line 137
+[2025-06-23 17:27:22] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-23 17:27:22] <Hajeebtok.php:46> [INFO] Hajeebtok application initialized.
+[2025-06-23 17:28:34] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-23 17:28:34] <Hajeebtok.php:46> [INFO] Hajeebtok application initialized.
+[2025-06-23 17:29:21] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-23 17:29:21] <Hajeebtok.php:46> [INFO] Hajeebtok application initialized.
+[2025-06-23 17:29:43] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-23 17:29:43] <Hajeebtok.php:46> [INFO] Hajeebtok application initialized.
+[2025-06-23 17:29:43] <Hajeebtok.php:60> [EROR] Route fault: Pecee\SimpleRouter\Exceptions\NotFoundHttpException: Route "/account/update/" or method "patch" not allowed. in C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php:452
+Stack trace:
+#0 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(353): Pecee\SimpleRouter\Router->routeRequest()
+#1 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\SimpleRouter.php(69): Pecee\SimpleRouter\Router->start()
+#2 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php(66): Pecee\SimpleRouter\SimpleRouter::start()
+#3 C:\Users\Andrew\Desktop\hajeebtok\backend\public\index.php(12): app\Hajeebtok::InitializeApp()
+#4 {main}
+[2025-06-23 17:30:22] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-23 17:30:22] <Hajeebtok.php:46> [INFO] Hajeebtok application initialized.
+[2025-06-23 18:44:16] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-23 18:44:16] <Hajeebtok.php:46> [INFO] Hajeebtok application initialized.
+[2025-06-23 18:44:16] <Hajeebtok.php:60> [EROR] Route fault: Pecee\SimpleRouter\Exceptions\NotFoundHttpException: Route "/account/update/" or method "options" not allowed. in C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php:452
+Stack trace:
+#0 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(353): Pecee\SimpleRouter\Router->routeRequest()
+#1 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\SimpleRouter.php(69): Pecee\SimpleRouter\Router->start()
+#2 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php(66): Pecee\SimpleRouter\SimpleRouter::start()
+#3 C:\Users\Andrew\Desktop\hajeebtok\backend\public\index.php(12): app\Hajeebtok::InitializeApp()
+#4 {main}
+[2025-06-23 19:09:12] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-23 19:09:12] <Hajeebtok.php:46> [INFO] Hajeebtok application initialized.
+[2025-06-23 19:09:12] <Hajeebtok.php:60> [EROR] Route fault: Pecee\SimpleRouter\Exceptions\NotFoundHttpException: Route "/account/update/" or method "options" not allowed. in C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php:452
+Stack trace:
+#0 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\Router.php(353): Pecee\SimpleRouter\Router->routeRequest()
+#1 C:\Users\Andrew\Desktop\hajeebtok\backend\vendor\pecee\simple-router\src\Pecee\SimpleRouter\SimpleRouter.php(69): Pecee\SimpleRouter\Router->start()
+#2 C:\Users\Andrew\Desktop\hajeebtok\backend\app\Hajeebtok.php(66): Pecee\SimpleRouter\SimpleRouter::start()
+#3 C:\Users\Andrew\Desktop\hajeebtok\backend\public\index.php(12): app\Hajeebtok::InitializeApp()
+#4 {main}
+[2025-06-23 19:11:23] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-23 19:11:23] <Hajeebtok.php:46> [INFO] Hajeebtok application initialized.
+[2025-06-23 19:12:14] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-23 19:12:14] <Hajeebtok.php:46> [INFO] Hajeebtok application initialized.
+[2025-06-23 19:12:14] <Logger.php:46> [INFO] Logger initialized. Log file: C:\Users\Andrew\Desktop\hajeebtok\backend/logs/rajesh.log
+[2025-06-23 19:12:14] <Hajeebtok.php:46> [INFO] Hajeebtok application initialized.

+ 15 - 0
public/index.php

@@ -0,0 +1,15 @@
+<?php
+
+use app\Hajeebtok;
+use app\Logger;
+
+define("APP_ROOT", realpath(__DIR__ . "/../"));
+
+require_once(APP_ROOT . "/vendor/autoload.php");
+require_once(APP_ROOT . "/app/Helpers.php");
+
+try {
+    Hajeebtok::InitializeApp();
+} catch (Exception $e) {
+    Logger::Fatal("Hajeebtok Init Fail: $e");
+}