improved adherence to types

This commit is contained in:
2025-07-13 20:28:27 +02:00
parent 473c807461
commit 0a40a8ce5d
14 changed files with 114 additions and 38 deletions

View File

@@ -1,9 +1,9 @@
import { userData } from "../Classes/userData.js";
import { characters } from "../Characters/characters.js";
import { users } from "./users.js";
import { userCheckResult, users } from "./users.js";
import { db } from "../index.js"
import { Socket } from "socket.io";
import { loginResponse } from "../Classes/Outgoing/accountResponses.js";
import { loginResponse, loginResult } from "../Classes/Outgoing/accountResponses.js";
import { Endpoints } from "../endpoints.js";
export async function login(socket : Socket, data){
@@ -14,12 +14,13 @@ export async function login(socket : Socket, data){
return
}
const user = await users.readUser(db, json.login, json.password);
const userCheck = await users.readUser(db, json.login, json.password);
if(user){
if(userCheck.result == userCheckResult.OK){
const user = userCheck.userData;
console.log(`User ${user.login} logged in`);
const character = await characters.readCharacter(db, user.id);
const result = new loginResponse(user, character)
const result = new loginResponse(loginResult.success, user, character)
socket.user = user
socket.character = character
@@ -27,7 +28,7 @@ export async function login(socket : Socket, data){
}
else{
console.log(`User ${json.login} did not log in`);
const result = new loginResponse(null, null)
const result = new loginResponse(loginResult.fail, null, null)
socket.emit(Endpoints.Login, JSON.stringify(result));
}
}

View File

@@ -1,8 +1,8 @@
import { userData } from "../Classes/userData.js";
import { users } from "./users.js";
import { userCheckResult, users } from "./users.js";
import { db } from "../index.js"
import { Socket } from "socket.io";
import { loginResponse } from "../Classes/Outgoing/accountResponses.js";
import { loginResponse, loginResult } from "../Classes/Outgoing/accountResponses.js";
import { Endpoints } from "../endpoints.js";
import { characters } from "../Characters/characters.js";
@@ -14,19 +14,26 @@ export async function register(socket : Socket, data){
return
}
const user = await users.createUser(db, json.login, json.password);
const checkExisting = await users.readUser(db, json.login, null)
if(checkExisting.result != userCheckResult.NotExist){
const result = new loginResponse(loginResult.accountExists, null, null)
socket.emit(Endpoints.Register, JSON.stringify(result))
return
}
const user = (await users.createUser(db, json.login, json.password)).userData;
if(user){
console.log(`User ${user.login} registered`);
const character = await characters.createCharacter(db, user.id);
const result = new loginResponse(user, character)
const result = new loginResponse(loginResult.success, user, character)
socket.user = user
socket.character = character
socket.emit(Endpoints.Register, JSON.stringify(result))
}
else{
console.log(`User failed to register`);
const result = new loginResponse(null, null)
const result = new loginResponse(loginResult.fail, null, null)
socket.emit(Endpoints.Register, JSON.stringify(result))
}
}

View File

@@ -1,25 +1,45 @@
import { userData } from "../Classes/userData.js";
import { DatabaseController } from "../Database/dbcontroller.js";
import { DatabaseController, dbUser } from "../Database/dbcontroller.js";
export class userCheckResponse{
result : userCheckResult
userData : userData
constructor(result : userCheckResult, userData : userData){
this.result = result;
this.userData = userData;
}
}
export enum userCheckResult{
OK,
IncorrectPassword,
NotExist
}
export class users{
static async createUser(db: DatabaseController, login : string, password : string){
await db.run('INSERT INTO users (login, password) VALUES (?, ?)', [login, password]);
return await this.readUser(db, login, password)
}
static async readUser(db: DatabaseController, login : string, password : string): Promise<userData>{
let user = await db.select(`SELECT * FROM users WHERE login = ? AND password = ?`, [login, password])
static async readUser(db: DatabaseController, login : string, password : string): Promise<userCheckResponse>{
let user = await db.select<dbUser>(`SELECT * FROM users WHERE login = ? LIMIT 1`, [login])
if (user.length > 0){
let row = user[0]
return new userData({...row})
if (row.password != password){
return new userCheckResponse(userCheckResult.IncorrectPassword, null)
}
return new userCheckResponse(userCheckResult.OK, new userData({...row}))
}
else{
return null
return new userCheckResponse(userCheckResult.NotExist, null)
}
}
static async readUserID(db: DatabaseController, id : number){
let user = await db.select(`SELECT * FROM users WHERE id = ?`, [id])
let user = await db.select<dbUser>(`SELECT * FROM users WHERE id = ?`, [id])
return user;
}
}