rename AppIdentifier to PkgId to save typing and reflect new name terminology

This commit is contained in:
Keagan McClelland
2021-09-27 11:33:11 -06:00
parent 1b25140740
commit 66e19a727e
8 changed files with 67 additions and 68 deletions

View File

@@ -4,14 +4,14 @@
-- /package/updates -- /package/updates
/eos/latest EosR GET -- get eos information /eos/latest EosR GET -- get eos information
/latest-version VersionLatestR GET -- get latest version of apps in query param id /latest-version VersionLatestR GET -- get latest version of apps in query param id
/package/manifest/#AppIdentifier AppManifestR GET -- get app manifest from appmgr -- ?version={semver-spec} /package/manifest/#PkgId AppManifestR GET -- get app manifest from appmgr -- ?version={semver-spec}
/package/release-notes ReleaseNotesR GET -- get release notes for package - expects query param of id=<pacakge-id> /package/release-notes ReleaseNotesR GET -- get release notes for package - expects query param of id=<pacakge-id>
/package/icon/#AppIdentifier IconsR GET -- get icons - can specify version with ?spec=<emver> /package/icon/#PkgId IconsR GET -- get icons - can specify version with ?spec=<emver>
/package/license/#AppIdentifier LicenseR GET -- get icons - can specify version with ?spec=<emver> /package/license/#PkgId LicenseR GET -- get icons - can specify version with ?spec=<emver>
/package/instructions/#AppIdentifier InstructionsR GET -- get icons - can specify version with ?spec=<emver> /package/instructions/#PkgId InstructionsR GET -- get icons - can specify version with ?spec=<emver>
-- TODO confirm needed -- TODO confirm needed
/package/config/#AppIdentifier AppConfigR GET -- get app config from appmgr -- ?spec={semver-spec} /package/config/#PkgId AppConfigR GET -- get app config from appmgr -- ?spec={semver-spec}
/package/version/#Text VersionAppR GET -- get most recent appId version /package/version/#Text VersionAppR GET -- get most recent appId version
!/sys/#SYS_EXTENSIONLESS SysR GET -- get most recent sys app -- ?spec={semver-spec} !/sys/#SYS_EXTENSIONLESS SysR GET -- get most recent sys app -- ?spec={semver-spec}
/version VersionR GET /version VersionR GET

View File

@@ -4,20 +4,20 @@
module Database.Queries where module Database.Queries where
import Startlude
import Database.Persist.Sql import Database.Persist.Sql
import Lib.Types.AppIndex import Lib.Types.AppIndex
import Lib.Types.Emver import Lib.Types.Emver
import Model import Model
import Orphans.Emver ( ) import Orphans.Emver ( )
import Startlude
fetchApp :: MonadIO m => AppIdentifier -> ReaderT SqlBackend m (Maybe (Entity SApp)) fetchApp :: MonadIO m => PkgId -> ReaderT SqlBackend m (Maybe (Entity SApp))
fetchApp appId = selectFirst [SAppAppId ==. appId] [] fetchApp appId = selectFirst [SAppAppId ==. appId] []
fetchAppVersion :: MonadIO m => Version -> Key SApp -> ReaderT SqlBackend m (Maybe (Entity SVersion)) fetchAppVersion :: MonadIO m => Version -> Key SApp -> ReaderT SqlBackend m (Maybe (Entity SVersion))
fetchAppVersion appVersion appId = selectFirst [SVersionNumber ==. appVersion, SVersionAppId ==. appId] [] fetchAppVersion appVersion appId = selectFirst [SVersionNumber ==. appVersion, SVersionAppId ==. appId] []
createApp :: MonadIO m => AppIdentifier -> StoreApp -> ReaderT SqlBackend m (Maybe (Key SApp)) createApp :: MonadIO m => PkgId -> StoreApp -> ReaderT SqlBackend m (Maybe (Key SApp))
createApp appId StoreApp {..} = do createApp appId StoreApp {..} = do
time <- liftIO getCurrentTime time <- liftIO getCurrentTime
insertUnique $ SApp time Nothing storeAppTitle appId storeAppDescShort storeAppDescLong storeAppIconType insertUnique $ SApp time Nothing storeAppTitle appId storeAppDescShort storeAppDescLong storeAppIconType

View File

@@ -70,7 +70,7 @@ getSysR e = do
-- @TODO update with new response type here -- @TODO update with new response type here
getApp sysResourceDir e getApp sysResourceDir e
getAppManifestR :: AppIdentifier -> Handler TypedContent getAppManifestR :: PkgId -> Handler TypedContent
getAppManifestR appId = do getAppManifestR appId = do
(appsDir, appMgrDir) <- getsYesod $ ((</> "apps") . resourcesDir &&& staticBinDir) . appSettings (appsDir, appMgrDir) <- getsYesod $ ((</> "apps") . resourcesDir &&& staticBinDir) . appSettings
av <- getVersionFromQuery appsDir appExt >>= \case av <- getVersionFromQuery appsDir appExt >>= \case
@@ -84,7 +84,7 @@ getAppManifestR appId = do
(\bsSource -> respondSource "application/json" (bsSource .| awaitForever sendChunkBS)) (\bsSource -> respondSource "application/json" (bsSource .| awaitForever sendChunkBS))
where appExt = Extension (show appId) :: Extension "s9pk" where appExt = Extension (show appId) :: Extension "s9pk"
getAppConfigR :: AppIdentifier -> Handler TypedContent getAppConfigR :: PkgId -> Handler TypedContent
getAppConfigR appId = do getAppConfigR appId = do
appSettings <- appSettings <$> getYesod appSettings <- appSettings <$> getYesod
let appsDir = (</> "apps") . resourcesDir $ appSettings let appsDir = (</> "apps") . resourcesDir $ appSettings
@@ -146,7 +146,7 @@ chunkIt fp = do
recordMetrics :: String -> Version -> HandlerFor RegistryCtx () recordMetrics :: String -> Version -> HandlerFor RegistryCtx ()
recordMetrics appId appVersion = do recordMetrics appId appVersion = do
let appId' = T.pack appId let appId' = T.pack appId
sa <- runDB $ fetchApp $ AppIdentifier appId' sa <- runDB $ fetchApp $ PkgId appId'
case sa of case sa of
Nothing -> do Nothing -> do
$logError $ appId' <> " not found in database" $logError $ appId' <> " not found in database"

View File

@@ -37,7 +37,7 @@ instance FromJSON IconType
ixt :: Text ixt :: Text
ixt = toS $ toUpper <$> drop 1 ".png" ixt = toS $ toUpper <$> drop 1 ".png"
getIconsR :: AppIdentifier -> Handler TypedContent getIconsR :: PkgId -> Handler TypedContent
getIconsR appId = do getIconsR appId = do
(appsDir, appMgrDir) <- getsYesod $ ((</> "apps") . resourcesDir &&& staticBinDir) . appSettings (appsDir, appMgrDir) <- getsYesod $ ((</> "apps") . resourcesDir &&& staticBinDir) . appSettings
spec <- getVersionFromQuery appsDir ext >>= \case spec <- getVersionFromQuery appsDir ext >>= \case
@@ -71,7 +71,7 @@ getIconsR appId = do
(\bsSource -> respondSource mimeType (bsSource .| awaitForever sendChunkBS)) (\bsSource -> respondSource mimeType (bsSource .| awaitForever sendChunkBS))
where ext = Extension (show appId) :: Extension "s9pk" where ext = Extension (show appId) :: Extension "s9pk"
getLicenseR :: AppIdentifier -> Handler TypedContent getLicenseR :: PkgId -> Handler TypedContent
getLicenseR appId = do getLicenseR appId = do
(appsDir, appMgrDir) <- getsYesod $ ((</> "apps") . resourcesDir &&& staticBinDir) . appSettings (appsDir, appMgrDir) <- getsYesod $ ((</> "apps") . resourcesDir &&& staticBinDir) . appSettings
spec <- getVersionFromQuery appsDir ext >>= \case spec <- getVersionFromQuery appsDir ext >>= \case
@@ -84,7 +84,7 @@ getLicenseR appId = do
sourceLicense appMgrDir p ext (\bsSource -> respondSource typePlain (bsSource .| awaitForever sendChunkBS)) sourceLicense appMgrDir p ext (\bsSource -> respondSource typePlain (bsSource .| awaitForever sendChunkBS))
where ext = Extension (show appId) :: Extension "s9pk" where ext = Extension (show appId) :: Extension "s9pk"
getInstructionsR :: AppIdentifier -> Handler TypedContent getInstructionsR :: PkgId -> Handler TypedContent
getInstructionsR appId = do getInstructionsR appId = do
(appsDir, appMgrDir) <- getsYesod $ ((</> "apps") . resourcesDir &&& staticBinDir) . appSettings (appsDir, appMgrDir) <- getsYesod $ ((</> "apps") . resourcesDir &&& staticBinDir) . appSettings
spec <- getVersionFromQuery appsDir ext >>= \case spec <- getVersionFromQuery appsDir ext >>= \case

View File

@@ -66,7 +66,7 @@ data ServiceRes = ServiceRes
, serviceResInstructions :: URL , serviceResInstructions :: URL
, serviceResLicense :: URL , serviceResLicense :: URL
, serviceResVersions :: [Version] , serviceResVersions :: [Version]
, serviceResDependencyInfo :: HM.HashMap AppIdentifier DependencyInfo , serviceResDependencyInfo :: HM.HashMap PkgId DependencyInfo
} }
deriving Generic deriving Generic
@@ -93,7 +93,7 @@ instance ToContent ServiceRes where
instance ToTypedContent ServiceRes where instance ToTypedContent ServiceRes where
toTypedContent = toTypedContent . toJSON toTypedContent = toTypedContent . toJSON
data DependencyInfo = DependencyInfo data DependencyInfo = DependencyInfo
{ dependencyInfoTitle :: AppIdentifier { dependencyInfoTitle :: PkgId
, dependencyInfoIcon :: URL , dependencyInfoIcon :: URL
} }
deriving (Eq, Show) deriving (Eq, Show)
@@ -114,7 +114,7 @@ instance ToTypedContent ServiceListRes where
toTypedContent = toTypedContent . toJSON toTypedContent = toTypedContent . toJSON
data ServiceAvailable = ServiceAvailable data ServiceAvailable = ServiceAvailable
{ serviceAvailableId :: AppIdentifier { serviceAvailableId :: PkgId
, serviceAvailableTitle :: Text , serviceAvailableTitle :: Text
, serviceAvailableVersion :: Version , serviceAvailableVersion :: Version
, serviceAvailableIcon :: URL , serviceAvailableIcon :: URL
@@ -142,7 +142,7 @@ instance ToContent ServiceAvailableRes where
instance ToTypedContent ServiceAvailableRes where instance ToTypedContent ServiceAvailableRes where
toTypedContent = toTypedContent . toJSON toTypedContent = toTypedContent . toJSON
newtype VersionLatestRes = VersionLatestRes (HM.HashMap AppIdentifier (Maybe Version)) newtype VersionLatestRes = VersionLatestRes (HM.HashMap PkgId (Maybe Version))
deriving (Show, Generic) deriving (Show, Generic)
instance ToJSON VersionLatestRes instance ToJSON VersionLatestRes
instance ToContent VersionLatestRes where instance ToContent VersionLatestRes where
@@ -174,7 +174,7 @@ instance ToTypedContent EosRes where
toTypedContent = toTypedContent . toJSON toTypedContent = toTypedContent . toJSON
data PackageVersion = PackageVersion data PackageVersion = PackageVersion
{ packageVersionId :: AppIdentifier { packageVersionId :: PkgId
, packageVersionVersion :: VersionRange , packageVersionVersion :: VersionRange
} }
deriving Show deriving Show
@@ -217,8 +217,7 @@ getReleaseNotesR = do
case lookup "id" getParameters of case lookup "id" getParameters of
Nothing -> sendResponseStatus status400 ("expected query param \"id\" to exist" :: Text) Nothing -> sendResponseStatus status400 ("expected query param \"id\" to exist" :: Text)
Just package -> do Just package -> do
(service, _) <- runDB $ fetchLatestApp (AppIdentifier package) >>= errOnNothing status404 (service, _) <- runDB $ fetchLatestApp (PkgId package) >>= errOnNothing status404 "package not found"
"package not found"
(_, mappedVersions) <- fetchAllAppVersions (entityKey service) (_, mappedVersions) <- fetchAllAppVersions (entityKey service)
pure mappedVersions pure mappedVersions
@@ -229,8 +228,8 @@ getVersionLatestR = do
Nothing -> sendResponseStatus status400 ("expected query param \"ids\" to exist" :: Text) Nothing -> sendResponseStatus status400 ("expected query param \"ids\" to exist" :: Text)
Just packages -> case eitherDecode $ BS.fromStrict $ encodeUtf8 packages of Just packages -> case eitherDecode $ BS.fromStrict $ encodeUtf8 packages of
Left e -> sendResponseStatus status400 ("could not parse query param \"ids\"" <> show e :: Text) Left e -> sendResponseStatus status400 ("could not parse query param \"ids\"" <> show e :: Text)
Right (p :: [AppIdentifier]) -> do Right (p :: [PkgId]) -> do
let packageList :: [(AppIdentifier, Maybe Version)] = (, Nothing) <$> p let packageList :: [(PkgId, Maybe Version)] = (, Nothing) <$> p
found <- runDB $ traverse fetchLatestApp $ fst <$> packageList found <- runDB $ traverse fetchLatestApp $ fst <$> packageList
pure pure
$ VersionLatestRes $ VersionLatestRes
@@ -370,9 +369,9 @@ getPackageListR = do
where where
getPackageDetails :: MonadIO m getPackageDetails :: MonadIO m
=> (HM.HashMap AppIdentifier ([Version], [CategoryTitle])) => (HM.HashMap PkgId ([Version], [CategoryTitle]))
-> PackageVersion -> PackageVersion
-> m (Either Text ((Maybe Version), AppIdentifier)) -> m (Either Text ((Maybe Version), PkgId))
getPackageDetails metadata pv = do getPackageDetails metadata pv = do
let appId = packageVersionId pv let appId = packageVersionId pv
let spec = packageVersionVersion pv let spec = packageVersionVersion pv
@@ -395,9 +394,9 @@ getPackageListR = do
getServiceDetails :: (MonadUnliftIO m, Monad m, MonadError IOException m) getServiceDetails :: (MonadUnliftIO m, Monad m, MonadError IOException m)
=> AppSettings => AppSettings
-> (HM.HashMap AppIdentifier ([Version], [CategoryTitle])) -> (HM.HashMap PkgId ([Version], [CategoryTitle]))
-> Maybe Version -> Maybe Version
-> AppIdentifier -> PkgId
-> m (Either Text ServiceRes) -> m (Either Text ServiceRes)
getServiceDetails settings metadata maybeVersion appId = do getServiceDetails settings metadata maybeVersion appId = do
packageMetadata <- case HM.lookup appId metadata of packageMetadata <- case HM.lookup appId metadata of
@@ -432,9 +431,9 @@ getServiceDetails settings metadata maybeVersion appId = do
mapDependencyMetadata :: (MonadIO m) mapDependencyMetadata :: (MonadIO m)
=> Text => Text
-> HM.HashMap AppIdentifier ([Version], [CategoryTitle]) -> HM.HashMap PkgId ([Version], [CategoryTitle])
-> (AppIdentifier, ServiceDependencyInfo) -> (PkgId, ServiceDependencyInfo)
-> m (Either Text (AppIdentifier, DependencyInfo)) -> m (Either Text (PkgId, DependencyInfo))
mapDependencyMetadata domain metadata (appId, depInfo) = do mapDependencyMetadata domain metadata (appId, depInfo) = do
depMetadata <- case HM.lookup appId metadata of depMetadata <- case HM.lookup appId metadata of
Nothing -> throwIO $ NotFoundE [i|dependency metadata for #{appId} not found.|] Nothing -> throwIO $ NotFoundE [i|dependency metadata for #{appId} not found.|]
@@ -497,7 +496,7 @@ fetchMostRecentAppVersions appId = select $ do
limit 1 limit 1
pure version pure version
fetchLatestApp :: MonadIO m => AppIdentifier -> ReaderT SqlBackend m (Maybe (P.Entity SApp, P.Entity SVersion)) fetchLatestApp :: MonadIO m => PkgId -> ReaderT SqlBackend m (Maybe (P.Entity SApp, P.Entity SVersion))
fetchLatestApp appId = selectOne $ do fetchLatestApp appId = selectOne $ do
(service :& version) <- (service :& version) <-
from from
@@ -509,7 +508,7 @@ fetchLatestApp appId = selectOne $ do
pure (service, version) pure (service, version)
fetchLatestAppAtVersion :: MonadIO m fetchLatestAppAtVersion :: MonadIO m
=> AppIdentifier => PkgId
-> Version -> Version
-> ReaderT SqlBackend m (Maybe (P.Entity SApp, P.Entity SVersion)) -> ReaderT SqlBackend m (Maybe (P.Entity SApp, P.Entity SVersion))
fetchLatestAppAtVersion appId version' = selectOne $ do fetchLatestAppAtVersion appId version' = selectOne $ do
@@ -522,7 +521,7 @@ fetchLatestAppAtVersion appId version' = selectOne $ do
pure (service, version) pure (service, version)
fetchPackageMetadata :: (MonadLogger m, MonadUnliftIO m) fetchPackageMetadata :: (MonadLogger m, MonadUnliftIO m)
=> ReaderT SqlBackend m (HM.HashMap AppIdentifier ([Version], [CategoryTitle])) => ReaderT SqlBackend m (HM.HashMap PkgId ([Version], [CategoryTitle]))
fetchPackageMetadata = do fetchPackageMetadata = do
let categoriesQuery = select $ do let categoriesQuery = select $ do
(service :& category) <- (service :& category) <-

View File

@@ -28,42 +28,42 @@ import Orphans.Emver ( )
import System.Directory import System.Directory
import Yesod import Yesod
newtype AppIdentifier = AppIdentifier { unAppIdentifier :: Text } newtype PkgId = PkgId { unPkgId :: Text }
deriving (Eq) deriving (Eq)
instance IsString AppIdentifier where instance IsString PkgId where
fromString = AppIdentifier . fromString fromString = PkgId . fromString
instance Show AppIdentifier where instance Show PkgId where
show = toS . unAppIdentifier show = toS . unPkgId
instance Read AppIdentifier where instance Read PkgId where
readsPrec _ s = [(AppIdentifier $ toS s, "")] readsPrec _ s = [(PkgId $ toS s, "")]
instance Hashable AppIdentifier where instance Hashable PkgId where
hashWithSalt n = hashWithSalt n . unAppIdentifier hashWithSalt n = hashWithSalt n . unPkgId
instance FromJSON AppIdentifier where instance FromJSON PkgId where
parseJSON = fmap AppIdentifier . parseJSON parseJSON = fmap PkgId . parseJSON
instance ToJSON AppIdentifier where instance ToJSON PkgId where
toJSON = toJSON . unAppIdentifier toJSON = toJSON . unPkgId
instance FromJSONKey AppIdentifier where instance FromJSONKey PkgId where
fromJSONKey = fmap AppIdentifier fromJSONKey fromJSONKey = fmap PkgId fromJSONKey
instance ToJSONKey AppIdentifier where instance ToJSONKey PkgId where
toJSONKey = contramap unAppIdentifier toJSONKey toJSONKey = contramap unPkgId toJSONKey
instance PersistField AppIdentifier where instance PersistField PkgId where
toPersistValue = PersistText . show toPersistValue = PersistText . show
fromPersistValue (PersistText t) = Right . AppIdentifier $ toS t fromPersistValue (PersistText t) = Right . PkgId $ toS t
fromPersistValue other = Left $ "Invalid AppId: " <> show other fromPersistValue other = Left $ "Invalid AppId: " <> show other
instance PersistFieldSql AppIdentifier where instance PersistFieldSql PkgId where
sqlType _ = SqlString sqlType _ = SqlString
instance PathPiece AppIdentifier where instance PathPiece PkgId where
fromPathPiece = fmap AppIdentifier . fromPathPiece fromPathPiece = fmap PkgId . fromPathPiece
toPathPiece = unAppIdentifier toPathPiece = unPkgId
instance ToContent AppIdentifier where instance ToContent PkgId where
toContent = toContent . toJSON toContent = toContent . toJSON
instance ToTypedContent AppIdentifier where instance ToTypedContent PkgId where
toTypedContent = toTypedContent . toJSON toTypedContent = toTypedContent . toJSON
data VersionInfo = VersionInfo data VersionInfo = VersionInfo
{ versionInfoVersion :: Version { versionInfoVersion :: Version
, versionInfoReleaseNotes :: Text , versionInfoReleaseNotes :: Text
, versionInfoDependencies :: HM.HashMap AppIdentifier VersionRange , versionInfoDependencies :: HM.HashMap PkgId VersionRange
, versionInfoOsRequired :: VersionRange , versionInfoOsRequired :: VersionRange
, versionInfoOsRecommended :: VersionRange , versionInfoOsRecommended :: VersionRange
, versionInfoInstallAlert :: Maybe Text , versionInfoInstallAlert :: Maybe Text
@@ -111,7 +111,7 @@ instance ToJSON StoreApp where
, "version-info" .= storeAppVersionInfo , "version-info" .= storeAppVersionInfo
, "timestamp" .= storeAppTimestamp , "timestamp" .= storeAppTimestamp
] ]
newtype AppManifest = AppManifest { unAppManifest :: HM.HashMap AppIdentifier StoreApp} newtype AppManifest = AppManifest { unAppManifest :: HM.HashMap PkgId StoreApp}
deriving (Show) deriving (Show)
instance FromJSON AppManifest where instance FromJSON AppManifest where
@@ -186,7 +186,7 @@ instance FromJSON ServiceAlert where
"stop" -> pure STOP "stop" -> pure STOP
_ -> fail "unknown service alert type" _ -> fail "unknown service alert type"
data ServiceManifest = ServiceManifest data ServiceManifest = ServiceManifest
{ serviceManifestId :: !AppIdentifier { serviceManifestId :: !PkgId
, serviceManifestTitle :: !Text , serviceManifestTitle :: !Text
, serviceManifestVersion :: !Version , serviceManifestVersion :: !Version
, serviceManifestDescriptionLong :: !Text , serviceManifestDescriptionLong :: !Text
@@ -194,7 +194,7 @@ data ServiceManifest = ServiceManifest
, serviceManifestReleaseNotes :: !Text , serviceManifestReleaseNotes :: !Text
, serviceManifestIcon :: !(Maybe Text) , serviceManifestIcon :: !(Maybe Text)
, serviceManifestAlerts :: !(HM.HashMap ServiceAlert (Maybe Text)) , serviceManifestAlerts :: !(HM.HashMap ServiceAlert (Maybe Text))
, serviceManifestDependencies :: !(HM.HashMap AppIdentifier ServiceDependencyInfo) , serviceManifestDependencies :: !(HM.HashMap PkgId ServiceDependencyInfo)
} }
deriving Show deriving Show
instance FromJSON ServiceManifest where instance FromJSON ServiceManifest where

View File

@@ -10,19 +10,19 @@
module Model where module Model where
import Startlude
import Database.Persist.TH import Database.Persist.TH
import Lib.Types.Emver
import Lib.Types.Category
import Orphans.Emver ( )
import Lib.Types.AppIndex import Lib.Types.AppIndex
import Lib.Types.Category
import Lib.Types.Emver
import Orphans.Emver ( )
import Startlude
share [mkPersist sqlSettings, mkMigrate "migrateAll"] [persistLowerCase| share [mkPersist sqlSettings, mkMigrate "migrateAll"] [persistLowerCase|
SApp SApp
createdAt UTCTime createdAt UTCTime
updatedAt UTCTime Maybe updatedAt UTCTime Maybe
title Text title Text
appId AppIdentifier appId PkgId
descShort Text descShort Text
descLong Text descLong Text
iconType Text iconType Text

View File

@@ -34,7 +34,7 @@ getBestVersion rootDir ext spec = do
let best = getMax <$> foldMap (Just . Max . fst . unRegisteredAppVersion) satisfactory let best = getMax <$> foldMap (Just . Max . fst . unRegisteredAppVersion) satisfactory
pure best pure best
addPackageHeader :: (MonadUnliftIO m, MonadHandler m, KnownSymbol a) => FilePath -> FilePath -> Extension a -> m () addPackageHeader :: (MonadUnliftIO m, MonadHandler m) => FilePath -> FilePath -> S9PK -> m ()
addPackageHeader appMgrDir appDir appExt = do addPackageHeader appMgrDir appDir appExt = do
packageHash <- getPackageHash appMgrDir appDir appExt packageHash <- getPackageHash appMgrDir appDir appExt
addHeader "X-S9PK-HASH" $ decodeUtf8 packageHash addHeader "X-S9PK-HASH" $ decodeUtf8 packageHash