diff --git a/src/game/lib/date_util.js b/src/game/lib/date_util.js new file mode 100644 index 0000000..39f571f --- /dev/null +++ b/src/game/lib/date_util.js @@ -0,0 +1,13 @@ +class DateUtil { + + static getYYYYMMDD(date) { + return date.toISOString().slice(0,10); + } + + static getHHMMSS(date) { + return StringUtil.getNumberStartWithZero(date.getHours(), 2) + ":" + + StringUtil.getNumberStartWithZero(date.getMinutes(), 2) + ":" + + StringUtil.getNumberStartWithZero(date.getSeconds(), 2); + } + +} \ No newline at end of file diff --git a/src/game/lib/db_connect_manager.js b/src/game/lib/db_connect_manager.js index 2111c7e..92602fb 100644 --- a/src/game/lib/db_connect_manager.js +++ b/src/game/lib/db_connect_manager.js @@ -140,7 +140,7 @@ class DBConnectManager { */ } - requestRanking(type, listener) { + requestRanking(type, date, time, listener) { let rankingRecordManager = new RankingRecordManager(); /* @@ -171,7 +171,9 @@ class DBConnectManager { } }; let params = "UserID=" + sessionStorageManager.playerUserID - + "&AppName=" + sessionStorageManager.playingAppName; + + "&AppName=" + sessionStorageManager.playingAppName + + "&Date=" + date + + "&Time=" + time; xhr.send(params); } diff --git a/src/game/lib/string_util.js b/src/game/lib/string_util.js index 8c57a54..97c4234 100644 --- a/src/game/lib/string_util.js +++ b/src/game/lib/string_util.js @@ -20,4 +20,9 @@ class StringUtil { return numberWithCommas + " 점"; } + static getNumberStartWithZero(number, digitCount) { + let n = number + ''; + return n.length >= digitCount ? n : new Array(digitCount - n.length + 1).join('0') + n; + } + } \ No newline at end of file diff --git a/src/game/result/ranking_board.js b/src/game/result/ranking_board.js index 070913d..b5758f3 100644 --- a/src/game/result/ranking_board.js +++ b/src/game/result/ranking_board.js @@ -13,7 +13,10 @@ class RankingBoard { requestRanking(type, rankingRecordManager) { - this.dbConnectManager.requestRanking(type, (type, rankingRecordManager) => { + let today = new Date(); + let date = DateUtil.getYYYYMMDD(today); + let time = DateUtil.getHHMMSS(today); + this.dbConnectManager.requestRanking(type, date, time, (type, rankingRecordManager) => { let beginIndex = this.getBeginIndex(rankingRecordManager); let endIndex = this.getEndIndex(rankingRecordManager); diff --git a/src/web/client/result.html b/src/web/client/result.html index 5d245ae..b3d7fb1 100644 --- a/src/web/client/result.html +++ b/src/web/client/result.html @@ -17,6 +17,7 @@ + diff --git a/src/web/server/record/ranking_record_day.php b/src/web/server/record/ranking_record_day.php index bf2614e..aa72289 100644 --- a/src/web/server/record/ranking_record_day.php +++ b/src/web/server/record/ranking_record_day.php @@ -5,6 +5,8 @@ include "./../lib/send_error_code.php"; $user_id = $_POST["UserID"]; $app_name = $_POST["AppName"]; +$date = $_POST["Date"]; +$time = $_POST["Time"]; include "./../setup/connect_db.php"; @@ -19,6 +21,7 @@ $query = " ORDER BY max(D.Score) DESC; "; */ +/* $query = " SELECT D.userID As UserID, U.Name AS Name, MAX(D.Score) AS HighScore FROM moty_record D, moty_user U @@ -26,8 +29,16 @@ $query = " GROUP BY D.userID ORDER BY max(D.Score) DESC; "; +*/ +$query = " + SELECT D.userID As UserID, U.Name AS Name, MAX(D.Score) AS HighScore + FROM moty_record D, moty_user U + WHERE D.userID = U.userID AND DATE(D.DateTime) = DATE(?) AND AppName = ? + GROUP BY D.userID + ORDER BY max(D.Score) DESC; +"; $stmt = $db_conn->prepare($query); -$stmt->bind_param('s', $app_name); +$stmt->bind_param('ss', $date, $app_name); $stmt->execute(); $stmt->bind_result($userID, $name, $high_score); diff --git a/src/web/server/record/ranking_record_hour.php b/src/web/server/record/ranking_record_hour.php index e820a3b..9115dc4 100644 --- a/src/web/server/record/ranking_record_hour.php +++ b/src/web/server/record/ranking_record_hour.php @@ -5,6 +5,8 @@ include "./../lib/send_error_code.php"; $user_id = $_POST["UserID"]; $app_name = $_POST["AppName"]; +$date = $_POST["Date"]; +$time = $_POST["Time"]; include "./../setup/connect_db.php"; @@ -19,15 +21,24 @@ $query = " ORDER BY max(D.Score) DESC; "; */ +/* $query = " SELECT D.userID As UserID, U.Name AS Name, MAX(D.Score) AS HighScore FROM moty_record D, moty_user U - WHERE D.userID = U.userID AND DATE(D.DateTime) = DATE('2018-05-16') AND HOUR(D.DateTime) = HOUR('13:05:05') AND AppName = 'korean_word' + WHERE D.userID = U.userID AND DATE(D.DateTime) = DATE('?') AND HOUR(D.DateTime) = HOUR('?') AND AppName = '?' + GROUP BY D.userID + ORDER BY max(D.Score) DESC; +"; +*/ +$query = " + SELECT D.userID As UserID, U.Name AS Name, MAX(D.Score) AS HighScore + FROM moty_record D, moty_user U + WHERE D.userID = U.userID AND DATE(D.DateTime) = DATE(?) AND HOUR(D.DateTime) = HOUR(?) AND AppName = ? GROUP BY D.userID ORDER BY max(D.Score) DESC; "; $stmt = $db_conn->prepare($query); -$stmt->bind_param('s', $app_name); +$stmt->bind_param('sss', $date, $time, $app_name); $stmt->execute(); $stmt->bind_result($userID, $name, $high_score); diff --git a/src/web/server/record/ranking_record_month.php b/src/web/server/record/ranking_record_month.php index 9fccb50..8b94a9c 100644 --- a/src/web/server/record/ranking_record_month.php +++ b/src/web/server/record/ranking_record_month.php @@ -5,6 +5,8 @@ include "./../lib/send_error_code.php"; $user_id = $_POST["UserID"]; $app_name = $_POST["AppName"]; +$date = $_POST["Date"]; +$time = $_POST["Time"]; include "./../setup/connect_db.php"; @@ -19,6 +21,7 @@ $query = " ORDER BY max(D.Score) DESC; "; */ +/* $query = " SELECT D.userID As UserID, U.Name AS Name, MAX(D.Score) AS HighScore FROM moty_record D, moty_user U @@ -26,8 +29,16 @@ $query = " GROUP BY D.userID ORDER BY max(D.Score) DESC; "; +*/ +$query = " + SELECT D.userID As UserID, U.Name AS Name, MAX(D.Score) AS HighScore + FROM moty_record D, moty_user U + WHERE D.userID = U.userID AND MONTH(D.DateTime) = MONTH(?) AND AppName = ? + GROUP BY D.userID + ORDER BY max(D.Score) DESC; +"; $stmt = $db_conn->prepare($query); -$stmt->bind_param('s', $app_name); +$stmt->bind_param('ss', $date, $app_name); $stmt->execute(); $stmt->bind_result($userID, $name, $high_score); diff --git a/test/db_connect_manager.html b/test/db_connect_manager.html index 6095284..697614c 100644 --- a/test/db_connect_manager.html +++ b/test/db_connect_manager.html @@ -11,6 +11,8 @@
+ + diff --git a/test/test_db_connect_manager.js b/test/test_db_connect_manager.js index a850461..dda5f52 100644 --- a/test/test_db_connect_manager.js +++ b/test/test_db_connect_manager.js @@ -50,8 +50,7 @@ QUnit.test( "Player history", function( assert ) { }); QUnit.test( "Player ranking", function( assert ) { - sessionStorageManager.playerUserID = "8"; // 부현율 - sessionStorageManager.playingAppName = "space_invaders"; + sessionStorageManager.playingAppName = "korean_word"; let date = "2018-05-16"; let time = "14:50:00"; @@ -60,18 +59,20 @@ QUnit.test( "Player ranking", function( assert ) { setTimeout(function() { dbConnectManager.requestRanking( DBConnectManager.TYPE_MY_RANKING_HOUR, + date, + time, (type, rankingRecordManager) => { console.log(rankingRecordManager); assert.equal(rankingRecordManager.getRankAt(0), 1, "hour"); - assert.equal(rankingRecordManager.getScoreAt(0), 245.547, "hour"); + assert.equal(rankingRecordManager.getScoreAt(0), 302.921, "hour"); assert.equal(rankingRecordManager.getUserIDAt(0), 5, "hour"); assert.equal(rankingRecordManager.getUserNameAt(0), "김지유", "hour"); assert.equal(rankingRecordManager.getRankAt(5), 6, "hour"); - assert.equal(rankingRecordManager.getScoreAt(5), 52.7276, "hour"); - assert.equal(rankingRecordManager.getUserIDAt(5), 14, "hour"); - assert.equal(rankingRecordManager.getUserNameAt(5), "송가윤", "hour"); + assert.equal(rankingRecordManager.getScoreAt(5), 128.436, "hour"); + assert.equal(rankingRecordManager.getUserIDAt(5), 22, "hour"); + assert.equal(rankingRecordManager.getUserNameAt(5), "모윤건", "hour"); done(); } @@ -81,6 +82,8 @@ QUnit.test( "Player ranking", function( assert ) { setTimeout(function() { dbConnectManager.requestRanking( DBConnectManager.TYPE_MY_RANKING_DAY, + date, + time, (type, rankingRecordManager) => { console.log(rankingRecordManager); @@ -102,18 +105,20 @@ QUnit.test( "Player ranking", function( assert ) { setTimeout(function() { dbConnectManager.requestRanking( DBConnectManager.TYPE_MY_RANKING_MONTH, + date, + time, (type, rankingRecordManager) => { console.log(rankingRecordManager); - assert.equal(rankingRecordManager.getRankAt(0), 1); - assert.equal(rankingRecordManager.getScoreAt(0), 617.231); - assert.equal(rankingRecordManager.getUserIDAt(0), 50); - assert.equal(rankingRecordManager.getUserNameAt(0), "강민준"); + assert.equal(rankingRecordManager.getRankAt(0), 1, "month"); + assert.equal(rankingRecordManager.getScoreAt(0), 617.231, "month"); + assert.equal(rankingRecordManager.getUserIDAt(0), 50, "month"); + assert.equal(rankingRecordManager.getUserNameAt(0), "강민준", "month"); - assert.equal(rankingRecordManager.getRankAt(17), 18); - assert.equal(rankingRecordManager.getScoreAt(17), 216.279); - assert.equal(rankingRecordManager.getUserIDAt(17), 9); - assert.equal(rankingRecordManager.getUserNameAt(17), "신예성"); + assert.equal(rankingRecordManager.getRankAt(17), 18, "month"); + assert.equal(rankingRecordManager.getScoreAt(17), 216.279, "month"); + assert.equal(rankingRecordManager.getUserIDAt(17), 9, "month"); + assert.equal(rankingRecordManager.getUserNameAt(17), "신예성", "month"); done(); }