123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245 |
- <?php
- namespace ImiApp\ApiServer\Controller;
- use Imi\App;
- use Imi\Db\Db;
- use Imi\RequestContext;
- use ImiApp\Model\World;
- use ImiApp\Model\Fortune;
- use Imi\Db\Interfaces\IDb;
- use Imi\Redis\RedisManager;
- use Imi\Util\Stream\MemoryStream;
- use Imi\Server\View\Annotation\View;
- use Imi\Server\Http\Route\Annotation\Route;
- use Imi\Server\Http\Route\Annotation\Action;
- use Imi\Server\Http\Controller\HttpController;
- use Imi\Server\Http\Route\Annotation\Controller;
- use Imi\Server\Http\Message\Contract\IHttpResponse;
- /**
- * @Controller("/")
- */
- class IndexController extends HttpController
- {
- /**
- * @Action
- */
- public function json(): array
- {
- return ['message' => 'Hello, World!'];
- }
- /**
- * @Action
- */
- public function plaintext(): IHttpResponse
- {
- $response = $this->response;
- $response->setHeader('Content-Type', 'text/plain; charset=utf-8')
- ->getBody()
- ->write('Hello, World!');
- return $response;
- }
- /**
- * @Action
- */
- public function dbModel(): ?World
- {
- return World::find(\mt_rand(1, 10000));
- }
- /**
- * @Action
- */
- public function dbRaw(): array
- {
- $db = Db::getInstance();
- $stmt = $db->prepare('SELECT id, randomNumber FROM World WHERE id = ? LIMIT 1');
- $stmt->execute([\mt_rand(1, 10000)]);
- return $stmt->fetch();
- }
- /**
- * @Action
- */
- public function queryModel($queries): array
- {
- $queries = (int)$queries;
- if($queries > 1)
- {
- $queryCount = \min($queries, 500);
- }
- else
- {
- $queryCount = 1;
- }
- $list = [];
- while ($queryCount--)
- {
- $list[] = World::find(\mt_rand(1, 10000));
- }
- return $list;
- }
- /**
- * @Action
- *
- * @return void
- */
- public function queryRaw($queries): array
- {
- $queries = (int)$queries;
- if($queries > 1)
- {
- $queryCount = \min($queries, 500);
- }
- else
- {
- $queryCount = 1;
- }
- $list = [];
- $db = Db::getInstance();
- $stmt = $db->prepare('SELECT id, randomNumber FROM World WHERE id = ? LIMIT 1');
- while ($queryCount--)
- {
- $stmt->execute([\mt_rand(1, 10000)]);
- $list[] = $stmt->fetch();
- }
- return $list;
- }
- /**
- * @Action
- * @View(renderType="html")
- */
- public function fortunes(): array
- {
- $this->response->setHeader('Content-Type', 'text/html; charset=UTF-8');
- $list = Fortune::select();
- $rows = [];
- foreach($list as $item)
- {
- $rows[$item->id] = $item->message;
- }
- $rows[0] = 'Additional fortune added at request time.';
- \asort($rows);
- return [
- 'rows' => $rows,
- ];
- }
- /**
- * @Action
- * @View(renderType="html")
- *
- * @return void
- */
- public function fortunesRaw(): IHttpResponse
- {
- $rows = [];
- foreach(Db::getInstance()->query('SELECT id, message FROM Fortune')->fetchAll() as $item)
- {
- $rows[$item['id']] = $item['message'];
- }
- $rows[0] = 'Additional fortune added at request time.';
- \asort($rows);
- $html = '';
- foreach ($rows as $id => $message)
- {
- $message = \htmlspecialchars($message, ENT_QUOTES, 'UTF-8');
- $html .= "<tr><td>{$id}</td><td>{$message}</td></tr>";
- }
- return $this->response->setHeader('Content-Type', 'text/html; charset=UTF-8')
- ->setBody(new MemoryStream("<!DOCTYPE html><html><head><title>Fortunes</title></head><body><table><tr><th>id</th><th>message</th></tr>{$html}</table></body></html>"));
- }
- /**
- * @Action
- */
- public function updateModel($queries): array
- {
- $queries = (int)$queries;
- if($queries > 1)
- {
- $queryCount = \min($queries, 500);
- }
- else
- {
- $queryCount = 1;
- }
- $list = [];
- while ($queryCount--)
- {
- $list[] = $row = World::find(\mt_rand(1, 10000));
- $row->randomNumber = \mt_rand(1, 10000);
- $row->update();
- }
- return $list;
- }
- /**
- * @Action
- */
- public function updateRaw($queries): array
- {
- $queries = (int)$queries;
- if($queries > 1)
- {
- $queryCount = \min($queries, 500);
- }
- else
- {
- $queryCount = 1;
- }
- $list = [];
- $db = Db::getInstance();
- $stmtSelect = $db->prepare('SELECT id, randomNumber FROM World WHERE id = ? LIMIT 1');
- $stmtUpdate = $db->prepare('UPDATE World SET randomNumber = ? WHERE id = ? LIMIT 1');
- while ($queryCount--)
- {
- $id = \mt_rand(1, 10000);
- $stmtSelect->execute([$id]);
- $row = $stmtSelect->fetch();
- $row['randomNumber'] = $randomNumber = \mt_rand(1, 10000);
- $stmtUpdate->execute([$randomNumber, $id]);
- $list[] = $row;
- }
- return $list;
- }
- /**
- * @Action
- * @Route("cached-worlds")
- */
- public function cachedWorlds($count): array
- {
- $count = (int)$count;
- if($count > 1)
- {
- $queryCount = \min($count, 500);
- }
- else
- {
- $queryCount = 1;
- }
- $list = App::get('worlds');
- $result = [];
- $keys = \array_rand($list, $queryCount);
- foreach ((array) $keys as $key)
- {
- if (!isset($list[$key]))
- {
- break;
- }
- $result[] = $list[$key];
- }
- return $result;
- }
- }
|