@@ -95,50 +95,6 @@ defmodule GroupherServer.CMS.Delegate.ArticleCURD do
9595 end
9696 end
9797
98- # for create content step in Multi.new
99- defp exec_create_content ( target , attrs , % Author { id: aid } , % Community { id: cid } ) do
100- target
101- |> struct ( )
102- |> target . changeset ( attrs )
103- |> Ecto.Changeset . put_change ( :author_id , aid )
104- |> Ecto.Changeset . put_change ( :origial_community_id , integerfy ( cid ) )
105- |> Repo . insert ( )
106- end
107-
108- defp exec_set_topic ( thread , id , % { topic: topic } ) do
109- ArticleOperation . set_topic ( % Topic { title: topic } , thread , id )
110- end
111-
112- # if topic is not provide, use posts as default
113- defp exec_set_topic ( thread , id , _attrs ) do
114- ArticleOperation . set_topic ( % Topic { title: "posts" } , thread , id )
115- end
116-
117- defp exec_set_tag ( thread , id , % { tags: tags } ) do
118- try do
119- Enum . each ( tags , fn tag ->
120- { :ok , _ } = ArticleOperation . set_tag ( thread , % Tag { id: tag . id } , id )
121- end )
122-
123- { :ok , "psss" }
124- rescue
125- _ -> { :error , [ message: "set tag" , code: ecode ( :create_fails ) ] }
126- end
127- end
128-
129- defp exec_set_tag ( _thread , _id , _attrs ) , do: { :ok , :pass }
130-
131- # TODO: flag 逻辑似乎有问题
132- defp exec_set_community_flag ( % Community { } = community , content , % { flag: _flag } ) do
133- ArticleOperation . set_community_flags ( community , content , % {
134- trash: false
135- } )
136- end
137-
138- defp exec_set_community_flag ( _community , _content , _action ) do
139- { :ok , :pass }
140- end
141-
14298 @ doc """
14399 update a content(post/job ...)
144100 """
@@ -148,7 +104,7 @@ defmodule GroupherServer.CMS.Delegate.ArticleCURD do
148104 ORM . update ( content , args )
149105 end )
150106 |> Multi . run ( :update_tag , fn _ , _ ->
151- update_tags ( content , args . tags )
107+ exec_update_tags ( content , args . tags )
152108 end )
153109 |> Repo . transaction ( )
154110 |> update_content_result ( )
@@ -446,60 +402,85 @@ defmodule GroupherServer.CMS.Delegate.ArticleCURD do
446402 { :error , [ message: "log action" , code: ecode ( :create_fails ) ] }
447403 end
448404
449- defp update_tags ( _content , tags_ids ) when length ( tags_ids ) == 0 , do: { :ok , :pass }
405+ # except Job, other content will just pass, should use set_tag function instead
406+ # defp exec_update_tags(_, _tags_ids), do: {:ok, :pass}
450407
451- # Job is special, the tags in job only represent city, so everytime update
452- # tags on job content, should be override the old ones, in this way, every
453- # communiies contains this job will have the same city info
454- defp update_tags ( % CMS.Job { } = content , tags_ids ) do
455- with { :ok , content } <- ORM . find ( CMS.Job , content . id , preload: :tags ) do
456- concat_tags ( content , tags_ids )
457- end
408+ defp update_content_result ( { :ok , % { update_content: result } } ) , do: { :ok , result }
409+ defp update_content_result ( { :error , :update_content , result , _steps } ) , do: { :error , result }
410+ defp update_content_result ( { :error , :update_tag , result , _steps } ) , do: { :error , result }
411+
412+ defp content_id ( :post , id ) , do: % { post_id: id }
413+ defp content_id ( :job , id ) , do: % { job_id: id }
414+ defp content_id ( :repo , id ) , do: % { repo_id: id }
415+ defp content_id ( :video , id ) , do: % { video_id: id }
416+
417+ # for create content step in Multi.new
418+ defp exec_create_content ( target , attrs , % Author { id: aid } , % Community { id: cid } ) do
419+ target
420+ |> struct ( )
421+ |> target . changeset ( attrs )
422+ |> Ecto.Changeset . put_change ( :author_id , aid )
423+ |> Ecto.Changeset . put_change ( :origial_community_id , integerfy ( cid ) )
424+ |> Repo . insert ( )
458425 end
459426
460- defp update_tags ( % CMS.Post { } = content , tags_ids ) do
461- with { :ok , content } <- ORM . find ( CMS.Post , content . id , preload: :tags ) do
462- concat_tags ( content , tags_ids )
463- end
427+ defp exec_set_topic ( thread , id , % { topic: topic } ) do
428+ ArticleOperation . set_topic ( % Topic { title: topic } , thread , id )
464429 end
465430
466- defp update_tags ( % CMS.Video { } = content , tags_ids ) do
467- with { :ok , content } <- ORM . find ( CMS.Video , content . id , preload: :tags ) do
468- concat_tags ( content , tags_ids )
469- end
431+ # if topic is not provide, use posts as default
432+ defp exec_set_topic ( thread , id , _attrs ) do
433+ ArticleOperation . set_topic ( % Topic { title: "posts" } , thread , id )
470434 end
471435
472- # except Job, other content will just pass, should use set_tag function instead
473- defp update_tags ( _ , _tags_ids ) , do: { :ok , :pass }
436+ defp exec_set_tag ( thread , id , % { tags: tags } ) do
437+ try do
438+ Enum . each ( tags , fn tag ->
439+ { :ok , _ } = ArticleOperation . set_tag ( thread , % Tag { id: tag . id } , id )
440+ end )
474441
475- defp concat_tags ( content , tags_ids ) do
476- tags =
477- Enum . reduce ( tags_ids , [ ] , fn t , acc ->
478- { :ok , tag } = ORM . find ( Tag , t . id )
442+ { :ok , "psss" }
443+ rescue
444+ _ -> { :error , [ message: "set tag" , code: ecode ( :create_fails ) ] }
445+ end
446+ end
479447
480- case tag . title == "refined" do
481- true ->
482- acc
448+ defp exec_set_tag ( _thread , _id , _attrs ) , do: { :ok , :pass }
483449
484- false ->
485- acc ++ [ tag ]
486- end
487- end )
450+ # TODO: flag 逻辑似乎有问题
451+ defp exec_set_community_flag ( % Community { } = community , content , % { flag: _flag } ) do
452+ ArticleOperation . set_community_flags ( community , content , % {
453+ trash: false
454+ } )
455+ end
488456
489- content
490- |> Ecto.Changeset . change ( )
491- |> Ecto.Changeset . put_assoc ( :tags , tags )
492- |> Repo . update ( )
457+ defp exec_set_community_flag ( _community , _content , _action ) do
458+ { :ok , :pass }
493459 end
494460
495- defp update_content_result ( { :ok , % { update_content: result } } ) , do: { :ok , result }
496- defp update_content_result ( { :error , :update_content , result , _steps } ) , do: { :error , result }
497- defp update_content_result ( { :error , :update_tag , result , _steps } ) , do: { :error , result }
461+ defp exec_update_tags ( _content , tags_ids ) when length ( tags_ids ) == 0 , do: { :ok , :pass }
498462
499- defp content_id ( :post , id ) , do: % { post_id: id }
500- defp content_id ( :job , id ) , do: % { job_id: id }
501- defp content_id ( :repo , id ) , do: % { repo_id: id }
502- defp content_id ( :video , id ) , do: % { video_id: id }
463+ defp exec_update_tags ( content , tags_ids ) do
464+ with { :ok , content } <- ORM . find ( content . __struct__ , content . id , preload: :tags ) do
465+ tags =
466+ Enum . reduce ( tags_ids , [ ] , fn t , acc ->
467+ { :ok , tag } = ORM . find ( Tag , t . id )
468+
469+ case tag . title == "refined" do
470+ true ->
471+ acc
472+
473+ false ->
474+ acc ++ [ tag ]
475+ end
476+ end )
477+
478+ content
479+ |> Ecto.Changeset . change ( )
480+ |> Ecto.Changeset . put_assoc ( :tags , tags )
481+ |> Repo . update ( )
482+ end
483+ end
503484
504485 defp nofify_admin_new_content ( % { id: id } = result ) do
505486 target = result . __struct__
0 commit comments