wikimusic-ssr-1.0.1.6: src/WikiMusic/SSR/Servant/ApiSpec.hs
module WikiMusic.SSR.Servant.ApiSpec where
import Principium
import Servant
import Servant.HTML.Blaze as ServantBlaze
import Servant.Multipart
import WikiMusic.SSR.Backend.Rest ()
import WikiMusic.SSR.View.Html ()
type WikiMusicSSRServant =
Get '[ServantBlaze.HTML] NoContent
:<|> "artists"
:> BaseEntityRoutes
:<|> "genres"
:> BaseEntityRoutes
:<|> "songs"
:> ( BaseEntityRoutes
:<|> SongContentsRoutes
)
:<|> "user-preferences"
:> PreferenceRoutes
:<|> "login" :> LoginRoutes
:<|> "error" :> ErrorRoute
:<|> "passwords" :> PasswordRoutes
:<|> "users" :> UserRoutes
:<|> StaticFilesRoute
type PasswordRoutes =
"request-reset" :> WithCookie :> HtmlDoc
:<|> "request-reset" :> PostDataForm
:<|> "do-reset" :> WithCookie :> QueryParam "token" Text :> HtmlDoc
:<|> "do-reset" :> PostDataForm
type UserRoutes =
"invite" :> WithCookie :> HtmlDoc
:<|> "invite" :> WithCookie :> PostDataForm
type PostDataForm =
MultipartForm Mem (MultipartData Mem)
:> Post '[ServantBlaze.HTML] (Headers '[Header "Location" Text] NoContent)
type PostNoFields = Post '[ServantBlaze.HTML] (Headers '[Header "Location" Text] NoContent)
type WithReferer = Header "referer" Text
type CookieForm =
WithReferer
:> MultipartForm Mem (MultipartData Mem)
:> Post '[ServantBlaze.HTML] (Headers '[Header "Set-Cookie" Text, Header "Location" Text] NoContent)
type HtmlDoc = Get '[ServantBlaze.HTML] Html
type WithCookie = Header "cookie" Text
type BaseEntityRoutes =
WithCookie
:> QueryParam "sort-order" Text
:> QueryParam "limit" Int
:> QueryParam "offset" Int
:> QueryParam "searchInput" Text
:> HtmlDoc
:<|> WithCookie :> WithEntityIdentifier :> HtmlDoc
:<|> "create" :> WithCookie :> HtmlDoc
:<|> "create" :> WithCookie :> PostDataForm
:<|> "like" :> WithCookie :> WithReferer :> WithEntityIdentifier :> PostNoFields
:<|> "dislike" :> WithCookie :> WithReferer :> WithEntityIdentifier :> PostNoFields
:<|> "edit" :> WithCookie :> WithEntityIdentifier :> HtmlDoc
:<|> "edit" :> WithCookie :> WithReferer :> WithEntityIdentifier :> PostDataForm
:<|> "search" :> PostDataForm
:<|> "artworks"
:> ( "create" :> WithCookie :> WithReferer :> WithEntityIdentifier :> PostDataForm
:<|> "delete" :> WithCookie :> WithReferer :> WithEntityIdentifier :> PostNoFields
:<|> "order" :> WithCookie :> WithReferer :> WithEntityIdentifier :> PostDataForm
)
:<|> "delete" :> WithCookie :> WithEntityIdentifier :> PostNoFields
type SongContentsRoutes =
WithCookie
:> WithReferer
:> WithEntityIdentifier
:> "contents"
:> PostDataForm
:<|> WithCookie
:> WithReferer
:> WithEntityIdentifier
:> "contents"
:> Capture "songContentIdentifier" UUID
:> PostDataForm
:<|> "contents" :> WithEntityIdentifier :> "delete" :> WithCookie :> WithReferer :> PostNoFields
type PreferenceRoutes =
"locale" :> CookieForm
:<|> "artist-sorting" :> CookieForm
:<|> "genre-sorting" :> CookieForm
:<|> "song-sorting" :> CookieForm
:<|> "dark-mode" :> CookieForm
:<|> "song-ascii-size" :> CookieForm
:<|> "palette" :> CookieForm
type LoginRoutes = WithCookie :> HtmlDoc :<|> PostDataForm
type WithEntityIdentifier = Capture "identifier" UUID
type ErrorRoute = WithCookie :> WithReferer :> QueryParam "code" Int :> QueryParam "message" Text :> HtmlDoc
type StaticFilesRoute = "static" :> Raw