Closed y4shiro closed 2 years ago
Supabase の skills テーブルに rarity と icon_id のカラムを追加する
master.mdb の skill_data テーブルに rarity カラムが存在する 値は number で 1 / 2 / 3 / 4 / 5 skills_rarity テーブルを追加してもいいが、カードのレアリティと違って直接 skills に埋め込んでも問題無さそう
1 は 下位スキルもしくは固有スキルの継承版、色は白 2 は 上位スキル、色は金 3 は星 1 / 2 キャラの固有下位スキル、色は白 4 は星 1 / 2 キャラの固有上位スキル、色は虹 5 は星 3 キャラの固有スキル、色は虹
master.mdb の skill_data テーブルに icon_id カラムが存在する これは単純に icon_id のアイコン名そのもの
select sd.id as id,
td."text" as name,
sd.rarity as rarity,
pt.need_skill_point as skill_pt,
sd.icon_id as img_path
from skill_data as sd
left join text_data as td
on sd.id = td."index"
left join single_mode_skill_need_point as pt
on sd.id = pt.id
where td.category = 47;
id / name / rarity / skill_pt / img_path を抽出できる様になった
上の SQL の抽出結果を元に、insert_skills.sql を手動で作成 db/seeds/insert_skills.sql を更新した
master.mdb から自動生成するコードを書きたいが、今回優先度低いのでパス 開発一段落したら取り組むかも
skills テーブルは幾つかの中間テーブルや View が参照しているので、このままでは rarity カラムの追加が行えない Skills に依存してる View の削除と中間テーブルの外部キー設定を一旦外した後に rarity カラムを追加する
card_training_skills と card_event_skills が外部キーで依存している?ので、外部キー制約を一旦削除 また、依存している View も削除した
rarity カラムを追加した
先程外した card_training_skills と card_event_skills の外部キーを再設定した
先程生成した db/seeds/insert_skills.sql を Supabase に流し込んだ
先程削除した View を再定義 この際、view_training_skills と view_event_skills に関しては、rarity のカラムを追加した
-- create view view_card_training_skills as
select cards.id as card_id,
case
when count(card_training_skills.card_id) = 0 then '[]'
else json_agg(
json_build_object(
'id', skills.id,
'name', skills.name,
'rarity', skills.rarity, -- 追加
'skill_pt', skills.skill_pt,
'img_path', skills.img_path
)
)
end as values
from cards
left join card_training_skills
on cards.id = card_training_skills.card_id
left join skills
on card_training_skills.skill_id = skills.id
group by cards.id
order by cards.id;
view_event_skills もほぼ同じ構造なので省略
skills テーブルに rarity を追加して img_path を必須にしたので型定義を変更した
src/types/cards.ts
export type EventSkill = {
id: number;
name: string;
rarity: 1 | 2 | 3 | 4 | 5; // 追加
skill_pt: number | null;
img_path: string; // null を削除
};
export type TrainingSkill = {
id: number;
name: string;
rarity: 1 | 2 | 3 | 4 | 5; // 追加
skill_pt: number | null;
img_path: string; // null を削除
};
DB のテーブル設計が甘かった結果今回の作業が必要になったので、設計は最初でしっかり練っておくのが重要だと再認識した テーブルドロップしたくない場合は、追加カラムは null 許容しておいてデータ追加後に null を制限するのが良さそう
スキルリストのレアリティ毎の背景色設定と、スキルアイコンの表示はそれぞれ新規 Issue 立てて実装したい
merge したので close
22 で実装予定の機能があったが、現在の skills テーブルにカラムが足りていないため実装出来ない事が発覚した
そのため、足りないカラムを追加して Insert SQL の生成コードも修正する