diff --git a/src/Handler/Utils/Form.hs b/src/Handler/Utils/Form.hs index c11514a07..57c590204 100644 --- a/src/Handler/Utils/Form.hs +++ b/src/Handler/Utils/Form.hs @@ -1136,7 +1136,7 @@ multiUserField onlySuggested suggestions = Field{..} |] whenIsJust suggestions $ \suggestions' -> do - suggestedEmails <- fmap (Set.fromList . map (over _2 E.unValue . over _1 E.unValue)) . liftHandler . runDB . E.select $ do + suggestedEmails <- fmap (Map.assocs . Map.fromListWith min . map (over _2 E.unValue . over _1 E.unValue)) . liftHandler . runDB . E.select $ do user <- suggestions' return $ (user E.^. UserEmail, user E.^. UserDisplayName) [whamlet| @@ -1153,14 +1153,16 @@ multiUserField onlySuggested suggestions = Field{..} fmap Set.fromList . forM emails $ \(CI.mk -> email) -> case lookupExpr of Nothing -> return $ Left email Just lookupExpr' -> do - dbRes <- liftHandler . runDB . E.select $ do + dbRes <- fmap (setOf $ folded . _Value). liftHandler . runDB . E.select $ do user <- lookupExpr' E.where_ $ user E.^. UserEmail E.==. E.val email return $ user E.^. UserId - case dbRes of - [] -> return $ Left email - [E.Value uid] -> return $ Right uid - _other -> throwE $ SomeMessage MsgAmbiguousEmail + if | Set.null dbRes + -> return $ Left email + | [uid] <- Set.toList dbRes + -> return $ Right uid + | otherwise + -> throwE $ SomeMessage MsgAmbiguousEmail examResultField :: forall m res. ( MonadHandler m