diff --git a/SVSim.Bootstrap/Data/prod-captures/build_deck-info-2026-05-26.json b/SVSim.Bootstrap/Data/prod-captures/build_deck-info-2026-05-26.json deleted file mode 100644 index 9b294c6..0000000 --- a/SVSim.Bootstrap/Data/prod-captures/build_deck-info-2026-05-26.json +++ /dev/null @@ -1 +0,0 @@ -{"data_headers":{"sid":"8f8942b22bd297c23e28a416a5dca7a21779591266","short_udid":411054851,"viewer_id":906243102,"servertime":1779591266,"result_code":1},"data":{"15":{"series_id":"107","order_id":"16","is_new":false,"products":[{"product_id":"701","product_name":"BDPN_構築済みデッキ7弾_エルフ","leader_id":"1","deck_code":"pd0107","featured_card_id":"115141020","purchase_num_max":1,"purchase_num_current":0,"is_first_price":true,"rewards":{"1":{"reward_type":"6","reward_detail_id":"1151410200","reward_number":"1","message_id":"51004"}},"sales_period_info":[],"price_crystal":"1200"},{"product_id":"702","product_name":"BDPN_構築済みデッキ7弾_ロイヤル","leader_id":"2","deck_code":"pd0207","featured_card_id":"115241020","purchase_num_max":1,"purchase_num_current":0,"is_first_price":true,"rewards":{"1":{"reward_type":"6","reward_detail_id":"1152410200","reward_number":"1","message_id":"51004"}},"sales_period_info":[],"price_crystal":"1200"},{"product_id":"703","product_name":"BDPN_構築済みデッキ7弾_ウィッチ","leader_id":"3","deck_code":"pd0307","featured_card_id":"115341020","purchase_num_max":1,"purchase_num_current":0,"is_first_price":true,"rewards":{"1":{"reward_type":"6","reward_detail_id":"1153410200","reward_number":"1","message_id":"51004"}},"sales_period_info":[],"price_crystal":"1200"},{"product_id":"704","product_name":"BDPN_構築済みデッキ7弾_ドラゴン","leader_id":"4","deck_code":"pd0407","featured_card_id":"115441020","purchase_num_max":1,"purchase_num_current":0,"is_first_price":true,"rewards":{"1":{"reward_type":"6","reward_detail_id":"1154410200","reward_number":"1","message_id":"51004"}},"sales_period_info":[],"price_crystal":"1200"},{"product_id":"705","product_name":"BDPN_構築済みデッキ7弾_ネクロマンサー","leader_id":"5","deck_code":"pd0507","featured_card_id":"115541020","purchase_num_max":1,"purchase_num_current":0,"is_first_price":true,"rewards":{"1":{"reward_type":"6","reward_detail_id":"1155410200","reward_number":"1","message_id":"51004"}},"sales_period_info":[],"price_crystal":"1200"},{"product_id":"706","product_name":"BDPN_構築済みデッキ7弾_ヴァンパイア","leader_id":"6","deck_code":"pd0607","featured_card_id":"115641020","purchase_num_max":1,"purchase_num_current":0,"is_first_price":true,"rewards":{"1":{"reward_type":"6","reward_detail_id":"1156410200","reward_number":"1","message_id":"51004"}},"sales_period_info":[],"price_crystal":"1200"},{"product_id":"707","product_name":"BDPN_構築済みデッキ7弾_ビショップ","leader_id":"7","deck_code":"pd0707","featured_card_id":"115741020","purchase_num_max":1,"purchase_num_current":0,"is_first_price":true,"rewards":{"1":{"reward_type":"6","reward_detail_id":"1157410200","reward_number":"1","message_id":"51004"}},"sales_period_info":[],"price_crystal":"1200"},{"product_id":"708","product_name":"BDPN_構築済みデッキ7弾_ネメシス","leader_id":"8","deck_code":"pd0807","featured_card_id":"115841020","purchase_num_max":1,"purchase_num_current":0,"is_first_price":true,"rewards":{"1":{"reward_type":"6","reward_detail_id":"1158410200","reward_number":"1","message_id":"51004"}},"sales_period_info":[],"price_crystal":"1200"}],"series_rewards":{"1":{"reward_list":[{"reward_type":"5","reward_detail_id":"712014010","reward_number":"3","message_id":51004}],"is_get":false},"2":{"reward_list":[{"reward_type":"5","reward_detail_id":"712031010","reward_number":"3","message_id":51004}],"is_get":false},"3":{"reward_list":[{"reward_type":"6","reward_detail_id":"712014010","reward_number":"1","message_id":51004},{"reward_type":"7","reward_detail_id":"712014015","reward_number":"1","message_id":51004},{"reward_type":"7","reward_detail_id":"712014016","reward_number":"1","message_id":51004},{"reward_type":"7","reward_detail_id":"712014017","reward_number":"1","message_id":51004},{"reward_type":"7","reward_detail_id":"712014018","reward_number":"1","message_id":51004}],"is_get":false},"4":{"reward_list":[{"reward_type":"6","reward_detail_id":"712031010","reward_number":"1","message_id":51004},{"reward_type":"7","reward_detail_id":"712031010","reward_number":"1","message_id":51004}],"is_get":false},"5":{"reward_list":[{"reward_type":"5","reward_detail_id":"712014011","reward_number":"3","message_id":51004}],"is_get":false},"6":{"reward_list":[{"reward_type":"5","reward_detail_id":"712031011","reward_number":"3","message_id":51004}],"is_get":false},"7":{"reward_list":[{"reward_type":"4","reward_detail_id":"1000","reward_number":"1","message_id":51004}],"is_get":false},"8":{"reward_list":[{"reward_type":"4","reward_detail_id":"1000","reward_number":"1","message_id":51004}],"is_get":false}}},"16":{"series_id":"106","order_id":"17","is_new":false,"products":[{"product_id":"601","product_name":"BDPN_構築済みデッキ6弾_エルフ","leader_id":"1","deck_code":"pd0106","featured_card_id":"111141010","purchase_num_max":1,"purchase_num_current":0,"is_first_price":true,"rewards":{"1":{"reward_type":"6","reward_detail_id":"1111410100","reward_number":"1","message_id":"51004"}},"sales_period_info":[],"price_crystal":"1200"},{"product_id":"602","product_name":"BDPN_構築済みデッキ6弾_ロイヤル","leader_id":"2","deck_code":"pd0206","featured_card_id":"112241010","purchase_num_max":1,"purchase_num_current":0,"is_first_price":true,"rewards":{"1":{"reward_type":"6","reward_detail_id":"1122410100","reward_number":"1","message_id":"51004"}},"sales_period_info":[],"price_crystal":"1200"},{"product_id":"603","product_name":"BDPN_構築済みデッキ6弾_ウィッチ","leader_id":"3","deck_code":"pd0306","featured_card_id":"112341020","purchase_num_max":1,"purchase_num_current":0,"is_first_price":true,"rewards":{"1":{"reward_type":"6","reward_detail_id":"1123410200","reward_number":"1","message_id":"51004"}},"sales_period_info":[],"price_crystal":"1200"},{"product_id":"604","product_name":"BDPN_構築済みデッキ6弾_ドラゴン","leader_id":"4","deck_code":"pd0406","featured_card_id":"112441010","purchase_num_max":1,"purchase_num_current":0,"is_first_price":true,"rewards":{"1":{"reward_type":"6","reward_detail_id":"1124410100","reward_number":"1","message_id":"51004"}},"sales_period_info":[],"price_crystal":"1200"},{"product_id":"605","product_name":"BDPN_構築済みデッキ6弾_ネクロマンサー","leader_id":"5","deck_code":"pd0506","featured_card_id":"112541020","purchase_num_max":1,"purchase_num_current":0,"is_first_price":true,"rewards":{"1":{"reward_type":"6","reward_detail_id":"1125410200","reward_number":"1","message_id":"51004"}},"sales_period_info":[],"price_crystal":"1200"},{"product_id":"606","product_name":"BDPN_構築済みデッキ6弾_ヴァンパイア","leader_id":"6","deck_code":"pd0606","featured_card_id":"112641020","purchase_num_max":1,"purchase_num_current":0,"is_first_price":true,"rewards":{"1":{"reward_type":"6","reward_detail_id":"1126410200","reward_number":"1","message_id":"51004"}},"sales_period_info":[],"price_crystal":"1200"},{"product_id":"607","product_name":"BDPN_構築済みデッキ6弾_ビショップ","leader_id":"7","deck_code":"pd0706","featured_card_id":"111741030","purchase_num_max":1,"purchase_num_current":0,"is_first_price":true,"rewards":{"1":{"reward_type":"6","reward_detail_id":"1117410300","reward_number":"1","message_id":"51004"}},"sales_period_info":[],"price_crystal":"1200"},{"product_id":"608","product_name":"BDPN_構築済みデッキ6弾_ネメシス","leader_id":"8","deck_code":"pd0806","featured_card_id":"112841030","purchase_num_max":1,"purchase_num_current":0,"is_first_price":true,"rewards":{"1":{"reward_type":"6","reward_detail_id":"1128410300","reward_number":"1","message_id":"51004"}},"sales_period_info":[],"price_crystal":"1200"}],"series_rewards":{"1":{"reward_list":[{"reward_type":"5","reward_detail_id":"710034010","reward_number":"3","message_id":51004}],"is_get":false},"2":{"reward_list":[{"reward_type":"5","reward_detail_id":"710031010","reward_number":"3","message_id":51004}],"is_get":false},"3":{"reward_list":[{"reward_type":"6","reward_detail_id":"710034010","reward_number":"1","message_id":51004},{"reward_type":"7","reward_detail_id":"710034010","reward_number":"1","message_id":51004}],"is_get":false},"4":{"reward_list":[{"reward_type":"6","reward_detail_id":"710031010","reward_number":"1","message_id":51004},{"reward_type":"7","reward_detail_id":"710031010","reward_number":"1","message_id":51004}],"is_get":false},"5":{"reward_list":[{"reward_type":"5","reward_detail_id":"710034011","reward_number":"3","message_id":51004}],"is_get":false},"6":{"reward_list":[{"reward_type":"5","reward_detail_id":"710031011","reward_number":"3","message_id":51004}],"is_get":false},"7":{"reward_list":[{"reward_type":"4","reward_detail_id":"1000","reward_number":"1","message_id":51004}],"is_get":false},"8":{"reward_list":[{"reward_type":"4","reward_detail_id":"1000","reward_number":"1","message_id":51004}],"is_get":false}}},"17":{"series_id":"105","order_id":"18","is_new":false,"products":[{"product_id":"501","product_name":"BDPN_構築済みデッキ5弾_エルフ","leader_id":"1","deck_code":"pd0105","featured_card_id":"111141020","purchase_num_max":1,"purchase_num_current":0,"is_first_price":true,"rewards":{"1":{"reward_type":"6","reward_detail_id":"1111410200","reward_number":"1","message_id":"51004"}},"sales_period_info":[],"price_crystal":"1200"},{"product_id":"502","product_name":"BDPN_構築済みデッキ5弾_ロイヤル","leader_id":"2","deck_code":"pd0205","featured_card_id":"111241020","purchase_num_max":1,"purchase_num_current":0,"is_first_price":true,"rewards":{"1":{"reward_type":"6","reward_detail_id":"1112410200","reward_number":"1","message_id":"51004"}},"sales_period_info":[],"price_crystal":"1200"},{"product_id":"503","product_name":"BDPN_構築済みデッキ5弾_ウィッチ","leader_id":"3","deck_code":"pd0305","featured_card_id":"111341020","purchase_num_max":1,"purchase_num_current":0,"is_first_price":true,"rewards":{"1":{"reward_type":"6","reward_detail_id":"1113410200","reward_number":"1","message_id":"51004"}},"sales_period_info":[],"price_crystal":"1200"},{"product_id":"504","product_name":"BDPN_構築済みデッキ5弾_ドラゴン","leader_id":"4","deck_code":"pd0405","featured_card_id":"111441020","purchase_num_max":1,"purchase_num_current":0,"is_first_price":true,"rewards":{"1":{"reward_type":"6","reward_detail_id":"1114410200","reward_number":"1","message_id":"51004"}},"sales_period_info":[],"price_crystal":"1200"},{"product_id":"505","product_name":"BDPN_構築済みデッキ5弾_ネクロマンサー","leader_id":"5","deck_code":"pd0505","featured_card_id":"111541020","purchase_num_max":1,"purchase_num_current":0,"is_first_price":true,"rewards":{"1":{"reward_type":"6","reward_detail_id":"1115410200","reward_number":"1","message_id":"51004"}},"sales_period_info":[],"price_crystal":"1200"},{"product_id":"506","product_name":"BDPN_構築済みデッキ5弾_ヴァンパイア","leader_id":"6","deck_code":"pd0605","featured_card_id":"111641020","purchase_num_max":1,"purchase_num_current":0,"is_first_price":true,"rewards":{"1":{"reward_type":"6","reward_detail_id":"1116410200","reward_number":"1","message_id":"51004"}},"sales_period_info":[],"price_crystal":"1200"},{"product_id":"507","product_name":"BDPN_構築済みデッキ5弾_ビショップ","leader_id":"7","deck_code":"pd0705","featured_card_id":"111741020","purchase_num_max":1,"purchase_num_current":0,"is_first_price":true,"rewards":{"1":{"reward_type":"6","reward_detail_id":"1117410200","reward_number":"1","message_id":"51004"}},"sales_period_info":[],"price_crystal":"1200"},{"product_id":"508","product_name":"BDPN_構築済みデッキ5弾_ネメシス","leader_id":"8","deck_code":"pd0805","featured_card_id":"111841020","purchase_num_max":1,"purchase_num_current":0,"is_first_price":true,"rewards":{"1":{"reward_type":"6","reward_detail_id":"1118410200","reward_number":"1","message_id":"51004"}},"sales_period_info":[],"price_crystal":"1200"}],"series_rewards":{"1":{"reward_list":[{"reward_type":"5","reward_detail_id":"707034010","reward_number":"3","message_id":51004}],"is_get":false},"2":{"reward_list":[{"reward_type":"5","reward_detail_id":"707031010","reward_number":"3","message_id":51004}],"is_get":false},"3":{"reward_list":[{"reward_type":"6","reward_detail_id":"707034010","reward_number":"1","message_id":51004},{"reward_type":"7","reward_detail_id":"707034010","reward_number":"1","message_id":51004}],"is_get":false},"4":{"reward_list":[{"reward_type":"6","reward_detail_id":"707031010","reward_number":"1","message_id":51004},{"reward_type":"7","reward_detail_id":"707031010","reward_number":"1","message_id":51004}],"is_get":false},"5":{"reward_list":[{"reward_type":"5","reward_detail_id":"707034011","reward_number":"3","message_id":51004}],"is_get":false},"6":{"reward_list":[{"reward_type":"5","reward_detail_id":"707031011","reward_number":"3","message_id":51004}],"is_get":false},"7":{"reward_list":[{"reward_type":"4","reward_detail_id":"1000","reward_number":"1","message_id":51004}],"is_get":false},"8":{"reward_list":[{"reward_type":"4","reward_detail_id":"1000","reward_number":"1","message_id":51004}],"is_get":false}}},"18":{"series_id":"104","order_id":"19","is_new":false,"products":[{"product_id":"401","product_name":"BDPN_構築済みデッキ4弾_エルフ","leader_id":"1","deck_code":"pd0104","featured_card_id":"705114010","purchase_num_max":1,"purchase_num_current":0,"is_first_price":true,"rewards":{"1":{"reward_type":"7","reward_detail_id":"705114010","reward_number":"1","message_id":"51004"},"2":{"reward_type":"6","reward_detail_id":"705114010","reward_number":"1","message_id":"51004"},"3":{"reward_type":"5","reward_detail_id":"705114010","reward_number":"3","message_id":"51004"}},"sales_period_info":[],"price_crystal":"800"},{"product_id":"402","product_name":"BDPN_構築済みデッキ4弾_ロイヤル","leader_id":"2","deck_code":"pd0204","featured_card_id":"705214010","purchase_num_max":1,"purchase_num_current":0,"is_first_price":true,"rewards":{"1":{"reward_type":"7","reward_detail_id":"705214010","reward_number":"1","message_id":"51004"},"2":{"reward_type":"6","reward_detail_id":"705214010","reward_number":"1","message_id":"51004"},"3":{"reward_type":"5","reward_detail_id":"705214010","reward_number":"3","message_id":"51004"}},"sales_period_info":[],"price_crystal":"800"},{"product_id":"403","product_name":"BDPN_構築済みデッキ4弾_ウィッチ","leader_id":"3","deck_code":"pd0304","featured_card_id":"705314010","purchase_num_max":1,"purchase_num_current":0,"is_first_price":true,"rewards":{"1":{"reward_type":"7","reward_detail_id":"705314010","reward_number":"1","message_id":"51004"},"2":{"reward_type":"6","reward_detail_id":"705314010","reward_number":"1","message_id":"51004"},"3":{"reward_type":"5","reward_detail_id":"705314010","reward_number":"3","message_id":"51004"}},"sales_period_info":[],"price_crystal":"800"},{"product_id":"404","product_name":"BDPN_構築済みデッキ4弾_ドラゴン","leader_id":"4","deck_code":"pd0404","featured_card_id":"705414010","purchase_num_max":1,"purchase_num_current":0,"is_first_price":true,"rewards":{"1":{"reward_type":"7","reward_detail_id":"705414010","reward_number":"1","message_id":"51004"},"2":{"reward_type":"6","reward_detail_id":"705414010","reward_number":"1","message_id":"51004"},"3":{"reward_type":"5","reward_detail_id":"705414010","reward_number":"3","message_id":"51004"}},"sales_period_info":[],"price_crystal":"800"},{"product_id":"405","product_name":"BDPN_構築済みデッキ4弾_ネクロマンサー","leader_id":"5","deck_code":"pd0504","featured_card_id":"705514010","purchase_num_max":1,"purchase_num_current":0,"is_first_price":true,"rewards":{"1":{"reward_type":"7","reward_detail_id":"705514010","reward_number":"1","message_id":"51004"},"2":{"reward_type":"6","reward_detail_id":"705514010","reward_number":"1","message_id":"51004"},"3":{"reward_type":"5","reward_detail_id":"705514010","reward_number":"3","message_id":"51004"}},"sales_period_info":[],"price_crystal":"800"},{"product_id":"406","product_name":"BDPN_構築済みデッキ4弾_ヴァンパイア","leader_id":"6","deck_code":"pd0604","featured_card_id":"705614020","purchase_num_max":1,"purchase_num_current":0,"is_first_price":true,"rewards":{"1":{"reward_type":"7","reward_detail_id":"705614020","reward_number":"1","message_id":"51004"},"2":{"reward_type":"6","reward_detail_id":"705614020","reward_number":"1","message_id":"51004"},"3":{"reward_type":"5","reward_detail_id":"705614020","reward_number":"3","message_id":"51004"}},"sales_period_info":[],"price_crystal":"800"},{"product_id":"407","product_name":"BDPN_構築済みデッキ4弾_ビショップ","leader_id":"7","deck_code":"pd0704","featured_card_id":"705714010","purchase_num_max":1,"purchase_num_current":0,"is_first_price":true,"rewards":{"1":{"reward_type":"7","reward_detail_id":"705714010","reward_number":"1","message_id":"51004"},"2":{"reward_type":"6","reward_detail_id":"705714010","reward_number":"1","message_id":"51004"},"3":{"reward_type":"5","reward_detail_id":"705714010","reward_number":"3","message_id":"51004"}},"sales_period_info":[],"price_crystal":"800"},{"product_id":"408","product_name":"BDPN_構築済みデッキ4弾_ネメシス","leader_id":"8","deck_code":"pd0804","featured_card_id":"705814010","purchase_num_max":1,"purchase_num_current":0,"is_first_price":true,"rewards":{"1":{"reward_type":"7","reward_detail_id":"705814010","reward_number":"1","message_id":"51004"},"2":{"reward_type":"6","reward_detail_id":"705814010","reward_number":"1","message_id":"51004"},"3":{"reward_type":"5","reward_detail_id":"705814010","reward_number":"3","message_id":"51004"}},"sales_period_info":[],"price_crystal":"800"}],"series_rewards":[]},"19":{"series_id":"103","order_id":"20","is_new":false,"products":[{"product_id":"301","product_name":"BDPN_構築済みデッキ3弾_エルフ","leader_id":"1","deck_code":"pd0103","featured_card_id":"106141010","purchase_num_max":1,"purchase_num_current":0,"is_first_price":true,"rewards":{"1":{"reward_type":"6","reward_detail_id":"1061410100","reward_number":"1","message_id":"51004"}},"sales_period_info":[],"price_crystal":"800"},{"product_id":"302","product_name":"BDPN_構築済みデッキ3弾_ロイヤル","leader_id":"2","deck_code":"pd0203","featured_card_id":"106241010","purchase_num_max":1,"purchase_num_current":0,"is_first_price":true,"rewards":{"1":{"reward_type":"6","reward_detail_id":"1062410100","reward_number":"1","message_id":"51004"}},"sales_period_info":[],"price_crystal":"800"},{"product_id":"303","product_name":"BDPN_構築済みデッキ3弾_ウィッチ","leader_id":"3","deck_code":"pd0303","featured_card_id":"105341010","purchase_num_max":1,"purchase_num_current":0,"is_first_price":true,"rewards":{"1":{"reward_type":"6","reward_detail_id":"1053410100","reward_number":"1","message_id":"51004"}},"sales_period_info":[],"price_crystal":"800"},{"product_id":"304","product_name":"BDPN_構築済みデッキ3弾_ドラゴン","leader_id":"4","deck_code":"pd0403","featured_card_id":"106441010","purchase_num_max":1,"purchase_num_current":0,"is_first_price":true,"rewards":{"1":{"reward_type":"6","reward_detail_id":"1064410100","reward_number":"1","message_id":"51004"}},"sales_period_info":[],"price_crystal":"800"},{"product_id":"305","product_name":"BDPN_構築済みデッキ3弾_ネクロマンサー","leader_id":"5","deck_code":"pd0503","featured_card_id":"106541020","purchase_num_max":1,"purchase_num_current":0,"is_first_price":true,"rewards":{"1":{"reward_type":"6","reward_detail_id":"1065410200","reward_number":"1","message_id":"51004"}},"sales_period_info":[],"price_crystal":"800"},{"product_id":"306","product_name":"BDPN_構築済みデッキ3弾_ヴァンパイア","leader_id":"6","deck_code":"pd0603","featured_card_id":"105641020","purchase_num_max":1,"purchase_num_current":0,"is_first_price":true,"rewards":{"1":{"reward_type":"6","reward_detail_id":"1056410200","reward_number":"1","message_id":"51004"}},"sales_period_info":[],"price_crystal":"800"},{"product_id":"307","product_name":"BDPN_構築済みデッキ3弾_ビショップ","leader_id":"7","deck_code":"pd0703","featured_card_id":"106741010","purchase_num_max":1,"purchase_num_current":0,"is_first_price":true,"rewards":{"1":{"reward_type":"6","reward_detail_id":"1067410100","reward_number":"1","message_id":"51004"}},"sales_period_info":[],"price_crystal":"800"}],"series_rewards":[]},"20":{"series_id":"102","order_id":"21","is_new":false,"products":[{"product_id":"201","product_name":"BDPN_構築済みデッキ2弾_エルフ","leader_id":"1","deck_code":"pd0102","featured_card_id":"703141011","purchase_num_max":3,"purchase_num_current":0,"is_first_price":true,"rewards":{"1":{"reward_type":"7","reward_detail_id":"703141011","reward_number":"1","message_id":"51004"},"2":{"reward_type":"6","reward_detail_id":"703141011","reward_number":"1","message_id":"51004"}},"sales_period_info":[],"price_crystal":"500"},{"product_id":"202","product_name":"BDPN_構築済みデッキ2弾_ロイヤル","leader_id":"2","deck_code":"pd0202","featured_card_id":"703241011","purchase_num_max":3,"purchase_num_current":0,"is_first_price":true,"rewards":{"1":{"reward_type":"7","reward_detail_id":"703241011","reward_number":"1","message_id":"51004"},"2":{"reward_type":"6","reward_detail_id":"703241011","reward_number":"1","message_id":"51004"}},"sales_period_info":[],"price_crystal":"500"},{"product_id":"203","product_name":"BDPN_構築済みデッキ2弾_ウィッチ","leader_id":"3","deck_code":"pd0302","featured_card_id":"703341011","purchase_num_max":3,"purchase_num_current":0,"is_first_price":true,"rewards":{"1":{"reward_type":"7","reward_detail_id":"703341011","reward_number":"1","message_id":"51004"},"2":{"reward_type":"6","reward_detail_id":"703341011","reward_number":"1","message_id":"51004"}},"sales_period_info":[],"price_crystal":"500"},{"product_id":"204","product_name":"BDPN_構築済みデッキ2弾_ドラゴン","leader_id":"4","deck_code":"pd0402","featured_card_id":"703441011","purchase_num_max":3,"purchase_num_current":3,"is_first_price":false,"rewards":{"1":{"reward_type":"7","reward_detail_id":"703441011","reward_number":"1","message_id":"51004"},"2":{"reward_type":"6","reward_detail_id":"703441011","reward_number":"1","message_id":"51004"}},"sales_period_info":[],"price_crystal":"750"},{"product_id":"205","product_name":"BDPN_構築済みデッキ2弾_ネクロマンサー","leader_id":"5","deck_code":"pd0502","featured_card_id":"703541011","purchase_num_max":3,"purchase_num_current":0,"is_first_price":true,"rewards":{"1":{"reward_type":"7","reward_detail_id":"703541011","reward_number":"1","message_id":"51004"},"2":{"reward_type":"6","reward_detail_id":"703541011","reward_number":"1","message_id":"51004"}},"sales_period_info":[],"price_crystal":"500"},{"product_id":"206","product_name":"BDPN_構築済みデッキ2弾_ヴァンパイア","leader_id":"6","deck_code":"pd0602","featured_card_id":"703641011","purchase_num_max":3,"purchase_num_current":3,"is_first_price":false,"rewards":{"1":{"reward_type":"7","reward_detail_id":"703641011","reward_number":"1","message_id":"51004"},"2":{"reward_type":"6","reward_detail_id":"703641011","reward_number":"1","message_id":"51004"}},"sales_period_info":[],"price_crystal":"750"},{"product_id":"207","product_name":"BDPN_構築済みデッキ2弾_ビショップ","leader_id":"7","deck_code":"pd0702","featured_card_id":"703741011","purchase_num_max":3,"purchase_num_current":0,"is_first_price":true,"rewards":{"1":{"reward_type":"7","reward_detail_id":"703741011","reward_number":"1","message_id":"51004"},"2":{"reward_type":"6","reward_detail_id":"703741011","reward_number":"1","message_id":"51004"}},"sales_period_info":[],"price_crystal":"500"}],"series_rewards":[]},"21":{"series_id":"101","order_id":"22","is_new":false,"products":[{"product_id":"1","product_name":"BDPN_構築済みデッキ1弾_エルフ","leader_id":"1","deck_code":"pd0101","featured_card_id":"701141011","purchase_num_max":3,"purchase_num_current":0,"is_first_price":true,"rewards":{"1":{"reward_type":"7","reward_detail_id":"701141011","reward_number":"1","message_id":"51004"},"2":{"reward_type":"6","reward_detail_id":"701141011","reward_number":"1","message_id":"51004"}},"sales_period_info":[],"price_crystal":"500"},{"product_id":"2","product_name":"BDPN_構築済みデッキ1弾_ロイヤル","leader_id":"2","deck_code":"pd0201","featured_card_id":"701241011","purchase_num_max":3,"purchase_num_current":0,"is_first_price":true,"rewards":{"1":{"reward_type":"7","reward_detail_id":"701241011","reward_number":"1","message_id":"51004"},"2":{"reward_type":"6","reward_detail_id":"701241011","reward_number":"1","message_id":"51004"}},"sales_period_info":[],"price_crystal":"500"},{"product_id":"3","product_name":"BDPN_構築済みデッキ1弾_ウィッチ","leader_id":"3","deck_code":"pd0301","featured_card_id":"701341011","purchase_num_max":3,"purchase_num_current":0,"is_first_price":true,"rewards":{"1":{"reward_type":"7","reward_detail_id":"701341011","reward_number":"1","message_id":"51004"},"2":{"reward_type":"6","reward_detail_id":"701341011","reward_number":"1","message_id":"51004"}},"sales_period_info":[],"price_crystal":"500"},{"product_id":"4","product_name":"BDPN_構築済みデッキ1弾_ドラゴン","leader_id":"4","deck_code":"pd0401","featured_card_id":"701441011","purchase_num_max":3,"purchase_num_current":3,"is_first_price":false,"rewards":{"1":{"reward_type":"7","reward_detail_id":"701441011","reward_number":"1","message_id":"51004"},"2":{"reward_type":"6","reward_detail_id":"701441011","reward_number":"1","message_id":"51004"}},"sales_period_info":[],"price_crystal":"750"},{"product_id":"5","product_name":"BDPN_構築済みデッキ1弾_ネクロマンサー","leader_id":"5","deck_code":"pd0501","featured_card_id":"701541011","purchase_num_max":3,"purchase_num_current":0,"is_first_price":true,"rewards":{"1":{"reward_type":"7","reward_detail_id":"701541011","reward_number":"1","message_id":"51004"},"2":{"reward_type":"6","reward_detail_id":"701541011","reward_number":"1","message_id":"51004"}},"sales_period_info":[],"price_crystal":"500"},{"product_id":"6","product_name":"BDPN_構築済みデッキ1弾_ヴァンパイア","leader_id":"6","deck_code":"pd0601","featured_card_id":"701641011","purchase_num_max":3,"purchase_num_current":0,"is_first_price":true,"rewards":{"1":{"reward_type":"7","reward_detail_id":"701641011","reward_number":"1","message_id":"51004"},"2":{"reward_type":"6","reward_detail_id":"701641011","reward_number":"1","message_id":"51004"}},"sales_period_info":[],"price_crystal":"500"},{"product_id":"7","product_name":"BDPN_構築済みデッキ1弾_ビショップ","leader_id":"7","deck_code":"pd0701","featured_card_id":"701741011","purchase_num_max":3,"purchase_num_current":0,"is_first_price":true,"rewards":{"1":{"reward_type":"7","reward_detail_id":"701741011","reward_number":"1","message_id":"51004"},"2":{"reward_type":"6","reward_detail_id":"701741011","reward_number":"1","message_id":"51004"}},"sales_period_info":[],"price_crystal":"500"}],"series_rewards":[]}}} diff --git a/SVSim.Bootstrap/Data/seeds/build-deck-catalog.json b/SVSim.Bootstrap/Data/seeds/build-deck-catalog.json new file mode 100644 index 0000000..3d795f0 --- /dev/null +++ b/SVSim.Bootstrap/Data/seeds/build-deck-catalog.json @@ -0,0 +1,1648 @@ +[ + { + "series_id": 107, + "order_id": 16, + "is_new": false, + "series_rewards": [ + { + "tier_index": 1, + "item_index": 0, + "reward_type": 5, + "reward_detail_id": 712014010, + "reward_number": 3, + "message_id": 51004 + }, + { + "tier_index": 2, + "item_index": 0, + "reward_type": 5, + "reward_detail_id": 712031010, + "reward_number": 3, + "message_id": 51004 + }, + { + "tier_index": 3, + "item_index": 0, + "reward_type": 6, + "reward_detail_id": 712014010, + "reward_number": 1, + "message_id": 51004 + }, + { + "tier_index": 3, + "item_index": 1, + "reward_type": 7, + "reward_detail_id": 712014015, + "reward_number": 1, + "message_id": 51004 + }, + { + "tier_index": 3, + "item_index": 2, + "reward_type": 7, + "reward_detail_id": 712014016, + "reward_number": 1, + "message_id": 51004 + }, + { + "tier_index": 3, + "item_index": 3, + "reward_type": 7, + "reward_detail_id": 712014017, + "reward_number": 1, + "message_id": 51004 + }, + { + "tier_index": 3, + "item_index": 4, + "reward_type": 7, + "reward_detail_id": 712014018, + "reward_number": 1, + "message_id": 51004 + }, + { + "tier_index": 4, + "item_index": 0, + "reward_type": 6, + "reward_detail_id": 712031010, + "reward_number": 1, + "message_id": 51004 + }, + { + "tier_index": 4, + "item_index": 1, + "reward_type": 7, + "reward_detail_id": 712031010, + "reward_number": 1, + "message_id": 51004 + }, + { + "tier_index": 5, + "item_index": 0, + "reward_type": 5, + "reward_detail_id": 712014011, + "reward_number": 3, + "message_id": 51004 + }, + { + "tier_index": 6, + "item_index": 0, + "reward_type": 5, + "reward_detail_id": 712031011, + "reward_number": 3, + "message_id": 51004 + }, + { + "tier_index": 7, + "item_index": 0, + "reward_type": 4, + "reward_detail_id": 1000, + "reward_number": 1, + "message_id": 51004 + }, + { + "tier_index": 8, + "item_index": 0, + "reward_type": 4, + "reward_detail_id": 1000, + "reward_number": 1, + "message_id": 51004 + } + ], + "products": [ + { + "product_id": 701, + "leader_id": 1, + "deck_code": "pd0107", + "product_name": "BDPN_構築済みデッキ7弾_エルフ", + "featured_card_id": 115141020, + "purchase_num_max": 1, + "intro_price_crystal": 1200, + "regular_price_crystal": null, + "intro_price_rupy": null, + "regular_price_rupy": null, + "rewards": [ + { + "reward_index": 1, + "reward_type": 6, + "reward_detail_id": 1151410200, + "reward_number": 1, + "message_id": 51004 + } + ] + }, + { + "product_id": 702, + "leader_id": 2, + "deck_code": "pd0207", + "product_name": "BDPN_構築済みデッキ7弾_ロイヤル", + "featured_card_id": 115241020, + "purchase_num_max": 1, + "intro_price_crystal": 1200, + "regular_price_crystal": null, + "intro_price_rupy": null, + "regular_price_rupy": null, + "rewards": [ + { + "reward_index": 1, + "reward_type": 6, + "reward_detail_id": 1152410200, + "reward_number": 1, + "message_id": 51004 + } + ] + }, + { + "product_id": 703, + "leader_id": 3, + "deck_code": "pd0307", + "product_name": "BDPN_構築済みデッキ7弾_ウィッチ", + "featured_card_id": 115341020, + "purchase_num_max": 1, + "intro_price_crystal": 1200, + "regular_price_crystal": null, + "intro_price_rupy": null, + "regular_price_rupy": null, + "rewards": [ + { + "reward_index": 1, + "reward_type": 6, + "reward_detail_id": 1153410200, + "reward_number": 1, + "message_id": 51004 + } + ] + }, + { + "product_id": 704, + "leader_id": 4, + "deck_code": "pd0407", + "product_name": "BDPN_構築済みデッキ7弾_ドラゴン", + "featured_card_id": 115441020, + "purchase_num_max": 1, + "intro_price_crystal": 1200, + "regular_price_crystal": null, + "intro_price_rupy": null, + "regular_price_rupy": null, + "rewards": [ + { + "reward_index": 1, + "reward_type": 6, + "reward_detail_id": 1154410200, + "reward_number": 1, + "message_id": 51004 + } + ] + }, + { + "product_id": 705, + "leader_id": 5, + "deck_code": "pd0507", + "product_name": "BDPN_構築済みデッキ7弾_ネクロマンサー", + "featured_card_id": 115541020, + "purchase_num_max": 1, + "intro_price_crystal": 1200, + "regular_price_crystal": null, + "intro_price_rupy": null, + "regular_price_rupy": null, + "rewards": [ + { + "reward_index": 1, + "reward_type": 6, + "reward_detail_id": 1155410200, + "reward_number": 1, + "message_id": 51004 + } + ] + }, + { + "product_id": 706, + "leader_id": 6, + "deck_code": "pd0607", + "product_name": "BDPN_構築済みデッキ7弾_ヴァンパイア", + "featured_card_id": 115641020, + "purchase_num_max": 1, + "intro_price_crystal": 1200, + "regular_price_crystal": null, + "intro_price_rupy": null, + "regular_price_rupy": null, + "rewards": [ + { + "reward_index": 1, + "reward_type": 6, + "reward_detail_id": 1156410200, + "reward_number": 1, + "message_id": 51004 + } + ] + }, + { + "product_id": 707, + "leader_id": 7, + "deck_code": "pd0707", + "product_name": "BDPN_構築済みデッキ7弾_ビショップ", + "featured_card_id": 115741020, + "purchase_num_max": 1, + "intro_price_crystal": 1200, + "regular_price_crystal": null, + "intro_price_rupy": null, + "regular_price_rupy": null, + "rewards": [ + { + "reward_index": 1, + "reward_type": 6, + "reward_detail_id": 1157410200, + "reward_number": 1, + "message_id": 51004 + } + ] + }, + { + "product_id": 708, + "leader_id": 8, + "deck_code": "pd0807", + "product_name": "BDPN_構築済みデッキ7弾_ネメシス", + "featured_card_id": 115841020, + "purchase_num_max": 1, + "intro_price_crystal": 1200, + "regular_price_crystal": null, + "intro_price_rupy": null, + "regular_price_rupy": null, + "rewards": [ + { + "reward_index": 1, + "reward_type": 6, + "reward_detail_id": 1158410200, + "reward_number": 1, + "message_id": 51004 + } + ] + } + ] + }, + { + "series_id": 106, + "order_id": 17, + "is_new": false, + "series_rewards": [ + { + "tier_index": 1, + "item_index": 0, + "reward_type": 5, + "reward_detail_id": 710034010, + "reward_number": 3, + "message_id": 51004 + }, + { + "tier_index": 2, + "item_index": 0, + "reward_type": 5, + "reward_detail_id": 710031010, + "reward_number": 3, + "message_id": 51004 + }, + { + "tier_index": 3, + "item_index": 0, + "reward_type": 6, + "reward_detail_id": 710034010, + "reward_number": 1, + "message_id": 51004 + }, + { + "tier_index": 3, + "item_index": 1, + "reward_type": 7, + "reward_detail_id": 710034010, + "reward_number": 1, + "message_id": 51004 + }, + { + "tier_index": 4, + "item_index": 0, + "reward_type": 6, + "reward_detail_id": 710031010, + "reward_number": 1, + "message_id": 51004 + }, + { + "tier_index": 4, + "item_index": 1, + "reward_type": 7, + "reward_detail_id": 710031010, + "reward_number": 1, + "message_id": 51004 + }, + { + "tier_index": 5, + "item_index": 0, + "reward_type": 5, + "reward_detail_id": 710034011, + "reward_number": 3, + "message_id": 51004 + }, + { + "tier_index": 6, + "item_index": 0, + "reward_type": 5, + "reward_detail_id": 710031011, + "reward_number": 3, + "message_id": 51004 + }, + { + "tier_index": 7, + "item_index": 0, + "reward_type": 4, + "reward_detail_id": 1000, + "reward_number": 1, + "message_id": 51004 + }, + { + "tier_index": 8, + "item_index": 0, + "reward_type": 4, + "reward_detail_id": 1000, + "reward_number": 1, + "message_id": 51004 + } + ], + "products": [ + { + "product_id": 601, + "leader_id": 1, + "deck_code": "pd0106", + "product_name": "BDPN_構築済みデッキ6弾_エルフ", + "featured_card_id": 111141010, + "purchase_num_max": 1, + "intro_price_crystal": 1200, + "regular_price_crystal": null, + "intro_price_rupy": null, + "regular_price_rupy": null, + "rewards": [ + { + "reward_index": 1, + "reward_type": 6, + "reward_detail_id": 1111410100, + "reward_number": 1, + "message_id": 51004 + } + ] + }, + { + "product_id": 602, + "leader_id": 2, + "deck_code": "pd0206", + "product_name": "BDPN_構築済みデッキ6弾_ロイヤル", + "featured_card_id": 112241010, + "purchase_num_max": 1, + "intro_price_crystal": 1200, + "regular_price_crystal": null, + "intro_price_rupy": null, + "regular_price_rupy": null, + "rewards": [ + { + "reward_index": 1, + "reward_type": 6, + "reward_detail_id": 1122410100, + "reward_number": 1, + "message_id": 51004 + } + ] + }, + { + "product_id": 603, + "leader_id": 3, + "deck_code": "pd0306", + "product_name": "BDPN_構築済みデッキ6弾_ウィッチ", + "featured_card_id": 112341020, + "purchase_num_max": 1, + "intro_price_crystal": 1200, + "regular_price_crystal": null, + "intro_price_rupy": null, + "regular_price_rupy": null, + "rewards": [ + { + "reward_index": 1, + "reward_type": 6, + "reward_detail_id": 1123410200, + "reward_number": 1, + "message_id": 51004 + } + ] + }, + { + "product_id": 604, + "leader_id": 4, + "deck_code": "pd0406", + "product_name": "BDPN_構築済みデッキ6弾_ドラゴン", + "featured_card_id": 112441010, + "purchase_num_max": 1, + "intro_price_crystal": 1200, + "regular_price_crystal": null, + "intro_price_rupy": null, + "regular_price_rupy": null, + "rewards": [ + { + "reward_index": 1, + "reward_type": 6, + "reward_detail_id": 1124410100, + "reward_number": 1, + "message_id": 51004 + } + ] + }, + { + "product_id": 605, + "leader_id": 5, + "deck_code": "pd0506", + "product_name": "BDPN_構築済みデッキ6弾_ネクロマンサー", + "featured_card_id": 112541020, + "purchase_num_max": 1, + "intro_price_crystal": 1200, + "regular_price_crystal": null, + "intro_price_rupy": null, + "regular_price_rupy": null, + "rewards": [ + { + "reward_index": 1, + "reward_type": 6, + "reward_detail_id": 1125410200, + "reward_number": 1, + "message_id": 51004 + } + ] + }, + { + "product_id": 606, + "leader_id": 6, + "deck_code": "pd0606", + "product_name": "BDPN_構築済みデッキ6弾_ヴァンパイア", + "featured_card_id": 112641020, + "purchase_num_max": 1, + "intro_price_crystal": 1200, + "regular_price_crystal": null, + "intro_price_rupy": null, + "regular_price_rupy": null, + "rewards": [ + { + "reward_index": 1, + "reward_type": 6, + "reward_detail_id": 1126410200, + "reward_number": 1, + "message_id": 51004 + } + ] + }, + { + "product_id": 607, + "leader_id": 7, + "deck_code": "pd0706", + "product_name": "BDPN_構築済みデッキ6弾_ビショップ", + "featured_card_id": 111741030, + "purchase_num_max": 1, + "intro_price_crystal": 1200, + "regular_price_crystal": null, + "intro_price_rupy": null, + "regular_price_rupy": null, + "rewards": [ + { + "reward_index": 1, + "reward_type": 6, + "reward_detail_id": 1117410300, + "reward_number": 1, + "message_id": 51004 + } + ] + }, + { + "product_id": 608, + "leader_id": 8, + "deck_code": "pd0806", + "product_name": "BDPN_構築済みデッキ6弾_ネメシス", + "featured_card_id": 112841030, + "purchase_num_max": 1, + "intro_price_crystal": 1200, + "regular_price_crystal": null, + "intro_price_rupy": null, + "regular_price_rupy": null, + "rewards": [ + { + "reward_index": 1, + "reward_type": 6, + "reward_detail_id": 1128410300, + "reward_number": 1, + "message_id": 51004 + } + ] + } + ] + }, + { + "series_id": 105, + "order_id": 18, + "is_new": false, + "series_rewards": [ + { + "tier_index": 1, + "item_index": 0, + "reward_type": 5, + "reward_detail_id": 707034010, + "reward_number": 3, + "message_id": 51004 + }, + { + "tier_index": 2, + "item_index": 0, + "reward_type": 5, + "reward_detail_id": 707031010, + "reward_number": 3, + "message_id": 51004 + }, + { + "tier_index": 3, + "item_index": 0, + "reward_type": 6, + "reward_detail_id": 707034010, + "reward_number": 1, + "message_id": 51004 + }, + { + "tier_index": 3, + "item_index": 1, + "reward_type": 7, + "reward_detail_id": 707034010, + "reward_number": 1, + "message_id": 51004 + }, + { + "tier_index": 4, + "item_index": 0, + "reward_type": 6, + "reward_detail_id": 707031010, + "reward_number": 1, + "message_id": 51004 + }, + { + "tier_index": 4, + "item_index": 1, + "reward_type": 7, + "reward_detail_id": 707031010, + "reward_number": 1, + "message_id": 51004 + }, + { + "tier_index": 5, + "item_index": 0, + "reward_type": 5, + "reward_detail_id": 707034011, + "reward_number": 3, + "message_id": 51004 + }, + { + "tier_index": 6, + "item_index": 0, + "reward_type": 5, + "reward_detail_id": 707031011, + "reward_number": 3, + "message_id": 51004 + }, + { + "tier_index": 7, + "item_index": 0, + "reward_type": 4, + "reward_detail_id": 1000, + "reward_number": 1, + "message_id": 51004 + }, + { + "tier_index": 8, + "item_index": 0, + "reward_type": 4, + "reward_detail_id": 1000, + "reward_number": 1, + "message_id": 51004 + } + ], + "products": [ + { + "product_id": 501, + "leader_id": 1, + "deck_code": "pd0105", + "product_name": "BDPN_構築済みデッキ5弾_エルフ", + "featured_card_id": 111141020, + "purchase_num_max": 1, + "intro_price_crystal": 1200, + "regular_price_crystal": null, + "intro_price_rupy": null, + "regular_price_rupy": null, + "rewards": [ + { + "reward_index": 1, + "reward_type": 6, + "reward_detail_id": 1111410200, + "reward_number": 1, + "message_id": 51004 + } + ] + }, + { + "product_id": 502, + "leader_id": 2, + "deck_code": "pd0205", + "product_name": "BDPN_構築済みデッキ5弾_ロイヤル", + "featured_card_id": 111241020, + "purchase_num_max": 1, + "intro_price_crystal": 1200, + "regular_price_crystal": null, + "intro_price_rupy": null, + "regular_price_rupy": null, + "rewards": [ + { + "reward_index": 1, + "reward_type": 6, + "reward_detail_id": 1112410200, + "reward_number": 1, + "message_id": 51004 + } + ] + }, + { + "product_id": 503, + "leader_id": 3, + "deck_code": "pd0305", + "product_name": "BDPN_構築済みデッキ5弾_ウィッチ", + "featured_card_id": 111341020, + "purchase_num_max": 1, + "intro_price_crystal": 1200, + "regular_price_crystal": null, + "intro_price_rupy": null, + "regular_price_rupy": null, + "rewards": [ + { + "reward_index": 1, + "reward_type": 6, + "reward_detail_id": 1113410200, + "reward_number": 1, + "message_id": 51004 + } + ] + }, + { + "product_id": 504, + "leader_id": 4, + "deck_code": "pd0405", + "product_name": "BDPN_構築済みデッキ5弾_ドラゴン", + "featured_card_id": 111441020, + "purchase_num_max": 1, + "intro_price_crystal": 1200, + "regular_price_crystal": null, + "intro_price_rupy": null, + "regular_price_rupy": null, + "rewards": [ + { + "reward_index": 1, + "reward_type": 6, + "reward_detail_id": 1114410200, + "reward_number": 1, + "message_id": 51004 + } + ] + }, + { + "product_id": 505, + "leader_id": 5, + "deck_code": "pd0505", + "product_name": "BDPN_構築済みデッキ5弾_ネクロマンサー", + "featured_card_id": 111541020, + "purchase_num_max": 1, + "intro_price_crystal": 1200, + "regular_price_crystal": null, + "intro_price_rupy": null, + "regular_price_rupy": null, + "rewards": [ + { + "reward_index": 1, + "reward_type": 6, + "reward_detail_id": 1115410200, + "reward_number": 1, + "message_id": 51004 + } + ] + }, + { + "product_id": 506, + "leader_id": 6, + "deck_code": "pd0605", + "product_name": "BDPN_構築済みデッキ5弾_ヴァンパイア", + "featured_card_id": 111641020, + "purchase_num_max": 1, + "intro_price_crystal": 1200, + "regular_price_crystal": null, + "intro_price_rupy": null, + "regular_price_rupy": null, + "rewards": [ + { + "reward_index": 1, + "reward_type": 6, + "reward_detail_id": 1116410200, + "reward_number": 1, + "message_id": 51004 + } + ] + }, + { + "product_id": 507, + "leader_id": 7, + "deck_code": "pd0705", + "product_name": "BDPN_構築済みデッキ5弾_ビショップ", + "featured_card_id": 111741020, + "purchase_num_max": 1, + "intro_price_crystal": 1200, + "regular_price_crystal": null, + "intro_price_rupy": null, + "regular_price_rupy": null, + "rewards": [ + { + "reward_index": 1, + "reward_type": 6, + "reward_detail_id": 1117410200, + "reward_number": 1, + "message_id": 51004 + } + ] + }, + { + "product_id": 508, + "leader_id": 8, + "deck_code": "pd0805", + "product_name": "BDPN_構築済みデッキ5弾_ネメシス", + "featured_card_id": 111841020, + "purchase_num_max": 1, + "intro_price_crystal": 1200, + "regular_price_crystal": null, + "intro_price_rupy": null, + "regular_price_rupy": null, + "rewards": [ + { + "reward_index": 1, + "reward_type": 6, + "reward_detail_id": 1118410200, + "reward_number": 1, + "message_id": 51004 + } + ] + } + ] + }, + { + "series_id": 104, + "order_id": 19, + "is_new": false, + "series_rewards": [], + "products": [ + { + "product_id": 401, + "leader_id": 1, + "deck_code": "pd0104", + "product_name": "BDPN_構築済みデッキ4弾_エルフ", + "featured_card_id": 705114010, + "purchase_num_max": 1, + "intro_price_crystal": 800, + "regular_price_crystal": null, + "intro_price_rupy": null, + "regular_price_rupy": null, + "rewards": [ + { + "reward_index": 1, + "reward_type": 7, + "reward_detail_id": 705114010, + "reward_number": 1, + "message_id": 51004 + }, + { + "reward_index": 2, + "reward_type": 6, + "reward_detail_id": 705114010, + "reward_number": 1, + "message_id": 51004 + }, + { + "reward_index": 3, + "reward_type": 5, + "reward_detail_id": 705114010, + "reward_number": 3, + "message_id": 51004 + } + ] + }, + { + "product_id": 402, + "leader_id": 2, + "deck_code": "pd0204", + "product_name": "BDPN_構築済みデッキ4弾_ロイヤル", + "featured_card_id": 705214010, + "purchase_num_max": 1, + "intro_price_crystal": 800, + "regular_price_crystal": null, + "intro_price_rupy": null, + "regular_price_rupy": null, + "rewards": [ + { + "reward_index": 1, + "reward_type": 7, + "reward_detail_id": 705214010, + "reward_number": 1, + "message_id": 51004 + }, + { + "reward_index": 2, + "reward_type": 6, + "reward_detail_id": 705214010, + "reward_number": 1, + "message_id": 51004 + }, + { + "reward_index": 3, + "reward_type": 5, + "reward_detail_id": 705214010, + "reward_number": 3, + "message_id": 51004 + } + ] + }, + { + "product_id": 403, + "leader_id": 3, + "deck_code": "pd0304", + "product_name": "BDPN_構築済みデッキ4弾_ウィッチ", + "featured_card_id": 705314010, + "purchase_num_max": 1, + "intro_price_crystal": 800, + "regular_price_crystal": null, + "intro_price_rupy": null, + "regular_price_rupy": null, + "rewards": [ + { + "reward_index": 1, + "reward_type": 7, + "reward_detail_id": 705314010, + "reward_number": 1, + "message_id": 51004 + }, + { + "reward_index": 2, + "reward_type": 6, + "reward_detail_id": 705314010, + "reward_number": 1, + "message_id": 51004 + }, + { + "reward_index": 3, + "reward_type": 5, + "reward_detail_id": 705314010, + "reward_number": 3, + "message_id": 51004 + } + ] + }, + { + "product_id": 404, + "leader_id": 4, + "deck_code": "pd0404", + "product_name": "BDPN_構築済みデッキ4弾_ドラゴン", + "featured_card_id": 705414010, + "purchase_num_max": 1, + "intro_price_crystal": 800, + "regular_price_crystal": null, + "intro_price_rupy": null, + "regular_price_rupy": null, + "rewards": [ + { + "reward_index": 1, + "reward_type": 7, + "reward_detail_id": 705414010, + "reward_number": 1, + "message_id": 51004 + }, + { + "reward_index": 2, + "reward_type": 6, + "reward_detail_id": 705414010, + "reward_number": 1, + "message_id": 51004 + }, + { + "reward_index": 3, + "reward_type": 5, + "reward_detail_id": 705414010, + "reward_number": 3, + "message_id": 51004 + } + ] + }, + { + "product_id": 405, + "leader_id": 5, + "deck_code": "pd0504", + "product_name": "BDPN_構築済みデッキ4弾_ネクロマンサー", + "featured_card_id": 705514010, + "purchase_num_max": 1, + "intro_price_crystal": 800, + "regular_price_crystal": null, + "intro_price_rupy": null, + "regular_price_rupy": null, + "rewards": [ + { + "reward_index": 1, + "reward_type": 7, + "reward_detail_id": 705514010, + "reward_number": 1, + "message_id": 51004 + }, + { + "reward_index": 2, + "reward_type": 6, + "reward_detail_id": 705514010, + "reward_number": 1, + "message_id": 51004 + }, + { + "reward_index": 3, + "reward_type": 5, + "reward_detail_id": 705514010, + "reward_number": 3, + "message_id": 51004 + } + ] + }, + { + "product_id": 406, + "leader_id": 6, + "deck_code": "pd0604", + "product_name": "BDPN_構築済みデッキ4弾_ヴァンパイア", + "featured_card_id": 705614020, + "purchase_num_max": 1, + "intro_price_crystal": 800, + "regular_price_crystal": null, + "intro_price_rupy": null, + "regular_price_rupy": null, + "rewards": [ + { + "reward_index": 1, + "reward_type": 7, + "reward_detail_id": 705614020, + "reward_number": 1, + "message_id": 51004 + }, + { + "reward_index": 2, + "reward_type": 6, + "reward_detail_id": 705614020, + "reward_number": 1, + "message_id": 51004 + }, + { + "reward_index": 3, + "reward_type": 5, + "reward_detail_id": 705614020, + "reward_number": 3, + "message_id": 51004 + } + ] + }, + { + "product_id": 407, + "leader_id": 7, + "deck_code": "pd0704", + "product_name": "BDPN_構築済みデッキ4弾_ビショップ", + "featured_card_id": 705714010, + "purchase_num_max": 1, + "intro_price_crystal": 800, + "regular_price_crystal": null, + "intro_price_rupy": null, + "regular_price_rupy": null, + "rewards": [ + { + "reward_index": 1, + "reward_type": 7, + "reward_detail_id": 705714010, + "reward_number": 1, + "message_id": 51004 + }, + { + "reward_index": 2, + "reward_type": 6, + "reward_detail_id": 705714010, + "reward_number": 1, + "message_id": 51004 + }, + { + "reward_index": 3, + "reward_type": 5, + "reward_detail_id": 705714010, + "reward_number": 3, + "message_id": 51004 + } + ] + }, + { + "product_id": 408, + "leader_id": 8, + "deck_code": "pd0804", + "product_name": "BDPN_構築済みデッキ4弾_ネメシス", + "featured_card_id": 705814010, + "purchase_num_max": 1, + "intro_price_crystal": 800, + "regular_price_crystal": null, + "intro_price_rupy": null, + "regular_price_rupy": null, + "rewards": [ + { + "reward_index": 1, + "reward_type": 7, + "reward_detail_id": 705814010, + "reward_number": 1, + "message_id": 51004 + }, + { + "reward_index": 2, + "reward_type": 6, + "reward_detail_id": 705814010, + "reward_number": 1, + "message_id": 51004 + }, + { + "reward_index": 3, + "reward_type": 5, + "reward_detail_id": 705814010, + "reward_number": 3, + "message_id": 51004 + } + ] + } + ] + }, + { + "series_id": 103, + "order_id": 20, + "is_new": false, + "series_rewards": [], + "products": [ + { + "product_id": 301, + "leader_id": 1, + "deck_code": "pd0103", + "product_name": "BDPN_構築済みデッキ3弾_エルフ", + "featured_card_id": 106141010, + "purchase_num_max": 1, + "intro_price_crystal": 800, + "regular_price_crystal": null, + "intro_price_rupy": null, + "regular_price_rupy": null, + "rewards": [ + { + "reward_index": 1, + "reward_type": 6, + "reward_detail_id": 1061410100, + "reward_number": 1, + "message_id": 51004 + } + ] + }, + { + "product_id": 302, + "leader_id": 2, + "deck_code": "pd0203", + "product_name": "BDPN_構築済みデッキ3弾_ロイヤル", + "featured_card_id": 106241010, + "purchase_num_max": 1, + "intro_price_crystal": 800, + "regular_price_crystal": null, + "intro_price_rupy": null, + "regular_price_rupy": null, + "rewards": [ + { + "reward_index": 1, + "reward_type": 6, + "reward_detail_id": 1062410100, + "reward_number": 1, + "message_id": 51004 + } + ] + }, + { + "product_id": 303, + "leader_id": 3, + "deck_code": "pd0303", + "product_name": "BDPN_構築済みデッキ3弾_ウィッチ", + "featured_card_id": 105341010, + "purchase_num_max": 1, + "intro_price_crystal": 800, + "regular_price_crystal": null, + "intro_price_rupy": null, + "regular_price_rupy": null, + "rewards": [ + { + "reward_index": 1, + "reward_type": 6, + "reward_detail_id": 1053410100, + "reward_number": 1, + "message_id": 51004 + } + ] + }, + { + "product_id": 304, + "leader_id": 4, + "deck_code": "pd0403", + "product_name": "BDPN_構築済みデッキ3弾_ドラゴン", + "featured_card_id": 106441010, + "purchase_num_max": 1, + "intro_price_crystal": 800, + "regular_price_crystal": null, + "intro_price_rupy": null, + "regular_price_rupy": null, + "rewards": [ + { + "reward_index": 1, + "reward_type": 6, + "reward_detail_id": 1064410100, + "reward_number": 1, + "message_id": 51004 + } + ] + }, + { + "product_id": 305, + "leader_id": 5, + "deck_code": "pd0503", + "product_name": "BDPN_構築済みデッキ3弾_ネクロマンサー", + "featured_card_id": 106541020, + "purchase_num_max": 1, + "intro_price_crystal": 800, + "regular_price_crystal": null, + "intro_price_rupy": null, + "regular_price_rupy": null, + "rewards": [ + { + "reward_index": 1, + "reward_type": 6, + "reward_detail_id": 1065410200, + "reward_number": 1, + "message_id": 51004 + } + ] + }, + { + "product_id": 306, + "leader_id": 6, + "deck_code": "pd0603", + "product_name": "BDPN_構築済みデッキ3弾_ヴァンパイア", + "featured_card_id": 105641020, + "purchase_num_max": 1, + "intro_price_crystal": 800, + "regular_price_crystal": null, + "intro_price_rupy": null, + "regular_price_rupy": null, + "rewards": [ + { + "reward_index": 1, + "reward_type": 6, + "reward_detail_id": 1056410200, + "reward_number": 1, + "message_id": 51004 + } + ] + }, + { + "product_id": 307, + "leader_id": 7, + "deck_code": "pd0703", + "product_name": "BDPN_構築済みデッキ3弾_ビショップ", + "featured_card_id": 106741010, + "purchase_num_max": 1, + "intro_price_crystal": 800, + "regular_price_crystal": null, + "intro_price_rupy": null, + "regular_price_rupy": null, + "rewards": [ + { + "reward_index": 1, + "reward_type": 6, + "reward_detail_id": 1067410100, + "reward_number": 1, + "message_id": 51004 + } + ] + } + ] + }, + { + "series_id": 102, + "order_id": 21, + "is_new": false, + "series_rewards": [], + "products": [ + { + "product_id": 201, + "leader_id": 1, + "deck_code": "pd0102", + "product_name": "BDPN_構築済みデッキ2弾_エルフ", + "featured_card_id": 703141011, + "purchase_num_max": 3, + "intro_price_crystal": 500, + "regular_price_crystal": 750, + "intro_price_rupy": null, + "regular_price_rupy": null, + "rewards": [ + { + "reward_index": 1, + "reward_type": 7, + "reward_detail_id": 703141011, + "reward_number": 1, + "message_id": 51004 + }, + { + "reward_index": 2, + "reward_type": 6, + "reward_detail_id": 703141011, + "reward_number": 1, + "message_id": 51004 + } + ] + }, + { + "product_id": 202, + "leader_id": 2, + "deck_code": "pd0202", + "product_name": "BDPN_構築済みデッキ2弾_ロイヤル", + "featured_card_id": 703241011, + "purchase_num_max": 3, + "intro_price_crystal": 500, + "regular_price_crystal": 750, + "intro_price_rupy": null, + "regular_price_rupy": null, + "rewards": [ + { + "reward_index": 1, + "reward_type": 7, + "reward_detail_id": 703241011, + "reward_number": 1, + "message_id": 51004 + }, + { + "reward_index": 2, + "reward_type": 6, + "reward_detail_id": 703241011, + "reward_number": 1, + "message_id": 51004 + } + ] + }, + { + "product_id": 203, + "leader_id": 3, + "deck_code": "pd0302", + "product_name": "BDPN_構築済みデッキ2弾_ウィッチ", + "featured_card_id": 703341011, + "purchase_num_max": 3, + "intro_price_crystal": 500, + "regular_price_crystal": 750, + "intro_price_rupy": null, + "regular_price_rupy": null, + "rewards": [ + { + "reward_index": 1, + "reward_type": 7, + "reward_detail_id": 703341011, + "reward_number": 1, + "message_id": 51004 + }, + { + "reward_index": 2, + "reward_type": 6, + "reward_detail_id": 703341011, + "reward_number": 1, + "message_id": 51004 + } + ] + }, + { + "product_id": 204, + "leader_id": 4, + "deck_code": "pd0402", + "product_name": "BDPN_構築済みデッキ2弾_ドラゴン", + "featured_card_id": 703441011, + "purchase_num_max": 3, + "intro_price_crystal": 500, + "regular_price_crystal": 750, + "intro_price_rupy": null, + "regular_price_rupy": null, + "rewards": [ + { + "reward_index": 1, + "reward_type": 7, + "reward_detail_id": 703441011, + "reward_number": 1, + "message_id": 51004 + }, + { + "reward_index": 2, + "reward_type": 6, + "reward_detail_id": 703441011, + "reward_number": 1, + "message_id": 51004 + } + ] + }, + { + "product_id": 205, + "leader_id": 5, + "deck_code": "pd0502", + "product_name": "BDPN_構築済みデッキ2弾_ネクロマンサー", + "featured_card_id": 703541011, + "purchase_num_max": 3, + "intro_price_crystal": 500, + "regular_price_crystal": 750, + "intro_price_rupy": null, + "regular_price_rupy": null, + "rewards": [ + { + "reward_index": 1, + "reward_type": 7, + "reward_detail_id": 703541011, + "reward_number": 1, + "message_id": 51004 + }, + { + "reward_index": 2, + "reward_type": 6, + "reward_detail_id": 703541011, + "reward_number": 1, + "message_id": 51004 + } + ] + }, + { + "product_id": 206, + "leader_id": 6, + "deck_code": "pd0602", + "product_name": "BDPN_構築済みデッキ2弾_ヴァンパイア", + "featured_card_id": 703641011, + "purchase_num_max": 3, + "intro_price_crystal": 500, + "regular_price_crystal": 750, + "intro_price_rupy": null, + "regular_price_rupy": null, + "rewards": [ + { + "reward_index": 1, + "reward_type": 7, + "reward_detail_id": 703641011, + "reward_number": 1, + "message_id": 51004 + }, + { + "reward_index": 2, + "reward_type": 6, + "reward_detail_id": 703641011, + "reward_number": 1, + "message_id": 51004 + } + ] + }, + { + "product_id": 207, + "leader_id": 7, + "deck_code": "pd0702", + "product_name": "BDPN_構築済みデッキ2弾_ビショップ", + "featured_card_id": 703741011, + "purchase_num_max": 3, + "intro_price_crystal": 500, + "regular_price_crystal": 750, + "intro_price_rupy": null, + "regular_price_rupy": null, + "rewards": [ + { + "reward_index": 1, + "reward_type": 7, + "reward_detail_id": 703741011, + "reward_number": 1, + "message_id": 51004 + }, + { + "reward_index": 2, + "reward_type": 6, + "reward_detail_id": 703741011, + "reward_number": 1, + "message_id": 51004 + } + ] + } + ] + }, + { + "series_id": 101, + "order_id": 22, + "is_new": false, + "series_rewards": [], + "products": [ + { + "product_id": 1, + "leader_id": 1, + "deck_code": "pd0101", + "product_name": "BDPN_構築済みデッキ1弾_エルフ", + "featured_card_id": 701141011, + "purchase_num_max": 3, + "intro_price_crystal": 500, + "regular_price_crystal": 750, + "intro_price_rupy": null, + "regular_price_rupy": null, + "rewards": [ + { + "reward_index": 1, + "reward_type": 7, + "reward_detail_id": 701141011, + "reward_number": 1, + "message_id": 51004 + }, + { + "reward_index": 2, + "reward_type": 6, + "reward_detail_id": 701141011, + "reward_number": 1, + "message_id": 51004 + } + ] + }, + { + "product_id": 2, + "leader_id": 2, + "deck_code": "pd0201", + "product_name": "BDPN_構築済みデッキ1弾_ロイヤル", + "featured_card_id": 701241011, + "purchase_num_max": 3, + "intro_price_crystal": 500, + "regular_price_crystal": 750, + "intro_price_rupy": null, + "regular_price_rupy": null, + "rewards": [ + { + "reward_index": 1, + "reward_type": 7, + "reward_detail_id": 701241011, + "reward_number": 1, + "message_id": 51004 + }, + { + "reward_index": 2, + "reward_type": 6, + "reward_detail_id": 701241011, + "reward_number": 1, + "message_id": 51004 + } + ] + }, + { + "product_id": 3, + "leader_id": 3, + "deck_code": "pd0301", + "product_name": "BDPN_構築済みデッキ1弾_ウィッチ", + "featured_card_id": 701341011, + "purchase_num_max": 3, + "intro_price_crystal": 500, + "regular_price_crystal": 750, + "intro_price_rupy": null, + "regular_price_rupy": null, + "rewards": [ + { + "reward_index": 1, + "reward_type": 7, + "reward_detail_id": 701341011, + "reward_number": 1, + "message_id": 51004 + }, + { + "reward_index": 2, + "reward_type": 6, + "reward_detail_id": 701341011, + "reward_number": 1, + "message_id": 51004 + } + ] + }, + { + "product_id": 4, + "leader_id": 4, + "deck_code": "pd0401", + "product_name": "BDPN_構築済みデッキ1弾_ドラゴン", + "featured_card_id": 701441011, + "purchase_num_max": 3, + "intro_price_crystal": 500, + "regular_price_crystal": 750, + "intro_price_rupy": null, + "regular_price_rupy": null, + "rewards": [ + { + "reward_index": 1, + "reward_type": 7, + "reward_detail_id": 701441011, + "reward_number": 1, + "message_id": 51004 + }, + { + "reward_index": 2, + "reward_type": 6, + "reward_detail_id": 701441011, + "reward_number": 1, + "message_id": 51004 + } + ] + }, + { + "product_id": 5, + "leader_id": 5, + "deck_code": "pd0501", + "product_name": "BDPN_構築済みデッキ1弾_ネクロマンサー", + "featured_card_id": 701541011, + "purchase_num_max": 3, + "intro_price_crystal": 500, + "regular_price_crystal": 750, + "intro_price_rupy": null, + "regular_price_rupy": null, + "rewards": [ + { + "reward_index": 1, + "reward_type": 7, + "reward_detail_id": 701541011, + "reward_number": 1, + "message_id": 51004 + }, + { + "reward_index": 2, + "reward_type": 6, + "reward_detail_id": 701541011, + "reward_number": 1, + "message_id": 51004 + } + ] + }, + { + "product_id": 6, + "leader_id": 6, + "deck_code": "pd0601", + "product_name": "BDPN_構築済みデッキ1弾_ヴァンパイア", + "featured_card_id": 701641011, + "purchase_num_max": 3, + "intro_price_crystal": 500, + "regular_price_crystal": 750, + "intro_price_rupy": null, + "regular_price_rupy": null, + "rewards": [ + { + "reward_index": 1, + "reward_type": 7, + "reward_detail_id": 701641011, + "reward_number": 1, + "message_id": 51004 + }, + { + "reward_index": 2, + "reward_type": 6, + "reward_detail_id": 701641011, + "reward_number": 1, + "message_id": 51004 + } + ] + }, + { + "product_id": 7, + "leader_id": 7, + "deck_code": "pd0701", + "product_name": "BDPN_構築済みデッキ1弾_ビショップ", + "featured_card_id": 701741011, + "purchase_num_max": 3, + "intro_price_crystal": 500, + "regular_price_crystal": 750, + "intro_price_rupy": null, + "regular_price_rupy": null, + "rewards": [ + { + "reward_index": 1, + "reward_type": 7, + "reward_detail_id": 701741011, + "reward_number": 1, + "message_id": 51004 + }, + { + "reward_index": 2, + "reward_type": 6, + "reward_detail_id": 701741011, + "reward_number": 1, + "message_id": 51004 + } + ] + } + ] + } +] diff --git a/SVSim.Bootstrap/Importers/BuildDeckImporter.cs b/SVSim.Bootstrap/Importers/BuildDeckImporter.cs index 9e11a89..e02c2a1 100644 --- a/SVSim.Bootstrap/Importers/BuildDeckImporter.cs +++ b/SVSim.Bootstrap/Importers/BuildDeckImporter.cs @@ -1,16 +1,16 @@ -using System.Text.Json; using Microsoft.EntityFrameworkCore; +using SVSim.Bootstrap.Models.Seed; using SVSim.Database; using SVSim.Database.Models; -using static SVSim.Bootstrap.Importers.ImporterBase; namespace SVSim.Bootstrap.Importers; /// -/// Loads the prebuilt-deck catalog from a mix of client-master CSVs and one prod-capture JSON. +/// Loads the prebuilt-deck catalog from a mix of client-master CSVs and one seed JSON. /// Three methods run in dependency order (see Bootstrap/Program.cs): /// 1. ImportSeriesAsync — build_deck_series_master.csv → 22 series rows (all IsEnabled=false initially) -/// 2. ImportCatalogAsync — prod-captures/build_deck-info-*.json → enriches 7 series + 53 products (Task 15) +/// 2. ImportCatalogAsync — seeds/build-deck-catalog.json → enriches 7 series + 53 products +/// (tier backfill for missing intro/regular prices is performed by the extractor) /// 3. ImportPackageAsync — build_deck_package_master.csv → card lists for all 112 products, /// creates disabled stubs for products not seeded by the catalog importer /// Idempotent — re-runnable on the same files. @@ -133,14 +133,13 @@ public class BuildDeckImporter return created + updated; } - public async Task ImportCatalogAsync(SVSimDbContext db, string capturesDir) + public async Task ImportCatalogAsync(SVSimDbContext db, string seedDir) { - var data = LoadCapture(capturesDir, "build_deck-info"); - if (data is null) return 0; + var seed = SeedLoader.LoadList(Path.Combine(seedDir, "build-deck-catalog.json")); + if (seed.Count == 0) return 0; int touchedSeries = 0, touchedProducts = 0; - // Load existing rows for fast lookup var existingSeries = await db.BuildDeckSeries .Include(s => s.SeriesRewards) .ToDictionaryAsync(s => s.Id); @@ -148,126 +147,75 @@ public class BuildDeckImporter .Include(p => p.Rewards) .ToDictionaryAsync(p => p.Id); - // The captured data root is an object keyed by order_id string ("15"…"21"); iterate values. - foreach (var seriesNode in data.Value.EnumerateObject()) + foreach (var s in seed) { - var s = seriesNode.Value; - int seriesId = GetInt(s, "series_id"); - int orderId = GetInt(s, "order_id"); - bool isNew = GetBool(s, "is_new"); + if (s.SeriesId == 0) continue; - if (!existingSeries.TryGetValue(seriesId, out var seriesRow)) + if (!existingSeries.TryGetValue(s.SeriesId, out var seriesRow)) { - // Catalog runs before package importer in production, so series rows from the series - // CSV should already exist. If not (e.g. the capture has a series the CSV doesn't), - // create a bare row so the FK from products holds. + // Catalog typically runs after the series CSV; if a seed series isn't in the + // CSV we create a bare stub so the FK from products holds. seriesRow = new BuildDeckSeriesEntry { - Id = seriesId, NameKey = string.Empty, IntroKey = string.Empty, + Id = s.SeriesId, NameKey = string.Empty, IntroKey = string.Empty, TitlePath = string.Empty, DrumrollPath = string.Empty, }; db.BuildDeckSeries.Add(seriesRow); - existingSeries[seriesId] = seriesRow; + existingSeries[s.SeriesId] = seriesRow; } - seriesRow.OrderIndex = orderId; - seriesRow.IsNew = isNew; + seriesRow.OrderIndex = s.OrderId; + seriesRow.IsNew = s.IsNew; seriesRow.IsEnabled = true; - // Series rewards: replace wholesale (capture is authoritative for enabled series) seriesRow.SeriesRewards.Clear(); - if (s.TryGetProperty("series_rewards", out var seriesRewards) && - seriesRewards.ValueKind == JsonValueKind.Object) + foreach (var r in s.SeriesRewards) { - foreach (var tier in seriesRewards.EnumerateObject()) + seriesRow.SeriesRewards.Add(new BuildDeckSeriesRewardEntry { - if (!int.TryParse(tier.Name, out int tierIndex)) continue; - if (!tier.Value.TryGetProperty("reward_list", out var rewardList) || - rewardList.ValueKind != JsonValueKind.Array) continue; - - int itemIndex = 0; - foreach (var r in rewardList.EnumerateArray()) - { - seriesRow.SeriesRewards.Add(new BuildDeckSeriesRewardEntry - { - TierIndex = tierIndex, - ItemIndex = itemIndex++, - RewardType = GetInt(r, "reward_type"), - RewardDetailId = GetLong(r, "reward_detail_id"), - RewardNumber = GetInt(r, "reward_number"), - MessageId = GetInt(r, "message_id"), - }); - } - } + TierIndex = r.TierIndex, + ItemIndex = r.ItemIndex, + RewardType = r.RewardType, + RewardDetailId = r.RewardDetailId, + RewardNumber = r.RewardNumber, + MessageId = r.MessageId, + }); } touchedSeries++; - // Products - if (!s.TryGetProperty("products", out var products) || products.ValueKind != JsonValueKind.Array) - continue; - - // First pass: parse each captured product, track intro/regular tiers per product. - var capturedThisSeries = new List(); - foreach (var p in products.EnumerateArray()) + foreach (var p in s.Products) { - int productId = GetInt(p, "product_id"); - - if (!existingProducts.TryGetValue(productId, out var productRow)) + if (!existingProducts.TryGetValue(p.ProductId, out var productRow)) { - productRow = new BuildDeckProductEntry { Id = productId, SeriesId = seriesId }; + productRow = new BuildDeckProductEntry { Id = p.ProductId, SeriesId = s.SeriesId }; db.BuildDeckProducts.Add(productRow); - existingProducts[productId] = productRow; + existingProducts[p.ProductId] = productRow; } - productRow.SeriesId = seriesId; - productRow.LeaderId = GetInt(p, "leader_id"); - productRow.DeckCode = GetString(p, "deck_code"); - productRow.ProductNameKey = GetString(p, "product_name"); - productRow.FeaturedCardId = GetLong(p, "featured_card_id"); - productRow.PurchaseNumMax = GetInt(p, "purchase_num_max"); + productRow.SeriesId = s.SeriesId; + productRow.LeaderId = p.LeaderId; + productRow.DeckCode = p.DeckCode; + productRow.ProductNameKey = p.ProductName; + productRow.FeaturedCardId = p.FeaturedCardId; + productRow.PurchaseNumMax = p.PurchaseNumMax; productRow.IsEnabled = true; + productRow.IntroPriceCrystal = p.IntroPriceCrystal; + productRow.RegularPriceCrystal = p.RegularPriceCrystal; + productRow.IntroPriceRupy = p.IntroPriceRupy; + productRow.RegularPriceRupy = p.RegularPriceRupy; - bool isFirstPrice = GetBool(p, "is_first_price"); - - // Tier-aware price ingestion: each captured row has ONE price tier (intro OR regular). - int? priceCrystal = p.TryGetProperty("price_crystal", out var pc) && pc.ValueKind != JsonValueKind.Null - ? (int?)GetInt(p, "price_crystal") : null; - int? priceRupy = p.TryGetProperty("price_rupy", out var pr) && pr.ValueKind != JsonValueKind.Null - ? (int?)GetInt(p, "price_rupy") : null; - - if (priceCrystal is not null) - { - if (isFirstPrice) productRow.IntroPriceCrystal = priceCrystal; - else productRow.RegularPriceCrystal = priceCrystal; - } - if (priceRupy is not null) - { - if (isFirstPrice) productRow.IntroPriceRupy = priceRupy; - else productRow.RegularPriceRupy = priceRupy; - } - - // Product rewards: replace wholesale productRow.Rewards.Clear(); - if (p.TryGetProperty("rewards", out var rewards) && rewards.ValueKind == JsonValueKind.Object) + foreach (var r in p.Rewards) { - foreach (var r in rewards.EnumerateObject()) + productRow.Rewards.Add(new BuildDeckProductRewardEntry { - if (!int.TryParse(r.Name, out int idx)) continue; - productRow.Rewards.Add(new BuildDeckProductRewardEntry - { - RewardIndex = idx, - RewardType = GetInt(r.Value, "reward_type"), - RewardDetailId = GetLong(r.Value, "reward_detail_id"), - RewardNumber = GetInt(r.Value, "reward_number"), - MessageId = GetInt(r.Value, "message_id"), - }); - } + RewardIndex = r.RewardIndex, + RewardType = r.RewardType, + RewardDetailId = r.RewardDetailId, + RewardNumber = r.RewardNumber, + MessageId = r.MessageId, + }); } - - capturedThisSeries.Add(productRow); touchedProducts++; } - - // Second pass: backfill missing tier per-series when sibling products share a unique value. - BackfillSeriesTier(capturedThisSeries); } await db.SaveChangesAsync(); @@ -275,63 +223,6 @@ public class BuildDeckImporter return touchedSeries + touchedProducts; } - private static void BackfillSeriesTier(IReadOnlyList productsInSeries) - { - // For each (Currency, Tier) pair, if all populated values across siblings are the same, - // propagate that value to products that are missing the corresponding tier. - BackfillIntroCrystal(productsInSeries); - BackfillRegularCrystal(productsInSeries); - BackfillIntroRupy(productsInSeries); - BackfillRegularRupy(productsInSeries); - } - - private static void BackfillIntroCrystal(IReadOnlyList products) - { - var distinct = products.Where(p => p.IntroPriceCrystal.HasValue).Select(p => p.IntroPriceCrystal!.Value).Distinct().ToList(); - if (distinct.Count != 1) return; - int value = distinct[0]; - foreach (var p in products) - { - if (p.IntroPriceCrystal is null) p.IntroPriceCrystal = value; - } - } - - private static void BackfillRegularCrystal(IReadOnlyList products) - { - var distinct = products.Where(p => p.RegularPriceCrystal.HasValue).Select(p => p.RegularPriceCrystal!.Value).Distinct().ToList(); - if (distinct.Count != 1) return; - int value = distinct[0]; - foreach (var p in products) - { - // For PurchaseNumMax == 1 products, never backfill the Regular tier — they have no second buy. - if (p.PurchaseNumMax <= 1) continue; - if (p.RegularPriceCrystal is null) p.RegularPriceCrystal = value; - } - } - - private static void BackfillIntroRupy(IReadOnlyList products) - { - var distinct = products.Where(p => p.IntroPriceRupy.HasValue).Select(p => p.IntroPriceRupy!.Value).Distinct().ToList(); - if (distinct.Count != 1) return; - int value = distinct[0]; - foreach (var p in products) - { - if (p.IntroPriceRupy is null) p.IntroPriceRupy = value; - } - } - - private static void BackfillRegularRupy(IReadOnlyList products) - { - var distinct = products.Where(p => p.RegularPriceRupy.HasValue).Select(p => p.RegularPriceRupy!.Value).Distinct().ToList(); - if (distinct.Count != 1) return; - int value = distinct[0]; - foreach (var p in products) - { - if (p.PurchaseNumMax <= 1) continue; - if (p.RegularPriceRupy is null) p.RegularPriceRupy = value; - } - } - /// /// Maps a product_id to its series_id using the numeric pattern derived from the /info capture /// and CSV inspection. diff --git a/SVSim.Bootstrap/Models/Seed/BuildDeckCatalogSeed.cs b/SVSim.Bootstrap/Models/Seed/BuildDeckCatalogSeed.cs new file mode 100644 index 0000000..1b747d3 --- /dev/null +++ b/SVSim.Bootstrap/Models/Seed/BuildDeckCatalogSeed.cs @@ -0,0 +1,46 @@ +using System.Text.Json.Serialization; + +namespace SVSim.Bootstrap.Models.Seed; + +public sealed class BuildDeckCatalogSeed +{ + [JsonPropertyName("series_id")] public int SeriesId { get; set; } + [JsonPropertyName("order_id")] public int OrderId { get; set; } + [JsonPropertyName("is_new")] public bool IsNew { get; set; } + [JsonPropertyName("series_rewards")] public List SeriesRewards { get; set; } = new(); + [JsonPropertyName("products")] public List Products { get; set; } = new(); +} + +public sealed class BuildDeckSeriesRewardSeed +{ + [JsonPropertyName("tier_index")] public int TierIndex { get; set; } + [JsonPropertyName("item_index")] public int ItemIndex { get; set; } + [JsonPropertyName("reward_type")] public int RewardType { get; set; } + [JsonPropertyName("reward_detail_id")] public long RewardDetailId { get; set; } + [JsonPropertyName("reward_number")] public int RewardNumber { get; set; } + [JsonPropertyName("message_id")] public int MessageId { get; set; } +} + +public sealed class BuildDeckProductSeed +{ + [JsonPropertyName("product_id")] public int ProductId { get; set; } + [JsonPropertyName("leader_id")] public int LeaderId { get; set; } + [JsonPropertyName("deck_code")] public string DeckCode { get; set; } = ""; + [JsonPropertyName("product_name")] public string ProductName { get; set; } = ""; + [JsonPropertyName("featured_card_id")] public long FeaturedCardId { get; set; } + [JsonPropertyName("purchase_num_max")] public int PurchaseNumMax { get; set; } + [JsonPropertyName("intro_price_crystal")] public int? IntroPriceCrystal { get; set; } + [JsonPropertyName("regular_price_crystal")] public int? RegularPriceCrystal { get; set; } + [JsonPropertyName("intro_price_rupy")] public int? IntroPriceRupy { get; set; } + [JsonPropertyName("regular_price_rupy")] public int? RegularPriceRupy { get; set; } + [JsonPropertyName("rewards")] public List Rewards { get; set; } = new(); +} + +public sealed class BuildDeckProductRewardSeed +{ + [JsonPropertyName("reward_index")] public int RewardIndex { get; set; } + [JsonPropertyName("reward_type")] public int RewardType { get; set; } + [JsonPropertyName("reward_detail_id")] public long RewardDetailId { get; set; } + [JsonPropertyName("reward_number")] public int RewardNumber { get; set; } + [JsonPropertyName("message_id")] public int MessageId { get; set; } +} diff --git a/SVSim.Bootstrap/Program.cs b/SVSim.Bootstrap/Program.cs index 6a89de8..aa9215c 100644 --- a/SVSim.Bootstrap/Program.cs +++ b/SVSim.Bootstrap/Program.cs @@ -98,7 +98,7 @@ public static class Program // enriched rows take precedence over stub creation). var buildDeck = new BuildDeckImporter(); await buildDeck.ImportSeriesAsync(context, opts.ReferenceDataDir); - await buildDeck.ImportCatalogAsync(context, opts.CapturesDir); + await buildDeck.ImportCatalogAsync(context, opts.SeedDir); await buildDeck.ImportPackageAsync(context, opts.ReferenceDataDir); } else diff --git a/SVSim.UnitTests/Importers/BuildDeckImporterTests.cs b/SVSim.UnitTests/Importers/BuildDeckImporterTests.cs index 30f9bd8..b13238c 100644 --- a/SVSim.UnitTests/Importers/BuildDeckImporterTests.cs +++ b/SVSim.UnitTests/Importers/BuildDeckImporterTests.cs @@ -9,6 +9,7 @@ namespace SVSim.UnitTests.Importers; public class BuildDeckImporterTests { private static string DataDir => Path.Combine(AppContext.BaseDirectory, "Data"); + private static string SeedDir => Path.Combine(AppContext.BaseDirectory, "Data", "seeds"); [Test] public async Task ImportsAll22Series_with_22_disabled_until_catalog_enables() @@ -71,7 +72,7 @@ public class BuildDeckImporterTests var importer = new BuildDeckImporter(); await importer.ImportSeriesAsync(db, DataDir); - await importer.ImportCatalogAsync(db, Path.Combine(DataDir, "prod-captures")); + await importer.ImportCatalogAsync(db, SeedDir); await importer.ImportPackageAsync(db, DataDir); // Series 101 (Set 1) should be enabled and order_id=22 from capture