feature/get-places-api #2

Merged
behnam merged 26 commits from feature/get-places-api into develop 2023-05-23 09:23:56 +00:00
10 changed files with 115 additions and 1 deletions
Showing only changes of commit 15d7b85712 - Show all commits

View File

@ -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;

View File

@ -0,0 +1,5 @@
import { AdminData } from '../../usecase/phonenumberAuthUsecase';
export default interface IPhoneNumberAuthRepo {
execute(adminData: AdminData): Promise<string>;
}

View File

@ -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;
}
}

View File

@ -0,0 +1,3 @@
import phonenumberAuthInfra from './infra/phonenumberAuthInfra';
export default phonenumberAuthInfra;

View File

@ -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;

View File

@ -0,0 +1,5 @@
import { IPhonenumberAuthInfra } from './infra/phonenumberAuthInfra';
import PhonenumberAuthUsecase from './usecase/phonenumberAuthUsecase';
export type IPhonenumberAuthPort = IPhonenumberAuthInfra;
export type PhonenumberReturnTypePort = Promise<PhonenumberAuthUsecase>;

View File

@ -0,0 +1 @@
export default class PhonenumberException extends Error {}

View File

@ -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);
}
}

View File

@ -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';
}

View File

@ -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='_'