aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMax Isom <[email protected]>2021-11-18 20:55:57 -0500
committerMax Isom <[email protected]>2021-11-18 20:55:57 -0500
commit04c7e61fc076e2fa5ddf3d0faf6ebb73f4d52d82 (patch)
tree71d1879e787b7c988939d963dbc4baa857171f5b
parentd805da906a1744c23e0b484b522b078102675770 (diff)
downloadmuse-04c7e61fc076e2fa5ddf3d0faf6ebb73f4d52d82.tar.xz
muse-04c7e61fc076e2fa5ddf3d0faf6ebb73f4d52d82.zip
Add FileCache model
-rw-r--r--src/inversify.config.ts4
-rw-r--r--src/models/file-cache.ts14
-rw-r--r--src/models/index.ts2
-rw-r--r--src/services/get-songs.ts6
-rw-r--r--src/services/key-value-cache.ts (renamed from src/services/cache.ts)2
-rw-r--r--src/types.ts3
-rw-r--r--src/utils/db.ts4
7 files changed, 26 insertions, 9 deletions
diff --git a/src/inversify.config.ts b/src/inversify.config.ts
index b45c588..95ed234 100644
--- a/src/inversify.config.ts
+++ b/src/inversify.config.ts
@@ -28,7 +28,7 @@ import Shuffle from './commands/shuffle.js';
import Skip from './commands/skip.js';
import Unskip from './commands/unskip.js';
import ThirdParty from './services/third-party.js';
-import CacheProvider from './services/cache.js';
+import KeyValueCacheProvider from './services/key-value-cache.js';
const container = new Container();
@@ -76,6 +76,6 @@ container.bind(TYPES.Config).toConstantValue(new ConfigProvider());
// Static libraries
container.bind(TYPES.ThirdParty).to(ThirdParty);
-container.bind(TYPES.Cache).to(CacheProvider);
+container.bind(TYPES.KeyValueCache).to(KeyValueCacheProvider);
export default container;
diff --git a/src/models/file-cache.ts b/src/models/file-cache.ts
new file mode 100644
index 0000000..4846ba3
--- /dev/null
+++ b/src/models/file-cache.ts
@@ -0,0 +1,14 @@
+import {Table, Column, PrimaryKey, Model} from 'sequelize-typescript';
+
+@Table
+export default class FileCache extends Model<FileCache> {
+ @PrimaryKey
+ @Column
+ hash!: string;
+
+ @Column
+ kbits!: number;
+
+ @Column
+ accessedAt!: Date;
+}
diff --git a/src/models/index.ts b/src/models/index.ts
index d39a3dc..e3f7c0a 100644
--- a/src/models/index.ts
+++ b/src/models/index.ts
@@ -1,8 +1,10 @@
+import FileCache from './file-cache.js';
import KeyValueCache from './key-value-cache.js';
import Settings from './settings.js';
import Shortcut from './shortcut.js';
export {
+ FileCache,
KeyValueCache,
Settings,
Shortcut,
diff --git a/src/services/get-songs.ts b/src/services/get-songs.ts
index ba4401c..e7e3d5a 100644
--- a/src/services/get-songs.ts
+++ b/src/services/get-songs.ts
@@ -14,7 +14,7 @@ import {TYPES} from '../types.js';
import {cleanUrl} from '../utils/url.js';
import ThirdParty from './third-party.js';
import Config from './config.js';
-import CacheProvider from './cache.js';
+import KeyValueCacheProvider from './key-value-cache.js';
type QueuedSongWithoutChannel = Except<QueuedSong, 'addedInChannelId'>;
@@ -26,14 +26,14 @@ export default class {
private readonly youtube: YouTube;
private readonly youtubeKey: string;
private readonly spotify: Spotify;
- private readonly cache: CacheProvider;
+ private readonly cache: KeyValueCacheProvider;
private readonly ytsrQueue: PQueue;
constructor(
@inject(TYPES.ThirdParty) thirdParty: ThirdParty,
@inject(TYPES.Config) config: Config,
- @inject(TYPES.Cache) cache: CacheProvider) {
+ @inject(TYPES.KeyValueCache) cache: KeyValueCacheProvider) {
this.youtube = thirdParty.youtube;
this.youtubeKey = config.YOUTUBE_API_KEY;
this.spotify = thirdParty.spotify;
diff --git a/src/services/cache.ts b/src/services/key-value-cache.ts
index 95c6731..7f1164d 100644
--- a/src/services/cache.ts
+++ b/src/services/key-value-cache.ts
@@ -12,7 +12,7 @@ type Options = {
const futureTimeToDate = (time: Seconds) => new Date(new Date().getTime() + (time * 1000));
@injectable()
-export default class CacheProvider {
+export default class KeyValueCacheProvider {
async wrap<T extends [...any[], Options], F>(func: (...options: any) => Promise<F>, ...options: T): Promise<F> {
if (options.length === 0) {
throw new Error('Missing cache options');
diff --git a/src/types.ts b/src/types.ts
index 8bcd684..e6edd14 100644
--- a/src/types.ts
+++ b/src/types.ts
@@ -1,6 +1,7 @@
export const TYPES = {
Bot: Symbol('Bot'),
- Cache: Symbol('Cache'),
+ KeyValueCache: Symbol('KeyValueCache'),
+ FileCache: Symbol('FileCache'),
Client: Symbol('Client'),
Config: Symbol('Config'),
Command: Symbol('Command'),
diff --git a/src/utils/db.ts b/src/utils/db.ts
index f7d4fff..15a2d79 100644
--- a/src/utils/db.ts
+++ b/src/utils/db.ts
@@ -1,12 +1,12 @@
import {Sequelize} from 'sequelize-typescript';
import path from 'path';
import {DATA_DIR} from '../services/config.js';
-import {KeyValueCache, Settings, Shortcut} from '../models/index.js';
+import {FileCache, KeyValueCache, Settings, Shortcut} from '../models/index.js';
export const sequelize = new Sequelize({
dialect: 'sqlite',
database: 'muse',
storage: path.join(DATA_DIR, 'db.sqlite'),
- models: [KeyValueCache, Settings, Shortcut],
+ models: [FileCache, KeyValueCache, Settings, Shortcut],
logging: false,
});