Initial commit: Meshkee CMS API

NestJS backend with Prisma, Docker Compose for Postgres/Redis, and deploy docs for the production VM.
This commit is contained in:
Ali Reza
2026-07-21 17:52:36 +03:30
commit bb59d5e9ba
254 changed files with 37031 additions and 0 deletions
@@ -0,0 +1,71 @@
import { Type } from 'class-transformer';
import {
IsArray,
IsBoolean,
IsInt,
IsOptional,
IsString,
MaxLength,
Min,
MinLength,
} from 'class-validator';
export class CreateWebsiteBrandGroupDto {
@IsString()
@MinLength(1)
@MaxLength(255)
title!: string;
@IsOptional()
@IsArray()
@IsString({ each: true })
brandIds?: string[];
@IsOptional()
@IsInt()
sortOrder?: number;
@IsOptional()
@IsBoolean()
isActive?: boolean;
}
export class UpdateWebsiteBrandGroupDto {
@IsOptional()
@IsString()
@MinLength(1)
@MaxLength(255)
title?: string;
@IsOptional()
@IsArray()
@IsString({ each: true })
brandIds?: string[];
@IsOptional()
@IsInt()
sortOrder?: number;
@IsOptional()
@IsBoolean()
isActive?: boolean;
}
export class ListWebsiteBrandGroupsDto {
@IsOptional()
@Type(() => Number)
@IsInt()
@Min(1)
page?: number;
@IsOptional()
@Type(() => Number)
@IsInt()
@Min(1)
pageSize?: number;
@IsOptional()
@Type(() => Boolean)
@IsBoolean()
isActive?: boolean;
}
@@ -0,0 +1,71 @@
import { Type } from 'class-transformer';
import {
IsArray,
IsBoolean,
IsInt,
IsOptional,
IsString,
MaxLength,
Min,
MinLength,
} from 'class-validator';
export class CreateWebsiteCategoryGroupDto {
@IsString()
@MinLength(1)
@MaxLength(255)
title!: string;
@IsOptional()
@IsArray()
@IsString({ each: true })
categoryIds?: string[];
@IsOptional()
@IsInt()
sortOrder?: number;
@IsOptional()
@IsBoolean()
isActive?: boolean;
}
export class UpdateWebsiteCategoryGroupDto {
@IsOptional()
@IsString()
@MinLength(1)
@MaxLength(255)
title?: string;
@IsOptional()
@IsArray()
@IsString({ each: true })
categoryIds?: string[];
@IsOptional()
@IsInt()
sortOrder?: number;
@IsOptional()
@IsBoolean()
isActive?: boolean;
}
export class ListWebsiteCategoryGroupsDto {
@IsOptional()
@Type(() => Number)
@IsInt()
@Min(1)
page?: number;
@IsOptional()
@Type(() => Number)
@IsInt()
@Min(1)
pageSize?: number;
@IsOptional()
@Type(() => Boolean)
@IsBoolean()
isActive?: boolean;
}
+95
View File
@@ -0,0 +1,95 @@
import { Type } from 'class-transformer';
import {
IsArray,
IsBoolean,
IsInt,
IsOptional,
IsString,
IsUrl,
MaxLength,
Min,
MinLength,
ValidateNested,
} from 'class-validator';
export class WebsiteSliderSlideInputDto {
@IsString()
imageMediaId!: string;
@IsOptional()
@IsString()
@MaxLength(255)
title?: string;
@IsOptional()
@IsString()
@MaxLength(2048)
@IsUrl({ require_protocol: true }, { message: 'linkUrl must be a valid URL' })
linkUrl?: string;
@IsOptional()
@IsBoolean()
isActive?: boolean;
}
export class CreateWebsiteSliderDto {
@IsString()
@MinLength(1)
@MaxLength(255)
title!: string;
@IsOptional()
@IsArray()
@ValidateNested({ each: true })
@Type(() => WebsiteSliderSlideInputDto)
slides?: WebsiteSliderSlideInputDto[];
@IsOptional()
@IsInt()
sortOrder?: number;
@IsOptional()
@IsBoolean()
isActive?: boolean;
}
export class UpdateWebsiteSliderDto {
@IsOptional()
@IsString()
@MinLength(1)
@MaxLength(255)
title?: string;
@IsOptional()
@IsArray()
@ValidateNested({ each: true })
@Type(() => WebsiteSliderSlideInputDto)
slides?: WebsiteSliderSlideInputDto[];
@IsOptional()
@IsInt()
sortOrder?: number;
@IsOptional()
@IsBoolean()
isActive?: boolean;
}
export class ListWebsiteSlidersDto {
@IsOptional()
@Type(() => Number)
@IsInt()
@Min(1)
page?: number;
@IsOptional()
@Type(() => Number)
@IsInt()
@Min(1)
pageSize?: number;
@IsOptional()
@Type(() => Boolean)
@IsBoolean()
isActive?: boolean;
}