You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tailchat/server/services/core/config.service.ts

89 lines
2.0 KiB
TypeScript

import _ from 'lodash';
import { TcService, TcPureContext, config } from 'tailchat-server-sdk';
/**
*
*/
class ConfigService extends TcService {
config = {}; // 自管理的配置项globalConfig是同步过来的
get serviceName(): string {
return 'config';
}
onInit(): void {
/**
*
*
* 使
*/
this.registerAction('client', this.client);
this.registerAction('all', this.all, {
visibility: 'public',
});
this.registerAction('get', this.get, {
visibility: 'public',
params: {
key: 'string',
},
});
this.registerAction('set', this.set, {
visibility: 'public',
params: {
key: 'string',
value: 'any',
},
});
this.registerAction('addToSet', this.addToSet, {
visibility: 'public',
params: {
key: 'string',
value: 'any',
},
});
this.registerAuthWhitelist(['/client']);
}
/**
*
*
* 使d
*/
async client(ctx: TcPureContext) {
return {
uploadFileLimit: config.storage.limit,
emailVerification: config.emailVerification,
};
}
async all(ctx: TcPureContext) {
return this.config;
}
async get(ctx: TcPureContext<{ key: string }>) {
return this.config[ctx.params.key] ?? null;
}
async set(ctx: TcPureContext<{ key: string; value: any }>) {
const { key, value } = ctx.params;
_.set(this.config, key, value);
await this.broker.broadcast('config.updated', { config: this.config });
}
/**
*
*/
async addToSet(ctx: TcPureContext<{ key: string; value: any }>) {
const { key, value } = ctx.params;
const originConfig = _.get(this.config, key) ?? [];
_.set(this.config, key, _.uniq([...originConfig, value]));
await this.broker.broadcast('config.updated', { config: this.config });
}
}
export default ConfigService;