Closed y4shiro closed 2 years ago
card_group
テーブルを定義master.mdb
内の support_card_group
のテーブルにはグループカードに所属する chara_id
が登録されている
Supbase 側でもこのテーブルの値を持たせたい
下図内のの赤枠で囲った card_group を定義した
card_group
テーブルにレコードを追加する SQL を定義現状では Group カードが 2 枚しか無いので、手動でコピペするに留めた 今後 Group カードが急増する場合は Insert 用の SQL を自動生成するコードを書く予定
insert into card_group (card_id, charactor_id)
values
(30081,1013),
(30081,1030),
(30081,1035),
(30081,1016),
(30081,1002),
(30081,1001),
(30067,1017),
(30067,1003),
(30067,1073);
サポカの仕様を簡単に説明すると、サポカ 1 枚につきキャラクターが 1 人以上所属している Group カードのみ複数のキャラクターが所属しているので、Group カードとそれ以外で処理を分ける
view_card_belong_charactor_ids
-- create view view_card_belong_charactor_ids as
select cards.id as card_id,
charactors.id as charactor_id,
charactors.name as charactor_name,
case
when cards.id = card_group.card_id then
json_agg(
card_group.charactor_id
)
else json_agg(charactors.id)
end as belong_charactor_ids
from cards
left join charactors
on cards.charactor_name = charactors.name
left join card_group
on cards.id = card_group.card_id
group by cards.id, charactors.id, charactors.name, card_group.card_id
order by cards.id;
cards
テーブルの設計が甘く、本来であれば charactor_id
を持つべきだった
今回は cards.caractor_name = charactors.name
のようにキャラ名から逆引きして charactor_id
を取得しているが、
この辺りは好ましくないので後ほど cards
テーブルに直接 charactor_id
を持たせるようにしたい
view_cards_json
-- create view view_cards_json as
select cards.id as card_id,
cards.name as card_name,
belong_charactor_ids.charactor_id,
belong_charactor_ids.belong_charactor_ids,
cards.rarity as card_rarity,
cards.type as card_type,
cards.img_path as card_img_path,
cards.icon_path as card_icon_path,
effects.values as effects,
event_skills.values as event_skills,
training_skills.values as training_skills,
status_gain.values as status_gain
from cards
join view_card_belong_charactor_ids as belong_charactor_ids
on cards.id = belong_charactor_ids.card_id
join view_card_effects as effects
on cards.id = effects.card_id
join view_card_event_skills as event_skills
on cards.id = event_skills.card_id
join view_card_training_skills as training_skills
on cards.id = training_skills.card_id
join view_card_training_status_gain as status_gain
on cards.id = status_gain.card_id;
単純に View を Join してカラムに追加するだけ
TS の型定義を修正した src/types/cards.ts
export type CardType = {
card_id: number;
card_name: string;
charactor_name: string;
charactor_id: number; // 追加
belong_charactor_ids: number[]; // 追加
card_rarity: 'R' | 'SR' | 'SSR';
card_type: 'Speed' | 'Stamina' | 'Power' | 'Guts' | 'Wisdom' | 'Friends' | 'Group';
card_img_path: string | null;
card_icon_path: string | null;
effects: Effects[];
event_skills?: EventSkill[];
training_skills?: TrainingSkill[];
status_gains?: StatusGain[];
};
した
23 にて設計漏れが発覚したので、DB に必要なテーブルを追加して対処する
具体的な話をすると、サポカのデッキ編成では同じキャラクターの別カードは重複して編成できない制限があるが、 そのデータを DB 側で持っていないため制限をかけることが出来ない状態 これを解消したい
キャラ単体のサポカならテーブルを追加しなくても実装可能だが、グループカードでは一枚のサポカに複数キャラが所属してるため "サポカに所属するキャラ ID のテーブル" が必須となる