feat: add /users/me endpoint

This commit is contained in:
wancat authored and Lin, Hung-Shin committed 2023-11-14 10:44:52 +08:00
1 parent ae221a696c
commit a7422853fa
8 files changed
+112 -19

No files matched your search

@@ -0,0 +1,25 @@
import { UserProfile } from '@linux-odyssey/models'
export async function me(req, res) {
const userProfile = await UserProfile.findOne({
user: req.user._id,
}).populate('user')
console.log(userProfile)
if (!userProfile) {
res.status(404).json({ message: 'User not found' })
return
}
const {
user: { username, email },
progress,
} = userProfile
res.json({
username,
email,
progress,
})
}
export default {
me,
}
File renamed without changes.
File renamed without changes.
+6 -4
View File
@@ -1,10 +1,11 @@
import { Router } from 'express' import { Router } from 'express'
import passport from 'passport' import passport from 'passport'
import sessions from './sessions.js' import sessions from './sessionRouter.js'
import quests from './quests.js' import quests from './questRouter.js'
import commands from './commands.js' import commands from './commandRouter.js'
import authRouter from './auth.js' import authRouter from './authRouter.js'
import authRequired from '../../middleware/authRequired.js' import authRequired from '../../middleware/authRequired.js'
import userRouter from './userRouter.js'
import config from '../../config.js' import config from '../../config.js'
const router = Router() const router = Router()
@@ -21,6 +22,7 @@ if (!config.isProduction) {
router.use('/auth', authRouter) router.use('/auth', authRouter)
router.use('/quests', quests) router.use('/quests', quests)
router.use('/users', userRouter)
router.use('/sessions', authRequired, sessions) router.use('/sessions', authRequired, sessions)
router.use( router.use(
File renamed without changes.
File renamed without changes.
+9
View File
@@ -0,0 +1,9 @@
import express from 'express'
import userController from '../controllers/userController.js'
import authRequired from '../../middleware/authRequired.js'
const router = express.Router()
router.get('/me', authRequired, userController.me)
export default router
+72 -15
View File
@@ -27,7 +27,7 @@ paths:
- cookieAuth: [] - cookieAuth: []
parameters: parameters:
- in: query - in: query
name: quest_id name: questId
description: find sessions by quest id description: find sessions by quest id
schema: schema:
type: string type: string
@@ -60,7 +60,7 @@ paths:
schema: schema:
type: object type: object
properties: properties:
quest_id: questId:
type: string type: string
example: helloworld example: helloworld
responses: responses:
@@ -93,9 +93,9 @@ paths:
schema: schema:
type: 'object' type: 'object'
required: required:
- quest_id - questId
properties: properties:
quest_id: questId:
type: 'string' type: 'string'
description: 'The ID of the quest.' description: 'The ID of the quest.'
example: 'helloworld' example: 'helloworld'
@@ -111,7 +111,7 @@ paths:
500: 500:
description: 'Internal Server Error.' description: 'Internal Server Error.'
/sessions/{session_id}: /sessions/{sessionId}:
get: get:
tags: tags:
- signed-in - signed-in
@@ -120,7 +120,7 @@ paths:
- cookieAuth: [] - cookieAuth: []
parameters: parameters:
- in: path - in: path
name: session_id name: sessionId
description: ID of the session to retrieve description: ID of the session to retrieve
required: true required: true
schema: schema:
@@ -151,7 +151,7 @@ paths:
- cookieAuth: [] - cookieAuth: []
parameters: parameters:
- in: path - in: path
name: session_id name: sessionId
required: true required: true
schema: schema:
type: string type: string
@@ -468,12 +468,12 @@ paths:
items: items:
$ref: '#/components/schemas/QuestSummary' $ref: '#/components/schemas/QuestSummary'
/quests/{quest_id}: /quests/{questId}:
get: get:
summary: get a quest's detail by name summary: get a quest's detail by name
parameters: parameters:
- in: path - in: path
name: quest_id name: questId
description: name of the quest to retrieve description: name of the quest to retrieve
required: true required: true
schema: schema:
@@ -534,6 +534,23 @@ paths:
type: string type: string
example: '127.0.0.1' example: '127.0.0.1'
/users/me:
get:
summary: Get current user's profile
tags:
- signed-in
security:
- cookieAuth: []
responses:
'200':
description: User profile
content:
application/json:
schema:
$ref: '#/components/schemas/UserProfile'
'401':
description: Unauthorized
components: components:
schemas: schemas:
User: User:
@@ -549,6 +566,46 @@ components:
email: email:
type: string type: string
format: email format: email
UserProfile:
type: object
properties:
username:
type: string
example: 'alex'
email:
type: string
format: email
example: alex@example.com
progress:
type: object
additionalProperties:
$ref: '#/components/schemas/Progress'
Progress:
type: object
properties:
questId:
type: string
example: helloworld
sessions:
type: array
items:
type: string
format: objectId
example: 64b7a3a3c182b4826dd1aaa1
completed:
type: boolean
example: true
startedAt:
type: string
format: date-time
example: 2020-01-01T00:00:00.000Z
finishedAt:
type: string
format: date-time
example: 2020-01-01T00:00:00.000Z
Quest: Quest:
type: object type: object
properties: properties:
@@ -587,13 +644,13 @@ components:
$ref: '#/components/schemas/User' $ref: '#/components/schemas/User'
quest: quest:
$ref: '#/components/schemas/Quest' $ref: '#/components/schemas/Quest'
created_at: createdAt:
type: string type: string
format: date-time format: date-time
updated_at: updatedAt:
type: string type: string
format: date-time format: date-time
finished_at: finishedAt:
type: string type: string
format: date-time format: date-time
hints: hints:
@@ -621,13 +678,13 @@ components:
example: 64b7a3a3c182b4826dd1aaa1 example: 64b7a3a3c182b4826dd1aaa1
quest: quest:
$ref: '#/components/schemas/Quest' $ref: '#/components/schemas/Quest'
created_at: createdAt:
type: string type: string
format: date-time format: date-time
updated_at: updatedAt:
type: string type: string
format: date-time format: date-time
finished_at: finishedAt:
type: string type: string
format: date-time format: date-time