/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に変換してクライアントに送ればいい。
とりあえずそこまでやるか。
リレーは投稿の署名を検証しなくちゃいけないのかな。原理的に言えば「しなくてもいい」となりそうだけど、もちろん「したほうがいい」のは「それはそう」なんだけど仕様としてはどうなってるのかな。