Add demo mode

This commit is contained in:
rubikscraft 2022-02-25 14:13:19 +01:00
parent 2cf7bd4faa
commit fe6f5ef757
No known key found for this signature in database
GPG key ID: 1463EBE9200A5CD4
6 changed files with 66 additions and 4 deletions

View file

@ -6,6 +6,7 @@ import { ImageModule } from './routes/image/imageroute.module';
import { ServeStaticModule } from '@nestjs/serve-static';
import Config from './env';
import { ImageEntity } from './collections/imagedb/image.entity';
import { DemoManagerModule } from './managers/demo/demomanager.module';
@Module({
imports: [
@ -25,6 +26,7 @@ import { ImageEntity } from './collections/imagedb/image.entity';
}),
AuthModule,
ImageModule,
DemoManagerModule,
],
})
export class AppModule {}

View file

@ -4,7 +4,12 @@ import { Repository } from 'typeorm';
import { ImageEntity } from './image.entity';
import Crypto from 'crypto';
import { SupportedMime } from './mimes.service';
import { AsyncFailable, Fail, HasFailed, HasSuccess } from 'imagur-shared/dist/types';
import {
AsyncFailable,
Fail,
HasFailed,
HasSuccess,
} from 'imagur-shared/dist/types';
@Injectable()
export class ImageDBService {
@ -73,6 +78,15 @@ export class ImageDBService {
return true;
}
public async deleteAll(): AsyncFailable<true> {
try {
await this.imageRepository.delete({});
} catch (e: any) {
return Fail(e?.message);
}
return true;
}
private hash(image: Buffer): string {
return Crypto.createHash('sha256').update(image).digest('hex');
}

View file

@ -3,8 +3,10 @@ import { fileURLToPath } from 'url';
const packageRoot = resolve(dirname(fileURLToPath(import.meta.url)), '../');
const Config = {
host: process.env.IMAGUR_HOST || '0.0.0.0',
port: process.env.IMAGUR_PORT || 8080,
main: {
host: process.env.IMAGUR_HOST || '0.0.0.0',
port: process.env.IMAGUR_PORT || 8080,
},
database: {
host: process.env.IMAGUR_DB_HOST ?? 'localhost',
port: process.env.IMAGUR_DB_PORT
@ -38,6 +40,12 @@ const Config = {
join(packageRoot, '../frontend/dist'),
backendRoutes: ['i', 'api'],
},
demo: {
enabled: process.env.IMAGUR_DEMO?.toLowerCase() === 'true',
interval: process.env.IMAGUR_DEMO_INTERVAL
? parseInt(process.env.IMAGUR_DEMO_INTERVAL)
: 1000 * 60 * 5,
},
};
export default Config;

View file

@ -24,7 +24,7 @@ async function bootstrap() {
app.useGlobalFilters(new MainExceptionFilter());
app.useGlobalInterceptors(new SuccessInterceptor());
app.useGlobalPipes(new ValidationPipe({ disableErrorMessages: true }));
await app.listen(Config.port, Config.host);
await app.listen(Config.main.port, Config.main.host);
}
bootstrap().catch(console.error);

View file

@ -0,0 +1,20 @@
import { Module, OnModuleInit } from '@nestjs/common';
import { ImageDBModule } from '../../collections/imagedb/imagedb.module';
import Config from '../../env';
import { DemoManagerService } from './demomanager.service';
@Module({
imports: [ImageDBModule],
providers: [DemoManagerService],
})
export class DemoManagerModule implements OnModuleInit {
constructor(private readonly demoManagerService: DemoManagerService) {}
private interval: NodeJS.Timeout;
onModuleInit() {
if (Config.demo.enabled) {
setInterval(this.demoManagerService.execute, Config.demo.interval);
}
}
}

View file

@ -0,0 +1,18 @@
import { Injectable, Logger } from '@nestjs/common';
import { ImageDBService } from '../../collections/imagedb/imagedb.service';
@Injectable()
export class DemoManagerService {
private readonly logger = new Logger('DemoManagerService');
constructor(private readonly imagesService: ImageDBService) {}
private async executeAsync() {
this.logger.log('Executing demo cleanup');
await this.imagesService.deleteAll();
}
public execute() {
this.executeAsync().catch(this.logger.error);
}
}