/run hs import Data.Char main = putStrLn $ char <$> [12390, 12377, 12392]
/run hs main = putStrLn "\\12390\\12377\\12392"
/run hs main = putStrLn "\12390\12377\12392"
めんどくさいけど、とりあえずさっき定義したテーブルを作成して、Event型の値と秘密鍵からSQLのINSERT文を作る関数でも作ろうかな。で、サンプルを2から3個INSERTしておこう。
/run hs main = putStrLn "test"
/run help
/run hs main = putStrLn "テスト"
Nostrのイベントを格納するデータベースは id 文字列 pubkey 文字列 created_at 整数 kind 整数 a 文字列 b 文字列 c 文字列 ... A 文字列 B 文字列 C 文字列 ... content 文字列 sig 文字列 って感じかな。 タグのあたりがやっかいなのだけど、「一文字タグはすべて保存し、それ以外は無視。タグについては「値」より後の内容は無視することにする。 JSONはゆるすぎるので、データベースにするときにちょっとやっかいだったりする。
なんだかめんどくさくなってきたけど、流れとしては次の感じ。 データベースのテーブルを作成する JSONをEvent型の値に変換 Event型の値の署名を検証 Event型の値をデータベースに書き込む Eventの構読要求が来たとき、めんどくさいのがfilterの組み立てなのだけど、とりあえずJSONをSQL文に変換する関数を書いておけばいいかな。これは、まあまあめんどくさい気がする。 JSONとSQL文のあいだにFilter型の値をはさんだほうが良さそうだ。 で、Filter型の値を簡単に作成できるような関数とテスト用のデータを用意して、対話環境で試しながら書くのがいいかと。 でFilterを表すSQL文ができれば、あとはデータベースから取り出したEventをEvent型の値に変換して、それをJSONに変換してクライアントに送ればいい。 とりあえずそこまでやるか。
リレーは投稿の署名を検証しなくちゃいけないのかな。原理的に言えば「しなくてもいい」となりそうだけど、もちろん「したほうがいい」のは「それはそう」なんだけど仕様としてはどうなってるのかな。