From d28c19dd0b4cab506ecc5db02cf0b92136cadd72 Mon Sep 17 00:00:00 2001 From: Julian Lechner Date: Wed, 2 Apr 2025 11:33:25 +0200 Subject: [PATCH] changed Project Stucture - Part2 --- README.md | 9 +++++++++ TESTING.ts | 5 ----- package.json | 7 +++++++ src/DataAccess/Json/IJsonDao.ts | 3 +++ src/DataAccess/Json/JsonDao.ts | 11 +++++++++++ src/DataAccess/MySql/IMySqlDao.ts | 3 +++ src/DataAccess/MySql/MysqlDao.ts | 17 +++++++++++++++++ .../AudioStreamManager/AudioStreamManager.ts | 15 ++------------- .../DatabaseServices/JsonDatabaseServices.ts | 7 +++++-- .../DatabaseServices/MySqlDatabaseServices.ts | 13 +++++-------- 10 files changed, 62 insertions(+), 28 deletions(-) delete mode 100644 TESTING.ts create mode 100644 src/DataAccess/Json/IJsonDao.ts create mode 100644 src/DataAccess/Json/JsonDao.ts create mode 100644 src/DataAccess/MySql/IMySqlDao.ts create mode 100644 src/DataAccess/MySql/MysqlDao.ts diff --git a/README.md b/README.md index 46234a9..6b77648 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,15 @@ ![GitHub package.json version](https://img.shields.io/github/package-json/v/FrauJulian/discord-audio-stream) ![GitHub Repo stars](https://img.shields.io/github/stars/FrauJulian/discord-audio-stream?style=social) +# !ATTENTION! + +Usefully Links to write docs: + +ConnectionOptions: +- https://github.com/sidorares/node-mysql2/blob/master/typings/mysql/lib/Connection.d.ts#L82 + +# !ATTENTION! +

This NPM package was created to make it easier to stream audio to Discord.

There is a security feature of discord that stops the stream of audio after some time. This problem can be solved by disconnecting the Discord channel every 1.5 hours for 2 seconds and then reconnecting the channel. (If you use this package!) I recommend using a database to store the data e.g. MySQL, SQLite, json file and other database types.

The package does not fix this error yet. However, it is currently being worked on!

diff --git a/TESTING.ts b/TESTING.ts deleted file mode 100644 index 66a3179..0000000 --- a/TESTING.ts +++ /dev/null @@ -1,5 +0,0 @@ -import {AudioStreamManager} from "./src"; - -let temp = new AudioStreamManager("MySql", "frg"); - -console.log(temp); \ No newline at end of file diff --git a/package.json b/package.json index e50b925..c8fb569 100644 --- a/package.json +++ b/package.json @@ -18,6 +18,13 @@ "audio", "music" ], + "contributors": [ + { + "name": "Julian Lechner aka. FrauJulian", + "github": "https://github.com/FrauJulian", + "web": "https://fraujulian.xyz/" + } + ], "author": "FrauJulian | Julian Lechner", "license": "CUSTOM-LICENSE", "bugs": { diff --git a/src/DataAccess/Json/IJsonDao.ts b/src/DataAccess/Json/IJsonDao.ts new file mode 100644 index 0000000..c448ef5 --- /dev/null +++ b/src/DataAccess/Json/IJsonDao.ts @@ -0,0 +1,3 @@ +export interface IJsonDao { + +} \ No newline at end of file diff --git a/src/DataAccess/Json/JsonDao.ts b/src/DataAccess/Json/JsonDao.ts new file mode 100644 index 0000000..a81472b --- /dev/null +++ b/src/DataAccess/Json/JsonDao.ts @@ -0,0 +1,11 @@ +import {IJsonDao} from "./IJsonDao"; +import {Config, JsonDB} from "node-json-db"; + +export class JsonDao implements IJsonDao { + private _jsonDatabaseContext: JsonDB; + + constructor(fileLocation: string) { + this._jsonDatabaseContext = new JsonDB(new Config(fileLocation, true, false, "/", true)); + } + +} \ No newline at end of file diff --git a/src/DataAccess/MySql/IMySqlDao.ts b/src/DataAccess/MySql/IMySqlDao.ts new file mode 100644 index 0000000..5e740bc --- /dev/null +++ b/src/DataAccess/MySql/IMySqlDao.ts @@ -0,0 +1,3 @@ +export interface IMySqlDao { + +} \ No newline at end of file diff --git a/src/DataAccess/MySql/MysqlDao.ts b/src/DataAccess/MySql/MysqlDao.ts new file mode 100644 index 0000000..f659496 --- /dev/null +++ b/src/DataAccess/MySql/MysqlDao.ts @@ -0,0 +1,17 @@ +import {IMySqlDao} from "./IMySqlDao"; +import mysql, {Connection, ConnectionOptions} from 'mysql2/promise'; +import {Connection as BaseConnection} from "mysql2/typings/mysql/lib/Connection"; + +export class MysqlDao implements IMySqlDao { + private _mysqlDatabaseContext!: Connection; + + constructor(mysqlAuthenticationData: ConnectionOptions) { + this.InitializeDatabaseContext(mysqlAuthenticationData).catch(error => { + throw new Error(error) + }); + } + + private async InitializeDatabaseContext(mysqlAuthenticationData: ConnectionOptions): Promise { + this._mysqlDatabaseContext = await mysql.createConnection(mysqlAuthenticationData); + } +} diff --git a/src/ExternalServices/AudioStreamManager/AudioStreamManager.ts b/src/ExternalServices/AudioStreamManager/AudioStreamManager.ts index 6a44bd5..84f8304 100644 --- a/src/ExternalServices/AudioStreamManager/AudioStreamManager.ts +++ b/src/ExternalServices/AudioStreamManager/AudioStreamManager.ts @@ -1,30 +1,19 @@ import {JsonDatabaseServices} from "../../InternalServices/DatabaseServices/JsonDatabaseServices"; import {MySqlDatabaseServices} from "../../InternalServices/DatabaseServices/MySqlDatabaseServices"; import {Constants} from "../../Core/Contants"; +import {ConnectionOptions} from "mysql2/promise"; export class AudioStreamManager { - constructor( - databaseType: "Json" | "MySql", - databaseOptions: { - Host: string; - Port: number; - Username: string; - Password: string; - Database: string; - } | string) { - + constructor(databaseType: "Json" | "MySql", databaseOptions: ConnectionOptions | string) { if (databaseType === "MySql" && databaseOptions && typeof databaseOptions === "object") { - console.log("mysql passed") Constants.DatabaseServices = new MySqlDatabaseServices(databaseOptions); } else if (databaseType === "Json" && databaseOptions && typeof databaseOptions === "string") { - console.log("json passed") Constants.DatabaseServices = new JsonDatabaseServices(databaseOptions); } else { - console.log("err passed") throw new Error("Failed validating database.") } } diff --git a/src/InternalServices/DatabaseServices/JsonDatabaseServices.ts b/src/InternalServices/DatabaseServices/JsonDatabaseServices.ts index 2d5d221..0ee397a 100644 --- a/src/InternalServices/DatabaseServices/JsonDatabaseServices.ts +++ b/src/InternalServices/DatabaseServices/JsonDatabaseServices.ts @@ -1,7 +1,10 @@ import {IDatabaseServices} from "./IDatabaseServices"; +import {JsonDao} from "../../DataAccess/Json/JsonDao"; export class JsonDatabaseServices implements IDatabaseServices { - constructor(databaseOptions : string) { - // IMPLEMENT DATABASE + private _databaseDao: JsonDao; + + constructor(databaseOptions : any) { + this._databaseDao = new JsonDao(databaseOptions); } } \ No newline at end of file diff --git a/src/InternalServices/DatabaseServices/MySqlDatabaseServices.ts b/src/InternalServices/DatabaseServices/MySqlDatabaseServices.ts index 93eb246..0b857a6 100644 --- a/src/InternalServices/DatabaseServices/MySqlDatabaseServices.ts +++ b/src/InternalServices/DatabaseServices/MySqlDatabaseServices.ts @@ -1,14 +1,11 @@ import {IDatabaseServices} from "./IDatabaseServices"; +import {MysqlDao} from "../../DataAccess/MySql/MysqlDao"; +import {ConnectionOptions} from "mysql2/promise"; export class MySqlDatabaseServices implements IDatabaseServices { + private _databaseDao: MysqlDao; - constructor(databaseOptions: { - Host: string; - Port: number; - Username: string; - Password: string; - Database: string; - }) { - //IMPLEMENT DATABASE + constructor(databaseOptions: ConnectionOptions) { + this._databaseDao = new MysqlDao(databaseOptions); } } \ No newline at end of file