45 lines
1.9 KiB
JavaScript
45 lines
1.9 KiB
JavaScript
const express = require("express")
|
|
const authService = require("../../../../../services/authService")
|
|
const userService = require("../../../../../services/userService")
|
|
const { DefaultError, ServiceError } = require("../../../../../errors/errors")
|
|
const router = express.Router({ mergeParams: true })
|
|
|
|
router.get("/available", async (req, res) => {
|
|
try {
|
|
await authService.verifyAccessToken({ accessToken: req.headers.authorization.replace("Bearer", "").trim() })
|
|
const isAvailable = await authService.checkUsernameAvailability(req.params.name)
|
|
return res.status(200).json({ status: isAvailable.status })
|
|
} catch (error) {
|
|
if (error instanceof DefaultError) {
|
|
throw new ServiceError(error.code, req.originalUrl, null, null, null)
|
|
}
|
|
throw error
|
|
}
|
|
})
|
|
|
|
router.put("/", async (req, res) => {
|
|
try {
|
|
const player = await authService.verifyAccessToken({ accessToken: req.headers.authorization.replace("Bearer", "").trim() })
|
|
const newName = req.params.name
|
|
|
|
await userService.changeUsername(player.user.uuid, newName)
|
|
|
|
const skinsResult = await userService.getSkins({ uuid: player.user.uuid })
|
|
const capesResult = await userService.getCapes({ uuid: player.user.uuid })
|
|
|
|
return res.status(200).json({
|
|
id: player.user.uuid.replace(/-/g, ""),
|
|
name: newName,
|
|
skins: skinsResult.data || [],
|
|
capes: capesResult.data || []
|
|
})
|
|
|
|
} catch (err) {
|
|
const mcStatus = err.code === 409 ? "DUPLICATE" : (err.code === 400 || err.code === 403) ? "NOT_ALLOWED" : null
|
|
const finalCode = (mcStatus === "DUPLICATE") ? 403 : (err.code || 500)
|
|
const errorType = mcStatus ? "FORBIDDEN" : (err.error || "Internal Server Error")
|
|
throw new ServiceError(finalCode, req.originalUrl, errorType, err.message, mcStatus ? { status: mcStatus } : null)
|
|
}
|
|
})
|
|
|
|
module.exports = router |