mirror of
https://github.com/linux-odyssey/linux-odyssey.git
synced 2026-11-06 03:20:13 +08:00
feat: add /users/me endpoint
This commit is contained in:
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.
@@ -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.
@@ -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
@@ -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
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user