Skip to content

Commit eae7e27

Browse files
committed
fix: add indexes for faster query
1 parent e29df3b commit eae7e27

14 files changed

+71
-64
lines changed

src/entities/category.entity.ts

+9-4
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,22 @@
1-
import { Collection, Entity, ManyToMany, Property } from "@mikro-orm/postgresql";
1+
import {
2+
Collection,
3+
Entity,
4+
ManyToMany,
5+
Property,
6+
} from "@mikro-orm/postgresql";
27
import { BaseEntity } from "@common/database";
38
import { Post } from "./index";
49

510
@Entity()
611
export class Category extends BaseEntity {
712
@Property({ index: true })
8-
name!: string;
13+
name!: string;
914

1015
@Property()
11-
description!: string;
16+
description!: string;
1217

1318
@ManyToMany(() => Post, post => post.categories)
14-
posts = new Collection<Post>(this);
19+
posts = new Collection<Post>(this);
1520

1621
constructor(partial?: Partial<Category>) {
1722
super();

src/entities/comment.entity.ts

+4-5
Original file line numberDiff line numberDiff line change
@@ -6,18 +6,17 @@ import type { Post, User } from "./index";
66
@Entity()
77
export class Comment extends BaseEntity {
88
@Property()
9-
body!: string;
9+
body!: string;
1010

1111
@ManyToOne({
12-
eager: false,
12+
index: true,
1313
})
14-
post!: Rel<Ref<Post>>;
14+
post!: Rel<Ref<Post>>;
1515

1616
@ManyToOne({
17-
eager: false,
1817
index: true,
1918
})
20-
author!: Rel<Ref<User>>;
19+
author!: Rel<Ref<User>>;
2120

2221
constructor(partial?: Partial<Comment>) {
2322
super();

src/entities/conversation.entity.ts

+10-4
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,25 @@
11
import { BaseEntity } from "@common/database";
2-
import { Collection, Entity, ManyToMany, OneToMany, Property } from "@mikro-orm/postgresql";
2+
import {
3+
Collection,
4+
Entity,
5+
ManyToMany,
6+
OneToMany,
7+
Property,
8+
} from "@mikro-orm/postgresql";
39
import { Message, User } from "./index";
410

511
@Entity()
612
export class Conversation extends BaseEntity {
713
@Property({ index: true })
8-
chatName!: string;
14+
chatName!: string;
915

1016
@ManyToMany(() => User, user => user.conversations, { index: true })
11-
users = new Collection<User>(this);
17+
users = new Collection<User>(this);
1218

1319
@OneToMany(() => Message, message => message.conversation, {
1420
orphanRemoval: true,
1521
})
16-
messages = new Collection<Message>(this);
22+
messages = new Collection<Message>(this);
1723

1824
constructor(partial?: Partial<Conversation>) {
1925
super();

src/entities/message.entity.ts

+6-8
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,28 @@
11
import { BaseEntity } from "@common/database";
2-
import type { Opt , Ref } from "@mikro-orm/postgresql";
2+
import type { Opt, Ref } from "@mikro-orm/postgresql";
33
import { Entity, ManyToOne, Property, Rel } from "@mikro-orm/postgresql";
44
import type { Conversation, User } from "./index";
55

66
@Entity()
77
export class Message extends BaseEntity {
88
@Property()
9-
body!: string;
9+
body!: string;
1010

1111
@ManyToOne({
12-
eager: false,
1312
index: true,
1413
})
15-
sender!: Rel<Ref<User>>;
14+
sender!: Rel<Ref<User>>;
1615

1716
@ManyToOne({
18-
eager: false,
1917
index: true,
2018
})
21-
conversation!: Rel<Ref<Conversation>>;
19+
conversation!: Rel<Ref<Conversation>>;
2220

2321
@Property()
24-
isRead: boolean & Opt = false;
22+
isRead: boolean & Opt = false;
2523

2624
@Property()
27-
readAt?: Date;
25+
readAt?: Date;
2826

2927
constructor(partial?: Partial<Message>) {
3028
super();

src/entities/news-letter.entity.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
1-
import { Entity ,Property} from "@mikro-orm/postgresql";
1+
import { Entity, Property } from "@mikro-orm/postgresql";
22
import { BaseEntity } from "@common/database";
33

44
@Entity()
55
export class NewsLetter extends BaseEntity {
66
@Property({ index: true, unique: true })
7-
name!: string;
7+
name!: string;
88

99
@Property({ columnType: "text" })
10-
content!: string;
10+
content!: string;
1111

1212
@Property()
13-
sentAt?: Date;
13+
sentAt?: Date;
1414

1515
constructor(partial?: Partial<NewsLetter>) {
1616
super();

src/entities/otp-log.entity.ts

+5-6
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,26 @@
1-
import type { Opt ,Ref } from "@mikro-orm/postgresql";
1+
import type { Opt, Ref } from "@mikro-orm/postgresql";
22
import { Entity, ManyToOne, Property, Rel } from "@mikro-orm/postgresql";
33
import { BaseEntity } from "@common/database";
44
import type { User } from "./user.entity";
55

66
@Entity()
77
export class OtpLog extends BaseEntity {
88
@Property()
9-
expiresIn!: Date;
9+
expiresIn!: Date;
1010

1111
@Property({
1212
length: 20,
1313
index: true,
1414
})
15-
otpCode?: string;
15+
otpCode?: string;
1616

1717
@ManyToOne({
18-
eager: false,
1918
index: true,
2019
})
21-
user!: Rel<Ref<User>>;
20+
user!: Rel<Ref<User>>;
2221

2322
@Property()
24-
isUsed: boolean & Opt = false;
23+
isUsed: boolean & Opt = false;
2524

2625
constructor(partial?: Partial<OtpLog>) {
2726
super();

src/entities/points-redemption-log.entity.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,13 @@ import type { User } from "./user.entity";
66
@Entity()
77
export class PointRedemptionLog extends BaseEntity {
88
@Property()
9-
points!: number;
9+
points!: number;
1010

1111
@Property({ columnType: "numeric(9,2)" })
12-
amount!: string;
12+
amount!: string;
1313

1414
@ManyToOne()
15-
user!: Rel<Ref<User>>;
15+
user!: Rel<Ref<User>>;
1616

1717
constructor(partial?: Partial<PointRedemptionLog>) {
1818
super();

src/entities/post.entity.ts

+4-6
Original file line numberDiff line numberDiff line change
@@ -39,20 +39,18 @@ export class Post extends BaseEntity {
3939
@Property()
4040
readCount: number & Opt = 0;
4141

42-
@Property()
42+
@Property({ index: true })
4343
published: boolean & Opt = false;
4444

4545
@Property()
4646
favoritesCount: number & Opt = 0;
4747

4848
@ManyToOne({
49-
eager: false,
5049
index: true,
5150
})
5251
author!: Rel<Ref<User>>;
5352

5453
@OneToMany(() => Comment, comment => comment.post, {
55-
eager: false,
5654
orphanRemoval: true,
5755
})
5856
comments = new Collection<Comment>(this);
@@ -76,9 +74,9 @@ export class Post extends BaseEntity {
7674
@BeforeUpdate()
7775
async generateSlug(arguments_: EventArgs<this>) {
7876
if (arguments_.changeSet?.payload?.title) {
79-
this.slug
80-
= `${slugify(this.title)
81-
}-${Math.trunc(Math.random() * 36 ** 6).toString(36)}`;
77+
this.slug = `${slugify(
78+
this.title,
79+
)}-${Math.trunc(Math.random() * 36 ** 6).toString(36)}`;
8280
}
8381
this.readingTime = this.getReadingTime(this.content);
8482
}

src/entities/protocol.entity.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,16 @@ import { BaseEntity } from "@common/database";
66
@Entity()
77
export class Protocol extends BaseEntity {
88
@Property()
9-
loginAttemptnumbererval!: number;
9+
loginAttemptnumbererval!: number;
1010

1111
@Property()
12-
loginnumberervalUnit!: string;
12+
loginnumberervalUnit!: string;
1313

1414
@Property()
15-
loginMaxRetry!: number;
15+
loginMaxRetry!: number;
1616

1717
@Property()
18-
otpExpiryInMinutes!: number;
18+
otpExpiryInMinutes!: number;
1919

2020
constructor(partial?: Partial<Protocol>) {
2121
super();

src/entities/referral.entity.ts

+10-3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,12 @@
11
import type { Opt, Ref } from "@mikro-orm/postgresql";
2-
import { Entity, Enum, Index, ManyToOne, Property, Rel } from "@mikro-orm/postgresql";
2+
import {
3+
Entity,
4+
Enum,
5+
Index,
6+
ManyToOne,
7+
Property,
8+
Rel,
9+
} from "@mikro-orm/postgresql";
310
import { ReferralStatus } from "@common/@types";
411
import { BaseEntity } from "@common/database";
512
import type { User } from "./user.entity";
@@ -9,12 +16,12 @@ export class Referral extends BaseEntity {
916
@ManyToOne({
1017
index: true,
1118
})
12-
referrer!: Rel<Ref<User>>;
19+
referrer!: Rel<Ref<User>>;
1320

1421
@Property({
1522
index: true,
1623
})
17-
mobileNumber!: string;
24+
mobileNumber!: string;
1825

1926
@Index()
2027
@Enum(() => ReferralStatus)

src/entities/refresh-token.entity.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,15 @@ import type { User } from "./user.entity";
66
@Entity()
77
export class RefreshToken extends BaseEntity {
88
@Property()
9-
expiresIn!: Date;
9+
expiresIn!: Date;
1010

1111
@ManyToOne({
12-
eager: false,
12+
index: true,
1313
})
14-
user!: Rel<Ref<User>>;
14+
user!: Rel<Ref<User>>;
1515

1616
@Property()
17-
isRevoked: boolean & Opt = false;
17+
isRevoked: boolean & Opt = false;
1818

1919
constructor(partial?: Partial<RefreshToken>) {
2020
super();

src/entities/subscribers.entity.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { BaseEntity } from "@common/database";
44
@Entity()
55
export class Subscriber extends BaseEntity {
66
@Property({ index: true, unique: true })
7-
email!: string;
7+
email!: string;
88

99
constructor(partial?: Partial<Subscriber>) {
1010
super();

src/entities/tag.entity.ts

+4-6
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
import {
22
BeforeCreate,
3-
43
BeforeUpdate,
5-
64
BeforeUpsert,
75
Collection,
86
Entity,
@@ -21,16 +19,16 @@ export class Tag extends BaseEntity {
2119
index: true,
2220
unique: true,
2321
})
24-
title!: string;
22+
title!: string;
2523

2624
@Property({ columnType: "text" })
27-
description!: string;
25+
description!: string;
2826

2927
@Property({ index: true })
30-
slug?: string;
28+
slug?: string;
3129

3230
@ManyToMany(() => Post, post => post.tags)
33-
posts = new Collection<Post>(this);
31+
posts = new Collection<Post>(this);
3432

3533
constructor(partial?: Partial<Tag>) {
3634
super();

src/entities/user.entity.ts

+3-6
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,15 @@
1-
import type {
2-
FilterQuery,
3-
} from "@mikro-orm/postgresql";
1+
import type { FilterQuery } from "@mikro-orm/postgresql";
42
import {
53
BeforeCreate,
6-
74
BeforeUpdate,
8-
95
BeforeUpsert,
106
Collection,
117
Embeddable,
128
Embedded,
139
Entity,
1410
Enum,
1511
EventArgs,
12+
Index,
1613
ManyToMany,
1714
OneToMany,
1815
Property,
@@ -67,6 +64,7 @@ export class User extends BaseEntity {
6764
@Property()
6865
isTwoFactorEnabled? = false;
6966

67+
@Index()
7068
@Enum({ items: () => Roles, array: true })
7169
roles?: Roles[] = [Roles.AUTHOR];
7270

@@ -78,7 +76,6 @@ export class User extends BaseEntity {
7876

7977
@OneToMany(() => Post, post => post.author, {
8078
orphanRemoval: true,
81-
eager: false
8279
})
8380
posts = new Collection<Post>(this);
8481

0 commit comments

Comments
 (0)