aboutsummaryrefslogtreecommitdiff
path: root/private
diff options
context:
space:
mode:
authorKevin J Hoerr <kjhoerr@submelon.tech>2018-08-26 01:38:28 -0400
committerKevin Hoerr <kjhoerr@submelon.tech>2018-08-31 23:24:45 -0400
commit0965d62be00a7820f97284704dc71f37e661b412 (patch)
tree5a5c9d69062e24aa926eb30447c5ff27e0a65492 /private
parent1e3946f04b5b602d3869a285d897acb0ba2b3c35 (diff)
downloadaugust-offensive-0965d62be00a7820f97284704dc71f37e661b412.tar.gz
august-offensive-0965d62be00a7820f97284704dc71f37e661b412.tar.bz2
august-offensive-0965d62be00a7820f97284704dc71f37e661b412.zip
Begin migration to Rust; Add actix-web, diesel as main dependencies
Diffstat (limited to 'private')
-rw-r--r--private/Controller/Controller.php92
-rw-r--r--private/Model/Connection.php42
-rw-r--r--private/Model/Query.php71
-rw-r--r--private/Model/Result.php52
-rw-r--r--private/Model/creds.php10
-rw-r--r--private/Model/fresh.sql103
-rw-r--r--private/View/Main.php104
-rw-r--r--private/View/Output.php28
8 files changed, 0 insertions, 502 deletions
diff --git a/private/Controller/Controller.php b/private/Controller/Controller.php
deleted file mode 100644
index 586be15..0000000
--- a/private/Controller/Controller.php
+++ /dev/null
@@ -1,92 +0,0 @@
-<?php
-
-declare(strict_types=1);
-
-namespace AugustOffensive\Controller;
-
-use AugustOffensive\Model;
-
-/**
- * Static controller class for interfacing between the view and the model.
- */
-class Controller
-{
- /**
- * Initiates connection with the database.
- *
- * While errors are ideally handled by the controller, this instantiation
- * will likely throw a \PDOException which should be handled by the front-
- * end due to this being a fatal error and generally unrecoverable.
- *
- * @return Model\Connection
- */
- public static function initiateConnection (): Model\Connection
- {
- return new Model\Connection();
- }
-
- /**
- * Creates and returns a Query object.
- *
- * If the creation results in an error, a different query object is
- * returned with the error message.
- *
- * @param array $path The array that holds the original request structure.
- * @param string $request The request method made to the server.
- * @param array $content The content object sent by the request.
- *
- * @return Model\Query
- */
- public static function createQuery (
- array $path,
- string $request,
- array $content
- ): Model\Query {
- try {
- return new Model\Query($path, $request, $content);
- } catch (\Exception $err) {
- return new Model\Query(array(), "", array("ERROR" => $err->getMessage()));
- }
- }
-
- /**
- * Creates and returns a Result object.
- *
- * @param string $resultType The type of result to send back to the client.
- * @param array $result The result object to send back to the client.
- *
- * @return Model\Result
- */
- public static function createResult (
- string $resultType,
- array $result
- ): Model\Result {
- try {
- return new Model\Result($resultType, $result);
- } catch (\Exception $err) {
- return new Model\Result("ERROR", array($err->getMessage()));
- }
- }
-
- /**
- * Obtain the error result based on the exception that was thrown.
- *
- * @param \Exception $err the error that was thrown.
- *
- * @return Model\Result
- */
- public static function errorResult (\Exception $err): Model\Result
- {
- $errorType = "";
- // Juggle error: objective is to sort error type
- try {
- throw $err;
- } catch (\PDOException $e) {
- $errorType = "DATABASE_ERROR";
- } catch (\Exception $e) {
- $errorType = "ERROR";
- }
-
- return new Model\Result($errorType, array("error" => $err->getMessage()));
- }
-}
diff --git a/private/Model/Connection.php b/private/Model/Connection.php
deleted file mode 100644
index 4afa330..0000000
--- a/private/Model/Connection.php
+++ /dev/null
@@ -1,42 +0,0 @@
-<?php
-
-declare(strict_types=1);
-
-namespace AugustOffensive\Model;
-
-/**
- * Model connection class for connecting to database via PDO.
- */
-class Connection
-{
- /** @var \PDO $_conn PDO connection to database. */
- private $conn;
- /**
- * Initiates connection to PostGreSQL database.
- *
- * @return Connection
- */
- public function __construct ()
- {
- // Establish connection to db
- // breaks side-effect rule
- include 'creds.php';
-
- try {
- $conn = new \PDO(
- "pgsql: host=" . $cred->host .
- (($cred->port !== '') ? ";port=" . $cred->port : '') .
- ";dbname=" . $cred->dbName,
- $cred->login,
- $cred->password
- );
- // we destroy $cred as quickly as possible
- $cred = null;
- } catch (\PDOException $err) {
- // we destroy $cred as quickly as possible
- $cred = null;
- throw $err; // throw for Controller to catch
- }
- return $this;
- }
-}
diff --git a/private/Model/Query.php b/private/Model/Query.php
deleted file mode 100644
index 7eca836..0000000
--- a/private/Model/Query.php
+++ /dev/null
@@ -1,71 +0,0 @@
-<?php
-
-declare(strict_types=1);
-
-namespace AugustOffensive\Model;
-
-/**
- * Query object for storing relevant query information.
- */
-class Query
-{
- /** @var array $path array of request structure. */
- private $path;
-
- /** @var string $request type of request made to the server. */
- private $request;
-
- /** @var array $content structure of information sent to the server. */
- private $content;
-
- /**
- * Store query information.
- *
- * @param array $path The array that holds the original request structure.
- * @param string $request The request method made to the server.
- * @param array $content The content object sent by the request.
- *
- * @return Query
- */
- public function __construct (
- array $path,
- string $request,
- array $content
- ) {
- $this->path = $path;
- $this->request = $request;
- $this->content = $content;
-
- return $this;
- }
-
- /**
- * Returns the request path made by the client.
- *
- * @return array
- */
- public function getPath (): array
- {
- return $this->path;
- }
-
- /**
- * Returns the request type made by the client.
- *
- * @return string
- */
- public function getRequest (): string
- {
- return $this->request;
- }
-
- /**
- * Returns the information that is built from outside the request path.
- *
- * @return array
- */
- public function getContent (): array
- {
- return $this->content;
- }
-}
diff --git a/private/Model/Result.php b/private/Model/Result.php
deleted file mode 100644
index ac08821..0000000
--- a/private/Model/Result.php
+++ /dev/null
@@ -1,52 +0,0 @@
-<?php
-
-declare(strict_types=1);
-
-namespace AugustOffensive\Model;
-/**
- * Result object for storing information to send back to the client.
- */
-class Result
-{
- /** @var string $resultType the type of result to return to the client. */
- private $resultType;
-
- /** @var array $result */
- private $result;
-
- /**
- * Store result information.
- *
- * @param string $resultType The type of result to send back to the client.
- * @param array $result The result object to send back to the client.
- *
- * @return Result
- */
- public function __construct (string $resultType, array $result)
- {
- $this->resultType = $resultType;
- $this->result = $result;
-
- return $this;
- }
-
- /**
- * Returns the result type of the Result.
- *
- * @return string
- */
- public function getResultType (): string
- {
- return $this->resultType;
- }
-
- /**
- * Returns the result array of the Result.
- *
- * @return array
- */
- public function getResult (): array
- {
- return $this->result;
- }
-} \ No newline at end of file
diff --git a/private/Model/creds.php b/private/Model/creds.php
deleted file mode 100644
index 056d77b..0000000
--- a/private/Model/creds.php
+++ /dev/null
@@ -1,10 +0,0 @@
-<?php
-
-declare(strict_types=1);
-
-$cred = new \stdClass();
-$cred->host = "localhost";
-$cred->port = "5432";
-$cred->dbName = "";
-$cred->login = "";
-$cred->password = "";
diff --git a/private/Model/fresh.sql b/private/Model/fresh.sql
deleted file mode 100644
index f39b360..0000000
--- a/private/Model/fresh.sql
+++ /dev/null
@@ -1,103 +0,0 @@
- -- fresh.sql: SQL script that creates the tables used by AO
- -- please drop all tables in db before initiating unless told otherwise
-
- -- uncomment the following two lines to automatically drop all tables
---DROP SCHEMA "public" CASCADE;
---CREATE SCHEMA "public";
-
-CREATE OR REPLACE FUNCTION public.GETDATE() RETURNS TIMESTAMPTZ
- STABLE LANGUAGE SQL AS 'SELECT NOW()';
-
- -- base table for users
-CREATE TABLE users (
- userid SERIAL,
- email VARCHAR(40) UNIQUE NOT NULL,
- firstname VARCHAR(20) NOT NULL,
- lastname VARCHAR(20) NOT NULL,
- password VARCHAR(255) NOT NULL, -- intend to use bcrypt hash through PHP
- games INTEGER DEFAULT 0, -- simple tracking statistics
- wins INTEGER DEFAULT 0, -- "
- joindate DATE DEFAULT GETDATE(),
- activated BIT(1) DEFAULT B'0', -- see activation_keys table
- PRIMARY KEY (userid)
-);
-
- -- when activation is completed, key gets deleted and activated bit for user gets flipped to 1.
-CREATE TABLE activation_keys (
- code VARCHAR(128),
- userid SERIAL,
- PRIMARY KEY (code),
- CONSTRAINT activation_keys_userid
- FOREIGN KEY (userid) REFERENCES users(userid)
-);
-
- -- base table for games
-CREATE TABLE games (
- gameid SERIAL,
- title VARCHAR(140) NOT NULL,
- gametypeid SERIAL NOT NULL, -- future proofing: suppose different game types
- players SMALLINT NOT NULL, -- number of players in a game
- waitfor INTEGER NOT NULL, -- time in seconds to wait for player to complete a turn
- lastturn DATE DEFAULT GETDATE(),
- gamestate INTEGER DEFAULT 1,
- PRIMARY KEY (gameid)
-);
-
- -- associative table: many users, many games
-CREATE TABLE allegiances (
- gameid SERIAL,
- userid SERIAL,
- allegiance VARCHAR(140), -- important/unimportant role for user (depends on gametype)
- ordernum SMALLINT NOT NULL, -- user # spot in game
- playing SMALLINT DEFAULT 1, -- default is binary: 0 means player OOP
- PRIMARY KEY (gameid, userid),
- CONSTRAINT users_games_gameid
- FOREIGN KEY (gameid) REFERENCES games(gameid),
- CONSTRAINT users_games_userid
- FOREIGN KEY (userid) REFERENCES users(userid)
-);
-
- -- Regions are composed of nationstates
-CREATE TABLE regions (
- regionid SERIAL,
- name VARCHAR(64) NOT NULL,
- abbreviation CHAR(2),
- bonus INTEGER NOT NULL,
- PRIMARY KEY (regionid)
-);
-
- -- base table for nationstates
-CREATE TABLE nationstates (
- nationid SERIAL,
- regionid SERIAL,
- name VARCHAR(64) NOT NULL,
- abbreviation CHAR(4),
- PRIMARY KEY (nationid),
- CONSTRAINT nationstates_regionid
- FOREIGN KEY (regionid) REFERENCES regions(regionid)
-);
-
- -- nationstates border nationstates
-CREATE TABLE borders (
- nationid SERIAL,
- borderid SERIAL,
- PRIMARY KEY (nationid, borderid),
- CONSTRAINT borders_nationid
- FOREIGN KEY (nationid) REFERENCES nationstates(nationid),
- CONSTRAINT borders_borderid
- FOREIGN KEY (borderid) REFERENCES nationstates(nationid)
-);
-
- -- associative table: many games, many nationstates. Users control them.
-CREATE TABLE games_nationstates (
- gameid SERIAL,
- nationid SERIAL,
- userid SERIAL, -- owner of nationstate for particular game
- PRIMARY KEY (gameid, nationid),
- CONSTRAINT games_nationstates_gameid
- FOREIGN KEY (gameid) REFERENCES games(gameid),
- CONSTRAINT games_nationstates_nationid
- FOREIGN KEY (nationid) REFERENCES nationstates(nationid),
- CONSTRAINT games_nationstates_userid
- FOREIGN KEY (userid) REFERENCES users(userid)
-);
diff --git a/private/View/Main.php b/private/View/Main.php
deleted file mode 100644
index c51e91f..0000000
--- a/private/View/Main.php
+++ /dev/null
@@ -1,104 +0,0 @@
-<?php
-
-declare(strict_types=1);
-
-namespace AugustOffensive\View;
-
-use AugustOffensive\Controller;
-use AugustOffensive\Model;
-
-/**
- * Outputs the JSON result by communicating with the controller.
- */
-class Main
-{
- /** @var Model\Query $query the Query object that generated the request. */
- private $query;
-
- /** @var Model\Result $result the Result object to be sent to the client. */
- private $result;
-
- /** @var string TYPE The type of output the client should receive. */
- const TYPE = "json";
-
- /**
- * Prepares the output and environment for the front end of the service.
- *
- * @param Model\Connection $connection View "Needs to know" model exists.
- *
- * @return Result
- */
- public function __construct (Model\Connection $connection)
- {
- $this->query = Controller\Controller::createQuery(
- explode('/', trim($_SERVER['PATH_INFO'] ?? '/api', '/')),
- $_SERVER['REQUEST_METHOD'],
- $this->generateContent($_SERVER['REQUEST_METHOD'])
- );
-
- return $this;
- }
-
- /**
- * Generates the content of the query based on the request type.
- *
- * @param string $request The request method on which to base the content.
- *
- * @return array
- */
- public function generateContent (string $request): array
- {
- $content;
- switch ($request) {
- case "GET": // GET should always be empty
- case "POST": // POST contains moves, account info, etc.
- default:
- $content = $_REQUEST;
- }
- return $content;
- }
-
- /**
- * Communicates with the controller to generate the output.
- *
- * @return string
- */
- public function generateResult (): string
- {
- $path = $this->query->getPath();
- if (count($path) >= 1 && $path[0] === "api" && count($path) >= 2) {
- switch (strtolower($path[1])) {
- case "callback":
- $this->result = Controller\Controller::createResult(
- "CALLBACK",
- array(
- "path" => $path,
- "request" => $this->query->getRequest(),
- "content" => $this->query->getContent()
- )
- );
- break;
- default:
- $this->result = Controller\Controller::createResult("NOT_UNDERSTOOD", array($path));
- break;
- }
- } else {
- $this->result = Controller\Controller::createResult("NOT_UNDERSTOOD", array($path));
- }
-
- return self::generateOutput($this->result);
- }
-
- /**
- * Creates output of the result based on the defined constant TYPE.
- *
- * @param Model\Result $result The result to be sent to the client.
- *
- * @return string
- */
- public static function generateOutput (Model\Result $result): string
- {
- $type = self::TYPE;
- return Output::$type($result);
- }
-}
diff --git a/private/View/Output.php b/private/View/Output.php
deleted file mode 100644
index af9975e..0000000
--- a/private/View/Output.php
+++ /dev/null
@@ -1,28 +0,0 @@
-<?php
-
-declare(strict_types=1);
-
-namespace AugustOffensive\View;
-
-use AugustOffensive\Model;
-
-/**
- * Output formats for Results that are returned to the client.
- */
-class Output
-{
- /**
- * Formats the result into JSON.
- *
- * @param Model\Result $result The result to return to the client.
- *
- * @return string
- */
- public static function json (Model\Result $result): string
- {
- return json_encode(array(
- "Result-Type" => $result->getResultType(),
- "Content" => $result->getResult()
- ));
- }
-}