]> Git — Sourcephile - gargantext.git/blob - src/Gargantext/API/Count.hs
[MOCK] More credible count.
[gargantext.git] / src / Gargantext / API / Count.hs
1 {-|
2 Module : Gargantext.API.Count
3 Description : Server API
4 Copyright : (c) CNRS, 2017-Present
5 License : AGPL + CECILL v3
6 Maintainer : team@gargantext.org
7 Stability : experimental
8 Portability : POSIX
9
10 Count API part of Gargantext.
11 -}
12
13 {-# OPTIONS_GHC -fno-warn-name-shadowing #-}
14 {-# LANGUAGE DataKinds #-}
15 {-# LANGUAGE TemplateHaskell #-}
16 {-# LANGUAGE TypeOperators #-}
17 {-# LANGUAGE DeriveGeneric #-}
18 {-# LANGUAGE DeriveAnyClass #-}
19
20 module Gargantext.API.Count
21 where
22
23 import Gargantext.Prelude
24
25 import Prelude (Bounded, Enum, minBound, maxBound)
26 import Data.Eq (Eq())
27 import Data.Text (Text, pack)
28 import Servant
29 import GHC.Generics (Generic)
30 import Data.Aeson hiding (Error)
31 import Test.QuickCheck.Arbitrary
32 import Test.QuickCheck (elements)
33 import Data.List (repeat,permutations)
34 -----------------------------------------------------------------------
35 type CountAPI = Post '[JSON] Counts
36
37 -----------------------------------------------------------------------
38 data Scraper = Pubmed | Hal | IsTex | Isidore
39 deriving (Eq, Show, Generic, Enum, Bounded)
40
41 scrapers :: [Scraper]
42 scrapers = [minBound..maxBound]
43
44 instance FromJSON Scraper
45 instance ToJSON Scraper
46
47 instance Arbitrary Scraper where
48 arbitrary = elements scrapers
49
50 -----------------------------------------------------------------------
51 -----------------------------------------------------------------------
52
53 data QueryBool = QueryBool Text
54 deriving (Eq, Show, Generic)
55
56 queries :: [QueryBool]
57 queries = [QueryBool (pack "(X OR X') AND (Y OR Y') NOT (Z OR Z')")]
58
59 instance Arbitrary QueryBool where
60 arbitrary = elements queries
61
62 instance FromJSON QueryBool
63 instance ToJSON QueryBool
64
65
66
67 data Query = Query { query_query :: QueryBool
68 , query_name :: Maybe [Scraper]
69 }
70 deriving (Eq, Show, Generic)
71 instance FromJSON Query
72 instance ToJSON Query
73 instance Arbitrary Query where
74 arbitrary = elements [ Query q (Just n)
75 | q <- queries
76 , n <- take 10 $ permutations scrapers
77 ]
78
79 -----------------------------------------------------------------------
80 -----------------------------------------------------------------------
81
82 type Error = Text
83 type Errors = [Error]
84
85 data Message = Message Integer Errors
86 deriving (Eq, Show, Generic)
87
88 toMessage :: [(Integer, [Text])] -> [Message]
89 toMessage = map (\(c,es) -> Message c es)
90
91 messages :: [Message]
92 messages = toMessage $ [ (400, ["Ill formed query "])
93 , (300, ["API connexion error "])
94 , (300, ["Internal Gargantext Error "])
95 , (300, ["Connexion to Gargantext Error"])
96 , (300, ["Token has expired "])
97 ] <> take 10 ( repeat (200, [""]))
98
99 instance Arbitrary Message where
100 arbitrary = elements messages
101
102 instance FromJSON Message
103 instance ToJSON Message
104
105 -----------------------------------------------------------------------
106 -----------------------------------------------------------------------
107 data Counts = Counts [Count]
108 deriving (Eq, Show, Generic)
109
110 instance FromJSON Counts
111 instance ToJSON Counts
112
113 data Count = Count { count_name :: Scraper
114 , count_count :: Maybe Int
115 , count_message :: Maybe Message
116 }
117 deriving (Eq, Show, Generic)
118
119 instance FromJSON Count
120 instance ToJSON Count
121
122 instance Arbitrary Counts where
123 arbitrary = elements $ select
124 $ map Counts
125 $ map (\xs -> zipWith (\s (c,m) -> Count s c m) scrapers xs)
126 $ chunkAlong (length scrapers) 1 $ (map filter' countOrErrors)
127 where
128 select xs = (take 10 xs) <> (take 10 $ drop 100 xs)
129 countOrErrors = [ (c,e) | c <- [500..1000], e <- reverse messages]
130 filter' (c,e) = case e of
131 Message 200 _ -> (Just c , Nothing )
132 message -> (Nothing, Just message)
133
134 -----------------------------------------------------------------------
135 count :: Query -> Handler Counts
136 count _ = undefined