]> Git — Sourcephile - gargantext.git/blob - src/Gargantext/API/Node/Update.hs
[FIX BUG Swagger] TODO : remove type homonymes
[gargantext.git] / src / Gargantext / API / Node / Update.hs
1 {-|
2 Module : Gargantext.API.Node.Update
3 Description :
4 Copyright : (c) CNRS, 2017-Present
5 License : AGPL + CECILL v3
6 Maintainer : team@gargantext.org
7 Stability : experimental
8 Portability : POSIX
9
10 -}
11
12 {-# LANGUAGE TemplateHaskell #-}
13 {-# LANGUAGE TypeOperators #-}
14 {-# OPTIONS_GHC -fno-warn-orphans #-}
15
16 module Gargantext.API.Node.Update
17 where
18
19 import Prelude (Enum, Bounded, minBound, maxBound)
20 import Data.Aeson
21 import Data.Swagger
22 import GHC.Generics (Generic)
23 import Gargantext.Database.Admin.Types.Node
24 import Gargantext.Database.Prelude
25 import Gargantext.Database.Query.Table.Node.Error (HasNodeError(..))
26 import Gargantext.Prelude
27 import Servant
28 import Test.QuickCheck (elements)
29 import Test.QuickCheck.Arbitrary
30
31 ------------------------------------------------------------------------
32 data UpdateNodeParams = UpdateNodeParamsList { methodList :: Method }
33 | UpdateNodeParamsGraph { methodGraph :: GraphMetric }
34 | UpdateNodeParamsTexts { methodTexts :: Granularity }
35 | UpdateNodeParamsBoard { methodBoard :: Charts }
36 deriving (Generic)
37
38 ----------------------------------------------------------------------
39 data Method = Basic | Advanced | WithModel
40 deriving (Generic, Eq, Ord, Enum, Bounded)
41
42 ----------------------------------------------------------------------
43 data GraphMetric = Order1 | Order2
44 deriving (Generic, Eq, Ord, Enum, Bounded)
45
46 ----------------------------------------------------------------------
47 data Granularity = NewNgrams | NewTexts | Both
48 deriving (Generic, Eq, Ord, Enum, Bounded)
49
50 ----------------------------------------------------------------------
51 data Charts = Sources | Authors | Institutes | Ngrams | All
52 deriving (Generic, Eq, Ord, Enum, Bounded)
53
54 ------------------------------------------------------------------------
55 -- TODO unPrefix "pn_" FromJSON, ToJSON, ToSchema, adapt frontend.
56 instance FromJSON UpdateNodeParams
57 instance ToJSON UpdateNodeParams
58 instance ToSchema UpdateNodeParams
59 instance Arbitrary UpdateNodeParams where
60 arbitrary = do
61 l <- UpdateNodeParamsList <$> arbitrary
62 g <- UpdateNodeParamsGraph <$> arbitrary
63 t <- UpdateNodeParamsTexts <$> arbitrary
64 b <- UpdateNodeParamsBoard <$> arbitrary
65 elements [l,g,t,b]
66
67 instance FromJSON Method
68 instance ToJSON Method
69 instance ToSchema Method
70 instance Arbitrary Method where
71 arbitrary = elements [ minBound .. maxBound ]
72
73 instance FromJSON GraphMetric
74 instance ToJSON GraphMetric
75 instance ToSchema GraphMetric
76 instance Arbitrary GraphMetric where
77 arbitrary = elements [ minBound .. maxBound ]
78
79 instance FromJSON Granularity
80 instance ToJSON Granularity
81 instance ToSchema Granularity
82 instance Arbitrary Granularity where
83 arbitrary = elements [ minBound .. maxBound ]
84
85 instance FromJSON Charts
86 instance ToJSON Charts
87 instance ToSchema Charts
88 instance Arbitrary Charts where
89 arbitrary = elements [ minBound .. maxBound ]
90
91 ------------------------------------------------------------------------
92 api :: HasNodeError err
93 => NodeId
94 -> UpdateNodeParams
95 -> Cmd err Int
96 api _nId (UpdateNodeParamsList _meth) = pure 1
97 api _nId (UpdateNodeParamsGraph _meth) = pure 1
98 api _nId (UpdateNodeParamsTexts _meth) = pure 1
99 api _nId (UpdateNodeParamsBoard _meth) = pure 1
100
101 ------------------------------------------------------------------------
102 type API = Summary " Share Node with username"
103 :> ReqBody '[JSON] UpdateNodeParams
104 :> Post '[JSON] Int