Skip to content

Commit 7a7d21d

Browse files
committed
Add not-seeded state for tenant
1 parent cc2dd04 commit 7a7d21d

File tree

14 files changed

+79
-16
lines changed

14 files changed

+79
-16
lines changed
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
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

wizard-server/src/Wizard/Api/Handler/Tenant/List_GET.hs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,15 @@ import Wizard.Api.Handler.Common
1010
import Wizard.Api.Resource.Tenant.TenantDTO
1111
import Wizard.Api.Resource.Tenant.TenantJM ()
1212
import Wizard.Model.Context.BaseContext
13+
import Wizard.Model.Tenant.Tenant
1314
import Wizard.Service.Tenant.TenantService
1415

1516
type 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)

wizard-server/src/Wizard/Api/Resource/Config/ClientConfigDTO.hs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,10 @@ import Wizard.Model.Tenant.Config.TenantConfig
88
import Wizard.Model.User.UserProfile
99

1010
data ClientConfigDTO
11-
= HousekeepingInProgressClientConfigDTO
11+
= NotSeededClientConfigDTO
12+
{ message :: String
13+
}
14+
| HousekeepingInProgressClientConfigDTO
1215
{ message :: String
1316
}
1417
| ClientConfigDTO

wizard-server/src/Wizard/Api/Resource/Tenant/TenantDTO.hs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,16 @@ import Data.Time
44
import qualified Data.UUID as U
55
import GHC.Generics
66

7+
import Wizard.Model.Tenant.Tenant
8+
79
data 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

wizard-server/src/Wizard/Api/Resource/Tenant/TenantDetailDTO.hs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import qualified Data.UUID as U
55
import GHC.Generics
66

77
import Wizard.Api.Resource.User.UserDTO
8+
import Wizard.Model.Tenant.Tenant
89
import WizardLib.Public.Api.Resource.Tenant.Usage.WizardUsageDTO
910

1011
data 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

wizard-server/src/Wizard/Api/Resource/Tenant/TenantDetailJM.hs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import Data.Aeson
44

55
import Shared.Common.Util.Aeson
66
import Wizard.Api.Resource.Tenant.TenantDetailDTO
7+
import Wizard.Api.Resource.Tenant.TenantJM ()
78
import Wizard.Api.Resource.User.UserJM ()
89
import WizardLib.Public.Api.Resource.Tenant.Usage.WizardUsageJM ()
910

wizard-server/src/Wizard/Api/Resource/Tenant/TenantDetailSM.hs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import Data.Swagger
55
import Shared.Common.Util.Swagger
66
import Wizard.Api.Resource.Tenant.TenantDetailDTO
77
import Wizard.Api.Resource.Tenant.TenantDetailJM ()
8+
import Wizard.Api.Resource.Tenant.TenantSM ()
89
import Wizard.Api.Resource.User.UserSM ()
910
import Wizard.Database.Migration.Development.Tenant.Data.Tenants
1011
import Wizard.Service.Tenant.TenantMapper

wizard-server/src/Wizard/Api/Resource/Tenant/TenantJM.hs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
module Wizard.Api.Resource.Tenant.TenantJM where
22

33
import Data.Aeson
4+
import Servant.API
45

6+
import Shared.Common.Api.Resource.Common.FromHttpApiData
57
import Shared.Common.Util.Aeson
68
import Wizard.Api.Resource.Tenant.TenantDTO
79
import Wizard.Model.Tenant.Tenant
@@ -18,6 +20,9 @@ instance FromJSON TenantState where
1820
instance ToJSON TenantState where
1921
toJSON = genericToJSON jsonOptions
2022

23+
instance FromHttpApiData [TenantState] where
24+
parseQueryParam = genericParseQueryParams
25+
2126
instance FromJSON TenantDTO where
2227
parseJSON = genericParseJSON jsonOptions
2328

wizard-server/src/Wizard/Api/Resource/Tenant/TenantSM.hs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,5 +15,7 @@ instance ToSchema Tenant where
1515
instance ToSchema TenantState where
1616
declareNamedSchema = toSwagger ReadyForUseTenantState
1717

18+
instance ToParamSchema TenantState
19+
1820
instance ToSchema TenantDTO where
1921
declareNamedSchema = toSwagger (toDTO defaultTenant Nothing Nothing)

wizard-server/src/Wizard/Database/DAO/Tenant/TenantDAO.hs

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
module Wizard.Database.DAO.Tenant.TenantDAO where
22

33
import Control.Monad.Reader (liftIO)
4+
import qualified Data.List as L
45
import Data.String
56
import Data.Time
67
import qualified Data.UUID as U
@@ -26,14 +27,21 @@ pageLabel = "tenants"
2627
findTenants :: AppContextM [Tenant]
2728
findTenants = 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

3947
findTenantByUuid :: U.UUID -> AppContextM Tenant

0 commit comments

Comments
 (0)