Files
dzone-api/src/modules/companies/DTO/create-company.dto.ts
T
2026-04-05 10:53:07 +03:30

166 lines
6.7 KiB
TypeScript

import { ApiProperty, ApiPropertyOptional, PickType } from "@nestjs/swagger";
import { Type } from "class-transformer";
import {
ArrayMinSize,
IsArray,
IsBoolean,
IsDateString,
IsEmail,
IsEnum,
IsInt,
IsNotEmpty,
IsOptional,
IsString,
IsUUID,
IsUrl,
Length,
Min,
ValidateNested,
} from "class-validator";
import { CreateCompanyProductDto } from "./create-company-product.dto";
import { CreateCompanyServiceDto } from "./create-company-service.dto";
import { CompanyMessage } from "../../../common/enums/message.enum";
import { CompleteRegistrationDto } from "../../auth/DTO/complete-register.dto";
import { CompanyRequestStatus } from "../enums/company-request-status.enum";
export class CreateCompanyDto extends PickType(CompleteRegistrationDto, ["phone", "firstName", "lastName", "password", "nationalCode"]) {
@IsNotEmpty({ message: CompanyMessage.NAME_REQUIRED })
@Length(3, 255, { message: CompanyMessage.NAME_LENGTH })
@IsString({ message: CompanyMessage.NAME_MUST_BE_STRING })
@ApiProperty({ description: "نام شرکت", example: "شرکت تولیدی و صنعتی کارگر" })
name: string;
@IsNotEmpty({ message: CompanyMessage.EMAIL_REQUIRED })
@IsEmail(undefined, { message: CompanyMessage.EMAIL_MUST_BE_VALID })
@ApiProperty({ description: "ایمیل", example: "info@example.com" })
email: string;
@IsNotEmpty({ message: CompanyMessage.IDENTIFICATION_NUMBER_REQUIRED })
@IsString({ message: CompanyMessage.IDENTIFICATION_NUMBER_MUST_BE_STRING })
@ApiProperty({ description: "شماره ثبت", example: "1234567890" })
identificationNumber: string;
@IsNotEmpty({ message: CompanyMessage.DATE_OF_ESTABLISHMENT_REQUIRED })
@IsDateString(undefined, { message: CompanyMessage.DATE_OF_ESTABLISHMENT_MUST_BE_DATE })
@ApiProperty({ description: "تاریخ تاسیس", example: "2021-01-01" })
dateOfEstablishment: string;
@IsNotEmpty({ message: CompanyMessage.ADDRESS_REQUIRED })
@IsString({ message: CompanyMessage.ADDRESS_MUST_BE_STRING })
@ApiProperty({ description: "آدرس", example: "تهران، خیابان ولیعصر، پلاک 123" })
address: string;
@IsNotEmpty({ message: CompanyMessage.MAP_ADDRESS_LINK_REQUIRED })
@IsUrl({ protocols: ["http", "https"] }, { message: CompanyMessage.MAP_ADDRESS_LINK_MUST_BE_URL })
@ApiProperty({ description: "لینک آدرس", example: "https://maps.app.goo.gl/1234567890" })
mapAddressLink: string;
@IsNotEmpty({ message: CompanyMessage.DESCRIPTION_REQUIRED })
@IsString({ message: CompanyMessage.DESCRIPTION_MUST_BE_STRING })
@ApiProperty({ description: "توضیحات", example: "شرکت تولیدی و صنعتی کارگر" })
description: string;
@IsNotEmpty({ message: CompanyMessage.WEBSITE_URL_REQUIRED })
@IsUrl({ protocols: ["http", "https"] }, { message: CompanyMessage.WEBSITE_URL_MUST_BE_URL })
@ApiProperty({ description: "آدرس وبسایت", example: "https://www.example.com" })
websiteUrl: string;
@IsNotEmpty({ message: CompanyMessage.PROFILE_IMAGE_URL_REQUIRED })
@IsUrl({ protocols: ["http", "https"] }, { message: CompanyMessage.PROFILE_IMAGE_URL_MUST_BE_URL })
@ApiProperty({ description: "آدرس تصویر پروفایل", example: "https://www.example.com/profile.jpg" })
profileImageUrl: string;
@IsNotEmpty({ message: CompanyMessage.COVER_IMAGE_URL_REQUIRED })
@IsUrl({ protocols: ["http", "https"] }, { message: CompanyMessage.COVER_IMAGE_URL_MUST_BE_URL })
@ApiProperty({ description: "آدرس تصویر کاور", example: "https://www.example.com/cover.jpg" })
coverImageUrl: string;
@IsInt({ message: CompanyMessage.METRAGE_MUST_BE_INT })
@Min(1, { message: CompanyMessage.METRAGE_MUST_BE_POSITIVE })
@ApiProperty({ description: "متراژ شرکت (متر مربع)", example: 500 })
metrage: number;
@IsOptional()
@IsNotEmpty({ message: CompanyMessage.IS_ACTIVE_REQUIRED })
@IsBoolean({ message: CompanyMessage.IS_ACTIVE_MUST_BE_BOOLEAN })
@ApiProperty({ description: "وضعیت فعالیت", example: true })
isActive?: boolean;
@IsBoolean()
@ApiProperty({ description: "وضعیت اجاره", example: true })
isRented: boolean;
@IsOptional()
@IsDateString()
@ApiPropertyOptional({ description: " تاریخ پایان قرارداد اجاره در صورتیکه اجاره ای است" })
rentEndAt?: string;
@IsArray()
@ApiProperty({ description: " یا سند تصاویر قرارداد اجاره" })
contractImages: string[];
@IsNotEmpty({ message: CompanyMessage.INDUSTRY_ID_REQUIRED })
@IsUUID("7", { message: CompanyMessage.INDUSTRY_ID_SHOULD_BE_UUID })
@ApiProperty({ description: "شناسه صنعت", example: "123e4567-e89b-12d3-a456-426614174000" })
industryId: string;
@IsNotEmpty({ message: CompanyMessage.PRODUCTS_REQUIRED })
@IsArray({ message: CompanyMessage.PRODUCTS_MUST_BE_ARRAY })
@ArrayMinSize(1, { message: CompanyMessage.PRODUCTS_REQUIRED })
@ValidateNested({ each: true })
@Type(() => CreateCompanyProductDto)
@ApiProperty({ description: "محصولات شرکت", type: [CreateCompanyProductDto], required: false })
products: CreateCompanyProductDto[];
@IsNotEmpty({ message: CompanyMessage.SERVICES_REQUIRED })
@IsArray({ message: CompanyMessage.SERVICES_MUST_BE_ARRAY })
@ArrayMinSize(1, { message: CompanyMessage.SERVICES_REQUIRED })
@ValidateNested({ each: true })
@Type(() => CreateCompanyServiceDto)
@ApiProperty({ description: "خدمات شرکت", type: [CreateCompanyServiceDto], required: false })
services: CreateCompanyServiceDto[];
}
export class CreateCompanyRequestDto extends PickType(CreateCompanyDto, [
"name",
"email",
"phone",
"identificationNumber",
"dateOfEstablishment",
"address",
"mapAddressLink",
"description",
"websiteUrl",
"profileImageUrl",
"coverImageUrl",
"metrage",
"industryId",
"products",
"services",
"metrage",
"isRented",
"contractImages",
"rentEndAt"
]) {
@IsNotEmpty({ message: CompanyMessage.CHIEF_EXECUTIVE_REQUIRED })
@IsString({ message: CompanyMessage.CHIEF_EXECUTIVE_MUST_BE_STRING })
@Length(3, 255, { message: CompanyMessage.CHIEF_EXECUTIVE_MUST_BE_STRING })
@ApiProperty({ description: "نام مدیر عامل", example: "محمد حسین حسینی" })
chiefExecutiveOfficer: string;
}
export class ChangeCompanyRequestStatusDto {
@IsNotEmpty({ message: CompanyMessage.COMPANY_REQUEST_STATUS_REQUIRED })
@IsEnum(CompanyRequestStatus)
@ApiProperty({ enum: CompanyRequestStatus, description: "وضعیت درخواست" })
requestStatus: CompanyRequestStatus;
@IsOptional()
@IsString({ message: CompanyMessage.REJECT_REASON_MUST_BE_STRING })
@ApiProperty({ required: false, description: "دلیل رد درخواست" })
rejectReason?: string;
}
//-----------------------------------