mirror of
https://github.com/HamzaSha1/zod-backend.git
synced 2026-10-25 00:37:56 +00:00
refactor: remove unsed code
This commit is contained in:
@@ -1,3 +1,3 @@
|
||||
export * from './device.entity';
|
||||
export * from './user-registration-token.entity';
|
||||
export * from './user-auth-token.entity';
|
||||
export * from './user.entity';
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
import {
|
||||
BaseEntity,
|
||||
Column,
|
||||
CreateDateColumn,
|
||||
Entity,
|
||||
Index,
|
||||
JoinColumn,
|
||||
ManyToOne,
|
||||
PrimaryGeneratedColumn,
|
||||
UpdateDateColumn,
|
||||
} from 'typeorm';
|
||||
import { User } from './user.entity';
|
||||
|
||||
@Entity('user_auth_tokens')
|
||||
export class UserAuthToken extends BaseEntity {
|
||||
@PrimaryGeneratedColumn('uuid')
|
||||
id!: string;
|
||||
|
||||
@Column({ type: 'varchar', length: 255, name: 'token', unique: true })
|
||||
@Index()
|
||||
token!: string;
|
||||
|
||||
@Column({ type: 'boolean', default: false, name: 'is_used' })
|
||||
isUsed!: boolean;
|
||||
|
||||
@Column({ type: 'timestamp with time zone', name: 'expiry_date' })
|
||||
expiryDate!: Date;
|
||||
|
||||
@Column({ type: 'uuid', name: 'user_id', nullable: false })
|
||||
userId!: string | null;
|
||||
|
||||
@ManyToOne(() => User, (user) => user.registrationTokens, { nullable: false, onDelete: 'CASCADE' })
|
||||
@JoinColumn({ name: 'user_id' })
|
||||
user!: User;
|
||||
|
||||
@UpdateDateColumn({ type: 'timestamp with time zone', default: () => 'CURRENT_TIMESTAMP', name: 'updated_at' })
|
||||
updatedAt!: Date;
|
||||
|
||||
@CreateDateColumn({ type: 'timestamp with time zone', default: () => 'CURRENT_TIMESTAMP', name: 'created_at' })
|
||||
createdAt!: Date;
|
||||
}
|
||||
@@ -1,53 +0,0 @@
|
||||
import {
|
||||
BaseEntity,
|
||||
Column,
|
||||
CreateDateColumn,
|
||||
Entity,
|
||||
Index,
|
||||
JoinColumn,
|
||||
ManyToOne,
|
||||
PrimaryGeneratedColumn,
|
||||
UpdateDateColumn,
|
||||
} from 'typeorm';
|
||||
import { Junior } from '~/junior/entities';
|
||||
import { UserType } from '../enums';
|
||||
import { User } from './user.entity';
|
||||
|
||||
@Entity('user_registration_tokens')
|
||||
export class UserRegistrationToken extends BaseEntity {
|
||||
@PrimaryGeneratedColumn('uuid')
|
||||
id!: string;
|
||||
|
||||
@Column({ type: 'varchar', length: 255, name: 'token', unique: true })
|
||||
@Index()
|
||||
token!: string;
|
||||
|
||||
@Column({ type: 'varchar', length: 255, name: 'user_type' })
|
||||
userType!: UserType;
|
||||
|
||||
@Column({ type: 'boolean', default: false, name: 'is_used' })
|
||||
isUsed!: boolean;
|
||||
|
||||
@Column({ type: 'timestamp', name: 'expiry_date' })
|
||||
expiryDate!: Date;
|
||||
|
||||
@Column({ type: 'uuid', name: 'user_id', nullable: true })
|
||||
userId!: string | null;
|
||||
|
||||
@Column({ type: 'uuid', name: 'junior_id', nullable: true })
|
||||
juniorId!: string | null;
|
||||
|
||||
@ManyToOne(() => User, (user) => user.registrationTokens, { nullable: true, onDelete: 'CASCADE' })
|
||||
@JoinColumn({ name: 'user_id' })
|
||||
user!: User;
|
||||
|
||||
@ManyToOne(() => Junior, (junior) => junior.registrationTokens, { nullable: true, onDelete: 'CASCADE' })
|
||||
@JoinColumn({ name: 'junior_id' })
|
||||
junior!: Junior;
|
||||
|
||||
@UpdateDateColumn({ type: 'timestamp', default: () => 'CURRENT_TIMESTAMP', name: 'updated_at' })
|
||||
updatedAt!: Date;
|
||||
|
||||
@CreateDateColumn({ type: 'timestamp', default: () => 'CURRENT_TIMESTAMP', name: 'created_at' })
|
||||
createdAt!: Date;
|
||||
}
|
||||
@@ -14,7 +14,7 @@ import { Customer } from '~/customer/entities/customer.entity';
|
||||
import { Document } from '~/document/entities';
|
||||
import { Roles } from '../../auth/enums';
|
||||
import { Device } from './device.entity';
|
||||
import { UserRegistrationToken } from './user-registration-token.entity';
|
||||
import { UserAuthToken } from './user-auth-token.entity';
|
||||
|
||||
@Entity('users')
|
||||
export class User extends BaseEntity {
|
||||
@@ -78,8 +78,8 @@ export class User extends BaseEntity {
|
||||
@OneToMany(() => Document, (document) => document.createdBy)
|
||||
createdDocuments!: Document[];
|
||||
|
||||
@OneToMany(() => UserRegistrationToken, (token) => token.user)
|
||||
registrationTokens!: UserRegistrationToken[];
|
||||
@OneToMany(() => UserAuthToken, (token) => token.user)
|
||||
registrationTokens!: UserAuthToken[];
|
||||
|
||||
@CreateDateColumn({ name: 'created_at', type: 'timestamp with time zone' })
|
||||
createdAt!: Date;
|
||||
|
||||
@@ -3,31 +3,29 @@ import { InjectRepository } from '@nestjs/typeorm';
|
||||
import * as crypto from 'crypto';
|
||||
import moment from 'moment';
|
||||
import { Repository } from 'typeorm';
|
||||
import { UserRegistrationToken } from '../entities';
|
||||
import { UserAuthToken } from '../entities';
|
||||
import { UserType } from '../enums';
|
||||
const TOKEN_LENGTH = 16;
|
||||
|
||||
@Injectable()
|
||||
export class UserTokenRepository {
|
||||
constructor(
|
||||
@InjectRepository(UserRegistrationToken)
|
||||
private readonly userTokenRepository: Repository<UserRegistrationToken>,
|
||||
@InjectRepository(UserAuthToken)
|
||||
private readonly userTokenRepository: Repository<UserAuthToken>,
|
||||
) {}
|
||||
|
||||
generateToken(userId: string, userType: UserType, expiryDate?: Date) {
|
||||
generateToken(userId: string, expiryDate?: Date) {
|
||||
return this.userTokenRepository.save(
|
||||
this.userTokenRepository.create({
|
||||
userId: userType === UserType.CHECKER ? userId : null,
|
||||
juniorId: userType === UserType.JUNIOR ? userId : null,
|
||||
userId,
|
||||
expiryDate: expiryDate ?? moment().add('15', 'minutes').toDate(),
|
||||
userType,
|
||||
token: `${moment().unix()}-${crypto.randomBytes(TOKEN_LENGTH).toString('hex')}`,
|
||||
}),
|
||||
);
|
||||
}
|
||||
|
||||
findByToken(token: string, userType: UserType) {
|
||||
return this.userTokenRepository.findOne({ where: { token, isUsed: false, userType } });
|
||||
return this.userTokenRepository.findOne({ where: { token, isUsed: false } });
|
||||
}
|
||||
|
||||
invalidateToken(token: string) {
|
||||
|
||||
@@ -7,9 +7,9 @@ export class UserTokenService {
|
||||
constructor(private readonly userTokenRepository: UserTokenRepository) {}
|
||||
private readonly logger = new Logger(UserTokenService.name);
|
||||
|
||||
async generateToken(userId: string, userType: UserType, expiryDate?: Date): Promise<string> {
|
||||
async generateToken(userId: string, expiryDate?: Date): Promise<string> {
|
||||
this.logger.log(`Generating token for user ${userId}`);
|
||||
const tokenEntity = await this.userTokenRepository.generateToken(userId, userType, expiryDate);
|
||||
const tokenEntity = await this.userTokenRepository.generateToken(userId, expiryDate);
|
||||
this.logger.log(`Token generated successfully for junior ${userId}`);
|
||||
return tokenEntity.token;
|
||||
}
|
||||
@@ -29,7 +29,7 @@ export class UserTokenService {
|
||||
}
|
||||
|
||||
this.logger.log(`Token validated successfully`);
|
||||
return tokenEntity.juniorId! || tokenEntity.userId!;
|
||||
return tokenEntity.userId!;
|
||||
}
|
||||
|
||||
invalidateToken(token: string) {
|
||||
|
||||
@@ -154,7 +154,7 @@ export class UserService {
|
||||
isProfileCompleted: true,
|
||||
});
|
||||
const ONE_DAY = moment().add(1, 'day').toDate();
|
||||
const token = await this.userTokenService.generateToken(user.id, UserType.CHECKER, ONE_DAY);
|
||||
const token = await this.userTokenService.generateToken(user.id, ONE_DAY);
|
||||
await this.sendCheckerAccountCreatedEmail(data.email, token);
|
||||
|
||||
return user;
|
||||
|
||||
@@ -3,13 +3,13 @@ import { TypeOrmModule } from '@nestjs/typeorm';
|
||||
import { NotificationModule } from '~/common/modules/notification/notification.module';
|
||||
import { CustomerModule } from '~/customer/customer.module';
|
||||
import { AdminUserController, UserController } from './controllers';
|
||||
import { Device, User, UserRegistrationToken } from './entities';
|
||||
import { Device, User, UserAuthToken } from './entities';
|
||||
import { DeviceRepository, UserRepository, UserTokenRepository } from './repositories';
|
||||
import { DeviceService, UserService, UserTokenService } from './services';
|
||||
|
||||
@Module({
|
||||
imports: [
|
||||
TypeOrmModule.forFeature([User, Device, UserRegistrationToken]),
|
||||
TypeOrmModule.forFeature([User, Device, UserAuthToken]),
|
||||
forwardRef(() => NotificationModule),
|
||||
forwardRef(() => CustomerModule),
|
||||
],
|
||||
|
||||
Reference in New Issue
Block a user