Advise-me-0.1: src/Service/Sequencer.hs
-----------------------------------------------------------------------------
-- Copyright 2019, Advise-Me project team. This file is distributed under
-- the terms of the Apache License 2.0. For more information, see the files
-- "LICENSE.txt" and "NOTICE.txt", which are included in the distribution.
-----------------------------------------------------------------------------
-- |
-- Maintainer : bastiaan.heeren@ou.nl
-- Stability : provisional
-- Portability : portable (depends on ghc)
--
-----------------------------------------------------------------------------
module Service.Sequencer where
import System.Random
import qualified Database.HDBC as SQL
import qualified Database.HDBC.Sqlite3 as SQL (connectSqlite3, setBusyTimeout)
import Ideas.Common.Library
import Ideas.Service.Types hiding (tUserId)
import Recognize.Data.MathStoryProblem
import Recognize.Data.Solution
import Main.Tasks
import Service.Types
import Database.Data ( StudentID, tasksDone )
sequencer :: StudentID -> IO (Maybe (Exercise a))
sequencer uid = do
conn <- SQL.connectSqlite3 "advise-me.db"
done <- tasksDone conn uid
let undone = filter (\t -> not $ showId t `elem` done) tasks
i <- randomRIO (0, length undone-1)
if null undone
then return Nothing
else case undone !! i of
Task e -> return . Just . getExercise $ e
sequencerService :: Service
sequencerService = makeService "advise-me-next-task" "Sequencer service for Advise-Me project" $
sequencer ::: tUserIdTag .-> tIO (tMaybe tExercise)