From e4e754da1883b73be2a8da43d437207e0b9454e7 Mon Sep 17 00:00:00 2001 From: Graphictoria Date: Sat, 2 Oct 2021 14:48:14 -0400 Subject: [PATCH] Groundwork for games. --- web/app/Http/Controllers/GamesController.php | 27 ++++++++++++ web/app/Models/Games.php | 11 +++++ web/app/Models/WebStatus.php | 15 +++++++ ...21_10_02_145224_create_webstatus_table.php | 34 +++++++++++++++ .../2021_10_02_151112_create_games_table.php | 40 ++++++++++++++++++ web/database/seeders/DatabaseSeeder.php | 6 ++- web/database/seeders/WebStatusSeeder.php | 26 ++++++++++++ web/public/images/symbols/warning.png | Bin 0 -> 34816 bytes web/resources/js/components/Footer.js | 2 +- web/resources/js/layouts/App.js | 6 +++ web/resources/js/pages/Errors.js | 2 +- web/resources/js/pages/Games.js | 29 +++++++++++++ web/resources/js/pages/Home.js | 2 +- web/routes/api.php | 3 ++ 14 files changed, 199 insertions(+), 4 deletions(-) create mode 100644 web/app/Http/Controllers/GamesController.php create mode 100644 web/app/Models/Games.php create mode 100644 web/app/Models/WebStatus.php create mode 100644 web/database/migrations/2021_10_02_145224_create_webstatus_table.php create mode 100644 web/database/migrations/2021_10_02_151112_create_games_table.php create mode 100644 web/database/seeders/WebStatusSeeder.php create mode 100644 web/public/images/symbols/warning.png create mode 100644 web/resources/js/pages/Games.js diff --git a/web/app/Http/Controllers/GamesController.php b/web/app/Http/Controllers/GamesController.php new file mode 100644 index 0000000..fb5ab2f --- /dev/null +++ b/web/app/Http/Controllers/GamesController.php @@ -0,0 +1,27 @@ +first(); + + return response()->json(['available' => $status->operational]) + ->header('Access-Control-Allow-Origin', env('APP_URL')) + ->header('Vary', 'origin') + ->header('Content-Type', 'application/json'); + } +} diff --git a/web/app/Models/Games.php b/web/app/Models/Games.php new file mode 100644 index 0000000..616ab8e --- /dev/null +++ b/web/app/Models/Games.php @@ -0,0 +1,11 @@ + 'boolean', + ]; + + use HasFactory; +} diff --git a/web/database/migrations/2021_10_02_145224_create_webstatus_table.php b/web/database/migrations/2021_10_02_145224_create_webstatus_table.php new file mode 100644 index 0000000..46bb40e --- /dev/null +++ b/web/database/migrations/2021_10_02_145224_create_webstatus_table.php @@ -0,0 +1,34 @@ +id(); + $table->string('name'); + $table->boolean('operational')->default(false); + $table->float('responseTime')->default(0); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('web_statuses'); + } +} diff --git a/web/database/migrations/2021_10_02_151112_create_games_table.php b/web/database/migrations/2021_10_02_151112_create_games_table.php new file mode 100644 index 0000000..5855d5f --- /dev/null +++ b/web/database/migrations/2021_10_02_151112_create_games_table.php @@ -0,0 +1,40 @@ +id(); + $table->string('name'); + $table->string('description')->nullable(); + $table->unsignedInteger('creator'); + $table->enum('status', ['unmoderated', 'review', 'deleted'])->default('unmoderated'); + $table->unsignedInteger('genre')->default(0); // bitwise flags + $table->unsignedInteger('allowed_gears')->default(0); // bitwise flags + $table->unsignedInteger('players_ingame')->default(0); + $table->unsignedInteger('visits')->default(0); + $table->unsignedInteger('max_players')->default(0); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('games'); + } +} diff --git a/web/database/seeders/DatabaseSeeder.php b/web/database/seeders/DatabaseSeeder.php index 57b73b5..ed4c823 100644 --- a/web/database/seeders/DatabaseSeeder.php +++ b/web/database/seeders/DatabaseSeeder.php @@ -4,6 +4,8 @@ namespace Database\Seeders; use Illuminate\Database\Seeder; +use Database\Seeders\WebStatusSeeder; + class DatabaseSeeder extends Seeder { /** @@ -13,6 +15,8 @@ class DatabaseSeeder extends Seeder */ public function run() { - // \App\Models\User::factory(10)->create(); + $this->call([ + WebStatusSeeder::class + ]); } } diff --git a/web/database/seeders/WebStatusSeeder.php b/web/database/seeders/WebStatusSeeder.php new file mode 100644 index 0000000..1aae9e7 --- /dev/null +++ b/web/database/seeders/WebStatusSeeder.php @@ -0,0 +1,26 @@ + 'ThumbArbiter' + ]); + + WebStatus::create([ + 'name' => 'GamesArbiter' + ]); + } +} diff --git a/web/public/images/symbols/warning.png b/web/public/images/symbols/warning.png new file mode 100644 index 0000000000000000000000000000000000000000..53b4368a6be437e7093cd8956bf6da4b214c0776 GIT binary patch literal 34816 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 literal 0 HcmV?d00001 diff --git a/web/resources/js/components/Footer.js b/web/resources/js/components/Footer.js index 0e0d301..28576e7 100644 --- a/web/resources/js/components/Footer.js +++ b/web/resources/js/components/Footer.js @@ -21,7 +21,7 @@ const Footer = () => {

| | | | |


Copyright © {CurrentDate.getFullYear()} Graphictoria. All rights reserved.

-

Graphictoria is not associated with ROBLOX Corporation. The usage of this website signifies your acceptance of the and our .

+

Graphictoria is not affiliated with or sponsored by Roblox Corporation. The usage of this website signifies your acceptance of the and our .

Twitter Discord diff --git a/web/resources/js/layouts/App.js b/web/resources/js/layouts/App.js index 57e8d4f..a300692 100644 --- a/web/resources/js/layouts/App.js +++ b/web/resources/js/layouts/App.js @@ -16,6 +16,8 @@ import { Auth } from '../Pages/Auth.js'; import { NotFound, InternalServerError } from '../Pages/Errors.js'; import { Maintenance } from '../Pages/Maintenance.js'; +import { Games } from '../Pages/Games.js'; + import { About } from '../Pages/Legal/About.js'; import { Copyright } from '../Pages/Legal/Copyright.js'; import { Privacy } from '../Pages/Legal/Privacy.js'; @@ -114,6 +116,10 @@ class App extends React.Component { + + + + diff --git a/web/resources/js/pages/Errors.js b/web/resources/js/pages/Errors.js index 3918677..fcdac3b 100644 --- a/web/resources/js/pages/Errors.js +++ b/web/resources/js/pages/Errors.js @@ -74,4 +74,4 @@ class InternalServerError extends React.Component { } } -export { NotFound, InternalServerError }; \ No newline at end of file +export { NotFound, InternalServerError, GenericErrorModal }; \ No newline at end of file diff --git a/web/resources/js/pages/Games.js b/web/resources/js/pages/Games.js new file mode 100644 index 0000000..01465ec --- /dev/null +++ b/web/resources/js/pages/Games.js @@ -0,0 +1,29 @@ +// © XlXi 2021 +// Graphictoria 5 + +import React from "react"; +import { Link, useHistory } from "react-router-dom"; + +import SetTitle from "../Helpers/Title.js"; + +import { GenericErrorModal } from './Errors.js'; + +class Games extends React.Component { + componentDidMount() + { + SetTitle("Games"); + } + + render() + { + return ( + + +
+ Seems like XlXi tripped over the game server's power cord again. Games are temporarily unavailable and administrators have been notified of the issue. Sorry for the inconvenience! +
+ ); + } +} + +export { Games }; \ No newline at end of file diff --git a/web/resources/js/pages/Home.js b/web/resources/js/pages/Home.js index 344f5ff..202d1bd 100644 --- a/web/resources/js/pages/Home.js +++ b/web/resources/js/pages/Home.js @@ -21,7 +21,7 @@ class Home extends React.Component {

Graphictoria

Graphictoria aims to revive the classic Roblox experience. Join 5k+ other users and relive your childhood!
-

* Graphictoria is not affiliated with Roblox Corporation.

+

* Graphictoria is not affiliated with or sponsored by Roblox Corporation.

Create your account
diff --git a/web/routes/api.php b/web/routes/api.php index 0f5cd37..7aafa4e 100644 --- a/web/routes/api.php +++ b/web/routes/api.php @@ -3,6 +3,7 @@ use Illuminate\Http\Request; use Illuminate\Support\Facades\Route; use App\Http\Controllers\BannerController; +use App\Http\Controllers\GamesController; /* |-------------------------------------------------------------------------- @@ -21,6 +22,8 @@ Route::get('/', function () { Route::get('/web/activebanners', [BannerController::class, 'getBanners']); +Route::get('/web/games/status', [GamesController::class, 'isAvailable']); + Route::fallback(function () { return response('{"errors":[{"code":404,"message":"NotFound"}]}', 404) ->header('Cache-Control', 'private')