Added a transaction for handling the nextQuoteID.
This commit is contained in:
parent
7e3cc4790a
commit
ac7c0126f3
1 changed files with 10 additions and 1 deletions
|
@ -101,8 +101,17 @@ setQuote quoteId theQuote = get >>= \db -> put db { quoteBotDB = M.insert quoteI
|
||||||
getLastActiveQuote :: IRC.Channel -> Query QuoteDB (Maybe QuoteID)
|
getLastActiveQuote :: IRC.Channel -> Query QuoteDB (Maybe QuoteID)
|
||||||
getLastActiveQuote channel = fmap (M.lookup channel) (asks lastActive)
|
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
|
$(makeAcidic ''QuoteDB [ 'getQuote, 'getQuoteDB, 'isQuoteLockedFor, 'lockQuoteIdFor, 'deleteQuote, 'setQuote
|
||||||
, 'getLastActiveQuote ])
|
, 'getLastActiveQuote, 'takeNextQuoteID ])
|
||||||
|
|
||||||
-- | gets a random quote from the database
|
-- | gets a random quote from the database
|
||||||
getRandomQuote :: AcidState QuoteDB -> IO (Maybe Quote)
|
getRandomQuote :: AcidState QuoteDB -> IO (Maybe Quote)
|
||||||
|
|
Reference in a new issue