This commit is contained in:
parent
bd27f0084c
commit
0a8b61c472
|
@ -7,4 +7,6 @@ export type * from './gallery';
|
|||
export type * from './spacial_data';
|
||||
export type * from './minecraft';
|
||||
|
||||
export type * from './settings';
|
||||
export type * from './settings';
|
||||
|
||||
export type * from './responses';
|
4
interfaces/responses.ts
Normal file
4
interfaces/responses.ts
Normal file
|
@ -0,0 +1,4 @@
|
|||
export interface ErrorResponse {
|
||||
code: number;
|
||||
message: string;
|
||||
}
|
|
@ -1,5 +1,5 @@
|
|||
import { Badge } from '@/utils/badges';
|
||||
import { Permission } from '@/utils/permissions';
|
||||
import { BadgeNamed } from '@/utils/badges';
|
||||
import { PermissionNamed } from '@/utils/permissions';
|
||||
|
||||
export interface User {
|
||||
id: BigInt;
|
||||
|
@ -16,9 +16,13 @@ export interface User {
|
|||
|
||||
discordId: BigInt;
|
||||
|
||||
permissions: Permission[];
|
||||
badges: Badge[];
|
||||
permissions: PermissionNamed[];
|
||||
badges: BadgeNamed[];
|
||||
|
||||
createdAt: Date;
|
||||
updatedAt: Date;
|
||||
}
|
||||
|
||||
export interface TeamMember extends User {
|
||||
role: string;
|
||||
}
|
|
@ -1,3 +1,6 @@
|
|||
import { TeamMember, User } from '@/interfaces';
|
||||
import { getBadges } from '@/utils/badges';
|
||||
import { getPermissions } from '@/utils/permissions';
|
||||
import mysql, { Pool, QueryResult } from 'mysql2/promise';
|
||||
|
||||
class Database {
|
||||
|
@ -21,6 +24,58 @@ class Database {
|
|||
|
||||
Database.instance = this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a user from their id.
|
||||
*
|
||||
* @param id User's id
|
||||
*
|
||||
* @returns User
|
||||
*/
|
||||
async getUser(id: BigInt): Promise<User> {
|
||||
const [ rows ] = await this.mysqlPool!.query('SELECT * FROM users WHERE id = ?', [ id ]);
|
||||
|
||||
if((rows as any[]).length === 0)
|
||||
throw new Error('User Not Found');
|
||||
|
||||
const row = (rows as any[])[0];
|
||||
|
||||
return {
|
||||
id: row.id as BigInt,
|
||||
|
||||
username: row.username,
|
||||
displayName: row.display_name,
|
||||
|
||||
email: row.email,
|
||||
|
||||
avatar: row.avatar,
|
||||
banner: row.banner,
|
||||
|
||||
accentColor: row.accent_color,
|
||||
|
||||
discordId: row.discord_id as BigInt,
|
||||
|
||||
permissions: getPermissions(row.permissions),
|
||||
badges: getBadges(row.badges),
|
||||
|
||||
createdAt: row.created_at,
|
||||
updatedAt: row.updated_at
|
||||
} as User;
|
||||
}
|
||||
|
||||
// Meta -----------
|
||||
|
||||
async getTeam(): Promise<TeamMember[]> {
|
||||
const [ rows ] = await this.mysqlPool!.query('SELECT * FROM team');
|
||||
|
||||
const usersPromises = (rows as any[]).map(row => this.getUser(row.user_id));
|
||||
const users = await Promise.all(usersPromises);
|
||||
|
||||
return users.map((user, i) => ({
|
||||
role: (rows as any[])[i].role,
|
||||
...user,
|
||||
} as TeamMember));
|
||||
}
|
||||
}
|
||||
|
||||
export default Database;
|
20
pages/api/v1/meta/index.ts
Normal file
20
pages/api/v1/meta/index.ts
Normal file
|
@ -0,0 +1,20 @@
|
|||
import getConfig from 'next/config';
|
||||
|
||||
import type { NextApiRequest, NextApiResponse } from 'next';
|
||||
|
||||
export default function handler(
|
||||
req: NextApiRequest,
|
||||
res: NextApiResponse<any>,
|
||||
) {
|
||||
const { publicRuntimeConfig } = getConfig();
|
||||
|
||||
let { git } = publicRuntimeConfig;
|
||||
|
||||
git.commit.created = new Date(git.commit.created).getTime();
|
||||
|
||||
res
|
||||
.status(200)
|
||||
.json({
|
||||
git,
|
||||
});
|
||||
}
|
36
pages/api/v1/meta/team.ts
Normal file
36
pages/api/v1/meta/team.ts
Normal file
|
@ -0,0 +1,36 @@
|
|||
import { ErrorResponse, TeamMember, User } from '@/interfaces';
|
||||
|
||||
import Database from '@/lib/Database';
|
||||
|
||||
import type { NextApiRequest, NextApiResponse } from 'next';
|
||||
|
||||
export default async function handler(
|
||||
req: NextApiRequest,
|
||||
res: NextApiResponse<TeamMember[] | ErrorResponse>,
|
||||
) {
|
||||
const db = new Database();
|
||||
|
||||
try {
|
||||
let team: any[] = await db.getTeam();
|
||||
|
||||
team = team.map((member: TeamMember) => {
|
||||
return {
|
||||
...member,
|
||||
email: undefined,
|
||||
discordId: undefined,
|
||||
|
||||
createdAt: new Date(member.createdAt).getTime(),
|
||||
updatedAt: new Date(member.updatedAt).getTime()
|
||||
};
|
||||
});
|
||||
|
||||
res.status(200).json(team);
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
|
||||
res.status(500).json({
|
||||
code: 500,
|
||||
message: 'Internal Server Error'
|
||||
});
|
||||
}
|
||||
}
|
|
@ -9,15 +9,20 @@ export enum Badge {
|
|||
Supporter = 1 << 1, // "Donator"
|
||||
}
|
||||
|
||||
export function getBadges(badges: number): Badge[] {
|
||||
const result: Badge[] = [];
|
||||
export enum BadgeNamed {
|
||||
Old = 'og',
|
||||
Supporter = 'supporter',
|
||||
}
|
||||
|
||||
export function getBadges(badges: number): BadgeNamed[] {
|
||||
const result: BadgeNamed[] = [];
|
||||
|
||||
if ((badges & Badge.Old) === Badge.Old) {
|
||||
result.push(Badge.Old);
|
||||
result.push(BadgeNamed.Old);
|
||||
}
|
||||
|
||||
if ((badges & Badge.Supporter) === Badge.Supporter) {
|
||||
result.push(Badge.Supporter);
|
||||
result.push(BadgeNamed.Supporter);
|
||||
}
|
||||
|
||||
return result;
|
||||
|
|
|
@ -4,6 +4,30 @@ export enum Permission {
|
|||
ServerPlayer = 1 << 2
|
||||
}
|
||||
|
||||
export enum PermissionNamed {
|
||||
SuperAdmin = 'super_admin',
|
||||
Admin = 'admin',
|
||||
ServerPlayer = 'server_player'
|
||||
}
|
||||
|
||||
export function hasPermission(permissions: number, permission: Permission): boolean {
|
||||
return (permissions & permission) === permission;
|
||||
}
|
||||
|
||||
export function getPermissions(permissions: number): PermissionNamed[] {
|
||||
const result: PermissionNamed[] = [];
|
||||
|
||||
if ((permissions & Permission.SuperAdmin) === Permission.SuperAdmin) {
|
||||
result.push(PermissionNamed.SuperAdmin);
|
||||
}
|
||||
|
||||
if ((permissions & Permission.Admin) === Permission.Admin) {
|
||||
result.push(PermissionNamed.Admin);
|
||||
}
|
||||
|
||||
if ((permissions & Permission.ServerPlayer) === Permission.ServerPlayer) {
|
||||
result.push(PermissionNamed.ServerPlayer);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
Loading…
Reference in a new issue