- def validate(
- %{"type" => "Create", "object" => %{"type" => objtype} = object} = create_activity,
- meta
- )
- when objtype in ~w[Question Answer Audio Video Event Article] do
- with {:ok, object_data} <- cast_and_apply(object),
- meta = Keyword.put(meta, :object_data, object_data |> stringify_keys),
- {:ok, create_activity} <-
- create_activity
- |> CreateGenericValidator.cast_and_validate(meta)
+ def validate(%{"type" => type} = object, meta)
+ when type in ~w[Event Question Audio Video Article Note Page] do
+ validator =
+ case type do
+ "Event" -> EventValidator
+ "Question" -> QuestionValidator
+ "Audio" -> AudioVideoValidator
+ "Video" -> AudioVideoValidator
+ "Article" -> ArticleNotePageValidator
+ "Note" -> ArticleNotePageValidator
+ "Page" -> ArticleNotePageValidator
+ end
+
+ with {:ok, object} <-
+ object
+ |> validator.cast_and_validate()