mirror of
https://github.com/Start9Labs/registry.git
synced 2026-03-26 02:11:53 +00:00
persist eos version and arch for user activity
This commit is contained in:
@@ -28,13 +28,11 @@ import Database.Queries (
|
||||
import Foundation (Handler, Route (InstructionsR, LicenseR))
|
||||
import Handler.Package.Api (DependencyRes (..), PackageListRes (..), PackageRes (..))
|
||||
import Handler.Types.Api (ApiVersion (..))
|
||||
import Handler.Util (basicRender)
|
||||
import Lib.Error (S9Error (..))
|
||||
import Handler.Util (basicRender, parseQueryParam)
|
||||
import Lib.PkgRepository (PkgRepo, getIcon, getManifest)
|
||||
import Lib.Types.Core (PkgId)
|
||||
import Lib.Types.Emver (Version, VersionRange (..), parseRange, satisfies, (<||))
|
||||
import Model (Category (..), Key (..), PkgDependency (..), VersionRecord (..))
|
||||
import Network.HTTP.Types (status400)
|
||||
import Protolude.Unsafe (unsafeFromJust)
|
||||
import Settings (AppSettings)
|
||||
import Startlude (
|
||||
@@ -44,7 +42,6 @@ import Startlude (
|
||||
ByteString,
|
||||
ConvertText (toS),
|
||||
Down (..),
|
||||
Either (..),
|
||||
Eq (..),
|
||||
Int,
|
||||
Maybe (..),
|
||||
@@ -80,7 +77,6 @@ import Startlude (
|
||||
(.*),
|
||||
(<$>),
|
||||
(<&>),
|
||||
(<>),
|
||||
(=<<),
|
||||
)
|
||||
import UnliftIO (Concurrently (..), mapConcurrently)
|
||||
@@ -90,9 +86,7 @@ import Yesod (
|
||||
MonadResource,
|
||||
YesodPersist (runDB),
|
||||
lookupGetParam,
|
||||
sendResponseStatus,
|
||||
)
|
||||
import Yesod.Core (logWarn)
|
||||
|
||||
|
||||
data PackageReq = PackageReq
|
||||
@@ -155,19 +149,6 @@ getPackageIndexR = do
|
||||
pkgsWithDependencies <- runDB $ mapConcurrently (getPackageDependencies osPredicate) filteredPackages
|
||||
PackageListRes <$> runConcurrently (zipWithM (Concurrently .* constructPackageListApiRes) filteredPackages pkgsWithDependencies)
|
||||
|
||||
|
||||
parseQueryParam :: Text -> (Text -> Either Text a) -> Handler (Maybe a)
|
||||
parseQueryParam param parser = do
|
||||
lookupGetParam param >>= \case
|
||||
Nothing -> pure Nothing
|
||||
Just x -> case parser x of
|
||||
Left e -> do
|
||||
let err = InvalidParamsE ("get:" <> param) x
|
||||
$logWarn e
|
||||
sendResponseStatus status400 err
|
||||
Right a -> pure (Just a)
|
||||
|
||||
|
||||
getPkgIdsQuery :: Handler (Maybe [PackageReq])
|
||||
getPkgIdsQuery = parseQueryParam "ids" (first toS . eitherDecodeStrict . encodeUtf8)
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
{-# LANGUAGE QuasiQuotes #-}
|
||||
{-# LANGUAGE TemplateHaskell #-}
|
||||
|
||||
module Handler.Util where
|
||||
|
||||
@@ -26,7 +27,7 @@ import Lib.Types.Core (PkgId)
|
||||
import Lib.Types.Emver (
|
||||
Version,
|
||||
VersionRange,
|
||||
satisfies,
|
||||
satisfies, parseVersion
|
||||
)
|
||||
import Model (
|
||||
UserActivity (..),
|
||||
@@ -60,7 +61,7 @@ import Startlude (
|
||||
($),
|
||||
(.),
|
||||
(<$>),
|
||||
(>>=),
|
||||
(>>=), note, (=<<)
|
||||
)
|
||||
import UnliftIO (MonadUnliftIO)
|
||||
import Yesod (
|
||||
@@ -76,8 +77,8 @@ import Yesod (
|
||||
toContent,
|
||||
typePlain,
|
||||
)
|
||||
import Yesod.Core (addHeader)
|
||||
|
||||
import Yesod.Core (addHeader, logWarn)
|
||||
import Lib.Error (S9Error (..))
|
||||
|
||||
orThrow :: MonadHandler m => m (Maybe a) -> m a -> m a
|
||||
orThrow action other =
|
||||
@@ -111,7 +112,6 @@ getVersionFromQuery = do
|
||||
getHashFromQuery :: MonadHandler m => m (Maybe Text)
|
||||
getHashFromQuery = lookupGetParam "hash"
|
||||
|
||||
|
||||
versionPriorityFromQueryIsMin :: MonadHandler m => m Bool
|
||||
versionPriorityFromQueryIsMin = do
|
||||
priorityString <- lookupGetParam "version-priority"
|
||||
@@ -140,14 +140,30 @@ queryParamAs k p =
|
||||
Left e -> sendResponseText status400 [i|Invalid Request! The query parameter '#{k}' failed to parse: #{e}|]
|
||||
Right a -> pure (Just a)
|
||||
|
||||
parseQueryParam :: Text -> (Text -> Either Text a) -> Handler (Maybe a)
|
||||
parseQueryParam param parser = do
|
||||
lookupGetParam param >>= \case
|
||||
Nothing -> pure Nothing
|
||||
Just x -> case parser x of
|
||||
Left e -> do
|
||||
let err = InvalidParamsE ("get:" <> param) x
|
||||
$logWarn e
|
||||
sendResponseStatus status400 err
|
||||
Right a -> pure (Just a)
|
||||
|
||||
tickleMAU :: Handler ()
|
||||
tickleMAU = do
|
||||
lookupGetParam "server-id" >>= \case
|
||||
Nothing -> pure ()
|
||||
Just sid -> do
|
||||
now <- liftIO getCurrentTime
|
||||
void $ liftHandler $ runDB $ insertRecord $ UserActivity now sid
|
||||
queryParamAs "eos-version" parseVersion >>= \case
|
||||
Nothing -> pure ()
|
||||
Just currentEosVersion -> do
|
||||
getArchQuery >>= \case
|
||||
Nothing -> pure ()
|
||||
Just arch -> do
|
||||
now <- liftIO getCurrentTime
|
||||
void $ liftHandler $ runDB $ insertRecord $ UserActivity now sid currentEosVersion arch
|
||||
|
||||
|
||||
fetchCompatiblePkgVersions :: Maybe VersionRange -> PkgId -> Handler [VersionRecord]
|
||||
@@ -160,3 +176,6 @@ fetchCompatiblePkgVersions osVersion pkg = do
|
||||
case osV of
|
||||
Nothing -> const True
|
||||
Just v -> flip satisfies v
|
||||
|
||||
getArchQuery :: Handler (Maybe Text)
|
||||
getArchQuery = parseQueryParam "arch" ((flip $ note . mappend "Invalid 'arch': ") =<< readMaybe)
|
||||
@@ -128,6 +128,8 @@ PkgDependency
|
||||
UserActivity
|
||||
createdAt UTCTime
|
||||
serverId Text
|
||||
osVersion Version
|
||||
arch Text
|
||||
|
||||
Admin
|
||||
Id Text
|
||||
|
||||
Reference in New Issue
Block a user