summaryrefslogtreecommitdiff
path: root/server.js
diff options
context:
space:
mode:
Diffstat (limited to 'server.js')
-rw-r--r--server.js95
1 files changed, 71 insertions, 24 deletions
diff --git a/server.js b/server.js
index 8b2a31d..9cc2a9c 100644
--- a/server.js
+++ b/server.js
@@ -250,7 +250,19 @@ const SQL_SELECT_USER_INFO = SQL(`
to_id = user_id
and is_read = 0
and is_deleted_from_inbox = 0
- ) as unread
+ ) as unread,
+ (
+ select
+ count(*)
+ from
+ players
+ join games using(game_id)
+ join game_state using(game_id)
+ where
+ status = 1
+ and players.user_id = users.user_id
+ and active in ( players.role, 'Both', 'All' )
+ ) as active
from
users
where user_id = ?
@@ -942,10 +954,22 @@ const QUERY_LIST_GAMES_OF_TITLE = SQL(`
LIMIT ?
`);
-const QUERY_LIST_GAMES_OF_USER = SQL(`
- SELECT * FROM game_view
- WHERE owner_id=$user_id OR game_id IN ( SELECT game_id FROM players WHERE players.user_id=$user_id )
- ORDER BY status ASC, mtime DESC
+const QUERY_LIST_ACTIVE_GAMES_OF_USER = SQL(`
+ select * from game_view
+ where
+ ( owner_id=$user_id or game_id in ( select game_id from players where players.user_id=$user_id ) )
+ and
+ ( status < 2 or mtime > datetime('now', '-7 days') )
+ order by status asc, mtime desc
+ `);
+
+const QUERY_LIST_FINISHED_GAMES_OF_USER = SQL(`
+ select * from game_view
+ where
+ ( owner_id=$user_id or game_id in ( select game_id from players where players.user_id=$user_id ) )
+ and
+ status = 2
+ order by status asc, mtime desc
`);
function is_active(game, players, user_id) {
@@ -1020,35 +1044,29 @@ function annotate_games(games, user_id) {
}
}
-app.get('/games', function (req, res) {
- let open_games = QUERY_LIST_GAMES.all(0);
- let active_games = QUERY_LIST_GAMES.all(1);
- if (req.user) {
- annotate_games(open_games, req.user.user_id);
- annotate_games(active_games, req.user.user_id);
- } else {
- annotate_games(open_games, 0);
- annotate_games(active_games, 0);
- }
- res.render('games.pug', {
+app.get('/profile', must_be_logged_in, function (req, res) {
+ req.user.notify = SQL_SELECT_USER_NOTIFY.get(req.user.user_id);
+ let avatar = get_avatar(req.user.mail);
+ res.render('profile.pug', {
user: req.user,
- open_games: open_games.filter(g => !g.is_ready),
- ready_games: open_games.filter(g => g.is_ready),
- active_games: active_games,
+ avatar: avatar,
});
});
-app.get('/profile', must_be_logged_in, function (req, res) {
+app.get('/games', function (req, res) {
+ res.redirect('/games/public');
+});
+
+app.get('/games/active', must_be_logged_in, function (req, res) {
req.user.notify = SQL_SELECT_USER_NOTIFY.get(req.user.user_id);
- let avatar = get_avatar(req.user.mail);
- let games = QUERY_LIST_GAMES_OF_USER.all({user_id: req.user.user_id});
+ let games = QUERY_LIST_ACTIVE_GAMES_OF_USER.all({user_id: req.user.user_id});
annotate_games(games, req.user.user_id);
let open_games = games.filter(game => game.status === 0);
let active_games = games.filter(game => game.status === 1);
let finished_games = games.filter(game => game.status === 2);
- res.render('profile.pug', {
+ res.render('games_active.pug', {
+ title: "Your Active Games",
user: req.user,
- avatar: avatar,
open_games: open_games.filter(g => !g.is_ready),
ready_games: open_games.filter(g => g.is_ready),
active_games: active_games,
@@ -1056,6 +1074,35 @@ app.get('/profile', must_be_logged_in, function (req, res) {
});
});
+app.get('/games/finished', must_be_logged_in, function (req, res) {
+ req.user.notify = SQL_SELECT_USER_NOTIFY.get(req.user.user_id);
+ let games = QUERY_LIST_FINISHED_GAMES_OF_USER.all({user_id: req.user.user_id});
+ annotate_games(games, req.user.user_id);
+ res.render('games_finished.pug', {
+ title: "Your Finished Games",
+ user: req.user,
+ finished_games: games,
+ });
+});
+
+app.get('/games/public', function (req, res) {
+ let open_games = QUERY_LIST_GAMES.all(0);
+ let active_games = QUERY_LIST_GAMES.all(1);
+ if (req.user) {
+ annotate_games(open_games, req.user.user_id);
+ annotate_games(active_games, req.user.user_id);
+ } else {
+ annotate_games(open_games, 0);
+ annotate_games(active_games, 0);
+ }
+ res.render('games_public.pug', {
+ user: req.user,
+ open_games: open_games.filter(g => !g.is_ready),
+ ready_games: open_games.filter(g => g.is_ready),
+ active_games: active_games,
+ });
+});
+
app.get('/info/:title_id', function (req, res) {
return res.redirect('/' + req.params.title_id);
});