diff options
| author | lain <lain@soykaf.club> | 2020-06-07 15:38:33 +0200 | 
|---|---|---|
| committer | lain <lain@soykaf.club> | 2020-06-07 15:38:33 +0200 | 
| commit | 801e668a97adff4a33451dd7bb48799562ed8796 (patch) | |
| tree | 414a1da874261e9ea1c0290428daaf8fa4831952 /lib | |
| parent | 2cdaac433035d8df3890eae098b55380b9e1c9fc (diff) | |
| download | pleroma-801e668a97adff4a33451dd7bb48799562ed8796.tar.gz pleroma-801e668a97adff4a33451dd7bb48799562ed8796.zip  | |
ChatController: Add `last_read_id` option to mark_as_read.
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/pleroma/chat/message_reference.ex | 20 | ||||
| -rw-r--r-- | lib/pleroma/web/api_spec/operations/chat_operation.ex | 18 | ||||
| -rw-r--r-- | lib/pleroma/web/pleroma_api/controllers/chat_controller.ex | 3 | 
3 files changed, 34 insertions, 7 deletions
diff --git a/lib/pleroma/chat/message_reference.ex b/lib/pleroma/chat/message_reference.ex index 7ee7508ca..131ae0186 100644 --- a/lib/pleroma/chat/message_reference.ex +++ b/lib/pleroma/chat/message_reference.ex @@ -98,12 +98,20 @@ defmodule Pleroma.Chat.MessageReference do      |> Repo.update()    end -  def set_all_seen_for_chat(chat) do -    chat -    |> for_chat_query() -    |> exclude(:order_by) -    |> exclude(:preload) -    |> where([cmr], cmr.unread == true) +  def set_all_seen_for_chat(chat, last_read_id \\ nil) do +    query = +      chat +      |> for_chat_query() +      |> exclude(:order_by) +      |> exclude(:preload) +      |> where([cmr], cmr.unread == true) + +    if last_read_id do +      query +      |> where([cmr], cmr.id <= ^last_read_id) +    else +      query +    end      |> Repo.update_all(set: [unread: false])    end  end diff --git a/lib/pleroma/web/api_spec/operations/chat_operation.ex b/lib/pleroma/web/api_spec/operations/chat_operation.ex index 74c3ad0bd..45fbad311 100644 --- a/lib/pleroma/web/api_spec/operations/chat_operation.ex +++ b/lib/pleroma/web/api_spec/operations/chat_operation.ex @@ -23,6 +23,7 @@ defmodule Pleroma.Web.ApiSpec.ChatOperation do        summary: "Mark all messages in the chat as read",        operationId: "ChatController.mark_as_read",        parameters: [Operation.parameter(:id, :path, :string, "The ID of the Chat")], +      requestBody: request_body("Parameters", mark_as_read()),        responses: %{          200 =>            Operation.response( @@ -333,4 +334,21 @@ defmodule Pleroma.Web.ApiSpec.ChatOperation do        }      }    end + +  def mark_as_read do +    %Schema{ +      title: "MarkAsReadRequest", +      description: "POST body for marking a number of chat messages as read", +      type: :object, +      properties: %{ +        last_read_id: %Schema{ +          type: :string, +          description: "The content of your message. Optional." +        } +      }, +      example: %{ +        "last_read_id" => "abcdef12456" +      } +    } +  end  end diff --git a/lib/pleroma/web/pleroma_api/controllers/chat_controller.ex b/lib/pleroma/web/pleroma_api/controllers/chat_controller.ex index 983550b13..002b75082 100644 --- a/lib/pleroma/web/pleroma_api/controllers/chat_controller.ex +++ b/lib/pleroma/web/pleroma_api/controllers/chat_controller.ex @@ -111,7 +111,8 @@ defmodule Pleroma.Web.PleromaAPI.ChatController do    def mark_as_read(%{assigns: %{user: %{id: user_id}}} = conn, %{id: id}) do      with %Chat{} = chat <- Repo.get_by(Chat, id: id, user_id: user_id), -         {_n, _} <- MessageReference.set_all_seen_for_chat(chat) do +         {_n, _} <- +           MessageReference.set_all_seen_for_chat(chat, conn.body_params[:last_read_id]) do        conn        |> put_view(ChatView)        |> render("show.json", chat: chat)  | 
