Compare commits

..

5 Commits
dev ... patch-2

Author SHA1 Message Date
nabeelio
db34d0e3e7 Add test for METAR string 2021-03-15 09:14:39 -04:00
Nabeel S
fffbab7201 Merge branch 'dev' into patch-2 2021-03-15 08:30:29 -04:00
B.Fatih KOZ
76a2a16fa6 Merge branch 'dev' into patch-2 2021-03-14 03:54:53 +03:00
B.Fatih KOZ
cfbd1c901a Merge branch 'dev' into patch-2 2021-03-10 04:53:25 +03:00
B.Fatih KOZ
617813bdbf Fix Metar Decoding / Wind check for Wind Chill
PR aims to fix the bug #1071 by checking both the wind speed and it's value for starting Wind Chill calculation.
2021-03-09 16:06:39 +03:00
734 changed files with 49891 additions and 46019 deletions

View File

@@ -15,10 +15,7 @@ declare -a remove_files=(
.idea .idea
.travis .travis
docker docker
node_modules
vendor/willdurand/geocoder/tests
_ide_helper.php _ide_helper.php
.env
.dockerignore .dockerignore
.dpl .dpl
.editorconfig .editorconfig
@@ -26,7 +23,6 @@ declare -a remove_files=(
.eslintrc .eslintrc
.php_cs .php_cs
.php_cs.cache .php_cs.cache
.php-cs-fixer.php
.phpstorm.meta.php .phpstorm.meta.php
.styleci.yml .styleci.yml
.phpunit.result.cache .phpunit.result.cache
@@ -34,15 +30,15 @@ declare -a remove_files=(
intellij_style.xml intellij_style.xml
config.php config.php
docker-compose.yml docker-compose.yml
docker-compose.local.yml
Makefile Makefile
phpcs.xml phpcs.xml
phpunit.xml phpunit.xml
phpvms.iml phpvms.iml
Procfile Procfile
phpstan.neon phpstan.neon
symfony.lock node_modules
composer.phar composer.phar
vendor/willdurand/geocoder/tests
) )
for file in "${remove_files[@]}"; do for file in "${remove_files[@]}"; do
@@ -73,25 +69,13 @@ mkdir -p storage/framework/views
cd /tmp cd /tmp
echo "Current directory contents"
ls -al $BASE_DIR
echo "Parent directory contents"
ls -al $BASE_DIR/../ ls -al $BASE_DIR/../
echo "Calling find" tar -czf $TAR_NAME -C $BASE_DIR .
find $BASE_DIR/../ -type d -maxdepth 2
tar -czf $TAR_NAME -C $BASE_DIR --xform 's:^\./::' . [--show-transformed-names|--show-stored-names]
sha256sum $TAR_NAME >"$TAR_NAME.sha256" sha256sum $TAR_NAME >"$TAR_NAME.sha256"
tar2zip $TAR_NAME
cd $BASE_DIR;
zip -r $ZIP_NAME ./
sha256sum $ZIP_NAME >"$ZIP_NAME.sha256" sha256sum $ZIP_NAME >"$ZIP_NAME.sha256"
mv $ZIP_NAME /tmp
mv "$ZIP_NAME.sha256" /tmp
ls -al /tmp ls -al /tmp
echo "Moving to dist" echo "Moving to dist"

View File

@@ -8,7 +8,7 @@ APP_LOCALE="en"
PHPVMS_INSTALLED="true" PHPVMS_INSTALLED="true"
APP_LOG="daily" APP_LOG="daily"
LOG_LEVEL="debug" APP_LOG_LEVEL="debug"
APP_LOG_MAX_FILES="3" APP_LOG_MAX_FILES="3"
DB_CONNECTION="mysql" DB_CONNECTION="mysql"

View File

@@ -2,12 +2,12 @@ name: 'Build'
on: ['push', 'pull_request', 'workflow_dispatch', 'release'] on: ['push', 'pull_request', 'workflow_dispatch', 'release']
jobs: jobs:
build: build:
runs-on: ubuntu-20.04 runs-on: ubuntu-18.04
if: github.repository == 'nabeelio/phpvms' if: github.repository == 'nabeelio/phpvms'
strategy: strategy:
fail-fast: true fail-fast: true
matrix: matrix:
php-versions: ['8.0', '8.1'] php-versions: ['7.3', '7.4']
name: PHP ${{ matrix.php-versions }} name: PHP ${{ matrix.php-versions }}
env: env:
extensions: intl, pcov, mbstring extensions: intl, pcov, mbstring
@@ -41,6 +41,7 @@ jobs:
with: with:
path: ${{ steps.composer-cache.outputs.dir }} path: ${{ steps.composer-cache.outputs.dir }}
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
restore-keys: ${{ runner.os }}-composer-
# Configure PHP # Configure PHP
- name: Setup PHP - name: Setup PHP
@@ -69,7 +70,6 @@ jobs:
run: | run: |
php --version php --version
mysql --version mysql --version
sleep 15
# Downgrade composer version to 1.x # Downgrade composer version to 1.x
composer install --dev --no-interaction --verbose composer install --dev --no-interaction --verbose
cp .github/scripts/env.php env.php cp .github/scripts/env.php env.php
@@ -79,8 +79,7 @@ jobs:
- name: Run Tests - name: Run Tests
run: | run: |
export PHP_CS_FIXER_IGNORE_ENV=1 vendor/bin/php-cs-fixer fix --config=.php_cs -v --dry-run --diff --using-cache=no
#vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.php -v --dry-run --diff --using-cache=no
vendor/bin/phpunit --debug --verbose vendor/bin/phpunit --debug --verbose
# This runs after all of the tests, run have run. Creates a cleaned up version of the # This runs after all of the tests, run have run. Creates a cleaned up version of the
@@ -88,7 +87,7 @@ jobs:
artifacts: artifacts:
name: 'Create dev build' name: 'Create dev build'
needs: build needs: build
runs-on: ubuntu-20.04 runs-on: 'ubuntu-18.04'
if: github.ref == 'refs/heads/master' || github.ref == 'refs/heads/dev' if: github.ref == 'refs/heads/master' || github.ref == 'refs/heads/dev'
steps: steps:
- name: Checkout - name: Checkout
@@ -97,7 +96,7 @@ jobs:
- name: Setup PHP - name: Setup PHP
uses: shivammathur/setup-php@v2 uses: shivammathur/setup-php@v2
with: with:
php-version: '8.0' php-version: '7.4'
- uses: olegtarasov/get-tag@v2.1 - uses: olegtarasov/get-tag@v2.1
id: tagName id: tagName
@@ -118,6 +117,7 @@ jobs:
- name: 'Install Release Dependencies' - name: 'Install Release Dependencies'
run: | run: |
rm -rf vendor rm -rf vendor
sudo npm i tar-to-zip -g
composer install --no-dev --prefer-dist --no-interaction --verbose composer install --no-dev --prefer-dist --no-interaction --verbose
sudo chmod +x ./.github/scripts/* sudo chmod +x ./.github/scripts/*
@@ -150,7 +150,7 @@ jobs:
release: release:
name: 'Create Release' name: 'Create Release'
needs: build needs: build
runs-on: ubuntu-20.04 runs-on: 'ubuntu-18.04'
if: startsWith(github.ref, 'refs/tags/') if: startsWith(github.ref, 'refs/tags/')
steps: steps:
- name: Checkout - name: Checkout
@@ -159,7 +159,7 @@ jobs:
- name: Setup PHP - name: Setup PHP
uses: shivammathur/setup-php@v2 uses: shivammathur/setup-php@v2
with: with:
php-version: 8.0 php-version: '7.4'
- uses: olegtarasov/get-tag@v2.1 - uses: olegtarasov/get-tag@v2.1
id: tagName id: tagName
@@ -180,6 +180,7 @@ jobs:
- name: 'Install Release Dependencies' - name: 'Install Release Dependencies'
run: | run: |
rm -rf vendor rm -rf vendor
sudo npm i tar-to-zip -g
composer install --no-dev --prefer-dist --no-interaction --verbose composer install --no-dev --prefer-dist --no-interaction --verbose
sudo chmod +x ./.github/scripts/* sudo chmod +x ./.github/scripts/*

13
.gitignore vendored
View File

@@ -22,7 +22,6 @@ storage/*.sqlite
.env.*.php .env.*.php
.env.php .env.php
.env .env
.env.*
.env.bak .env.bak
env.php env.php
.env.generated .env.generated
@@ -75,16 +74,4 @@ error_log
.sass-cache .sass-cache
.DS_Store .DS_Store
/config.php /config.php
/config.bak.php
/VERSION /VERSION
sync.sh
###> friendsofphp/php-cs-fixer ###
/.php-cs-fixer.php
/.php-cs-fixer.cache
###< friendsofphp/php-cs-fixer ###
###> phpunit/phpunit ###
/phpunit.xml
.phpunit.result.cache
###< phpunit/phpunit ###

View File

@@ -28,8 +28,6 @@ RedirectMatch 403 ^/composer.phar
RedirectMatch 403 ^/env.php.*?$ RedirectMatch 403 ^/env.php.*?$
RedirectMatch 403 ^/env.php RedirectMatch 403 ^/env.php
RedirectMatch 403 ^/env.php$ RedirectMatch 403 ^/env.php$
RedirectMatch 403 ^/config.php$
RedirectMatch 403 ^/config.bak.php$
RedirectMatch 403 ^/Makefile RedirectMatch 403 ^/Makefile
RedirectMatch 403 ^/package.json RedirectMatch 403 ^/package.json
RedirectMatch 403 ^/package-lock.json RedirectMatch 403 ^/package-lock.json

View File

@@ -1,69 +0,0 @@
<?php
declare(strict_types=1);
/*
* This file is part of PHP CS Fixer.
*
* (c) Fabien Potencier <fabien@symfony.com>
* Dariusz Rumiński <dariusz.ruminski@gmail.com>
*
* This source file is subject to the MIT license that is bundled
* with this source code in the file LICENSE.
*/
$header = <<<'EOF'
This file is part of PHP CS Fixer.
(c) Fabien Potencier <fabien@symfony.com>
Dariusz Rumiński <dariusz.ruminski@gmail.com>
This source file is subject to the MIT license that is bundled
with this source code in the file LICENSE.
EOF;
$finder = PhpCsFixer\Finder::create()
->ignoreVCSIgnored(true)
->exclude('tests/data')
->exclude('storage')
->exclude('resources')
->in(__DIR__)
->append([
__DIR__.'/dev-tools/doc.php',
// __DIR__.'/php-cs-fixer', disabled, as we want to be able to run bootstrap file even on lower PHP version, to show nice message
__FILE__,
])
;
$config = new PhpCsFixer\Config();
$config
->setRiskyAllowed(true)
->setRules([
'@PSR2' => true,
'strict_param' => true,
'no_php4_constructor' => true,
'no_extra_blank_lines' => true,
'no_superfluous_elseif' => true,
'single_line_comment_style' => false,
'simple_to_complex_string_variable' => true,
'array_syntax' => [
'syntax' => 'short',
],
'binary_operator_spaces' => [
'operators' => [
'=>' => 'align_single_space_minimal'
]
],
/*
'blank_line_before_statement' => [
'statements' => [
'declare',
'for',
'return',
'throw',
'try',
],
],
*/
])
->setFinder($finder);
return $config;

37
.php_cs Normal file
View File

@@ -0,0 +1,37 @@
<?php
$finder = PhpCsFixer\Finder::create()
->in('app')
->in('config');
return PhpCsFixer\Config::create()
->setHideProgress(true)
->setUsingCache(false)
->setRiskyAllowed(true)
->setRules([
'@PSR2' => true,
'strict_param' => true,
'no_php4_constructor' => true,
'no_extra_blank_lines' => true,
'no_superfluous_elseif' => true,
'single_line_comment_style' => false,
'simple_to_complex_string_variable' => true,
'array_syntax' => [
'syntax' => 'short',
],
'binary_operator_spaces' => [
'align_double_arrow' => true,
],
/*
'blank_line_before_statement' => [
'statements' => [
'declare',
'for',
'return',
'throw',
'try',
],
],
*/
])
->setFinder($finder);

View File

@@ -1,35 +1,28 @@
FROM php:8.1-fpm-alpine3.15 FROM php:7.4-fpm-alpine
WORKDIR /var/www/ WORKDIR /var/www/
# Setup composer RUN apk add gmp-dev
COPY --from=composer:2.2.7 /usr/bin/composer /usr/local/bin/composer RUN curl --silent --show-error https://getcomposer.org/installer | php
RUN apk add gmp-dev icu-dev zlib-dev libpng-dev libzip-dev zip
# Copy any config files in # Copy any config files in
COPY resources/docker/php/ext-opcache.ini $PHP_INI_DIR/conf.d/ COPY resources/docker/php/ext-opcache.ini $PHP_INI_DIR/conf.d/
COPY resources/docker/php/www.conf /usr/local/etc/php-fpm.d/www.conf COPY resources/docker/php/www.conf /usr/local/etc/php-fpm.d/www.conf
RUN ln -sf /dev/stderr /var/log/fpm-error.log
RUN docker-php-ext-install \ RUN docker-php-ext-install \
calendar \ calendar \
intl \
pdo_mysql \ pdo_mysql \
gd \
gmp \ gmp \
bcmath \ opcache && \
opcache \ docker-php-ext-enable pdo_mysql opcache
zip && \
docker-php-ext-enable pdo_mysql opcache bcmath zip intl
COPY . /var/www/ COPY . /var/www/
RUN composer install \ RUN php composer.phar install \
--ignore-platform-reqs \ --ignore-platform-reqs \
--no-interaction \ --no-interaction \
--no-plugins \ --no-plugins \
--no-scripts \ --no-scripts \
--prefer-dist --prefer-dist
#RUN chown -R www-data:www-data /var/www
EXPOSE 9000 EXPOSE 9000

View File

@@ -1,3 +1,5 @@
BSD 3-Clause License
Copyright (c) 2017, phpvms - http://www.phpvms.net Copyright (c) 2017, phpvms - http://www.phpvms.net
All rights reserved. All rights reserved.
@@ -15,9 +17,6 @@ modification, are permitted provided that the following conditions are met:
contributors may be used to endorse or promote products derived from contributors may be used to endorse or promote products derived from
this software without specific prior written permission. this software without specific prior written permission.
* A "powered by phpvms" is required in page footers, unless the license has
purchased to omit it.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE

View File

@@ -80,7 +80,11 @@ test:
.PHONY: phpcs .PHONY: phpcs
phpcs: phpcs:
@PHP_CS_FIXER_IGNORE_ENV=1 vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.php -v --dry-run --diff --using-cache=no @vendor/bin/php-cs-fixer fix --config=.php_cs -v --diff --diff-format=udiff --dry-run
#.PHONY: phpstan
#phpstan:
# vendor/bin/phpstan analyse -c phpstan.neon -v --level 2 app
.PHONY: replay-acars .PHONY: replay-acars
replay-acars: replay-acars:
@@ -91,6 +95,11 @@ replay-acars:
sass-watch: sass-watch:
sass --watch public/assets/admin/sass/paper-dashboard.scss:public/assets/admin/css/paper-dashboard.css sass --watch public/assets/admin/sass/paper-dashboard.scss:public/assets/admin/css/paper-dashboard.css
.PHONY: schema
schema:
#php artisan infyom:scaffold Aircraft --fieldsFile=database/schema/aircraft.json
echo ""
.PHONY: deploy-package .PHONY: deploy-package
deploy-package: deploy-package:
./.travis/deploy_script.sh ./.travis/deploy_script.sh
@@ -100,9 +109,17 @@ reset-installer:
@php artisan database:create --reset @php artisan database:create --reset
@php artisan migrate:refresh --seed @php artisan migrate:refresh --seed
.PHONY: docker-test .PHONY: docker
docker-test: docker:
@docker compose -f docker-compose.dev.yml up @mkdir -p $(CURR_PATH)/tmp/mysql
-docker rm -f phpvms
docker build -t phpvms .
docker run --name=phpvms \
-v $(CURR_PATH):/var/www/ \
-v $(CURR_PATH)/tmp/mysql:/var/lib/mysql \
-p 8080:80 \
phpvms
.PHONY: docker-clean .PHONY: docker-clean
docker-clean: docker-clean:

View File

@@ -11,7 +11,7 @@ A full distribution, with all of the composer dependencies, is available at this
### Requirements ### Requirements
- PHP 8.0+, extensions: - PHP 7.3+, extensions:
- cURL - cURL
- JSON - JSON
- mbstring - mbstring
@@ -30,16 +30,15 @@ A full distribution, with all of the composer dependencies, is available at this
[View installation details](https://docs.phpvms.net/installation/installation) [View installation details](https://docs.phpvms.net/installation/installation)
## Development Environment with Docker ## Development Environment
A full development environment can be brought up using Docker, without having to install composer/npm locally A full development environment can be brought up using Docker:
```bash ```bash
make docker-test composer install
npm install
# **OR** with docker-compose directly docker-compose build
docker-compose up
docker-compose -f docker-compose.yml -f docker-compose.dev.yml up
``` ```
Then go to `http://localhost`. If you're using dnsmasq, the `app` container is listening on `phpvms.test`, or you can add to your `/etc/hosts` file: Then go to `http://localhost`. If you're using dnsmasq, the `app` container is listening on `phpvms.test`, or you can add to your `/etc/hosts` file:
@@ -48,8 +47,6 @@ Then go to `http://localhost`. If you're using dnsmasq, the `app` container is l
127.0.0.1 phpvms.test 127.0.0.1 phpvms.test
``` ```
The `docker-compose.local.yml` overrides the `app` section in `docker-compose.yml`. The standard `docker-compose.yml` can be used if you want to deploy from the image, or as a template for your own Dockerized deployments.
### Building JS/CSS assets ### Building JS/CSS assets
Yarn is required, run: Yarn is required, run:

View File

@@ -17,25 +17,25 @@ class AcarsReplay extends Command
* *
* @var string * @var string
*/ */
protected string $apiKey = 'testadminapikey'; protected $apiKey = 'testadminapikey';
/** /**
* For automatic updates, how many seconds to sleep between updates * For automatic updates, how many seconds to sleep between updates
* *
* @var int * @var int
*/ */
protected int $sleepTime = 10; protected $sleepTime = 10;
/** /**
* @var array key == update[callsign] * @var array key == update[callsign]
* value == PIREP ID * value == PIREP ID
*/ */
protected array $pirepList = []; protected $pirepList = [];
/** /**
* @var Client * @var Client
*/ */
protected Client $httpClient; protected $httpClient;
/** /**
* Return an instance of an HTTP client all ready to post * Return an instance of an HTTP client all ready to post

View File

@@ -2,11 +2,11 @@
namespace App\Console\Commands; namespace App\Console\Commands;
use App;
use App\Contracts\Command; use App\Contracts\Command;
use App\Services\Installer\ConfigService;
use App\Services\Installer\SeederService; use App\Services\Installer\SeederService;
use DatabaseSeeder; use DatabaseSeeder;
use Illuminate\Support\Facades\App; use Modules\Installer\Services\ConfigService;
/** /**
* Create the config files * Create the config files
@@ -16,8 +16,8 @@ class CreateConfigs extends Command
protected $signature = 'phpvms:config {db_host} {db_name} {db_user} {db_pass}'; protected $signature = 'phpvms:config {db_host} {db_name} {db_user} {db_pass}';
protected $description = 'Create the config files'; protected $description = 'Create the config files';
private DatabaseSeeder $databaseSeeder; private $databaseSeeder;
private SeederService $seederSvc; private $seederSvc;
public function __construct(DatabaseSeeder $databaseSeeder, SeederService $seederSvc) public function __construct(DatabaseSeeder $databaseSeeder, SeederService $seederSvc)
{ {
@@ -83,11 +83,11 @@ class CreateConfigs extends Command
$cfgSvc->createConfigFiles([ $cfgSvc->createConfigFiles([
'APP_ENV' => 'dev', 'APP_ENV' => 'dev',
'SITE_NAME' => $this->argument('name'), 'SITE_NAME' => $this->argument('name'),
'DB_CONNECTION' => 'mysql', 'DB_CONN' => 'mysql',
'DB_HOST' => $this->argument('db_host'), 'DB_HOST' => $this->argument('db_host'),
'DB_DATABASE' => $this->argument('db_name'), 'DB_NAME' => $this->argument('db_name'),
'DB_USERNAME' => $this->argument('db_user'), 'DB_USER' => $this->argument('db_user'),
'DB_PASSWORD' => $this->argument('db_pass'), 'DB_PASS' => $this->argument('db_pass'),
]); ]);
$this->info('Config files generated!'); $this->info('Config files generated!');

View File

@@ -11,11 +11,7 @@ class CreateDatabase extends Command
{ {
protected $signature = 'database:create {--reset} {--migrate} {--conn=?}'; protected $signature = 'database:create {--reset} {--migrate} {--conn=?}';
protected $description = 'Create a database'; protected $description = 'Create a database';
protected $os;
/**
* @var Detector
*/
protected Detector $os;
/** /**
* CreateDatabase constructor. * CreateDatabase constructor.

View File

@@ -24,8 +24,7 @@ class DevCommands extends Command
{ {
protected $signature = 'phpvms {cmd} {param?}'; protected $signature = 'phpvms {cmd} {param?}';
protected $description = 'Developer commands'; protected $description = 'Developer commands';
protected $dbSvc;
protected DatabaseService $dbSvc;
/** /**
* DevCommands constructor. * DevCommands constructor.

View File

@@ -13,7 +13,7 @@ class DevInstall extends Command
protected $signature = 'phpvms:dev-install {--reset-db} {--reset-configs}'; protected $signature = 'phpvms:dev-install {--reset-db} {--reset-configs}';
protected $description = 'Run a developer install and run the sample migration'; protected $description = 'Run a developer install and run the sample migration';
private \DatabaseSeeder $databaseSeeder; private $databaseSeeder;
public function __construct(\DatabaseSeeder $databaseSeeder) public function __construct(\DatabaseSeeder $databaseSeeder)
{ {
@@ -81,7 +81,7 @@ class DevInstall extends Command
$cfgSvc->createConfigFiles([ $cfgSvc->createConfigFiles([
'APP_ENV' => 'dev', 'APP_ENV' => 'dev',
'SITE_NAME' => 'phpvms test', 'SITE_NAME' => 'phpvms test',
'DB_CONNECTION' => 'sqlite', 'DB_CONN' => 'sqlite',
]); ]);
$this->info('Config files generated!'); $this->info('Config files generated!');

View File

@@ -1,32 +0,0 @@
<?php
namespace App\Console\Commands;
use App;
use App\Contracts\Command;
class EmailTest extends Command
{
protected $signature = 'phpvms:email-test';
protected $description = 'Send a test notification to admins';
/**
* Run dev related commands
*
* @throws \Symfony\Component\HttpFoundation\File\Exception\FileException
*/
public function handle()
{
/** @var App\Notifications\NotificationEventsHandler $eventHandler */
$eventHandler = app(App\Notifications\NotificationEventsHandler::class);
$news = new App\Models\News();
$news->user_id = 1;
$news->subject = 'Test News';
$news->body = 'Test Body';
$news->save();
$newsEvent = new App\Events\NewsAdded($news);
$eventHandler->onNewsAdded($newsEvent);
}
}

View File

@@ -10,7 +10,7 @@ class ImportCsv extends Command
protected $signature = 'phpvms:csv-import {type} {file}'; protected $signature = 'phpvms:csv-import {type} {file}';
protected $description = 'Import from a CSV file'; protected $description = 'Import from a CSV file';
private ImportService $importer; private $importer;
/** /**
* Import constructor. * Import constructor.

View File

@@ -1,42 +0,0 @@
<?php
namespace App\Console\Commands;
use App;
use App\Contracts\Command;
use Illuminate\Support\Facades\Artisan;
use Illuminate\Support\Facades\Log;
class ProcessQueue extends Command
{
protected $signature = 'queue:cron';
protected $description = 'Process the queue from a cron job';
/**
* Run the queue tasks
*/
public function handle()
{
Artisan::call('queue:work', [
//'--sansdaemon' => null,
'--stop-when-empty' => null,
]);
$jobOutput = trim(Artisan::output());
if (!empty($jobOutput)) {
Log::info($jobOutput);
}
///** @var App\Support\WorkCommand $queueWorker */
//$queueWorker = new App\Support\WorkCommand(app('queue.worker'), app('cache.store'));
//$queueWorker->setInput($queueWorker->createInputFromArguments([]));
//$queueWorker->handle();
/*$output = $this->call('queue:work', [
'--stop-when-empty' => null,
]);
Log::info($output);*/
}
}

View File

@@ -1,25 +0,0 @@
<?php
namespace App\Console\Commands;
use App\Contracts\Command;
use App\Services\Installer\ConfigService;
/**
* Command to rewrite the config files
*/
class RewriteConfigs extends Command
{
protected $signature = 'phpvms:rewrite-configs';
protected $description = 'Rewrite the config files';
/**
* Run dev related commands
*/
public function handle()
{
/** @var ConfigService $configSvc */
$configSvc = app(ConfigService::class);
$configSvc->rewriteConfigFiles();
}
}

View File

@@ -8,11 +8,7 @@ use GuzzleHttp\Client;
class TestApi extends Command class TestApi extends Command
{ {
protected $signature = 'phpvms:test-api {apikey} {url}'; protected $signature = 'phpvms:test-api {apikey} {url}';
protected $httpClient;
/**
* @var Client
*/
protected Client $httpClient;
/** /**
* Run dev related commands * Run dev related commands

View File

@@ -10,14 +10,8 @@ class Version extends Command
{ {
protected $signature = 'phpvms:version {--write} {--base-only} {--write-full-version} {version?}'; protected $signature = 'phpvms:version {--write} {--base-only} {--write-full-version} {version?}';
/** private $versionSvc;
* @var VersionService
*/
private VersionService $versionSvc;
/**
* @param VersionService $versionSvc
*/
public function __construct(VersionService $versionSvc) public function __construct(VersionService $versionSvc)
{ {
parent::__construct(); parent::__construct();

View File

@@ -12,11 +12,7 @@ class YamlImport extends Command
{ {
protected $signature = 'phpvms:yaml-import {files*}'; protected $signature = 'phpvms:yaml-import {files*}';
protected $description = 'Developer commands'; protected $description = 'Developer commands';
protected $dbSvc;
/**
* @var DatabaseService
*/
protected DatabaseService $dbSvc;
/** /**
* YamlImport constructor. * YamlImport constructor.

View File

@@ -1,90 +0,0 @@
<?php
/**
* This runs any of the cron tasks that are set to run according to the Laravel schedule
*/
namespace App\Console;
use App\Console\Cron\FifteenMinute;
use App\Console\Cron\FiveMinute;
use App\Console\Cron\Hourly;
use App\Console\Cron\JobQueue;
use App\Console\Cron\Monthly;
use App\Console\Cron\Nightly;
use App\Console\Cron\ThirtyMinute;
use App\Console\Cron\Weekly;
use App\Contracts\Command;
use Illuminate\Console\Scheduling\Schedule;
class Cron
{
/** @var Schedule */
private $scheduler;
/**
* @var string[] The cron tasks which get called/run
*/
private $cronTasks = [
JobQueue::class,
FiveMinute::class,
FifteenMinute::class,
ThirtyMinute::class,
Hourly::class,
Nightly::class,
Weekly::class,
Monthly::class,
];
/**
* @var array Stores the instantiated cron tasks
*/
private $cronRunners = [];
/**
* @param Schedule $scheduler
*/
public function __construct(Schedule $scheduler)
{
$this->scheduler = $scheduler;
foreach ($this->cronTasks as $task) {
/** @var Command $cronTask */
$cronTask = app($task);
$signature = $cronTask->getSignature();
if (empty($signature)) {
continue;
}
$this->cronRunners[$signature] = $cronTask;
}
}
/**
* Try to figure out which commands are supposed to run right now
*
* @return array string of tasks that were run
*/
public function run(): array
{
$events = $this->scheduler->dueEvents(app());
if (empty($events)) {
return [];
}
$run = [];
/** @var \Illuminate\Console\Scheduling\Event $event */
foreach ($events as $event) {
foreach ($this->cronRunners as $signature => $task) {
if (!str_contains($event->command, $signature)) {
continue;
}
$task->callEvent();
$run[] = $signature;
}
}
return $run;
}
}

View File

@@ -1,26 +0,0 @@
<?php
namespace App\Console\Cron;
use App\Contracts\CronCommand;
use App\Events\CronFifteenMinute;
/**
* The actual cron tasks are in app/Cron
*/
class FifteenMinute extends CronCommand
{
protected $signature = 'cron:fifteen';
protected $description = 'Run the 15 minute cron tasks';
protected $schedule;
public function handle(): void
{
$this->callEvent();
}
public function callEvent()
{
event(new CronFifteenMinute());
}
}

View File

@@ -1,29 +0,0 @@
<?php
namespace App\Console\Cron;
use App\Contracts\CronCommand;
use App\Events\CronFiveMinute;
/**
* This just calls the CronNightly event, so all of the
* listeners, etc can just be called to run those tasks
*
* The actual cron tasks are in app/Cron
*/
class FiveMinute extends CronCommand
{
protected $signature = 'cron:five';
protected $description = 'Run the 5 minute cron tasks';
protected $schedule;
public function handle(): void
{
$this->callEvent();
}
public function callEvent()
{
event(new CronFiveMinute());
}
}

View File

@@ -2,14 +2,14 @@
namespace App\Console\Cron; namespace App\Console\Cron;
use App\Contracts\CronCommand; use App\Contracts\Command;
use App\Events\CronHourly; use App\Events\CronHourly;
/** /**
* This just calls the CronHourly event, so all of the * This just calls the CronHourly event, so all of the
* listeners, etc can just be called to run those tasks * listeners, etc can just be called to run those tasks
*/ */
class Hourly extends CronCommand class Hourly extends Command
{ {
protected $signature = 'cron:hourly'; protected $signature = 'cron:hourly';
protected $description = 'Run the hourly cron tasks'; protected $description = 'Run the hourly cron tasks';
@@ -17,11 +17,7 @@ class Hourly extends CronCommand
public function handle(): void public function handle(): void
{ {
$this->callEvent(); $this->redirectLoggingToFile('cron');
}
public function callEvent()
{
event(new CronHourly()); event(new CronHourly());
} }
} }

View File

@@ -1,32 +0,0 @@
<?php
namespace App\Console\Cron;
use App\Contracts\CronCommand;
use Illuminate\Support\Facades\Artisan;
/**
* This just calls the CronHourly event, so all of the
* listeners, etc can just be called to run those tasks
*/
class JobQueue extends CronCommand
{
protected $signature = 'cron:queue';
protected $description = 'Run the cron queue tasks';
protected $schedule;
public function handle(): void
{
$this->callEvent();
$queueOutput = trim(Artisan::output());
if (!empty($queueOutput)) {
$this->info($queueOutput);
}
}
public function callEvent()
{
Artisan::call('queue:cron');
}
}

View File

@@ -2,7 +2,7 @@
namespace App\Console\Cron; namespace App\Console\Cron;
use App\Contracts\CronCommand; use App\Contracts\Command;
use App\Events\CronMonthly; use App\Events\CronMonthly;
/** /**
@@ -11,7 +11,7 @@ use App\Events\CronMonthly;
* *
* The actual cron tasks are in app/Cron * The actual cron tasks are in app/Cron
*/ */
class Monthly extends CronCommand class Monthly extends Command
{ {
protected $signature = 'cron:monthly'; protected $signature = 'cron:monthly';
protected $description = 'Run the monthly cron tasks'; protected $description = 'Run the monthly cron tasks';
@@ -19,11 +19,7 @@ class Monthly extends CronCommand
public function handle(): void public function handle(): void
{ {
$this->callEvent(); $this->redirectLoggingToFile('cron');
}
public function callEvent()
{
event(new CronMonthly()); event(new CronMonthly());
} }
} }

View File

@@ -2,7 +2,7 @@
namespace App\Console\Cron; namespace App\Console\Cron;
use App\Contracts\CronCommand; use App\Contracts\Command;
use App\Events\CronNightly; use App\Events\CronNightly;
/** /**
@@ -11,7 +11,7 @@ use App\Events\CronNightly;
* *
* The actual cron tasks are in app/Cron * The actual cron tasks are in app/Cron
*/ */
class Nightly extends CronCommand class Nightly extends Command
{ {
protected $signature = 'cron:nightly'; protected $signature = 'cron:nightly';
protected $description = 'Run the nightly cron tasks'; protected $description = 'Run the nightly cron tasks';
@@ -19,11 +19,7 @@ class Nightly extends CronCommand
public function handle(): void public function handle(): void
{ {
$this->callEvent(); $this->redirectLoggingToFile('cron');
}
public function callEvent()
{
event(new CronNightly()); event(new CronNightly());
} }
} }

View File

@@ -1,26 +0,0 @@
<?php
namespace App\Console\Cron;
use App\Contracts\CronCommand;
use App\Events\CronThirtyMinute;
/**
* The actual cron tasks are in app/Cron
*/
class ThirtyMinute extends CronCommand
{
protected $signature = 'cron:thirty';
protected $description = 'Run the 30 minute cron tasks';
protected $schedule;
public function handle(): void
{
$this->callEvent();
}
public function callEvent()
{
event(new CronThirtyMinute());
}
}

View File

@@ -2,7 +2,7 @@
namespace App\Console\Cron; namespace App\Console\Cron;
use App\Contracts\CronCommand; use App\Contracts\Command;
use App\Events\CronWeekly; use App\Events\CronWeekly;
/** /**
@@ -11,7 +11,7 @@ use App\Events\CronWeekly;
* *
* The actual cron tasks are in app/Cron * The actual cron tasks are in app/Cron
*/ */
class Weekly extends CronCommand class Weekly extends Command
{ {
protected $signature = 'cron:weekly'; protected $signature = 'cron:weekly';
protected $description = 'Run the weekly cron tasks'; protected $description = 'Run the weekly cron tasks';
@@ -19,11 +19,7 @@ class Weekly extends CronCommand
public function handle(): void public function handle(): void
{ {
$this->callEvent(); $this->redirectLoggingToFile('cron');
}
public function callEvent()
{
event(new CronWeekly()); event(new CronWeekly());
} }
} }

View File

@@ -2,13 +2,9 @@
namespace App\Console; namespace App\Console;
use App\Console\Cron\FifteenMinute;
use App\Console\Cron\FiveMinute;
use App\Console\Cron\Hourly; use App\Console\Cron\Hourly;
use App\Console\Cron\JobQueue;
use App\Console\Cron\Monthly; use App\Console\Cron\Monthly;
use App\Console\Cron\Nightly; use App\Console\Cron\Nightly;
use App\Console\Cron\ThirtyMinute;
use App\Console\Cron\Weekly; use App\Console\Cron\Weekly;
use App\Services\CronService; use App\Services\CronService;
use Illuminate\Console\Scheduling\Schedule; use Illuminate\Console\Scheduling\Schedule;
@@ -29,23 +25,10 @@ class Kernel extends ConsoleKernel
*/ */
protected function schedule(Schedule $schedule): void protected function schedule(Schedule $schedule): void
{ {
// If not using the queue worker then run those via cron
if (!config('queue.worker', false)) {
$schedule->command(JobQueue::class)
->everyMinute()
->withoutOverlapping();
}
/*
* NOTE: IF MORE TASKS ARE ADDED, THEY ALSO MUST BE ADDED TO THE CRON.PHP
*/
$schedule->command(FiveMinute::class)->everyFiveMinutes();
$schedule->command(FifteenMinute::class)->everyFifteenMinutes();
$schedule->command(ThirtyMinute::class)->everyThirtyMinutes();
$schedule->command(Nightly::class)->dailyAt('01:00'); $schedule->command(Nightly::class)->dailyAt('01:00');
$schedule->command(Hourly::class)->hourly();
$schedule->command(Weekly::class)->weeklyOn(0); $schedule->command(Weekly::class)->weeklyOn(0);
$schedule->command(Monthly::class)->monthlyOn(1); $schedule->command(Monthly::class)->monthlyOn(1);
$schedule->command(Hourly::class)->hourly();
// When spatie-backups runs // When spatie-backups runs
/*if (config('backup.backup.enabled', false) === true) { /*if (config('backup.backup.enabled', false) === true) {

View File

@@ -37,10 +37,10 @@ abstract class Award
*/ */
/** @var \App\Models\Award|null */ /** @var \App\Models\Award|null */
protected ?AwardModel $award; protected $award;
/** @var \App\Models\User|null */ /** @var \App\Models\User|null */
protected ?User $user; protected $user;
public function __construct(AwardModel $award = null, User $user = null) public function __construct(AwardModel $award = null, User $user = null)
{ {
@@ -69,9 +69,9 @@ abstract class Award
/** /**
* Add the award to this user, if they don't already have it * Add the award to this user, if they don't already have it
* *
* @return bool|UserAward|null * @return bool|UserAward
*/ */
protected function addAward(): bool|UserAward|null protected function addAward()
{ {
$w = [ $w = [
'user_id' => $this->user->id, 'user_id' => $this->user->id,

View File

@@ -24,19 +24,9 @@ abstract class Command extends \Illuminate\Console\Command
parent::__construct(); parent::__construct();
// Running in the console but not in the tests // Running in the console but not in the tests
/*if (app()->runningInConsole() && env('APP_ENV') !== 'testing') { if (app()->runningInConsole() && env('APP_ENV') !== 'testing') {
$this->redirectLoggingToFile('stdout'); $this->redirectLoggingToFile('stdout');
}*/
} }
/**
* Return the signature of the command
*
* @return string
*/
public function getSignature(): string
{
return $this->signature;
} }
/** /**

View File

@@ -84,21 +84,19 @@ abstract class Controller extends \Illuminate\Routing\Controller
* *
* @param $message * @param $message
* @param null|mixed $count * @param null|mixed $count
* @param mixed $attrs
* *
* @return \Illuminate\Http\JsonResponse * @return \Illuminate\Http\JsonResponse
*/ */
public function message($message, $count = null, $attrs = []) public function message($message, $count = null)
{ {
$ret = [ $attrs = [
'message' => $message, 'message' => $message,
'attrs' => $attrs,
]; ];
if ($count !== null) { if ($count !== null) {
$ret['count'] = $count; $attrs['count'] = $count;
} }
return response()->json($ret); return response()->json($attrs);
} }
} }

View File

@@ -1,20 +0,0 @@
<?php
namespace App\Contracts;
abstract class CronCommand extends Command
{
/**
* @return mixed
*/
abstract public function callEvent();
/**
* Adjust the logging depending on where we're running from
*/
public function __construct()
{
parent::__construct();
$this->redirectLoggingToFile('cron');
}
}

View File

@@ -7,14 +7,14 @@ namespace App\Contracts;
*/ */
abstract class Enum abstract class Enum
{ {
protected static array $cache = []; protected static $cache = [];
protected static array $codes = []; protected static $codes = [];
protected static array $labels = []; protected static $labels = [];
/** /**
* @var int * @var int
*/ */
protected int $value; protected $value;
/** /**
* Create an instance of this Enum * Create an instance of this Enum
@@ -29,9 +29,9 @@ abstract class Enum
/** /**
* Return the value that's been set if this is an instance * Return the value that's been set if this is an instance
* *
* @return int|null * @return mixed
*/ */
final public function getValue(): ?int final public function getValue()
{ {
return $this->value; return $this->value;
} }
@@ -41,9 +41,9 @@ abstract class Enum
* *
* @param $value * @param $value
* *
* @return string * @return mixed
*/ */
final public static function label($value): string final public static function label($value)
{ {
if (isset(static::$labels[$value])) { if (isset(static::$labels[$value])) {
$val = static::$labels[$value]; $val = static::$labels[$value];
@@ -53,8 +53,6 @@ abstract class Enum
return $val; return $val;
} }
return $value;
} }
/** /**
@@ -89,11 +87,11 @@ abstract class Enum
* *
* @return false|int|string * @return false|int|string
*/ */
public static function convertToCode($value): bool|int|string|null public static function convertToCode($value)
{ {
$value = (int) $value; $value = (int) $value;
if (!array_key_exists($value, static::$codes)) { if (!array_key_exists($value, static::$codes)) {
return null; return;
} }
return static::$codes[$value]; return static::$codes[$value];

View File

@@ -1,9 +0,0 @@
<?php
namespace App\Contracts;
use Illuminate\Database\Eloquent\Factories\Factory as EloquentFactory;
abstract class Factory extends EloquentFactory
{
}

View File

@@ -166,36 +166,10 @@ class ImportExport
return []; return [];
} }
if (strpos($split_values[0], '?') !== false) {
// This contains the query string, which turns it into a multi-level array
$query_str = explode('?', $split_values[0]);
$parent = trim($query_str[0]);
$children = [];
$kvp = explode('&', trim($query_str[1]));
foreach ($kvp as $items) {
if (!$items) {
continue;
}
$this->kvpToArray($items, $children);
}
$ret[$parent] = $children;
return $ret;
}
// This is not a query string, return it back untouched
return [$split_values[0]]; return [$split_values[0]];
} }
foreach ($split_values as $value) { foreach ($split_values as $value) {
$value = trim($value);
if ($value === '') {
continue;
}
// This isn't in the query string format, so it's // This isn't in the query string format, so it's
// just a straight key-value pair set // just a straight key-value pair set
if (strpos($value, '?') === false) { if (strpos($value, '?') === false) {

View File

@@ -4,6 +4,7 @@ namespace App\Contracts;
use Illuminate\Bus\Queueable; use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Support\Facades\Log;
class Notification extends \Illuminate\Notifications\Notification implements ShouldQueue class Notification extends \Illuminate\Notifications\Notification implements ShouldQueue
{ {
@@ -16,13 +17,25 @@ class Notification extends \Illuminate\Notifications\Notification implements Sho
{ {
// Look in the notifications.channels config and see where this particular // Look in the notifications.channels config and see where this particular
// notification can go. Map it to $channels // notification can go. Map it to $channels
/*$klass = static::class; $klass = static::class;
$notif_config = config('notifications.channels', []); $notif_config = config('notifications.channels', []);
if (!array_key_exists($klass, $notif_config)) { if (!array_key_exists($klass, $notif_config)) {
Log::error('Notification type '.$klass.' missing from notifications config, defaulting to mail'); Log::error('Notification type '.$klass.' missing from notifications config, defaulting to mail');
return; return;
} }
$this->channels = $notif_config[$klass];*/ $this->channels = $notif_config[$klass];
}
/**
* Get the notification's delivery channels.
*
* @param mixed $notifiable
*
* @return array
*/
public function via($notifiable)
{
return $this->channels;
} }
} }

View File

@@ -2,14 +2,11 @@
namespace App\Contracts; namespace App\Contracts;
use Exception;
use Illuminate\Validation\Validator; use Illuminate\Validation\Validator;
use function is_array;
use Prettus\Repository\Eloquent\BaseRepository; use Prettus\Repository\Eloquent\BaseRepository;
use Prettus\Repository\Exceptions\RepositoryException;
/** /**
* @mixin BaseRepository * @mixin \Prettus\Repository\Eloquent\BaseRepository
*/ */
abstract class Repository extends BaseRepository abstract class Repository extends BaseRepository
{ {
@@ -23,8 +20,8 @@ abstract class Repository extends BaseRepository
{ {
try { try {
return $this->find($id, $columns); return $this->find($id, $columns);
} catch (Exception $e) { } catch (\Exception $e) {
return null; return;
} }
} }
@@ -35,7 +32,11 @@ abstract class Repository extends BaseRepository
*/ */
public function validate($values) public function validate($values)
{ {
$validator = Validator::make($values, $this->model()->rules); $validator = Validator::make(
$values,
$this->model()->rules
);
if ($validator->fails()) { if ($validator->fails()) {
return $validator->messages(); return $validator->messages();
} }
@@ -49,8 +50,6 @@ abstract class Repository extends BaseRepository
* @param int $count * @param int $count
* @param string $sort_by created_at (default) or updated_at * @param string $sort_by created_at (default) or updated_at
* *
* @throws RepositoryException
*
* @return mixed * @return mixed
*/ */
public function recent($count = null, $sort_by = 'created_at') public function recent($count = null, $sort_by = 'created_at')
@@ -72,7 +71,7 @@ abstract class Repository extends BaseRepository
return $this->scopeQuery(function ($query) use ($where, $sort_by, $order_by) { return $this->scopeQuery(function ($query) use ($where, $sort_by, $order_by) {
$q = $query->where($where); $q = $query->where($where);
// See if there are multi-column sorts // See if there are multi-column sorts
if (is_array($sort_by)) { if (\is_array($sort_by)) {
foreach ($sort_by as $key => $sort) { foreach ($sort_by as $key => $sort) {
$q = $q->orderBy($key, $sort); $q = $q->orderBy($key, $sort);
} }
@@ -99,7 +98,7 @@ abstract class Repository extends BaseRepository
return $this->scopeQuery(function ($query) use ($col, $values, $sort_by, $order_by) { return $this->scopeQuery(function ($query) use ($col, $values, $sort_by, $order_by) {
$q = $query->whereNotIn($col, $values); $q = $query->whereNotIn($col, $values);
// See if there are multi-column sorts // See if there are multi-column sorts
if (is_array($sort_by)) { if (\is_array($sort_by)) {
foreach ($sort_by as $key => $sort) { foreach ($sort_by as $key => $sort) {
$q = $q->orderBy($key, $sort); $q = $q->orderBy($key, $sort);
} }
@@ -119,7 +118,7 @@ abstract class Repository extends BaseRepository
* @param array $columns * @param array $columns
* @param string $method * @param string $method
* *
* @throws RepositoryException * @throws \Prettus\Repository\Exceptions\RepositoryException
* *
* @return mixed * @return mixed
*/ */
@@ -133,10 +132,7 @@ abstract class Repository extends BaseRepository
$page = (int) request()->query('page', 1); $page = (int) request()->query('page', 1);
$results = $this->model->{$method}($limit, $columns, 'page', $page); $results = $this->model->{$method}($limit, $columns, 'page', $page);
$results->appends(app('request')->query());
$qs = request()->except(['page', 'user']);
$results->appends($qs);
$this->resetModel(); $this->resetModel();
return $this->parserResult($results); return $this->parserResult($results);

View File

@@ -2,10 +2,7 @@
namespace App\Contracts; namespace App\Contracts;
use App\Support\Resources\CustomAnonymousResourceCollection;
use App\Support\Resources\CustomPaginatedResourceResponse;
use Illuminate\Http\Resources\Json\JsonResource; use Illuminate\Http\Resources\Json\JsonResource;
use Illuminate\Pagination\AbstractPaginator;
/** /**
* Base class for a resource/response * Base class for a resource/response
@@ -29,28 +26,4 @@ class Resource extends JsonResource
} }
} }
} }
/**
* Customize the response to exclude all the extra data that isn't used. Based on:
* https://gist.github.com/derekphilipau/4be52164a69ce487dcd0673656d280da
*
* @param \Illuminate\Http\Request $request
*
* @return \Illuminate\Http\JsonResponse
*/
public function toResponse($request)
{
return $this->resource instanceof AbstractPaginator
? (new CustomPaginatedResourceResponse($this))->toResponse($request)
: parent::toResponse($request);
}
public static function collection($resource)
{
return tap(new CustomAnonymousResourceCollection($resource, static::class), function ($collection) {
if (property_exists(static::class, 'preserveKeys')) {
$collection->preserveKeys = (new static([]))->preserveKeys === true;
}
});
}
} }

View File

@@ -3,6 +3,7 @@
namespace App\Contracts; namespace App\Contracts;
use ArrayAccess; use ArrayAccess;
use PhpUnitsOfMeasure\Exception\UnknownUnitOfMeasure;
/** /**
* Abstract unit wrapper * Abstract unit wrapper
@@ -10,89 +11,45 @@ use ArrayAccess;
class Unit implements ArrayAccess class Unit implements ArrayAccess
{ {
/** /**
* The localized unit the user wants it displayed in * The unit this is kept as
*/ */
public string $localUnit; public $unit;
/** /**
* The unit that this value is stored in locally * All of the units of this class
*/ */
public string $internalUnit; public $units;
/**
* All of the units of this class which are reported in an API response
*/
public array $units;
/** /**
* Holds an instance of the PhpUnit type * Holds an instance of the PhpUnit type
*
* @var \PhpUnitsOfMeasure\AbstractPhysicalQuantity
*/ */
protected mixed $instance; protected $instance;
/** /**
* Units that are included as part of the REST response * Units that are included as part of the REST response
*/ */
public array $responseUnits = []; public $responseUnits = [];
/** /**
* Factory method for creating a new unit type * @return mixed
*
* @param mixed $value
* @param string $unit
*
* @throws \Exception
*
* @return Unit
*/ */
public static function make(mixed $value, string $unit): self public function value()
{ {
if ($value instanceof self) { return $this->__toString();
return $value;
}
return new static($value, $unit);
}
/**
* Return the value in an internal format
*
* @param int|null $round Optional value to round to
*
* @return float|null
*/
public function internal(?int $round = null): ?float
{
return $this->toUnit($this->internalUnit, $round);
}
/**
* Return the value in the localized format
*
* @param int|null $round Optional value to round to
*
* @return float|null
*/
public function local(?int $round = null): ?float
{
return $this->toUnit($this->localUnit, $round);
} }
/** /**
* Just call toUnit() on the PhpUnitOfMeasure instance * Just call toUnit() on the PhpUnitOfMeasure instance
* *
* @param string $unit * @param string $unit
* @param int|null $round Optional value to round to
* *
* @return float|null * @return mixed
*/ */
public function toUnit(string $unit, ?int $round = null): ?float public function toUnit($unit)
{ {
$val = $this->instance->toUnit($unit); return $this->instance->toUnit($unit);
if ($round === null) {
return $val;
}
return round($val, $round);
} }
/** /**
@@ -102,7 +59,7 @@ class Unit implements ArrayAccess
{ {
$response = []; $response = [];
foreach ($this->responseUnits as $unit) { foreach ($this->responseUnits as $unit) {
$response[$unit] = round($this->instance->toUnit($unit), 2); $response[$unit] = $this[$unit] ?? 0;
} }
return $response; return $response;
@@ -115,7 +72,7 @@ class Unit implements ArrayAccess
* *
* @return bool * @return bool
*/ */
public function offsetExists($offset): bool public function offsetExists($offset)
{ {
return $this->offsetGet($offset) !== null; return $this->offsetGet($offset) !== null;
} }
@@ -123,15 +80,19 @@ class Unit implements ArrayAccess
/** /**
* Implements ArrayAccess * Implements ArrayAccess
* *
* @param $unit * @param $offset
* *
* @return float|null * @return mixed
*/ */
public function offsetGet($unit): ?float public function offsetGet($offset)
{ {
$value = $this->instance->toUnit($unit); try {
$value = $this->instance->toUnit($offset);
if (!$value) { if (!$value) {
return null; return;
}
} catch (UnknownUnitOfMeasure $e) {
return;
} }
return round($value, 2); return round($value, 2);
@@ -163,6 +124,6 @@ class Unit implements ArrayAccess
*/ */
public function __toString() public function __toString()
{ {
return (string) $this->offsetGet($this->localUnit); return (string) $this->offsetGet($this->unit);
} }
} }

View File

@@ -5,7 +5,6 @@ namespace App\Cron\Hourly;
use App\Contracts\Listener; use App\Contracts\Listener;
use App\Events\CronHourly; use App\Events\CronHourly;
use App\Models\Enums\PirepState; use App\Models\Enums\PirepState;
use App\Models\Enums\PirepStatus;
use App\Models\Pirep; use App\Models\Pirep;
use App\Services\PirepService; use App\Services\PirepService;
use Carbon\Carbon; use Carbon\Carbon;
@@ -18,7 +17,7 @@ use Illuminate\Support\Facades\Log;
class DeletePireps extends Listener class DeletePireps extends Listener
{ {
/** /**
* Delete old rejected PIREPs * Remove expired bids
* *
* @param CronHourly $event * @param CronHourly $event
* *
@@ -38,11 +37,8 @@ class DeletePireps extends Listener
*/ */
protected function deletePireps(int $expire_time_hours, int $state) protected function deletePireps(int $expire_time_hours, int $state)
{ {
$dt = Carbon::now('UTC')->subHours($expire_time_hours); $dt = Carbon::now()->subHours($expire_time_hours);
$pireps = Pirep::where('created_at', '<', $dt) $pireps = Pirep::whereDate('created_at', '<', $dt)->where(['state' => $state])->get();
->where(['state' => $state])
->where('status', '<>', PirepStatus::PAUSED)
->get();
/** @var PirepService $pirepSvc */ /** @var PirepService $pirepSvc */
$pirepSvc = app(PirepService::class); $pirepSvc = app(PirepService::class);

View File

@@ -25,7 +25,7 @@ class RemoveExpiredBids extends Listener
return; return;
} }
$date = Carbon::now('UTC')->subHours(setting('bids.expire_time')); $date = Carbon::now()->subHours(setting('bids.expire_time'));
Bid::where('created_at', '<', $date)->delete(); Bid::whereDate('created_at', '<', $date)->delete();
} }
} }

View File

@@ -4,12 +4,9 @@ namespace App\Cron\Hourly;
use App\Contracts\Listener; use App\Contracts\Listener;
use App\Events\CronHourly; use App\Events\CronHourly;
use App\Events\PirepCancelled;
use App\Models\Enums\PirepState; use App\Models\Enums\PirepState;
use App\Models\Enums\PirepStatus;
use App\Models\Pirep; use App\Models\Pirep;
use Carbon\Carbon; use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
/** /**
* Remove expired live flights * Remove expired live flights
@@ -29,16 +26,9 @@ class RemoveExpiredLiveFlights extends Listener
return; return;
} }
$date = Carbon::now('UTC')->subHours(setting('acars.live_time')); $date = Carbon::now()->subHours(setting('acars.live_time'));
$pireps = Pirep::where('updated_at', '<', $date) Pirep::whereDate('updated_at', '<', $date)
->where('state', PirepState::IN_PROGRESS) ->where('state', PirepState::IN_PROGRESS)
->where('status', '<>', PirepStatus::PAUSED) ->delete();
->get();
foreach ($pireps as $pirep) {
event(new PirepCancelled($pirep));
Log::info('Cron: Deleting Expired Live PIREP id='.$pirep->id.', state='.PirepState::label($pirep->state));
$pirep->delete();
}
} }
} }

View File

@@ -13,7 +13,7 @@ use Illuminate\Support\Facades\Log;
*/ */
class ApplyExpenses extends Listener class ApplyExpenses extends Listener
{ {
private RecurringFinanceService $financeSvc; private $financeSvc;
/** /**
* ApplyExpenses constructor. * ApplyExpenses constructor.

View File

@@ -13,7 +13,7 @@ use Illuminate\Support\Facades\Log;
*/ */
class ApplyExpenses extends Listener class ApplyExpenses extends Listener
{ {
private RecurringFinanceService $financeSvc; private $financeSvc;
/** /**
* ApplyExpenses constructor. * ApplyExpenses constructor.

View File

@@ -1,9 +1,9 @@
<?php <?php
namespace App\Cron\Hourly; namespace App\Cron\Nightly;
use App\Contracts\Listener; use App\Contracts\Listener;
use App\Events\CronHourly; use App\Events\CronNightly;
use App\Services\SimBriefService; use App\Services\SimBriefService;
use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Log;
@@ -12,7 +12,7 @@ use Illuminate\Support\Facades\Log;
*/ */
class ClearExpiredSimbrief extends Listener class ClearExpiredSimbrief extends Listener
{ {
private SimBriefService $simbriefSvc; private $simbriefSvc;
public function __construct(SimBriefService $simbriefSvc) public function __construct(SimBriefService $simbriefSvc)
{ {
@@ -20,11 +20,11 @@ class ClearExpiredSimbrief extends Listener
} }
/** /**
* @param CronHourly $event * @param \App\Events\CronNightly $event
*/ */
public function handle(CronHourly $event): void public function handle(CronNightly $event): void
{ {
Log::info('Hourly: Removing expired Simbrief entries'); Log::info('Nightly: Removing expired Simbrief entries');
$this->simbriefSvc->removeExpiredEntries(); $this->simbriefSvc->removeExpiredEntries();
} }
} }

View File

@@ -7,9 +7,12 @@ use App\Events\CronNightly;
use App\Services\VersionService; use App\Services\VersionService;
use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Log;
/**
* Determine if any pilots should be set to ON LEAVE status
*/
class NewVersionCheck extends Listener class NewVersionCheck extends Listener
{ {
private VersionService $versionSvc; private $versionSvc;
/** /**
* @param VersionService $versionSvc * @param VersionService $versionSvc

View File

@@ -12,7 +12,7 @@ use Illuminate\Support\Facades\Log;
*/ */
class PilotLeave extends Listener class PilotLeave extends Listener
{ {
private UserService $userSvc; private $userSvc;
/** /**
* PilotLeave constructor. * PilotLeave constructor.

View File

@@ -6,14 +6,14 @@ use App\Contracts\Listener;
use App\Events\CronNightly; use App\Events\CronNightly;
use App\Models\Journal; use App\Models\Journal;
use App\Repositories\JournalRepository; use App\Repositories\JournalRepository;
use Illuminate\Support\Facades\Log; use Log;
/** /**
* This recalculates the balances on all of the journals * This recalculates the balances on all of the journals
*/ */
class RecalculateBalances extends Listener class RecalculateBalances extends Listener
{ {
private JournalRepository $journalRepo; private $journalRepo;
/** /**
* Nightly constructor. * Nightly constructor.

View File

@@ -13,8 +13,8 @@ use Illuminate\Support\Facades\Log;
*/ */
class RecalculateStats extends Listener class RecalculateStats extends Listener
{ {
private AircraftService $aircraftSvc; private $aircraftSvc;
private UserService $userSvc; private $userSvc;
public function __construct(AircraftService $aircraftSvc, UserService $userSvc) public function __construct(AircraftService $aircraftSvc, UserService $userSvc)
{ {

View File

@@ -1,43 +1,23 @@
<?php <?php
/** @noinspection PhpIllegalPsrClassPathInspection */ use Faker\Generator as Faker;
namespace App\Database\Factories; $factory->define(App\Models\Acars::class, function (Faker $faker) {
use App\Contracts\Factory;
use App\Models\Acars;
use DateTime;
class AcarsFactory extends Factory
{
/**
* The name of the factory's corresponding model.
*
* @var string
*/
protected $model = Acars::class;
/**
* @return array <string, mixed>
*/
public function definition(): array
{
return [ return [
'id' => null, 'id' => null,
'pirep_id' => null, 'pirep_id' => null,
'log' => $this->faker->text(100), 'log' => $faker->text(100),
'lat' => $this->faker->latitude, 'lat' => $faker->latitude,
'lon' => $this->faker->longitude, 'lon' => $faker->longitude,
'distance' => $this->faker->randomFloat(2, 0, 6000), 'distance' => $faker->randomFloat(2, 0, 6000),
'heading' => $this->faker->numberBetween(0, 359), 'heading' => $faker->numberBetween(0, 359),
'altitude' => $this->faker->numberBetween(20, 400), 'altitude' => $faker->numberBetween(20, 400),
'vs' => $this->faker->numberBetween(-5000, 5000), 'vs' => $faker->numberBetween(-5000, 5000),
'gs' => $this->faker->numberBetween(300, 500), 'gs' => $faker->numberBetween(300, 500),
'transponder' => $this->faker->numberBetween(200, 9999), 'transponder' => $faker->numberBetween(200, 9999),
'autopilot' => $this->faker->text(10), 'autopilot' => $faker->text(10),
'fuel' => $this->faker->randomFloat(2, 100, 1000), 'fuel' => $faker->randomFloat(2, 100, 1000),
'fuel_flow' => $this->faker->randomFloat(2, 100, 1000), 'fuel_flow' => $faker->randomFloat(2, 100, 1000),
'sim_time' => $this->faker->dateTime('now', 'UTC')->format(DateTime::ATOM), 'sim_time' => $faker->dateTime('now', 'UTC'),
]; ];
} });
}

View File

@@ -1,51 +1,33 @@
<?php <?php
/** @noinspection PhpIllegalPsrClassPathInspection */
namespace App\Database\Factories;
use App\Contracts\Factory;
use App\Models\Aircraft;
use App\Models\Airport; use App\Models\Airport;
use App\Models\Enums\AircraftState; use App\Models\Enums\AircraftState;
use App\Models\Enums\AircraftStatus; use App\Models\Enums\AircraftStatus;
use App\Models\Subfleet; use App\Models\Subfleet;
use App\Support\ICAO; use App\Support\ICAO;
use DateTime; use Faker\Generator as Faker;
class AircraftFactory extends Factory $factory->define(App\Models\Aircraft::class, function (Faker $faker) {
{
/**
* The name of the factory's corresponding model.
*
* @var string
*/
protected $model = Aircraft::class;
/**
* Define the model's default state.
*
* @throws \Exception
*
* @return array<string, mixed>
*/
public function definition(): array
{
return [ return [
'id' => null, 'id' => null,
'subfleet_id' => fn () => Subfleet::factory()->create()->id, 'subfleet_id' => function () {
'airport_id' => fn () => Airport::factory()->create()->id, return factory(Subfleet::class)->create()->id;
'iata' => $this->faker->unique()->text(5), },
'icao' => $this->faker->unique()->text(5), 'airport_id' => function () {
'name' => $this->faker->text(50), return factory(Airport::class)->create()->id;
'registration' => $this->faker->unique()->text(10), },
'iata' => $faker->unique()->text(5),
'icao' => $faker->unique()->text(5),
'name' => $faker->text(50),
'registration' => $faker->unique()->text(10),
'hex_code' => ICAO::createHexCode(), 'hex_code' => ICAO::createHexCode(),
'mtow' => $this->faker->randomFloat(2, 0, 50000), 'mtow' => $faker->randomFloat(2, 0, 50000),
'zfw' => $this->faker->randomFloat(2, 0, 50000), 'zfw' => $faker->randomFloat(2, 0, 50000),
'status' => AircraftStatus::ACTIVE, 'status' => AircraftStatus::ACTIVE,
'state' => AircraftState::PARKED, 'state' => AircraftState::PARKED,
'created_at' => $this->faker->dateTimeBetween('-1 week')->format(DateTime::ATOM), 'created_at' => $faker->dateTimeBetween('-1 week', 'now'),
'updated_at' => fn (array $pirep) => $pirep['created_at'], 'updated_at' => function (array $pirep) {
return $pirep['created_at'];
},
]; ];
} });
}

View File

@@ -1,41 +1,25 @@
<?php <?php
/** @noinspection PhpIllegalPsrClassPathInspection */ use Faker\Generator as Faker;
namespace App\Database\Factories;
use App\Contracts\Factory;
use App\Models\Airline;
use Hashids\Hashids; use Hashids\Hashids;
class AirlineFactory extends Factory /*
{ * Add any number of airports. Don't really care if they're real or not
/**
* The name of the factory's corresponding model.
*
* @var string
*/ */
protected $model = Airline::class; $factory->define(App\Models\Airline::class, function (Faker $faker) {
/**
* Define the model's default state.
*
* @return array<string, mixed>
*/
public function definition(): array
{
return [ return [
'id' => null, 'id' => null,
'icao' => function (array $apt): string { 'icao' => function (array $apt) {
$hashids = new Hashids(microtime(), 5); $hashids = new Hashids(microtime(), 5);
$mt = str_replace('.', '', microtime(true)); $mt = str_replace('.', '', microtime(true));
return $hashids->encode($mt); return $hashids->encode($mt);
}, },
'iata' => fn (array $apt) => $apt['icao'], 'iata' => function (array $apt) {
'name' => $this->faker->sentence(3), return $apt['icao'];
'country' => $this->faker->country, },
'name' => $faker->sentence(3),
'country' => $faker->country,
'active' => 1, 'active' => 1,
]; ];
} });
}

View File

@@ -1,36 +1,17 @@
<?php <?php
/** @noinspection PhpIllegalPsrClassPathInspection */ use Faker\Generator as Faker;
namespace App\Database\Factories; /*
* Create an ICAO for use in the factory.
use App\Contracts\Factory;
use App\Models\Airport;
class AirportFactory extends Factory
{
/**
* The name of the factory's corresponding model.
*
* @var string
*/ */
protected $model = Airport::class; if (!function_exists('createFactoryICAO')) {
function createFactoryICAO(): string
protected array $usedIcaos = [];
/**
* Generate a fake ICAO
*
* @throws \Exception
*
* @return string
*/
protected function createFactoryICAO(): string
{ {
$characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'; $characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
$max = strlen($characters) - 1; $max = strlen($characters) - 1;
$string = ''; $string = '';
for ($i = 0; $i < 5; $i++) { for ($i = 0; $i < 4; $i++) {
try { try {
$string .= $characters[random_int(0, $max)]; $string .= $characters[random_int(0, $max)];
} catch (Exception $e) { } catch (Exception $e) {
@@ -39,35 +20,37 @@ class AirportFactory extends Factory
return $string; return $string;
} }
}
/** /*
* Define the model's default state. * Add any number of airports. Don't really care if they're real or not
*
* @return array<string, mixed>
*/ */
public function definition(): array $factory->define(App\Models\Airport::class, function (Faker $faker) {
{ $usedIcaos = [];
return [ return [
'id' => function () { 'id' => function () use ($usedIcaos) {
do { do {
$airport = $this->createFactoryICAO(); $airport = createFactoryICAO();
} while (in_array($airport, $this->usedIcaos, true)); } while (in_array($airport, $usedIcaos, true));
return $airport; return $airport;
}, },
'icao' => fn (array $apt) => $apt['id'], 'icao' => function (array $apt) {
'iata' => fn (array $apt) => $apt['id'], return $apt['id'];
'name' => $this->faker->sentence(3), },
'country' => $this->faker->country, 'iata' => function (array $apt) {
'timezone' => $this->faker->timezone, return $apt['id'];
'lat' => $this->faker->latitude, },
'lon' => $this->faker->longitude, 'name' => $faker->sentence(3),
'country' => $faker->country,
'timezone' => $faker->timezone,
'lat' => $faker->latitude,
'lon' => $faker->longitude,
'hub' => false, 'hub' => false,
'notes' => null, 'ground_handling_cost' => $faker->randomFloat(2, 0, 500),
'ground_handling_cost' => $this->faker->randomFloat(2, 0, 500), 'fuel_100ll_cost' => $faker->randomFloat(2, 1, 10),
'fuel_100ll_cost' => $this->faker->randomFloat(2, 1, 10), 'fuel_jeta_cost' => $faker->randomFloat(2, 1, 10),
'fuel_jeta_cost' => $this->faker->randomFloat(2, 1, 10), 'fuel_mogas_cost' => $faker->randomFloat(2, 1, 10),
'fuel_mogas_cost' => $this->faker->randomFloat(2, 1, 10),
]; ];
} });
}

View File

@@ -1,34 +0,0 @@
<?php
/** @noinspection PhpIllegalPsrClassPathInspection */
namespace App\Database\Factories;
use App\Contracts\Factory;
use App\Models\Award;
class AwardFactory extends Factory
{
/**
* The name of the factory's corresponding model.
*
* @var string
*/
protected $model = Award::class;
/**
* Define the model's default state.
*
* @return array<string, mixed>
*/
public function definition(): array
{
return [
'id' => null,
'name' => $this->faker->name,
'description' => $this->faker->text(10),
'ref_model' => null,
'ref_model_params' => null,
];
}
}

View File

@@ -0,0 +1,13 @@
<?php
use Faker\Generator as Faker;
$factory->define(App\Models\Award::class, function (Faker $faker) {
return [
'id' => null,
'name' => $faker->name,
'description' => $faker->text(10),
'ref_model' => null,
'ref_model_params' => null,
];
});

View File

@@ -1,39 +1,18 @@
<?php <?php
/** @noinspection PhpIllegalPsrClassPathInspection */
namespace App\Database\Factories;
use App\Contracts\Factory;
use App\Models\Enums\ExpenseType; use App\Models\Enums\ExpenseType;
use App\Models\Expense; use Faker\Generator as Faker;
class ExpenseFactory extends Factory $factory->define(App\Models\Expense::class, function (Faker $faker) {
{
/**
* The name of the factory's corresponding model.
*
* @var string
*/
protected $model = Expense::class;
/**
* Define the model's default state.
*
* @return array<string, mixed>
*/
public function definition(): array
{
return [ return [
'id' => null, 'id' => null,
'airline_id' => null, 'airline_id' => null,
'name' => $this->faker->text(20), 'name' => $faker->text(20),
'amount' => $this->faker->randomFloat(2, 100, 1000), 'amount' => $faker->randomFloat(2, 100, 1000),
'type' => ExpenseType::FLIGHT, 'type' => ExpenseType::FLIGHT,
'multiplier' => false, 'multiplier' => false,
'ref_model' => \App\Models\Expense::class, 'ref_model' => \App\Models\Expense::class,
'ref_model_id' => null, 'ref_model_id' => null,
'active' => true, 'active' => true,
]; ];
} });
}

View File

@@ -1,35 +1,16 @@
<?php <?php
/** @noinspection PhpIllegalPsrClassPathInspection */ use Faker\Generator as Faker;
namespace App\Database\Factories; $factory->define(App\Models\Fare::class, function (Faker $faker) {
use App\Contracts\Factory;
use App\Models\Fare;
class FareFactory extends Factory
{
/**
* The name of the factory's corresponding model.
*
* @var string
*/
protected $model = Fare::class;
/**
* Define the model's default state.
*
* @return array<string, mixed>
*/
public function definition(): array
{
return [ return [
'id' => null, 'id' => null,
'code' => $this->faker->unique()->text(50), 'code' => $faker->unique()->text(50),
'name' => $this->faker->text(50), 'name' => $faker->text(50),
'price' => $this->faker->randomFloat(2, 100, 1000), 'price' => $faker->randomFloat(2, 100, 1000),
'cost' => fn (array $fare) => round($fare['price'] / 2), 'cost' => function (array $fare) {
'capacity' => $this->faker->randomFloat(0, 20, 500), return round($fare['price'] / 2);
},
'capacity' => $faker->randomFloat(0, 20, 500),
]; ];
} });
}

View File

@@ -1,58 +1,44 @@
<?php <?php
/** @noinspection PhpIllegalPsrClassPathInspection */
namespace App\Database\Factories;
use App\Contracts\Factory;
use App\Models\Flight;
use DateTime;
class FlightFactory extends Factory
{
/** /**
* The name of the factory's corresponding model. * Create flights
*
* @var string
*/ */
protected $model = Flight::class; use Faker\Generator as Faker;
/** $factory->define(App\Models\Flight::class, function (Faker $faker) {
* Define the model's default state.
*
* @return array<string, mixed>
*/
public function definition(): array
{
return [ return [
'id' => $this->faker->unique()->numberBetween(10, 10000000), 'id' => $faker->unique()->numberBetween(10, 10000000),
'airline_id' => fn () => \App\Models\Airline::factory()->create()->id, 'airline_id' => function () {
'flight_number' => $this->faker->unique()->numberBetween(10, 1000000), return factory(\App\Models\Airline::class)->create()->id;
'route_code' => $this->faker->randomElement(['', $this->faker->text(5)]), },
'route_leg' => $this->faker->randomElement( 'flight_number' => $faker->unique()->numberBetween(10, 1000000),
['', $this->faker->numberBetween(0, 1000)] 'route_code' => $faker->randomElement(['', $faker->text(5)]),
), 'route_leg' => $faker->randomElement(['', $faker->numberBetween(0, 1000)]),
'dpt_airport_id' => static fn () => \App\Models\Airport::factory()->create()->id, 'dpt_airport_id' => function () {
'arr_airport_id' => static fn () => \App\Models\Airport::factory()->create()->id, return factory(\App\Models\Airport::class)->create()->id;
'alt_airport_id' => static fn () => \App\Models\Airport::factory()->create()->id, },
'distance' => $this->faker->numberBetween(1, 1000), 'arr_airport_id' => function () {
return factory(\App\Models\Airport::class)->create()->id;
},
'alt_airport_id' => function () {
return factory(\App\Models\Airport::class)->create()->id;
},
'distance' => $faker->numberBetween(1, 1000),
'route' => null, 'route' => null,
'level' => 0, 'level' => 0,
'dpt_time' => $this->faker->time(), 'dpt_time' => $faker->time(),
'arr_time' => $this->faker->time(), 'arr_time' => $faker->time(),
'flight_time' => $this->faker->numberBetween(60, 360), 'flight_time' => $faker->numberBetween(60, 360),
'load_factor' => $this->faker->randomElement([15, 20, 50, 90, 100]), 'load_factor' => $faker->randomElement([15, 20, 50, 90, 100]),
'load_factor_variance' => $this->faker->randomElement([15, 20, 50, 90, 100]), 'load_factor_variance' => $faker->randomElement([15, 20, 50, 90, 100]),
'has_bid' => false, 'has_bid' => false,
'active' => true, 'active' => true,
'visible' => true, 'visible' => true,
'days' => 0, 'days' => 0,
'start_date' => null, 'start_date' => null,
'end_date' => null, 'end_date' => null,
'created_at' => $this->faker->dateTimeBetween('-1 week')->format( 'created_at' => $faker->dateTimeBetween('-1 week', 'now'),
DateTime::ATOM 'updated_at' => static function (array $flight) {
), return $flight['created_at'];
'updated_at' => static fn (array $flight) => $flight['created_at'], },
]; ];
} });
}

View File

@@ -1,30 +1,9 @@
<?php <?php
/** @noinspection PhpIllegalPsrClassPathInspection */ use Faker\Generator as Faker;
namespace App\Database\Factories; $factory->define(App\Models\Journal::class, function (Faker $faker) {
use App\Contracts\Factory;
use App\Models\Journal;
class JournalFactory extends Factory
{
/**
* The name of the factory's corresponding model.
*
* @var string
*/
protected $model = Journal::class;
/**
* Define the model's default state.
*
* @return array<string, mixed>
*/
public function definition(): array
{
return [ return [
'currency' => 'USD', 'currency' => 'USD',
]; ];
} });
}

View File

@@ -1,39 +1,17 @@
<?php <?php
/** @noinspection PhpIllegalPsrClassPathInspection */ use Faker\Generator as Faker;
namespace App\Database\Factories; $factory->define(App\Models\JournalTransactions::class, function (Faker $faker) {
use App\Contracts\Factory;
use App\Models\Journal;
use App\Models\JournalTransaction;
use Carbon\Carbon;
use Ramsey\Uuid\Uuid;
class JournalTransactionsFactory extends Factory
{
/**
* The name of the factory's corresponding model.
*
* @var string
*/
protected $model = JournalTransaction::class;
/**
* Define the model's default state.
*
* @return array<string, mixed>
*/
public function definition(): array
{
return [ return [
'transaction_group' => Uuid::uuid4()->toString(), 'transaction_group' => \Ramsey\Uuid\Uuid::uuid4()->toString(),
'journal_id' => fn () => Journal::factory()->create()->id, 'journal_id' => function () {
'credit' => $this->faker->numberBetween(100, 10000), return factory(\App\Models\Journal::class)->create()->id;
'debit' => $this->faker->numberBetween(100, 10000), },
'credit' => $faker->numberBetween(100, 10000),
'debit' => $faker->numberBetween(100, 10000),
'currency' => 'USD', 'currency' => 'USD',
'memo' => $this->faker->sentence(6), 'memo' => $faker->sentence(6),
'post_date' => Carbon::now('UTC')->toDateTimeString(), 'post_date' => \Carbon\Carbon::now(),
]; ];
} });
}

View File

@@ -1,36 +1,15 @@
<?php <?php
/** @noinspection PhpIllegalPsrClassPathInspection */
namespace App\Database\Factories;
use App\Contracts\Factory;
use App\Models\Enums\NavaidType; use App\Models\Enums\NavaidType;
use App\Models\Navdata; use Faker\Generator as Faker;
class NavdataFactory extends Factory $factory->define(App\Models\Navdata::class, function (Faker $faker) {
{
/**
* The name of the factory's corresponding model.
*
* @var string
*/
protected $model = Navdata::class;
/**
* Define the model's default state.
*
* @return array<string, mixed>
*/
public function definition(): array
{
return [ return [
'id' => str_replace(' ', '', str_replace('.', '', $this->faker->unique()->text(5))), 'id' => str_replace(' ', '', str_replace('.', '', $faker->unique()->text(5))),
'name' => str_replace('.', '', $this->faker->unique()->word), 'name' => str_replace('.', '', $faker->unique()->word),
'type' => $this->faker->randomElement([NavaidType::VOR, NavaidType::NDB]), 'type' => $faker->randomElement([NavaidType::VOR, NavaidType::NDB]),
'lat' => $this->faker->latitude, 'lat' => $faker->latitude,
'lon' => $this->faker->longitude, 'lon' => $faker->longitude,
'freq' => $this->faker->randomFloat(2, 100, 1000), 'freq' => $faker->randomFloat(2, 100, 1000),
]; ];
} });
}

View File

@@ -1,33 +1,14 @@
<?php <?php
/** @noinspection PhpIllegalPsrClassPathInspection */ use Faker\Generator as Faker;
namespace App\Database\Factories; $factory->define(App\Models\News::class, function (Faker $faker) {
use App\Contracts\Factory;
use App\Models\News;
class NewsFactory extends Factory
{
/**
* The name of the factory's corresponding model.
*
* @var string
*/
protected $model = News::class;
/**
* Define the model's default state.
*
* @return array<string, mixed>
*/
public function definition(): array
{
return [ return [
'id' => null, 'id' => null,
'user_id' => fn () => \App\Models\User::factory()->create()->id, 'user_id' => function () {
'subject' => $this->faker->text(), return factory(\App\Models\User::class)->create()->id;
'body' => $this->faker->sentence, },
'subject' => $faker->text(),
'body' => $faker->sentence,
]; ];
} });
}

View File

@@ -1,74 +1,69 @@
<?php <?php
/** @noinspection PhpIllegalPsrClassPathInspection */
namespace App\Database\Factories;
use App\Contracts\Factory;
use App\Models\Airline;
use App\Models\Enums\PirepSource; use App\Models\Enums\PirepSource;
use App\Models\Enums\PirepState; use App\Models\Enums\PirepState;
use App\Models\Enums\PirepStatus; use App\Models\Enums\PirepStatus;
use App\Models\Flight;
use App\Models\Pirep;
use Carbon\Carbon; use Carbon\Carbon;
use Faker\Generator as Faker;
class PirepFactory extends Factory /*
{ * Create a new PIREP
/**
* The name of the factory's corresponding model.
*
* @var string
*/ */
protected $model = Pirep::class; $factory->define(App\Models\Pirep::class, function (Faker $faker) {
$airline = factory(\App\Models\Airline::class)->create();
/** $flight = factory(\App\Models\Flight::class)->create([
* Define the model's default state. 'airline_id' => $airline->id,
* ]);
* @return array<string, mixed>
*/
public function definition(): array
{
/** @var Airline $airline */
$airline = Airline::factory()->create();
/** @var Flight $flight */
$flight = Flight::factory()->create(['airline_id' => $airline->id]);
return [ return [
'id' => $this->faker->unique()->numberBetween(10, 10000000), 'id' => $faker->unique()->numberBetween(10, 10000000),
'airline_id' => fn () => $airline->id, 'airline_id' => function () use ($airline) {
'user_id' => fn () => \App\Models\User::factory()->create()->id, return $airline->id;
'aircraft_id' => fn () => \App\Models\Aircraft::factory()->create()->id, },
'flight_id' => fn () => $flight->id, 'user_id' => function () {
'flight_number' => fn () => $flight->flight_number, return factory(\App\Models\User::class)->create()->id;
},
'aircraft_id' => function () {
return factory(\App\Models\Aircraft::class)->create()->id;
},
'flight_id' => function () use ($flight) {
return $flight->id;
},
'flight_number' => function () use ($flight) {
return $flight->flight_number;
},
'route_code' => null, 'route_code' => null,
'route_leg' => null, 'route_leg' => null,
'dpt_airport_id' => fn () => $flight->dpt_airport_id, 'dpt_airport_id' => function () use ($flight) {
'arr_airport_id' => fn () => $flight->arr_airport_id, return $flight->dpt_airport_id;
'level' => $this->faker->numberBetween(20, 400), },
'distance' => $this->faker->randomFloat(2, 0, 6000), 'arr_airport_id' => function () use ($flight) {
'planned_distance' => $this->faker->randomFloat(2, 0, 6000), return $flight->arr_airport_id;
'flight_time' => $this->faker->numberBetween(60, 360), },
'planned_flight_time' => $this->faker->numberBetween(60, 360), 'level' => $faker->numberBetween(20, 400),
'zfw' => $this->faker->randomFloat(2), 'distance' => $faker->randomFloat(2, 0, 6000),
'block_fuel' => $this->faker->randomFloat(2, 0, 1000), 'planned_distance' => $faker->randomFloat(2, 0, 6000),
'fuel_used' => fn (array $pirep) => round($pirep['block_fuel'] * .9, 2), 'flight_time' => $faker->numberBetween(60, 360),
'planned_flight_time' => $faker->numberBetween(60, 360),
'zfw' => $faker->randomFloat(2),
'block_fuel' => $faker->randomFloat(2, 0, 1000),
'fuel_used' => function (array $pirep) {
return round($pirep['block_fuel'] * .9, 2); // 90% of the fuel loaded was used
},
'block_on_time' => Carbon::now('UTC'), 'block_on_time' => Carbon::now('UTC'),
'block_off_time' => fn (array $pirep) => $pirep['block_on_time']->subMinutes( 'block_off_time' => function (array $pirep) {
$pirep['flight_time'] return $pirep['block_on_time']->subMinutes($pirep['flight_time']);
), },
'route' => $this->faker->text(200), 'route' => $faker->text(200),
'notes' => $this->faker->text(200), 'notes' => $faker->text(200),
'source' => $this->faker->randomElement( 'source' => $faker->randomElement([PirepSource::MANUAL, PirepSource::ACARS]),
[PirepSource::MANUAL, PirepSource::ACARS]
),
'source_name' => 'TestFactory', 'source_name' => 'TestFactory',
'state' => PirepState::PENDING, 'state' => PirepState::PENDING,
'status' => PirepStatus::SCHEDULED, 'status' => PirepStatus::SCHEDULED,
'submitted_at' => Carbon::now('UTC')->toDateTimeString(), 'submitted_at' => Carbon::now('UTC')->toDateTimeString(),
'created_at' => Carbon::now('UTC')->toDateTimeString(), 'created_at' => Carbon::now('UTC')->toDateTimeString(),
'updated_at' => fn (array $pirep) => $pirep['created_at'], 'updated_at' => function (array $pirep) {
return $pirep['created_at'];
},
]; ];
} });
}

View File

@@ -1,37 +1,23 @@
<?php <?php
/** @noinspection PhpIllegalPsrClassPathInspection */ use Faker\Generator as Faker;
namespace App\Database\Factories; /*
* id: 2
use App\Contracts\Factory; name: Junior First Officer
use App\Models\Rank; hours: 10
auto_approve_acars: 1
class RankFactory extends Factory auto_approve_manual: 1
{
/**
* The name of the factory's corresponding model.
*
* @var string
*/ */
protected $model = Rank::class; $factory->define(App\Models\Rank::class, function (Faker $faker) {
/**
* Define the model's default state.
*
* @return array<string, mixed>
*/
public function definition(): array
{
return [ return [
'id' => null, 'id' => null,
'name' => $this->faker->unique()->text(50), 'name' => $faker->unique()->text(50),
'hours' => $this->faker->numberBetween(10, 50), 'hours' => $faker->numberBetween(10, 50),
'acars_base_pay_rate' => $this->faker->numberBetween(10, 100), 'acars_base_pay_rate' => $faker->numberBetween(10, 100),
'manual_base_pay_rate' => $this->faker->numberBetween(10, 100), 'manual_base_pay_rate' => $faker->numberBetween(10, 100),
'auto_approve_acars' => 0, 'auto_approve_acars' => 0,
'auto_approve_manual' => 0, 'auto_approve_manual' => 0,
'auto_promote' => 0, 'auto_promote' => 0,
]; ];
} });
}

View File

@@ -1,34 +0,0 @@
<?php
/** @noinspection PhpIllegalPsrClassPathInspection */
namespace App\Database\Factories;
use App\Contracts\Factory;
use App\Models\Role;
class RoleFactory extends Factory
{
/**
* The name of the factory's corresponding model.
*
* @var string
*/
protected $model = Role::class;
/**
* Define the model's default state.
*
* @return array<string, mixed>
*/
public function definition(): array
{
return [
'id' => null,
'name' => $this->faker->name,
'display_name' => $this->faker->name,
'read_only' => false,
'disable_activity_checks' => $this->faker->boolean(),
];
}
}

View File

@@ -1,38 +0,0 @@
<?php
/** @noinspection PhpIllegalPsrClassPathInspection */
namespace App\Database\Factories;
use App\Contracts\Factory;
use App\Models\SimBrief;
use Carbon\Carbon;
class SimBriefFactory extends Factory
{
/**
* The name of the factory's corresponding model.
*
* @var string
*/
protected $model = SimBrief::class;
/**
* Define the model's default state.
*
* @return array<string, mixed>
*/
public function definition()
{
return [
'id' => $this->faker->unique()->numberBetween(10, 10000000),
'user_id' => null,
'flight_id' => null,
'pirep_id' => null,
'acars_xml' => '',
'ofp_xml' => '',
'created_at' => Carbon::now('UTC')->toDateTimeString(),
'updated_at' => fn (array $sb) => $sb['created_at'],
];
}
}

View File

@@ -0,0 +1,21 @@
<?php
/** @var \Illuminate\Database\Eloquent\Factory $factory */
use Carbon\Carbon;
use Faker\Generator as Faker;
$factory->define(App\Models\SimBrief::class, function (Faker $faker) {
return [
'id' => $faker->unique()->numberBetween(10, 10000000),
'user_id' => null,
'flight_id' => null,
'pirep_id' => null,
'acars_xml' => '',
'ofp_xml' => '',
'created_at' => Carbon::now('UTC')->toDateTimeString(),
'updated_at' => function (array $sb) {
return $sb['created_at'];
},
];
});

View File

@@ -1,34 +1,15 @@
<?php <?php
/** @noinspection PhpIllegalPsrClassPathInspection */ use Faker\Generator as Faker;
namespace App\Database\Factories; $factory->define(App\Models\Subfleet::class, function (Faker $faker) {
use App\Contracts\Factory;
use App\Models\Subfleet;
class SubfleetFactory extends Factory
{
/**
* The name of the factory's corresponding model.
*
* @var string
*/
protected $model = Subfleet::class;
/**
* Define the model's default state.
*
* @return array<string, mixed>
*/
public function definition(): array
{
return [ return [
'id' => null, 'id' => null,
'airline_id' => fn () => \App\Models\Airline::factory()->create()->id, 'airline_id' => function () {
'name' => $this->faker->unique()->text(50), return factory(\App\Models\Airline::class)->create()->id;
'type' => $this->faker->unique()->text(7), },
'ground_handling_multiplier' => $this->faker->numberBetween(50, 200), 'name' => $faker->unique()->text(50),
'type' => $faker->unique()->text(7),
'ground_handling_multiplier' => $faker->numberBetween(50, 200),
]; ];
} });
}

View File

@@ -1,54 +1,28 @@
<?php <?php
/** @noinspection PhpIllegalPsrClassPathInspection */
namespace App\Database\Factories;
use App\Contracts\Factory;
use App\Models\Airline; use App\Models\Airline;
use App\Models\Enums\UserState; use App\Models\Enums\UserState;
use App\Models\User; use Faker\Generator as Faker;
use Illuminate\Support\Facades\Hash; use Illuminate\Support\Facades\Hash;
class UserFactory extends Factory $factory->define(App\Models\User::class, function (Faker $faker) {
{ static $password;
/**
* The name of the factory's corresponding model.
*
* @var string
*/
protected $model = User::class;
/**
* @var string
*/
private static string $password;
/**
* Define the model's default state.
*
* @return array<string, mixed>
*/
public function definition(): array
{
if (empty(self::$password)) {
self::$password = Hash::make('secret');
}
return [ return [
'id' => null, 'id' => null,
'pilot_id' => null, 'pilot_id' => null,
'name' => $this->faker->name, 'name' => $faker->name,
'email' => $this->faker->safeEmail, 'email' => $faker->safeEmail,
'password' => self::$password, 'password' => $password ?: $password = Hash::make('secret'),
'api_key' => $this->faker->sha1, 'api_key' => $faker->sha1,
'airline_id' => fn () => Airline::factory()->create()->id, 'airline_id' => function () {
return factory(Airline::class)->create()->id;
},
'rank_id' => 1, 'rank_id' => 1,
'flights' => $this->faker->numberBetween(0, 1000), 'flights' => $faker->numberBetween(0, 1000),
'flight_time' => $this->faker->numberBetween(0, 10000), 'flight_time' => $faker->numberBetween(0, 10000),
'transfer_time' => $this->faker->numberBetween(0, 10000), 'transfer_time' => $faker->numberBetween(0, 10000),
'state' => UserState::ACTIVE, 'state' => UserState::ACTIVE,
'remember_token' => $this->faker->unique()->text(5), 'remember_token' => $faker->unique()->text(5),
]; ];
} });
}

View File

@@ -4,7 +4,8 @@ use App\Contracts\Migration;
use App\Services\Installer\SeederService; use App\Services\Installer\SeederService;
use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Schema\Blueprint;
return new class() extends Migration { class CreateSettingsTable extends Migration
{
private $seederSvc; private $seederSvc;
public function __construct() public function __construct()
@@ -49,4 +50,4 @@ return new class() extends Migration {
{ {
Schema::dropIfExists('settings'); Schema::dropIfExists('settings');
} }
}; }

View File

@@ -5,7 +5,8 @@ use App\Models\Pirep;
use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema; use Illuminate\Support\Facades\Schema;
return new class() extends Migration { class CreateUsersTable extends Migration
{
/** /**
* Run the migrations. * Run the migrations.
* *
@@ -54,4 +55,4 @@ return new class() extends Migration {
{ {
Schema::dropIfExists('users'); Schema::dropIfExists('users');
} }
}; }

View File

@@ -2,9 +2,9 @@
use App\Contracts\Migration; use App\Contracts\Migration;
use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class() extends Migration { class RolesPermissionsTables extends Migration
{
public function up() public function up()
{ {
// Create table for storing roles // Create table for storing roles
@@ -82,4 +82,4 @@ return new class() extends Migration {
Schema::dropIfExists('role_user'); Schema::dropIfExists('role_user');
Schema::dropIfExists('roles'); Schema::dropIfExists('roles');
} }
}; }

View File

@@ -4,7 +4,8 @@ use App\Contracts\Migration;
use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema; use Illuminate\Support\Facades\Schema;
return new class() extends Migration { class CreatePasswordResetsTable extends Migration
{
public function up() public function up()
{ {
Schema::create('password_resets', function (Blueprint $table) { Schema::create('password_resets', function (Blueprint $table) {
@@ -18,4 +19,4 @@ return new class() extends Migration {
{ {
Schema::dropIfExists('password_resets'); Schema::dropIfExists('password_resets');
} }
}; }

View File

@@ -4,7 +4,8 @@ use App\Contracts\Migration;
use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema; use Illuminate\Support\Facades\Schema;
return new class() extends Migration { class CreateSessionsTable extends Migration
{
public function up() public function up()
{ {
Schema::create('sessions', function (Blueprint $table) { Schema::create('sessions', function (Blueprint $table) {
@@ -21,4 +22,4 @@ return new class() extends Migration {
{ {
Schema::dropIfExists('sessions'); Schema::dropIfExists('sessions');
} }
}; }

View File

@@ -3,7 +3,8 @@
use App\Contracts\Migration; use App\Contracts\Migration;
use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Schema\Blueprint;
return new class() extends Migration { class CreateAirlinesTable extends Migration
{
public function up() public function up()
{ {
Schema::create('airlines', function (Blueprint $table) { Schema::create('airlines', function (Blueprint $table) {
@@ -30,4 +31,4 @@ return new class() extends Migration {
{ {
Schema::dropIfExists('airlines'); Schema::dropIfExists('airlines');
} }
}; }

View File

@@ -5,7 +5,8 @@ use App\Models\Enums\AircraftState;
use App\Models\Enums\AircraftStatus; use App\Models\Enums\AircraftStatus;
use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Schema\Blueprint;
return new class() extends Migration { class CreateAircraftsTable extends Migration
{
public function up() public function up()
{ {
Schema::create('aircraft', function (Blueprint $table) { Schema::create('aircraft', function (Blueprint $table) {
@@ -33,4 +34,4 @@ return new class() extends Migration {
{ {
Schema::dropIfExists('aircraft'); Schema::dropIfExists('aircraft');
} }
}; }

View File

@@ -3,7 +3,8 @@
use App\Contracts\Migration; use App\Contracts\Migration;
use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Schema\Blueprint;
return new class() extends Migration { class CreateFaresTable extends Migration
{
public function up() public function up()
{ {
Schema::create('fares', function (Blueprint $table) { Schema::create('fares', function (Blueprint $table) {
@@ -23,4 +24,4 @@ return new class() extends Migration {
{ {
Schema::dropIfExists('fares'); Schema::dropIfExists('fares');
} }
}; }

View File

@@ -3,7 +3,8 @@
use App\Contracts\Migration; use App\Contracts\Migration;
use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Schema\Blueprint;
return new class() extends Migration { class CreateAirportsTable extends Migration
{
public function up() public function up()
{ {
Schema::create('airports', function (Blueprint $table) { Schema::create('airports', function (Blueprint $table) {
@@ -32,4 +33,4 @@ return new class() extends Migration {
{ {
Schema::dropIfExists('airports'); Schema::dropIfExists('airports');
} }
}; }

View File

@@ -5,7 +5,8 @@ use App\Contracts\Model;
use App\Models\Enums\FlightType; use App\Models\Enums\FlightType;
use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Schema\Blueprint;
return new class() extends Migration { class CreateFlightTables extends Migration
{
public function up() public function up()
{ {
Schema::create('flights', function (Blueprint $table) { Schema::create('flights', function (Blueprint $table) {
@@ -97,4 +98,4 @@ return new class() extends Migration {
Schema::drop('flight_subfleet'); Schema::drop('flight_subfleet');
Schema::drop('flights'); Schema::drop('flights');
} }
}; }

View File

@@ -3,7 +3,8 @@
use App\Contracts\Migration; use App\Contracts\Migration;
use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Schema\Blueprint;
return new class() extends Migration { class CreateRanksTable extends Migration
{
public function up() public function up()
{ {
Schema::create('ranks', function (Blueprint $table) { Schema::create('ranks', function (Blueprint $table) {
@@ -28,4 +29,4 @@ return new class() extends Migration {
{ {
Schema::dropIfExists('ranks'); Schema::dropIfExists('ranks');
} }
}; }

View File

@@ -3,7 +3,8 @@
use App\Contracts\Migration; use App\Contracts\Migration;
use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Schema\Blueprint;
return new class() extends Migration { class CreateSubfleetTables extends Migration
{
public function up() public function up()
{ {
Schema::create('subfleets', function (Blueprint $table) { Schema::create('subfleets', function (Blueprint $table) {
@@ -50,4 +51,4 @@ return new class() extends Migration {
Schema::dropIfExists('subfleet_fare'); Schema::dropIfExists('subfleet_fare');
Schema::dropIfExists('subfleet_rank'); Schema::dropIfExists('subfleet_rank');
} }
}; }

View File

@@ -7,7 +7,8 @@ use App\Models\Enums\PirepState;
use App\Models\Enums\PirepStatus; use App\Models\Enums\PirepStatus;
use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Schema\Blueprint;
return new class() extends Migration { class CreatePirepTables extends Migration
{
/** /**
* Run the migrations. * Run the migrations.
* *
@@ -105,4 +106,4 @@ return new class() extends Migration {
Schema::dropIfExists('pirep_fields'); Schema::dropIfExists('pirep_fields');
Schema::dropIfExists('pirep_field_values'); Schema::dropIfExists('pirep_field_values');
} }
}; }

View File

@@ -5,7 +5,8 @@ use App\Contracts\Model;
use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema; use Illuminate\Support\Facades\Schema;
return new class() extends Migration { class CreateBidsTable extends Migration
{
public function up() public function up()
{ {
Schema::create('bids', function (Blueprint $table) { Schema::create('bids', function (Blueprint $table) {
@@ -23,4 +24,4 @@ return new class() extends Migration {
{ {
Schema::dropIfExists('bids'); Schema::dropIfExists('bids');
} }
}; }

View File

@@ -4,7 +4,8 @@ use App\Contracts\Migration;
use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema; use Illuminate\Support\Facades\Schema;
return new class() extends Migration { class CreateJobsTable extends Migration
{
public function up() public function up()
{ {
Schema::create('jobs', function (Blueprint $table) { Schema::create('jobs', function (Blueprint $table) {
@@ -22,4 +23,4 @@ return new class() extends Migration {
{ {
Schema::dropIfExists('jobs'); Schema::dropIfExists('jobs');
} }
}; }

View File

@@ -4,7 +4,8 @@ use App\Contracts\Migration;
use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema; use Illuminate\Support\Facades\Schema;
return new class() extends Migration { class CreateFailedJobsTable extends Migration
{
public function up() public function up()
{ {
Schema::create('failed_jobs', function (Blueprint $table) { Schema::create('failed_jobs', function (Blueprint $table) {
@@ -21,4 +22,4 @@ return new class() extends Migration {
{ {
Schema::dropIfExists('failed_jobs'); Schema::dropIfExists('failed_jobs');
} }
}; }

View File

@@ -4,7 +4,8 @@ use App\Contracts\Migration;
use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema; use Illuminate\Support\Facades\Schema;
return new class() extends Migration { class CreateNavdataTables extends Migration
{
public function up() public function up()
{ {
/* /*
@@ -29,4 +30,4 @@ return new class() extends Migration {
{ {
Schema::dropIfExists('navdata'); Schema::dropIfExists('navdata');
} }
}; }

View File

@@ -5,7 +5,8 @@ use App\Contracts\Model;
use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema; use Illuminate\Support\Facades\Schema;
return new class() extends Migration { class CreateAcarsTables extends Migration
{
public function up() public function up()
{ {
Schema::create('acars', function (Blueprint $table) { Schema::create('acars', function (Blueprint $table) {
@@ -42,4 +43,4 @@ return new class() extends Migration {
{ {
Schema::dropIfExists('acars'); Schema::dropIfExists('acars');
} }
}; }

View File

@@ -4,7 +4,8 @@ use App\Contracts\Migration;
use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema; use Illuminate\Support\Facades\Schema;
return new class() extends Migration { class CreateStatsTable extends Migration
{
public function up() public function up()
{ {
Schema::create('stats', function (Blueprint $table) { Schema::create('stats', function (Blueprint $table) {
@@ -23,4 +24,4 @@ return new class() extends Migration {
{ {
Schema::dropIfExists('stats'); Schema::dropIfExists('stats');
} }
}; }

View File

@@ -4,7 +4,8 @@ use App\Contracts\Migration;
use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema; use Illuminate\Support\Facades\Schema;
return new class() extends Migration { class CreateNewsTable extends Migration
{
public function up() public function up()
{ {
Schema::create('news', function (Blueprint $table) { Schema::create('news', function (Blueprint $table) {
@@ -20,4 +21,4 @@ return new class() extends Migration {
{ {
Schema::drop('news'); Schema::drop('news');
} }
}; }

View File

@@ -5,7 +5,8 @@ use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema; use Illuminate\Support\Facades\Schema;
use Modules\Awards\Awards\PilotFlightAwards; use Modules\Awards\Awards\PilotFlightAwards;
return new class() extends Migration { class CreateAwardsTable extends Migration
{
public function up() public function up()
{ {
Schema::create('awards', function (Blueprint $table) { Schema::create('awards', function (Blueprint $table) {
@@ -51,4 +52,4 @@ return new class() extends Migration {
Schema::dropIfExists('awards'); Schema::dropIfExists('awards');
Schema::dropIfExists('user_awards'); Schema::dropIfExists('user_awards');
} }
}; }

View File

@@ -4,7 +4,8 @@ use App\Contracts\Migration;
use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema; use Illuminate\Support\Facades\Schema;
return new class() extends Migration { class CreateExpensesTable extends Migration
{
public function up() public function up()
{ {
Schema::create('expenses', function (Blueprint $table) { Schema::create('expenses', function (Blueprint $table) {
@@ -33,4 +34,4 @@ return new class() extends Migration {
{ {
Schema::dropIfExists('expenses'); Schema::dropIfExists('expenses');
} }
}; }

View File

@@ -4,7 +4,8 @@ use App\Contracts\Migration;
use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema; use Illuminate\Support\Facades\Schema;
return new class() extends Migration { class CreateJournalTransactionsTable extends Migration
{
public function up() public function up()
{ {
Schema::create('journal_transactions', function (Blueprint $table) { Schema::create('journal_transactions', function (Blueprint $table) {
@@ -32,4 +33,4 @@ return new class() extends Migration {
{ {
Schema::dropIfExists('journal_transactions'); Schema::dropIfExists('journal_transactions');
} }
}; }

View File

@@ -4,7 +4,8 @@ use App\Contracts\Migration;
use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema; use Illuminate\Support\Facades\Schema;
return new class() extends Migration { class CreateJournalsTable extends Migration
{
public function up() public function up()
{ {
Schema::create('journals', function (Blueprint $table) { Schema::create('journals', function (Blueprint $table) {
@@ -22,4 +23,4 @@ return new class() extends Migration {
{ {
Schema::dropIfExists('journals'); Schema::dropIfExists('journals');
} }
}; }

View File

@@ -4,7 +4,8 @@ use App\Contracts\Migration;
use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema; use Illuminate\Support\Facades\Schema;
return new class() extends Migration { class CreateLedgersTable extends Migration
{
/** /**
* Run the migrations. * Run the migrations.
* *
@@ -29,4 +30,4 @@ return new class() extends Migration {
{ {
Schema::dropIfExists('ledgers'); Schema::dropIfExists('ledgers');
} }
}; }

View File

@@ -5,7 +5,8 @@ use App\Contracts\Model;
use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema; use Illuminate\Support\Facades\Schema;
return new class() extends Migration { class CreateFilesTable extends Migration
{
/** /**
* Create the files table. Acts as a morphable * Create the files table. Acts as a morphable
* *
@@ -39,4 +40,4 @@ return new class() extends Migration {
{ {
Schema::dropIfExists('files'); Schema::dropIfExists('files');
} }
}; }

Some files were not shown because too many files have changed in this diff Show More