File tree Expand file tree Collapse file tree 14 files changed +79
-16
lines changed
shared-common/src/Shared/Common/Api/Resource/Common Expand file tree Collapse file tree 14 files changed +79
-16
lines changed Original file line number Diff line number Diff line change 1+ module Shared.Common.Api.Resource.Common.FromHttpApiData where
2+
3+ import qualified Data.Text as T
4+ import qualified Data.UUID as U
5+ import Servant.API
6+ import Text.Read (readMaybe )
7+
8+ import Shared.Common.Util.String
9+
10+ instance FromHttpApiData [String ] where
11+ parseQueryParam = Right . splitOn " ," . T. unpack
12+
13+ instance FromHttpApiData [U. UUID ] where
14+ parseQueryParam = genericParseQueryParams
15+
16+ genericParseQueryParam :: Read a => T. Text -> Either T. Text a
17+ genericParseQueryParam x =
18+ case readMaybe (T. unpack x) of
19+ Just phase -> Right phase
20+ Nothing -> Left . T. pack . f' " Unable to parse %s" $ [T. unpack x]
21+
22+ genericParseQueryParams :: Read a => T. Text -> Either T. Text [a ]
23+ genericParseQueryParams xs =
24+ let foldFn :: Read a => Either T. Text [a ] -> String -> Either T. Text [a ]
25+ foldFn (Left err) _ = Left err
26+ foldFn (Right acc) x =
27+ case readMaybe x of
28+ Just sharing -> Right $ sharing : acc
29+ Nothing -> Left . T. pack . f' " Unable to parse %s" $ [x]
30+ in foldl foldFn (Right [] ) . splitOn " ," . T. unpack $ xs
Original file line number Diff line number Diff line change @@ -10,13 +10,15 @@ import Wizard.Api.Handler.Common
1010import Wizard.Api.Resource.Tenant.TenantDTO
1111import Wizard.Api.Resource.Tenant.TenantJM ()
1212import Wizard.Model.Context.BaseContext
13+ import Wizard.Model.Tenant.Tenant
1314import Wizard.Service.Tenant.TenantService
1415
1516type List_GET =
1617 Header " Authorization" String
1718 :> Header " Host" String
1819 :> " tenants"
1920 :> QueryParam " q" String
21+ :> QueryParam " states" [TenantState ]
2022 :> QueryParam " enabled" Bool
2123 :> QueryParam " page" Int
2224 :> QueryParam " size" Int
@@ -27,12 +29,13 @@ list_GET
2729 :: Maybe String
2830 -> Maybe String
2931 -> Maybe String
32+ -> Maybe [TenantState ]
3033 -> Maybe Bool
3134 -> Maybe Int
3235 -> Maybe Int
3336 -> Maybe String
3437 -> BaseContextM (Headers '[Header " x-trace-uuid" String ] (Page TenantDTO ))
35- list_GET mTokenHeader mServerUrl mQuery mEnabled mPage mSize mSort =
38+ list_GET mTokenHeader mServerUrl mQuery mStates mEnabled mPage mSize mSort =
3639 getAuthServiceExecutor mTokenHeader mServerUrl $ \ runInAuthService ->
3740 runInAuthService NoTransaction $
38- addTraceUuidHeader =<< getTenantsPage mQuery mEnabled (Pageable mPage mSize) (parseSortQuery mSort)
41+ addTraceUuidHeader =<< getTenantsPage mQuery mStates mEnabled (Pageable mPage mSize) (parseSortQuery mSort)
Original file line number Diff line number Diff line change @@ -8,7 +8,10 @@ import Wizard.Model.Tenant.Config.TenantConfig
88import Wizard.Model.User.UserProfile
99
1010data ClientConfigDTO
11- = HousekeepingInProgressClientConfigDTO
11+ = NotSeededClientConfigDTO
12+ { message :: String
13+ }
14+ | HousekeepingInProgressClientConfigDTO
1215 { message :: String
1316 }
1417 | ClientConfigDTO
Original file line number Diff line number Diff line change @@ -4,13 +4,16 @@ import Data.Time
44import qualified Data.UUID as U
55import GHC.Generics
66
7+ import Wizard.Model.Tenant.Tenant
8+
79data TenantDTO = TenantDTO
810 { uuid :: U. UUID
911 , tenantId :: String
1012 , name :: String
1113 , serverDomain :: String
1214 , serverUrl :: String
1315 , clientUrl :: String
16+ , state :: TenantState
1417 , enabled :: Bool
1518 , logoUrl :: Maybe String
1619 , primaryColor :: Maybe String
Original file line number Diff line number Diff line change @@ -5,6 +5,7 @@ import qualified Data.UUID as U
55import GHC.Generics
66
77import Wizard.Api.Resource.User.UserDTO
8+ import Wizard.Model.Tenant.Tenant
89import WizardLib.Public.Api.Resource.Tenant.Usage.WizardUsageDTO
910
1011data TenantDetailDTO = TenantDetailDTO
@@ -14,6 +15,7 @@ data TenantDetailDTO = TenantDetailDTO
1415 , serverDomain :: String
1516 , serverUrl :: String
1617 , clientUrl :: String
18+ , state :: TenantState
1719 , enabled :: Bool
1820 , logoUrl :: Maybe String
1921 , primaryColor :: Maybe String
Original file line number Diff line number Diff line change @@ -4,6 +4,7 @@ import Data.Aeson
44
55import Shared.Common.Util.Aeson
66import Wizard.Api.Resource.Tenant.TenantDetailDTO
7+ import Wizard.Api.Resource.Tenant.TenantJM ()
78import Wizard.Api.Resource.User.UserJM ()
89import WizardLib.Public.Api.Resource.Tenant.Usage.WizardUsageJM ()
910
Original file line number Diff line number Diff line change @@ -5,6 +5,7 @@ import Data.Swagger
55import Shared.Common.Util.Swagger
66import Wizard.Api.Resource.Tenant.TenantDetailDTO
77import Wizard.Api.Resource.Tenant.TenantDetailJM ()
8+ import Wizard.Api.Resource.Tenant.TenantSM ()
89import Wizard.Api.Resource.User.UserSM ()
910import Wizard.Database.Migration.Development.Tenant.Data.Tenants
1011import Wizard.Service.Tenant.TenantMapper
Original file line number Diff line number Diff line change 11module Wizard.Api.Resource.Tenant.TenantJM where
22
33import Data.Aeson
4+ import Servant.API
45
6+ import Shared.Common.Api.Resource.Common.FromHttpApiData
57import Shared.Common.Util.Aeson
68import Wizard.Api.Resource.Tenant.TenantDTO
79import Wizard.Model.Tenant.Tenant
@@ -18,6 +20,9 @@ instance FromJSON TenantState where
1820instance ToJSON TenantState where
1921 toJSON = genericToJSON jsonOptions
2022
23+ instance FromHttpApiData [TenantState ] where
24+ parseQueryParam = genericParseQueryParams
25+
2126instance FromJSON TenantDTO where
2227 parseJSON = genericParseJSON jsonOptions
2328
Original file line number Diff line number Diff line change @@ -15,5 +15,7 @@ instance ToSchema Tenant where
1515instance ToSchema TenantState where
1616 declareNamedSchema = toSwagger ReadyForUseTenantState
1717
18+ instance ToParamSchema TenantState
19+
1820instance ToSchema TenantDTO where
1921 declareNamedSchema = toSwagger (toDTO defaultTenant Nothing Nothing )
Original file line number Diff line number Diff line change 11module Wizard.Database.DAO.Tenant.TenantDAO where
22
33import Control.Monad.Reader (liftIO )
4+ import qualified Data.List as L
45import Data.String
56import Data.Time
67import qualified Data.UUID as U
@@ -26,14 +27,21 @@ pageLabel = "tenants"
2627findTenants :: AppContextM [Tenant ]
2728findTenants = createFindEntitiesFn entityName
2829
29- findTenantsPage :: Maybe String -> Maybe Bool -> Pageable -> [Sort ] -> AppContextM (Page Tenant )
30- findTenantsPage mQuery mEnabled pageable sort = do
30+ findTenantsPage :: Maybe String -> Maybe [TenantState ] -> Maybe Bool -> Pageable -> [Sort ] -> AppContextM (Page Tenant )
31+ findTenantsPage mQuery mStates mEnabled pageable sort = do
32+ let statesCondition =
33+ case mStates of
34+ Nothing -> " "
35+ Just [] -> " "
36+ Just states ->
37+ let xs = fmap (\ s -> f' " state = '%s'" [show s]) states
38+ in " AND (" ++ L. intercalate " OR " xs ++ " )"
3139 let enabledCondition =
3240 case mEnabled of
3341 Nothing -> " "
3442 Just True -> " AND enabled = true"
3543 Just False -> " AND enabled = false"
36- let condition = f' " WHERE (name ~* ? OR tenant_id ~* ?) %s" [enabledCondition]
44+ let condition = f' " WHERE (name ~* ? OR tenant_id ~* ?) %s %s " [statesCondition, enabledCondition]
3745 createFindEntitiesPageableQuerySortFn entityName pageLabel pageable sort " *" condition [regexM mQuery, regexM mQuery]
3846
3947findTenantByUuid :: U. UUID -> AppContextM Tenant
You can’t perform that action at this time.
0 commit comments