using MongoDB.Bson; using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Text; using System.Threading.Tasks; namespace LolDataRequestLib.ResponseData { class 밴데이터 : IResponseData { public DataTable 디비데이터를데이터테이블로만듬() { List rtnValue = new List(); DataTable 밴리스트테이블 = new DataTable(DBDefine.요청데이터분류.밴데이터.ToString()); rtnValue.Add(밴리스트테이블); //추가 시작 // 1) 순번 컬럼을 int로 (정렬/비교 안정화) 밴리스트테이블.Columns.Add("순번", typeof(int)); 밴리스트테이블.Columns.Add("챔피언ID"); 밴리스트테이블.Columns.Add("챔피언이름"); 밴리스트테이블.Columns.Add("팀"); // 여기부터 새로 넣기 var dm = DataManager.getInstance(); if (dm.밴픽데이터 == null || dm.밴픽데이터.IsBsonNull || !dm.밴픽데이터.IsBsonDocument) { 밴리스트테이블.TableName = DBDefine.요청데이터분류.밴데이터.ToString(); return 밴리스트테이블; } var doc = dm.밴픽데이터.AsBsonDocument; if (!doc.TryGetValue("bannedChampions", out var banned) || banned == null || banned.IsBsonNull || !banned.IsBsonArray) { 밴리스트테이블.TableName = DBDefine.요청데이터분류.밴데이터.ToString(); return 밴리스트테이블; } //List 밴데이터 = banned.AsBsonArray.ToList(); List 밴데이터 = dm.밴픽데이터["bannedChampions"].AsBsonArray.ToList(); var turns = 밴데이터.Select(x => x["pickTurn"].ToInt32()).ToList(); bool isGlobalTurnFormat = turns.Any(t => t >= 13); // 1~6 + 13~16 bool isDirectSlotFormat = turns.Distinct().Count() == turns.Count // 1~10 같은 직접 슬롯 && turns.All(t => t >= 1 && t <= 10); foreach (BsonValue item in 밴데이터) { DataRow bufRow = 밴리스트테이블.NewRow(); int pickTurn = item["pickTurn"].ToInt32(); int teamId = item["teamID"].ToInt32(); int slot = 0; /* if (isDirectSlotFormat) { slot = pickTurn; } else if (isGlobalTurnFormat) { if (pickTurn >= 1 && pickTurn <= 6) slot = pickTurn; else if (pickTurn >= 13 && pickTurn <= 16) slot = pickTurn - 6; // 13~16 => 7~10 else slot = 0; } else { int key = pickTurn + teamId; if (!dm.밴픽순서테이블.TryGetValue(key, out slot)) slot = 0; } */ //if (slot == 0) slot = 밴리스트테이블.Rows.Count + 1; //bufRow["순번"] = slot; bufRow["순번"] = pickTurn; int selectedChamp = item["championID"].ToInt32(); bufRow["챔피언ID"] = selectedChamp; bufRow["팀"] = item["teamID"].ToInt32(); if (selectedChamp > 0) bufRow["챔피언이름"] = dm.mChampionTable[selectedChamp].champNameKOR; else if (selectedChamp == -1) bufRow["챔피언이름"] = "선택없음"; 밴리스트테이블.Rows.Add(bufRow); } // 여기까지 새로 넣기 // 5) 정렬도 int 기준으로 if (밴리스트테이블.Rows.Count > 0) { 밴리스트테이블 = 밴리스트테이블.AsEnumerable() .OrderBy(r => r.Field("순번")) .CopyToDataTable(); } ////추가 끝 //밴리스트테이블.Columns.Add("순번"); //밴리스트테이블.Columns.Add("챔피언ID"); //밴리스트테이블.Columns.Add("챔피언이름"); //if (DataManager.getInstance().밴픽데이터 == null) //{ // return 밴리스트테이블; //} //List 밴데이터 = DataManager.getInstance().밴픽데이터["bannedChampions"].AsBsonArray.ToList(); //foreach (BsonValue item in 밴데이터) //{ // DataRow bufRow = 밴리스트테이블.NewRow(); // //Console.WriteLine(item["pickTurn"].ToInt32() + item["teamID"].ToInt32()); // if (DataManager.getInstance().isNewBanPick) // { // bufRow["순번"] = item["pickTurn"].ToInt32(); // } // else // { // bufRow["순번"] = DataManager.getInstance().밴픽순서테이블[item["pickTurn"].ToInt32() + item["teamID"].ToInt32()]; // } // int selectedChamp = item["championID"].ToInt32(); // if (selectedChamp > 0 ) // { // bufRow["챔피언이름"] = DataManager.getInstance().mChampionTable[selectedChamp]; // } // if (selectedChamp == -1) // { // bufRow["챔피언이름"] = "선택없음"; // } // bufRow["챔피언ID"] = selectedChamp; // 밴리스트테이블.Rows.Add(bufRow); //} //if (밴리스트테이블.Rows.Count > 0) //{ // 밴리스트테이블 = 밴리스트테이블.AsEnumerable().OrderBy(r => Convert.ToInt32(r.Field("순번"))).CopyToDataTable(); //} 밴리스트테이블.TableName = DBDefine.요청데이터분류.밴데이터.ToString(); return 밴리스트테이블; } } }