Player registration
This commit is contained in:
parent
ac578e9247
commit
051af9a147
4 changed files with 60 additions and 44 deletions
|
@ -1,32 +1,10 @@
|
|||
import type { Player } from "@prisma/client"
|
||||
import bcrypt from "bcrypt"
|
||||
import prisma from "../../prisma"
|
||||
import logging from "../logging"
|
||||
|
||||
async function createPlayerDB(
|
||||
payload:
|
||||
| {
|
||||
username: string
|
||||
password: string
|
||||
}
|
||||
| "anonymous",
|
||||
next: (player: Player) => void
|
||||
) {
|
||||
let player: Player
|
||||
if (payload === "anonymous") {
|
||||
player = await prisma.player.create({ data: {} })
|
||||
logging("Anonymous player created: " + player.id, ["debug"])
|
||||
} else {
|
||||
const { username, password } = payload
|
||||
player = await prisma.player.create({
|
||||
data: {
|
||||
username,
|
||||
passwordHash: await bcrypt.hash(password, 10),
|
||||
anonymous: false,
|
||||
},
|
||||
})
|
||||
logging("Player registered: " + player.id, ["debug"])
|
||||
}
|
||||
async function createPlayerDB(next: (player: Player) => void) {
|
||||
const player = await prisma.player.create({ data: {} })
|
||||
logging("Anonymous player created: " + player.id, ["debug"])
|
||||
|
||||
return next(player)
|
||||
}
|
||||
|
|
|
@ -11,7 +11,7 @@ async function getTokenFromCookie(
|
|||
|
||||
// Checking for cookie presens, because it is necessary
|
||||
if (!value) {
|
||||
return createPlayerDB("anonymous", (player) =>
|
||||
return createPlayerDB((player) =>
|
||||
createTokenDB(player, type, (newToken) => next(newToken))
|
||||
)
|
||||
}
|
||||
|
|
21
leaky-ships/lib/backend/components/updatePlayerDB.ts
Normal file
21
leaky-ships/lib/backend/components/updatePlayerDB.ts
Normal file
|
@ -0,0 +1,21 @@
|
|||
import type { Player, Prisma } from "@prisma/client"
|
||||
import prisma from "../../prisma"
|
||||
import sendError, { API } from "./sendError"
|
||||
import { rejectionErrors } from "../errors"
|
||||
|
||||
async function updatePlayerDB(
|
||||
context: API,
|
||||
player: Player,
|
||||
data: Prisma.PlayerUpdateInput,
|
||||
next: (updatedPlayer: Player) => void
|
||||
) {
|
||||
if (!player.anonymous) return sendError(context, rejectionErrors.registered)
|
||||
const updatedPlayer = await prisma.player.update({
|
||||
where: { id: player.id },
|
||||
data,
|
||||
})
|
||||
|
||||
return next(updatedPlayer)
|
||||
}
|
||||
|
||||
export default updatePlayerDB
|
|
@ -1,9 +1,13 @@
|
|||
import type { NextApiRequest, NextApiResponse } from "next"
|
||||
import type { Player } from "@prisma/client"
|
||||
import createPlayerDB from "../../lib/backend/components/createPlayerDB"
|
||||
import bcrypt from "bcrypt"
|
||||
import sendError from "../../lib/backend/components/sendError"
|
||||
import sendResponse, { Result } from "../../lib/backend/components/sendResponse"
|
||||
import sendResponse from "../../lib/backend/components/sendResponse"
|
||||
import getUserFromBody from "../../lib/backend/components/getUserFromBody"
|
||||
import getTokenFromCookie from "../../lib/backend/components/getTokenFromCookie"
|
||||
import checkTokenIsValid from "../../lib/backend/components/checkTokenIsValid"
|
||||
import getTokenDB from "../../lib/backend/components/getTokenDB"
|
||||
import updatePlayerDB from "../../lib/backend/components/updatePlayerDB"
|
||||
import getPlayerByIdDB from "../../lib/backend/components/getPlayerByIdDB"
|
||||
|
||||
interface Data {
|
||||
registered: boolean
|
||||
|
@ -15,19 +19,32 @@ export default async function register(
|
|||
) {
|
||||
const context = { req, res }
|
||||
|
||||
return getUserFromBody(context, (username, password) =>
|
||||
createPlayerDB({ username, password }, (player) => {
|
||||
sendResponse(context, registerResponse(player))
|
||||
}).catch((err) => sendError(context, err))
|
||||
)
|
||||
}
|
||||
|
||||
function registerResponse(player: Player): Result<Data> {
|
||||
// Successfull response
|
||||
return {
|
||||
message: "Player created : " + player.id,
|
||||
statusCode: 201,
|
||||
body: { registered: true },
|
||||
type: ["debug", "infoCyan"],
|
||||
}
|
||||
return getTokenFromCookie(context, (refreshToken) => {
|
||||
checkTokenIsValid(context, refreshToken, (token) => {
|
||||
getTokenDB(context, token, (tokenDB) => {
|
||||
getUserFromBody(context, (username, password) =>
|
||||
getPlayerByIdDB(context, tokenDB, async (player) =>
|
||||
updatePlayerDB(
|
||||
context,
|
||||
player,
|
||||
{
|
||||
username,
|
||||
email: "arst",
|
||||
passwordHash: await bcrypt.hash(password, 10),
|
||||
anonymous: false,
|
||||
},
|
||||
(player) => {
|
||||
sendResponse(context, {
|
||||
message: "Player registered : " + player.id,
|
||||
statusCode: 201,
|
||||
body: { registered: true },
|
||||
type: ["debug", "infoCyan"],
|
||||
})
|
||||
}
|
||||
)
|
||||
)
|
||||
)
|
||||
})
|
||||
})
|
||||
}).catch((err) => sendError(context, err))
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue