From 35eb8836f39b21e5e4f7770936d5a5073ea2b783 Mon Sep 17 00:00:00 2001
From: Alexander Foremny <aforemny@posteo.de>
Date: Fri, 11 Oct 2024 17:12:38 +0200
Subject: add cli command `collection schema COLLECTION`

---
 cli/app/Main.hs | 29 +++++++++++++++++++----------
 1 file changed, 19 insertions(+), 10 deletions(-)

(limited to 'cli/app/Main.hs')

diff --git a/cli/app/Main.hs b/cli/app/Main.hs
index 1fc3119..e8d9605 100644
--- a/cli/app/Main.hs
+++ b/cli/app/Main.hs
@@ -1,16 +1,17 @@
+{-# LANGUAGE ApplicativeDo #-}
 {-# LANGUAGE BlockArguments #-}
 {-# LANGUAGE LambdaCase #-}
 {-# LANGUAGE OverloadedStrings #-}
 {-# LANGUAGE RecordWildCards #-}
 {-# LANGUAGE ViewPatterns #-}
 {-# LANGUAGE NoFieldSelectors #-}
-{-# LANGUAGE ApplicativeDo #-}
 
 module Main where
 
 import ACMS.API.REST.Collection qualified
 import Control.Applicative ((<**>))
 import Data.Aeson qualified as J
+import Data.Aeson.Encode.Pretty qualified as J
 import Data.ByteString.Lazy qualified as LB
 import Data.Text qualified as T
 import Options.Applicative qualified as O
@@ -39,6 +40,8 @@ data CollectionCmd
   | CollectionView CollectionItem
   | CollectionEdit CollectionItem
   | CollectionDelete CollectionItem
+  | --
+    CollectionSchema Collection
 
 newtype Collection = Collection T.Text
   deriving (Read)
@@ -66,13 +69,16 @@ collectionCmd :: O.Parser Cmd
 collectionCmd = do
   fmap CollectionCmd . O.hsubparser . mconcat $
     [ O.command "add" . O.info (CollectionAdd <$> collectionNameArg) $
-        O.progDesc "Add an entity"
-    , O.command "view" . O.info (CollectionView <$> collectionPathArg) $
-        O.progDesc "View an entity"
-    , O.command "edit" . O.info (CollectionEdit <$> collectionPathArg) $
-        O.progDesc "Edit an entity"
-    , O.command "delete" . O.info (CollectionDelete <$> collectionPathArg) $
-        O.progDesc "Delete an entity"
+        O.progDesc "Add an entity",
+      O.command "view" . O.info (CollectionView <$> collectionPathArg) $
+        O.progDesc "View an entity",
+      O.command "edit" . O.info (CollectionEdit <$> collectionPathArg) $
+        O.progDesc "Edit an entity",
+      O.command "delete" . O.info (CollectionDelete <$> collectionPathArg) $
+        O.progDesc "Delete an entity",
+      --
+      O.command "schema" . O.info (CollectionSchema <$> collectionNameArg) $
+        O.progDesc "Show the collection's schema"
     ]
 
 collectionPathArg :: O.Parser CollectionItem
@@ -97,11 +103,14 @@ main =
         CollectionView CollectionItem {collectionName = Collection cn, fileName} ->
           print
             =<< ACMS.API.REST.Collection.read cn fileName
-        CollectionDelete CollectionItem {collectionName = Collection cn, fileName}->
+        CollectionDelete CollectionItem {collectionName = Collection cn, fileName} ->
           print
             =<< ACMS.API.REST.Collection.delete cn fileName
-        CollectionEdit CollectionItem {collectionName = Collection cn, fileName}->
+        CollectionEdit CollectionItem {collectionName = Collection cn, fileName} ->
           print
             =<< ACMS.API.REST.Collection.update cn fileName
             =<< J.throwDecode
             =<< LB.getContents
+        CollectionSchema (Collection cn) ->
+          LB.putStr . J.encodePretty
+            =<< ACMS.API.REST.Collection.schema cn
-- 
cgit v1.2.3