33module Share.Web.Share.Orgs.Queries
44 ( orgByUserId ,
55 orgByUserHandle ,
6+ orgsByIdsOf ,
67 listOrgRoles ,
78 addOrgRoles ,
89 removeOrgRoles ,
@@ -23,33 +24,50 @@ import Share.Prelude
2324import Share.Utils.URI
2425import Share.Web.Authorization.Types
2526import Share.Web.Share.DisplayInfo (OrgDisplayInfo (.. ), UserDisplayInfo (.. ))
26- import Share.Web.Share.Orgs.Types (Org )
27+ import Share.Web.Share.Orgs.Types (Org ( .. ) )
2728
2829orgByUserId :: UserId -> Transaction e (Maybe Org )
2930orgByUserId orgUserId = do
3031 query1Row
3132 [sql |
32- SELECT org.id FROM orgs org
33+ SELECT org.id, org.is_commercial
34+ FROM orgs org
3335 WHERE org.user_id = #{orgUserId}
3436 |]
3537
3638orgByUserHandle :: UserHandle -> Transaction e (Maybe Org )
3739orgByUserHandle orgHandle = do
3840 query1Row
3941 [sql |
40- SELECT org.id
42+ SELECT org.id, org.is_commercial
4143 FROM orgs org
4244 JOIN users u ON org.user_id = u.id
4345 WHERE u.handle = #{orgHandle}
4446 |]
4547
48+ orgsByIdsOf :: (QueryA m ) => Traversal s t OrgId Org -> s -> m t
49+ orgsByIdsOf trav s = do
50+ s
51+ & unsafePartsOf trav %%~ \ orgIds -> do
52+ let orgTable = zip [0 :: Int32 .. ] orgIds
53+ queryListRows
54+ [sql |
55+ WITH values(ord, org_id) AS (
56+ SELECT * FROM ^{toTable orgTable} AS t(ord, org_id)
57+ ) SELECT org.id, org.is_commercial
58+ FROM values
59+ JOIN orgs org ON org.id = values.org_id
60+ ORDER BY values.ord
61+ |]
62+
4663-- | Efficiently resolve Org Display Info for OrgIds within a structure.
4764orgDisplayInfoOf :: (QueryA m ) => Traversal s t OrgId OrgDisplayInfo -> s -> m t
4865orgDisplayInfoOf trav s = do
4966 s
5067 & unsafePartsOf trav %%~ \ orgIds -> do
5168 userDisplayInfos <- userDisplayInfoByOrgIdOf traversed orgIds
52- pure $ zipWith (\ orgId userDisplayInfo -> OrgDisplayInfo {orgId, user = userDisplayInfo}) orgIds userDisplayInfos
69+ orgs <- orgsByIdsOf traversed orgIds
70+ pure $ zipWith (\ (Org {orgId, isCommercial}) userDisplayInfo -> OrgDisplayInfo {orgId, user = userDisplayInfo, isCommercial}) orgs userDisplayInfos
5371
5472userDisplayInfoByOrgIdOf :: (QueryA m ) => Traversal s t OrgId UserDisplayInfo -> s -> m t
5573userDisplayInfoByOrgIdOf trav s = do
0 commit comments