Files
gitactionTest/src/app.module.ts
2025-09-05 11:09:58 +09:00

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 {}