add redirect visit counting
parent
fbf28dbdb2
commit
8da3363ea4
|
@ -10,11 +10,14 @@ export default class Root extends Route {
|
||||||
}
|
}
|
||||||
|
|
||||||
public bind() {
|
public bind() {
|
||||||
|
this.router.get('/', (_req, res) => res.redirect('https://www.libraryofcode.org/'));
|
||||||
|
|
||||||
this.router.get('/:key', async (req, res) => {
|
this.router.get('/:key', async (req, res) => {
|
||||||
try {
|
try {
|
||||||
const link: RedirectRaw = await this.server.client.db.Redirect.findOne({ key: req.params.key }).lean().exec();
|
const link: RedirectRaw = await this.server.client.db.Redirect.findOne({ key: req.params.key }).lean().exec();
|
||||||
if (!link) return res.status(404).json({ code: this.constants.codes.NOT_FOUND, message: this.constants.messages.NOT_FOUND });
|
if (!link) return res.status(404).json({ code: this.constants.codes.NOT_FOUND, message: this.constants.messages.NOT_FOUND });
|
||||||
return res.redirect(link.to);
|
res.redirect(link.to);
|
||||||
|
return await this.server.client.db.Redirect.updateOne({ key: req.params.key }, { $inc: { visitedCount: 1 } });
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
this.server.client.util.handleError(err);
|
this.server.client.util.handleError(err);
|
||||||
return res.status(500).json({ code: this.constants.codes.SERVER_ERROR, message: this.constants.messages.SERVER_ERROR });
|
return res.status(500).json({ code: this.constants.codes.SERVER_ERROR, message: this.constants.messages.SERVER_ERROR });
|
||||||
|
|
|
@ -27,6 +27,7 @@ export default class AddRedirect extends Command {
|
||||||
const redirect = new this.client.db.Redirect({
|
const redirect = new this.client.db.Redirect({
|
||||||
key: args[1].toLowerCase(),
|
key: args[1].toLowerCase(),
|
||||||
to: args[0],
|
to: args[0],
|
||||||
|
visitedCount: 0,
|
||||||
});
|
});
|
||||||
await redirect.save();
|
await redirect.save();
|
||||||
return this.success(message.channel, `Redirect https://loc.sh/${args[1].toLowerCase()} -> ${args[0]} is now active.`);
|
return this.success(message.channel, `Redirect https://loc.sh/${args[1].toLowerCase()} -> ${args[0]} is now active.`);
|
||||||
|
|
|
@ -21,7 +21,7 @@ export default class DelRedirect extends Command {
|
||||||
const embed = new RichEmbed();
|
const embed = new RichEmbed();
|
||||||
embed.setTitle('Redirect Information');
|
embed.setTitle('Redirect Information');
|
||||||
for (const redirect of redirects) {
|
for (const redirect of redirects) {
|
||||||
embed.addField(redirect.key, redirect.to);
|
embed.addField(`${redirect.key} | visited ${redirect.visitedCount} times`, redirect.to);
|
||||||
}
|
}
|
||||||
embed.setFooter(this.client.user.username, this.client.user.avatarURL);
|
embed.setFooter(this.client.user.username, this.client.user.avatarURL);
|
||||||
embed.setTimestamp();
|
embed.setTimestamp();
|
||||||
|
@ -31,7 +31,7 @@ export default class DelRedirect extends Command {
|
||||||
if (!redirects) return this.error(message.channel, 'No redirect links found.');
|
if (!redirects) return this.error(message.channel, 'No redirect links found.');
|
||||||
const redirectArray: [{ name: string, value: string }?] = [];
|
const redirectArray: [{ name: string, value: string }?] = [];
|
||||||
for (const redirect of redirects) {
|
for (const redirect of redirects) {
|
||||||
redirectArray.push({ name: redirect.key, value: redirect.to });
|
redirectArray.push({ name: `${redirect.key} | visited ${redirect.visitedCount} times`, value: redirect.to });
|
||||||
}
|
}
|
||||||
const splitRedirects = this.client.util.splitFields(redirectArray);
|
const splitRedirects = this.client.util.splitFields(redirectArray);
|
||||||
const cmdPages: RichEmbed[] = [];
|
const cmdPages: RichEmbed[] = [];
|
||||||
|
|
|
@ -3,16 +3,19 @@ import { Document, Schema, model } from 'mongoose';
|
||||||
export interface RedirectInterface extends Document {
|
export interface RedirectInterface extends Document {
|
||||||
key: string,
|
key: string,
|
||||||
to: string,
|
to: string,
|
||||||
|
visitedCount: number,
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface RedirectRaw {
|
export interface RedirectRaw {
|
||||||
key: string,
|
key: string,
|
||||||
to: string,
|
to: string,
|
||||||
|
visitedCount: number,
|
||||||
}
|
}
|
||||||
|
|
||||||
const Redirect: Schema = new Schema({
|
const Redirect: Schema = new Schema({
|
||||||
key: String,
|
key: String,
|
||||||
to: String,
|
to: String,
|
||||||
|
visitedCount: Number,
|
||||||
});
|
});
|
||||||
|
|
||||||
export default model<RedirectInterface>('Redirect', Redirect);
|
export default model<RedirectInterface>('Redirect', Redirect);
|
||||||
|
|
Loading…
Reference in New Issue