diff --git a/ludos/backend/src/controllers/post.controller.ts b/ludos/backend/src/controllers/post.controller.ts index 61c5ff12..3205cecc 100644 --- a/ludos/backend/src/controllers/post.controller.ts +++ b/ludos/backend/src/controllers/post.controller.ts @@ -215,6 +215,8 @@ export class PostController { isLiked?: boolean, @Query('isDisliked', new DefaultValuePipe(false), ParseBoolPipe) isDisliked?: boolean, + @Query('isUpcomingTitle', new DefaultValuePipe(false), ParseBoolPipe) + isUpcomingTitle?: boolean, @Query('orderByKey') orderByKey?: keyof PostEntity, @Query('order') order?: 'ASC' | 'DESC', ) { @@ -229,6 +231,7 @@ export class PostController { req.user && req.user.id, isLiked, isDisliked, + isUpcomingTitle, orderByKey, order, ); diff --git a/ludos/backend/src/dtos/post/request/create.dto.ts b/ludos/backend/src/dtos/post/request/create.dto.ts index e9d47ea4..5f6a6e09 100644 --- a/ludos/backend/src/dtos/post/request/create.dto.ts +++ b/ludos/backend/src/dtos/post/request/create.dto.ts @@ -1,5 +1,6 @@ import { ApiProperty } from '@nestjs/swagger'; import { IsArray, IsOptional, IsString, IsUUID } from 'class-validator'; +import { UpcomingTitleDto } from '../upcomingTitle.dto'; export class PostCreateDto { @ApiProperty({ @@ -47,4 +48,10 @@ export class PostCreateDto { @IsArray() @IsOptional() tags: string[]; + + + @ApiProperty({ + description: 'Upcoming Title', + }) + upcomingTitle: UpcomingTitleDto; } diff --git a/ludos/backend/src/dtos/post/request/update.dto.ts b/ludos/backend/src/dtos/post/request/update.dto.ts index 6f39b6b0..5e2ce3d2 100644 --- a/ludos/backend/src/dtos/post/request/update.dto.ts +++ b/ludos/backend/src/dtos/post/request/update.dto.ts @@ -1,5 +1,6 @@ import { ApiProperty } from '@nestjs/swagger'; import { IsArray, IsOptional, IsString, IsUUID } from 'class-validator'; +import { UpcomingTitleDto } from '../upcomingTitle.dto'; export class PostUpdateDto { @ApiProperty({ @@ -39,4 +40,11 @@ export class PostUpdateDto { @IsArray() @IsOptional() tags: string[]; + + @ApiProperty({ + description: 'Upcoming Title', + required: false, + }) + @IsOptional() + upcomingTitle: UpcomingTitleDto; } diff --git a/ludos/backend/src/dtos/post/response/create.response.dto.ts b/ludos/backend/src/dtos/post/response/create.response.dto.ts index ef003ede..3d376430 100644 --- a/ludos/backend/src/dtos/post/response/create.response.dto.ts +++ b/ludos/backend/src/dtos/post/response/create.response.dto.ts @@ -1,5 +1,6 @@ import { ApiProperty } from '@nestjs/swagger'; import { Expose } from 'class-transformer'; +import { UpcomingTitleDto } from '../upcomingTitle.dto'; export class PostCreateResponseDto { @ApiProperty() @@ -25,4 +26,8 @@ export class PostCreateResponseDto { @ApiProperty() @Expose() createdAt: Date; + + @Expose() + @ApiProperty() + upcomingTitle: UpcomingTitleDto; } diff --git a/ludos/backend/src/dtos/post/response/get.response.dto.ts b/ludos/backend/src/dtos/post/response/get.response.dto.ts index 35276d6b..5867a260 100644 --- a/ludos/backend/src/dtos/post/response/get.response.dto.ts +++ b/ludos/backend/src/dtos/post/response/get.response.dto.ts @@ -3,6 +3,7 @@ import { Expose, Type } from 'class-transformer'; import { UserInOtherResponsesDto } from '../../user/response/user-in-other-responses.dto'; import { GameGetResponseDto } from '../../game/response/get.response'; import { GroupGetResponseDto } from '../../group/response/get.response.dto'; +import { UpcomingTitleDto } from '../upcomingTitle.dto'; export class PostGetResponseDto { @ApiProperty() @@ -68,4 +69,8 @@ export class PostGetResponseDto { @ApiProperty() @Expose() createdAt: Date; + + @ApiProperty() + @Expose() + upcomingTitle: UpcomingTitleDto; } diff --git a/ludos/backend/src/dtos/post/response/list.response.dto.ts b/ludos/backend/src/dtos/post/response/list.response.dto.ts index da171281..a417b7d6 100644 --- a/ludos/backend/src/dtos/post/response/list.response.dto.ts +++ b/ludos/backend/src/dtos/post/response/list.response.dto.ts @@ -3,6 +3,7 @@ import { Expose, Type } from 'class-transformer'; import { UserInOtherResponsesDto } from '../../user/response/user-in-other-responses.dto'; import { GameGetResponseDto } from '../../game/response/get.response'; import { GroupGetResponseDto } from '../../group/response/get.response.dto'; +import { UpcomingTitleDto } from '../upcomingTitle.dto'; export class PostListResponseDto { @Expose() @@ -49,4 +50,8 @@ export class PostListResponseDto { @Expose() @ApiProperty() isDisliked: boolean; + + @Expose() + @ApiProperty() + upcomingTitle: UpcomingTitleDto; } diff --git a/ludos/backend/src/dtos/post/upcomingTitle.dto.ts b/ludos/backend/src/dtos/post/upcomingTitle.dto.ts new file mode 100644 index 00000000..f4b4a76d --- /dev/null +++ b/ludos/backend/src/dtos/post/upcomingTitle.dto.ts @@ -0,0 +1,12 @@ +import { IsBoolean, IsDate, IsString } from 'class-validator'; + +export class UpcomingTitleDto { + @IsBoolean() + isUpcomingTitle: boolean; + + @IsDate() + launchingDate: Date; + + @IsString() + demoLink: string; +} \ No newline at end of file diff --git a/ludos/backend/src/entities/post.entity.ts b/ludos/backend/src/entities/post.entity.ts index 9dff02a9..63bfb1cc 100644 --- a/ludos/backend/src/entities/post.entity.ts +++ b/ludos/backend/src/entities/post.entity.ts @@ -12,6 +12,7 @@ import { import { User } from './user.entity'; import { Game } from './game.entity'; import { Group } from './group.entity'; +import { UpcomingTitleDto } from '../dtos/post/upcomingTitle.dto'; @Entity('posts') export class Post { @@ -75,4 +76,7 @@ export class Post { isLiked: boolean; isDisliked: boolean; + + @Column('jsonb') + upcomingTitle: UpcomingTitleDto; } diff --git a/ludos/backend/src/repositories/post.repository.ts b/ludos/backend/src/repositories/post.repository.ts index fe2d35a9..21c772bd 100644 --- a/ludos/backend/src/repositories/post.repository.ts +++ b/ludos/backend/src/repositories/post.repository.ts @@ -60,6 +60,7 @@ export class PostRepository extends Repository { userId?: string, // denotes current user, used for like and dislike isLiked?: boolean, isDisliked?: boolean, + isUpcomingTitle?: boolean, orderByKey: keyof Post = 'createdAt', order: 'ASC' | 'DESC' = 'DESC', ): Promise> { @@ -88,6 +89,12 @@ export class PostRepository extends Repository { if (ownerUserId) { queryBuilder.andWhere('posts.userId = :ownerUserId', { ownerUserId }); } + if (isUpcomingTitle) { + console.log("seeeennnn"); + queryBuilder.andWhere('posts."upcomingTitle"->>\'isUpcomingTitle\' = :isUpcomingTitle', { + isUpcomingTitle: isUpcomingTitle.toString(), + }); + } if (userId && isLiked) { const subQuery = this.createQueryBuilder() .select('1') diff --git a/ludos/backend/src/services/post.service.ts b/ludos/backend/src/services/post.service.ts index f7270046..fdc97692 100644 --- a/ludos/backend/src/services/post.service.ts +++ b/ludos/backend/src/services/post.service.ts @@ -158,6 +158,7 @@ export class PostService { userId?: string, isLiked?: boolean, isDisliked?: boolean, + isUpcomingTitle?: boolean, orderByKey?: keyof Post, order?: 'ASC' | 'DESC', ): Promise> { @@ -182,6 +183,7 @@ export class PostService { userId, isLiked, isDisliked, + isUpcomingTitle, orderByKey, order, );