Skip to content
Snippets Groups Projects
Commit 74dd87ec authored by stevereis's avatar stevereis
Browse files

fix: Typeorm issue with entity name (user)

fix: Add migration for production DB
parent 215c80dc
No related branches found
No related tags found
No related merge requests found
Showing with 81 additions and 35 deletions
......@@ -14,10 +14,3 @@ AUTH_JWT_SECRET=SecretForDevPurposeOnly
AUTH_JWT_TOKEN_EXPIRES_IN=2d
AUTH_COOKIE_SAME_SITE=strict
AUTH_COOKIE_SECURE=true
#DB
DB_HOST=localhost
DB_PORT=5454
DB_USERNAME=postgres
DB_PASSWORD=pass123
DB_NAME=postgres
import { ConfigModule } from '@nestjs/config';
import dbConfiguration from './src/config/db.config';
ConfigModule.forRoot({
isGlobal: true,
envFilePath: ['.env', '.env.defaults'],
load: [dbConfiguration],
});
const config = {
...dbConfiguration(),
entities: ['dist/**/*.entity.js', 'dist/**/*.model.js'],
migrations: ['dist/migrations/*{.ts,.js}'],
migrationsRun: false,
cli: {
migrationsDir: 'src/migrations',
},
};
export default config;
......@@ -20,7 +20,10 @@
"test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand",
"test:e2e": "jest --config ./test/jest.e2e-config.ts",
"test:we2e": "jest --watch --config ./test/jest.e2e-config.ts",
"prepare": "cd .. && husky install api/.husky"
"prepare": "cd .. && husky install api/.husky",
"typeorm": "node --require ts-node/register ./node_modules/typeorm/cli.js",
"typeorm:migration:generate": "npm run typeorm -- migration:generate -n",
"typeorm:migration:run": "npm run typeorm -- migration:run"
},
"dependencies": {
"@nestjs/apollo": "^10.0.6",
......
import { registerAs } from '@nestjs/config';
export default registerAs('database', () => {
return {
type: 'postgres',
host: process.env.DB_HOST || 'localhost',
port: +process.env.DB_PORT || 5432,
username: process.env.DB_USERNAME || 'postgres',
password: process.env.DB_PASSWORD || 'pass123',
database: process.env.DB_NAME || 'postgres',
};
});
import { ObjectType } from '@nestjs/graphql';
import { Entity } from './entity.model';
import { BaseModel } from './entity.model';
@ObjectType()
export class Category extends Entity {}
export class Category extends BaseModel {}
import { Field, ObjectType } from '@nestjs/graphql';
import { Entity } from './entity.model';
import { BaseModel } from './entity.model';
@ObjectType()
export class Dataset extends Entity {
export class Dataset extends BaseModel {
@Field({ nullable: true, defaultValue: false })
isLongitudinal?: boolean;
}
import { Field, ObjectType } from '@nestjs/graphql';
import { Dataset } from './dataset.model';
import { Entity } from './entity.model';
import { BaseModel } from './entity.model';
import { Group } from './group.model';
import { Variable } from './variable.model';
@ObjectType()
export class Domain extends Entity {
export class Domain extends BaseModel {
@Field({ nullable: true })
description?: string;
......
......@@ -2,7 +2,7 @@ import { Field, InputType, ObjectType } from '@nestjs/graphql';
@InputType()
@ObjectType()
export class Entity {
export class BaseModel {
@Field()
id: string;
......
import { Field, ObjectType } from '@nestjs/graphql';
import { Entity } from './entity.model';
import { BaseModel } from './entity.model';
@ObjectType()
export class Group extends Entity {
export class Group extends BaseModel {
@Field({ nullable: true })
description?: string;
......
import { Field, ObjectType } from '@nestjs/graphql';
import { Category } from './category.model';
import { Entity } from './entity.model';
import { BaseModel } from './entity.model';
import { Group } from './group.model';
@ObjectType()
export class Variable extends Entity {
export class Variable extends BaseModel {
@Field({ nullable: true })
type?: string;
......
......@@ -19,6 +19,6 @@ async function bootstrap() {
app.use(cookieParser());
await app.listen(process.env.GATEWAY_PORT);
await app.listen(process.env.GATEWAY_PORT || 8081);
}
bootstrap();
import { ApolloDriver, ApolloDriverConfig } from '@nestjs/apollo';
import { Module } from '@nestjs/common';
import { ConfigModule } from '@nestjs/config';
import { ConfigModule, ConfigService } from '@nestjs/config';
import { GraphQLModule } from '@nestjs/graphql';
import { TypeOrmModule } from '@nestjs/typeorm';
import { GraphQLError } from 'graphql';
import { join } from 'path';
import { AuthModule } from 'src/auth/auth.module';
import dbConfig from 'src/config/db.config';
import { EngineModule } from 'src/engine/engine.module';
import { FilesModule } from 'src/files/files.module';
import { UsersModule } from 'src/users/users.module';
......@@ -17,6 +18,7 @@ import { AppService } from './app.service';
ConfigModule.forRoot({
isGlobal: true,
envFilePath: ['.env', '.env.defaults'],
load: [dbConfig],
}),
GraphQLModule.forRoot<ApolloDriverConfig>({
driver: ApolloDriver,
......@@ -44,15 +46,16 @@ import { AppService } from './app.service';
type: process.env.ENGINE_TYPE,
baseurl: process.env.ENGINE_BASE_URL,
}),
TypeOrmModule.forRoot({
type: 'postgres', // type of our database
host: process.env.DB_HOST, // database host
port: parseInt(process.env.DB_PORT), // database host
username: process.env.DB_USERNAME, // username
password: process.env.DB_PASSWORD, // user password
database: process.env.DB_NAME, // name of our database,
autoLoadEntities: true, // models will be loaded automatically
synchronize: process.env.NODE_ENV !== 'production', // your entities will be synced with the database(recommended: disable in prod)
TypeOrmModule.forRootAsync({
inject: [ConfigService],
useFactory: (config: ConfigService) => ({
...config.get('database'),
migrations: ['dist/migrations/*{.ts,.js}'],
migrationsRun: process.env.NODE_ENV !== 'dev',
synchronize: process.env.NODE_ENV === 'dev',
loggerLevel: 'debug',
autoLoadEntities: true,
}),
}),
AuthModule,
UsersModule,
......
import { MigrationInterface, QueryRunner } from 'typeorm';
export class initSetup1648306965760 implements MigrationInterface {
name = 'initSetup1648306965760';
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(
`CREATE TABLE "user" ("id" character varying NOT NULL, "agreeNDA" boolean DEFAULT false, CONSTRAINT "PK_cace4a159ff9f2512dd42373760" PRIMARY KEY ("id"))`,
);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`DROP TABLE "user"`);
}
}
import { Field, ObjectType } from '@nestjs/graphql';
import { Entity, PrimaryColumn, Column } from 'typeorm';
@Entity()
@Entity({ name: 'user' })
@ObjectType()
export class User {
@PrimaryColumn()
......@@ -17,7 +17,7 @@ export class User {
@Field({ nullable: true })
email?: string;
@Column()
@Column({ nullable: true, default: false })
@Field({ nullable: true })
agreeNDA?: boolean;
......
......@@ -33,11 +33,11 @@ export class UsersService {
* @returns The updated user.
*/
async update(id: string, data: UpdateUserInput): Promise<InternalUser> {
const test = {
const updateData = {
id,
...data,
};
return await this.userRepository.save(test);
return await this.userRepository.save(updateData);
}
}
{
"extends": "./tsconfig.json",
"exclude": ["node_modules", "test", "dist", "**/*spec.ts"]
"exclude": ["node_modules", "test", "dist", "**/*spec.ts", "ormconfig.ts"]
}
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment