wip
This commit is contained in:
parent
51a95f9bf1
commit
39ba4856a2
@ -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 || '';
|
||||
}
|
||||
|
@ -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();
|
||||
|
@ -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,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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
2568
core/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@ -11,6 +11,7 @@
|
||||
"devDependencies": {
|
||||
"@types/node": "^18.8.4",
|
||||
"prettier": "^2.7.1",
|
||||
"mongodb": "^4.10.0",
|
||||
"typescript": "^4.8.3"
|
||||
}
|
||||
}
|
||||
|
@ -1,4 +1,7 @@
|
||||
import { ObjectId } from 'mongodb';
|
||||
|
||||
export type EntityInfo = {
|
||||
_id: ObjectId;
|
||||
uuid: string;
|
||||
createdAt: Date;
|
||||
updatedAt: Date;
|
||||
|
Loading…
x
Reference in New Issue
Block a user