회원 접속일과 콘텐츠 활동일을 분리한다

This commit is contained in:
2026-04-03 13:20:46 +09:00
parent f1756a4ff1
commit 953837137a
10 changed files with 86 additions and 22 deletions

View File

@@ -976,7 +976,7 @@ router.delete('/custom-items', requireAdmin, async (req, res) => {
router.get('/users', requireAdmin, async (req, res) => {
const schema = z.object({
q: z.string().trim().max(120).optional().default(''),
sort: z.enum(['recent', 'created', 'tierlists', 'followers', 'favorites']).optional().default('recent'),
sort: z.enum(['recent', 'lastLogin', 'created', 'tierlists', 'followers', 'favorites']).optional().default('recent'),
direction: z.enum(['asc', 'desc']).optional().default('desc'),
})
const parsed = schema.safeParse(req.query)

View File

@@ -10,6 +10,7 @@ const {
findUserByNickname,
findUserById,
createUser,
touchUserLastLoginAt,
updateUserPassword,
verifyUserEmail,
createEmailVerificationToken,
@@ -204,7 +205,8 @@ router.post('/signup', async (req, res) => {
try {
await establishSession(req, user)
res.json({ user: await serializeUser(user), verificationRequired: false })
const touchedUser = await touchUserLastLoginAt(user.id)
res.json({ user: await serializeUser(touchedUser || user), verificationRequired: false })
} catch (err) {
return res.status(500).json({ error: 'session_save_failed' })
}
@@ -227,7 +229,8 @@ router.post('/login', async (req, res) => {
try {
await establishSession(req, user)
res.json({ user: await serializeUser(user) })
const touchedUser = await touchUserLastLoginAt(user.id)
res.json({ user: await serializeUser(touchedUser || user) })
} catch (err) {
return res.status(500).json({ error: 'session_save_failed' })
}
@@ -240,7 +243,7 @@ router.post('/logout', async (req, res) => {
router.get('/me', async (req, res) => {
if (!req.session || !req.session.userId) return res.json({ user: null })
const user = await findUserById(req.session.userId)
const user = await touchUserLastLoginAt(req.session.userId)
if (!user) return res.json({ user: null })
res.json({ user: await serializeUser(user) })
})
@@ -265,7 +268,8 @@ router.post('/email/verify', async (req, res) => {
try {
await establishSession(req, user)
res.json({ user: await serializeUser(user) })
const touchedUser = await touchUserLastLoginAt(user.id)
res.json({ user: await serializeUser(touchedUser || user) })
} catch (err) {
return res.status(500).json({ error: 'session_save_failed' })
}
@@ -321,7 +325,8 @@ router.post('/password-reset/confirm', async (req, res) => {
try {
await establishSession(req, verifiedUser)
res.json({ user: await serializeUser(verifiedUser) })
const touchedUser = await touchUserLastLoginAt(verifiedUser.id)
res.json({ user: await serializeUser(touchedUser || verifiedUser) })
} catch (err) {
return res.status(500).json({ error: 'session_save_failed' })
}