This commit is contained in:
Yanis Rigaudeau 2023-02-05 22:06:48 +01:00
parent 51a95f9bf1
commit 39ba4856a2
No known key found for this signature in database
GPG Key ID: 351F0FC23AC83A60
9 changed files with 2709 additions and 17 deletions

View File

@ -12,7 +12,14 @@ export class Card extends Entity implements CardInfo {
super(raw);
this.name = raw.name || '';
this.rarity = raw.rarity || CardRarity.COMMON;
stats: raw.stats || {};
this.stats = raw.stats || {
baseAtk: 0,
baseCrit: 0,
baseDef: 0,
multAtk: 0,
multCrit: 0,
multDef: 0,
};
this.thumbnail = raw.thumbnail || '';
this.model = raw.model || '';
}

View File

@ -1,12 +1,15 @@
import { EntityCtor, EntityInfo } from '@core';
import { randomUUID } from 'crypto';
import { ObjectId } from 'mongodb';
export class Entity implements EntityInfo {
_id: ObjectId;
uuid: string;
createdAt: Date;
updatedAt: Date;
constructor(raw: EntityCtor) {
this._id = raw._id || new ObjectId();
this.uuid = raw.uuid || randomUUID();
this.createdAt = raw.createdAt || new Date();
this.updatedAt = raw.updatedAt || new Date();

View File

@ -37,8 +37,15 @@ export const ReadUserSchema = () =>
},
});
export const ListUsersSchema = () => checkSchema({});
export const UpdateUserSchema = () =>
checkSchema({
uuid: {
isUUID: {
options: 4,
},
},
username: {
isString: true,
optional: true,
@ -54,3 +61,31 @@ export const UpdateUserSchema = () =>
optional: true,
},
});
export const AddCardToUserSchema = () =>
checkSchema({
uuid: {
isUUID: {
options: 4,
},
},
cardUuid: {
isUUID: {
options: 4,
},
},
});
export const RemoveCardFromUserSchema = () =>
checkSchema({
uuid: {
isUUID: {
options: 4,
},
},
cardUuid: {
isUUID: {
options: 4,
},
},
});

View File

@ -6,6 +6,7 @@ import {
LoginUser,
UpdateUser,
ListUsers,
AddCardToUser,
} from '../../functions/user';
import {
LoginUserSchema,
@ -13,10 +14,13 @@ import {
ReadUserSchema,
LogoutUserSchema,
UpdateUserSchema,
ListUsersSchema,
AddCardToUserSchema,
RemoveCardFromUserSchema,
} from './schema/user';
import { CheckPermissions, getRequestId, ValidateSchema } from './middleware';
function LoginHandler(services: Services): RequestHandler {
function LoginUserHandler(services: Services): RequestHandler {
const login = LoginUser(services);
return async (req, res, next) => {
@ -30,7 +34,7 @@ function LoginHandler(services: Services): RequestHandler {
};
}
function LogoutHandler(services: Services): RequestHandler {
function LogoutUserHandler(services: Services): RequestHandler {
return async (req, res, next) => {
if (req.session.user) {
req.session.user = null;
@ -41,7 +45,7 @@ function LogoutHandler(services: Services): RequestHandler {
};
}
function CreateHandler(services: Services): RequestHandler {
function CreateUserHandler(services: Services): RequestHandler {
const createUser = CreateUser(services);
return async (req, res, next) => {
@ -54,7 +58,7 @@ function CreateHandler(services: Services): RequestHandler {
};
}
function ReadHandler(services: Services): RequestHandler {
function ReadUserHandler(services: Services): RequestHandler {
const readUser = ReadUser(services);
return async (req, res, next) => {
@ -67,7 +71,7 @@ function ReadHandler(services: Services): RequestHandler {
};
}
function UpdateHandler(services: Services): RequestHandler {
function UpdateUserHandler(services: Services): RequestHandler {
const updateUser = UpdateUser(services);
return async (req, res, next) => {
@ -84,7 +88,7 @@ function UpdateHandler(services: Services): RequestHandler {
};
}
function ListHandler(services: Services): RequestHandler {
function ListUserHandler(services: Services): RequestHandler {
const listUsers = ListUsers(services);
return async (req, res, next) => {
@ -97,6 +101,23 @@ function ListHandler(services: Services): RequestHandler {
};
}
function AddCardToUserHandler(services: Services): RequestHandler {
const addCardToUser = AddCardToUser(services);
return async (req, res, next) => {
try {
const user = await addCardToUser(
getRequestId(req),
req.params.uuid,
req.body.cardUuid,
);
res.status(200).send(user);
} catch (error) {
next({ message: 'Unknown Error' });
}
};
}
export function Routes(services: Services) {
const router = Router();
@ -105,44 +126,57 @@ export function Routes(services: Services) {
'/login',
LoginUserSchema(),
ValidateSchema(),
LoginHandler(services),
LoginUserHandler(services),
);
router.post(
'/logout',
LogoutUserSchema(),
ValidateSchema(),
LogoutHandler(services),
LogoutUserHandler(services),
);
router.get(
'/read/:uuid',
CheckPermissions(),
ReadUserSchema(),
ValidateSchema(),
ReadHandler(services),
ReadUserHandler(services),
);
router.post(
'/create',
CheckPermissions(),
CreateUserSchema(),
ValidateSchema(),
CreateHandler(services),
CreateUserHandler(services),
);
router.patch(
'/update/:uuid',
CheckPermissions(),
UpdateUserSchema(),
ValidateSchema(),
UpdateHandler(services),
UpdateUserHandler(services),
);
router.get(
'/list',
CheckPermissions(),
ListUsersSchema(),
ValidateSchema(),
ListUserHandler(services),
);
router.get('/list', CheckPermissions(), ListHandler(services));
//Alteration
router.post(
'/givecard',
'/addCard/:uuid',
CheckPermissions(),
GiveCardSchema(),
AddCardToUserSchema(),
ValidateSchema(),
GiveCardHandler(),
AddCardToUserHandler(services),
);
router.post(
'/removeCard/:uuid',
CheckPermissions(),
RemoveCardFromUserSchema(),
ValidateSchema(),
//RemoveCardFromUserHandler(),
);
return router;

View File

@ -1,5 +1,5 @@
import { Collection, Db } from 'mongodb';
import { LoginUserBody, UpdateUserBody } from '@core';
import { Card, CardInfo, LoginUserBody, UpdateUserBody } from '@core';
import { User, UserWithPassword } from '../../entities/user';
import { log } from '../../functions/logger';
import { getHashedPassword } from '../../functions/password';
@ -99,6 +99,34 @@ class UserModel {
log(tracker, 'LIST USERS');
return userCollection.map((userDocument) => new User(userDocument));
}
public async addCard(
tracker: string,
uuid: string,
card: Card,
): Promise<User> {
const checkUser = await this.collection.findOne({ uuid });
if (!checkUser) {
log(tracker, 'User Does Not Exist');
throw new Error();
}
await this.collection.updateOne(
{ uuid },
{
$set: {
updatedAt: new Date(),
},
$addToSet: {
cards: card,
},
},
);
const user = await this.read(tracker, uuid);
log(tracker, 'ADD CARD TO USER', user, card);
return user;
}
}
export default UserModel;

View File

@ -56,3 +56,16 @@ export function ListUsers(
return users.map((user) => user.Info());
};
}
export function AddCardToUser(
services: Services,
): (tracker: string, uuid: string, cardUuid: string) => Promise<UserInfo> {
const { userModel, cardModel } = services;
return async (tracker, uuid, cardUuid) => {
const card = await cardModel.read(tracker, cardUuid);
const user = await userModel.addCard(tracker, uuid, card);
return user.Info();
};
}

2568
core/package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -11,6 +11,7 @@
"devDependencies": {
"@types/node": "^18.8.4",
"prettier": "^2.7.1",
"mongodb": "^4.10.0",
"typescript": "^4.8.3"
}
}

View File

@ -1,4 +1,7 @@
import { ObjectId } from 'mongodb';
export type EntityInfo = {
_id: ObjectId;
uuid: string;
createdAt: Date;
updatedAt: Date;