From 30f7442b0a948c9c8e9924f662edd6076559d2f1 Mon Sep 17 00:00:00 2001 From: Prashant Singh Date: Tue, 7 May 2024 12:35:10 +0530 Subject: [PATCH] Backend/feat/moved-govtdata-table-to-clickhouse --- lib/mobility-core/mobility-core.cabal | 1 + .../External/Verification/GovtData/Client.hs | 10 +-- .../GovtData/Storage/ClickHouse.hs | 82 +++++++++++++++++++ .../Kernel/External/Verification/Interface.hs | 9 +- 4 files changed, 90 insertions(+), 12 deletions(-) create mode 100644 lib/mobility-core/src/Kernel/External/Verification/GovtData/Storage/ClickHouse.hs diff --git a/lib/mobility-core/mobility-core.cabal b/lib/mobility-core/mobility-core.cabal index 83f5ef303..219c8170e 100644 --- a/lib/mobility-core/mobility-core.cabal +++ b/lib/mobility-core/mobility-core.cabal @@ -146,6 +146,7 @@ library Kernel.External.Verification Kernel.External.Verification.GovtData.Client Kernel.External.Verification.GovtData.Storage.Beam + Kernel.External.Verification.GovtData.Storage.ClickHouse Kernel.External.Verification.GovtData.Storage.Query Kernel.External.Verification.GovtData.Types Kernel.External.Verification.Idfy.Auth diff --git a/lib/mobility-core/src/Kernel/External/Verification/GovtData/Client.hs b/lib/mobility-core/src/Kernel/External/Verification/GovtData/Client.hs index 23dcd61b7..3c325eeb1 100644 --- a/lib/mobility-core/src/Kernel/External/Verification/GovtData/Client.hs +++ b/lib/mobility-core/src/Kernel/External/Verification/GovtData/Client.hs @@ -17,22 +17,20 @@ module Kernel.External.Verification.GovtData.Client ) where -import Kernel.Beam.Lib.UtilsTH -import Kernel.External.Verification.GovtData.Storage.Beam as BeamGRC -import qualified Kernel.External.Verification.GovtData.Storage.Query as QGD +import qualified Kernel.External.Verification.GovtData.Storage.Clickhouse as QGC import Kernel.External.Verification.Interface.Types import qualified Kernel.External.Verification.Types as VT import Kernel.Prelude -import Kernel.Types.Common +import Kernel.Storage.ClickhouseV2 as CH import Kernel.Types.Error import Kernel.Utils.Common verifyRC :: - (HasSchemaName BeamGRC.GovtDataRCT, MonadFlow m, EsqDBFlow m r, CacheFlow m r) => + (CH.HasClickhouseEnv CH.APP_SERVICE_CLICKHOUSE m) => VerifyRCReq -> m VerifyRCResp verifyRC req = do - res <- QGD.findByRCNumber req.rcNumber >>= fromMaybeM (InternalError "rcNumber is not found in GovtData.") + res <- QGC.findByRCNumber req.rcNumber >>= fromMaybeM (InternalError "rcNumber is not found in GovtData.") pure $ SyncResp VT.RCVerificationResponse diff --git a/lib/mobility-core/src/Kernel/External/Verification/GovtData/Storage/ClickHouse.hs b/lib/mobility-core/src/Kernel/External/Verification/GovtData/Storage/ClickHouse.hs new file mode 100644 index 000000000..ea212ff5c --- /dev/null +++ b/lib/mobility-core/src/Kernel/External/Verification/GovtData/Storage/ClickHouse.hs @@ -0,0 +1,82 @@ +{-# LANGUAGE StandaloneDeriving #-} +{-# LANGUAGE TemplateHaskell #-} +{- + Copyright 2022-23, Juspay India Pvt Ltd + + This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License + + as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is + + distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + + FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero + + General Public License along with this program. If not, see . +-} +{-# OPTIONS_GHC -Wno-orphans #-} + +module Kernel.External.Verification.GovtData.Storage.Clickhouse where + +import Kernel.Prelude +import Kernel.Storage.ClickhouseV2 as CH hiding (toDate) +import qualified Kernel.Storage.ClickhouseV2.UtilsTH as TH + +data GovtDataT f = GovtDataT + { id :: C f Text, + merchantOperatingCityId :: C f Text, + ownerSerialNumber :: C f (Maybe Text), + registrationNumber :: C f (Maybe Text), + manufacturerModel :: C f (Maybe Text), + permitValidityFrom :: C f (Maybe Text), + permitValidityUpto :: C f (Maybe Text), + manufacturer :: C f (Maybe Text), + bodyType :: C f (Maybe Text), + numberOfCylinder :: C f (Maybe Int), + fuelType :: C f (Maybe Text), + seatingCapacity :: C f (Maybe Int), + fromDate :: C f (Maybe Text), + toDate :: C f (Maybe Text), + createdAt :: C f UTCTime + } + deriving (Generic) + +deriving instance Show GovtData + +govtDataTTable :: GovtDataT (FieldModification GovtDataT) +govtDataTTable = + GovtDataT + { id = "id", + merchantOperatingCityId = "merchant_operating_city_id", + ownerSerialNumber = "owner_serial_number", + registrationNumber = "registration_number", + manufacturerModel = "manufacturer_model", + permitValidityFrom = "permit_validity_from", + permitValidityUpto = "permit_validity_upto", + manufacturer = "manufacturer", + bodyType = "body_type", + numberOfCylinder = "number_of_cylinder", + fuelType = "fuel_type", + seatingCapacity = "seating_capacity", + fromDate = "from_date", + toDate = "to_date", + createdAt = "created_at" + } + +type GovtData = GovtDataT Identity + +$(TH.mkClickhouseInstances ''GovtDataT) + +findByRCNumber :: + CH.HasClickhouseEnv CH.APP_SERVICE_CLICKHOUSE m => + Text -> + m (Maybe (GovtDataT Identity)) +findByRCNumber rcNumber = do + govtData <- + CH.findAll $ + CH.select $ + CH.filter_ + ( \govtData _ -> + govtData.registrationNumber CH.==. (Just rcNumber) + ) + (CH.all_ @CH.APP_SERVICE_CLICKHOUSE govtDataTTable) + return $ listToMaybe govtData diff --git a/lib/mobility-core/src/Kernel/External/Verification/Interface.hs b/lib/mobility-core/src/Kernel/External/Verification/Interface.hs index 91fedc0e5..e550304ca 100644 --- a/lib/mobility-core/src/Kernel/External/Verification/Interface.hs +++ b/lib/mobility-core/src/Kernel/External/Verification/Interface.hs @@ -25,11 +25,7 @@ module Kernel.External.Verification.Interface where import EulerHS.Prelude -import Kernel.Beam.Lib.UtilsTH import qualified Kernel.External.Verification.GovtData.Client as GovtData -import Kernel.External.Verification.GovtData.Storage.Beam as BeamGRC -import Kernel.External.Verification.GovtData.Types as Reexport -import Kernel.External.Verification.Idfy.Config as Reexport import qualified Kernel.External.Verification.Interface.Idfy as Idfy import qualified Kernel.External.Verification.Interface.InternalScripts as IS import qualified Kernel.External.Verification.Interface.SafetyPortal as SafetyPortal @@ -37,6 +33,7 @@ import Kernel.External.Verification.Interface.Types as Reexport import Kernel.External.Verification.InternalScripts.Types import Kernel.External.Verification.SafetyPortal.Types import Kernel.External.Verification.Types as Reexport +import qualified Kernel.Storage.ClickhouseV2 as CH import Kernel.Tools.Metrics.CoreMetrics.Types import Kernel.Types.Common import Kernel.Types.Error @@ -57,7 +54,7 @@ verifyDLAsync serviceConfig req = case serviceConfig of verifyRC :: ( EncFlow m r, CoreMetrics m, - HasSchemaName BeamGRC.GovtDataRCT, + CH.HasClickhouseEnv CH.APP_SERVICE_CLICKHOUSE m, MonadFlow m, EsqDBFlow m r, CacheFlow m r @@ -84,7 +81,7 @@ verifyRC verificationProvidersPriorityList idfyServiceConfig req = do verifyRC' :: ( EncFlow m r, CoreMetrics m, - HasSchemaName BeamGRC.GovtDataRCT, + CH.HasClickhouseEnv CH.APP_SERVICE_CLICKHOUSE m, MonadFlow m, EsqDBFlow m r, CacheFlow m r