From 8689b44f597a17e07428f05edefa43bb93e3e123 Mon Sep 17 00:00:00 2001 From: David Mehren Date: Thu, 13 Aug 2020 20:26:47 +0200 Subject: [PATCH] Implement User entity. This commit implements the User entity according to the database schema and adds the Identity and AuthToken entities. Signed-off-by: David Mehren --- src/users/auth-token.entity.ts | 22 ++++++++++++++++ src/users/identity.entity.ts | 48 ++++++++++++++++++++++++++++++++++ src/users/user.entity.ts | 45 ++++++++++++++++++++++++++++++- src/users/users.module.ts | 4 ++- 4 files changed, 117 insertions(+), 2 deletions(-) create mode 100644 src/users/auth-token.entity.ts create mode 100644 src/users/identity.entity.ts diff --git a/src/users/auth-token.entity.ts b/src/users/auth-token.entity.ts new file mode 100644 index 000000000..cdfcefd06 --- /dev/null +++ b/src/users/auth-token.entity.ts @@ -0,0 +1,22 @@ +import { + Column, + Entity, + ManyToOne, + PrimaryGeneratedColumn, +} from 'typeorm/index'; +import { User } from './user.entity'; + +@Entity() +export class AuthToken { + @PrimaryGeneratedColumn() + id: number; + + @ManyToOne( + _ => User, + user => user.authToken, + ) + user: User; + + @Column() + accessToken: string; +} diff --git a/src/users/identity.entity.ts b/src/users/identity.entity.ts new file mode 100644 index 000000000..4c4103e98 --- /dev/null +++ b/src/users/identity.entity.ts @@ -0,0 +1,48 @@ +import { + Column, + CreateDateColumn, + Entity, + ManyToOne, + PrimaryGeneratedColumn, + UpdateDateColumn, +} from 'typeorm/index'; +import { User } from './user.entity'; + +@Entity() +export class Identity { + @PrimaryGeneratedColumn() + id: number; + + @ManyToOne( + _ => User, + user => user.identities, + ) + user: User; + + @Column() + providerName: string; + + @Column() + syncSource: boolean; + + @CreateDateColumn() + createdAt: Date; + + @UpdateDateColumn() + updatedAt: Date; + + @Column({ + nullable: true, + }) + providerUserId?: string; + + @Column({ + nullable: true, + }) + oAuthAccessToken?: string; + + @Column({ + nullable: true, + }) + passwordHash?: string; +} diff --git a/src/users/user.entity.ts b/src/users/user.entity.ts index dd3e90344..939ffd11c 100644 --- a/src/users/user.entity.ts +++ b/src/users/user.entity.ts @@ -1,8 +1,51 @@ import { Entity, PrimaryGeneratedColumn } from 'typeorm'; +import { Column, OneToMany } from 'typeorm/index'; +import { Note } from '../notes/note.entity'; +import { AuthToken } from './auth-token.entity'; +import { Identity } from './identity.entity'; @Entity() export class User { - //TODO: Still missing many properties @PrimaryGeneratedColumn('uuid') id: string; + + @Column() + userName: string; + + @Column() + displayName: string; + + @Column() + createdAt: Date; + + @Column() + updatedAt: Date; + + @Column({ + nullable: true, + }) + photo?: string; + + @Column({ + nullable: true, + }) + email?: string; + + @OneToMany( + _ => Note, + note => note.owner, + ) + ownedNotes: Note[]; + + @OneToMany( + _ => AuthToken, + authToken => authToken.user, + ) + authToken: AuthToken[]; + + @OneToMany( + _ => Identity, + identity => identity.user, + ) + identities: Identity[]; } diff --git a/src/users/users.module.ts b/src/users/users.module.ts index 3ffa0fbe5..55e613ae6 100644 --- a/src/users/users.module.ts +++ b/src/users/users.module.ts @@ -1,10 +1,12 @@ import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; +import { AuthToken } from './auth-token.entity'; +import { Identity } from './identity.entity'; import { User } from './user.entity'; import { UsersService } from './users.service'; @Module({ - imports: [TypeOrmModule.forFeature([User])], + imports: [TypeOrmModule.forFeature([User, AuthToken, Identity])], providers: [UsersService], exports: [UsersService], })