Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
49 commits
Select commit Hold shift + click to select a range
880772c
added docker-compose.yml
AleksandKrasnyatov Apr 4, 2026
09ec4b9
added Makefile
AleksandKrasnyatov Apr 4, 2026
176eb1c
added raw elastic client logic
AleksandKrasnyatov Apr 4, 2026
db9fddc
added raw elastic cli app
AleksandKrasnyatov Apr 12, 2026
9d929c9
added composer
AleksandKrasnyatov Apr 12, 2026
deaa12b
refactored to start with repository
AleksandKrasnyatov Apr 12, 2026
ba2a6bf
updated README.md
AleksandKrasnyatov Apr 12, 2026
2025b46
added raw search logic
AleksandKrasnyatov Apr 16, 2026
71d0df9
added search logic with docopt
AleksandKrasnyatov Apr 18, 2026
cf227d3
added renderer
AleksandKrasnyatov Apr 18, 2026
ca97ca9
added limit
AleksandKrasnyatov Apr 18, 2026
4f1d894
filled readme
AleksandKrasnyatov Apr 18, 2026
efcab26
refactored
AleksandKrasnyatov Apr 18, 2026
858bad8
deleted useless file
AleksandKrasnyatov Apr 19, 2026
032217c
init project with raw logic
AleksandKrasnyatov Apr 19, 2026
1f674f3
refactored structure and added create event use case
AleksandKrasnyatov Apr 25, 2026
9822e5f
added tests for VO
AleksandKrasnyatov Apr 25, 2026
ffafe56
added php unit cache to gitignore
AleksandKrasnyatov Apr 25, 2026
635513f
added test for create event use case
AleksandKrasnyatov Apr 25, 2026
167d06a
added get event use case wit test
AleksandKrasnyatov Apr 25, 2026
950c2f6
added redis implementation
AleksandKrasnyatov Apr 25, 2026
fa873da
added clear events use case
AleksandKrasnyatov Apr 25, 2026
8e0ff4d
refactored
AleksandKrasnyatov Apr 25, 2026
7b7ba2e
added memcached storage implementation
AleksandKrasnyatov Apr 25, 2026
e685cc0
added fast commands and made readme
AleksandKrasnyatov Apr 26, 2026
6669068
deleted useless file
AleksandKrasnyatov Apr 26, 2026
66ed802
init project
AleksandKrasnyatov May 7, 2026
133ef86
added simple burger
AleksandKrasnyatov May 7, 2026
424409c
added simple hot dog and sandwich
AleksandKrasnyatov May 7, 2026
dbbc0f1
added abstract Food class and cook method with status
AleksandKrasnyatov May 7, 2026
ce60b0a
added abstract food factory with 3 factories implementations
AleksandKrasnyatov May 7, 2026
825a291
added OnionDecorator
AleksandKrasnyatov May 10, 2026
5dde495
added proxy
AleksandKrasnyatov May 10, 2026
6e386e0
added observer
AleksandKrasnyatov May 10, 2026
02bd5fb
added notification when cooked
AleksandKrasnyatov May 11, 2026
7a59184
refactored cook logic, added ingredients
AleksandKrasnyatov May 11, 2026
f27cafa
refactored proxy
AleksandKrasnyatov May 11, 2026
5afe420
refactored proxy
AleksandKrasnyatov May 11, 2026
8059f6c
added first part of classes for domain logic
AleksandKrasnyatov May 16, 2026
636e47c
deleted old version
AleksandKrasnyatov May 16, 2026
33051e5
added cook, observer and proxy
AleksandKrasnyatov May 16, 2026
d25ae57
added configurators with ingredients and decorators
AleksandKrasnyatov May 16, 2026
1ede0f3
added QualityCheckInter logic
AleksandKrasnyatov May 16, 2026
d9230fb
added use case and refactored
AleksandKrasnyatov May 16, 2026
592bf5d
added command for interactive testing
AleksandKrasnyatov May 17, 2026
cc221d6
refactored
AleksandKrasnyatov May 17, 2026
f3e0f3c
refactored README
AleksandKrasnyatov May 17, 2026
7229401
added linters and refactored
AleksandKrasnyatov May 17, 2026
3572a34
refactored
AleksandKrasnyatov May 17, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,4 @@
.DS_Store
.AppleDouble
.LSOverride
.phpunit.cache
16 changes: 16 additions & 0 deletions .php-cs-fixer.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
<?php

declare(strict_types=1);

$finder = PhpCsFixer\Finder::create()
->in([
__DIR__ . '/src',
__DIR__ . '/bin',
]);

return (new PhpCsFixer\Config())
->setRiskyAllowed(true)
->setRules([
'@PSR12' => true,
])
->setFinder($finder);
42 changes: 42 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
init: docker-down-clear docker-build docker-up composer-install
up: docker-up
down: docker-down
restart: down up
check: lint phpcs phpstan


docker-up:
docker-compose up -d

docker-down:
docker-compose down --remove-orphans

docker-down-clear:
docker-compose down -v --remove-orphans

docker-build:
docker-compose build

composer-install:
docker-compose run --rm php-cli composer install

index:
docker-compose run --rm php-cli php bin/index.php

test:
docker-compose run --rm php-cli composer test

test-coverage:
docker-compose run --rm php-cli composer test-coverage

phpcs:
docker-compose run --rm php-cli composer phpcs

phpstan:
docker-compose run --rm php-cli composer phpstan

lint:
docker-compose run --rm php-cli composer lint

order:
docker-compose run --rm php-cli php bin/console app:order
30 changes: 28 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,29 @@
# PHP_2026
## Часть интернет-ресторана, который продаёт фаст-фуд

### Соответствие ТЗ

1. Абстрактная фабрика отвечает за генерацию базового продукта-прототипа (бургер, сэндвич, хот-дог):
[src/Domain/Factory](src/Domain/Factory), [src/Application/Factory](src/Application/Factory)
2. Декоратор добавляет составляющие к базовому продукту по рецепту или по пожеланию клиента:
[src/Domain/Decorator](src/Domain/Decorator), [src/Domain/Configurator](src/Domain/Configurator), [src/Application/Configurator](src/Application/Configurator)
3. Наблюдатель подписывается на статус приготовления и отправляет оповещения об изменении статуса:
[src/Domain/Observer](src/Domain/Observer), [src/Application/Observer](src/Application/Observer)
4. Прокси навешивает pre/post события на процесс готовки (включая отбраковку/утилизацию при несоответствии стандарту):
[src/Domain/Proxy](src/Domain/Proxy), [src/Application/Proxy](src/Application/Proxy)
5. Стратегия отвечает за то, что именно нужно приготовить:
[src/Domain/Strategy](src/Domain/Strategy), [src/Application/Strategy](src/Application/Strategy)
6. Все сущности должны по максимуму генерироваться через DI:
зависимости по максимуму собираются при конфигурации приложения — [bin/console](bin/console)

### Интерактивный тест в терминале

Для запуска консольного примера выполните:
1. Инициализация
```bash
make init
```
2. Запуск контроллера
```bash
make order
```

https://otus.ru/lessons/razrabotchik-php/?utm_source=github&utm_medium=free&utm_campaign=otus
52 changes: 52 additions & 0 deletions bin/console
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
#!/usr/bin/env php
<?php

declare(strict_types=1);

require __DIR__ . '/../vendor/autoload.php';

use App\Application\Command\OrderCommand;
use App\Application\Factory\BurgerFactory;
use App\Application\Factory\HotDogFactory;
use App\Application\Factory\SandwichFactory;
use App\Application\Observer\NotificationSender;
use App\Application\Observer\StatusTracker;
use App\Application\Proxy\Cook;
use App\Application\Proxy\CookProxy;
use App\Application\Proxy\QualityChecker\MaxCheeseChecker;
use App\Application\Strategy\BurgerStrategy;
use App\Application\Strategy\HotDogStrategy;
use App\Application\Strategy\SandwichStrategy;
use App\Application\UseCase\CookProducts\Handler;
use Symfony\Component\Console\Application;

$application = new Application('Система событий для аналитика', '1.0.0');

$observers = [
new NotificationSender(),
];
$statusTracker = new StatusTracker(observers: $observers);

$qualityCheckers = new ArrayObject([
new MaxCheeseChecker(),
]);

$cook = new CookProxy(
new Cook(),
$statusTracker,
$qualityCheckers,
);

$strategies = [
'burger' => new BurgerStrategy(new BurgerFactory()),
'hotdog' => new HotDogStrategy(new HotDogFactory()),
'sandwich' => new SandwichStrategy(new SandwichFactory()),
];

$handler = new Handler($cook, $strategies);

$application->addCommands([
new OrderCommand($handler),
]);

$application->run();
37 changes: 37 additions & 0 deletions composer.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
{
"name": "root/app",
"type": "project",
"autoload": {
"psr-4": {
"App\\": "src/"
}
},
"autoload-dev": {
"psr-4": {
"Test\\": "tests/"
}
},
"require": {
"php": ">=8.5",
"symfony/console": "^8.0",
"webmozart/assert": "^2.3"
},
"config": {
"allow-plugins": {
"php-http/discovery": true
}
},
"require-dev": {
"phpunit/phpunit": "^13.1",
"squizlabs/php_codesniffer": "^4.0",
"phpstan/phpstan": "^2.1",
"friendsofphp/php-cs-fixer": "^3.95"
},
"scripts": {
"lint": "php-cs-fixer check --using-cache=no",
"phpcs": "phpcs src bin",
"phpstan": "phpstan analyse src bin --level=max",
"test": "phpunit --colors=always",
"test-coverage": "phpunit --colors=always --coverage-text"
}
}
Loading