Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings
This repository was archived by the owner on Nov 8, 2022. It is now read-only.

Commitfba92d5

Browse files
committed
refactor(rss): blog create logic wip
1 parentdd18465 commitfba92d5

File tree

4 files changed

+113
-33
lines changed

4 files changed

+113
-33
lines changed

‎lib/groupher_server/cms/cms.ex‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,9 @@ defmodule GroupherServer.CMS do
103103

104104
defdelegatearchive_articles(thread),to:ArticleCURD
105105

106+
defdelegatecreate_blog(community,attrs,user),to:BlogCURD
106107
defdelegatecreate_blog_rss(attrs),to:BlogCURD
108+
defdelegateupdate_blog_rss(attrs),to:BlogCURD
107109
defdelegateblog_rss_feed(rss),to:BlogCURD
108110

109111
defdelegatepaged_citing_contents(type,id,filter),to:CitedArtiment

‎lib/groupher_server/cms/delegates/blog_curd.ex‎

Lines changed: 59 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -3,47 +3,45 @@ defmodule GroupherServer.CMS.Delegate.BlogCURD do
33
CURD operation on post/job ...
44
"""
55
importEcto.Query,warn:false
6+
importHelper.Utils,only:[strip_struct:1]
67

78
# import Helper.Utils, only: [done: 1]
89

910
# import Helper.ErrorCode
1011
# import ShortMaps
1112

1213
# alias Helper.{ORM}
13-
aliasGroupherServer.{CMS,Repo}
14-
aliasCMS.Model.BlogRSS
14+
aliasGroupherServer.{Accounts,CMS,Repo}
15+
aliasCMS.Model.{BlogRSS,Community}
16+
aliasAccounts.Model.User
1517

16-
aliasHelper.{Cache,RSS}
18+
aliasHelper.{ORM,Cache,RSS}
1719

1820
@cache_pool:blog_rss
1921

2022
# alias Ecto.Multi
2123
defblog_rss_feed(rss)whenis_binary(rss)do
22-
get_feed_and_cache(rss)
23-
end
24-
25-
@doc"""
26-
get and cache user'id by user's login
27-
"""
28-
defget_feed_and_cache(rss)do
29-
caseCache.get(@cache_pool,rss)do
30-
{:ok,feed}->{:ok,feed}
31-
{:error,_}->do_get_feed_and_cache(rss)
32-
end
33-
end
34-
35-
defpdo_get_feed_and_cache(rss)do
36-
# {:ok, feed} = RSS.get(rss)
37-
with{:ok,feed}=RSS.get(rss)do
38-
Cache.put(@cache_pool,rss,feed)
24+
with{:ok,feed}<-ORM.find_by(BlogRSS,%{rss:rss})do
3925
{:ok,feed}
26+
else
27+
_->fetch_fresh_feed_and_cache(rss)
4028
end
4129
end
4230

43-
defcreate_blog()do
31+
# attrs 包含 rss, blog_title
32+
# def create_article(%Community{id: cid}, thread, attrs, %User{id: uid}) do
33+
defcreate_blog(%Community{}=community,attrs,%User{}=user)do
4434
# 1. 先判断 rss 是否存在
4535
## 1.1 如果存在,从 cache 中获取
4636
## 1.2 如不存在,则创建一条 RSS
37+
with{:ok,feed}<-blog_rss_feed(attrs.rss)do
38+
do_create_blog(community,attrs,user,feed)
39+
40+
# IO.inspect(feed, label: "create blog")
41+
# 通过 feed 有没有 id 来 insert / update
42+
# 通过 blog_title, 组合 attrs 传给 create_article
43+
{:ok,:pass}
44+
end
4745

4846
# 2. 创建 blog
4947
## 2.1 blog +字段 rss, author
@@ -52,6 +50,14 @@ defmodule GroupherServer.CMS.Delegate.BlogCURD do
5250
# 前台获取作者信息的时候从 rss 表读取
5351
end
5452

53+
defpdo_create_blog(%Community{id:cid},attrs,%User{id:uid},%{id:id}=feed)do
54+
IO.inspect("rss 记录存在, 直接创建 blog",label:"do_create_blog")
55+
end
56+
57+
defpdo_create_blog(%Community{id:cid},attrs,%User{id:uid},feed)do
58+
IO.inspect("rss 记录不存在, 先创建 rss, 再创建 blog",label:"do_create_blog")
59+
end
60+
5561
defcreate_blog_rss(attrs)do
5662
history_feed=Map.get(attrs,:history_feed)
5763
attrs=attrs|>Map.drop([:history_feed])
@@ -62,6 +68,20 @@ defmodule GroupherServer.CMS.Delegate.BlogCURD do
6268
|>Repo.insert()
6369
end
6470

71+
defupdate_blog_rss(%{rss:rss}=attrs)do
72+
with{:ok,blog_rss}<-ORM.find_by(BlogRSS,rss:rss)do
73+
history_feed=
74+
Map.get(attrs,:history_feed,Enum.map(blog_rss.history_feed,&strip_struct(&1)))
75+
76+
attrs=attrs|>Map.drop([:history_feed])
77+
78+
%BlogRSS{}
79+
|>Ecto.Changeset.change(attrs)
80+
|>Ecto.Changeset.put_embed(:history_feed,history_feed)
81+
|>Repo.insert()
82+
end
83+
end
84+
6585
# create done
6686
# defp result({:ok, %{set_active_at_timestamp: result}}) do
6787
# {:ok, result}
@@ -74,4 +94,22 @@ defmodule GroupherServer.CMS.Delegate.BlogCURD do
7494
# end
7595

7696
# defp result({:error, _, result, _steps}), do: {:error, result}
97+
98+
@doc"""
99+
get and cache feed by rss address as key
100+
"""
101+
deffetch_fresh_feed_and_cache(rss)do
102+
caseCache.get(@cache_pool,rss)do
103+
{:ok,feed}->{:ok,feed}
104+
{:error,_}->get_feed_and_cache(rss)
105+
end
106+
end
107+
108+
defpget_feed_and_cache(rss)do
109+
# {:ok, feed} = RSS.get(rss)
110+
with{:ok,feed}=RSS.get(rss)do
111+
Cache.put(@cache_pool,rss,feed)
112+
{:ok,feed}
113+
end
114+
end
77115
end

‎lib/helper/RSS.ex‎

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,12 @@ defmodule Helper.RSS do
22
@moduledoc"""
33
RSS get and parser
44
"""
5-
defget(addr)do
6-
with{:ok,%{body:body}}<-HTTPoison.get(addr)do
7-
rss_parser(body)
5+
importHelper.Utils,only:[done:1]
6+
7+
defget(rss)do
8+
with{:ok,%{body:body}}<-HTTPoison.get(rss),
9+
{:ok,blog_rss}<-rss_parser(body)do
10+
blog_rss|>Map.merge(%{rss:rss})|>done
811
else
912
error->
1013
IO.inspect(error,label:"error")

‎test/helper/rss_test.exs‎

Lines changed: 46 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,50 @@
11
defmoduleGroupherServer.Test.Helper.RSSTestdo
2+
@moduledocfalse
23
useGroupherServer.TestTools
34

45
aliasGroupherServer.CMS
56
aliasHelper.{Cache}
67

78
@cache_pool:blog_rss
9+
@rssmock_rss_addr()
810

9-
describe"get rss"do
11+
setupdo
12+
{:ok,community}=db_insert(:community)
13+
{:ok,user}=db_insert(:user)
14+
blog_attrs=mock_attrs(:blog,%{community_id:community.id})
15+
16+
{:ok,~m(community user blog_attrs)a}
17+
end
18+
19+
describe"blog curd"do
1020
@tag:wip
11-
test"parse and create basic rss."do
12-
rss=mock_rss_addr()
13-
{:ok,feed}=CMS.blog_rss_feed(rss)
14-
feed=feed|>Map.merge(%{rss:"rss-addr, todo"})
21+
test"can create blog",~m(community user blog_attrs)ado
22+
{:ok,feed}=CMS.blog_rss_feed(@rss)
23+
{:ok,_rss_record}=CMS.create_blog_rss(feed)
24+
25+
blog_attrs=mock_attrs(:blog,%{community_id:community.id})
26+
27+
blog_attrs=%{rss:@rss}
28+
{:ok,blog}=CMS.create_blog(community,blog_attrs,user)
29+
end
30+
end
31+
32+
describe"fetch rss & curd"do
33+
@tag:wip2
34+
test"parse and create basic rss"do
35+
{:ok,feed}=CMS.blog_rss_feed(@rss)
36+
feed=feed|>Map.merge(%{rss:@rss})
1537

1638
{:ok,rss_record}=CMS.create_blog_rss(feed)
1739
assertrss_record.history_feed|>length!==0
1840

19-
{:ok,cache}=Cache.get(@cache_pool,rss)
41+
{:ok,cache}=Cache.get(@cache_pool,@rss)
2042
assertnotis_nil(cache)
2143
end
2244

23-
@tag:wip
45+
@tag:wip2
2446
test"create rss with author"do
25-
{:ok,feed}=CMS.blog_rss_feed(mock_rss_addr())
47+
{:ok,feed}=CMS.blog_rss_feed(@rss)
2648

2749
author=%{
2850
name:"mydearxym",
@@ -31,11 +53,26 @@ defmodule GroupherServer.Test.Helper.RSSTest do
3153

3254
feed=
3355
feed
34-
|>Map.merge(%{rss:"rss-addr, todo"})
56+
|>Map.merge(%{rss:@rss})
3557
|>Map.merge(%{author:author})
3658

3759
{:ok,rss_record}=CMS.create_blog_rss(feed)
3860
assertrss_record.author.name=="mydearxym"
3961
end
62+
63+
@tag:wip2
64+
test"update rss with author and exsit feed"do
65+
{:ok,feed}=CMS.blog_rss_feed(@rss)
66+
{:ok,rss_record}=CMS.create_blog_rss(feed)
67+
68+
author=%{
69+
name:"mydearxym",
70+
link:"https://coderplaents.com"
71+
}
72+
73+
attrs=%{rss:rss_record.rss,author:author,history_feed:rss_record.history_feed}
74+
{:ok,rss_record}=CMS.update_blog_rss(attrs)
75+
assertrss_record.author.name=="mydearxym"
76+
end
4077
end
4178
end

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp