Commit 5a06a5d2 authored by Alfredo Di Napoli's avatar Alfredo Di Napoli

Revert "defaultHyperdata returns a Maybe"

This reverts commit a4e5b84d.
parent 797301a0
...@@ -143,8 +143,6 @@ nodeErrorToFrontendError ne = case ne of ...@@ -143,8 +143,6 @@ nodeErrorToFrontendError ne = case ne of
-> mkFrontendErrShow $ FE_node_creation_failed_insert_node uId pId -> mkFrontendErrShow $ FE_node_creation_failed_insert_node uId pId
UserHasNegativeId uid UserHasNegativeId uid
-> mkFrontendErrShow $ FE_node_creation_failed_user_negative_id uid -> mkFrontendErrShow $ FE_node_creation_failed_user_negative_id uid
NodeHasNoDefaultValue nt
-> mkFrontendErrShow $ FE_node_creation_failed_no_default_value nt
NodeLookupFailed reason NodeLookupFailed reason
-> case reason of -> case reason of
NodeDoesNotExist nid NodeDoesNotExist nid
......
...@@ -209,10 +209,6 @@ newtype instance ToFrontendErrorData 'EC_400__node_creation_failed_user_negative ...@@ -209,10 +209,6 @@ newtype instance ToFrontendErrorData 'EC_400__node_creation_failed_user_negative
FE_node_creation_failed_user_negative_id { neuni_user_id :: UserId } FE_node_creation_failed_user_negative_id { neuni_user_id :: UserId }
deriving (Show, Eq, Generic) deriving (Show, Eq, Generic)
newtype instance ToFrontendErrorData 'EC_400__node_creation_failed_no_default_value =
FE_node_creation_failed_no_default_value { ncfdv_nodetype :: NodeType }
deriving (Show, Eq, Generic)
data instance ToFrontendErrorData 'EC_400__node_lookup_failed_user_too_many_roots = data instance ToFrontendErrorData 'EC_400__node_lookup_failed_user_too_many_roots =
FE_node_lookup_failed_user_too_many_roots { netmr_user_id :: UserId FE_node_lookup_failed_user_too_many_roots { netmr_user_id :: UserId
, netmr_roots :: [NodeId] , netmr_roots :: [NodeId]
...@@ -436,14 +432,6 @@ instance FromJSON (ToFrontendErrorData 'EC_400__node_creation_failed_insert_node ...@@ -436,14 +432,6 @@ instance FromJSON (ToFrontendErrorData 'EC_400__node_creation_failed_insert_node
necin_parent_id <- o .: "parent_id" necin_parent_id <- o .: "parent_id"
pure FE_node_creation_failed_insert_node{..} pure FE_node_creation_failed_insert_node{..}
instance ToJSON (ToFrontendErrorData 'EC_400__node_creation_failed_no_default_value) where
toJSON FE_node_creation_failed_no_default_value{..} =
object [ "nodetype" .= toJSON ncfdv_nodetype ]
instance FromJSON (ToFrontendErrorData 'EC_400__node_creation_failed_no_default_value) where
parseJSON = withObject "FE_node_creation_failed_no_default_value" $ \o -> do
ncfdv_nodetype <- o .: "nodetype"
pure FE_node_creation_failed_no_default_value{..}
instance ToJSON (ToFrontendErrorData 'EC_500__node_generic_exception) where instance ToJSON (ToFrontendErrorData 'EC_500__node_generic_exception) where
toJSON FE_node_generic_exception{..} = toJSON FE_node_generic_exception{..} =
object [ "error" .= nege_error ] object [ "error" .= nege_error ]
...@@ -646,9 +634,6 @@ instance FromJSON FrontendError where ...@@ -646,9 +634,6 @@ instance FromJSON FrontendError where
EC_400__node_creation_failed_user_negative_id -> do EC_400__node_creation_failed_user_negative_id -> do
(fe_data :: ToFrontendErrorData 'EC_400__node_creation_failed_user_negative_id) <- o .: "data" (fe_data :: ToFrontendErrorData 'EC_400__node_creation_failed_user_negative_id) <- o .: "data"
pure FrontendError{..} pure FrontendError{..}
EC_400__node_creation_failed_no_default_value -> do
(fe_data :: ToFrontendErrorData 'EC_400__node_creation_failed_no_default_value) <- o .: "data"
pure FrontendError{..}
EC_500__node_generic_exception -> do EC_500__node_generic_exception -> do
(fe_data :: ToFrontendErrorData 'EC_500__node_generic_exception) <- o .: "data" (fe_data :: ToFrontendErrorData 'EC_500__node_generic_exception) <- o .: "data"
pure FrontendError{..} pure FrontendError{..}
......
...@@ -30,7 +30,6 @@ data BackendErrorCode ...@@ -30,7 +30,6 @@ data BackendErrorCode
| EC_400__node_creation_failed_parent_exists | EC_400__node_creation_failed_parent_exists
| EC_400__node_creation_failed_insert_node | EC_400__node_creation_failed_insert_node
| EC_400__node_creation_failed_user_negative_id | EC_400__node_creation_failed_user_negative_id
| EC_400__node_creation_failed_no_default_value
| EC_500__node_generic_exception | EC_500__node_generic_exception
| EC_400__node_needs_configuration | EC_400__node_needs_configuration
-- validation errors -- validation errors
......
...@@ -28,7 +28,7 @@ data HyperdataCorpus = ...@@ -28,7 +28,7 @@ data HyperdataCorpus =
-- 'defaultLanguage' if we don't know which language it is. -- 'defaultLanguage' if we don't know which language it is.
, _hc_lang :: Maybe Lang , _hc_lang :: Maybe Lang
} }
deriving (Generic, Eq, Show) deriving (Generic, Show)
defaultHyperdataCorpus :: HyperdataCorpus defaultHyperdataCorpus :: HyperdataCorpus
defaultHyperdataCorpus = defaultHyperdataCorpus =
......
...@@ -34,7 +34,7 @@ data CorpusField = MarkdownField { _cf_text :: !Text } ...@@ -34,7 +34,7 @@ data CorpusField = MarkdownField { _cf_text :: !Text }
, _cf_authors :: !Text , _cf_authors :: !Text
-- , _cf_resources :: ![Resource] -- , _cf_resources :: ![Resource]
} }
deriving (Show, Eq, Generic) deriving (Show, Generic)
defaultCorpusField :: CorpusField defaultCorpusField :: CorpusField
defaultCorpusField = MarkdownField "# Title" defaultCorpusField = MarkdownField "# Title"
...@@ -56,7 +56,7 @@ data HyperdataField a = ...@@ -56,7 +56,7 @@ data HyperdataField a =
HyperdataField { _hf_type :: !CodeType HyperdataField { _hf_type :: !CodeType
, _hf_name :: !Text , _hf_name :: !Text
, _hf_data :: !a , _hf_data :: !a
} deriving (Generic, Eq, Show) } deriving (Generic, Show)
defaultHyperdataField :: HyperdataField CorpusField defaultHyperdataField :: HyperdataField CorpusField
defaultHyperdataField = HyperdataField Markdown "name" defaultCorpusField defaultHyperdataField = HyperdataField Markdown "name" defaultCorpusField
......
...@@ -14,7 +14,6 @@ Portability : POSIX ...@@ -14,7 +14,6 @@ Portability : POSIX
module Gargantext.Database.Admin.Types.Hyperdata.Default module Gargantext.Database.Admin.Types.Hyperdata.Default
where where
import Prelude
import Gargantext.Database.Admin.Types.Node (NodeType(..)) import Gargantext.Database.Admin.Types.Node (NodeType(..))
import Gargantext.Database.Admin.Types.Hyperdata import Gargantext.Database.Admin.Types.Hyperdata
import Gargantext.Database.Admin.Types.Hyperdata.Prelude import Gargantext.Database.Admin.Types.Hyperdata.Prelude
...@@ -50,6 +49,7 @@ data DefaultHyperdata = ...@@ -50,6 +49,7 @@ data DefaultHyperdata =
| DefaultFrameCode HyperdataFrame | DefaultFrameCode HyperdataFrame
| DefaultFile HyperdataFile | DefaultFile HyperdataFile
| DefaultReadOnly HyperdataReadOnly
instance Hyperdata DefaultHyperdata instance Hyperdata DefaultHyperdata
...@@ -83,38 +83,37 @@ instance ToJSON DefaultHyperdata where ...@@ -83,38 +83,37 @@ instance ToJSON DefaultHyperdata where
toJSON (DefaultFrameCode x) = toJSON x toJSON (DefaultFrameCode x) = toJSON x
toJSON (DefaultFile x) = toJSON x toJSON (DefaultFile x) = toJSON x
toJSON (DefaultReadOnly x) = toJSON x
-- | Gets the default value for the hyperdata given the input 'NodeType'. Note that not
-- all the hyperdata type have a default. In particular, \"combinators\" type like the defaultHyperdata :: NodeType -> DefaultHyperdata
-- \"NodeReadOnly\" do not have a default. defaultHyperdata NodeUser = DefaultUser defaultHyperdataUser
defaultHyperdata :: NodeType -> Maybe DefaultHyperdata defaultHyperdata NodeContact = DefaultContact defaultHyperdataContact
defaultHyperdata NodeUser = Just $ DefaultUser defaultHyperdataUser
defaultHyperdata NodeContact = Just $ DefaultContact defaultHyperdataContact defaultHyperdata NodeCorpus = DefaultCorpus defaultHyperdataCorpus
defaultHyperdata NodeCorpusV3 = DefaultCorpusV3 defaultHyperdataCorpus
defaultHyperdata NodeCorpus = Just $ DefaultCorpus defaultHyperdataCorpus defaultHyperdata NodeAnnuaire = DefaultAnnuaire defaultHyperdataAnnuaire
defaultHyperdata NodeCorpusV3 = Just $ DefaultCorpusV3 defaultHyperdataCorpus
defaultHyperdata NodeAnnuaire = Just $ DefaultAnnuaire defaultHyperdataAnnuaire defaultHyperdata NodeDocument = DefaultDocument defaultHyperdataDocument
defaultHyperdata NodeTexts = DefaultTexts defaultHyperdataTexts
defaultHyperdata NodeDocument = Just $ DefaultDocument defaultHyperdataDocument defaultHyperdata NodeList = DefaultList defaultHyperdataList
defaultHyperdata NodeTexts = Just $ DefaultTexts defaultHyperdataTexts defaultHyperdata NodeListCooc = DefaultListCooc defaultHyperdataListCooc
defaultHyperdata NodeList = Just $ DefaultList defaultHyperdataList defaultHyperdata NodeModel = DefaultModel defaultHyperdataModel
defaultHyperdata NodeListCooc = Just $ DefaultListCooc defaultHyperdataListCooc
defaultHyperdata NodeModel = Just $ DefaultModel defaultHyperdataModel defaultHyperdata NodeFolder = DefaultFolder defaultHyperdataFolder
defaultHyperdata NodeFolderPrivate = DefaultFolderPrivate defaultHyperdataFolderPrivate
defaultHyperdata NodeFolder = Just $ DefaultFolder defaultHyperdataFolder defaultHyperdata NodeFolderShared = DefaultFolderShared defaultHyperdataFolderShared
defaultHyperdata NodeFolderPrivate = Just $ DefaultFolderPrivate defaultHyperdataFolderPrivate defaultHyperdata NodeTeam = DefaultTeam defaultHyperdataFolder
defaultHyperdata NodeFolderShared = Just $ DefaultFolderShared defaultHyperdataFolderShared defaultHyperdata NodeFolderPublic = DefaultFolderPublic defaultHyperdataFolderPublic
defaultHyperdata NodeTeam = Just $ DefaultTeam defaultHyperdataFolder
defaultHyperdata NodeFolderPublic = Just $ DefaultFolderPublic defaultHyperdataFolderPublic defaultHyperdata NodeGraph = DefaultGraph defaultHyperdataGraph
defaultHyperdata NodePhylo = DefaultPhylo defaultHyperdataPhylo
defaultHyperdata NodeGraph = Just $ DefaultGraph defaultHyperdataGraph defaultHyperdata NodeDashboard = DefaultDashboard defaultHyperdataDashboard
defaultHyperdata NodePhylo = Just $ DefaultPhylo defaultHyperdataPhylo
defaultHyperdata NodeDashboard = Just $ DefaultDashboard defaultHyperdataDashboard defaultHyperdata Notes = DefaultFrameWrite defaultHyperdataFrame
defaultHyperdata Calc = DefaultFrameCalc defaultHyperdataFrame
defaultHyperdata Notes = Just $ DefaultFrameWrite defaultHyperdataFrame defaultHyperdata NodeFrameVisio = DefaultFrameVisio defaultHyperdataFrame
defaultHyperdata Calc = Just $ DefaultFrameCalc defaultHyperdataFrame defaultHyperdata NodeFrameNotebook = DefaultFrameCalc defaultHyperdataFrame
defaultHyperdata NodeFrameVisio = Just $ DefaultFrameVisio defaultHyperdataFrame
defaultHyperdata NodeFrameNotebook = Just $ DefaultFrameCalc defaultHyperdataFrame defaultHyperdata NodeFile = DefaultFile defaultHyperdataFile
defaultHyperdata NodeReadOnly = DefaultReadOnly defaultHyperdataReadOnly
defaultHyperdata NodeFile = Just $ DefaultFile defaultHyperdataFile
defaultHyperdata NodeReadOnly = Nothing
{-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE TemplateHaskell #-}
module Gargantext.Database.Admin.Types.Hyperdata.ReadOnly ( module Gargantext.Database.Admin.Types.Hyperdata.ReadOnly (
HyperdataReadOnly(..) HyperdataReadOnly(..)
, defaultHyperdataReadOnly
) where ) where
import Data.Aeson.TH import Data.Aeson.TH
import Prelude import Prelude
import GHC.Generics import GHC.Generics
import Gargantext.Database.Admin.Types.Hyperdata.Any
import Gargantext.Core.Utils.Prefix (unPrefix) import Gargantext.Core.Utils.Prefix (unPrefix)
import Test.QuickCheck import Test.QuickCheck
import Gargantext.Database.Admin.Types.Node (NodeType)
data HyperdataReadOnly wrapped = data HyperdataReadOnly =
HyperdataReadOnly { _hro_wrapped_type :: NodeType HyperdataReadOnly { _hro_wrapped :: Maybe HyperdataAny }
, _hro_wrapped :: Maybe wrapped
}
deriving (Generic, Show, Eq) deriving (Generic, Show, Eq)
defaultHyperdataReadOnly :: HyperdataReadOnly
defaultHyperdataReadOnly =
HyperdataReadOnly
{ _hro_wrapped = Nothing
}
-- --
-- Instances -- Instances
-- --
$(deriveJSON (unPrefix "_hro_") ''HyperdataReadOnly) $(deriveJSON (unPrefix "_hro_") ''HyperdataReadOnly)
-- | NOTE(adn) This is not a sound instance, as there is no guarantee the instance Arbitrary HyperdataReadOnly where
-- inner type will be one of the wrapped node types, as well as that the arbitrary = HyperdataReadOnly <$> arbitrary
-- 'NodeType' will match the inner wrapped value.
instance Arbitrary wrapped => Arbitrary (HyperdataReadOnly wrapped) where
arbitrary = HyperdataReadOnly <$> arbitrary <*> arbitrary
...@@ -306,31 +306,19 @@ insertDefaultNodeIfNotExists nt p u = do ...@@ -306,31 +306,19 @@ insertDefaultNodeIfNotExists nt p u = do
xs -> pure xs xs -> pure xs
insertNode :: (HasDBid NodeType, HasNodeError err) insertNode :: (HasDBid NodeType, HasNodeError err)
=> NodeType => NodeType -> Maybe Name -> Maybe DefaultHyperdata -> ParentId -> UserId -> DBCmd err NodeId
-> Maybe Name insertNode nt n h p u = do
-> Maybe DefaultHyperdata res <- insertNodesR [nodeW nt n h p u]
-> ParentId case res of
-> UserId [x] -> pure x
-> DBCmd err NodeId _ -> nodeError $ NodeCreationFailed $ InsertNodeFailed u p
insertNode nt mb_n mb_h p u = do
case mb_h <|> defaultHyperdata nt of
Nothing -> nodeError $ NodeCreationFailed $ NodeHasNoDefaultValue nt
Just h -> do
res <- insertNodesR [nodeW nt n h p u]
case res of
[x] -> pure x
_ -> nodeError $ NodeCreationFailed $ InsertNodeFailed u p
where
n = fromMaybe (defaultName nt) mb_n
nodeW :: HasDBid NodeType nodeW :: HasDBid NodeType
=> NodeType => NodeType -> Maybe Name -> Maybe DefaultHyperdata -> ParentId -> UserId -> NodeWrite
-> Name nodeW nt n h p u = node nt n' h' (Just p) u
-> DefaultHyperdata where
-> ParentId n' = fromMaybe (defaultName nt) n
-> UserId h' = maybe (defaultHyperdata nt) identity h
-> NodeWrite
nodeW nt n h p u = node nt n h (Just p) u
------------------------------------------------------------------------ ------------------------------------------------------------------------
node :: (ToJSON a, Hyperdata a, HasDBid NodeType) node :: (ToJSON a, Hyperdata a, HasDBid NodeType)
......
...@@ -30,7 +30,6 @@ import Control.Lens (Prism', (#), (^?)) ...@@ -30,7 +30,6 @@ import Control.Lens (Prism', (#), (^?))
import Data.Aeson (object) import Data.Aeson (object)
import Data.Text qualified as T import Data.Text qualified as T
import Gargantext.Core.Types.Individu ( Username ) import Gargantext.Core.Types.Individu ( Username )
import Gargantext.Core.Types (NodeType)
import Gargantext.Database.Admin.Types.Node (ListId, NodeId(..), ContextId, UserId, ParentId) import Gargantext.Database.Admin.Types.Node (ListId, NodeId(..), ContextId, UserId, ParentId)
import Gargantext.Prelude hiding (sum, head) import Gargantext.Prelude hiding (sum, head)
import Prelude hiding (null, id, map, sum, show) import Prelude hiding (null, id, map, sum, show)
...@@ -41,7 +40,6 @@ data NodeCreationError ...@@ -41,7 +40,6 @@ data NodeCreationError
| UserParentDoesNotExist UserId | UserParentDoesNotExist UserId
| UserHasNegativeId UserId | UserHasNegativeId UserId
| InsertNodeFailed UserId ParentId | InsertNodeFailed UserId ParentId
| NodeHasNoDefaultValue NodeType
deriving (Show, Eq, Generic) deriving (Show, Eq, Generic)
instance ToJSON NodeCreationError instance ToJSON NodeCreationError
...@@ -52,7 +50,6 @@ renderNodeCreationFailed = \case ...@@ -52,7 +50,6 @@ renderNodeCreationFailed = \case
UserParentDoesNotExist uid -> "user id " <> T.pack (show uid) <> " has no parent" UserParentDoesNotExist uid -> "user id " <> T.pack (show uid) <> " has no parent"
UserHasNegativeId uid -> "user id " <> T.pack (show uid) <> " is a negative id." UserHasNegativeId uid -> "user id " <> T.pack (show uid) <> " is a negative id."
InsertNodeFailed uid pid -> "couldn't create the list for user id " <> T.pack (show uid) <> " and parent id " <> T.pack (show pid) InsertNodeFailed uid pid -> "couldn't create the list for user id " <> T.pack (show uid) <> " and parent id " <> T.pack (show pid)
NodeHasNoDefaultValue nt -> T.pack $ "node of type " <> show nt <> " could not be given a sensible default value."
data NodeLookupError data NodeLookupError
= NodeDoesNotExist NodeId = NodeDoesNotExist NodeId
......
...@@ -16,6 +16,7 @@ module Test.Instances ...@@ -16,6 +16,7 @@ module Test.Instances
where where
import Data.List.NonEmpty qualified as NE import Data.List.NonEmpty qualified as NE
import Data.Map.Strict qualified as Map
import Data.Map.Strict.Patch qualified as PM import Data.Map.Strict.Patch qualified as PM
import Data.Patch.Class (Replace(Keep), replace) import Data.Patch.Class (Replace(Keep), replace)
import Data.Text qualified as T import Data.Text qualified as T
...@@ -27,8 +28,10 @@ import Gargantext.API.Node.Corpus.New (ApiInfo(..)) ...@@ -27,8 +28,10 @@ import Gargantext.API.Node.Corpus.New (ApiInfo(..))
import Gargantext.API.Node.Types (RenameNode(..), WithQuery(..)) import Gargantext.API.Node.Types (RenameNode(..), WithQuery(..))
import Gargantext.Core.AsyncUpdates.CentralExchange.Types qualified as CET import Gargantext.Core.AsyncUpdates.CentralExchange.Types qualified as CET
import Gargantext.Core.AsyncUpdates.Dispatcher.Types qualified as DET import Gargantext.Core.AsyncUpdates.Dispatcher.Types qualified as DET
import Gargantext.Core.NodeStory.Types qualified as NS
import Gargantext.Core.Text.Ngrams (NgramsType(..))
import Gargantext.Core.Types.Main (ListType(CandidateTerm, StopTerm, MapTerm)) import Gargantext.Core.Types.Main (ListType(CandidateTerm, StopTerm, MapTerm))
import Gargantext.Database.Admin.Types.Node (UserId(UnsafeMkUserId), NodeType(..)) import Gargantext.Database.Admin.Types.Node (UserId(UnsafeMkUserId))
import Gargantext.Database.Admin.Types.Hyperdata qualified as Hyperdata import Gargantext.Database.Admin.Types.Hyperdata qualified as Hyperdata
import Gargantext.Prelude hiding (replace, Location) import Gargantext.Prelude hiding (replace, Location)
import Servant.Job.Core qualified as SJ import Servant.Job.Core qualified as SJ
...@@ -279,8 +282,6 @@ genFrontendErr be = do ...@@ -279,8 +282,6 @@ genFrontendErr be = do
pure $ Errors.mkFrontendErr' txt $ Errors.FE_node_creation_failed_insert_node parentId userId pure $ Errors.mkFrontendErr' txt $ Errors.FE_node_creation_failed_insert_node parentId userId
Errors.EC_400__node_creation_failed_user_negative_id Errors.EC_400__node_creation_failed_user_negative_id
-> pure $ Errors.mkFrontendErr' txt (Errors.FE_node_creation_failed_user_negative_id (UnsafeMkUserId (-42))) -> pure $ Errors.mkFrontendErr' txt (Errors.FE_node_creation_failed_user_negative_id (UnsafeMkUserId (-42)))
Errors.EC_400__node_creation_failed_no_default_value
-> pure $ Errors.mkFrontendErr' txt (Errors.FE_node_creation_failed_no_default_value NodeReadOnly)
Errors.EC_500__node_generic_exception Errors.EC_500__node_generic_exception
-> do err <- arbitrary -> do err <- arbitrary
pure $ Errors.mkFrontendErr' txt $ Errors.FE_node_generic_exception err pure $ Errors.mkFrontendErr' txt $ Errors.FE_node_generic_exception err
......
...@@ -64,7 +64,7 @@ tests = testGroup "JSON" [ ...@@ -64,7 +64,7 @@ tests = testGroup "JSON" [
, testProperty "ObjectData" (jsonRoundtrip @ObjectData) , testProperty "ObjectData" (jsonRoundtrip @ObjectData)
, testProperty "PhyloData" (jsonRoundtrip @PhyloData) , testProperty "PhyloData" (jsonRoundtrip @PhyloData)
, testProperty "LayerData" (jsonRoundtrip @LayerData) , testProperty "LayerData" (jsonRoundtrip @LayerData)
, testProperty "HyperdataReadOnly HyperdataCorpus" (jsonRoundtrip @(HyperdataReadOnly HyperdataCorpus)) , testProperty "HyperdataReadOnly" (jsonRoundtrip @HyperdataReadOnly)
, testCase "can parse bpa_phylo_test.json" testParseBpaPhylo , testCase "can parse bpa_phylo_test.json" testParseBpaPhylo
, testCase "can parse open_science.json" testOpenSciencePhylo , testCase "can parse open_science.json" testOpenSciencePhylo
] ]
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment