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
/eos/latest EosR GET -- get eos information
/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/icon/#AppIdentifier IconsR GET -- get icons - can specify version with ?spec=<emver>
/package/license/#AppIdentifier LicenseR GET -- get icons - can specify version with ?spec=<emver>
/package/instructions/#AppIdentifier InstructionsR GET -- get icons - can specify version with ?spec=<emver>
/package/icon/#PkgId IconsR GET -- get icons - can specify version with ?spec=<emver>
/package/license/#PkgId LicenseR 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
/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
!/sys/#SYS_EXTENSIONLESS SysR GET -- get most recent sys app -- ?spec={semver-spec}
/version VersionR GET

View File

@@ -4,20 +4,20 @@
module Database.Queries where
import Startlude
import Database.Persist.Sql
import Lib.Types.AppIndex
import Lib.Types.Emver
import Model
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] []
fetchAppVersion :: MonadIO m => Version -> Key SApp -> ReaderT SqlBackend m (Maybe (Entity SVersion))
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
time <- liftIO getCurrentTime
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
getApp sysResourceDir e
getAppManifestR :: AppIdentifier -> Handler TypedContent
getAppManifestR :: PkgId -> Handler TypedContent
getAppManifestR appId = do
(appsDir, appMgrDir) <- getsYesod $ ((</> "apps") . resourcesDir &&& staticBinDir) . appSettings
av <- getVersionFromQuery appsDir appExt >>= \case
@@ -84,7 +84,7 @@ getAppManifestR appId = do
(\bsSource -> respondSource "application/json" (bsSource .| awaitForever sendChunkBS))
where appExt = Extension (show appId) :: Extension "s9pk"
getAppConfigR :: AppIdentifier -> Handler TypedContent
getAppConfigR :: PkgId -> Handler TypedContent
getAppConfigR appId = do
appSettings <- appSettings <$> getYesod
let appsDir = (</> "apps") . resourcesDir $ appSettings
@@ -146,7 +146,7 @@ chunkIt fp = do
recordMetrics :: String -> Version -> HandlerFor RegistryCtx ()
recordMetrics appId appVersion = do
let appId' = T.pack appId
sa <- runDB $ fetchApp $ AppIdentifier appId'
sa <- runDB $ fetchApp $ PkgId appId'
case sa of
Nothing -> do
$logError $ appId' <> " not found in database"

View File

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

View File

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

View File

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

View File

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

View File

@@ -34,7 +34,7 @@ getBestVersion rootDir ext spec = do
let best = getMax <$> foldMap (Just . Max . fst . unRegisteredAppVersion) satisfactory
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
packageHash <- getPackageHash appMgrDir appDir appExt
addHeader "X-S9PK-HASH" $ decodeUtf8 packageHash