From 27465e280e92f97f03f2689b65cd33367452d5eb Mon Sep 17 00:00:00 2001
From: Przemek Kaminski <pk@intrepidus.pl>
Date: Wed, 5 Feb 2020 12:59:38 +0100
Subject: [PATCH] [Node] add "charts" in JSONField

This is to save charts in dashboard.
---
 src/Gargantext/Database/Types/Node.hs | 20 +++++++++++++++++---
 src/Gargantext/Database/Utils.hs      |  2 +-
 2 files changed, 18 insertions(+), 4 deletions(-)

diff --git a/src/Gargantext/Database/Types/Node.hs b/src/Gargantext/Database/Types/Node.hs
index e00e5cdc..918a5dc4 100644
--- a/src/Gargantext/Database/Types/Node.hs
+++ b/src/Gargantext/Database/Types/Node.hs
@@ -301,6 +301,18 @@ instance Hyperdata HyperdataUser
 ------------------------------------------------------------------------
 ------------------------------------------------------------------------
 ------------------------------------------------------------------------
+
+data Chart =
+    CDocsHistogram
+  | CAuthorsPie
+  | CInstitutesTree
+  | CTermsMetrics
+  deriving (Generic, Show, Eq)
+instance ToJSON Chart
+instance FromJSON Chart
+instance ToSchema Chart
+
+
 data CodeType = JSON | Markdown | Haskell
   deriving (Generic)
 instance ToJSON CodeType
@@ -313,6 +325,7 @@ data CorpusField = MarkdownField { _cf_text :: !Text }
                               , _cf_desc  :: !Text
                               , _cf_query :: !Text
                               , _cf_authors :: !Text
+                              , _cf_charts :: ![Chart]
                               -- , _cf_resources :: ![Resource]
                               } 
                   | HaskellField { _cf_haskell :: !Text }
@@ -361,9 +374,10 @@ corpusExample :: ByteString
 corpusExample = "" -- TODO
 
 defaultCorpus :: HyperdataCorpus
-defaultCorpus = HyperdataCorpus [ HyperdataField JSON "Mandatory fields" (JsonField "Title" "Descr" "Bool query" "Authors")
-                                , HyperdataField Markdown "Optional Text" (MarkdownField "# title\n## subtitle")
-                                ]
+defaultCorpus = HyperdataCorpus [
+    HyperdataField JSON "Mandatory fields" (JsonField "Title" "Descr" "Bool query" "Authors" [])
+  , HyperdataField Markdown "Optional Text" (MarkdownField "# title\n## subtitle")
+  ]
 
 hyperdataCorpus :: HyperdataCorpus
 hyperdataCorpus = case decode corpusExample of
diff --git a/src/Gargantext/Database/Utils.hs b/src/Gargantext/Database/Utils.hs
index 76bb1dd0..aba379c0 100644
--- a/src/Gargantext/Database/Utils.hs
+++ b/src/Gargantext/Database/Utils.hs
@@ -144,7 +144,7 @@ fromField' field mb = do
       where
           valueToHyperdata v = case fromJSON v of
              Success a  -> pure a
-             Error _err -> returnError ConversionFailed field "cannot parse hyperdata"
+             Error _err -> returnError ConversionFailed field $ DL.intercalate " " ["cannot parse hyperdata for JSON: ", show v]
 
 printSqlOpa :: Default Unpackspec a a => Query a -> IO ()
 printSqlOpa = putStrLn . maybe "Empty query" identity . showSqlForPostgres
-- 
2.21.0