- map = if is_map(map["object"]) do
- object = Map.put_new_lazy(map["object"], "id", &generate_object_id/0)
- Repo.insert!(%Object{data: object})
- Map.put(map, "object", object)
+ # TODO: This is weird, maybe we shouldn't check here if we can make the activity.
+ def like(%User{ap_id: ap_id} = user, %Object{data: %{"id" => id}} = object, activity_id \\ nil, local \\ true) do
+ with nil <- get_existing_like(ap_id, object),
+ like_data <- make_like_data(user, object, activity_id),
+ {:ok, activity} <- insert(like_data, local),
+ {:ok, object} <- add_like_to_object(activity, object),
+ :ok <- maybe_federate(activity) do
+ {:ok, activity, object}