Feature: Create Event - First Step Frontend #17
|
@ -22,6 +22,21 @@ export class SessionRepository {
|
||||||
.getMany();
|
.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(
|
public async findSessionBySessionId(
|
||||||
sessionId: string
|
sessionId: string
|
||||||
): Promise<Session | null> {
|
): Promise<Session | null> {
|
||||||
|
|
|
@ -20,6 +20,10 @@ export class SessionService {
|
||||||
return this.sessionRepository.findSessionsByUserId(userId);
|
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> {
|
public async isSessioExpired(session: Session): Promise<boolean> {
|
||||||
return this.sessionRepository.isSessionExpired(session);
|
return this.sessionRepository.isSessionExpired(session);
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,10 +21,17 @@ export class UserDataRepository {
|
||||||
return this.repository.save(userData);
|
return this.repository.save(userData);
|
||||||
}
|
}
|
||||||
|
|
||||||
// public async updateEmailVerificationStatus(userId: string): Promise<void> {
|
public async updateEmailVerificationStatus(userId: string): Promise<boolean> {
|
||||||
// await this.repository.update(
|
try {
|
||||||
// { user: { id: userId } },
|
const result = await this.repository.update(
|
||||||
// { isEmailConfirmed: true }
|
{ 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 { ApiCreatedResponse, ApiTags } from '@nestjs/swagger';
|
||||||
|
import { Request } from 'express';
|
||||||
|
import { SessionGuard } from 'src/modules/session/guard';
|
||||||
import { Public } from 'src/shared/decorator';
|
import { Public } from 'src/shared/decorator';
|
||||||
|
|
||||||
import { EmailVerificationService } from '../services/email-verification.service';
|
import { EmailVerificationService } from '../services/email-verification.service';
|
||||||
|
@ -23,4 +33,15 @@ export class VerifyController {
|
||||||
): Promise<boolean> {
|
): Promise<boolean> {
|
||||||
return this.emailVerificationService.verifyEmail(tokenToVerify);
|
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 { Injectable } from '@nestjs/common';
|
||||||
import { ConfigService } from '@nestjs/config';
|
import { ConfigService } from '@nestjs/config';
|
||||||
import { EmailVerification } from 'src/entities';
|
import { EmailVerification } from 'src/entities';
|
||||||
|
import { SessionService } from 'src/modules/session/services/session.service';
|
||||||
import { UriEncoderService } from 'src/shared';
|
import { UriEncoderService } from 'src/shared';
|
||||||
|
|
||||||
import { UserDataRepository } from '../../user-module/repositories/user-data.repository';
|
import { UserDataRepository } from '../../user-module/repositories/user-data.repository';
|
||||||
|
@ -13,6 +14,7 @@ export class EmailVerificationService {
|
||||||
public constructor(
|
public constructor(
|
||||||
private readonly emailVerifyRepository: EmailVerifyRepository,
|
private readonly emailVerifyRepository: EmailVerifyRepository,
|
||||||
private readonly userDataRepository: UserDataRepository,
|
private readonly userDataRepository: UserDataRepository,
|
||||||
|
private readonly sessionService: SessionService,
|
||||||
private readonly configService: ConfigService
|
private readonly configService: ConfigService
|
||||||
) {}
|
) {}
|
||||||
|
|
||||||
|
@ -42,15 +44,23 @@ export class EmailVerificationService {
|
||||||
await this.deleteEmailVerificationToken(tokenToVerify);
|
await this.deleteEmailVerificationToken(tokenToVerify);
|
||||||
|
|
||||||
if (emailVerification && emailVerification.user) {
|
if (emailVerification && emailVerification.user) {
|
||||||
// await this.userDataRepository.updateEmailVerificationStatus(
|
const isStatusUpdated =
|
||||||
// emailVerification.user.id
|
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;
|
return true;
|
||||||
} else {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private async createVerificationToken(): Promise<string> {
|
private async createVerificationToken(): Promise<string> {
|
||||||
|
|
|
@ -3,6 +3,7 @@ import { ConfigModule } from '@nestjs/config';
|
||||||
import { TypeOrmModule } from '@nestjs/typeorm';
|
import { TypeOrmModule } from '@nestjs/typeorm';
|
||||||
import { EmailVerification } from 'src/entities';
|
import { EmailVerification } from 'src/entities';
|
||||||
|
|
||||||
|
import { SessionModule } from '../session/session.module';
|
||||||
import { UserModule } from '../user-module/user.module';
|
import { UserModule } from '../user-module/user.module';
|
||||||
|
|
||||||
import { VerifyController } from './controller/verify.controller';
|
import { VerifyController } from './controller/verify.controller';
|
||||||
|
@ -12,6 +13,7 @@ import { EmailVerificationService } from './services/email-verification.service'
|
||||||
@Module({
|
@Module({
|
||||||
imports: [
|
imports: [
|
||||||
ConfigModule,
|
ConfigModule,
|
||||||
|
SessionModule,
|
||||||
UserModule,
|
UserModule,
|
||||||
TypeOrmModule.forFeature([EmailVerification]),
|
TypeOrmModule.forFeature([EmailVerification]),
|
||||||
],
|
],
|
||||||
|
|
Loading…
Reference in New Issue