166 lines
6.7 KiB
TypeScript
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;
|
|
}
|
|
|
|
//-----------------------------------
|