Skip to content
This repository was archived by the owner on Apr 12, 2022. It is now read-only.

Commit b30120a

Browse files
committed
config service
1 parent e871466 commit b30120a

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

72 files changed

+324
-110
lines changed

jojo/anilist/index.h.ts

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
export interface IAnilistConfig {
2+
id: string
3+
secret: string
4+
}

jojo/anilist/index.ts

+1
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
11
export { AnilistService, IAnilistItem } from './services/AnilistService';
2+
export { IAnilistConfig } from './index.h';

jojo/anilist/services/AnilistService.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11

2-
import { Service } from 'jojo-typedi';
2+
import { Service } from 'jojo-base';
33
import { DateTime } from 'luxon';
44
import request from 'request-promise-native';
55
import { Series, SeriesType } from '../../../src/core/database/postgresql/models/Series';

jojo/base/index.ts

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
export * from 'typedi';
2+
export * from 'routing-controllers';
3+
4+
export { BaseConfigService } from './services/BaseConfigService';
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
{
2-
"name": "jojo-typedi",
2+
"name": "jojo-base",
33
"version": "1.0.0",
44
"main": "index.js",
55
"private": true,
66
"dependencies": {
77
"class-transformer": "^0.2.3",
88
"class-validator": "^0.11.0",
99
"routing-controllers": "^0.8.0",
10-
"typedi": "^0.8.0"
10+
"typedi": "^0.8.0",
11+
"errorjs": "^1.0.2"
1112
},
1213
"devDependencies": {}
1314
}
+25
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import { errors } from 'errorjs';
2+
import { Service } from 'jojo-base';
3+
4+
@Service()
5+
export class BaseConfigService<T extends Object> {
6+
private config: T
7+
8+
constructor(filename: string) {
9+
try {
10+
const config = require(filename)
11+
this.config = config
12+
} catch (e) {
13+
console.error(e)
14+
process.exit()
15+
}
16+
}
17+
18+
getConfig<K extends keyof T>(name: K) {
19+
const moduleConfig = this.config[name]
20+
if (!moduleConfig) {
21+
throw new errors.NotFoundError(`${name}_config_not_found`)
22+
}
23+
return moduleConfig
24+
}
25+
}

jojo/base/tsconfig.json

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
"extends": "../../tsconfig.json"
3+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
export interface IHorribleSubsConfig {
2+
blacklist: RegExp[]
3+
rss: string
4+
delayDays: number
5+
}

jojo/horribleSubs/index.ts

+1
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
11
export { HorribleSubsService, IHorribleSubsItem } from './services/HorribleSubsService';
2+
export { IHorribleSubsConfig } from './headers/horriblesubs.h';
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import { BaseConfigService, Container } from 'jojo-base';
2+
import { Service } from 'jojo-base';
3+
import { IHorribleSubsConfig } from '../headers/horriblesubs.h';
4+
5+
interface IConfig {
6+
horribleSubs: IHorribleSubsConfig
7+
}
8+
9+
@Service()
10+
export class ConfigService extends BaseConfigService<IConfig> {
11+
constructor() {
12+
super(Container.get('project_config_filepath'))
13+
}
14+
}

jojo/horribleSubs/services/HorribleSubsService.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
import { Service } from 'jojo-typedi'
1+
import { Service } from 'jojo-base'
22
import log4js from 'log4js'
33
import { DateTime } from 'luxon'
44
import Parser from 'rss-parser'
5-
import { ConfigService } from '../../../src/core/services/ConfigService'
5+
import { ConfigService } from './ConfigService'
66

77
const logger = log4js.getLogger('Automator:Service:HorribleSubsService')
88
logger.level = 'debug'
@@ -26,7 +26,7 @@ export class HorribleSubsService {
2626

2727
async fetchRss(limit: number = Number.MAX_VALUE) {
2828
logger.info('fetch HorribleSubs data')
29-
const { blacklist, rss, delayDays } = this.configService.config.horribleSubs
29+
const { blacklist, rss, delayDays } = this.configService.getConfig("horribleSubs")
3030
const parser = new Parser()
3131
try {
3232
const feed = await parser.parseURL(rss) as { items: IHorribleSubsItem[] }

jojo/minio/headers/minio.h.ts

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
import * as Minio from 'minio'
2+
type IMinioConfig = Minio.ClientOptions
3+
export { IMinioConfig }

jojo/minio/index.ts

+1
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
11
export { MinioService } from './services/MinioService';
2+
export { IMinioConfig } from './headers/minio.h';

jojo/minio/services/ConfigService.ts

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import { BaseConfigService, Container } from 'jojo-base';
2+
import { Service } from 'jojo-base';
3+
import { IMinioConfig } from '../headers/minio.h';
4+
5+
interface IConfig {
6+
minio: IMinioConfig
7+
}
8+
9+
@Service()
10+
export class ConfigService extends BaseConfigService<IConfig> {
11+
constructor() {
12+
super(Container.get('project_config_filepath'))
13+
}
14+
}

jojo/minio/services/MinioService.ts

+4-10
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,13 @@
1-
import { Service } from 'jojo-typedi'
1+
import { Service } from 'jojo-base'
22
import * as Minio from 'minio'
3-
import { ConfigService } from '../../../src/core/services/ConfigService'
3+
import { ConfigService } from './ConfigService'
44

55
@Service()
66
export class MinioService {
77
public minio: Minio.Client
88

99
constructor(configService: ConfigService) {
10-
const config = configService.config.minio
11-
this.minio = new Minio.Client({
12-
endPoint: config.endpoint,
13-
port: config.port,
14-
useSSL: config.useSSL,
15-
accessKey: config.accessKey,
16-
secretKey: config.secretKey,
17-
})
10+
const config = configService.getConfig("minio")
11+
this.minio = new Minio.Client(config)
1812
}
1913
}

jojo/mongodb/headers/mongodb.h.ts

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
export interface IMongodbConfig {
2+
url: string
3+
}

jojo/mongodb/index.ts

+1
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,4 @@ export { ObjectId } from 'mongodb';
55
import autoIncrement from 'mongoose-auto-increment'
66
import findOrCreate from 'mongoose-findorcreate'
77
export { findOrCreate, autoIncrement }
8+
export { IMongodbConfig } from './headers/mongodb.h'
+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import { BaseConfigService, Container } from 'jojo-base';
2+
import { Service } from 'jojo-base';
3+
import { IMongodbConfig } from '../headers/mongodb.h';
4+
5+
interface IConfig {
6+
mongodb: IMongodbConfig
7+
}
8+
9+
@Service()
10+
export class ConfigService extends BaseConfigService<IConfig> {
11+
constructor() {
12+
super(Container.get('project_config_filepath'))
13+
}
14+
}

jojo/mongodb/services/MongodbService.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
import { Container, Service } from 'jojo-typedi'
1+
import { Container, Service } from 'jojo-base'
22
import mongoose from 'mongoose'
33
import autoIncrement from 'mongoose-auto-increment'
4-
import { ConfigService } from '../../../src/core/services/ConfigService'
4+
import { ConfigService } from './ConfigService'
55

66
mongoose.Promise = global.Promise
77

@@ -13,8 +13,8 @@ export class MongodbService {
1313
this.mongoose = mongoose
1414
mongoose.set('useCreateIndex', true)
1515
mongoose.set('useFindAndModify', false)
16-
const mongodbConfig = configService.config.mongodb
17-
mongoose.connect(mongodbConfig.url, { useNewUrlParser: true }).then(() => {
16+
const config = configService.getConfig("mongodb")
17+
mongoose.connect(config.url, { useNewUrlParser: true }).then(() => {
1818
autoIncrement.initialize(mongoose.connection)
1919
}).catch((err) => console.error(err))
2020
}

jojo/sequelize/headers/sequelize.h.ts

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
import { SequelizeOptions } from 'sequelize-typescript'
2+
type ISequelizeConfig = SequelizeOptions
3+
export { ISequelizeConfig }
+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import { BaseConfigService, Container } from 'jojo-base';
2+
import { Service } from 'jojo-base';
3+
import { ISequelizeConfig } from '../headers/sequelize.h';
4+
5+
interface IConfig {
6+
sequelize: ISequelizeConfig
7+
}
8+
9+
@Service()
10+
export class ConfigService extends BaseConfigService<IConfig> {
11+
constructor() {
12+
super(Container.get('project_config_filepath'))
13+
}
14+
}

jojo/sequelize/services/SequelizeService.ts

+9-9
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,20 @@
1-
import { Service } from 'jojo-typedi'
1+
import { Service } from 'jojo-base'
22
import { Sequelize } from 'sequelize-typescript'
3-
import { ConfigService } from '../../../src/core/services/ConfigService'
3+
import { ConfigService } from './ConfigService'
44

55
@Service()
66
export class SequelizeService {
77
public sequelize: Sequelize
88

99
constructor(configService: ConfigService) {
10-
const sequelizeConfig = configService.config.sequelize
10+
const config = configService.getConfig("sequelize")
1111
this.sequelize = new Sequelize({
12-
database: sequelizeConfig.database,
13-
dialect: sequelizeConfig.dialect,
14-
username: sequelizeConfig.username,
15-
password: sequelizeConfig.password,
16-
port: sequelizeConfig.port,
17-
host: sequelizeConfig.host,
12+
database: config.database,
13+
dialect: config.dialect,
14+
username: config.username,
15+
password: config.password,
16+
port: config.port,
17+
host: config.host,
1818
models: [],
1919
})
2020
}

jojo/telegram/index.h.ts

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
export interface ITelegramConfig {
2+
apiToken: string
3+
}
+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import { BaseConfigService, Container } from 'jojo-base';
2+
import { Service } from 'jojo-base';
3+
import { ITelegramConfig } from '../index.h';
4+
5+
interface IConfig {
6+
telegram: ITelegramConfig
7+
}
8+
9+
@Service()
10+
export class ConfigService extends BaseConfigService<IConfig> {
11+
constructor() {
12+
super(Container.get('project_config_filepath'))
13+
}
14+
}
+3-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
import { Service } from 'jojo-typedi'
1+
import { Service } from 'jojo-base'
22
import Telegraf, { ContextMessageUpdate } from 'telegraf'
3-
import { ConfigService } from '../../../src/core/services/ConfigService'
3+
import { ConfigService } from './ConfigService'
44

55
@Service()
66
export class TelegramService {
@@ -9,7 +9,7 @@ export class TelegramService {
99
constructor(
1010
private configService: ConfigService
1111
) {
12-
const config = this.configService.config.bot.telegram
12+
const config = this.configService.getConfig('telegram')
1313
this.tg = new Telegraf(config.apiToken)
1414
}
1515
}

jojo/tracemoe/headers/tracemoe.h.ts

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
export interface ITraceMoeConfig {
2+
url: string
3+
token: string
4+
}

jojo/tracemoe/index.ts

+1
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
11
export { TraceMoeService, ITraceMoeDoc, ITraceMoeItem } from './services/TraceMoeService';
2+
export { ITraceMoeConfig } from './headers/tracemoe.h';
+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import { BaseConfigService, Container } from 'jojo-base';
2+
import { Service } from 'jojo-base';
3+
import { ITraceMoeConfig } from '../headers/tracemoe.h';
4+
5+
interface IConfig {
6+
traceMoe: ITraceMoeConfig
7+
}
8+
9+
@Service()
10+
export class ConfigService extends BaseConfigService<IConfig> {
11+
constructor() {
12+
super(Container.get('project_config_filepath'))
13+
}
14+
}

jojo/tracemoe/services/TraceMoeService.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
import { Service } from 'jojo-typedi'
1+
import { Service } from 'jojo-base'
22
import request from 'request-promise-native'
33
import { getBase64 } from '../../../src/automator/utils/getBase64'
4-
import { ConfigService } from '../../../src/core/services/ConfigService'
4+
import { ConfigService } from './ConfigService'
55

66
export interface ITraceMoeDoc {
77
from: number
@@ -44,7 +44,7 @@ export class TraceMoeService {
4444
) {}
4545

4646
async searchImage(file: Buffer): Promise<ITraceMoeItem> {
47-
const { url, token } = this.configService.config.traceMoe
47+
const { url, token } = this.configService.getConfig("traceMoe")
4848
const base64image = await getBase64(file)
4949
const result = await request.post({
5050
url: `${url}?token=${token}`,
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
export interface ITransmissionConfig {
2+
host: string
3+
port: number
4+
username: string
5+
password: string
6+
ssl: boolean
7+
url: string,
8+
downloadDir: string
9+
}

jojo/transmission/index.ts

+1
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
11
export { TransmissionService, TransmissionStatus } from './services/TransmissionService';
2+
export { ITransmissionConfig } from './headers/transmission.h';
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import { BaseConfigService, Container } from 'jojo-base';
2+
import { Service } from 'jojo-base';
3+
import { ITransmissionConfig } from '../headers/transmission.h';
4+
5+
interface IConfig {
6+
transmission: ITransmissionConfig
7+
}
8+
9+
@Service()
10+
export class ConfigService extends BaseConfigService<IConfig> {
11+
constructor() {
12+
super(Container.get('project_config_filepath'))
13+
}
14+
}

0 commit comments

Comments
 (0)