diff --git a/src/common/entities/base.entity.ts b/src/common/entities/base.entity.ts index 844aa53..87da4e7 100755 --- a/src/common/entities/base.entity.ts +++ b/src/common/entities/base.entity.ts @@ -1,7 +1,9 @@ -import { PrimaryKey, Property, Filter, OptionalProps } from '@mikro-orm/core'; +import { Index, PrimaryKey, Property, Filter, OptionalProps } from '@mikro-orm/core'; import { ulid } from 'ulid'; @Filter({ name: 'notDeleted', cond: { deletedAt: null }, default: true }) +@Index({ properties: ['deletedAt'] }) +@Index({ properties: ['createdAt'] }) export abstract class BaseEntity { [OptionalProps]?: 'id' | 'createdAt' | 'updatedAt' | 'deletedAt'; diff --git a/src/modules/admin/entities/adminRole.entity.ts b/src/modules/admin/entities/adminRole.entity.ts index 4653aad..1e001c3 100644 --- a/src/modules/admin/entities/adminRole.entity.ts +++ b/src/modules/admin/entities/adminRole.entity.ts @@ -1,4 +1,4 @@ -import { Entity, ManyToOne, Unique } from '@mikro-orm/core'; +import { Entity, Index, ManyToOne, Unique } from '@mikro-orm/core'; import { BaseEntity } from '../../../common/entities/base.entity'; import { Role } from '../../roles/entities/role.entity'; import { Restaurant } from 'src/modules/restaurants/entities/restaurant.entity'; @@ -6,6 +6,9 @@ import { Admin } from './admin.entity'; @Entity({ tableName: 'admin_roles' }) @Unique({ properties: ['admin', 'restaurant'] }) +@Index({ properties: ['admin', 'restaurant'] }) +@Index({ properties: ['admin'] }) +@Index({ properties: ['restaurant'] }) export class AdminRole extends BaseEntity { @ManyToOne(() => Admin) admin!: Admin; diff --git a/src/modules/auth/entities/refresh-token.entity.ts b/src/modules/auth/entities/refresh-token.entity.ts index 0ac18f0..6ff4db1 100644 --- a/src/modules/auth/entities/refresh-token.entity.ts +++ b/src/modules/auth/entities/refresh-token.entity.ts @@ -1,4 +1,4 @@ -import { Entity, Enum, Property } from '@mikro-orm/core'; +import { Entity, Enum, Index, Property } from '@mikro-orm/core'; import { BaseEntity } from '../../../common/entities/base.entity'; @@ -8,6 +8,9 @@ export enum RefreshTokenType { } @Entity({ tableName: 'refreshtokens' }) +@Index({ properties: ['ownerId', 'restId', 'type'] }) +@Index({ properties: ['hashedToken'] }) +@Index({ properties: ['expiresAt'] }) export class RefreshToken extends BaseEntity { @Property({ type: 'varchar', length: 255 }) hashedToken!: string; diff --git a/src/modules/coupons/entities/coupon.entity.ts b/src/modules/coupons/entities/coupon.entity.ts index 199733f..ab708c9 100644 --- a/src/modules/coupons/entities/coupon.entity.ts +++ b/src/modules/coupons/entities/coupon.entity.ts @@ -1,4 +1,4 @@ -import { Entity, ManyToOne, Property, Enum, Unique } from '@mikro-orm/core'; +import { Entity, Index, ManyToOne, Property, Enum, Unique } from '@mikro-orm/core'; import { BaseEntity } from '../../../common/entities/base.entity'; import { Restaurant } from '../../restaurants/entities/restaurant.entity'; import { normalizePhone } from '../../utils/phone.util'; @@ -6,6 +6,9 @@ import { CouponType } from '../interface/coupon'; @Entity({ tableName: 'coupons' }) @Unique({ properties: ['code', 'restaurant'] }) +@Index({ properties: ['restaurant', 'code', 'isActive'] }) +@Index({ properties: ['restaurant', 'isActive'] }) +@Index({ properties: ['code'] }) export class Coupon extends BaseEntity { @ManyToOne(() => Restaurant) restaurant!: Restaurant; diff --git a/src/modules/foods/entities/category.entity.ts b/src/modules/foods/entities/category.entity.ts index aa1159f..58c2516 100644 --- a/src/modules/foods/entities/category.entity.ts +++ b/src/modules/foods/entities/category.entity.ts @@ -1,9 +1,11 @@ -import { Entity, Property, Collection, OneToMany, ManyToOne } from '@mikro-orm/core'; +import { Entity, Index, Property, Collection, OneToMany, ManyToOne } from '@mikro-orm/core'; import { Food } from './food.entity'; import { BaseEntity } from '../../../common/entities/base.entity'; import { Restaurant } from 'src/modules/restaurants/entities/restaurant.entity'; @Entity({ tableName: 'categories' }) +@Index({ properties: ['restaurant', 'isActive'] }) +@Index({ properties: ['isActive'] }) export class Category extends BaseEntity { @Property() title!: string; diff --git a/src/modules/foods/entities/food.entity.ts b/src/modules/foods/entities/food.entity.ts index 2f19445..4af1cc8 100644 --- a/src/modules/foods/entities/food.entity.ts +++ b/src/modules/foods/entities/food.entity.ts @@ -1,10 +1,13 @@ -import { Cascade, Collection, Entity, ManyToOne, OneToMany, Property } from '@mikro-orm/core'; +import { Cascade, Collection, Entity, Index, ManyToOne, OneToMany, Property } from '@mikro-orm/core'; import { Category } from './category.entity'; import { BaseEntity } from '../../../common/entities/base.entity'; import { Restaurant } from '../../../modules/restaurants/entities/restaurant.entity'; import { Review } from 'src/modules/review/entities/review.entity'; @Entity({ tableName: 'foods' }) +@Index({ properties: ['restaurant', 'isActive'] }) +@Index({ properties: ['category', 'isActive'] }) +@Index({ properties: ['isActive'] }) export class Food extends BaseEntity { @ManyToOne(() => Restaurant) restaurant: Restaurant; diff --git a/src/modules/orders/entities/order-item.entity.ts b/src/modules/orders/entities/order-item.entity.ts index 46a3e44..8c996ab 100644 --- a/src/modules/orders/entities/order-item.entity.ts +++ b/src/modules/orders/entities/order-item.entity.ts @@ -1,9 +1,11 @@ -import { Entity, ManyToOne, Property } from '@mikro-orm/core'; +import { Entity, Index, ManyToOne, Property } from '@mikro-orm/core'; import { BaseEntity } from '../../../common/entities/base.entity'; import { Order } from './order.entity'; import { Food } from '../../foods/entities/food.entity'; @Entity({ tableName: 'order_items' }) +@Index({ properties: ['order'] }) +@Index({ properties: ['food'] }) export class OrderItem extends BaseEntity { @ManyToOne(() => Order) order!: Order; diff --git a/src/modules/orders/entities/order.entity.ts b/src/modules/orders/entities/order.entity.ts index 00a57df..686e352 100644 --- a/src/modules/orders/entities/order.entity.ts +++ b/src/modules/orders/entities/order.entity.ts @@ -1,5 +1,6 @@ import { Entity, + Index, ManyToOne, OneToMany, Property, @@ -22,6 +23,11 @@ import { Delivery } from '../../delivery/entities/delivery.entity'; @Entity({ tableName: 'orders' }) @Unique({ properties: ['restaurant', 'orderNumber'] }) +@Index({ properties: ['restaurant', 'status'] }) +@Index({ properties: ['user', 'status'] }) +@Index({ properties: ['restaurant', 'orderNumber'] }) +@Index({ properties: ['status'] }) +@Index({ properties: ['paymentStatus'] }) export class Order extends BaseEntity { @ManyToOne(() => User) user!: User; diff --git a/src/modules/restaurants/entities/restaurant.entity.ts b/src/modules/restaurants/entities/restaurant.entity.ts index b206ff8..34f483c 100644 --- a/src/modules/restaurants/entities/restaurant.entity.ts +++ b/src/modules/restaurants/entities/restaurant.entity.ts @@ -1,8 +1,10 @@ -import { Collection, Entity, OneToMany, Property } from '@mikro-orm/core'; +import { Collection, Entity, Index, OneToMany, Property } from '@mikro-orm/core'; import { BaseEntity } from '../../../common/entities/base.entity'; import { Delivery } from '../../delivery/entities/delivery.entity'; @Entity({ tableName: 'restaurants' }) +@Index({ properties: ['isActive'] }) +@Index({ properties: ['slug', 'isActive'] }) export class Restaurant extends BaseEntity { // --- اطلاعات پایه --- @Property() diff --git a/src/modules/review/entities/review.entity.ts b/src/modules/review/entities/review.entity.ts index 228e0b2..aec0853 100644 --- a/src/modules/review/entities/review.entity.ts +++ b/src/modules/review/entities/review.entity.ts @@ -1,4 +1,4 @@ -import { Entity, ManyToOne, Property, Unique, Enum } from '@mikro-orm/core'; +import { Entity, Index, ManyToOne, Property, Unique, Enum } from '@mikro-orm/core'; import { BaseEntity } from '../../../common/entities/base.entity'; import { Food } from '../../foods/entities/food.entity'; import { User } from '../../users/entities/user.entity'; @@ -8,6 +8,9 @@ import { ReviewStatus } from '../enums/review-status.enum'; @Entity({ tableName: 'reviews' }) @Unique({ properties: ['order', 'food', 'user'] }) +@Index({ properties: ['food', 'status'] }) +@Index({ properties: ['user'] }) +@Index({ properties: ['order'] }) export class Review extends BaseEntity { @ManyToOne(() => Order) order: Order; diff --git a/src/modules/roles/entities/role.entity.ts b/src/modules/roles/entities/role.entity.ts index bae27e3..620d681 100755 --- a/src/modules/roles/entities/role.entity.ts +++ b/src/modules/roles/entities/role.entity.ts @@ -1,4 +1,4 @@ -import { Collection, Entity, ManyToMany, OneToMany, ManyToOne, Property } from '@mikro-orm/core'; +import { Collection, Entity, Index, ManyToMany, OneToMany, ManyToOne, Property } from '@mikro-orm/core'; import { BaseEntity } from '../../../common/entities/base.entity'; import { Permission } from './permission.entity'; import { Restaurant } from '../../restaurants/entities/restaurant.entity'; @@ -6,6 +6,7 @@ import { RolePermission } from './rolePermission.entity'; import { AdminRole } from 'src/modules/admin/entities/adminRole.entity'; @Entity({ tableName: 'roles' }) +@Index({ properties: ['restaurant'] }) export class Role extends BaseEntity { @Property() name!: string; diff --git a/src/modules/users/entities/user.entity.ts b/src/modules/users/entities/user.entity.ts index a3fdabf..17ac185 100644 --- a/src/modules/users/entities/user.entity.ts +++ b/src/modules/users/entities/user.entity.ts @@ -1,10 +1,11 @@ -import { Entity, Property, OneToMany, Collection, Cascade } from '@mikro-orm/core'; +import { Entity, Index, Property, OneToMany, Collection, Cascade } from '@mikro-orm/core'; import { BaseEntity } from '../../../common/entities/base.entity'; import { UserAddress } from './user-address.entity'; import { Order } from 'src/modules/orders/entities/order.entity'; import { normalizePhone } from '../../utils/phone.util'; @Entity({ tableName: 'users' }) +@Index({ properties: ['isActive'] }) export class User extends BaseEntity { @OneToMany(() => Order, order => order.user) orders = new Collection(this);