wip
This commit is contained in:
parent
51a95f9bf1
commit
39ba4856a2
@ -12,7 +12,14 @@ export class Card extends Entity implements CardInfo {
|
|||||||
super(raw);
|
super(raw);
|
||||||
this.name = raw.name || '';
|
this.name = raw.name || '';
|
||||||
this.rarity = raw.rarity || CardRarity.COMMON;
|
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.thumbnail = raw.thumbnail || '';
|
||||||
this.model = raw.model || '';
|
this.model = raw.model || '';
|
||||||
}
|
}
|
||||||
|
@ -1,12 +1,15 @@
|
|||||||
import { EntityCtor, EntityInfo } from '@core';
|
import { EntityCtor, EntityInfo } from '@core';
|
||||||
import { randomUUID } from 'crypto';
|
import { randomUUID } from 'crypto';
|
||||||
|
import { ObjectId } from 'mongodb';
|
||||||
|
|
||||||
export class Entity implements EntityInfo {
|
export class Entity implements EntityInfo {
|
||||||
|
_id: ObjectId;
|
||||||
uuid: string;
|
uuid: string;
|
||||||
createdAt: Date;
|
createdAt: Date;
|
||||||
updatedAt: Date;
|
updatedAt: Date;
|
||||||
|
|
||||||
constructor(raw: EntityCtor) {
|
constructor(raw: EntityCtor) {
|
||||||
|
this._id = raw._id || new ObjectId();
|
||||||
this.uuid = raw.uuid || randomUUID();
|
this.uuid = raw.uuid || randomUUID();
|
||||||
this.createdAt = raw.createdAt || new Date();
|
this.createdAt = raw.createdAt || new Date();
|
||||||
this.updatedAt = raw.updatedAt || new Date();
|
this.updatedAt = raw.updatedAt || new Date();
|
||||||
|
@ -37,8 +37,15 @@ export const ReadUserSchema = () =>
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
export const ListUsersSchema = () => checkSchema({});
|
||||||
|
|
||||||
export const UpdateUserSchema = () =>
|
export const UpdateUserSchema = () =>
|
||||||
checkSchema({
|
checkSchema({
|
||||||
|
uuid: {
|
||||||
|
isUUID: {
|
||||||
|
options: 4,
|
||||||
|
},
|
||||||
|
},
|
||||||
username: {
|
username: {
|
||||||
isString: true,
|
isString: true,
|
||||||
optional: true,
|
optional: true,
|
||||||
@ -54,3 +61,31 @@ export const UpdateUserSchema = () =>
|
|||||||
optional: true,
|
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,
|
LoginUser,
|
||||||
UpdateUser,
|
UpdateUser,
|
||||||
ListUsers,
|
ListUsers,
|
||||||
|
AddCardToUser,
|
||||||
} from '../../functions/user';
|
} from '../../functions/user';
|
||||||
import {
|
import {
|
||||||
LoginUserSchema,
|
LoginUserSchema,
|
||||||
@ -13,10 +14,13 @@ import {
|
|||||||
ReadUserSchema,
|
ReadUserSchema,
|
||||||
LogoutUserSchema,
|
LogoutUserSchema,
|
||||||
UpdateUserSchema,
|
UpdateUserSchema,
|
||||||
|
ListUsersSchema,
|
||||||
|
AddCardToUserSchema,
|
||||||
|
RemoveCardFromUserSchema,
|
||||||
} from './schema/user';
|
} from './schema/user';
|
||||||
import { CheckPermissions, getRequestId, ValidateSchema } from './middleware';
|
import { CheckPermissions, getRequestId, ValidateSchema } from './middleware';
|
||||||
|
|
||||||
function LoginHandler(services: Services): RequestHandler {
|
function LoginUserHandler(services: Services): RequestHandler {
|
||||||
const login = LoginUser(services);
|
const login = LoginUser(services);
|
||||||
|
|
||||||
return async (req, res, next) => {
|
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) => {
|
return async (req, res, next) => {
|
||||||
if (req.session.user) {
|
if (req.session.user) {
|
||||||
req.session.user = null;
|
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);
|
const createUser = CreateUser(services);
|
||||||
|
|
||||||
return async (req, res, next) => {
|
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);
|
const readUser = ReadUser(services);
|
||||||
|
|
||||||
return async (req, res, next) => {
|
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);
|
const updateUser = UpdateUser(services);
|
||||||
|
|
||||||
return async (req, res, next) => {
|
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);
|
const listUsers = ListUsers(services);
|
||||||
|
|
||||||
return async (req, res, next) => {
|
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) {
|
export function Routes(services: Services) {
|
||||||
const router = Router();
|
const router = Router();
|
||||||
|
|
||||||
@ -105,44 +126,57 @@ export function Routes(services: Services) {
|
|||||||
'/login',
|
'/login',
|
||||||
LoginUserSchema(),
|
LoginUserSchema(),
|
||||||
ValidateSchema(),
|
ValidateSchema(),
|
||||||
LoginHandler(services),
|
LoginUserHandler(services),
|
||||||
);
|
);
|
||||||
router.post(
|
router.post(
|
||||||
'/logout',
|
'/logout',
|
||||||
LogoutUserSchema(),
|
LogoutUserSchema(),
|
||||||
ValidateSchema(),
|
ValidateSchema(),
|
||||||
LogoutHandler(services),
|
LogoutUserHandler(services),
|
||||||
);
|
);
|
||||||
router.get(
|
router.get(
|
||||||
'/read/:uuid',
|
'/read/:uuid',
|
||||||
CheckPermissions(),
|
CheckPermissions(),
|
||||||
ReadUserSchema(),
|
ReadUserSchema(),
|
||||||
ValidateSchema(),
|
ValidateSchema(),
|
||||||
ReadHandler(services),
|
ReadUserHandler(services),
|
||||||
);
|
);
|
||||||
router.post(
|
router.post(
|
||||||
'/create',
|
'/create',
|
||||||
CheckPermissions(),
|
CheckPermissions(),
|
||||||
CreateUserSchema(),
|
CreateUserSchema(),
|
||||||
ValidateSchema(),
|
ValidateSchema(),
|
||||||
CreateHandler(services),
|
CreateUserHandler(services),
|
||||||
);
|
);
|
||||||
router.patch(
|
router.patch(
|
||||||
'/update/:uuid',
|
'/update/:uuid',
|
||||||
CheckPermissions(),
|
CheckPermissions(),
|
||||||
UpdateUserSchema(),
|
UpdateUserSchema(),
|
||||||
ValidateSchema(),
|
ValidateSchema(),
|
||||||
UpdateHandler(services),
|
UpdateUserHandler(services),
|
||||||
|
);
|
||||||
|
router.get(
|
||||||
|
'/list',
|
||||||
|
CheckPermissions(),
|
||||||
|
ListUsersSchema(),
|
||||||
|
ValidateSchema(),
|
||||||
|
ListUserHandler(services),
|
||||||
);
|
);
|
||||||
router.get('/list', CheckPermissions(), ListHandler(services));
|
|
||||||
|
|
||||||
//Alteration
|
//Alteration
|
||||||
router.post(
|
router.post(
|
||||||
'/givecard',
|
'/addCard/:uuid',
|
||||||
CheckPermissions(),
|
CheckPermissions(),
|
||||||
GiveCardSchema(),
|
AddCardToUserSchema(),
|
||||||
ValidateSchema(),
|
ValidateSchema(),
|
||||||
GiveCardHandler(),
|
AddCardToUserHandler(services),
|
||||||
|
);
|
||||||
|
router.post(
|
||||||
|
'/removeCard/:uuid',
|
||||||
|
CheckPermissions(),
|
||||||
|
RemoveCardFromUserSchema(),
|
||||||
|
ValidateSchema(),
|
||||||
|
//RemoveCardFromUserHandler(),
|
||||||
);
|
);
|
||||||
|
|
||||||
return router;
|
return router;
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { Collection, Db } from 'mongodb';
|
import { Collection, Db } from 'mongodb';
|
||||||
import { LoginUserBody, UpdateUserBody } from '@core';
|
import { Card, CardInfo, LoginUserBody, UpdateUserBody } from '@core';
|
||||||
import { User, UserWithPassword } from '../../entities/user';
|
import { User, UserWithPassword } from '../../entities/user';
|
||||||
import { log } from '../../functions/logger';
|
import { log } from '../../functions/logger';
|
||||||
import { getHashedPassword } from '../../functions/password';
|
import { getHashedPassword } from '../../functions/password';
|
||||||
@ -99,6 +99,34 @@ class UserModel {
|
|||||||
log(tracker, 'LIST USERS');
|
log(tracker, 'LIST USERS');
|
||||||
return userCollection.map((userDocument) => new User(userDocument));
|
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;
|
export default UserModel;
|
||||||
|
@ -56,3 +56,16 @@ export function ListUsers(
|
|||||||
return users.map((user) => user.Info());
|
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": {
|
"devDependencies": {
|
||||||
"@types/node": "^18.8.4",
|
"@types/node": "^18.8.4",
|
||||||
"prettier": "^2.7.1",
|
"prettier": "^2.7.1",
|
||||||
|
"mongodb": "^4.10.0",
|
||||||
"typescript": "^4.8.3"
|
"typescript": "^4.8.3"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,7 @@
|
|||||||
|
import { ObjectId } from 'mongodb';
|
||||||
|
|
||||||
export type EntityInfo = {
|
export type EntityInfo = {
|
||||||
|
_id: ObjectId;
|
||||||
uuid: string;
|
uuid: string;
|
||||||
createdAt: Date;
|
createdAt: Date;
|
||||||
updatedAt: Date;
|
updatedAt: Date;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user