IMTUser.hs 3.06 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
{-|
Module      : Gargantext.Ext.IMTUser
Description : Interface to get IMT users
Copyright   : (c) CNRS, 2017-Present
License     : AGPL + CECILL v3
Maintainer  : team@gargantext.org
Stability   : experimental
Portability : POSIX

We can not import the IMT Client API code since it is copyrighted.
Here is writtent a common interface.

-}

{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE DeriveGeneric     #-}

module Gargantext.Ext.IMTUser (deserialiseImtUsersFromFile)
  where


import System.IO (FilePath)
import Codec.Serialise
import Data.Maybe (Maybe, catMaybes)
import Data.Text (Text)
import GHC.Generics (Generic)
import Gargantext.Prelude

import Gargantext.Database.Node.Contact -- (HyperdataContact, ContactWho, ContactWhere, ContactTouch, ContactMetaData)
import qualified Data.ByteString.Lazy as BSL

instance Serialise IMTUser

deserialiseImtUsersFromFile :: FilePath -> IO [HyperdataContact]
deserialiseImtUsersFromFile filepath = map imtUser2gargContact <$> deserialiseFromFile' filepath

deserialiseFromFile' :: FilePath -> IO [IMTUser]
deserialiseFromFile' filepath = deserialise <$> BSL.readFile filepath

data IMTUser = IMTUser
  { id        :: Text
  , entite    :: Maybe Text
  , mail      :: Maybe Text
  , nom       :: Maybe Text
  , prenom    :: Maybe Text
  , fonction  :: Maybe Text
  , tel       :: Maybe Text
  , fax       :: Maybe Text
  , service   :: Maybe Text
  , groupe    :: Maybe Text
  , bureau    :: Maybe Text
  , url       :: Maybe Text
  , pservice  :: Maybe Text
  , pfonction :: Maybe Text
  , afonction :: Maybe Text
  , grprech   :: Maybe Text
  , lieu      :: Maybe Text
  , aprecision   :: Maybe Text
  , atel         :: Maybe Text
  , sexe         :: Maybe Text
  , statut       :: Maybe Text
  , idutilentite :: Maybe Text
  , entite2  :: Maybe Text
  , service2 :: Maybe Text
  , groupe2  :: Maybe Text
  , actif    :: Maybe Text
  , idutilsiecoles    :: Maybe Text
  , date_modification :: Maybe Text
  } deriving (Eq, Show, Generic)

imtUser2gargContact :: IMTUser -> HyperdataContact
imtUser2gargContact (IMTUser id' entite' mail' nom' prenom' fonction' tel' _fax'
                     service' _groupe' bureau' url' _pservice' _pfonction' _afonction'
                     _grprech' lieu' _aprecision' _atel' _sexe' _statut' _idutilentite'
                     _entite2' _service2' _group2' _actif' _idutilsiecoles' date_modification')
77
                  = HyperdataContact (Just "IMT Annuaire") (Just qui) [ou] ((<>) <$> (fmap (\p -> p <> " ") prenom') <*> nom') entite' date_modification' Nothing Nothing
78
                    where
79
                      qui = ContactWho (Just id') prenom' nom' (catMaybes [service']) []
80 81
                      ou  = ContactWhere (toList entite') (toList service') fonction' bureau' (Just "France") lieu' contact Nothing Nothing
                      contact = Just $ ContactTouch mail' tel' url'
82
                      -- meta    = ContactMetaData (Just "IMT annuaire") date_modification'
83 84
                      toList Nothing  = []
                      toList (Just x) = [x]
85 86 87