用紙 sheet @ AboutModels

参考:SheetsController

カラム

name和名typedefaultnulllimitnote
captionタイトルstringFALSE100作品名
width integer839false
height integer1191false
visible公開integer0false 公開フラグ
author_id作家integerfalse 作者の作家id
created_at作成datetime
updated_at更新datetime

選択肢

公開フラグ

  • 0:private/非公開
  • 1:public/公開

作成手順

フォームデータに作家idを添えて作成する。

台紙だけの作成なので、用紙だけを作成しても漫画になるわけではない。

検証

カラム別

caption

  • 入力されていること
  • 100文字以内であること

width

  • nullでないこと。
  • 数値であること
  • 1以上の整数であること。

height

  • nullでないこと。
  • 数値であること
  • 1以上の整数であること。

visible

  • 入力されていること
  • 数値であること
  • 0または1であること

author_id

  • nullでないこと。
  • 数値であること
  • 存在する作家であること。

全体

機能

デフォルト値補充

supply_default()

パラメータ

解説

  • visibleに0を補充する。

上書き補充

overwrite(au)

パラメータ

  • au:作家データ

解説

  • ログイン中の作家idをauthor_idに補充する。

所持判定

own?(roles)

パラメータ

  • roles:ロールリスト

戻り

真偽

解説

自身の持ち主がロールリスト内に含まれるかどうかをTrue/Falseで返す

  • 自身にロールリストからの作家取得を依頼して、ロール内作家を取得する。
    • ロールリストを渡す。
  • ロール内作家が取得できないとき、Falseを返す。
  • ロール内作家のidが自身の作家idと一致するならTrue、しないならFalseを返す。

閲覧許可

visible?(roles)

パラメータ

  • roles:ロールリスト

戻り

真偽

解説

検査対象が用紙を閲覧できるかどうかを判定する

  • オープンモードのとき、自身にゲスト用ロールチェックを問い合わせ、その結果が偽であれば、falseを返す。
    • ロールリストを渡す。
  • クローズドモードとき、自身に読者用ロールチェックを問い合わせ、その結果が偽であれば、falseを返す。
    • ロールリストを渡す。
  • 自身に所持判定を問い合わせ、自分のコンテンツなら許可を返す。
    • ロールリストを渡す。
  • 公開されている用紙なら許可を返す。
  • それ以外なら不許可を返す。

1ページの件数

self.default_page_size

パラメータ

解説

一覧取得時に返す件数のデフォルト値

  • 25を返す。

1ページの最大件数

self.max_page_size

パラメータ

解説

ユーザは一覧取得時に返す件数を指定できるが、システムは上限値を設定できる

  • 100を返す。

一覧取得

list(page = 1, page_size = self.default_page_size)

パラメータ

  • page:何ページ目か
  • page_size:1ページに収まる件数

解説

  • 用紙を更新日時順に取得する。
  • 公開可能な用紙に限る
  • 関連データとして一覧取得オプションで定義されたモデルを含む。
  • ページ処理に対応し、毎ページn件の条件でmページ目から取得することができる。

マイリスト取得

mylist(author, page = 1, page_size = self.default_page_size)

パラメータ

  • author:作家データ
  • page:何ページ目か
  • page_size:1ページに収まる件数

解説

自分の用紙を公開非公開に関わらず取得する。

  • 用紙を更新日時順に取得する。
  • パラメータで与えられた作家の用紙に限る
  • 関連データとして一覧取得オプションで定義されたモデルを含む。
  • ページ処理に対応し、毎ページn件の条件でmページ目から取得することができる。

他作家の用紙リスト取得

himlist(author, page = 1, page_size = self.default_page_size)

パラメータ

  • author:作家データ
  • page:何ページ目か
  • page_size:1ページに収まる件数

解説

指定した作家の公開用紙を取得する。

  • 用紙を更新日時順に取得する。
  • パラメータで与えられた作家の公開用紙に限る
  • 関連データとして一覧取得オプションで定義されたモデルを含む。
  • ページ処理に対応し、毎ページn件の条件でmページ目から取得することができる。

一覧取得オプション

下記の関連テーブルを含む

  • author
  • sheet_panels
    • panel

json一覧出力オプション

下記の関連テーブルのカラムを含む

  • author (*)
  • sheet_panels
    • panel

単体取得

show(id, author)

パラメータ

  • id:用紙id
  • author:作家データ

解説

  • idの用紙を取得する。
  • 関連データとして単体取得オプションを与えることができる。
  • 用紙に閲覧許可を問い合わせ、不許可なら、例外403 ActiveRecord::Forbiddenを発生させる。
  • 存在しない用紙のidを要求された場合は、例外404 ActiveRecord::RecordNotFoundを発生させる。

編集取得

edit(id, author)

パラメータ

  • id:用紙id
  • author:作家データ

解説

  • idの用紙を取得する。
  • 関連データとして単体取得オプションで定義されたモデルを含む。
  • 用紙に所持判定を問い合わせ、不所持なら、例外403 ActiveRecord::Forbiddenを発生させる。
  • 存在しない用紙のidを要求された場合は、例外404 ActiveRecord::RecordNotFoundを発生させる。

単体取得オプション

下記の関連テーブルを含む

  • author
  • sheet_panels
    • panel

json単体出力オプション

下記の関連テーブルのカラムを含む

  • author (*)
  • sheet_panels
    • panel

有効作家数

self.visible_count

パラメータ

解説

  • 公開用紙数を返す。

シリアライズチェック

self.validate_t ary

パラメータ

  • ary:t値リスト

解説

シリアライズチェックとは、0から欠落重複なく収められていること。

  • 問題なければTrueを返す。

tチェック単体

self.validate_element_t elements, name

パラメータ

  • elements:部品
  • name:検証するカラム名(:t)

解説

シリアライズチェックの準備を実施する。

  • 検証値収集を依頼して、部品からtの値リストを取り出す。
    • 部品と検証カラム名を渡す。
  • シリアライズチェックを依頼して、検証結果を得る。
    • t値リストを渡す。
  • 検証結果を返す。

tチェック

self.validate_elements_t c

パラメータ

  • c:設定の配列(各設定はHash)
    • elements:部品
    • name:検証するカラム名(:t)

解説

コマは、tによって順序付けられる。各コマを集合させてソートする場合、同じ値のtがあっては正しい順序が付けられない。よって、すべてのtが、0からの連番になるようにシリアライズされていることを検証する。

  • すべての設定について繰り返し処理する。
    • tチェック単体に問い合わせる。
      • 設定を渡す。
  • すべてのチェックに成功すればTrueを返す。それ以外はFalseを返す。

tチェックの設定

validate_t_list

パラメータ

解説

孫部品などに対しても機械的にtチェックできるように設定をリスト化する。

各設定はHashで記述され、それらが配列で返る。Hashに定義するキーは、elements(チェック対象のオブジェクト集合)とname(検証するカラム名)。

  • 第一設定
    • elements:部品
    • name:t

従属データの検証

validate_child

パラメータ

解説

ここでは従属するデータの中でも単体で検証できない項目を検証する。

  • 要素順(t)の崩壊を阻止するために、tチェックを問い合わせる。
    • 設定をtチェックの設定に問い合わせて渡す。
  • 重なり順(z)の崩壊を阻止…まではいいや。
  • すべて通ればTrueを返す。それ以外はFalseを返す。

保存

store attr, author

パラメータ

  • attr:用紙のカラム値
  • au用:紙の作家アカウント

解説

用紙データを保存するだけの機能である。だけ、といっても実際の処理は複雑で、複数のモデルに変更が及ぶ。よって、処理はトランザクションでロールバックできるようする。

用紙の保存は、同時に従属するデータ(紙コマ)を保存する。それらのデータは、カラム値に含まれるものとする。当処理は子モデルを含めた形をあるがままに保存しなければならない。つまり、用紙の保存ですべての従属データも保存される。

それぞれの従属データは、保存時に各モデルで検証を受けるので、微細な検証は必要ないが、特殊な検証もあるので、外部機能でサポートしてもらう。部品の順序チェックは削除が実行されるまで処理できないとが判明したので、保存処理の後に移動した。

  • カラム値をセットする。
  • 用紙モデルに上書き補充を依頼する。
    • 作家アカウントを渡す。
  • 自身を保存する。
  • 従属データの検証を問い合わせる。
  • 例外ケース
    • 以下の場合、全体エラーにメッセージをセットしてロールバックする。
    • カラム値がFalseの場合、カラム値が不正だった。
    • 従属データの検証に失敗した。

削除

destroy

パラメータ

戻り

真偽

解説

  • トランザクションを用意する。
  • 自身にリンクしている紙コマをすべて削除する。
  • 自身を削除する。
  • Trueを返す。
  • 例外
    • 削除に失敗した場合は、ロールバックしてFalseを返す。