feat(dramas,media): add video resolution fields and fix quote style

1. 为剧集剧集添加width和height字段,支持存储视频分辨率信息
2. 统一将media.controller.ts中的单引号改为双引号,保持代码风格一致
This commit is contained in:
2026-07-01 16:04:49 +08:00
parent ef8c31d3be
commit 5fa8c5e0a9
5 changed files with 40 additions and 18 deletions

View File

@@ -94,6 +94,8 @@ export class DramasService {
videoUrl: dto.videoUrl, videoUrl: dto.videoUrl,
trialDurationSeconds: dto.trialDurationSeconds, trialDurationSeconds: dto.trialDurationSeconds,
durationSeconds: dto.durationSeconds, durationSeconds: dto.durationSeconds,
width: dto.width,
height: dto.height,
isPaid: freeType === 'paid', isPaid: freeType === 'paid',
freeType, freeType,
unlockPrice: price, unlockPrice: price,

View File

@@ -82,6 +82,18 @@ export class CreateEpisodeDto {
@Min(1) @Min(1)
durationSeconds: number; durationSeconds: number;
@ApiPropertyOptional()
@IsOptional()
@IsInt()
@Min(1)
width?: number;
@ApiPropertyOptional()
@IsOptional()
@IsInt()
@Min(1)
height?: number;
@ApiPropertyOptional() @ApiPropertyOptional()
@IsOptional() @IsOptional()
@IsBoolean() @IsBoolean()

View File

@@ -38,6 +38,12 @@ export class Episode {
@Column({ type: 'int' }) @Column({ type: 'int' })
durationSeconds: number; durationSeconds: number;
@Column({ type: 'int', nullable: true })
width?: number;
@Column({ type: 'int', nullable: true })
height?: number;
@Column({ type: 'boolean', default: false }) @Column({ type: 'boolean', default: false })
isPaid: boolean; isPaid: boolean;

View File

@@ -37,6 +37,8 @@ export interface EpisodeRecord {
videoUrl?: string; videoUrl?: string;
trialDurationSeconds?: number; trialDurationSeconds?: number;
durationSeconds: number; durationSeconds: number;
width?: number;
height?: number;
isPaid: boolean; isPaid: boolean;
freeType: 'free' | 'paid'; freeType: 'free' | 'paid';
unlockPrice?: number; unlockPrice?: number;

View File

@@ -1,36 +1,36 @@
import { Body, Controller, Get, Post, Query, UseGuards } from '@nestjs/common'; import { Body, Controller, Get, Post, Query, UseGuards } from "@nestjs/common";
import { ApiBearerAuth, ApiTags } from '@nestjs/swagger'; import { ApiBearerAuth, ApiTags } from "@nestjs/swagger";
import { RequirePermissions } from '../admin/decorators/require-permissions.decorator'; import { RequirePermissions } from "../admin/decorators/require-permissions.decorator";
import { AdminJwtAuthGuard } from '../admin/guards/admin-jwt-auth.guard'; import { AdminJwtAuthGuard } from "../admin/guards/admin-jwt-auth.guard";
import { PermissionsGuard } from '../admin/guards/permissions.guard'; import { PermissionsGuard } from "../admin/guards/permissions.guard";
import { CreateCoverDto } from './dto/create-cover.dto'; import { CreateCoverDto } from "./dto/create-cover.dto";
import { CreateUploadJobDto } from './dto/create-upload-job.dto'; import { CreateUploadJobDto } from "./dto/create-upload-job.dto";
import { MediaService } from './media.service'; import { MediaService } from "./media.service";
@ApiTags('Media') @ApiTags("Media")
@Controller('/api/admin/v1/media') @Controller("/api/admin/v1/media")
@ApiBearerAuth() @ApiBearerAuth()
@UseGuards(AdminJwtAuthGuard, PermissionsGuard) @UseGuards(AdminJwtAuthGuard, PermissionsGuard)
export class MediaController { export class MediaController {
constructor(private readonly mediaService: MediaService) {} constructor(private readonly mediaService: MediaService) {}
@Post('/covers') @Post("/covers")
@RequirePermissions('media:create') @RequirePermissions("media:create")
createCover(@Body() dto: CreateCoverDto) { createCover(@Body() dto: CreateCoverDto) {
return this.mediaService.createCover(dto); return this.mediaService.createCover(dto);
} }
@Post('/upload-jobs') @Post("/upload-jobs")
@RequirePermissions('media:create') @RequirePermissions("media:create")
createUploadJob(@Body() dto: CreateUploadJobDto) { createUploadJob(@Body() dto: CreateUploadJobDto) {
return this.mediaService.createUploadJob(dto); return this.mediaService.createUploadJob(dto);
} }
@Get('/upload-jobs') @Get("/upload-jobs")
@RequirePermissions('media:read') @RequirePermissions("media:read")
listUploadJobs( listUploadJobs(
@Query('page') page?: string, @Query("page") page?: string,
@Query('pageSize') pageSize?: string, @Query("pageSize") pageSize?: string,
) { ) {
return this.mediaService.listUploadJobs({ return this.mediaService.listUploadJobs({
page: Number(page) || 1, page: Number(page) || 1,