mirror of
https://github.com/MrSedan/neuro-reply-website.git
synced 2026-01-14 12:49:41 +03:00
Added settings module
This commit is contained in:
@@ -8,6 +8,7 @@ import { ImageModule } from './modules/image/image.module';
|
||||
import { AppInitService } from './modules/initialization/app.init.service';
|
||||
import { PostModule } from './modules/post/post.module';
|
||||
import { ProxyModule } from './modules/proxy/proxy.module';
|
||||
import { SettingsModule } from './modules/settings/settings.module';
|
||||
import { UserModule } from './modules/user/user.module';
|
||||
|
||||
@Module({
|
||||
@@ -18,6 +19,7 @@ import { UserModule } from './modules/user/user.module';
|
||||
UserModule,
|
||||
ImageModule,
|
||||
ProxyModule,
|
||||
SettingsModule,
|
||||
TypeOrmModule.forRoot(<TypeOrmModuleOptions>config.database),
|
||||
],
|
||||
controllers: [AppController],
|
||||
|
||||
@@ -3,6 +3,7 @@ import { InjectRepository } from '@nestjs/typeorm';
|
||||
import { Admin } from 'libs/database/admin.entity';
|
||||
import { Image } from 'libs/database/image.entity';
|
||||
import { Post } from 'libs/database/post.entity';
|
||||
import { BotSettings } from 'libs/database/settings.entity';
|
||||
import { User } from 'libs/database/user.entity';
|
||||
import { Repository } from 'typeorm';
|
||||
|
||||
@@ -13,6 +14,7 @@ export class AppInitService implements OnModuleInit {
|
||||
@InjectRepository(Admin) private adminRepository: Repository<Admin>,
|
||||
@InjectRepository(Post) private postRepository: Repository<Post>,
|
||||
@InjectRepository(Image) private ImageRepository: Repository<Image>,
|
||||
@InjectRepository(BotSettings) private BotSettingsRepository: Repository<BotSettings>,
|
||||
) {}
|
||||
|
||||
async onModuleInit() {}
|
||||
|
||||
40
backend/src/modules/settings/settings.controller.ts
Normal file
40
backend/src/modules/settings/settings.controller.ts
Normal file
@@ -0,0 +1,40 @@
|
||||
import { Body, Controller, Delete, Get, Param, Post } from '@nestjs/common';
|
||||
import { ApiOperation, ApiTags } from '@nestjs/swagger';
|
||||
import { ICreateBotSettingsProfile, IEditBotSettingsProfile } from './settings.dto';
|
||||
import { SettingsService } from './settings.service';
|
||||
|
||||
@ApiTags('Settings')
|
||||
@Controller('settings')
|
||||
export class SettingsController {
|
||||
constructor(private settingsService: SettingsService) {}
|
||||
|
||||
@ApiOperation({ description: 'Get settings for bot' })
|
||||
@Get()
|
||||
async getSettings() {
|
||||
return await this.settingsService.getSettings();
|
||||
}
|
||||
|
||||
@ApiOperation({ description: 'Get all bot settings profiles' })
|
||||
@Get('profile')
|
||||
async getProfiles() {
|
||||
return await this.settingsService.getProfiles();
|
||||
}
|
||||
|
||||
@ApiOperation({ description: 'Create new settings profile' })
|
||||
@Post('profile/new')
|
||||
async newProfile(@Body() data: ICreateBotSettingsProfile) {
|
||||
return await this.settingsService.newProfile(data);
|
||||
}
|
||||
|
||||
@ApiOperation({ description: 'Edit settings profile' })
|
||||
@Post('profile/edit')
|
||||
async editProfile(@Body() data: IEditBotSettingsProfile) {
|
||||
return await this.settingsService.editProfile(data);
|
||||
}
|
||||
|
||||
@ApiOperation({ description: 'Delete settings profile' })
|
||||
@Delete('profile/delete/:uuid')
|
||||
async deleteProfile(@Param('uuid') uuid: string) {
|
||||
return await this.settingsService.deleteProfile(uuid);
|
||||
}
|
||||
}
|
||||
13
backend/src/modules/settings/settings.dto.ts
Normal file
13
backend/src/modules/settings/settings.dto.ts
Normal file
@@ -0,0 +1,13 @@
|
||||
import { ApiProperty } from '@nestjs/swagger';
|
||||
|
||||
export class ICreateBotSettingsProfile {
|
||||
@ApiProperty({ description: 'Channel', example: '@neurowoman_test' }) readonly channel: string;
|
||||
@ApiProperty({ description: 'Post times', example: ['12:00', '14:00'] }) readonly postTimes: string[];
|
||||
}
|
||||
|
||||
export class IEditBotSettingsProfile {
|
||||
@ApiProperty({ description: 'Channel', example: '@neurowoman_test' }) readonly channel: string | undefined;
|
||||
@ApiProperty({ description: 'Profile uuid', example: '96e7d1b3-20ca-46e8-ac68-e406f79b7eb9' }) readonly uuid: string;
|
||||
@ApiProperty({ description: 'Post times', example: ['12:00', '14:00'] }) readonly postTimes: string[] | undefined;
|
||||
@ApiProperty({ description: 'Is active?', example: false }) readonly isActive: boolean | undefined;
|
||||
}
|
||||
11
backend/src/modules/settings/settings.module.ts
Normal file
11
backend/src/modules/settings/settings.module.ts
Normal file
@@ -0,0 +1,11 @@
|
||||
import { Module } from '@nestjs/common';
|
||||
import { LibsModule } from 'libs/libs.module';
|
||||
import { SettingsController } from './settings.controller';
|
||||
import { SettingsService } from './settings.service';
|
||||
|
||||
@Module({
|
||||
imports: [LibsModule],
|
||||
controllers: [SettingsController],
|
||||
providers: [SettingsService],
|
||||
})
|
||||
export class SettingsModule {}
|
||||
62
backend/src/modules/settings/settings.service.ts
Normal file
62
backend/src/modules/settings/settings.service.ts
Normal file
@@ -0,0 +1,62 @@
|
||||
import { HttpException, Injectable, Logger } from '@nestjs/common';
|
||||
import { InjectRepository } from '@nestjs/typeorm';
|
||||
import { BotSettings } from 'libs/database/settings.entity';
|
||||
import { Repository } from 'typeorm';
|
||||
import { ICreateBotSettingsProfile, IEditBotSettingsProfile } from './settings.dto';
|
||||
@Injectable()
|
||||
export class SettingsService {
|
||||
constructor(@InjectRepository(BotSettings) private botSettingsRepository: Repository<BotSettings>) {}
|
||||
private readonly logger: Logger = new Logger(SettingsService.name);
|
||||
|
||||
async getSettings() {
|
||||
this.logger.log('[settings.getSettings]');
|
||||
const settings = await this.botSettingsRepository.findOneBy({ isActive: true });
|
||||
if (settings) return settings;
|
||||
this.logger.debug(`[settings.getSettings] No active settings found`);
|
||||
throw new HttpException('No settings found', 404);
|
||||
}
|
||||
|
||||
async newProfile(data: ICreateBotSettingsProfile) {
|
||||
this.logger.log(`[settings.newProfile] data: ${JSON.stringify(data)}`);
|
||||
return await this.botSettingsRepository.save({ channel: data.channel, messageTimes: data.postTimes });
|
||||
}
|
||||
|
||||
async getProfiles() {
|
||||
this.logger.log(`[settings.getProfiles]`);
|
||||
return await this.botSettingsRepository.find();
|
||||
}
|
||||
|
||||
async editProfile(data: IEditBotSettingsProfile) {
|
||||
this.logger.log(`[settings.editProfile] data: ${JSON.stringify(data)}`);
|
||||
const editProfile = await this.botSettingsRepository.findOneBy({ uuid: data.uuid });
|
||||
if (!editProfile) {
|
||||
this.logger.debug(`[settings.editProfile] No profile found`);
|
||||
throw new HttpException('No profile found', 404);
|
||||
}
|
||||
data.channel ? (editProfile.channel = data.channel) : '';
|
||||
data.postTimes ? (editProfile.messageTimes = data.postTimes) : '';
|
||||
if (data.isActive !== undefined) {
|
||||
editProfile.isActive = data.isActive;
|
||||
if (data.isActive) {
|
||||
const nowActive = await this.botSettingsRepository.findOneBy({ isActive: true });
|
||||
nowActive.isActive = false;
|
||||
await this.botSettingsRepository.save(nowActive);
|
||||
}
|
||||
}
|
||||
return await this.botSettingsRepository.save(editProfile);
|
||||
}
|
||||
|
||||
async deleteProfile(profile_uuid: string) {
|
||||
this.logger.log(`[settings.deleteProfile] uuid: ${profile_uuid}`);
|
||||
const deleteProfile = await this.botSettingsRepository.findOneBy({ uuid: profile_uuid });
|
||||
if (!deleteProfile) {
|
||||
this.logger.debug(`[settings.deleteProfile] No profile found`);
|
||||
throw new HttpException('No profile found', 404);
|
||||
}
|
||||
if (deleteProfile.isActive) {
|
||||
this.logger.debug(`[settings.deleteProfile] Can't delete active profile`);
|
||||
throw new HttpException("Can't delete active profile", 400);
|
||||
}
|
||||
return await this.botSettingsRepository.delete(deleteProfile.uuid);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user