Skip to content

Commit 44f2478

Browse files
authored
Merge pull request nestjsx#797 from conceptadev/feature/typeorm-v03-nest-v9
feat(typeorm): create initial support for typeorm ^0.3.0 and nest ^9.0.0
2 parents 5e4e363 + 3977dc9 commit 44f2478

File tree

8 files changed

+224
-253
lines changed

8 files changed

+224
-253
lines changed
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import { DataSource } from 'typeorm';
2+
3+
exports.default = new DataSource({
4+
type: 'mysql',
5+
host: '127.0.0.1',
6+
port: 3316,
7+
username: 'nestjsx_crud',
8+
password: 'nestjsx_crud',
9+
database: 'nestjsx_crud',
10+
entities: ['./**/*.entity.ts'],
11+
migrationsTableName: 'orm_migrations',
12+
migrations: ['./seeds.ts'],
13+
});
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import { DataSource } from 'typeorm';
2+
3+
exports.default = new DataSource({
4+
type: 'postgres',
5+
host: '127.0.0.1',
6+
port: 5455,
7+
username: 'root',
8+
password: 'root',
9+
database: 'nestjsx_crud',
10+
entities: ['./**/*.entity.ts'],
11+
migrationsTableName: 'orm_migrations',
12+
migrations: ['./seeds.ts'],
13+
});

integration/crud-typeorm/projects/user-project.entity.ts

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,15 +14,13 @@ export class UserProject {
1414
@Column({ nullable: true })
1515
public review!: string;
1616

17-
@ManyToOne((type) => Project, (el) => el.userProjects, {
18-
primary: true,
17+
@ManyToOne(() => Project, (el) => el.userProjects, {
1918
persistence: false,
2019
onDelete: 'CASCADE',
2120
})
2221
public project: Project;
2322

24-
@ManyToOne((type) => User, (el) => el.userProjects, {
25-
primary: true,
23+
@ManyToOne(() => User, (el) => el.userProjects, {
2624
persistence: false,
2725
})
2826
public user: User;

package.json

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,15 @@
1616
"test:coverage": "yarn test:all --coverage",
1717
"test:coveralls": "yarn test:coverage --coverageReporters=text-lcov | coveralls",
1818
"test:all": "yarn test:mysql && yarn test:postgres",
19-
"test:postgres": "yarn db:prepare:typeorm && yarn test",
19+
"test:postgres": "yarn db:prepare:typeorm:postgres && yarn test",
2020
"test:mysql": "yarn db:prepare:typeorm:mysql && TYPEORM_CONNECTION=mysql yarn test",
2121
"start:typeorm": "npx nodemon -w ./integration/crud-typeorm -e ts node_modules/ts-node/dist/bin.js integration/crud-typeorm/main.ts",
2222
"db:cli:typeorm": "cd ./integration/crud-typeorm && npx ts-node -r tsconfig-paths/register ../../node_modules/typeorm/cli.js",
23-
"db:sync:typeorm": "yarn db:cli:typeorm schema:sync -f=orm",
24-
"db:drop:typeorm": "yarn db:cli:typeorm schema:drop -f=orm",
25-
"db:seeds:typeorm": "yarn db:cli:typeorm migration:run -f=orm",
26-
"db:prepare:typeorm": "yarn db:drop:typeorm && yarn db:sync:typeorm && yarn db:seeds:typeorm",
27-
"db:prepare:typeorm:mysql": "yarn db:drop:typeorm -c=mysql && yarn db:sync:typeorm -c=mysql && yarn db:seeds:typeorm -c=mysql",
23+
"db:sync:typeorm": "yarn db:cli:typeorm schema:sync",
24+
"db:drop:typeorm": "yarn db:cli:typeorm schema:drop",
25+
"db:seeds:typeorm": "yarn db:cli:typeorm migration:run",
26+
"db:prepare:typeorm:postgres": "yarn db:drop:typeorm -d=orm.postgres.ts && yarn db:sync:typeorm -d=orm.postgres.ts && yarn db:seeds:typeorm -d=orm.postgres.ts",
27+
"db:prepare:typeorm:mysql": "yarn db:drop:typeorm -d=orm.mysql.ts && yarn db:sync:typeorm -d=orm.mysql.ts && yarn db:seeds:typeorm -d=orm.mysql.ts",
2828
"format": "npx pretty-quick --pattern \"packages/**/!(*.d).ts\"",
2929
"lint": "npx eslint \"packages/**/!(*.d).ts\" --fix",
3030
"commit": "npx git-cz",
@@ -47,12 +47,12 @@
4747
}
4848
},
4949
"dependencies": {
50-
"@nestjs/common": "8.4.3",
51-
"@nestjs/core": "8.4.3",
52-
"@nestjs/platform-express": "8.4.3",
50+
"@nestjs/common": "^9.0.0",
51+
"@nestjs/core": "^9.0.0",
52+
"@nestjs/platform-express": "^9.0.0",
5353
"@nestjs/swagger": "5.2.1",
54-
"@nestjs/testing": "8.4.3",
55-
"@nestjs/typeorm": "8.0.3",
54+
"@nestjs/testing": "^9.0.0",
55+
"@nestjs/typeorm": "^9.0.0",
5656
"@zmotivat0r/mrepo": "0.8.1",
5757
"class-transformer": "0.3.2",
5858
"class-validator": "0.13.2",
@@ -64,7 +64,7 @@
6464
"reflect-metadata": "0.1.13",
6565
"rxjs": "7.5.5",
6666
"swagger-ui-express": "4.3.0",
67-
"typeorm": "0.2.45"
67+
"typeorm": "^0.3.0"
6868
},
6969
"devDependencies": {
7070
"@nuxtjs/opencollective": "0.2.2",

packages/crud-typeorm/src/typeorm-crud.service.ts

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ import {
2626
ObjectLiteral,
2727
Repository,
2828
SelectQueryBuilder,
29-
ConnectionOptions,
29+
DataSourceOptions,
3030
EntityMetadata,
3131
} from 'typeorm';
3232

@@ -41,7 +41,7 @@ interface IAllowedRelation {
4141
}
4242

4343
export class TypeOrmCrudService<T> extends CrudService<T> {
44-
protected dbName: ConnectionOptions['type'];
44+
protected dbName: DataSourceOptions['type'];
4545

4646
protected entityColumns: string[];
4747

@@ -564,13 +564,13 @@ export class TypeOrmCrudService<T> extends CrudService<T> {
564564
? cond.select.filter((column) => allowedRelation.allowedColumns.some((allowed) => allowed === column))
565565
: allowedRelation.allowedColumns;
566566

567-
const select = [
568-
...allowedRelation.primaryColumns,
569-
...(isArrayFull(options.persist) ? options.persist : []),
570-
...columns,
571-
].map((col) => `${alias}.${col}`);
567+
const select = new Set(
568+
[...allowedRelation.primaryColumns, ...(isArrayFull(options.persist) ? options.persist : []), ...columns].map(
569+
(col) => `${alias}.${col}`,
570+
),
571+
);
572572

573-
builder.addSelect(select);
573+
builder.addSelect(Array.from(select));
574574
}
575575
}
576576

@@ -783,13 +783,15 @@ export class TypeOrmCrudService<T> extends CrudService<T> {
783783
? query.fields.filter((field) => allowed.some((col) => field === col))
784784
: allowed;
785785

786-
const select = [
787-
...(options.persist && options.persist.length ? options.persist : []),
788-
...columns,
789-
...this.entityPrimaryColumns,
790-
].map((col) => `${this.alias}.${col}`);
786+
const select = new Set(
787+
[
788+
...(options.persist && options.persist.length ? options.persist : []),
789+
...columns,
790+
...this.entityPrimaryColumns,
791+
].map((col) => `${this.alias}.${col}`),
792+
);
791793

792-
return select;
794+
return Array.from(select);
793795
}
794796

795797
protected getSort(query: ParsedRequestParams, options: QueryOptions) {

packages/crud-typeorm/test/c.basic-crud.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -308,7 +308,7 @@ describe('#crud-typeorm', () => {
308308

309309
describe('#findOne', () => {
310310
it('should return one entity', async () => {
311-
const data = await service.findOne(1);
311+
const data = await service.findOne({ where: { id: 1 } });
312312
expect(data.id).toBe(1);
313313
});
314314
});

packages/crud-typeorm/test/d.crud-auth.spec.ts

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,4 @@
1-
import {
2-
Controller,
3-
INestApplication,
4-
Injectable,
5-
CanActivate,
6-
ExecutionContext,
7-
} from '@nestjs/common';
1+
import { Controller, INestApplication, Injectable, CanActivate, ExecutionContext } from '@nestjs/common';
82
import { APP_FILTER, APP_GUARD } from '@nestjs/core';
93
import { Test } from '@nestjs/testing';
104
import { TypeOrmModule } from '@nestjs/typeorm';
@@ -31,7 +25,7 @@ describe('#crud-typeorm', () => {
3125

3226
async canActivate(ctx: ExecutionContext): Promise<boolean> {
3327
const req = ctx.switchToHttp().getRequest();
34-
req[USER_REQUEST_KEY] = await this.usersService.findOne(1);
28+
req[USER_REQUEST_KEY] = await this.usersService.findOne({ where: { id: 1 } });
3529

3630
return true;
3731
}

0 commit comments

Comments
 (0)