Skip to content

Commit 51af1a3

Browse files
committed
improved examples
1 parent 88a8db1 commit 51af1a3

26 files changed

+248
-170
lines changed
File renamed without changes.

example/app/Commands/SendCommand.php

Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
<?php
2+
3+
namespace App\Commands;
4+
5+
use App\Repositories\MessageRepository;
6+
use App\Repositories\PartnerRepository;
7+
use AS2\Management;
8+
use AS2\Utils;
9+
use Psr\Container\ContainerInterface;
10+
use Symfony\Component\Console\Command\Command;
11+
use Symfony\Component\Console\Input\InputInterface;
12+
use Symfony\Component\Console\Input\InputOption;
13+
use Symfony\Component\Console\Output\OutputInterface;
14+
15+
class SendCommand extends Command
16+
{
17+
protected static $defaultName = 'send-message';
18+
19+
/**
20+
* @var ContainerInterface
21+
*/
22+
private $container;
23+
24+
public function __construct(ContainerInterface $container)
25+
{
26+
$this->container = $container;
27+
parent::__construct();
28+
}
29+
30+
protected function configure()
31+
{
32+
$this
33+
->setDescription('Send message to the partner')
34+
->setHelp('This command allows you to send a message to the partner...');
35+
$this
36+
->addOption('file', null, InputOption::VALUE_OPTIONAL, 'File to send')
37+
->addOption('from', null, InputOption::VALUE_REQUIRED, 'Sender partner as2id')
38+
->addOption('to', null, InputOption::VALUE_REQUIRED, 'Receiver partner as2id');
39+
}
40+
41+
protected function execute(InputInterface $input, OutputInterface $output)
42+
{
43+
$file = $input->getOption('file');
44+
45+
if (! empty($file)) {
46+
if (! file_exists($file)) {
47+
throw new \RuntimeException(
48+
sprintf('File `%s` not found, please enter the correct file path.', $file)
49+
);
50+
}
51+
$rawMessage = file_get_contents($file);
52+
} else {
53+
54+
// Default test message
55+
56+
$rawMessage = <<<MSG
57+
Content-type: Application/EDI-X12
58+
Content-disposition: attachment; filename=payload
59+
Content-id: <test@test.com>
60+
61+
ISA*00~
62+
MSG;
63+
}
64+
65+
/** @var PartnerRepository $partnerRepository */
66+
$partnerRepository = $this->container->get('PartnerRepository');
67+
68+
$sender = $partnerRepository->findPartnerById($input->getOption('from'));
69+
$receiver = $partnerRepository->findPartnerById($input->getOption('to'));
70+
71+
// Initialize New Message
72+
$messageId = Utils::generateMessageID($sender);
73+
74+
// $output->writeln('Initialize new message with id: ' . $messageId);
75+
76+
/** @var MessageRepository $messageRepository */
77+
$messageRepository = $this->container->get('MessageRepository');
78+
$message = $messageRepository->createMessage();
79+
$message->setMessageId($messageId);
80+
$message->setSender($sender);
81+
$message->setReceiver($receiver);
82+
83+
/** @var Management $manager */
84+
$manager = $this->container->get('manager');
85+
86+
// Generate Message Payload
87+
$payload = $manager->buildMessage($message, $rawMessage);
88+
89+
// $output->writeln('The message was built successfully...');
90+
91+
// Try to send a message
92+
$manager->sendMessage($message, $payload);
93+
94+
// $output->writeln('Status: ' . $message->getStatus());
95+
// $output->writeln('Status Message: ' . $message->getStatusMsg());
96+
97+
$messageRepository->saveMessage($message);
98+
}
99+
}
File renamed without changes.
File renamed without changes.

examples/app/Repositories/MessageRepository.php renamed to example/app/Repositories/MessageRepository.php

Lines changed: 20 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -8,17 +8,15 @@
88

99
class MessageRepository implements MessageRepositoryInterface
1010
{
11-
protected $format = 'json';
1211
protected $path;
1312

1413
public function __construct(array $options)
1514
{
1615
if (empty($options['path'])) {
1716
throw new \RuntimeException('`path` required');
1817
}
19-
if (isset($options['format'])) {
20-
$this->format = $options['format'];
21-
}
18+
19+
$this->path = $options['path'];
2220
}
2321

2422
/**
@@ -27,10 +25,12 @@ public function __construct(array $options)
2725
*/
2826
public function findMessageById($id)
2927
{
30-
$data = file_get_contents(
31-
sprintf('%s/messages/%s.%s', $this->path, $id, $this->format)
32-
);
28+
$path = sprintf('%s/%s.json', $this->path, $id);
29+
if (! file_exists($path)) {
30+
return null;
31+
}
3332

33+
$data = file_get_contents($path);
3434
if (empty($data)) {
3535
return null;
3636
}
@@ -52,22 +52,20 @@ public function saveMessage(MessageInterface $message)
5252
$data = $message->getData();
5353
unset($data['receiver'], $data['receiver']);
5454

55-
if ($headers = $message->getHeaders()) {
56-
file_put_contents(str_replace('.json', '.headers', $this->path), $headers);
57-
}
55+
$path = sprintf('%s/%s', $this->path, $message->getMessageId());
5856

59-
if ($payload = $message->getPayload()) {
60-
file_put_contents(str_replace('.json', '.payload', $this->path), $payload);
61-
}
62-
63-
if ($mdn = $message->getMdnPayload()) {
64-
file_put_contents(str_replace('.json', '.mdn', $this->path), $mdn);
65-
}
66-
67-
if ($headers = $message->getHeaders()) {
68-
file_put_contents(str_replace('.json', '.txt', $this->path), $headers.PHP_EOL.$payload);
69-
}
57+
// if ($headers = $message->getHeaders()) {
58+
// file_put_contents($path.'.headers', $headers);
59+
// }
60+
//
61+
// if ($payload = $message->getPayload()) {
62+
// file_put_contents($path.'.payload', $payload);
63+
// }
64+
//
65+
// if ($mdn = $message->getMdnPayload()) {
66+
// file_put_contents($path.'.mdn', $mdn);
67+
// }
7068

71-
return file_put_contents($this->path, json_encode($data));
69+
return (bool) file_put_contents($path.'.json', json_encode($data));
7270
}
7371
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
<?php
2+
3+
namespace App\Repositories;
4+
5+
use App\Models\Partner;
6+
use AS2\PartnerRepositoryInterface;
7+
8+
class PartnerRepository implements PartnerRepositoryInterface
9+
{
10+
/**
11+
* @var array
12+
*/
13+
private $partners;
14+
15+
public function __construct(array $partners)
16+
{
17+
$this->partners = $partners;
18+
}
19+
20+
/**
21+
* @param string $id
22+
* @return Partner
23+
*/
24+
public function findPartnerById($id)
25+
{
26+
foreach ($this->partners as $partner) {
27+
if ($id === $partner['id']) {
28+
return new Partner($partner);
29+
}
30+
}
31+
32+
throw new \RuntimeException(sprintf('Unknown partner `%s`.', $id));
33+
}
34+
}

examples/public/index.php renamed to example/app/bootstrap.php

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,26 +2,22 @@
22

33
use Slim\App;
44

5-
define('APP_DIR', __DIR__.'/../app');
6-
75
require __DIR__.'/../vendor/autoload.php';
86

97
$app = new App([
10-
'settings' => require APP_DIR.'/settings.php',
8+
'settings' => require __DIR__.'/../config/settings.php',
119
]);
1210

1311
$container = $app->getContainer();
1412

1513
// Set up dependencies
16-
$dependencies = require APP_DIR.'/dependencies.php';
14+
$dependencies = require __DIR__.'/dependencies.php';
1715
$dependencies($container);
1816

1917
// Register middleware
20-
$middleware = require APP_DIR.'/middleware.php';
18+
$middleware = require __DIR__.'/middleware.php';
2119
$middleware($app);
2220

2321
// Register routes
24-
$routes = require APP_DIR.'/routes.php';
22+
$routes = require __DIR__.'/routes.php';
2523
$routes($app);
26-
27-
$app->run();

example/app/commands.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<?php
2+
3+
return [
4+
\App\Commands\SendCommand::class
5+
];

examples/app/dependencies.php renamed to example/app/dependencies.php

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,23 +10,26 @@
1010

1111
$container['MessageRepository'] = function ($c) {
1212
return new MessageRepository([
13-
'path' => $c['settings']['storage']['path'],
13+
'path' => $c['settings']['storage']['path'] . '/messages',
1414
]);
1515
};
1616

1717
$container['PartnerRepository'] = function ($c) {
1818
return new PartnerRepository(
19-
require __DIR__.'/partners.php'
19+
require __DIR__.'/../config/partners.php'
2020
);
2121
};
2222

2323
$container['logger'] = function ($c) {
2424
$logger = new Logger('app');
25-
$fileHandler = new StreamHandler(
26-
sprintf('%s/logs/app.log', $c['settings']['storage']['path'])
27-
);
28-
$logger->pushHandler($fileHandler);
29-
25+
$logger->pushHandler(new StreamHandler('php://stdout'));
26+
if (! empty($c['settings']['logger'])) {
27+
$fileHandler = new StreamHandler(
28+
$c['settings']['logger']['path'],
29+
$c['settings']['logger']['level']
30+
);
31+
$logger->pushHandler($fileHandler);
32+
}
3033
return $logger;
3134
};
3235

0 commit comments

Comments
 (0)