Clear all ics/feed caches when modifying events/posts/actors

Closes #1059

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
This commit is contained in:
Thomas Citharel
2022-03-24 12:51:23 +01:00
parent 117052fb91
commit 019d694d2a
6 changed files with 132 additions and 12 deletions

View File

@@ -28,6 +28,7 @@ defmodule Mobilizon.Events do
Track
}
alias Mobilizon.Service.Export.Cachable
alias Mobilizon.Service.Workers.BuildSearch
alias Mobilizon.Service.Workers.EventDelayedNotificationWorker
alias Mobilizon.Share
@@ -301,7 +302,7 @@ defmodule Mobilizon.Events do
end)
|> Repo.transaction(),
%Event{} = new_event <- Repo.preload(new_event, @event_preloads, force: true) do
Cachex.del(:ics, "event_#{new_event.uuid}")
Cachable.clear_all_caches(new_event)
unless new_event.draft do
%{
@@ -355,14 +356,10 @@ defmodule Mobilizon.Events do
Deletes an event.
"""
@spec delete_event(Event.t()) :: {:ok, Event.t()} | {:error, Changeset.t()}
def delete_event(%Event{} = event), do: Repo.delete(event)
@doc """
Deletes an event.
Raises an exception if it fails.
"""
@spec delete_event!(Event.t()) :: Event.t()
def delete_event!(%Event{} = event), do: Repo.delete!(event)
def delete_event(%Event{} = event) do
Cachable.clear_all_caches(event)
Repo.delete(event)
end
@doc """
Returns the list of events.

View File

@@ -5,6 +5,7 @@ defmodule Mobilizon.Posts do
alias Mobilizon.Actors.Actor
alias Mobilizon.Events.Tag
alias Mobilizon.Posts.Post
alias Mobilizon.Service.Export.Cachable
alias Mobilizon.Storage.{Page, Repo}
import Ecto.Query
@@ -107,6 +108,8 @@ defmodule Mobilizon.Posts do
"""
@spec update_post(Post.t(), map) :: {:ok, Post.t()} | {:error, Ecto.Changeset.t()}
def update_post(%Post{} = post, attrs) do
Cachable.clear_all_caches(post)
post
|> Repo.preload([:tags, :media])
|> Post.changeset(attrs)
@@ -117,7 +120,10 @@ defmodule Mobilizon.Posts do
Deletes a post
"""
@spec delete_post(Post.t()) :: {:ok, Post.t()} | {:error, Ecto.Changeset.t()}
def delete_post(%Post{} = post), do: Repo.delete(post)
def delete_post(%Post{} = post) do
Cachable.clear_all_caches(post)
Repo.delete(post)
end
@doc """
Returns the list of tags for the post.