Skip to content

Commit

Permalink
Init
Browse files Browse the repository at this point in the history
  • Loading branch information
f3l1x committed Jul 31, 2023
1 parent a360d7b commit 75e2a7c
Show file tree
Hide file tree
Showing 39 changed files with 3,628 additions and 0 deletions.
16 changes: 16 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# EditorConfig is awesome: http://EditorConfig.org

root = true

[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true
indent_style = tab
indent_size = tab
tab_width = 4

[{*.json, *.yaml, *.yml, *.md}]
indent_style = space
indent_size = 2
10 changes: 10 additions & 0 deletions .github/.kodiak.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
version = 1

[merge]
automerge_label = "automerge"
blacklist_title_regex = "^WIP.*"
blacklist_labels = ["WIP"]
method = "rebase"
delete_branch_on_merge = true
notify_on_conflict = true
optimistic_updates = false
9 changes: 9 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
version: 2
updates:
- package-ecosystem: composer
directory: "/"
schedule:
interval: daily
labels:
- "dependencies"
- "automerge"
17 changes: 17 additions & 0 deletions .github/workflows/codesniffer.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
name: "Codesniffer"

on:
pull_request:

push:
branches: [ "*" ]

schedule:
- cron: "0 8 * * 1"

jobs:
codesniffer:
name: "Codesniffer"
uses: contributte/.github/.github/workflows/codesniffer.yml@v1
with:
php: "8.2"
18 changes: 18 additions & 0 deletions .github/workflows/coverage.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
name: "Coverage"

on:
pull_request:

push:
branches: [ "*" ]

schedule:
- cron: "0 8 * * 1"

jobs:
coverage:
name: "Nette Tester"
uses: contributte/.github/.github/workflows/nette-tester-coverage.yml@v1
with:
php: "8.2"
make: "init coverage"
18 changes: 18 additions & 0 deletions .github/workflows/phpstan.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
name: "Phpstan"

on:
pull_request:

push:
branches: [ "*" ]

schedule:
- cron: "0 8 * * 1"

jobs:
phpstan:
name: "Phpstan"
uses: contributte/.github/.github/workflows/phpstan.yml@v1
with:
php: "8.2"
make: "init phpstan"
18 changes: 18 additions & 0 deletions .github/workflows/tests.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
name: "Tests"

on:
pull_request:

push:
branches: [ "*" ]

schedule:
- cron: "0 8 * * 1"

jobs:
test82:
name: "Nette Tester"
uses: contributte/.github/.github/workflows/nette-tester.yml@v1
with:
php: "8.2"
make: "init tests"
13 changes: 13 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# IDE
.idea

# Composer
/vendor/*

# Apache
!.htaccess

# Nette
/var/m
# Nette config
/config/local.neon
78 changes: 78 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
############################################################
# PROJECT ##################################################
############################################################
.PHONY: project
project: install setup

.PHONY: init
init:
cp config/local.neon.example config/local.neon

.PHONY: install
install:
composer install

.PHONY: setup
setup:
mkdir -p var/tmp var/log
chmod 0777 var/tmp var/log

.PHONY: clean
clean:
find var/tmp -mindepth 1 ! -name '.gitignore' -type f,d -exec rm -rf {} +
find var/log -mindepth 1 ! -name '.gitignore' -type f,d -exec rm -rf {} +

############################################################
# DEVELOPMENT ##############################################
############################################################
.PHONY: qa
qa: cs phpstan

.PHONY: cs
cs:
ifdef GITHUB_ACTION
vendor/bin/phpcs --standard=ruleset.xml --encoding=utf-8 --colors -nsp -q --report=checkstyle app tests | cs2pr
else
vendor/bin/phpcs --standard=ruleset.xml --encoding=utf-8 --colors -nsp app tests
endif

.PHONY: csf
csf:
vendor/bin/phpcbf --standard=ruleset.xml --encoding=utf-8 --colors -nsp app tests

.PHONY: phpstan
phpstan:
vendor/bin/phpstan analyse -c phpstan.neon --memory-limit=512M

.PHONY: tests
tests:
vendor/bin/tester -s -p php --colors 1 -C tests

.PHONY: coverage
coverage:
vendor/bin/tester -s -p phpdbg --colors 1 -C --coverage ./coverage.xml --coverage-src ./app tests

.PHONY: dev
dev:
NETTE_DEBUG=1 NETTE_ENV=dev php -S 0.0.0.0:8000 -t www

.PHONY: build
build:
echo "OK"

############################################################
# DOCKER ###################################################
############################################################
.PHONY: docker-up
docker-up:
docker compose up

############################################################
# DEPLOYMENT ###############################################
############################################################
.PHONY: deploy
deploy:
$(MAKE) clean
$(MAKE) project
$(MAKE) build
$(MAKE) clean
70 changes: 70 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
![](https://heatbadger.now.sh/github/readme/contributte/framex-skeleton/)

<p align=center>
<a href="https://github.com/contributte/framex-skeleton/actions"><img src="https://badgen.net/github/checks/contributte/framex-skeleton/master"></a>
<a href="https://coveralls.io/r/contributte/framex-skeleton"><img src="https://badgen.net/coveralls/c/github/contributte/framex-skeleton"></a>
<a href="https://packagist.org/packages/contributte/framex-skeleton"><img src="https://badgen.net/packagist/dm/contributte/framex-skeleton"></a>
<a href="https://packagist.org/packages/contributte/framex-skeleton"><img src="https://badgen.net/packagist/v/contributte/framex-skeleton"></a>
</p>
<p align=center>
<a href="https://packagist.org/packages/contributte/framex-skeleton"><img src="https://badgen.net/packagist/php/contributte/framex-skeleton"></a>
<a href="https://github.com/contributte/framex-skeleton"><img src="https://badgen.net/github/license/contributte/framex-skeleton"></a>
<a href="https://bit.ly/ctteg"><img src="https://badgen.net/badge/support/gitter/cyan"></a>
<a href="https://bit.ly/cttfo"><img src="https://badgen.net/badge/support/forum/yellow"></a>
<a href="https://contributte.org/partners.html"><img src="https://badgen.net/badge/sponsor/donations/F96854"></a>
</p>

<p align=center>
Website 🚀 <a href="https://contributte.org">contributte.org</a> | Contact 👨🏻‍💻 <a href="https://f3l1x.io">f3l1x.io</a> | Twitter 🐦 <a href="https://twitter.com/contributte">@contributte</a>
</p>

<p align=center>
<img src="https://api.microlink.io?url=https%3A%2F%2Fexamples.contributte.org%2Fframex-skeleton%2F&overlay.browser=light&screenshot=true&meta=false&embed=screenshot.url"></img>
</p>

-----

## Goal

Main goal is to show how [contributte/nella](https://github.com/contributte/sentry) can boost your [Nette](https://nette.org) based project..

## Demo

https://examples.contributte.org/framex-skeleton/

## Installation

You will need `PHP 8.1+` and [Composer](https://getcomposer.org/).

Create project using composer.

```bash
composer create-project -s dev contributte/framex-skeleton acme
```

Now you have application installed. It's time to run it.

## Startup

The easiest way is to use php built-in web server.

```bash
make dev
# php -S 0.0.0.0:8000 -t www
```

Then visit [http://localhost:8000](http://localhost:8000) in your browser.

## Development

See [how to contribute](https://contributte.org/contributing.html) to this package.

This package is currently maintaining by these authors.

<a href="https://github.com/f3l1x">
<img width="80" height="80" src="https://avatars2.githubusercontent.com/u/538058?v=3&s=80">
</a>

-----

Consider to [support](https://contributte.org/partners.html) **contributte** development team. Also thank you for using this project.
25 changes: 25 additions & 0 deletions app/Api/AbstractController.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
<?php declare(strict_types = 1);

namespace App\Api;

use Contributte\FrameX\Http\IResponse;
use Nette\Schema\Processor;
use Nette\Schema\Schema;
use Nette\Schema\ValidationException;
use Psr\Http\Message\ServerRequestInterface;

abstract class AbstractController
{

/**
* @param mixed[] $params
* @throws ValidationException
*/
protected function validate(Schema $schema, array $params): mixed
{
return (new Processor())->process($schema, $params);
}

abstract public function __invoke(ServerRequestInterface $request): IResponse;

}
50 changes: 50 additions & 0 deletions app/Api/Job/CreateJobController.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
<?php declare(strict_types = 1);

namespace App\Api\Job;

use App\Api\AbstractController;
use App\Domain\Job\Job;
use Contributte\FrameX\Http\ErrorResponse;
use Contributte\FrameX\Http\IResponse;
use Nette\Schema\Expect;
use Nette\Schema\Schema;
use Nette\Schema\ValidationException;
use Nette\Utils\Json;
use Nette\Utils\JsonException;
use Psr\Http\Message\ServerRequestInterface;

class CreateJobController extends AbstractController
{

public static function schema(): Schema
{
return Expect::structure([
'uuid' => Expect::string()->required(),
])->castTo(CreateJobRequest::class);
}

public function __invoke(ServerRequestInterface $request): IResponse
{
try {
/** @var mixed[] $body */
$body = Json::decode((string) $request->getBody(), forceArrays: true);

/** @var CreateJobRequest $entity */
$entity = $this->validate(self::schema(), $body);
} catch (ValidationException $e) {
return ErrorResponse::create()
->withErrorCode(406)
->withMessage($e->getMessage());
} catch (JsonException $e) {
return ErrorResponse::create()
->withErrorCode(400)
->withMessage('Invalid JSON body');
}

// do some magic in your domain
$job = new Job($entity->uuid);

return CreateJobResponse::of($job);
}

}
10 changes: 10 additions & 0 deletions app/Api/Job/CreateJobRequest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<?php declare(strict_types = 1);

namespace App\Api\Job;

class CreateJobRequest
{

public string $uuid;

}
19 changes: 19 additions & 0 deletions app/Api/Job/CreateJobResponse.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
<?php declare(strict_types = 1);

namespace App\Api\Job;

use App\Domain\Job\Job;
use Contributte\FrameX\Http\EntityResponse;

class CreateJobResponse extends EntityResponse
{

public static function of(Job $job): EntityResponse
{
$self = self::create();
$self->payload = $job->toArray();

return $self;
}

}

0 comments on commit 75e2a7c

Please sign in to comment.