This commit is contained in:
2026-03-09 12:46:39 +03:30
parent 9e33129902
commit b264500802
10 changed files with 248 additions and 11 deletions
+9 -2
View File
@@ -1,11 +1,18 @@
import { Injectable } from '@nestjs/common';
import { CreateBusinessDto } from './dto/create-business.dto';
import { UpdateBusinessDto } from './dto/update-business.dto';
import { EntityManager } from '@mikro-orm/postgresql';
import { Business } from './entities/business.entity';
@Injectable()
export class BusinessService {
create(createBusinessDto: CreateBusinessDto) {
return 'This action adds a new business';
constructor(
private readonly em: EntityManager,
) { }
create(dto: CreateBusinessDto) {
const business = this.em.create(Business, dto)
return this.em.persistAndFlush(business)
}
findAll() {
@@ -1 +1,23 @@
export class CreateBusinessDto {}
import { IsString, IsOptional, IsBoolean, IsInt, Min, IsEnum } from 'class-validator';
import { ApiPropertyOptional, ApiProperty } from '@nestjs/swagger';
import { Type } from 'class-transformer';
export class CreateBusinessDto {
@IsString()
@ApiProperty({ example: 'ایرانی' })
danakSubscriptionId: string;
@IsString()
@ApiProperty()
name: string;
@IsString()
@ApiProperty()
slug: string;
}
@@ -1 +1,56 @@
export class Business {}
import { Cascade, Collection, Entity, EntityRepositoryType, OneToMany, Opt, Property, Unique } from "@mikro-orm/core";
import { BaseEntity } from "../../../common/entities/base.entity";
import { Catalogue } from "src/modules/catalogue/entities/catalogue.entity";
import { BusinessRepository } from "../repositories/business.repository";
@Entity({ repository: () => BusinessRepository })
export class Business extends BaseEntity {
@Unique()
@Property({ type: "uuid", nullable: false })
danakSubscriptionId!: string;
@Property({ type: "varchar", length: 255, nullable: false })
name!: string;
@Property({ type: "varchar", length: 255, nullable: false })
slug!: string;
@Property({ type: "varchar", length: 255, nullable: true })
domain?: string;
@Property({ type: "boolean", default: false })
isDomainVerified: boolean & Opt;
@Property({ type: "varchar", length: 255, nullable: true })
domainVerificationToken?: string;
@Property({ type: "datetime", nullable: true })
domainVerifiedAt?: Date;
@Property({ type: "varchar", length: 255, nullable: true })
logoUrl?: string;
//=========================
@OneToMany(() => Catalogue, (catalogue) => catalogue.business, { cascade: [Cascade.ALL] })
companies = new Collection<Catalogue>(this);
// @OneToMany(() => Ticket, (ticket) => ticket.business)
// tickets = new Collection<Ticket>(this);
// @OneToMany(() => Announcement, (announcement) => announcement.business)
// announcements = new Collection<Announcement>(this);
// @OneToMany(() => Criticism, (criticism) => criticism.business)
// criticisms = new Collection<Criticism>(this);
// @OneToMany(() => User, (user) => user.business)
// users = new Collection<User>(this);
[EntityRepositoryType]?: BusinessRepository;
}
@@ -0,0 +1,5 @@
import { EntityRepository } from "@mikro-orm/postgresql";
import { Business } from "../entities/business.entity";
export class BusinessRepository extends EntityRepository<Business> {}
+15 -3
View File
@@ -1,11 +1,23 @@
import { Injectable } from '@nestjs/common';
import { BadRequestException, Injectable } from '@nestjs/common';
import { CreateCatalogueDto } from './dto/create-catalogue.dto';
import { UpdateCatalogueDto } from './dto/update-catalogue.dto';
import { EntityManager } from '@mikro-orm/postgresql';
import { Catalogue } from './entities/catalogue.entity';
import { Business } from '../business/entities/business.entity';
@Injectable()
export class CatalogueService {
create(createCatalogueDto: CreateCatalogueDto) {
return 'This action adds a new catalogue';
constructor(
private readonly em: EntityManager,
) { }
async create(dto: CreateCatalogueDto) {
const business = await this.em.findOne(Business, {})
if (!business) {
throw new BadRequestException()
}
const catalogue = this.em.create(Catalogue, { ...dto, business })
return this.em.persistAndFlush(catalogue)
}
findAll() {
@@ -1 +1,27 @@
export class CreateCatalogueDto {}
import { IsString, IsOptional, IsBoolean, IsInt, Min, IsEnum } from 'class-validator';
import { ApiPropertyOptional, ApiProperty } from '@nestjs/swagger';
import { Type } from 'class-transformer';
import { CatalogueSize, CatalogueStatus } from '../enums/company-status.enum';
export class CreateCatalogueDto {
@IsString()
@ApiProperty({ example: 'ایرانی' })
name: string;
@IsString()
@ApiProperty()
content: string;
@IsEnum(() => CatalogueStatus)
@ApiProperty()
status: CatalogueStatus;
@IsEnum(() => CatalogueSize)
@ApiProperty()
size: CatalogueSize;
}
@@ -1 +1,33 @@
export class Catalogue {}
import {
Cascade, Collection, Entity, EntityRepositoryType, Enum,
ManyToOne, OneToMany, OneToOne, Opt, Property
} from "@mikro-orm/core";
import { BaseEntity } from "../../../common/entities/base.entity";
import { Business } from "src/modules/business/entities/business.entity";
import { CatalogueSize, CatalogueStatus } from "../enums/company-status.enum";
import { CatalogueRepository } from "../repositories/catalogue.repository";
@Entity({ repository: () => CatalogueRepository })
export class Catalogue extends BaseEntity {
@Property({ type: "varchar", length: 255, unique: true })
name!: string;
@Property({ type: "json" })
content!: string;
@Enum({ items: () => CatalogueStatus, nullable: false })
status!: CatalogueStatus;
@Enum({ items: () => CatalogueSize, nullable: false })
size!: CatalogueSize;
//-----------------------------------
@ManyToOne(() => Business, { deleteRule: "restrict" })
business!: Business;
//-----------------------------------
[EntityRepositoryType]?: CatalogueRepository;
}
@@ -0,0 +1,12 @@
export enum CatalogueStatus {
APPROVED = "APPROVED",
PENDING = "PENDING",
REJECTED = "REJECTED",
}
export enum CatalogueSize {
A4 = 'a4',
A3 = 'a3',
A5 = 'a5'
}
@@ -0,0 +1,67 @@
import { EntityRepository, FilterQuery } from "@mikro-orm/postgresql";
import { Catalogue } from "../entities/catalogue.entity";
import { CatalogueStatus } from "../enums/company-status.enum";
export class CatalogueRepository extends EntityRepository<Catalogue> {
//
// async getCataloguesForAdmin(queryDto: CompanyListQueryDto, businessId: string) {
// const { } = queryDto
// const where: FilterQuery<Catalogue> = {
// deletedAt: null,
// business: { id: businessId },
// };
// if (queryDto.status) {
// where.status = queryDto.status;
// }
// if (queryDto.isActive !== undefined) {
// where.isActive = queryDto.isActive === 1;
// }
// if (queryDto.q) {
// where.name = { $ilike: `%${queryDto.q}%` };
// }
// if (queryDto.registrationDate) {
// where.createdAt = {
// $gte: queryDto.registrationDate,
// $lte: queryDto.registrationDate,
// };
// }
// if (queryDto.name) {
// where.name = { $ilike: `%${queryDto.name}%` };
// }
// return this.findAndCount(where, {
// populate: [],
// limit,
// offset: skip,
// orderBy: { createdAt: "DESC" },
// fields: [
// "id",
// "name",
// "isActive",
// "dateOfEstablishment",
// "status",
// "createdAt",
// ],
// });
// }
// async getCataloguesForPublic(queryDto: CompanyListPublicQueryDto, businessId: string) {
// const where: FilterQuery<Catalogue> = {
// deletedAt: null,
// business: { id: businessId },
// isActive: true,
// status: CatalogueStatus.APPROVED,
// };
// return this.find(where, {
// populate: [],
// orderBy: { createdAt: "DESC" },
// fields: ["id", "name", "description", "profileImageUrl", "coverImageUrl", "createdAt"],
// });
// }
}
+1 -2
View File
@@ -16,7 +16,6 @@ import { PaymentsModule } from '../payments/payments.module';
import { JwtModule } from '@nestjs/jwt';
import { OrderRepository } from './repositories/order.repository';
import { OrderListeners } from './listeners/order.listeners';
import { OrdersCrone } from './crone/order.crone';
import { AdminModule } from '../admin/admin.module';
import { NotificationsModule } from '../notifications/notifications.module';
import { InventoryModule } from '../inventory/inventory.module';
@@ -36,7 +35,7 @@ import { UserModule } from '../users/user.module';
forwardRef(() => UserModule)
],
controllers: [OrdersController],
providers: [OrdersService, OrderRepository, OrderListeners, OrdersCrone],
providers: [OrdersService, OrderRepository, OrderListeners],
exports: [OrderRepository, OrdersService],
})
export class OrdersModule { }