From 88d237b0c77fa5f1462ac511ba4ea9d43c3be862 Mon Sep 17 00:00:00 2001 From: fzk <458813868@qq.com> Date: Mon, 18 Dec 2023 15:26:42 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E9=85=8D=E7=BD=AE=E5=88=9D=E5=A7=8B=20b?= =?UTF-8?q?ug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../desktop/electron/main/serverProcess.ts | 2 +- .../desktop/electron/preload/electronAPI.ts | 1 + packages/desktop/electron/win/viewVideoWin.ts | 4 +++- packages/server/CHANGELOG.md | 4 ++++ packages/server/src/app/app.service.ts | 7 +++--- packages/server/src/app/file.controller.ts | 2 +- packages/server/src/config/index.ts | 8 +++++-- .../src/records/dto/create-record.dto.ts | 4 ++-- .../src/records/entity/record.entity.ts | 13 +++++----- .../src/settings/entity/setting.entity.ts | 7 +++--- .../src/settings/settings.controller.ts | 6 +++++ .../server/src/settings/settings.module.ts | 3 --- .../server/src/settings/settings.service.ts | 24 +++++++++++++++++++ .../server/src/users/entity/user.entity.ts | 8 +++---- packages/server/src/users/users.service.ts | 9 +++++-- packages/web/src/api/setting.ts | 2 +- .../recorderScreen/ScreenRecorder.tsx | 3 ++- 17 files changed, 75 insertions(+), 32 deletions(-) diff --git a/packages/desktop/electron/main/serverProcess.ts b/packages/desktop/electron/main/serverProcess.ts index 8b6082d8..e770f5d7 100644 --- a/packages/desktop/electron/main/serverProcess.ts +++ b/packages/desktop/electron/main/serverProcess.ts @@ -21,5 +21,5 @@ export function initServerProcess() { } export function quitServerProcess() { - serverProcess?.kill(); + url || serverProcess?.kill(); } diff --git a/packages/desktop/electron/preload/electronAPI.ts b/packages/desktop/electron/preload/electronAPI.ts index 9991e0c9..72395f6e 100644 --- a/packages/desktop/electron/preload/electronAPI.ts +++ b/packages/desktop/electron/preload/electronAPI.ts @@ -78,6 +78,7 @@ contextBridge.exposeInMainWorld('electronAPI', { //vvWin sendVvOpenWin: (search?: string) => ipcRenderer.send('vv:open-win', search), + sendVvCloseWin: () => ipcRenderer.send('vv:close-win'), invokeVvGetHistoryVideo: () => ipcRenderer.invoke('vv:get-historyVideo'), sendVvSetHistoryVideo: (img: string) => ipcRenderer.send('vv:set-historyVideo', img), diff --git a/packages/desktop/electron/win/viewVideoWin.ts b/packages/desktop/electron/win/viewVideoWin.ts index 599f4a67..c42b17b3 100644 --- a/packages/desktop/electron/win/viewVideoWin.ts +++ b/packages/desktop/electron/win/viewVideoWin.ts @@ -43,7 +43,9 @@ function openViewVideoWin(search?: any) { } function closeViewVideoWin() { - viewVideoWin?.close(); + if (!(viewVideoWin && viewVideoWin.isDestroyed())) { + viewVideoWin?.close(); + } viewVideoWin = null; } diff --git a/packages/server/CHANGELOG.md b/packages/server/CHANGELOG.md index 1aba1e1f..d8606d82 100644 --- a/packages/server/CHANGELOG.md +++ b/packages/server/CHANGELOG.md @@ -1,5 +1,9 @@ # @pear-rec/server +## 1.3.2 + +fix: 配置初始 bug + ## 1.3.1 fix: 接口代理、上传文件 diff --git a/packages/server/src/app/app.service.ts b/packages/server/src/app/app.service.ts index 2ed27d3f..1cfcdfd8 100644 --- a/packages/server/src/app/app.service.ts +++ b/packages/server/src/app/app.service.ts @@ -15,12 +15,13 @@ export class AppService { return 'Hello World!'; } - async uploadFile(fileDto, userId: number): Promise { - const user = await this.usersService.findOne(userId); + async uploadFile(file: Express.Multer.File, fileDto: CreateFileDto): Promise { + const user = await this.usersService.findOne(fileDto.userId); let record = { - filePath: fileDto.path, + filePath: file.path, fileType: fileDto.type, user: user, + createdBy: user.id, }; return this.recordsService.create(record); diff --git a/packages/server/src/app/file.controller.ts b/packages/server/src/app/file.controller.ts index 87a16de0..47b778c6 100644 --- a/packages/server/src/app/file.controller.ts +++ b/packages/server/src/app/file.controller.ts @@ -30,6 +30,6 @@ export class FileController { @UploadedFile() file: Express.Multer.File, @Body() createFileDto: CreateFileDto, ): Promise { - return this.appService.uploadFile(file, createFileDto.userId); + return this.appService.uploadFile(file, createFileDto); } } diff --git a/packages/server/src/config/index.ts b/packages/server/src/config/index.ts index 1492a596..81b2d869 100644 --- a/packages/server/src/config/index.ts +++ b/packages/server/src/config/index.ts @@ -1,13 +1,17 @@ import * as jsonfile from 'jsonfile'; import * as fs from 'node:fs'; +import * as path from 'node:path'; import { v5 as uuidv5 } from 'uuid'; import dayjs from 'dayjs'; -import { PEAR_FILES_PATH, CONFIG_FILE_PATH, DEFAULT_CONFIG_FILE_PATH } from '../contract'; +import { PEAR_FILES_PATH, DB_PATH, CONFIG_FILE_PATH, DEFAULT_CONFIG_FILE_PATH } from '../contract'; export function initConfig() { if (!fs.existsSync(PEAR_FILES_PATH)) { fs.mkdirSync(PEAR_FILES_PATH, { recursive: true }); } + if (!fs.existsSync(path.dirname(DB_PATH))) { + fs.mkdirSync(path.dirname(DB_PATH), { recursive: true }); + } fs.access(DEFAULT_CONFIG_FILE_PATH, fs.constants.F_OK, (err) => { if (err) { initDefaultConfig(); @@ -22,7 +26,7 @@ function initDefaultConfig() { uuid: uuidv5('https://www.w3.org/', uuidv5.URL), userName: `pear-rec:user`, userType: 1, - createdAt: dayjs().format(), + createdAt: dayjs(new Date()).format(), }, isProxy: false, proxyPort: '7890', diff --git a/packages/server/src/records/dto/create-record.dto.ts b/packages/server/src/records/dto/create-record.dto.ts index dd789011..e35de7e6 100644 --- a/packages/server/src/records/dto/create-record.dto.ts +++ b/packages/server/src/records/dto/create-record.dto.ts @@ -11,9 +11,9 @@ export class CreateRecordDto { createdAt?: Date; - createdBy?: string; + createdBy?: number; updatedAt?: Date; - updatedBy?: string; + updatedBy?: number; } diff --git a/packages/server/src/records/entity/record.entity.ts b/packages/server/src/records/entity/record.entity.ts index 2da16248..3d2fb82b 100644 --- a/packages/server/src/records/entity/record.entity.ts +++ b/packages/server/src/records/entity/record.entity.ts @@ -13,7 +13,6 @@ import { IUser } from '../../users/interfaces/user.interface'; @Entity() export class Record { - user: IUser; @PrimaryGeneratedColumn() id: number; @@ -29,15 +28,15 @@ export class Record { @CreateDateColumn({ nullable: true }) createdAt?: Date; - @Column('varchar', { nullable: true }) - createdBy?: string; + @Column('int', { nullable: true }) + createdBy?: number; @UpdateDateColumn({ nullable: true }) updatedAt?: Date; - @Column('varchar', { nullable: true }) - updatedBy?: string; + @Column('int', { nullable: true }) + updatedBy?: number; - // @ManyToOne(() => User, (user) => user.records) - // user: IUser; + @ManyToOne(() => User, (user) => user.records) + user: IUser; } diff --git a/packages/server/src/settings/entity/setting.entity.ts b/packages/server/src/settings/entity/setting.entity.ts index 5e9e815a..7e83b49b 100644 --- a/packages/server/src/settings/entity/setting.entity.ts +++ b/packages/server/src/settings/entity/setting.entity.ts @@ -13,7 +13,6 @@ import { ISetting } from '../interfaces/setting.interface'; @Entity() export class Setting implements ISetting { - user: IUser; @PrimaryGeneratedColumn() id: number; @@ -53,7 +52,7 @@ export class Setting implements ISetting { @Column('varchar', { nullable: true }) updatedBy: string; - // @OneToOne(() => User, (user) => user.setting) - // @JoinColumn() - // user: IUser; + @OneToOne(() => User, (user) => user.setting) + @JoinColumn() + user: IUser; } diff --git a/packages/server/src/settings/settings.controller.ts b/packages/server/src/settings/settings.controller.ts index fca6bc98..184fe035 100644 --- a/packages/server/src/settings/settings.controller.ts +++ b/packages/server/src/settings/settings.controller.ts @@ -1,6 +1,7 @@ import { Controller, Get, Post, Body, Param, UseInterceptors } from '@nestjs/common'; import { CreateSettingDto } from './dto/create-setting.dto'; import { SettingsService } from './settings.service'; +import { UsersService } from 'src/users/users.service'; import { Setting } from './entity/setting.entity'; @Controller('settings') @@ -17,6 +18,11 @@ export class SettingsController { return this.settingsService.findAll(); } + @Get('user/:id') + async findOneByUserId(@Param('id') userId: number): Promise { + return this.settingsService.findOneByUserId(userId); + } + @Get(':id') findOne(@Param('id') id: number): Promise { return this.settingsService.findOne(id); diff --git a/packages/server/src/settings/settings.module.ts b/packages/server/src/settings/settings.module.ts index 94f95b5d..7d955875 100644 --- a/packages/server/src/settings/settings.module.ts +++ b/packages/server/src/settings/settings.module.ts @@ -1,13 +1,10 @@ import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; -// import { DatabaseModule } from '../database/database.module'; import { SettingsController } from './settings.controller'; import { SettingsService } from './settings.service'; import { Setting } from './entity/setting.entity'; -// import { settingsProviders } from './settings.providers'; @Module({ - // imports: [DatabaseModule], imports: [TypeOrmModule.forFeature([Setting])], controllers: [SettingsController], providers: [SettingsService], diff --git a/packages/server/src/settings/settings.service.ts b/packages/server/src/settings/settings.service.ts index 8d8567cd..53f6cd9a 100644 --- a/packages/server/src/settings/settings.service.ts +++ b/packages/server/src/settings/settings.service.ts @@ -23,6 +23,30 @@ export class SettingsService { return await this.settingRepository.findOneBy({ id }); } + async findOneByUserId(userId: number): Promise { + let setting = await this.settingRepository + .createQueryBuilder('setting') + .leftJoinAndSelect('setting.user', 'user') + .where('user.id = :id', { id: userId }) + .getOne(); + + if (setting == null) { + const defaultConfig = getDefaultConfig(); + setting = { + isProxy: defaultConfig.isProxy, + proxyPort: defaultConfig.proxyPort, + language: defaultConfig.language, + filePath: defaultConfig.filePath, + openAtLogin: defaultConfig.openAtLogin, + serverPath: defaultConfig.serverPath, + } as any; + + return await this.settingRepository.save(setting); + } else { + return setting; + } + } + async update(id: number, setting: Setting): Promise { await this.settingRepository.update(id, setting); return await this.settingRepository.findOneBy({ id }); diff --git a/packages/server/src/users/entity/user.entity.ts b/packages/server/src/users/entity/user.entity.ts index 7a42181b..50275dc2 100644 --- a/packages/server/src/users/entity/user.entity.ts +++ b/packages/server/src/users/entity/user.entity.ts @@ -42,9 +42,9 @@ export class User implements IUser { @Column('varchar', { nullable: true }) updatedBy: string; - // @OneToMany(() => Record, (record) => record.user) - // records: Record[]; + @OneToMany(() => Record, (record) => record.user) + records: Record[]; - // @OneToOne(() => Setting, (setting) => setting.user) - // setting: Setting; + @OneToOne(() => Setting, (setting) => setting.user) + setting: Setting; } diff --git a/packages/server/src/users/users.service.ts b/packages/server/src/users/users.service.ts index 551610ff..340121a9 100644 --- a/packages/server/src/users/users.service.ts +++ b/packages/server/src/users/users.service.ts @@ -15,9 +15,14 @@ export class UsersService { return this.usersRepository.find(); } - findCurrent(): Promise { + async findCurrent(): Promise { const config = getConfig(); - return this.usersRepository.findOneBy({ uuid: config.user.uuid }); + let user = await this.usersRepository.findOneBy({ uuid: config.user.uuid }); + if (user == null) { + return await this.usersRepository.save(config.user); + } else { + return user; + } } findOne(id: number): Promise { diff --git a/packages/web/src/api/setting.ts b/packages/web/src/api/setting.ts index 95305619..8bb81bb2 100644 --- a/packages/web/src/api/setting.ts +++ b/packages/web/src/api/setting.ts @@ -4,7 +4,7 @@ export function useSettingApi() { return { getSetting: (userId: string) => { return request({ - url: `/settings/${userId}`, + url: `/settings/user/${userId}`, method: 'get', }); }, diff --git a/packages/web/src/components/recorderScreen/ScreenRecorder.tsx b/packages/web/src/components/recorderScreen/ScreenRecorder.tsx index 69f8c3ed..b0f916fe 100644 --- a/packages/web/src/components/recorderScreen/ScreenRecorder.tsx +++ b/packages/web/src/components/recorderScreen/ScreenRecorder.tsx @@ -210,7 +210,8 @@ const ScreenRecorder = (props) => { if (res.code == 0) { if (window.isElectron) { window.electronAPI.sendRsCloseWin(); - window.electronAPI?.sendVvOpenWin({ videoUrl: res.data.filePath }); + window.electronAPI.sendVvCloseWin(); + window.electronAPI.sendVvOpenWin({ videoUrl: res.data.filePath }); } else { Modal.confirm({ title: '录屏已保存,是否查看?',