Feature: Create Event - First Step Frontend #17
|
@ -22,6 +22,21 @@ export class SessionRepository {
|
|||
.getMany();
|
||||
}
|
||||
|
||||
public async getUserIdBySessionId(sessionId: string): Promise<string | null> {
|
||||
const session = await this.findSessionBySessionId(sessionId);
|
||||
|
||||
if (!session || !session.json) {
|
||||
return null;
|
||||
}
|
||||
|
||||
const sessionData =
|
||||
typeof session.json === 'string'
|
||||
? JSON.parse(session.json)
|
||||
: session.json;
|
||||
|
||||
return sessionData?.passport?.user?.id || null;
|
||||
}
|
||||
|
||||
public async findSessionBySessionId(
|
||||
sessionId: string
|
||||
): Promise<Session | null> {
|
||||
|
|
|
@ -20,6 +20,10 @@ export class SessionService {
|
|||
return this.sessionRepository.findSessionsByUserId(userId);
|
||||
}
|
||||
|
||||
public async getUserIdBySessionId(sessionId: string): Promise<string | null> {
|
||||
return this.sessionRepository.getUserIdBySessionId(sessionId);
|
||||
}
|
||||
|
||||
public async isSessioExpired(session: Session): Promise<boolean> {
|
||||
return this.sessionRepository.isSessionExpired(session);
|
||||
}
|
||||
|
|
|
@ -21,10 +21,17 @@ export class UserDataRepository {
|
|||
return this.repository.save(userData);
|
||||
}
|
||||
|
||||
// public async updateEmailVerificationStatus(userId: string): Promise<void> {
|
||||
// await this.repository.update(
|
||||
// { user: { id: userId } },
|
||||
// { isEmailConfirmed: true }
|
||||
// );
|
||||
// }
|
||||
public async updateEmailVerificationStatus(userId: string): Promise<boolean> {
|
||||
try {
|
||||
const result = await this.repository.update(
|
||||
{ userCredentials: { id: userId } },
|
||||
{ isEmailConfirmed: true }
|
||||
);
|
||||
|
||||
return result.affected > 0;
|
||||
} catch (error) {
|
||||
console.error('Error updating email verification status:', error);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,5 +1,15 @@
|
|||
import { Controller, Get, HttpCode, HttpStatus, Query } from '@nestjs/common';
|
||||
import {
|
||||
Controller,
|
||||
Get,
|
||||
Req,
|
||||
HttpCode,
|
||||
HttpStatus,
|
||||
Query,
|
||||
UseGuards,
|
||||
} from '@nestjs/common';
|
||||
import { ApiCreatedResponse, ApiTags } from '@nestjs/swagger';
|
||||
import { Request } from 'express';
|
||||
import { SessionGuard } from 'src/modules/session/guard';
|
||||
import { Public } from 'src/shared/decorator';
|
||||
|
||||
import { EmailVerificationService } from '../services/email-verification.service';
|
||||
|
@ -23,4 +33,15 @@ export class VerifyController {
|
|||
): Promise<boolean> {
|
||||
return this.emailVerificationService.verifyEmail(tokenToVerify);
|
||||
}
|
||||
|
||||
@ApiCreatedResponse({
|
||||
description: 'Check if email is verified',
|
||||
type: Boolean,
|
||||
})
|
||||
@Get('check')
|
||||
@HttpCode(HttpStatus.OK)
|
||||
@UseGuards(SessionGuard)
|
||||
public async isEmailVerified(@Req() request: Request): Promise<boolean> {
|
||||
return this.emailVerificationService.isEmailVerified(request.sessionID);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,6 +3,7 @@ import { randomBytes } from 'crypto';
|
|||
import { Injectable } from '@nestjs/common';
|
||||
import { ConfigService } from '@nestjs/config';
|
||||
import { EmailVerification } from 'src/entities';
|
||||
import { SessionService } from 'src/modules/session/services/session.service';
|
||||
import { UriEncoderService } from 'src/shared';
|
||||
|
||||
import { UserDataRepository } from '../../user-module/repositories/user-data.repository';
|
||||
|
@ -13,6 +14,7 @@ export class EmailVerificationService {
|
|||
public constructor(
|
||||
private readonly emailVerifyRepository: EmailVerifyRepository,
|
||||
private readonly userDataRepository: UserDataRepository,
|
||||
private readonly sessionService: SessionService,
|
||||
private readonly configService: ConfigService
|
||||
) {}
|
||||
|
||||
|
@ -42,17 +44,25 @@ export class EmailVerificationService {
|
|||
await this.deleteEmailVerificationToken(tokenToVerify);
|
||||
|
||||
if (emailVerification && emailVerification.user) {
|
||||
// await this.userDataRepository.updateEmailVerificationStatus(
|
||||
// emailVerification.user.id
|
||||
// );
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
const isStatusUpdated =
|
||||
await this.userDataRepository.updateEmailVerificationStatus(
|
||||
emailVerification.user.id
|
||||
);
|
||||
|
||||
return isStatusUpdated;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public async isEmailVerified(sessionID: string): Promise<boolean> {
|
||||
const userId = await this.sessionService.getUserIdBySessionId(sessionID);
|
||||
|
||||
// TODO: Check if user is verified
|
||||
return true;
|
||||
}
|
||||
|
||||
private async createVerificationToken(): Promise<string> {
|
||||
const verifyToken = randomBytes(32).toString('hex');
|
||||
|
||||
|
|
|
@ -3,6 +3,7 @@ import { ConfigModule } from '@nestjs/config';
|
|||
import { TypeOrmModule } from '@nestjs/typeorm';
|
||||
import { EmailVerification } from 'src/entities';
|
||||
|
||||
import { SessionModule } from '../session/session.module';
|
||||
import { UserModule } from '../user-module/user.module';
|
||||
|
||||
import { VerifyController } from './controller/verify.controller';
|
||||
|
@ -12,6 +13,7 @@ import { EmailVerificationService } from './services/email-verification.service'
|
|||
@Module({
|
||||
imports: [
|
||||
ConfigModule,
|
||||
SessionModule,
|
||||
UserModule,
|
||||
TypeOrmModule.forFeature([EmailVerification]),
|
||||
],
|
||||
|
|
Loading…
Reference in New Issue