feature/get-places-api #2
@ -0,0 +1,14 @@
|
|||||||
|
import { AdminOtpData } from '../../usecase/otpAuthUsecase';
|
||||||
|
|
||||||
|
export type OtpAuthDTOReturnType = {
|
||||||
|
username: string;
|
||||||
|
password: string;
|
||||||
|
grant_type: 'otp';
|
||||||
|
};
|
||||||
|
const OtpAuthDTO = (dataToSend: AdminOtpData): OtpAuthDTOReturnType => ({
|
||||||
|
grant_type: 'otp',
|
||||||
|
password: dataToSend.otp,
|
||||||
|
username: dataToSend.phonenumber,
|
||||||
|
});
|
||||||
|
|
||||||
|
export default OtpAuthDTO;
|
@ -0,0 +1,23 @@
|
|||||||
|
import AdminUser from '~/business-logic/generic/admin-user/common/entity/adminUserEntity';
|
||||||
|
|
||||||
|
export type OtpAuthResponse = {
|
||||||
|
access_token: string;
|
||||||
|
expires_in: number;
|
||||||
|
refresh_expires_in: number;
|
||||||
|
refresh_token: string;
|
||||||
|
token_type: 'Bearer';
|
||||||
|
};
|
||||||
|
|
||||||
|
export interface IOtpAuthRO extends OtpAuthResponse {
|
||||||
|
phonenumber: string;
|
||||||
|
}
|
||||||
|
const otpAuthRO = (response: IOtpAuthRO): AdminUser => ({
|
||||||
|
accessToken: response.access_token,
|
||||||
|
expiresIn: response.expires_in,
|
||||||
|
phonenumber: response.phonenumber,
|
||||||
|
refreshExpiresIn: response.refresh_expires_in,
|
||||||
|
refreshToken: response.refresh_token,
|
||||||
|
tokenType: response.token_type,
|
||||||
|
});
|
||||||
|
|
||||||
|
export default otpAuthRO;
|
@ -0,0 +1,6 @@
|
|||||||
|
import AdminUserModel from '../../../../common/data/model/adminUserModel';
|
||||||
|
import { AdminOtpData } from '../../usecase/otpAuthUsecase';
|
||||||
|
|
||||||
|
export default interface IOtpAuthRepo {
|
||||||
|
execute(otpData: AdminOtpData): Promise<AdminUserModel>;
|
||||||
|
}
|
@ -0,0 +1,32 @@
|
|||||||
|
import AdminUserModel from '~/business-logic/generic/admin-user/common/data/model/adminUserModel';
|
||||||
|
import { AdminOtpData } from '../../usecase/otpAuthUsecase';
|
||||||
|
import otpAuthRO, { OtpAuthResponse } from '../reponse-object/otpAuthRO';
|
||||||
|
import OtpAuthDTO, { OtpAuthDTOReturnType } from '../dto/otpAuthDto';
|
||||||
|
import IOtpAuthRepo from './IOtpAuthRepo';
|
||||||
|
|
||||||
|
export type OtpHttpHandler = (data: OtpAuthDTOReturnType) => Promise<OtpAuthResponse>;
|
||||||
|
|
||||||
|
export default class OtpAuthRepo implements IOtpAuthRepo {
|
||||||
|
private httpHandler: OtpHttpHandler;
|
||||||
|
|
||||||
|
constructor(httpHandler: OtpHttpHandler) {
|
||||||
|
this.httpHandler = httpHandler;
|
||||||
|
}
|
||||||
|
|
||||||
|
async execute(otpData: AdminOtpData): Promise<AdminUserModel> {
|
||||||
|
// call dto
|
||||||
|
const dto = OtpAuthDTO(otpData);
|
||||||
|
// call handler
|
||||||
|
const response = await this.httpHandler(dto);
|
||||||
|
// call ro
|
||||||
|
const responseObjectData = {
|
||||||
|
...response,
|
||||||
|
phonenumber: otpData.phonenumber,
|
||||||
|
};
|
||||||
|
const responseObject = otpAuthRO(responseObjectData);
|
||||||
|
// make model
|
||||||
|
const adminModel = new AdminUserModel(responseObject);
|
||||||
|
// return model
|
||||||
|
return adminModel;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,3 @@
|
|||||||
|
import otpAuthInfra from './infra/otpAuthInfra';
|
||||||
|
|
||||||
|
export default otpAuthInfra;
|
@ -0,0 +1,13 @@
|
|||||||
|
import OtpAuthRepo, { OtpHttpHandler } from '../data/repository/otpAuthRepo';
|
||||||
|
import OtpAuthUsecase from '../usecase/otpAuthUsecase';
|
||||||
|
|
||||||
|
const otpAuthInfra = (httpHandler: OtpHttpHandler) => {
|
||||||
|
// make the repo ready
|
||||||
|
const repository = new OtpAuthRepo(httpHandler);
|
||||||
|
// make the usecase ready
|
||||||
|
const usecase = new OtpAuthUsecase(repository);
|
||||||
|
// return method
|
||||||
|
return usecase;
|
||||||
|
};
|
||||||
|
|
||||||
|
export default otpAuthInfra;
|
@ -0,0 +1,8 @@
|
|||||||
|
import { OtpHttpHandler } from './data/repository/otpAuthRepo';
|
||||||
|
import OtpAuthUsecase from './usecase/otpAuthUsecase';
|
||||||
|
|
||||||
|
export interface IOtpAuthDrivenPort {
|
||||||
|
httpHandler: OtpHttpHandler;
|
||||||
|
}
|
||||||
|
|
||||||
|
export type OtpAuthDrivingPort = OtpAuthUsecase;
|
@ -0,0 +1,36 @@
|
|||||||
|
import AdminUserModel from '../../../common/data/model/adminUserModel';
|
||||||
|
import IOtpAuthRepo from '../data/repository/IOtpAuthRepo';
|
||||||
|
import OtpAuthUsecaseException from './otpException';
|
||||||
|
|
||||||
|
export type AdminOtpData = {
|
||||||
|
otp: string;
|
||||||
|
phonenumber: string;
|
||||||
|
};
|
||||||
|
|
||||||
|
export interface IOtpAuthUsecase {
|
||||||
|
execute(data: AdminOtpData): Promise<AdminUserModel>;
|
||||||
|
}
|
||||||
|
|
||||||
|
export default class OtpAuthUsecase implements IOtpAuthUsecase {
|
||||||
|
private repository: IOtpAuthRepo;
|
||||||
|
|
||||||
|
private validLenghtOfOtp = 6;
|
||||||
|
|
||||||
|
constructor(repository: IOtpAuthRepo) {
|
||||||
|
this.repository = repository;
|
||||||
|
}
|
||||||
|
|
||||||
|
async execute(data: AdminOtpData): Promise<AdminUserModel> {
|
||||||
|
// check length of otp
|
||||||
|
const isOtpValid = this.isOtpValid(data.otp);
|
||||||
|
if (!isOtpValid) throw new OtpAuthUsecaseException();
|
||||||
|
// call the repo
|
||||||
|
const updatedAdminModal = await this.repository.execute(data);
|
||||||
|
|
||||||
|
return updatedAdminModal;
|
||||||
|
}
|
||||||
|
|
||||||
|
private isOtpValid(otp: string) {
|
||||||
|
return !!(otp.length < this.validLenghtOfOtp);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1 @@
|
|||||||
|
export default class OtpAuthUsecaseException extends Error {}
|
@ -0,0 +1,13 @@
|
|||||||
|
import AdminUser from '../../entity/adminUserEntity';
|
||||||
|
|
||||||
|
export default class AdminUserModel {
|
||||||
|
private adminUserData: AdminUser;
|
||||||
|
|
||||||
|
constructor(adminUserData: AdminUser) {
|
||||||
|
this.adminUserData = adminUserData;
|
||||||
|
}
|
||||||
|
|
||||||
|
get() {
|
||||||
|
return this.adminUserData;
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user