From 66e19a727e6304a011a18ccdf58b0b54b2a9b023 Mon Sep 17 00:00:00 2001 From: Keagan McClelland Date: Mon, 27 Sep 2021 11:33:11 -0600 Subject: [PATCH] rename AppIdentifier to PkgId to save typing and reflect new name terminology --- config/routes | 10 +++---- src/Database/Queries.hs | 6 ++-- src/Handler/Apps.hs | 6 ++-- src/Handler/Icons.hs | 6 ++-- src/Handler/Marketplace.hs | 37 ++++++++++++----------- src/Lib/Types/AppIndex.hs | 60 +++++++++++++++++++------------------- src/Model.hs | 8 ++--- src/Util/Shared.hs | 2 +- 8 files changed, 67 insertions(+), 68 deletions(-) diff --git a/config/routes b/config/routes index c3d7c57..f5f4058 100644 --- a/config/routes +++ b/config/routes @@ -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= -/package/icon/#AppIdentifier IconsR GET -- get icons - can specify version with ?spec= -/package/license/#AppIdentifier LicenseR GET -- get icons - can specify version with ?spec= -/package/instructions/#AppIdentifier InstructionsR GET -- get icons - can specify version with ?spec= +/package/icon/#PkgId IconsR GET -- get icons - can specify version with ?spec= +/package/license/#PkgId LicenseR GET -- get icons - can specify version with ?spec= +/package/instructions/#PkgId InstructionsR GET -- get icons - can specify version with ?spec= -- 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 diff --git a/src/Database/Queries.hs b/src/Database/Queries.hs index 5fbf2e2..a2decd5 100644 --- a/src/Database/Queries.hs +++ b/src/Database/Queries.hs @@ -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 diff --git a/src/Handler/Apps.hs b/src/Handler/Apps.hs index a4e5c4e..91f8701 100644 --- a/src/Handler/Apps.hs +++ b/src/Handler/Apps.hs @@ -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" diff --git a/src/Handler/Icons.hs b/src/Handler/Icons.hs index fabdb92..5fed13b 100644 --- a/src/Handler/Icons.hs +++ b/src/Handler/Icons.hs @@ -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 diff --git a/src/Handler/Marketplace.hs b/src/Handler/Marketplace.hs index 47c838a..0c2c305 100644 --- a/src/Handler/Marketplace.hs +++ b/src/Handler/Marketplace.hs @@ -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) <- diff --git a/src/Lib/Types/AppIndex.hs b/src/Lib/Types/AppIndex.hs index 9b42595..a6d23d4 100644 --- a/src/Lib/Types/AppIndex.hs +++ b/src/Lib/Types/AppIndex.hs @@ -28,42 +28,42 @@ import Orphans.Emver ( ) import System.Directory import Yesod -newtype AppIdentifier = AppIdentifier { unAppIdentifier :: 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 +newtype PkgId = PkgId { unPkgId :: Text } + deriving (Eq) +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 diff --git a/src/Model.hs b/src/Model.hs index b2dacd9..1527183 100644 --- a/src/Model.hs +++ b/src/Model.hs @@ -10,19 +10,19 @@ module Model where -import Startlude import Database.Persist.TH -import Lib.Types.Emver +import Lib.Types.AppIndex import Lib.Types.Category +import Lib.Types.Emver import Orphans.Emver ( ) -import Lib.Types.AppIndex +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 diff --git a/src/Util/Shared.hs b/src/Util/Shared.hs index 7788608..4eb3c41 100644 --- a/src/Util/Shared.hs +++ b/src/Util/Shared.hs @@ -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