update: add company services and products

This commit is contained in:
Mahyargdz
2025-05-11 16:45:26 +03:30
parent 9a9f640622
commit 77c0f59514
18 changed files with 588 additions and 33 deletions
@@ -0,0 +1,101 @@
import { ApiProperty, PickType } from "@nestjs/swagger";
import { Type } from "class-transformer";
import {
ArrayMinSize,
IsArray,
IsBoolean,
IsDateString,
IsEmail,
IsNotEmpty,
IsOptional,
IsString,
IsUUID,
IsUrl,
Length,
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";
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;
@IsOptional()
@IsNotEmpty({ message: CompanyMessage.IS_ACTIVE_REQUIRED })
@IsBoolean({ message: CompanyMessage.IS_ACTIVE_MUST_BE_BOOLEAN })
@ApiProperty({ description: "وضعیت فعالیت", example: true })
isActive?: boolean;
@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[];
}