Skip to content

Commit

Permalink
refacto: migrate from tsyringe to typedi
Browse files Browse the repository at this point in the history
  • Loading branch information
barthofu committed Feb 17, 2024
1 parent 23b8acd commit 425309c
Show file tree
Hide file tree
Showing 40 changed files with 251 additions and 275 deletions.
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -19,4 +19,5 @@ logs/
*.log

# other
tests/
tests/
tmp/
4 changes: 2 additions & 2 deletions mikro-orm.config.ts
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
// @ts-nocheck

import { Options } from '@mikro-orm/core'
import { Container } from 'typedi'

import * as entities from '@/entities'
import { env } from '@/env'
import { PluginsManager } from '@/services'
import { resolveDependency } from '@/utils/functions'

import { mikroORMConfig } from './src/configs/database'

export default async () => {
const pluginsManager = await resolveDependency(PluginsManager)
const pluginsManager = Container.get(PluginsManager)
await pluginsManager.loadPlugins()

return {
Expand Down
1 change: 1 addition & 0 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,7 @@
"swagger-ui-express": "~5.0.0",
"ts-toolbelt": "^9.6.0",
"tsyringe": "~4.8.0",
"typedi": "^0.10.0",
"typesafe-i18n": "^5.26.2",
"uuid": "~9.0.1"
},
Expand Down
14 changes: 4 additions & 10 deletions src/api/controllers/bot.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,14 @@ import { NotFound, Unauthorized } from '@tsed/exceptions'
import { Required } from '@tsed/schema'
import { BaseGuildTextChannel, BaseGuildVoiceChannel, ChannelType, NewsChannel, PermissionsBitField } from 'discord.js'
import { Client, MetadataStorage } from 'discordx'
import { Inject } from 'typedi'

import { BotOnline, DevAuthenticated } from '@/api/middlewares'
import { generalConfig } from '@/configs'
import { Guild, User } from '@/entities'
import { Database } from '@/services'
import { BaseController } from '@/utils/classes'
import { getDevs, isDev, isInMaintenance, resolveDependencies, setMaintenance } from '@/utils/functions'
import { getDevs, isDev, isInMaintenance, setMaintenance } from '@/utils/functions'

@Controller('/bot')
@UseBefore(
Expand All @@ -18,18 +19,11 @@ import { getDevs, isDev, isInMaintenance, resolveDependencies, setMaintenance }
)
export class BotController extends BaseController {

private client: Client

// test
private db: Database
@Inject() private client: Client
@Inject() private db: Database

constructor() {
super()

resolveDependencies([Client, Database]).then(([client, db]) => {
this.client = client
this.db = db
})
}

@Get('/info')
Expand Down
11 changes: 3 additions & 8 deletions src/api/controllers/database.ts
Original file line number Diff line number Diff line change
@@ -1,29 +1,24 @@
import { BodyParams, Controller, Get, Post, UseBefore } from '@tsed/common'
import { InternalServerError } from '@tsed/exceptions'
import { Required } from '@tsed/schema'
import { injectable } from 'tsyringe'
import { Inject } from 'typedi'

import { DevAuthenticated } from '@/api/middlewares'
import { databaseConfig } from '@/configs'
import { Database } from '@/services'
import { BaseController } from '@/utils/classes'
import { formatDate, resolveDependencies } from '@/utils/functions'
import { formatDate } from '@/utils/functions'

@Controller('/database')
@UseBefore(
DevAuthenticated
)
@injectable()
export class DatabaseController extends BaseController {

private db: Database
@Inject() private db: Database

constructor() {
super()

resolveDependencies([Database]).then(([db]) => {
this.db = db
})
}

@Post('/backup')
Expand Down
18 changes: 6 additions & 12 deletions src/api/controllers/health.ts
Original file line number Diff line number Diff line change
@@ -1,30 +1,24 @@
import { Controller, Get, UseBefore } from '@tsed/common'
import { Client } from 'discordx'
import { Inject } from 'typedi'

import { Data } from '@/entities'
import { Database, Logger, Stats } from '@/services'
import { BaseController } from '@/utils/classes'
import { isInMaintenance, resolveDependencies } from '@/utils/functions'
import { isInMaintenance } from '@/utils/functions'

import { DevAuthenticated } from '../middlewares/devAuthenticated'

@Controller('/health')
export class HealthController extends BaseController {

private client: Client
private db: Database
private stats: Stats
private logger: Logger
@Inject() private client: Client
@Inject() private db: Database
@Inject() private stats: Stats
@Inject() private logger: Logger

constructor() {
super()

resolveDependencies([Client, Database, Stats, Logger]).then(([client, db, stats, logger]) => {
this.client = client
this.db = db
this.stats = stats
this.logger = logger
})
}

@Get('/check')
Expand Down
8 changes: 2 additions & 6 deletions src/api/controllers/stats.ts
Original file line number Diff line number Diff line change
@@ -1,24 +1,20 @@
import { Controller, Get, QueryParams, UseBefore } from '@tsed/common'
import { Inject } from 'typedi'

import { DevAuthenticated } from '@/api/middlewares'
import { Stats } from '@/services'
import { BaseController } from '@/utils/classes'
import { resolveDependencies } from '@/utils/functions'

@Controller('/stats')
@UseBefore(
DevAuthenticated
)
export class StatsController extends BaseController {

private stats: Stats
@Inject() private stats: Stats

constructor() {
super()

resolveDependencies([Stats]).then(([stats]) => {
this.stats = stats
})
}

@Get('/totals')
Expand Down
11 changes: 2 additions & 9 deletions src/api/middlewares/botOnline.ts
Original file line number Diff line number Diff line change
@@ -1,19 +1,12 @@
import { Middleware } from '@tsed/common'
import { InternalServerError } from '@tsed/exceptions'
import { Client } from 'discordx'

import { resolveDependencies } from '@/utils/functions'
import { Inject } from 'typedi'

@Middleware()
export class BotOnline {

private client: Client

constructor() {
resolveDependencies([Client]).then(([client]) => {
this.client = client
})
}
@Inject() private client: Client

async use() {
if (this.client.user?.presence.status === 'offline')
Expand Down
11 changes: 3 additions & 8 deletions src/api/middlewares/devAuthenticated.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
import { Context, Middleware, PlatformContext } from '@tsed/common'
import { BadRequest, Unauthorized } from '@tsed/exceptions'
import DiscordOauth2 from 'discord-oauth2'
import { Inject } from 'typedi'

import { env } from '@/env'
import { Store } from '@/services'
import { isDev, resolveDependency } from '@/utils/functions'
import { isDev } from '@/utils/functions'

const discordOauth2 = new DiscordOauth2()

Expand All @@ -16,13 +17,7 @@ const timeout = 10 * 60 * 1000
@Middleware()
export class DevAuthenticated {

private store: Store

constructor() {
resolveDependency(Store).then((store) => {
this.store = store
})
}
@Inject() private store: Store

async use(@Context() { request }: PlatformContext) {
// if we are in development mode, we don't need to check the token
Expand Down
10 changes: 2 additions & 8 deletions src/api/middlewares/log.ts
Original file line number Diff line number Diff line change
@@ -1,19 +1,13 @@
import { Context, Middleware, PlatformContext } from '@tsed/common'
import chalk from 'chalk'
import { Inject } from 'typedi'

import { Logger } from '@/services'
import { resolveDependency } from '@/utils/functions'

@Middleware()
export class Log {

private logger: Logger

constructor() {
resolveDependency(Logger).then((logger) => {
this.logger = logger
})
}
@Inject() private logger: Logger

use(@Context() { request }: PlatformContext) {
// don't log anything if the request has a `logIgnore` query param
Expand Down
19 changes: 9 additions & 10 deletions src/api/server.ts
Original file line number Diff line number Diff line change
@@ -1,29 +1,28 @@
import '@tsed/swagger'

import { MikroORM, UseRequestContext } from '@mikro-orm/core'
import { Inject, PlatformAcceptMimesMiddleware, PlatformApplication } from '@tsed/common'
import { Inject as TsedInject, PlatformAcceptMimesMiddleware, PlatformApplication } from '@tsed/common'
import { PlatformExpress } from '@tsed/platform-express'
import bodyParser from 'body-parser'
import { singleton } from 'tsyringe'
import { Inject, Service } from 'typedi'

import * as controllers from '@/api/controllers'
import { Log } from '@/api/middlewares'
import { env } from '@/env'
import { Database, PluginsManager, Store } from '@/services'

@singleton()
@Service()
export class Server {

@Inject() app: PlatformApplication
@TsedInject() app: PlatformApplication
@Inject() private pluginsManager: PluginsManager
@Inject() private store: Store
@Inject() private db: Database

orm: MikroORM

constructor(
private pluginsManager: PluginsManager,
private store: Store,
db: Database
) {
this.orm = db.orm
constructor() {
this.orm = this.db.orm
}

$beforeRoutesInit() {
Expand Down
7 changes: 2 additions & 5 deletions src/commands/Admin/prefix.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { Category } from '@discordx/utilities'
import { ApplicationCommandOptionType, CommandInteraction } from 'discord.js'
import { Client } from 'discordx'
import { injectable } from 'tsyringe'
import { Inject } from 'typedi'

import { generalConfig } from '@/configs'
import { Discord, Slash, SlashOption } from '@/decorators'
Expand All @@ -12,13 +12,10 @@ import { Database } from '@/services'
import { resolveGuild, simpleSuccessEmbed } from '@/utils/functions'

@Discord()
@injectable()
@Category('Admin')
export default class PrefixCommand {

constructor(
private db: Database
) {}
@Inject() private db: Database

@Slash({ name: 'prefix' })
@Guard(
Expand Down
7 changes: 2 additions & 5 deletions src/commands/General/info.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import dayjs from 'dayjs'
import relativeTime from 'dayjs/plugin/relativeTime'
import { ActionRowBuilder, ButtonBuilder, ButtonStyle, CommandInteraction, EmbedBuilder, EmbedField } from 'discord.js'
import { Client } from 'discordx'
import { injectable } from 'tsyringe'
import { Inject } from 'typedi'

import { generalConfig } from '@/configs'
import { Discord, Slash } from '@/decorators'
Expand All @@ -22,13 +22,10 @@ const links = [
]

@Discord()
@injectable()
@Category('General')
export default class InfoCommand {

constructor(
private stats: Stats
) {}
@Inject() private stats: Stats

@Slash({
name: 'info',
Expand Down
7 changes: 2 additions & 5 deletions src/commands/General/stats.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import {
import { Category } from '@discordx/utilities'
import { ApplicationCommandOptionType, CommandInteraction, EmbedBuilder, User } from 'discord.js'
import { Client } from 'discordx'
import { injectable } from 'tsyringe'
import { Inject } from 'typedi'

import { Discord, Slash, SlashOption } from '@/decorators'
import { Stats } from '@/services'
Expand Down Expand Up @@ -41,13 +41,10 @@ const statsResolver: StatsResolverType = [
]

@Discord()
@injectable()
@Category('General')
export default class StatsCommand {

constructor(
private stats: Stats
) {}
@Inject() private stats: Stats

@Slash({
name: 'stats',
Expand Down
13 changes: 5 additions & 8 deletions src/events/custom/simpleCommandCreate.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { ArgsOf, Client, Guard, SimpleCommandMessage } from 'discordx'
import { injectable } from 'tsyringe'
import { Inject } from 'typedi'

import { Discord, On, OnCustom } from '@/decorators'
import { Guild, User } from '@/entities'
Expand All @@ -8,15 +8,12 @@ import { Database, EventManager, Logger, Stats } from '@/services'
import { getPrefixFromMessage, syncUser } from '@/utils/functions'

@Discord()
@injectable()
export default class SimpleCommandCreateEvent {

constructor(
private stats: Stats,
private logger: Logger,
private db: Database,
private eventManager: EventManager
) {}
@Inject() private stats: Stats
@Inject() private logger: Logger
@Inject() private db: Database
@Inject() private eventManager: EventManager

// =============================
// ========= Handler ===========
Expand Down
Loading

0 comments on commit 425309c

Please sign in to comment.