|
# retoor <retoor@molodetz.nl>
|
|
|
|
from __future__ import annotations
|
|
|
|
from ..spec import Action
|
|
from ._shared import TARGET_TYPE, body, path, query
|
|
|
|
|
|
ENGAGEMENT_ACTIONS: tuple[Action, ...] = (
|
|
Action(
|
|
name="vote",
|
|
method="POST",
|
|
path="/votes/{target_type}/{target_uid}",
|
|
summary="Cast or toggle a vote on a target",
|
|
description="Re-sending the same value removes the vote. Returns the net/up/down tally.",
|
|
ajax=True,
|
|
params=(
|
|
path("target_type", TARGET_TYPE),
|
|
path(
|
|
"target_uid",
|
|
"Uid of the target, copied from a listing response; do not invent it.",
|
|
),
|
|
body(
|
|
"value",
|
|
"Vote value: 1 to upvote, -1 to downvote (re-send to remove).",
|
|
required=True,
|
|
),
|
|
),
|
|
),
|
|
Action(
|
|
name="react",
|
|
method="POST",
|
|
path="/reactions/{target_type}/{target_uid}",
|
|
summary="Toggle an emoji reaction on a target",
|
|
description="Re-sending the same emoji removes it. Returns reaction counts.",
|
|
ajax=True,
|
|
params=(
|
|
path("target_type", TARGET_TYPE),
|
|
path(
|
|
"target_uid",
|
|
"Uid of the target, copied from a listing response; do not invent it.",
|
|
),
|
|
body("emoji", "One of the allowed reaction emoji.", required=True),
|
|
),
|
|
),
|
|
Action(
|
|
name="list_bookmarks",
|
|
method="GET",
|
|
path="/bookmarks/saved",
|
|
summary="List saved bookmarks",
|
|
params=(query("before", "Pagination cursor."),),
|
|
),
|
|
Action(
|
|
name="toggle_bookmark",
|
|
method="POST",
|
|
path="/bookmarks/{target_type}/{target_uid}",
|
|
summary="Toggle a bookmark on a target",
|
|
description="Re-sending removes the bookmark. Returns {saved: true|false}.",
|
|
ajax=True,
|
|
params=(
|
|
path("target_type", TARGET_TYPE),
|
|
path(
|
|
"target_uid",
|
|
"Uid of the target, copied from a listing response; do not invent it.",
|
|
),
|
|
),
|
|
),
|
|
Action(
|
|
name="vote_poll",
|
|
method="POST",
|
|
path="/polls/{poll_uid}/vote",
|
|
summary="Vote in a poll",
|
|
description="Casts or changes your vote on a poll option. Returns the option tallies.",
|
|
ajax=True,
|
|
params=(
|
|
path("poll_uid", "Poll uid."),
|
|
body("option_uid", "Chosen option uid.", required=True),
|
|
),
|
|
),
|
|
)
|