diff --git a/backend/src/entities/index.ts b/backend/src/entities/index.ts index 2c05a4a..6bca565 100644 --- a/backend/src/entities/index.ts +++ b/backend/src/entities/index.ts @@ -1 +1,2 @@ export * from './user-credentials.entity'; +export * from './user-data.entity'; diff --git a/backend/src/entities/user-data.entity.ts b/backend/src/entities/user-data.entity.ts new file mode 100644 index 0000000..8511179 --- /dev/null +++ b/backend/src/entities/user-data.entity.ts @@ -0,0 +1,22 @@ +import { + Column, + Entity, + PrimaryGeneratedColumn, + OneToOne, + JoinColumn, +} from 'typeorm'; + +import { UserCredentials } from './user-credentials.entity'; + +@Entity() +export class UserData { + @PrimaryGeneratedColumn('uuid') + public id: number; + + @Column({ default: false }) + public isEmailConfirmed: boolean; + + @OneToOne(() => UserCredentials) + @JoinColumn() + public user: UserCredentials; +} diff --git a/backend/src/modules/auth-module/auth.module.ts b/backend/src/modules/auth-module/auth.module.ts index ed6168d..efc84be 100644 --- a/backend/src/modules/auth-module/auth.module.ts +++ b/backend/src/modules/auth-module/auth.module.ts @@ -1,9 +1,10 @@ import { Module } from '@nestjs/common'; import { JwtModule } from '@nestjs/jwt'; import { TypeOrmModule } from '@nestjs/typeorm'; -import { UserCredentials } from 'src/entities/user-credentials.entity'; +import { UserData, UserCredentials } from 'src/entities'; import { AuthController } from './controller/auth.controller'; +import { UserDataRepository } from './repositories/user-data.repository'; import { UserRepository } from './repositories/user.repository'; import { AuthService } from './services/auth.service'; import { EncryptionService } from './services/encryption.service'; @@ -13,13 +14,14 @@ import { AccessTokenStrategy, RefreshTokenStrategy } from './strategies'; @Module({ imports: [ JwtModule.register({}), - TypeOrmModule.forFeature([UserCredentials]), + TypeOrmModule.forFeature([UserCredentials, UserData]), ], providers: [ AuthService, TokenManagementService, EncryptionService, UserRepository, + UserDataRepository, AccessTokenStrategy, RefreshTokenStrategy, ], diff --git a/backend/src/modules/auth-module/repositories/user-data.repository.ts b/backend/src/modules/auth-module/repositories/user-data.repository.ts new file mode 100644 index 0000000..85c593c --- /dev/null +++ b/backend/src/modules/auth-module/repositories/user-data.repository.ts @@ -0,0 +1,21 @@ +import { Injectable } from '@nestjs/common'; +import { InjectRepository } from '@nestjs/typeorm'; +import { UserData } from 'src/entities'; +import { Repository } from 'typeorm'; + +@Injectable() +export class UserDataRepository { + public constructor( + @InjectRepository(UserData) + private readonly repository: Repository + ) {} + + public async createInitialUserData(userid: number): Promise { + const userData = new UserData(); + + userData.id = userid; + userData.isEmailConfirmed = false; + + return this.repository.save(userData); + } +} diff --git a/backend/src/modules/auth-module/services/auth.service.ts b/backend/src/modules/auth-module/services/auth.service.ts index 6d2d498..1859820 100644 --- a/backend/src/modules/auth-module/services/auth.service.ts +++ b/backend/src/modules/auth-module/services/auth.service.ts @@ -1,6 +1,7 @@ import { ForbiddenException, Injectable } from '@nestjs/common'; import { TokensDto, UserCredentialsDto } from '../models/dto'; +import { UserDataRepository } from '../repositories/user-data.repository'; import { UserRepository } from '../repositories/user.repository'; import { EncryptionService } from './encryption.service'; @@ -10,6 +11,7 @@ import { TokenManagementService } from './token-management.service'; export class AuthService { public constructor( private readonly userRepository: UserRepository, + private readonly UserDataRepository: UserDataRepository, private readonly tokenManagementService: TokenManagementService, private readonly encryptionService: EncryptionService ) {} @@ -23,6 +25,8 @@ export class AuthService { passwordHashed ); + await this.UserDataRepository.createInitialUserData(user.id); + return this.generateAndPersistTokens(user.id, user.email); } diff --git a/backend/src/modules/database-module/database-config.ts b/backend/src/modules/database-module/database-config.ts index b674b2f..e355798 100644 --- a/backend/src/modules/database-module/database-config.ts +++ b/backend/src/modules/database-module/database-config.ts @@ -1,6 +1,6 @@ import { ConfigService } from '@nestjs/config'; import { TypeOrmModuleOptions } from '@nestjs/typeorm'; -import { UserCredentials } from 'src/entities'; +import { UserCredentials, UserData } from 'src/entities'; export const databaseConfigFactory = ( configService: ConfigService @@ -13,5 +13,5 @@ export const databaseConfigFactory = ( database: configService.get('DB_NAME'), synchronize: true, logging: true, - entities: [UserCredentials], + entities: [UserCredentials, UserData], });