Skip to content

Commit

Permalink
Merge pull request #55 from apple-x-co/readme
Browse files Browse the repository at this point in the history
Update README
  • Loading branch information
koriym authored Apr 5, 2024
2 parents 0048a9b + 3d389b3 commit 242be73
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 14 deletions.
13 changes: 8 additions & 5 deletions README.ja.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@

`Ray.MediaQuery`はDBやWeb APIなどの外部メディアのクエリーのインターフェイスから、クエリー実行オブジェクトを生成しインジェクトします。

## モチベーション

* ドメイン層とインフラ層の境界を明確にします。
* ボイラープレートコードを削減します。
* 外部メディアの実体には無関係なので、後からストレージを変更することができます。並列開発やスタブ作成が容易です。
Expand Down Expand Up @@ -249,11 +251,12 @@ $this->bind(DateTimeInterface::class)->to(UnixEpochTime::class);

### VO

`DateTime`以外のバリューオブジェクトが渡されると`toScalar`インターフェイスを実装した`ToScalar()`メソッド、もしくは`__toString()`メソッドの返り値が引数になります。
`DateTime`以外のバリューオブジェクトが渡されると`ToScalar`インターフェイスを実装した`toScalar()`メソッド、もしくは`__toString()`メソッドの返り値が引数になります。

```php
interface MemoAddInterface
{
#[DbQuery('memo_add')]
public function __invoke(string $memo, UserId $userId = null): void;
}
```
Expand All @@ -273,7 +276,7 @@ class UserId implements ToScalarInterface
```

```sql
INSERT INTO memo (user_id, memo) VALUES (:user_id, :memo);
INSERT INTO memo (user_id, memo) VALUES (:userId, :memo);
```

### パラメーターインジェクション
Expand All @@ -293,14 +296,14 @@ use Ray\MediaQuery\PagesInterface;

interface TodoList
{
#[DbQuery, Pager(perPage: 10, template: '/{?page}')]
#[DbQuery('todo_list'), Pager(perPage: 10, template: '/{?page}')]
public function __invoke(): Pages;
}
```

ページ毎のアイテム数をperPageで指定しますが、動的な値の場合は以下のようにページ数を表す引数の名前を文字列を指定します。
```php
#[DbQuery, Pager(perPage: 'pageNum', template: '/{?page}')]
#[DbQuery('todo_list'), Pager(perPage: 'pageNum', template: '/{?page}')]
public function __invoke($pageNum): Pages;
```

Expand All @@ -324,7 +327,7 @@ $page = $pages[2]; // 配列アクセスをした時にそのページのDBク
エンティティクラスにハイドレーションを行うときは`@return`で指定します。

```php
#[DbQuery, Pager(perPage: 'pageNum', template: '/{?page}')]
#[DbQuery('todo_list'), Pager(perPage: 'pageNum', template: '/{?page}')]
/** @return array<Todo> */
public function __invoke($pageNum): Pages;
```
Expand Down
29 changes: 20 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -237,6 +237,7 @@ For example, you can specify a `DateTimeInterface` object like this.
```php
interface TaskAddInterface
{
#[DbQuery('task_add')]
public function __invoke(string $title, DateTimeInterface $cratedAt = null): void;
}
```
Expand All @@ -260,11 +261,12 @@ $this->bind(DateTimeInterface::class)->to(UnixEpochTime::class);

## VO

If a value object other than `DateTime` is passed, the return value of the `ToScalar()` method that implements the `toScalar` interface or the `__toString()` method will be the argument.
If a value object other than `DateTime` is passed, the return value of the `toScalar()` method that implements the `ToScalar` interface or the `__toString()` method will be the argument.

```php
interface MemoAddInterface
{
#[DbQuery('memo_add')]
public function __invoke(string $memo, UserId $userId = null): void;
}
```
Expand All @@ -284,7 +286,7 @@ class UserId implements ToScalarInterface
```

```sql
INSERT INTO memo (user_id, memo) VALUES (:user_id, :memo);
INSERT INTO memo (user_id, memo) VALUES (:userId, :memo);
```

### Parameter Injection
Expand All @@ -304,7 +306,7 @@ use Ray\MediaQuery\PagesInterface;

interface TodoList
{
#[DbQuery, Pager(perPage: 10, template: '/{?page}')]
#[DbQuery('todo_list'), Pager(perPage: 10, template: '/{?page}')]
public function __invoke(): PagesInterface;
}
```
Expand All @@ -315,7 +317,7 @@ You can get the number of pages with `count()`, and you can get the page object
The number of items per page is specified by `perPage`, but for dynamic values, specify a string with the name of the argument representing the number of pages as follows

```php
#[DbQuery, Pager(perPage: 'pageNum', template: '/{?page}')]
#[DbQuery('todo_list'), Pager(perPage: 'pageNum', template: '/{?page}')]
public function __invoke($pageNum): Pages;
```

Expand All @@ -336,20 +338,29 @@ $page = $pages[2]; // A page query is executed when an array access is made.
Use `@return` to specify hydration to the entity class.

```php
#[DbQuery, Pager(perPage: 'pageNum', template: '/{?page}')]
#[DbQuery('todo_list'), Pager(perPage: 'pageNum', template: '/{?page}')]
/** @return array<Todo> */
public function __invoke($pageNum): Pages;
```

# SqlQuery

If you pass a `DateTimeIntetface` object, it will be converted to a date formatted string and queried.
`SqlQuery` executes SQL by specifying the ID of the SQL file.
It is used when detailed implementations with an implementation class.

```php
$sqlQuery->exec('memo_add', ['memo' => 'run', 'created_at' => new DateTime()]);
```
class TodoItem implements TodoItemInterface
{
public function __construct(
private SqlQueryInterface $sqlQuery
){}

When an object is passed, it is converted to a value of `toScalar()` or `__toString()` as in Parameter Injection.
public function __invoke(string $id) : array
{
return $this->sqlQuery->getRow('todo_item', ['id' => $id]);
}
}
```

## Get* Method

Expand Down

0 comments on commit 242be73

Please sign in to comment.