diff --git a/apps/server/src/auth/auth.service.ts b/apps/server/src/auth/auth.service.ts index 4f0be21..a026ad6 100755 --- a/apps/server/src/auth/auth.service.ts +++ b/apps/server/src/auth/auth.service.ts @@ -24,7 +24,7 @@ export class AuthService { private readonly staffService: StaffService, private readonly jwtService: JwtService, private readonly sessionService: SessionService, - ) {} + ) { } async validateFileRequest(params: FileRequest): Promise { try { // 基础参数验证 @@ -169,11 +169,11 @@ export class AuthService { password, officerId, showname, - department: { + department: deptId && { connect: { id: deptId }, }, domain: { - connect: { id: deptId }, + connect: deptId && { id: deptId }, }, // domainId: data.deptId, meta: { diff --git a/apps/server/src/models/resource/pipe/resource.pipeline.ts b/apps/server/src/models/resource/pipe/resource.pipeline.ts index 2c5d98e..bd3c7fd 100644 --- a/apps/server/src/models/resource/pipe/resource.pipeline.ts +++ b/apps/server/src/models/resource/pipe/resource.pipeline.ts @@ -51,7 +51,7 @@ export class ResourceProcessingPipeline { ResourceStatus.PROCESSED, ); this.logger.log( - `资源 ${resource.id} 处理成功 ${JSON.stringify(currentResource.metadata)}`, + `资源 ${resource.id} 处理成功 ${JSON.stringify(currentResource.meta)}`, ); return { diff --git a/apps/server/src/models/resource/processor/BaseProcessor.ts b/apps/server/src/models/resource/processor/BaseProcessor.ts index 21907f5..031afa8 100644 --- a/apps/server/src/models/resource/processor/BaseProcessor.ts +++ b/apps/server/src/models/resource/processor/BaseProcessor.ts @@ -1,5 +1,5 @@ import path, { dirname } from "path"; -import { FileMetadata, VideoMetadata, ResourceProcessor } from "../types"; +import { ResourceProcessor } from "../types"; import { Resource, ResourceStatus, db } from "@nice/common"; import { Logger } from "@nestjs/common"; import fs from 'fs/promises'; @@ -15,9 +15,9 @@ export abstract class BaseProcessor implements ResourceProcessor { subdirectory, ); fs.mkdir(outputDir, { recursive: true }).catch(err => this.logger.error(`Failed to create directory: ${err.message}`)); - + return outputDir; - + } } // \ No newline at end of file diff --git a/apps/server/src/models/resource/processor/ImageProcessor.ts b/apps/server/src/models/resource/processor/ImageProcessor.ts index 45821f9..ad6b971 100644 --- a/apps/server/src/models/resource/processor/ImageProcessor.ts +++ b/apps/server/src/models/resource/processor/ImageProcessor.ts @@ -1,6 +1,6 @@ import path from 'path'; import sharp from 'sharp'; -import { FileMetadata, ImageMetadata, ResourceProcessor } from '../types'; +import { FileMetadata, ImageMetadata, ResourceDto } from '@nice/common'; import { Resource, ResourceStatus, db } from '@nice/common'; import { getUploadFilePath } from '@server/utils/file'; import { BaseProcessor } from './BaseProcessor'; @@ -10,10 +10,10 @@ export class ImageProcessor extends BaseProcessor { super(); } - async process(resource: Resource): Promise { + async process(resource: ResourceDto): Promise { const { url } = resource; const filepath = getUploadFilePath(url); - const originMeta = resource.metadata as unknown as FileMetadata; + const originMeta = resource.meta as unknown as FileMetadata; if (!originMeta.filetype?.startsWith('image/')) { this.logger.log(`Skipping non-image resource: ${resource.id}`); return resource; @@ -47,7 +47,7 @@ export class ImageProcessor extends BaseProcessor { const updatedResource = await db.resource.update({ where: { id: resource.id }, data: { - metadata: { + meta: { ...originMeta, ...imageMeta, }, diff --git a/apps/server/src/models/resource/processor/VideoProcessor.ts b/apps/server/src/models/resource/processor/VideoProcessor.ts index e98cd59..b94e6f9 100644 --- a/apps/server/src/models/resource/processor/VideoProcessor.ts +++ b/apps/server/src/models/resource/processor/VideoProcessor.ts @@ -1,7 +1,6 @@ import path, { dirname } from 'path'; import ffmpeg from 'fluent-ffmpeg'; -import { FileMetadata, VideoMetadata, ResourceProcessor } from '../types'; -import { Resource, ResourceStatus, db } from '@nice/common'; +import { Resource, ResourceStatus, db, FileMetadata, VideoMetadata, ResourceDto } from '@nice/common'; import { getUploadFilePath } from '@server/utils/file'; import fs from 'fs/promises'; import sharp from 'sharp'; @@ -11,14 +10,14 @@ export class VideoProcessor extends BaseProcessor { constructor() { super(); } - async process(resource: Resource): Promise { + async process(resource: ResourceDto): Promise { const { url } = resource; const filepath = getUploadFilePath(url); this.logger.log( `Processing video for resource ID: ${resource.id}, File ID: ${url}`, ); - const originMeta = resource.metadata as unknown as FileMetadata; + const originMeta = resource.meta as unknown as FileMetadata; if (!originMeta.filetype?.startsWith('video/')) { this.logger.log(`Skipping non-video resource: ${resource.id}`); return resource; @@ -39,7 +38,7 @@ export class VideoProcessor extends BaseProcessor { const updatedResource = await db.resource.update({ where: { id: resource.id }, data: { - metadata: { + meta: { ...originMeta, ...videoMeta, }, diff --git a/apps/server/src/models/resource/types.ts b/apps/server/src/models/resource/types.ts index eb060ba..70c45f8 100644 --- a/apps/server/src/models/resource/types.ts +++ b/apps/server/src/models/resource/types.ts @@ -9,47 +9,3 @@ export interface ProcessResult { error?: Error } -export interface BaseMetadata { - size: number - filetype: string - filename: string - extension: string - modifiedAt: Date -} -/** - * 图片特有元数据接口 - */ -export interface ImageMetadata { - width: number; // 图片宽度(px) - height: number; // 图片高度(px) - compressedUrl?: string; - orientation?: number; // EXIF方向信息 - space?: string; // 色彩空间 (如: RGB, CMYK) - hasAlpha?: boolean; // 是否包含透明通道 -} - -/** - * 视频特有元数据接口 - */ -export interface VideoMetadata { - width?: number; - height?: number; - duration?: number; - videoCodec?: string; - audioCodec?: string; - coverUrl?: string -} - -/** - * 音频特有元数据接口 - */ -export interface AudioMetadata { - duration: number; // 音频时长(秒) - bitrate?: number; // 比特率(bps) - sampleRate?: number; // 采样率(Hz) - channels?: number; // 声道数 - codec?: string; // 音频编码格式 -} - - -export type FileMetadata = ImageMetadata & VideoMetadata & AudioMetadata & BaseMetadata \ No newline at end of file diff --git a/apps/server/src/models/staff/staff.service.ts b/apps/server/src/models/staff/staff.service.ts index 1d5850a..a5868aa 100755 --- a/apps/server/src/models/staff/staff.service.ts +++ b/apps/server/src/models/staff/staff.service.ts @@ -44,6 +44,7 @@ export class StaffService extends BaseService { ...data, password: await argon2.hash((data.password || '123456') as string), }; + const result = await super.create({ ...args, data: createData }); this.emitDataChangedEvent(result, CrudOperation.CREATED); return result; diff --git a/apps/server/src/upload/tus.service.ts b/apps/server/src/upload/tus.service.ts index 1066701..ba80b1c 100644 --- a/apps/server/src/upload/tus.service.ts +++ b/apps/server/src/upload/tus.service.ts @@ -68,13 +68,12 @@ export class TusService implements OnModuleInit { ) { try { const fileId = this.getFileId(upload.id); - await this.resourceService.create({ data: { title: getFilenameWithoutExt(upload.metadata.filename), fileId, // 移除最后的文件名 url: upload.id, - metadata: upload.metadata, + meta: upload.metadata, status: ResourceStatus.UPLOADING, }, }); diff --git a/apps/web/index.html b/apps/web/index.html index 6199b0c..5ba57a3 100755 --- a/apps/web/index.html +++ b/apps/web/index.html @@ -12,7 +12,7 @@ VITE_APP_VERSION: "$VITE_APP_VERSION", }; - fhmooc + 首长机关信箱 diff --git a/apps/web/src/app/auth/page.tsx b/apps/web/src/app/auth/page.tsx index b042bfd..59a4e53 100644 --- a/apps/web/src/app/auth/page.tsx +++ b/apps/web/src/app/auth/page.tsx @@ -48,10 +48,10 @@ const AuthPage: React.FC = () => { transition={{ delay: 0.2, duration: 0.5 }} >
- 烽火建言 + 首长机关信箱
- 用真心聆听每一位官兵的心声,第一时间回应大家的关切,把战友们的烦心事当作自己的心头事,用心用情解决每一个难题,全心全意办好每一件实事,让贴心服务成为军营最温暖的底色 + 聆音于微,润心以答,纾难化雨,解忧惟勤 {showLogin && (