express-generator-typescript
Version:
Generate new Express applications similar to express-generate which but sets it up to use TypeScript instead
131 lines (114 loc) • 2.84 kB
text/typescript
import { IUser } from '@src/models/User';
import { getRandomInt } from '@src/util/misc';
import orm from './MockOrm';
/******************************************************************************
Functions
******************************************************************************/
/**
* Get one user.
*/
async function getOne(email: string): Promise<IUser | null> {
const db = await orm.openDb();
for (const user of db.users) {
if (user.email === email) {
return user;
}
}
return null;
}
/**
* See if a user with the given id exists.
*/
async function persists(id: number): Promise<boolean> {
const db = await orm.openDb();
for (const user of db.users) {
if (user.id === id) {
return true;
}
}
return false;
}
/**
* Get all users.
*/
async function getAll(): Promise<IUser[]> {
const db = await orm.openDb();
return db.users;
}
/**
* Add one user.
*/
async function add(user: IUser): Promise<void> {
const db = await orm.openDb();
user.id = getRandomInt();
db.users.push(user);
return orm.saveDb(db);
}
/**
* Update a user.
*/
async function update(user: IUser): Promise<void> {
const db = await orm.openDb();
for (let i = 0; i < db.users.length; i++) {
if (db.users[i].id === user.id) {
const dbUser = db.users[i];
db.users[i] = {
...dbUser,
name: user.name,
email: user.email,
};
return orm.saveDb(db);
}
}
}
/**
* Delete one user.
*/
async function delete_(id: number): Promise<void> {
const db = await orm.openDb();
for (let i = 0; i < db.users.length; i++) {
if (db.users[i].id === id) {
db.users.splice(i, 1);
return orm.saveDb(db);
}
}
}
// **** Unit-Tests Only **** //
/**
* Delete every user record.
*/
async function deleteAllUsers(): Promise<void> {
const db = await orm.openDb();
db.users = [];
return orm.saveDb(db);
}
/**
* Insert multiple users. Can't do multiple at once cause using a plain file
* for nmow.
*/
async function insertMult(
users: IUser[] | readonly IUser[],
): Promise<IUser[]> {
const db = await orm.openDb(),
usersF = [ ...users ];
for (const user of usersF) {
user.id = getRandomInt();
user.created = new Date();
}
db.users = [ ...db.users, ...users ];
await orm.saveDb(db);
return usersF;
}
/******************************************************************************
Export default
******************************************************************************/
export default {
getOne,
persists,
getAll,
add,
update,
delete: delete_,
deleteAllUsers,
insertMult,
} as const;