Added eloquent and phinx to project to handle database interactions and migrations; added Result model for storing benchmark results
This commit is contained in:
		| @@ -19,6 +19,9 @@ | ||||
|         "slim/slim": "^4.11", | ||||
|         "slim/psr7": "^1.6", | ||||
|         "php-di/php-di": "^6.4", | ||||
|         "slim/twig-view": "^3.3" | ||||
|         "slim/twig-view": "^3.3", | ||||
|         "illuminate/database": "^9.41", | ||||
|         "robmorgan/phinx": "^0.13.1", | ||||
|         "hassankhan/config": "^3.0" | ||||
|     } | ||||
| } | ||||
|   | ||||
							
								
								
									
										1910
									
								
								composer.lock
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										1910
									
								
								composer.lock
									
									
									
										generated
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										6
									
								
								conf/defaults.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								conf/defaults.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,6 @@ | ||||
| { | ||||
|   "database": { | ||||
|     "driver": "sqlite", | ||||
|     "database": "./data/colossus.db" | ||||
|   } | ||||
| } | ||||
							
								
								
									
										32
									
								
								db/migrations/20221125213226_add_results_table.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								db/migrations/20221125213226_add_results_table.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,32 @@ | ||||
| <?php | ||||
| declare(strict_types=1); | ||||
|  | ||||
| use Phinx\Migration\AbstractMigration; | ||||
|  | ||||
| final class AddResultsTable extends AbstractMigration | ||||
| { | ||||
|     /** | ||||
|      * Change Method. | ||||
|      * | ||||
|      * Write your reversible migrations using this method. | ||||
|      * | ||||
|      * More information on writing migrations is available here: | ||||
|      * https://book.cakephp.org/phinx/0/en/migrations.html#the-change-method | ||||
|      * | ||||
|      * Remember to call "create()" or "update()" and NOT "save()" when working | ||||
|      * with the Table class. | ||||
|      */ | ||||
|     public function change() | ||||
|     { | ||||
|         $table = $this->table('results'); | ||||
|         $table->addColumn('component', 'string', ['null' => false]) | ||||
|             ->addColumn('benchmark', 'text', ['null' => false]) | ||||
|             ->addColumn('type', 'string', ['null' => false, 'default' => 'fps']) | ||||
|             ->addColumn('average', 'integer', ['null' => false]) | ||||
|             ->addColumn('minimum', 'integer') | ||||
|             ->addColumn('maximum', 'integer') | ||||
|             ->addTimestamps() | ||||
|             ->addIndex(['component', 'benchmark', 'type']) | ||||
|             ->create(); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										37
									
								
								phinx.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								phinx.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,37 @@ | ||||
| <?php | ||||
|  | ||||
| return | ||||
| [ | ||||
|     'paths' => [ | ||||
|         'migrations' => '%%PHINX_CONFIG_DIR%%/db/migrations', | ||||
|         'seeds' => '%%PHINX_CONFIG_DIR%%/db/seeds' | ||||
|     ], | ||||
|     'environments' => [ | ||||
|         'default_migration_table' => 'phinxlog', | ||||
|         'default_environment' => 'development', | ||||
|         'production' => [ | ||||
|             'adapter' => 'mysql', | ||||
|             'host' => 'localhost', | ||||
|             'name' => 'production_db', | ||||
|             'user' => 'root', | ||||
|             'pass' => '', | ||||
|             'port' => '3306', | ||||
|             'charset' => 'utf8', | ||||
|         ], | ||||
|         'development' => [ | ||||
|             'adapter' => 'sqlite', | ||||
| 	    'name' => './data/colossus', | ||||
| 	    'suffix' => '.db', | ||||
|         ], | ||||
|         'testing' => [ | ||||
|             'adapter' => 'mysql', | ||||
|             'host' => 'localhost', | ||||
|             'name' => 'testing_db', | ||||
|             'user' => 'root', | ||||
|             'pass' => '', | ||||
|             'port' => '3306', | ||||
|             'charset' => 'utf8', | ||||
|         ] | ||||
|     ], | ||||
|     'version_order' => 'creation' | ||||
| ]; | ||||
| @@ -6,12 +6,17 @@ use Psr\Http\Message\ResponseInterface as Response; | ||||
| use Psr\Http\Message\ServerRequestInterface as Request; | ||||
| use Slim\Routing\RouteContext; | ||||
| use Slim\Views\Twig; | ||||
| use BitGoblin\Colossus\Models\Result; | ||||
|  | ||||
| class ResultController extends Controller { | ||||
|  | ||||
|   public function getList(Request $request, Response $response): Response { | ||||
|     $results = Result::all(); | ||||
|  | ||||
|     $view = Twig::fromRequest($request); | ||||
|     return $view->render($response, 'result/list.twig'); | ||||
|     return $view->render($response, 'result/list.twig', [ | ||||
|       'results' => $results, | ||||
|     ]); | ||||
|   } | ||||
|  | ||||
|   public function getAdd(Request $request, Response $response): Response { | ||||
| @@ -20,7 +25,17 @@ class ResultController extends Controller { | ||||
|   } | ||||
|  | ||||
|   public function postAdd(Request $request, Response $response): Response { | ||||
|     // will add data to database later... | ||||
|     $params = (array)$request->getParsedBody(); | ||||
|  | ||||
|     $result = new Result; | ||||
|     $result->component = $params['result_component']; | ||||
|     $result->benchmark = $params['result_benchmark']; | ||||
|     $result->type = $params['result_type']; | ||||
|     $result->average = $params['result_avg']; | ||||
|     $result->minimum = $params['result_min']; | ||||
|     $result->maximum = $params['result_max']; | ||||
|  | ||||
|     $result->save(); | ||||
|  | ||||
|     // redirect the user back to the home page | ||||
|     $routeContext = RouteContext::fromRequest($request); | ||||
|   | ||||
							
								
								
									
										18
									
								
								src/Models/Result.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								src/Models/Result.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,18 @@ | ||||
| <?php | ||||
|  | ||||
| namespace BitGoblin\Colossus\Models; | ||||
|  | ||||
| use Illuminate\Database\Eloquent\Model; | ||||
|  | ||||
| class Result extends Model { | ||||
|  | ||||
|   protected $fillable = [ | ||||
|     'component', | ||||
|     'benchmark', | ||||
|     'type', | ||||
|     'average', | ||||
|     'minimum', | ||||
|     'maximum', | ||||
|   ]; | ||||
|  | ||||
| } | ||||
							
								
								
									
										13
									
								
								src/app.php
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								src/app.php
									
									
									
									
									
								
							| @@ -1,6 +1,8 @@ | ||||
| <?php | ||||
|  | ||||
| use DI\Container; | ||||
| use Noodlehaus\Config; | ||||
| use Noodlehaus\Parser\Json; | ||||
| use Psr\Http\Message\ResponseInterface as Response; | ||||
| use Psr\Http\Message\ServerRequestInterface as Request; | ||||
| use Slim\Factory\AppFactory; | ||||
| @@ -9,8 +11,17 @@ use Slim\Views\TwigMiddleware; | ||||
|  | ||||
| require __DIR__ . '/../vendor/autoload.php'; | ||||
|  | ||||
| // Create Container using PHP-DI | ||||
| // Load app configuration | ||||
| $config = Config::load(__DIR__ . '/../conf/defaults.json'); | ||||
|  | ||||
| // Create new container object and add our config object to it | ||||
| $container = new Container(); | ||||
| $container->set('config', function () use ($config) { | ||||
|   return $config; | ||||
| }); | ||||
|  | ||||
| // Load database configuration | ||||
| require_once __DIR__ . '/database.php'; | ||||
|  | ||||
| // Set container to create App with on AppFactory | ||||
| AppFactory::setContainer($container); | ||||
|   | ||||
							
								
								
									
										10
									
								
								src/database.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								src/database.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,10 @@ | ||||
| <?php | ||||
|  | ||||
| $capsule = new \Illuminate\Database\Capsule\Manager; | ||||
| $capsule->addConnection($config->get('database')); | ||||
| $capsule->setAsGlobal(); | ||||
| $capsule->bootEloquent(); | ||||
|  | ||||
| $container->set('db', function () use ($capsule) { | ||||
|   return $capsule; | ||||
| }); | ||||
| @@ -46,7 +46,7 @@ | ||||
|         </div> | ||||
|       </div> | ||||
|  | ||||
|       <input class="button button-primary" type="submit" value="Submit"> | ||||
|       <input class="button button-primary u-full-width" type="submit" value="Submit"> | ||||
|     </form> | ||||
|   </div> | ||||
| </div> | ||||
|   | ||||
| @@ -4,4 +4,29 @@ | ||||
|  | ||||
| {% block content %} | ||||
|   <p>Results list...</p> | ||||
|  | ||||
|   <table class="u-full-width"> | ||||
|     <thead> | ||||
|       <tr> | ||||
|         <th>Hardware name</th> | ||||
|         <th>Benchmark</th> | ||||
|         <th>Result type</th> | ||||
|         <th>Avg.</th> | ||||
|         <th>Min.</th> | ||||
|         <th>Max.</th> | ||||
|       </tr> | ||||
|     </thead> | ||||
|     <tbody> | ||||
|       {% for r in results %} | ||||
|         <tr> | ||||
|           <td>{{ r.component }}</td> | ||||
|           <td>{{ r.benchmark }}</td> | ||||
|           <td>{{ r.type | capitalize }}</td> | ||||
|           <td>{{ r.average }}</td> | ||||
|           <td>{{ r.minimum ? r.minimum : 'N/a' }}</td> | ||||
|           <td>{{ r.maximum ? r.maximum : 'N/a' }}</td> | ||||
|         </tr> | ||||
|       {% endfor %} | ||||
|     </tbody> | ||||
|   </table> | ||||
| {% endblock %} | ||||
|   | ||||
		Reference in New Issue
	
	Block a user