Unfinished

This commit is contained in:
ADAMJR 2021-11-01 22:12:16 +00:00
parent 387ece8b2f
commit 35a23195c4
14 changed files with 2170 additions and 414 deletions

25
backend/logs/combined.log Normal file
View File

@ -0,0 +1,25 @@
undefined
undefined
undefined
undefined
undefined
{"@fields":{"level":"info"},"@message":"API is running on port 3000"}
{"@fields":{"level":"info"},"@message":"Loaded 25 handlers"}
{"@fields":{"level":"info"},"@message":"Started WebSocket"}
{"@fields":{"level":"info"},"@message":"Connected to database."}
{"@fields":{"level":"info"},"@message":"Logged in to email service"}
undefined
undefined
undefined
undefined
undefined
undefined
undefined
undefined
undefined
undefined
undefined
undefined
undefined
undefined
undefined

0
backend/logs/error.log Normal file
View File

2473
backend/package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -6,6 +6,7 @@
"scripts": {
"start": "DEV=true ts-node-transpile-only src/app.ts",
"dev": "ts-node-dev --transpile-only src/app.ts",
"debug": "nodemon --exec 'node --inspect=0.0.0.0:9229 --require ts-node/register src/app.ts' --ext 'ts,yml'",
"test": "ts-mocha test/test.ts"
},
"keywords": [],
@ -39,7 +40,8 @@
"socket.io-client": "^4.0.0",
"ts-node": "^9.1.1",
"typescript": "^4.2.3",
"un": "^0.0.0"
"un": "^0.0.0",
"winston": "^3.3.3"
},
"devDependencies": {
"@types/chai": "^4.2.14",
@ -70,6 +72,7 @@
"chai-spies": "^1.0.0",
"i": "^0.3.6",
"mocha": "^8.2.1",
"nodemon": "^2.0.14",
"npm": "^7.6.3",
"sazerac": "^2.0.0",
"supertest": "^6.1.3"

View File

@ -4,7 +4,7 @@ config();
import { connect } from 'mongoose';
import { REST } from './rest/server';
import Deps from './utils/deps';
import Log from './utils/log';
import './modules/logger';
connect(process.env.MONGO_URI, {
useUnifiedTopology: true,
@ -13,8 +13,8 @@ connect(process.env.MONGO_URI, {
useCreateIndex: true,
serverSelectionTimeoutMS: 0,
}, (error) => (error)
? Log.error(error.message, 'db')
: Log.info(`Connected to database.`)
? log.error(error.message, 'db')
: log.info(`Connected to database.`)
);
Deps.get<REST>(REST);

View File

@ -51,7 +51,7 @@ export const Message = model<MessageDocument>('message', new Schema({
updatedAt: Date,
}, { toJSON: { getters: true } })
// TODO: refactor
.method('toClient', function(this: MessageDocument) {
.method('toClient', function(this: any) {
const obj = this.toObject();
this.id = this._id;

View File

@ -18,8 +18,8 @@ export class Email {
});
this.email.verify((error) => (error)
? Log.error(error, 'email')
: Log.info('Logged in to email service', 'email'));
? log.error(error, 'email')
: log.info('Logged in to email service', 'email'));
this.email.use('compile', pugEngine({
templateDir: this.templateDir,

View File

@ -0,0 +1,10 @@
import { REST } from '../rest/server';
interface Deps {
rest: REST;
}
export const deps: Deps = {
rest: new REST(),
};
export default deps;

View File

@ -0,0 +1,19 @@
import winston from 'winston';
const logger = winston.createLogger({
level: 'info',
format: winston.format.colorize(),
defaultMeta: {},
transports: [
new winston.transports.File({ filename: 'logs/error.log', level: 'error' }),
new winston.transports.File({ filename: 'logs/combined.log' }),
],
});
if (process.env.NODE_ENV !== 'production') {
logger.add(new winston.transports.Console({
format: winston.format.simple(),
}));
}
global.log = logger;

View File

@ -77,7 +77,7 @@ export class REST {
private listen() {
const port = process.env.PORT || 8080;
const server = this.app.listen(port, async () => {
Log.info(`API is running on port ${port}`);
log.info(`API is running on port ${port}`);
await this.ws.init(server);
});
}

View File

@ -1,25 +0,0 @@
import 'colors';
export default class Log {
static getSource(src?: string) {
return src?.toUpperCase() || 'OTHER';
}
static info(message?: any, src?: string) {
console.log(`[${
this.toHHMMSS(new Date()).cyan
}] INFO [${this.getSource(src).blue}] ${message?.toString().blue}`)
}
static error(err?: any, src?: string) {
const message: string = err?.message || err || 'Unknown error';
console.error(`[${
this.toHHMMSS(new Date()).cyan
}] ERROR [${this.getSource(src).blue}] ${message.red}`)
}
private static toHHMMSS(time: Date) {
let hours = time.getHours().toString().padStart(2, '0');
let minutes = time.getMinutes().toString().padStart(2, '0');
let seconds = time.getSeconds().toString().padStart(2, '0');
return `${hours}:${minutes}:${seconds}`;
}
}

View File

@ -43,7 +43,7 @@ export class WebSocket {
} catch {}
}
Log.info(`Loaded ${this.events.size} handlers`, 'ws');
log.info(`Loaded ${this.events.size} handlers`, 'ws');
this.io.on('connection', (client) => {
for (const event of this.events.values())
@ -61,7 +61,7 @@ export class WebSocket {
});
});
Log.info('Started WebSocket', 'ws');
log.info('Started WebSocket', 'ws');
}
public to(...rooms: string[]) {

View File

@ -17,7 +17,7 @@ use(chaiThings);
use(should);
const space = (length = 54) => new Array(length).join(' ');
console.log(`${space(48 * 3)}TESTS${space(54 * 2)}`.bgWhite.black);
log.info(`${space(48 * 3)}TESTS${space(54 * 2)}`.bgWhite.black);
(async() => {
try {
@ -27,9 +27,9 @@ console.log(`${space(48 * 3)}TESTS${space(54 * 2)}`.bgWhite.black);
useFindAndModify: false,
useCreateIndex: true,
});
console.log(`Connected to ${process.env.MONGO_URI}`);
log.info(`Connected to ${process.env.MONGO_URI}`);
} catch {
console.log(`Failed to connect to ${process.env.MONGO_URI}`);
log.info(`Failed to connect to ${process.env.MONGO_URI}`);
}
try {

3
types/global.d.ts vendored Normal file
View File

@ -0,0 +1,3 @@
export declare global {
const log: import('winston').Logger;
}