From df79c2a16406169946aba4a1e23bcea83e7198f1 Mon Sep 17 00:00:00 2001 From: PetruccioU Date: Mon, 3 Feb 2025 13:46:00 +1300 Subject: [PATCH 1/3] GetFranchiseRepository created and used into GetSurchargesRepository --- .../get/franchise/GetFranchiseRepository.ts | 24 +++++++++++++++++++ functions/src/data/franchise/index.ts | 1 + .../place/get/places/GetPlacesUsecase.ts | 16 +++++++++++-- 3 files changed, 39 insertions(+), 2 deletions(-) create mode 100644 functions/src/data/franchise/get/franchise/GetFranchiseRepository.ts create mode 100644 functions/src/data/franchise/index.ts diff --git a/functions/src/data/franchise/get/franchise/GetFranchiseRepository.ts b/functions/src/data/franchise/get/franchise/GetFranchiseRepository.ts new file mode 100644 index 0000000..3f3b4ec --- /dev/null +++ b/functions/src/data/franchise/get/franchise/GetFranchiseRepository.ts @@ -0,0 +1,24 @@ +import { database } from '@data/firebase'; + +export async function GetFranchiseRepository(): Promise { + try { + let franchises = [] + const franchisesSnapshot = await database.collection('franchises').get(); + if (franchisesSnapshot.empty) { + console.log("No franchises."); + return []; + } + for (const doc of franchisesSnapshot.docs) { + const data = doc.id; + // console.log("GetFranchiseRepository data: ", JSON.stringify(data)); + franchises.push(data.toLowerCase()) + } + // console.log("GetFranchiseRepository franchises: ", franchises) + return franchises + } catch (error) { + console.error('Error fetching franchises data:', error); + throw error; + } +} + + diff --git a/functions/src/data/franchise/index.ts b/functions/src/data/franchise/index.ts new file mode 100644 index 0000000..21f7e85 --- /dev/null +++ b/functions/src/data/franchise/index.ts @@ -0,0 +1 @@ +export {GetFranchiseRepository} from "./get/franchise/GetFranchiseRepository" \ No newline at end of file diff --git a/functions/src/domain/place/get/places/GetPlacesUsecase.ts b/functions/src/domain/place/get/places/GetPlacesUsecase.ts index 878cc0a..a42f724 100644 --- a/functions/src/domain/place/get/places/GetPlacesUsecase.ts +++ b/functions/src/domain/place/get/places/GetPlacesUsecase.ts @@ -2,6 +2,7 @@ import { GetSurchargesRepository, SurchargeStatus } from "@data/surcharge" import { GetPlacesUsecaseRequest } from "./entity/GetPlacesUsecaseRequest" import { GetPlacesUsecaseResponse } from "./entity/GetPlacesUsecaseResponse" import { GetPlacesRepository } from "@data/place" +import { GetFranchiseRepository } from "@data/franchise" import { locationRestrictionOfNZ } from "@shared/constants" export async function GetPlacesUsecase(request: GetPlacesUsecaseRequest | string[]): Promise { @@ -77,7 +78,18 @@ export async function GetPlacesUsecase(request: GetPlacesUsecaseRequest | string try { const resultSurcharges = await GetSurchargesRepository(resultPlaceIds) + const franchisesNames = await GetFranchiseRepository() + const placesWithSurcharges = resultPlaces.places.map((place) => { + let name = place.displayName.text + let rate = resultSurcharges.find((surcharge) => surcharge.id === place.id)?.rate + let status = resultSurcharges.find((surcharge) => surcharge.id === place.id)?.surchargeStatus as SurchargeStatus + franchisesNames.forEach(element => { + if(name.toLowerCase().includes(element)){ + status = SurchargeStatus.AUTO_GENERATED + rate = 0.0 + } + }); return { id: place.id, displayName: { @@ -96,8 +108,8 @@ export async function GetPlacesUsecase(request: GetPlacesUsecaseRequest | string longitude: place.location.longitude, } : undefined, - rate: resultSurcharges.find((surcharge) => surcharge.id === place.id)?.rate, - surchargeStatus: resultSurcharges.find((surcharge) => surcharge.id === place.id)?.surchargeStatus as SurchargeStatus, + rate: rate, + surchargeStatus: status } }) From ef86e4c7161fca8330655563b96e4a418bccd9b5 Mon Sep 17 00:00:00 2001 From: PetruccioU Date: Tue, 4 Feb 2025 21:57:35 +1300 Subject: [PATCH 2/3] GetFranchiseRepository used in getPlaceUsecase --- .../domain/place/get/place/getPlaceUsecase.ts | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/functions/src/domain/place/get/place/getPlaceUsecase.ts b/functions/src/domain/place/get/place/getPlaceUsecase.ts index 61487f9..0db3b24 100644 --- a/functions/src/domain/place/get/place/getPlaceUsecase.ts +++ b/functions/src/domain/place/get/place/getPlaceUsecase.ts @@ -3,11 +3,22 @@ import { GetPlaceUsecaseRequest } from "./entity/GetPlaceUsecaseRequest"; import { GetPlaceUsecaseResponse } from "./entity/GetPlaceUsecaseResponse"; import { GetSurchargesRepository } from '@data/surcharge' import { SurchargeStatus } from "@data/surcharge" +import { GetFranchiseRepository } from "@data/franchise"; export const getPlaceUsecase = async (request: GetPlaceUsecaseRequest): Promise => { const result = await GetPlaceRepository(request.id); const surchargeData = await GetSurchargesRepository(request.id); - + const franchisesNames = await GetFranchiseRepository() + + let name = result.displayName.text + let rate = surchargeData?.rate ?? undefined + let status = surchargeData?.surchargeStatus ?? SurchargeStatus.UNKNOWN + franchisesNames.forEach(element => { + if(name.toLowerCase().includes(element)){ + status = SurchargeStatus.AUTO_GENERATED + rate = 0.0 + } + }); return { id: result.id, displayName: { @@ -24,8 +35,8 @@ export const getPlaceUsecase = async (request: GetPlaceUsecaseRequest): Promise< latitude: result.location?.latitude ?? 0, longitude: result.location?.longitude ?? 0, }, - rate: surchargeData?.rate ?? undefined, + rate: rate, reportedDate: surchargeData?.reportedDate ?? undefined, // Default to 0 if reportedDate is undefined - surchargeStatus: surchargeData?.surchargeStatus ?? SurchargeStatus.UNKNOWN, + surchargeStatus: status, }; }; From fe9f2813b747414d315e6dfb66a32d1c51b7ef26 Mon Sep 17 00:00:00 2001 From: Bonsung Koo Date: Thu, 6 Feb 2025 15:51:14 +1300 Subject: [PATCH 3/3] Change surcharge information only when it is UNKNOWN. --- .../surcharge/get/getSurchargesRepository.ts | 1 - .../domain/place/get/place/getPlaceUsecase.ts | 14 +++++++---- .../place/get/places/GetPlacesUsecase.ts | 25 ++++++++++++------- 3 files changed, 25 insertions(+), 15 deletions(-) diff --git a/functions/src/data/surcharge/get/getSurchargesRepository.ts b/functions/src/data/surcharge/get/getSurchargesRepository.ts index 427f180..a087e08 100644 --- a/functions/src/data/surcharge/get/getSurchargesRepository.ts +++ b/functions/src/data/surcharge/get/getSurchargesRepository.ts @@ -37,7 +37,6 @@ async function _GetSurcharge(placeId: string): Promise { - if(name.toLowerCase().includes(element)){ - status = SurchargeStatus.AUTO_GENERATED - rate = 0.0 + if (status === SurchargeStatus.UNKNOWN) { + if(name.toLowerCase().includes(element)){ + status = SurchargeStatus.AUTO_GENERATED + rate = 0.0 + } } - }); + }) + return { id: result.id, displayName: { diff --git a/functions/src/domain/place/get/places/GetPlacesUsecase.ts b/functions/src/domain/place/get/places/GetPlacesUsecase.ts index a42f724..55a859d 100644 --- a/functions/src/domain/place/get/places/GetPlacesUsecase.ts +++ b/functions/src/domain/place/get/places/GetPlacesUsecase.ts @@ -18,7 +18,7 @@ export async function GetPlacesUsecase(request: GetPlacesUsecaseRequest | string resultPlaces = await GetPlacesRepository(allSurchargesIds) // const resultSurcharges = await GetSurchargesRepository(resultPlaceIds) - + const placesWithSurcharges = resultPlaces.places.map((place) => { return { id: place.id, @@ -46,12 +46,12 @@ export async function GetPlacesUsecase(request: GetPlacesUsecaseRequest | string surchargeStatus: allSurcharges.find((surcharge) => surcharge.id === place.id)?.surchargeStatus as SurchargeStatus, } }) - + return { places: placesWithSurcharges, nextPageToken: undefined, } - + } catch (error) { throw error } @@ -77,19 +77,26 @@ export async function GetPlacesUsecase(request: GetPlacesUsecaseRequest | string }) try { + const resultSurcharges = await GetSurchargesRepository(resultPlaceIds) const franchisesNames = await GetFranchiseRepository() const placesWithSurcharges = resultPlaces.places.map((place) => { - let name = place.displayName.text + + const name = place.displayName.text + let rate = resultSurcharges.find((surcharge) => surcharge.id === place.id)?.rate - let status = resultSurcharges.find((surcharge) => surcharge.id === place.id)?.surchargeStatus as SurchargeStatus + let status = resultSurcharges.find((surcharge) => surcharge.id === place.id)?.surchargeStatus as SurchargeStatus ?? SurchargeStatus.UNKNOWN + franchisesNames.forEach(element => { - if(name.toLowerCase().includes(element)){ - status = SurchargeStatus.AUTO_GENERATED - rate = 0.0 + if (status === SurchargeStatus.UNKNOWN) { + if(name.toLowerCase().includes(element)){ + status = SurchargeStatus.AUTO_GENERATED + rate = 0.0 + } } - }); + }) + return { id: place.id, displayName: {