Skip to content
This repository was archived by the owner on Nov 8, 2022. It is now read-only.

feat(drink-thread): basic workflow #418

Merged
merged 8 commits into from
Jun 26, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions config/config.exs
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ config :groupher_server, :article,
min_length: 10,
max_length: 20_000,
# NOTE: do not change unless you know what you are doing
threads: [:post, :job, :repo, :blog, :works, :radar, :guide, :meetup],
threads: [:post, :job, :repo, :blog, :works, :radar, :guide, :meetup, :drink],
# in this period, paged articles will sort front if non-article-author commented
# 在此时间段内,一旦有非文章作者的用户评论,该文章就会排到前面
active_period_days: %{
Expand All @@ -80,7 +80,8 @@ config :groupher_server, :article,
works: 10,
radar: 10,
guide: 10,
meetup: 10
meetup: 10,
drink: 10
},

# NOTE: if you want to add/remove emotion, just edit the list below
Expand Down
2 changes: 1 addition & 1 deletion lib/groupher_server/cms/delegates/article_curd.ex
Original file line number Diff line number Diff line change
Expand Up @@ -526,7 +526,7 @@ defmodule GroupherServer.CMS.Delegate.ArticleCURD do
defp result({:ok, %{set_viewer_has_states: result}}), do: result |> done()
defp result({:ok, %{update_article_meta: result}}), do: {:ok, result}

defp result({:error, :create_article, _result, _steps}) do
defp result({:error, :create_article, result, _steps}) do
{:error, [message: "create article", code: ecode(:create_fails)]}
end

Expand Down
3 changes: 1 addition & 2 deletions lib/groupher_server/cms/models/blog.ex
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,11 @@ defmodule GroupherServer.CMS.Model.Blog do

@required_fields ~w(title digest)a
@article_cast_fields general_article_cast_fields()
@optional_fields ~w(link_addr digest length)a ++ @article_cast_fields
@optional_fields ~w(link_addr digest)a ++ @article_cast_fields

@type t :: %Blog{}
schema "cms_blogs" do
field(:link_addr, :string)
field(:length, :integer)

article_tags_field(:blog)
article_communities_field(:blog)
Expand Down
48 changes: 48 additions & 0 deletions lib/groupher_server/cms/models/drink.ex
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
defmodule GroupherServer.CMS.Model.Drink do
@moduledoc false
alias __MODULE__

use Ecto.Schema
use Accessible

import Ecto.Changeset
import GroupherServer.CMS.Helper.Macros

alias GroupherServer.CMS
alias CMS.Model.Embeds

@timestamps_opts [type: :utc_datetime_usec]

@required_fields ~w(title digest)a
@article_cast_fields general_article_cast_fields()
@optional_fields @article_cast_fields

@type t :: %Drink{}
schema "cms_drinks" do
article_tags_field(:drink)
article_communities_field(:drink)
general_article_fields(:drink)
end

@doc false
def changeset(%Drink{} = drink, attrs) do
drink
|> cast(attrs, @optional_fields ++ @required_fields)
|> validate_required(@required_fields)
|> cast_embed(:meta, required: false, with: &Embeds.ArticleMeta.changeset/2)
|> generl_changeset
end

@doc false
def update_changeset(%Drink{} = drink, attrs) do
drink
|> cast(attrs, @optional_fields ++ @required_fields)
|> generl_changeset
end

defp generl_changeset(changeset) do
changeset
|> validate_length(:title, min: 3, max: 50)
|> cast_embed(:emotions, with: &Embeds.ArticleEmotion.changeset/2)
end
end
47 changes: 47 additions & 0 deletions lib/groupher_server/cms/models/drink_document.ex
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
defmodule GroupherServer.CMS.Model.DrinkDocument do
@moduledoc """
mainly for full-text search
"""
alias __MODULE__

use Ecto.Schema
use Accessible

import Ecto.Changeset
import Helper.Utils, only: [get_config: 2]

alias GroupherServer.CMS
alias CMS.Model.Drink

@timestamps_opts [type: :utc_datetime_usec]

@max_body_length get_config(:article, :max_length)
@min_body_length get_config(:article, :min_length)

@required_fields ~w(body body_html drink_id)a
@optional_fields []

@type t :: %DrinkDocument{}
schema "drink_documents" do
belongs_to(:drink, Drink, foreign_key: :drink_id)

field(:body, :string)
field(:body_html, :string)
field(:toc, :map)
end

@doc false
def changeset(%DrinkDocument{} = drink, attrs) do
drink
|> cast(attrs, @optional_fields ++ @required_fields)
|> validate_required(@required_fields)
|> validate_length(:body, min: @min_body_length, max: @max_body_length)
end

@doc false
def update_changeset(%DrinkDocument{} = drink, attrs) do
drink
|> cast(attrs, @optional_fields ++ @required_fields)
|> validate_length(:body, min: @min_body_length, max: @max_body_length)
end
end
3 changes: 1 addition & 2 deletions lib/groupher_server/cms/models/job.ex
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ defmodule GroupherServer.CMS.Model.Job do
alias CMS.Model.Embeds

@timestamps_opts [type: :utc_datetime_usec]
@required_fields ~w(title company digest length)a
@required_fields ~w(title company digest)a
@article_cast_fields general_article_cast_fields()
@optional_fields @article_cast_fields ++ ~w(desc company_link link_addr copy_right)a

Expand All @@ -24,7 +24,6 @@ defmodule GroupherServer.CMS.Model.Job do

field(:link_addr, :string)
field(:copy_right, :string)
field(:length, :integer)

article_tags_field(:job)
article_communities_field(:job)
Expand Down
3 changes: 1 addition & 2 deletions lib/groupher_server/cms/models/post.ex
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ defmodule GroupherServer.CMS.Model.Post do

@timestamps_opts [type: :utc_datetime_usec]

@required_fields ~w(title digest length)a
@required_fields ~w(title digest)a
@article_cast_fields general_article_cast_fields()
@optional_fields ~w(link_addr copy_right is_question is_solved solution_digest)a ++
@article_cast_fields
Expand All @@ -24,7 +24,6 @@ defmodule GroupherServer.CMS.Model.Post do
schema "cms_posts" do
field(:link_addr, :string)
field(:copy_right, :string)
field(:length, :integer)

field(:is_question, :boolean, default: false)
field(:is_solved, :boolean, default: false)
Expand Down
1 change: 0 additions & 1 deletion lib/groupher_server_web/schema/Helper/fields.ex
Original file line number Diff line number Diff line change
Expand Up @@ -168,7 +168,6 @@ defmodule GroupherServerWeb.Schema.Helper.Fields do
defmacro article_filter_fields do
quote do
field(:when, :when_enum)
field(:length, :length_enum)
field(:article_tag, :string)
field(:article_tags, list_of(:string))
field(:community, :string)
Expand Down
8 changes: 7 additions & 1 deletion lib/groupher_server_web/schema/cms/cms_metrics.ex
Original file line number Diff line number Diff line change
Expand Up @@ -161,7 +161,6 @@ defmodule GroupherServerWeb.Schema.CMS.Metrics do
# field(:sort, :sort_input)
field(:when, :when_enum)
field(:sort, :sort_enum)
field(:length, :length_enum)
# @desc "Matching a tag"
# @desc "Added to the menu after this date"
# field(:added_after, :datetime)
Expand Down Expand Up @@ -226,6 +225,13 @@ defmodule GroupherServerWeb.Schema.CMS.Metrics do
field(:sort, :sort_enum)
end

@desc "drink_filter doc"
input_object :paged_drinks_filter do
pagination_args()
article_filter_fields()
field(:sort, :sort_enum)
end

@desc "article_filter doc"
input_object :paged_repos_filter do
@desc "limit of records (default 20), if first > 30, only return 30 at most"
Expand Down
16 changes: 8 additions & 8 deletions lib/groupher_server_web/schema/cms/cms_types.ex
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,6 @@ defmodule GroupherServerWeb.Schema.CMS.Types do
general_article_fields()
comments_fields()

field(:length, :integer)
field(:link_addr, :string)
field(:copy_right, :string)

Expand All @@ -74,7 +73,6 @@ defmodule GroupherServerWeb.Schema.CMS.Types do
field(:desc, :string)
field(:company, :string)
field(:company_link, :string)
field(:length, :integer)
field(:link_addr, :string)
field(:copy_right, :string)

Expand All @@ -87,7 +85,6 @@ defmodule GroupherServerWeb.Schema.CMS.Types do
general_article_fields()
comments_fields()

field(:length, :integer)
field(:link_addr, :string)

timestamp_fields(:article)
Expand All @@ -99,7 +96,6 @@ defmodule GroupherServerWeb.Schema.CMS.Types do
general_article_fields()
comments_fields()

field(:length, :integer)
field(:link_addr, :string)

timestamp_fields(:article)
Expand All @@ -111,7 +107,6 @@ defmodule GroupherServerWeb.Schema.CMS.Types do
general_article_fields()
comments_fields()

field(:length, :integer)
field(:link_addr, :string)

timestamp_fields(:article)
Expand All @@ -123,7 +118,6 @@ defmodule GroupherServerWeb.Schema.CMS.Types do
general_article_fields()
comments_fields()

field(:length, :integer)
field(:link_addr, :string)

timestamp_fields(:article)
Expand All @@ -135,8 +129,14 @@ defmodule GroupherServerWeb.Schema.CMS.Types do
general_article_fields()
comments_fields()

field(:length, :integer)
field(:link_addr, :string)
timestamp_fields(:article)
end

object :drink do
interface(:article)

general_article_fields()
comments_fields()

timestamp_fields(:article)
end
Expand Down
2 changes: 0 additions & 2 deletions lib/groupher_server_web/schema/cms/mutations/blog.ex
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ defmodule GroupherServerWeb.Schema.CMS.Mutations.Blog do
arg(:title, non_null(:string))
arg(:body, non_null(:string))
arg(:digest, non_null(:string))
arg(:length, :integer)
arg(:community_id, non_null(:id))
arg(:link_addr, :string)
arg(:thread, :thread, default_value: :blog)
Expand All @@ -29,7 +28,6 @@ defmodule GroupherServerWeb.Schema.CMS.Mutations.Blog do
arg(:title, :string)
arg(:body, :string)
arg(:digest, :string)
arg(:length, :integer)
arg(:link_addr, :string)

arg(:article_tags, list_of(:id))
Expand Down
52 changes: 52 additions & 0 deletions lib/groupher_server_web/schema/cms/mutations/drink.ex
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
defmodule GroupherServerWeb.Schema.CMS.Mutations.Drink do
@moduledoc """
CMS mutations for drink
"""
use Helper.GqlSchemaSuite
import GroupherServerWeb.Schema.Helper.Mutations

object :cms_drink_mutations do
@desc "create a drink"
field :create_drink, :drink do
arg(:title, non_null(:string))
arg(:body, non_null(:string))
arg(:digest, non_null(:string))
arg(:community_id, non_null(:id))
arg(:thread, :thread, default_value: :drink)
arg(:article_tags, list_of(:id))

middleware(M.Authorize, :login)
middleware(M.PublishThrottle)
resolve(&R.CMS.create_article/3)
middleware(M.Statistics.MakeContribute, for: [:user, :community])
end

@desc "update a cms/drink"
field :update_drink, :drink do
arg(:id, non_null(:id))
arg(:title, :string)
arg(:body, :string)
arg(:digest, :string)

arg(:article_tags, list_of(:id))
# ...

middleware(M.Authorize, :login)
middleware(M.PassportLoader, source: :drink)
middleware(M.Passport, claim: "owner;cms->c?->drink.edit")

resolve(&R.CMS.update_article/3)
end

article_react_mutations(:drink, [
:upvote,
:pin,
:mark_delete,
:delete,
:emotion,
:report,
:sink,
:lock_comment
])
end
end
2 changes: 0 additions & 2 deletions lib/groupher_server_web/schema/cms/mutations/job.ex
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@ defmodule GroupherServerWeb.Schema.CMS.Mutations.Job do
arg(:company_link, :string)
arg(:body, non_null(:string))
arg(:digest, non_null(:string))
arg(:length, non_null(:integer))
arg(:community_id, non_null(:id))

arg(:desc, :string)
Expand All @@ -35,7 +34,6 @@ defmodule GroupherServerWeb.Schema.CMS.Mutations.Job do
arg(:title, :string)
arg(:body, :string)
arg(:digest, :string)
arg(:length, :integer)
arg(:copy_right, :string)
arg(:desc, :string)
arg(:link_addr, :string)
Expand Down
1 change: 0 additions & 1 deletion lib/groupher_server_web/schema/cms/mutations/post.ex
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ defmodule GroupherServerWeb.Schema.CMS.Mutations.Post do
arg(:title, non_null(:string))
arg(:body, non_null(:string))
arg(:digest, non_null(:string))
arg(:length, non_null(:integer))
arg(:link_addr, :string)
arg(:copy_right, :string)
arg(:community_id, non_null(:id))
Expand Down
32 changes: 32 additions & 0 deletions priv/repo/migrations/20210626100316_create_drink.exs
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
defmodule GroupherServer.Repo.Migrations.CreateDrink do
use Ecto.Migration

def change do
create table(:cms_drinks) do
add(:thread, :string)
add(:title, :string)
add(:digest, :string)
add(:views, :integer, default: 0)
add(:mark_delete, :boolean, default: false)
add(:meta, :map)
add(:emotions, :map)
add(:original_community_id, references(:communities, on_delete: :delete_all))
add(:author_id, references(:cms_authors, on_delete: :delete_all), null: false)

add(:active_at, :utc_datetime)

# reaction
add(:upvotes_count, :integer, default: 0)
add(:collects_count, :integer, default: 0)

# comments
add(:comments_participants_count, :integer, default: 0)
add(:comments_count, :integer, default: 0)
add(:comments_participants, :map)

timestamps()
end

create(index(:cms_drinks, [:author_id]))
end
end
Loading