2017-05-26 6 views
1

私はServantとPersistentを併用しています。私はUserエンティティを持っており、コンテキストに応じてフィールドのサブセットだけで応答できるかどうかを知りたいと思います。1つの永続エンティティの複数のJSONインスタンス

のは、以下の2つのエンドポイントを考えてみましょう:GET /user要求が到着すると

share [mkPersist sqlSettings, mkMigrate "migrateAll"] [persistLowerCase| 
User json sql=users 
    username Text 
    email  Text 
    password Text 
    token  Text 
    bio  Text Maybe default=NULL 
    image  Text Maybe default=NULL 
    createdAt UTCTime default=now() 
    updatedAt UTCTime Maybe default=NULL 

    UniqueUser username email 
    deriving Show 
|] 

、我々は単に認証のためemailtokenで応答したいとしましょう:

type UserAPI = "user" 
      :> Capture "username" Username 
      :> Get '[JSON] (Entity User) 

type ProfileAPI = "profiles" 
       :> Capture "username" Username 
       :> Get '[JSON] (Entity User) 

type AppAPI = UserAPI :<|> ProfileAPI 

ここに私たちのUserモデルです。一方、GET /profile/:usernameリクエストが届くと、username,bioおよびimageと応答したいと考えています。

どうすればこのことができますか?ありがとう。


アップデート:私は特定のテーブルに別のレコードを使用して永続的なタイプとサーバントの要求タイプの間で「変換」することが可能であると考えています。たとえば、Persistentで使用され、もう1つはクライアントとのインターフェイスとして使用されます。しかし、これには2つの間で変換する機能が必要な場合があります。論理が成長するにつれて、物事は面倒になるだろうと私は推測する。

さらに、ToJSONインスタンスとFromJSONインスタンスを定義することができたと思っていましたが、私はそれを回避することはできません。

+0

@AlexisKingあなたのコメントを投稿した私の投稿を編集しました。私はポイントを逃したのですか?ありがとう。 –

答えて

0

同じデータ型に対して複数のインスタンスが必要なのはなぜですか?各ハンドラで返すデータのデータ型を個別に作成し、それぞれに対してToJSONのインスタンスを作成するのはなぜですか?

type UserAPI = "user" 
      :> Capture "username" Username 
      :> Get '[JSON] UserEmailAndToken 

type ProfileAPI = "profiles" 
       :> Capture "username" Username 
       :> Get '[JSON] UserNameBioAndImage 

type AppAPI = UserAPI :<|> ProfileAPI 

次に、あなたは、(非常に簡単なはずです)UserEmailAndTokenUserNameBioAndImageを定義Userし、これらのタイプの間の些細な機能マッピングとともに、それぞれのToJSONインスタンスを記述します。

関連する問題