Skip to content

Commit 9f3627a

Browse files
committed
fix bug
1 parent e78ff76 commit 9f3627a

8 files changed

Lines changed: 72 additions & 20 deletions

src/modules/metadata/developers/developers.metadata.controller.spec.ts

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { PaginateQuery, PaginationType, paginate } from "nestjs-paginate";
22
import { Repository } from "typeorm";
33

4+
import { GamevaultGame } from "../../games/gamevault-game.entity";
45
import { DeveloperMetadata } from "./developer.metadata.entity";
56
import { DeveloperController } from "./developers.metadata.controller";
67

@@ -44,10 +45,16 @@ describe("DeveloperController", () => {
4445

4546
await controller.getDevelopers({} as PaginateQuery);
4647

47-
expect(queryBuilder.innerJoin).toHaveBeenCalledWith(
48+
expect(queryBuilder.innerJoin).toHaveBeenNthCalledWith(
49+
1,
4850
"developer.games",
4951
"games",
50-
"games.deleted_at IS NULL",
52+
);
53+
expect(queryBuilder.innerJoin).toHaveBeenNthCalledWith(
54+
2,
55+
GamevaultGame,
56+
"game",
57+
"game.metadata_id = games.id AND game.deleted_at IS NULL",
5158
);
5259
expect(queryBuilder.groupBy).toHaveBeenCalledWith("developer.id");
5360
expect(paginate).toHaveBeenCalledWith(
@@ -69,7 +76,7 @@ describe("DeveloperController", () => {
6976
await controller.getDevelopers({ sortBy: [] } as unknown as PaginateQuery);
7077

7178
expect(queryBuilder.addSelect).toHaveBeenCalledWith(
72-
"COUNT(games.id)",
79+
"COUNT(DISTINCT game.id)",
7380
"games_count",
7481
);
7582
expect(queryBuilder.orderBy).toHaveBeenCalledWith("games_count", "DESC");

src/modules/metadata/developers/developers.metadata.controller.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import { Repository } from "typeorm";
1818
import { MinimumRole } from "../../../decorators/minimum-role.decorator";
1919
import { PaginateQueryOptions } from "../../../decorators/pagination.decorator";
2020
import { ApiOkResponsePaginated } from "../../../globals";
21+
import { GamevaultGame } from "../../games/gamevault-game.entity";
2122
import { Role } from "../../users/models/role.enum";
2223
import { DeveloperMetadata } from "./developer.metadata.entity";
2324

@@ -50,7 +51,12 @@ export class DeveloperController {
5051
): Promise<Paginated<DeveloperMetadata>> {
5152
const queryBuilder = this.developerRepository
5253
.createQueryBuilder("developer")
53-
.innerJoin("developer.games", "games", "games.deleted_at IS NULL")
54+
.innerJoin("developer.games", "games")
55+
.innerJoin(
56+
GamevaultGame,
57+
"game",
58+
"game.metadata_id = games.id AND game.deleted_at IS NULL",
59+
)
5460
.where("developer.provider_slug = :provider_slug", {
5561
provider_slug: "gamevault",
5662
})
@@ -59,7 +65,7 @@ export class DeveloperController {
5965
// If no specific sort is provided, sort by the number of games in descending order
6066
if (query.sortBy?.length === 0) {
6167
queryBuilder
62-
.addSelect("COUNT(games.id)", "games_count")
68+
.addSelect("COUNT(DISTINCT game.id)", "games_count")
6369
.orderBy("games_count", "DESC");
6470
}
6571

src/modules/metadata/genres/genres.metadata.controller.spec.ts

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { PaginateQuery, PaginationType, paginate } from "nestjs-paginate";
22
import { Repository } from "typeorm";
33

4+
import { GamevaultGame } from "../../games/gamevault-game.entity";
45
import { GenreMetadata } from "./genre.metadata.entity";
56
import { GenreController } from "./genres.metadata.controller";
67

@@ -44,10 +45,16 @@ describe("GenreController", () => {
4445

4546
await controller.getGenres({} as PaginateQuery);
4647

47-
expect(queryBuilder.innerJoin).toHaveBeenCalledWith(
48+
expect(queryBuilder.innerJoin).toHaveBeenNthCalledWith(
49+
1,
4850
"genre.games",
4951
"games",
50-
"games.deleted_at IS NULL",
52+
);
53+
expect(queryBuilder.innerJoin).toHaveBeenNthCalledWith(
54+
2,
55+
GamevaultGame,
56+
"game",
57+
"game.metadata_id = games.id AND game.deleted_at IS NULL",
5158
);
5259
expect(queryBuilder.groupBy).toHaveBeenCalledWith("genre.id");
5360
expect(paginate).toHaveBeenCalledWith(
@@ -69,7 +76,7 @@ describe("GenreController", () => {
6976
await controller.getGenres({ sortBy: [] } as unknown as PaginateQuery);
7077

7178
expect(queryBuilder.addSelect).toHaveBeenCalledWith(
72-
"COUNT(games.id)",
79+
"COUNT(DISTINCT game.id)",
7380
"games_count",
7481
);
7582
expect(queryBuilder.orderBy).toHaveBeenCalledWith("games_count", "DESC");

src/modules/metadata/genres/genres.metadata.controller.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import { Repository } from "typeorm";
1818
import { MinimumRole } from "../../../decorators/minimum-role.decorator";
1919
import { PaginateQueryOptions } from "../../../decorators/pagination.decorator";
2020
import { ApiOkResponsePaginated } from "../../../globals";
21+
import { GamevaultGame } from "../../games/gamevault-game.entity";
2122
import { Role } from "../../users/models/role.enum";
2223
import { GenreMetadata } from "./genre.metadata.entity";
2324

@@ -50,7 +51,12 @@ export class GenreController {
5051
): Promise<Paginated<GenreMetadata>> {
5152
const queryBuilder = this.genreRepository
5253
.createQueryBuilder("genre")
53-
.innerJoin("genre.games", "games", "games.deleted_at IS NULL")
54+
.innerJoin("genre.games", "games")
55+
.innerJoin(
56+
GamevaultGame,
57+
"game",
58+
"game.metadata_id = games.id AND game.deleted_at IS NULL",
59+
)
5460
.where("genre.provider_slug = :provider_slug", {
5561
provider_slug: "gamevault",
5662
})
@@ -59,7 +65,7 @@ export class GenreController {
5965
// If no specific sort is provided, sort by the number of games in descending order
6066
if (query.sortBy?.length === 0) {
6167
queryBuilder
62-
.addSelect("COUNT(games.id)", "games_count")
68+
.addSelect("COUNT(DISTINCT game.id)", "games_count")
6369
.orderBy("games_count", "DESC");
6470
}
6571

src/modules/metadata/publishers/publishers.metadata.controller.spec.ts

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { PaginateQuery, PaginationType, paginate } from "nestjs-paginate";
22
import { Repository } from "typeorm";
33

4+
import { GamevaultGame } from "../../games/gamevault-game.entity";
45
import { PublisherMetadata } from "./publisher.metadata.entity";
56
import { PublisherController } from "./publishers.metadata.controller";
67

@@ -44,10 +45,16 @@ describe("PublisherController", () => {
4445

4546
await controller.getPublishers({} as PaginateQuery);
4647

47-
expect(queryBuilder.innerJoin).toHaveBeenCalledWith(
48+
expect(queryBuilder.innerJoin).toHaveBeenNthCalledWith(
49+
1,
4850
"publisher.games",
4951
"games",
50-
"games.deleted_at IS NULL",
52+
);
53+
expect(queryBuilder.innerJoin).toHaveBeenNthCalledWith(
54+
2,
55+
GamevaultGame,
56+
"game",
57+
"game.metadata_id = games.id AND game.deleted_at IS NULL",
5158
);
5259
expect(queryBuilder.groupBy).toHaveBeenCalledWith("publisher.id");
5360
expect(paginate).toHaveBeenCalledWith(
@@ -69,7 +76,7 @@ describe("PublisherController", () => {
6976
await controller.getPublishers({ sortBy: [] } as unknown as PaginateQuery);
7077

7178
expect(queryBuilder.addSelect).toHaveBeenCalledWith(
72-
"COUNT(games.id)",
79+
"COUNT(DISTINCT game.id)",
7380
"games_count",
7481
);
7582
expect(queryBuilder.orderBy).toHaveBeenCalledWith("games_count", "DESC");

src/modules/metadata/publishers/publishers.metadata.controller.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import { Repository } from "typeorm";
1818
import { MinimumRole } from "../../../decorators/minimum-role.decorator";
1919
import { PaginateQueryOptions } from "../../../decorators/pagination.decorator";
2020
import { ApiOkResponsePaginated } from "../../../globals";
21+
import { GamevaultGame } from "../../games/gamevault-game.entity";
2122
import { Role } from "../../users/models/role.enum";
2223
import { PublisherMetadata } from "./publisher.metadata.entity";
2324

@@ -50,7 +51,12 @@ export class PublisherController {
5051
): Promise<Paginated<PublisherMetadata>> {
5152
const queryBuilder = this.publisherRepository
5253
.createQueryBuilder("publisher")
53-
.innerJoin("publisher.games", "games", "games.deleted_at IS NULL")
54+
.innerJoin("publisher.games", "games")
55+
.innerJoin(
56+
GamevaultGame,
57+
"game",
58+
"game.metadata_id = games.id AND game.deleted_at IS NULL",
59+
)
5460
.where("publisher.provider_slug = :provider_slug", {
5561
provider_slug: "gamevault",
5662
})
@@ -59,7 +65,7 @@ export class PublisherController {
5965
// If no specific sort is provided, sort by the number of games in descending order
6066
if (query.sortBy?.length === 0) {
6167
queryBuilder
62-
.addSelect("COUNT(games.id)", "games_count")
68+
.addSelect("COUNT(DISTINCT game.id)", "games_count")
6369
.orderBy("games_count", "DESC");
6470
}
6571

src/modules/metadata/tags/tags.metadata.controller.spec.ts

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { PaginateQuery, PaginationType, paginate } from "nestjs-paginate";
22
import { Repository } from "typeorm";
33

4+
import { GamevaultGame } from "../../games/gamevault-game.entity";
45
import { TagMetadata } from "./tag.metadata.entity";
56
import { TagsController } from "./tags.metadata.controller";
67

@@ -44,10 +45,16 @@ describe("TagsController", () => {
4445

4546
await controller.getTags({} as PaginateQuery);
4647

47-
expect(queryBuilder.innerJoin).toHaveBeenCalledWith(
48+
expect(queryBuilder.innerJoin).toHaveBeenNthCalledWith(
49+
1,
4850
"tag.games",
4951
"games",
50-
"games.deleted_at IS NULL",
52+
);
53+
expect(queryBuilder.innerJoin).toHaveBeenNthCalledWith(
54+
2,
55+
GamevaultGame,
56+
"game",
57+
"game.metadata_id = games.id AND game.deleted_at IS NULL",
5158
);
5259
expect(queryBuilder.groupBy).toHaveBeenCalledWith("tag.id");
5360
expect(paginate).toHaveBeenCalledWith(
@@ -69,7 +76,7 @@ describe("TagsController", () => {
6976
await controller.getTags({ sortBy: [] } as unknown as PaginateQuery);
7077

7178
expect(queryBuilder.addSelect).toHaveBeenCalledWith(
72-
"COUNT(games.id)",
79+
"COUNT(DISTINCT game.id)",
7380
"games_count",
7481
);
7582
expect(queryBuilder.orderBy).toHaveBeenCalledWith("games_count", "DESC");

src/modules/metadata/tags/tags.metadata.controller.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import { Repository } from "typeorm";
1818
import { MinimumRole } from "../../../decorators/minimum-role.decorator";
1919
import { PaginateQueryOptions } from "../../../decorators/pagination.decorator";
2020
import { ApiOkResponsePaginated } from "../../../globals";
21+
import { GamevaultGame } from "../../games/gamevault-game.entity";
2122
import { Role } from "../../users/models/role.enum";
2223
import { TagMetadata } from "./tag.metadata.entity";
2324

@@ -50,7 +51,12 @@ export class TagsController {
5051
): Promise<Paginated<TagMetadata>> {
5152
const queryBuilder = this.tagRepository
5253
.createQueryBuilder("tag")
53-
.innerJoin("tag.games", "games", "games.deleted_at IS NULL")
54+
.innerJoin("tag.games", "games")
55+
.innerJoin(
56+
GamevaultGame,
57+
"game",
58+
"game.metadata_id = games.id AND game.deleted_at IS NULL",
59+
)
5460
.where("tag.provider_slug = :provider_slug", {
5561
provider_slug: "gamevault",
5662
})
@@ -59,7 +65,7 @@ export class TagsController {
5965
// If no specific sort is provided, sort by the number of games in descending order
6066
if (query.sortBy?.length === 0) {
6167
queryBuilder
62-
.addSelect("COUNT(games.id)", "games_count")
68+
.addSelect("COUNT(DISTINCT game.id)", "games_count")
6369
.orderBy("games_count", "DESC");
6470
}
6571

0 commit comments

Comments
 (0)