2026-01-24 03:32:36 +01:00

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