Archived
1
0
Fork 0

Added a transaction for handling the nextQuoteID.

This commit is contained in:
Julien Dessaux 2011-09-30 21:40:23 +02:00
parent 7e3cc4790a
commit ac7c0126f3

View file

@ -101,8 +101,17 @@ setQuote quoteId theQuote = get >>= \db -> put db { quoteBotDB = M.insert quoteI
getLastActiveQuote :: IRC.Channel -> Query QuoteDB (Maybe QuoteID)
getLastActiveQuote channel = fmap (M.lookup channel) (asks lastActive)
takeNextQuoteID :: IRC.UserName -> IRC.Channel -> UTCTime -> Update QuoteDB (QuoteID)
takeNextQuoteID requestor channel now = do
db <- get
let quoteId = nextQuoteId db
put db { nextQuoteId = nextQuoteId db + 1
, lockedQuotes = M.insert quoteId (requestor, now) (lockedQuotes db)
, lastActive = M.insert channel quoteId (lastActive db) }
return quoteId
$(makeAcidic ''QuoteDB [ 'getQuote, 'getQuoteDB, 'isQuoteLockedFor, 'lockQuoteIdFor, 'deleteQuote, 'setQuote
, 'getLastActiveQuote ])
, 'getLastActiveQuote, 'takeNextQuoteID ])
-- | gets a random quote from the database
getRandomQuote :: AcidState QuoteDB -> IO (Maybe Quote)