generated from fahricansecer/boilerplate-be
@@ -26,12 +26,12 @@ import {
|
||||
} from '@nestjs/swagger';
|
||||
import { FileInterceptor } from '@nestjs/platform-express';
|
||||
import { ProjectsService } from './projects.service';
|
||||
import {
|
||||
CreateProjectDto,
|
||||
UpdateProjectDto,
|
||||
CreateFromTweetDto,
|
||||
CreateFromYoutubeDto,
|
||||
CreateFromDocumentDto,
|
||||
import {
|
||||
CreateProjectDto,
|
||||
UpdateProjectDto,
|
||||
CreateFromTweetDto,
|
||||
CreateFromYoutubeDto,
|
||||
CreateFromDocumentDto,
|
||||
CreateFromExtractedTextDto,
|
||||
CreateFromTextDto,
|
||||
} from './dto/project.dto';
|
||||
@@ -138,7 +138,10 @@ export class ProjectsController {
|
||||
@HttpCode(HttpStatus.OK)
|
||||
@ApiOperation({ summary: 'AI ile senaryo üret (Gemini)' })
|
||||
@ApiResponse({ status: 200, description: 'Senaryo üretildi ve kaydedildi' })
|
||||
async generateScript(@Param('id', ParseUUIDPipe) id: string, @Req() req: any) {
|
||||
async generateScript(
|
||||
@Param('id', ParseUUIDPipe) id: string,
|
||||
@Req() req: any,
|
||||
) {
|
||||
const userId = req.user?.id || req.user?.sub;
|
||||
this.logger.log(`Senaryo üretimi başlatılıyor: ${id}`);
|
||||
return this.projectsService.generateScript(userId, id);
|
||||
@@ -167,10 +170,7 @@ export class ProjectsController {
|
||||
@HttpCode(HttpStatus.OK)
|
||||
@ApiOperation({ summary: 'Aktif render işlemini iptal et' })
|
||||
@ApiResponse({ status: 200, description: 'Render işlemi iptal edildi' })
|
||||
async cancelRender(
|
||||
@Param('id', ParseUUIDPipe) id: string,
|
||||
@Req() req: any,
|
||||
) {
|
||||
async cancelRender(@Param('id', ParseUUIDPipe) id: string, @Req() req: any) {
|
||||
const userId = req.user?.id || req.user?.sub;
|
||||
this.logger.log(`Render iptal isteği: ${id}`);
|
||||
return this.projectsService.cancelRenderJob(userId, id);
|
||||
@@ -182,9 +182,15 @@ export class ProjectsController {
|
||||
*/
|
||||
@Post('from-tweet')
|
||||
@HttpCode(HttpStatus.CREATED)
|
||||
@ApiOperation({ summary: 'X/Twitter tweet\'ten proje oluştur' })
|
||||
@ApiResponse({ status: 201, description: 'Tweet\'ten proje oluşturuldu ve senaryo üretildi' })
|
||||
@ApiResponse({ status: 400, description: 'Geçersiz tweet URL\'si veya tweet bulunamadı' })
|
||||
@ApiOperation({ summary: "X/Twitter tweet'ten proje oluştur" })
|
||||
@ApiResponse({
|
||||
status: 201,
|
||||
description: "Tweet'ten proje oluşturuldu ve senaryo üretildi",
|
||||
})
|
||||
@ApiResponse({
|
||||
status: 400,
|
||||
description: "Geçersiz tweet URL'si veya tweet bulunamadı",
|
||||
})
|
||||
async createFromTweet(@Body() dto: CreateFromTweetDto, @Req() req: any) {
|
||||
const userId = req.user?.id || req.user?.sub;
|
||||
this.logger.log(`Tweet'ten proje oluşturuluyor: ${dto.tweetUrl}`);
|
||||
@@ -197,8 +203,14 @@ export class ProjectsController {
|
||||
@Post('from-youtube')
|
||||
@HttpCode(HttpStatus.CREATED)
|
||||
@ApiOperation({ summary: 'YouTube videosundan proje oluştur' })
|
||||
@ApiResponse({ status: 201, description: 'YouTube videosundan proje oluşturuldu ve senaryo üretildi' })
|
||||
@ApiResponse({ status: 400, description: 'Geçersiz YouTube URL\'si veya video bulunamadı' })
|
||||
@ApiResponse({
|
||||
status: 201,
|
||||
description: 'YouTube videosundan proje oluşturuldu ve senaryo üretildi',
|
||||
})
|
||||
@ApiResponse({
|
||||
status: 400,
|
||||
description: "Geçersiz YouTube URL'si veya video bulunamadı",
|
||||
})
|
||||
async createFromYoutube(@Body() dto: CreateFromYoutubeDto, @Req() req: any) {
|
||||
const userId = req.user?.id || req.user?.sub;
|
||||
this.logger.log(`YouTube'dan proje oluşturuluyor: ${dto.youtubeUrl}`);
|
||||
@@ -211,7 +223,10 @@ export class ProjectsController {
|
||||
@Post('from-text')
|
||||
@HttpCode(HttpStatus.CREATED)
|
||||
@ApiOperation({ summary: 'Serbest metinden proje oluştur' })
|
||||
@ApiResponse({ status: 201, description: 'Metinden proje oluşturuldu ve senaryo üretildi' })
|
||||
@ApiResponse({
|
||||
status: 201,
|
||||
description: 'Metinden proje oluşturuldu ve senaryo üretildi',
|
||||
})
|
||||
async createFromText(@Body() dto: CreateFromTextDto, @Req() req: any) {
|
||||
const userId = req.user?.id || req.user?.sub;
|
||||
this.logger.log(`Serbest metinden proje oluşturuluyor...`);
|
||||
@@ -226,7 +241,10 @@ export class ProjectsController {
|
||||
@UseInterceptors(FileInterceptor('file'))
|
||||
@ApiConsumes('multipart/form-data')
|
||||
@ApiOperation({ summary: 'Dosyadan/Dokümandan proje oluştur' })
|
||||
@ApiResponse({ status: 201, description: 'Belgeden proje oluşturuldu ve senaryo üretildi' })
|
||||
@ApiResponse({
|
||||
status: 201,
|
||||
description: 'Belgeden proje oluşturuldu ve senaryo üretildi',
|
||||
})
|
||||
async createFromDocument(
|
||||
@UploadedFile() file: Express.Multer.File,
|
||||
@Body() dto: CreateFromDocumentDto,
|
||||
@@ -248,12 +266,14 @@ export class ProjectsController {
|
||||
@UseInterceptors(FileInterceptor('file'))
|
||||
@ApiConsumes('multipart/form-data')
|
||||
@ApiOperation({ summary: 'Dosyadan metin çıkar ve konu önerileri al' })
|
||||
@ApiResponse({ status: 200, description: 'Metin ve konular başarıyla çıkarıldı' })
|
||||
async extractDocumentTopics(
|
||||
@UploadedFile() file: Express.Multer.File,
|
||||
@Req() req: any,
|
||||
) {
|
||||
this.logger.log(`Dosyadan metin ve konular çıkarılıyor: ${file?.originalname}`);
|
||||
@ApiResponse({
|
||||
status: 200,
|
||||
description: 'Metin ve konular başarıyla çıkarıldı',
|
||||
})
|
||||
async extractDocumentTopics(@UploadedFile() file: Express.Multer.File) {
|
||||
this.logger.log(
|
||||
`Dosyadan metin ve konular çıkarılıyor: ${file?.originalname}`,
|
||||
);
|
||||
if (!file) {
|
||||
throw new BadRequestException('Dosya yüklenmedi');
|
||||
}
|
||||
@@ -266,10 +286,18 @@ export class ProjectsController {
|
||||
@Post('document-from-topic')
|
||||
@HttpCode(HttpStatus.CREATED)
|
||||
@ApiOperation({ summary: 'Seçilen konu ve metin ile proje oluştur' })
|
||||
@ApiResponse({ status: 201, description: 'Seçilen konu baz alınarak proje oluşturuldu' })
|
||||
async createFromTopic(@Body() dto: CreateFromExtractedTextDto, @Req() req: any) {
|
||||
@ApiResponse({
|
||||
status: 201,
|
||||
description: 'Seçilen konu baz alınarak proje oluşturuldu',
|
||||
})
|
||||
async createFromTopic(
|
||||
@Body() dto: CreateFromExtractedTextDto,
|
||||
@Req() req: any,
|
||||
) {
|
||||
const userId = req.user?.id || req.user?.sub;
|
||||
this.logger.log(`Metin ve konu üzerinden proje oluşturuluyor. Konu: ${dto.topic}`);
|
||||
this.logger.log(
|
||||
`Metin ve konu üzerinden proje oluşturuluyor. Konu: ${dto.topic}`,
|
||||
);
|
||||
return this.projectsService.createFromExtractedText(userId, dto);
|
||||
}
|
||||
|
||||
@@ -282,7 +310,13 @@ export class ProjectsController {
|
||||
async updateScene(
|
||||
@Param('id', ParseUUIDPipe) id: string,
|
||||
@Param('sceneId', ParseUUIDPipe) sceneId: string,
|
||||
@Body() body: { narrationText?: string; visualPrompt?: string; subtitleText?: string; duration?: number },
|
||||
@Body()
|
||||
body: {
|
||||
narrationText?: string;
|
||||
visualPrompt?: string;
|
||||
subtitleText?: string;
|
||||
duration?: number;
|
||||
},
|
||||
@Req() req: any,
|
||||
) {
|
||||
const userId = req.user?.id || req.user?.sub;
|
||||
@@ -326,7 +360,10 @@ export class ProjectsController {
|
||||
@Post(':id/generate-seo-titles')
|
||||
@HttpCode(HttpStatus.OK)
|
||||
@ApiOperation({ summary: 'AI ile 5 yeni SEO başlığı üret' })
|
||||
@ApiResponse({ status: 200, description: 'SEO başlıkları başarıyla üretildi' })
|
||||
@ApiResponse({
|
||||
status: 200,
|
||||
description: 'SEO başlıkları başarıyla üretildi',
|
||||
})
|
||||
async generateSeoTitles(
|
||||
@Param('id', ParseUUIDPipe) id: string,
|
||||
@Req() req: any,
|
||||
@@ -361,15 +398,22 @@ export class ProjectsController {
|
||||
*/
|
||||
@Post(':id/translate')
|
||||
@HttpCode(HttpStatus.CREATED)
|
||||
@ApiOperation({ summary: 'Projeyi farklı bir dile çevir ve kopyasını oluştur' })
|
||||
@ApiResponse({ status: 201, description: 'Proje çevirisi başarıyla tamamlandı' })
|
||||
@ApiOperation({
|
||||
summary: 'Projeyi farklı bir dile çevir ve kopyasını oluştur',
|
||||
})
|
||||
@ApiResponse({
|
||||
status: 201,
|
||||
description: 'Proje çevirisi başarıyla tamamlandı',
|
||||
})
|
||||
async translateProject(
|
||||
@Param('id', ParseUUIDPipe) id: string,
|
||||
@Body('targetLanguage') targetLanguage: string,
|
||||
@Req() req: any,
|
||||
) {
|
||||
if (!targetLanguage) {
|
||||
throw new BadRequestException('Hedef dil (targetLanguage) belirtilmelidir.');
|
||||
throw new BadRequestException(
|
||||
'Hedef dil (targetLanguage) belirtilmelidir.',
|
||||
);
|
||||
}
|
||||
const userId = req.user?.id || req.user?.sub;
|
||||
this.logger.log(`Proje çevirisi isteniyor: ${id} -> ${targetLanguage}`);
|
||||
@@ -392,7 +436,12 @@ export class ProjectsController {
|
||||
) {
|
||||
const userId = req.user?.id || req.user?.sub;
|
||||
this.logger.log(`Sahne görseli üretiliyor: ${sceneId} (proje: ${id})`);
|
||||
return this.projectsService.generateSceneImage(userId, id, sceneId, body?.customPrompt);
|
||||
return this.projectsService.generateSceneImage(
|
||||
userId,
|
||||
id,
|
||||
sceneId,
|
||||
body?.customPrompt,
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -408,7 +457,9 @@ export class ProjectsController {
|
||||
@Req() req: any,
|
||||
) {
|
||||
const userId = req.user?.id || req.user?.sub;
|
||||
this.logger.log(`Sahne görseli upscale ediliyor: ${sceneId} (proje: ${id})`);
|
||||
this.logger.log(
|
||||
`Sahne görseli upscale ediliyor: ${sceneId} (proje: ${id})`,
|
||||
);
|
||||
return this.projectsService.upscaleSceneImage(userId, id, sceneId);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user