feature/get-places-api #2
@ -0,0 +1,10 @@
|
||||
import { AdminData } from '../../usecase/phonenumberAuthUsecase';
|
||||
|
||||
export type PhonenumberAuthDTOReturnType = {
|
||||
username: string;
|
||||
};
|
||||
const phonenumberAuthDTO = (adminData: AdminData): PhonenumberAuthDTOReturnType => ({
|
||||
username: adminData.phonenumber,
|
||||
});
|
||||
|
||||
export default phonenumberAuthDTO;
|
@ -0,0 +1,5 @@
|
||||
import { AdminData } from '../../usecase/phonenumberAuthUsecase';
|
||||
|
||||
export default interface IPhoneNumberAuthRepo {
|
||||
execute(adminData: AdminData): Promise<string>;
|
||||
}
|
@ -0,0 +1,20 @@
|
||||
import { AdminData } from '../../usecase/phonenumberAuthUsecase';
|
||||
import phonenumberAuthDTO, { PhonenumberAuthDTOReturnType } from '../dto/phonenumberDto';
|
||||
import IPhoneNumberAuthRepo from './IPhoneNumberAuthRepo';
|
||||
|
||||
export type RepoHttpHandler = (dtoData: PhonenumberAuthDTOReturnType) => Promise<string>;
|
||||
export default class PhoneNumberAuthRepo implements IPhoneNumberAuthRepo {
|
||||
private httpHandler: RepoHttpHandler;
|
||||
|
||||
constructor(httpHandler: RepoHttpHandler) {
|
||||
this.httpHandler = httpHandler;
|
||||
}
|
||||
|
||||
async execute(adminData: AdminData): Promise<string> {
|
||||
// make dto
|
||||
const data = phonenumberAuthDTO(adminData);
|
||||
// call http handler
|
||||
const response = await this.httpHandler(data);
|
||||
return response;
|
||||
}
|
||||
}
|
@ -0,0 +1,3 @@
|
||||
import phonenumberAuthInfra from './infra/phonenumberAuthInfra';
|
||||
|
||||
export default phonenumberAuthInfra;
|
@ -0,0 +1,21 @@
|
||||
import PhoneNumberAuthRepo, { RepoHttpHandler } from '../data/repository/phonenumberAuthRepo';
|
||||
import PhonenumberAuthUsecase from '../usecase/phonenumberAuthUsecase';
|
||||
|
||||
export interface IPhonenumberAuthInfra {
|
||||
httpHandler: RepoHttpHandler;
|
||||
wrongPhoneNumberMessage: string;
|
||||
}
|
||||
|
||||
const phonenumberAuthInfra = async (
|
||||
httpHandler: RepoHttpHandler,
|
||||
wrongPhoneNumberMessage: string,
|
||||
): Promise<PhonenumberAuthUsecase> => {
|
||||
// prepare repo
|
||||
const repository = new PhoneNumberAuthRepo(httpHandler);
|
||||
// prepare usecase
|
||||
const usecase = new PhonenumberAuthUsecase(repository, wrongPhoneNumberMessage);
|
||||
// return main method
|
||||
return usecase;
|
||||
};
|
||||
|
||||
export default phonenumberAuthInfra;
|
@ -0,0 +1,5 @@
|
||||
import { IPhonenumberAuthInfra } from './infra/phonenumberAuthInfra';
|
||||
import PhonenumberAuthUsecase from './usecase/phonenumberAuthUsecase';
|
||||
|
||||
export type IPhonenumberAuthPort = IPhonenumberAuthInfra;
|
||||
export type PhonenumberReturnTypePort = Promise<PhonenumberAuthUsecase>;
|
@ -0,0 +1 @@
|
||||
export default class PhonenumberException extends Error {}
|
@ -0,0 +1,36 @@
|
||||
import IPhoneNumberAuthRepo from '../data/repository/IPhoneNumberAuthRepo';
|
||||
import PhonenumberException from './exception';
|
||||
|
||||
export type AdminData = {
|
||||
phonenumber: string;
|
||||
};
|
||||
|
||||
interface IPhoneNumberAuthUsecase {
|
||||
execute(adminData: AdminData): Promise<string>;
|
||||
}
|
||||
|
||||
export default class PhonenumberAuthUsecase implements IPhoneNumberAuthUsecase {
|
||||
private repository: IPhoneNumberAuthRepo;
|
||||
|
||||
private wrongPhoneNumberMessage: string;
|
||||
|
||||
constructor(repository: IPhoneNumberAuthRepo, wrongPhoneNumberMessage: string) {
|
||||
this.repository = repository;
|
||||
this.wrongPhoneNumberMessage = wrongPhoneNumberMessage;
|
||||
}
|
||||
|
||||
async execute(adminData: AdminData): Promise<string> {
|
||||
// check phone number regex
|
||||
const isPhoenumberValid = this.isPhoneNumberValid(adminData.phonenumber);
|
||||
if (!isPhoenumberValid) throw new PhonenumberException(this.wrongPhoneNumberMessage);
|
||||
|
||||
const response = await this.repository.execute(adminData);
|
||||
|
||||
return response;
|
||||
}
|
||||
|
||||
private isPhoneNumberValid(phonenumber: string) {
|
||||
const regex = /\(?([0-9]{3})\)?([ .-]?)([0-9]{3})\2([0-9]{4})/;
|
||||
return regex.test(phonenumber);
|
||||
}
|
||||
}
|
@ -0,0 +1,13 @@
|
||||
export default abstract class AdminUser {
|
||||
abstract phonenumber: string;
|
||||
|
||||
abstract accessToken: string;
|
||||
|
||||
abstract refreshToken: string;
|
||||
|
||||
abstract expiresIn: number;
|
||||
|
||||
abstract refreshExpiresIn: number;
|
||||
|
||||
abstract tokenType: 'Bearer';
|
||||
}
|
@ -20,7 +20,7 @@ export default function OtpCodeView(props: IOtpCodeView) {
|
||||
tabIndex={i + 1}
|
||||
ref={(el: HTMLInputElement) => (otpChar.current[i] = el)}
|
||||
key={`otp_char_${i}`}
|
||||
className='font-bold inline-block w-5 bg-transparent text-center focus:outline-none'
|
||||
className='font-bold text-base inline-block w-5 md:w-10 bg-transparent text-center focus:outline-none'
|
||||
maxLength={1}
|
||||
defaultValue='_'
|
||||
placeholder='_'
|
||||
|
Loading…
x
Reference in New Issue
Block a user