NestJS TypeORM insert with one-to-one relationship

Viewed 28

I have two tables: User and Settings. Table Settings refers to table User. Table Settings has FK user_id. How to make it so that when creating a user using createQueryBuilder, an entry is automatically entered into the table Settings?

user.entity.ts:

@Entity('users')
export class User {
    @PrimaryColumn({ type: 'text' })
    public id: string;

    @Column({ unique: true, nullable: true })
    public username: string;

    @Column({ default: 'user' })
    public role: string;

    @Column({ default: false })
    public is_banned: boolean;

    @CreateDateColumn()
    public created_at: Date;

    @UpdateDateColumn()
    public updated_at: Date;
}

settings.entity.ts:

@Entity('settings')
export class Settings {
    @PrimaryGeneratedColumn()
    public id: number;

    @Column({ default: false })
    public video_mode: boolean;

    @CreateDateColumn()
    public created_at: Date;

    @UpdateDateColumn()
    public updated_at: Date;

    @OneToOne(() => User, {
        eager: true, 
        cascade: ['insert'],
        onDelete: 'CASCADE'
    })
    @JoinColumn({ name: 'user_id' })
    public user_id: User;
}

My query:

public async add(dto: CreateUserDto) {
     return this.repository.createQueryBuilder('user')
          .insert()
          .into(User)
          .values(dto)
          .orUpdate(['id', 'username', 'updated_at'], ['id'])
          .returning('*')
          .execute()
          .then((data) => data.generatedMaps[0]);
}

Here I insert a user and if such an id already exists, then I update its data and return it back. Now I also need to add a new entry to the table Settings . How can I implement this in my request?

0 Answers
Related