186 lines
6.0 KiB
TypeScript
186 lines
6.0 KiB
TypeScript
import { Module } from '@nestjs/common';
|
|
import { APP_INTERCEPTOR } from '@nestjs/core';
|
|
import { LoggingInterceptor } from './logging';
|
|
import { AppController } from './app.controller';
|
|
import { AppService } from './app.service';
|
|
import { UserController } from './user/user.controller';
|
|
import { SystemController } from './system/system.controller';
|
|
import { WalletController } from './wallet/wallet.controller';
|
|
import { NodeController } from './node/node.controller';
|
|
import { BoardController } from './board/board.controller';
|
|
import { UserService } from './user/user.service';
|
|
import { BoardService } from './board/board.service';
|
|
import { NodeService } from './node/node.service';
|
|
import { SystemService } from './system/system.service';
|
|
import { WalletService } from './wallet/wallet.service';
|
|
import { PrismaModule } from './prisma.module';
|
|
import { FirebaseService } from './firebase/firebase.service';
|
|
import { FirebaseController } from './firebase/firebase.controller';
|
|
import { JwtStrategy } from './middleware/jwt.strategy';
|
|
import { AuthService } from './auth/auth.service';
|
|
import { JwtModule, JwtService } from '@nestjs/jwt';
|
|
import { ConfigModule, ConfigService } from '@nestjs/config';
|
|
import { PassportModule } from '@nestjs/passport';
|
|
import { ServeStaticModule } from '@nestjs/serve-static';
|
|
import { join } from 'path';
|
|
import { PrismaClient } from '@prisma/client';
|
|
import { ScheduleModule } from '@nestjs/schedule';
|
|
import { Node2AddressModule } from './node2address/node2address.module';
|
|
import { LockedCoinModule } from './locked-coin/locked-coin.module';
|
|
import { TranferHistoriesModule } from './transferhistories/transferhistories.module';
|
|
|
|
const prisma = new PrismaClient();
|
|
|
|
const DEFAULT_ADMIN = {
|
|
email: 'code@mnco.dev',
|
|
password: 'MnCo0310!!@@',
|
|
};
|
|
|
|
const authenticate = async (email: string, password: string) => {
|
|
if (email === DEFAULT_ADMIN.email && password === DEFAULT_ADMIN.password) {
|
|
return Promise.resolve(DEFAULT_ADMIN);
|
|
}
|
|
return null;
|
|
};
|
|
|
|
@Module({
|
|
imports: [
|
|
import('@adminjs/nestjs').then(({ AdminModule }) => {
|
|
return import('adminjs').then(async ({ AdminJS, ComponentLoader }) => {
|
|
const componentLoader = new ComponentLoader();
|
|
|
|
const Components = {
|
|
MyInput: componentLoader.add(
|
|
'MyInput',
|
|
'./components/DecimalComponent',
|
|
),
|
|
// other custom components
|
|
};
|
|
console.log(Components.MyInput);
|
|
return import('@adminjs/prisma').then((AdminJSTypeORM) => {
|
|
AdminJS.registerAdapter({
|
|
Database: AdminJSTypeORM.Database,
|
|
Resource: AdminJSTypeORM.Resource,
|
|
});
|
|
|
|
return AdminModule.createAdminAsync({
|
|
useFactory: () => ({
|
|
adminJsOptions: {
|
|
rootPath: '/admin',
|
|
resources: [
|
|
{
|
|
resource: {
|
|
model: AdminJSTypeORM.getModelByName('Node'),
|
|
client: prisma,
|
|
},
|
|
options: {
|
|
properties: {
|
|
balance: {
|
|
components: {
|
|
// list: Components.MyInput,
|
|
// show: Components.MyInput,
|
|
},
|
|
},
|
|
stakedBalance: {
|
|
components: {
|
|
// list: Components.MyInput,
|
|
// show: Components.MyInput,
|
|
},
|
|
},
|
|
computingPower: {
|
|
components: {
|
|
// list: Components.MyInput,
|
|
// show: Components.MyInput,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
{
|
|
resource: {
|
|
model: AdminJSTypeORM.getModelByName('User'),
|
|
client: prisma,
|
|
},
|
|
options: {},
|
|
},
|
|
{
|
|
resource: {
|
|
model: AdminJSTypeORM.getModelByName('Category'),
|
|
client: prisma,
|
|
},
|
|
options: {},
|
|
},
|
|
{
|
|
resource: {
|
|
model: AdminJSTypeORM.getModelByName('LockedCoin'),
|
|
client: prisma,
|
|
},
|
|
options: {},
|
|
},
|
|
],
|
|
componentLoader,
|
|
},
|
|
auth: {
|
|
authenticate,
|
|
cookieName: 'adminjs',
|
|
cookiePassword: 'secret!!',
|
|
},
|
|
sessionOptions: {
|
|
resave: true,
|
|
saveUninitialized: true,
|
|
secret: 'secret!!',
|
|
},
|
|
}),
|
|
});
|
|
});
|
|
});
|
|
}),
|
|
ScheduleModule.forRoot(),
|
|
PrismaModule,
|
|
ServeStaticModule.forRoot({
|
|
rootPath: join(__dirname, '..', 'static'),
|
|
exclude: ['/api*', '/admin*'],
|
|
}),
|
|
PassportModule.register({ defaultStrategy: 'jwt' }),
|
|
ConfigModule,
|
|
JwtModule.registerAsync({
|
|
useFactory: async () => ({
|
|
secretOrPrivateKey: 'MCNOWINS1010!!!!',
|
|
secret: 'MNCOWINS1010!!!!',
|
|
signOptions: {
|
|
expiresIn: `${600000}s`,
|
|
},
|
|
}),
|
|
}),
|
|
Node2AddressModule,
|
|
LockedCoinModule,
|
|
TranferHistoriesModule,
|
|
],
|
|
controllers: [
|
|
AppController,
|
|
UserController,
|
|
SystemController,
|
|
WalletController,
|
|
NodeController,
|
|
BoardController,
|
|
FirebaseController,
|
|
],
|
|
providers: [
|
|
AppService,
|
|
UserService,
|
|
BoardService,
|
|
NodeService,
|
|
SystemService,
|
|
WalletService,
|
|
FirebaseService,
|
|
AuthService,
|
|
JwtService,
|
|
JwtStrategy,
|
|
{
|
|
provide: APP_INTERCEPTOR,
|
|
useClass: LoggingInterceptor,
|
|
},
|
|
],
|
|
})
|
|
export class AppModule {}
|