资助激励功能合并 #44

Merged
yystopf merged 32 commits from qyzh1996/forgeplus:integrated_blockchain into integrated_blockchain 2021-04-08 18:53:19 +08:00
Contributor

资助激励平台说明手册

1. 安装依赖包

使用了gem包whenever,部署时需要执行命令

bundle install

2. 配置和使用说明

sponsor功能需要实现每月的定时扣款,使用了包whenever。该包依赖于linux cron。

配置文件在config/schedule.rb中,定时任务使用cron表达式,默认的扣款时间为每月20日1点。默认的任务环境为development,如果需要在production环境中使用,请修改第22行的:development为:production。

开启定时任务需要在项目目录下打开系统控制台输入whever -w,删除任务使用whenever -c,如果开启任务后修改了配置文件,使用whenever -i可以更新任务。此外,请保证在系统设定的扣款时间时服务器在运行,否则不会扣款。如果发生这种情况,可以在rails控制台中调用Sponsorship.monthly_payment()手动完成每月扣款。

3. 用户日志

在sponsor功能上线后,为开展激励效果度量研究,我们在后端以及gitea都设计了用户日志,并设计了日志的自动切分,请不要删除较新的日志。

4. 功能机制设计介绍

资助激励平台功能分为三大类别,首先是作为管理资助货币的钱包系统,目前使用硬币作为虚拟货币。可以用于赞助他人。钱包管理页面可查看硬币的余额以及硬币的收支详情。

第二类功能是赞助相关功能。赞助者可选择赞助等级进行赞助。确认赞助后,立即扣除对应额度的硬币。如果硬币不足,则赞助失败。
作为被赞助者,可以修改赞助信息。包括修改自己的赞助介绍信息,以及对赞助等级的增删改。修改或删除赞助等级不会影响到已有的赞助关系。
赞助管理功能,可从自己个人主页进入赞助者管理页面。进入后可查看所有与自己相关的赞助关系。并可以终止某条赞助关系,如果自己是某条持续赞助关系的赞助者则能够修改该关系。

最后是用户日志。为记录用户在Trustie社区的活动轨迹,我们需要设计一个用户日志。
在日志的记录方式上,我们需要记录每次后端的网络请求的信息。此外,为对标GitHub Events中记录的信息,我们还需要在一些修改操作处额外记录信息。由于用户的git操作不经过后端,因此还需要修改Gitea记录必要信息。

5. 系统总体设计

有几个模块(包含Model,View,Controller),以及一个单独的Controller和一个单独的Model。模块包括User,Wallet,CoinChange,Sponsorship,SponsorTier,controller为LogController,model为StoppedSponsorship。User为Trustie已有模块,我们会在User中增加一些与资助相关的属性。Wallet为钱包模块,负责记录管理用户余额,CoinChange负责记录每次余额的变动,Sponsorship为赞助关系模块,SponsorTier为赞助等级模块,LogController负责用户日志的获取和下载,StoppedSponsorship记录已终止的赞助关系。系统模型的ER图见下图,该图描述了各个模型之间的关系。

ER

系统前端的页面设计分为:用户主页,钱包系统,赞助管理,赞助页面,赞助确认页面。其中用户主页为Trustie已有页面,我们需要在上面添加一些按钮。钱包系统会展示用户的余额以及每次余额的变化情况,赞助管理会展示用户所有的赞助关系。赞助页面会展示用户预留的赞助信息。赞助确认页面是赞助者选择了某个赞助等级后的确认赞助页面。

6. 后端模块

后端修改了原有的User结构,增加了自我描述的字段description,和赞助者数量sponsored_num,以及该用户赞助的人的数量sponsor_num。添加了若干模块(Model,View,Controller),包括Wallet,CoinChange,Sponsorship,SponsorTier,添加了Model StoppedSponsorship。

Wallet是钱包,钱包属于用户,每个用户拥有一个钱包,钱包中仅有一个属性,就是balance,表示该钱包的余额。

CoinChange是一次硬币余额变动的记录,它属于某两个钱包,一个是支出钱包,一个是收入钱包,一个钱包可以拥有很多条CoinChange。CoinChange的Model中拥有的属性包括:amount,整数,表示此次变化的数额;reason,字符串,表示此次变化的原因,该属性的值由系统模板生成,例如赞助扣款时会生成支付者向收款者的赞助支付。CoinChange的控制器仅有两个方法:列出所有的CoinChange,列出某个用户所有的CoinChange。

Sponsorship表示某条赞助关系,它属于两个用户,一个是开发者,一个是赞助者。Sponsorship的Model还有三个属性,一个是amount,表示这个赞助关系的支付金额,一个是total_amount,表示这个赞助关系已经总共支付了多少金额,一个是visible,表示该条关系是否公开。

StoppedSponsorship表示某条已经终止的赞助关系,它和Sponsorship完全一样,但是只由Sponsorship的stop方法产生。

SponsorTier表示某个赞助等级,它属于一个用户。它的模型中有两个属性,一个是tier,表示该等级的金额,一个是description,表示开发者对该等级的描述。

此外,还修改了ApplicationController,我们增加了after_action,会记录用户日志。

新增了LogController,该控制器有两个动作,一个是list,该动作会返回日志文件夹下的文件列表。一个是download,该动作会根据参数返回一个日志文件。

7. 前端模块

前端修改了用户主页。在用户主页上添加了赞助按钮,点击会跳转到用户的赞助页面,如果登录用户访问了其他用户的主页,则该按钮显示“赞助”,当用户访问了自己的主页,则该按钮显示的文字为“赞助信息修改”。在左边的菜单栏中增加了赞助相关的条目,包括钱包管理和赞助管理。

新增了页面Wallet。该页面由用户从个人主页的我的钱包进入。进入后会显示钱包余额,以及每次钱包的余额变动。

新增了赞助管理页面SponsorManagement。该页面由个人主页的赞助管理进入。该页面可以查看所有与自己相关的赞助关系,会按照我赞助的、赞助我的、进行中的赞助关系、已终止的关系进行区分。如果是一个未终止的赞助关系,还会在该条目的右侧显示一个“终止赞助关系”的按钮。如果用户是某条进行中关系的赞助者,还会显示一个“修改赞助关系”的按钮。

新增了赞助页面Sponsor。该页面会显示对应用户的头像、名称,并展示其自我介绍,以及公开的部分赞助者。如果用户访问了其他人的赞助页面,在页面右侧会有用户预留的赞助等级。可以选择某个等级,点击选择按钮会跳转到赞助确认页面。如果用户访问了自己的赞助页面,则会在自我介绍处出现修改按钮。在右侧的赞助等级列表中也会有修改按钮和删除按钮。在赞助等级列表的底部有新增赞助等级按钮。

新增了页面SponsorConfirmation。该页面会显示谁是被赞助者,谁是赞助者,以及两方的用户信息等。会展示所选赞助等级的金额、描述。该页面能够选择是单次赞助还是持续赞助,以及赞助关系是否可见。如果点击确认赞助,并且后端成功生成了赞助关系,则页面会显示赞助成功,否则会显示赞助失败的原因。

8. Gitea日志

新增:获取日志列表和下载日志的接口。

新增:在git push操作时,服务器会记录新的commit信息以及分支变化情况。这个记录会保存在access log中,请保证access log是激活的。激活方式需要修改配置文件。可在配置文件的[log]区加入以下两行:

ENABLE_ACCESS_LOG = true
ACCESS_LOG_TEMPLATE = {login: {{.Identity}}, time: {{.Start.Format "2006-01-02 15:04:05 -0700" }}, method: {{.Ctx.Req.Method}}, uri: {{.Ctx.Req.URL.RequestURI}},  proto:{{.Ctx.Req.Proto}}, response_code: {{.ResponseWriter.Status}}, agent: {{.Ctx.Req.UserAgent}}, request_body: } 
# 资助激励平台说明手册 ## 1. 安装依赖包 使用了gem包whenever,部署时需要执行命令 ``` bundle install ``` ## 2. 配置和使用说明 sponsor功能需要实现每月的定时扣款,使用了包whenever。该包依赖于linux cron。 配置文件在config/schedule.rb中,定时任务使用cron表达式,默认的扣款时间为每月20日1点。**<font color=#FF0000>默认的任务环境为development</font>**,如果需要在production环境中使用,请修改第22行的:development为:production。 开启定时任务需要在项目目录下打开系统控制台输入whever -w,删除任务使用whenever -c,如果开启任务后修改了配置文件,使用whenever -i可以更新任务。此外,请保证在系统设定的扣款时间时服务器在运行,否则不会扣款。如果发生这种情况,可以在rails控制台中调用Sponsorship.monthly_payment()手动完成每月扣款。 ## 3. 用户日志 在sponsor功能上线后,为开展激励效果度量研究,我们在后端以及gitea都设计了用户日志,并设计了日志的自动切分,请不要删除较新的日志。 ## 4. 功能机制设计介绍 资助激励平台功能分为三大类别,首先是作为管理资助货币的钱包系统,目前使用硬币作为虚拟货币。可以用于赞助他人。钱包管理页面可查看硬币的余额以及硬币的收支详情。 第二类功能是赞助相关功能。赞助者可选择赞助等级进行赞助。确认赞助后,立即扣除对应额度的硬币。如果硬币不足,则赞助失败。 作为被赞助者,可以修改赞助信息。包括修改自己的赞助介绍信息,以及对赞助等级的增删改。修改或删除赞助等级不会影响到已有的赞助关系。 赞助管理功能,可从自己个人主页进入赞助者管理页面。进入后可查看所有与自己相关的赞助关系。并可以终止某条赞助关系,如果自己是某条持续赞助关系的赞助者则能够修改该关系。 最后是用户日志。为记录用户在Trustie社区的活动轨迹,我们需要设计一个用户日志。 在日志的记录方式上,我们需要记录每次后端的网络请求的信息。此外,为对标GitHub Events中记录的信息,我们还需要在一些修改操作处额外记录信息。由于用户的git操作不经过后端,因此还需要修改Gitea记录必要信息。 ## 5. 系统总体设计 有几个模块(包含Model,View,Controller),以及一个单独的Controller和一个单独的Model。模块包括User,Wallet,CoinChange,Sponsorship,SponsorTier,controller为LogController,model为StoppedSponsorship。User为Trustie已有模块,我们会在User中增加一些与资助相关的属性。Wallet为钱包模块,负责记录管理用户余额,CoinChange负责记录每次余额的变动,Sponsorship为赞助关系模块,SponsorTier为赞助等级模块,LogController负责用户日志的获取和下载,StoppedSponsorship记录已终止的赞助关系。系统模型的ER图见下图,该图描述了各个模型之间的关系。 ![ER](/api/attachments/357702 "ER") 系统前端的页面设计分为:用户主页,钱包系统,赞助管理,赞助页面,赞助确认页面。其中用户主页为Trustie已有页面,我们需要在上面添加一些按钮。钱包系统会展示用户的余额以及每次余额的变化情况,赞助管理会展示用户所有的赞助关系。赞助页面会展示用户预留的赞助信息。赞助确认页面是赞助者选择了某个赞助等级后的确认赞助页面。 ## 6. 后端模块 后端修改了原有的User结构,增加了自我描述的字段description,和赞助者数量sponsored_num,以及该用户赞助的人的数量sponsor_num。添加了若干模块(Model,View,Controller),包括Wallet,CoinChange,Sponsorship,SponsorTier,添加了Model StoppedSponsorship。 Wallet是钱包,钱包属于用户,每个用户拥有一个钱包,钱包中仅有一个属性,就是balance,表示该钱包的余额。 CoinChange是一次硬币余额变动的记录,它属于某两个钱包,一个是支出钱包,一个是收入钱包,一个钱包可以拥有很多条CoinChange。CoinChange的Model中拥有的属性包括:amount,整数,表示此次变化的数额;reason,字符串,表示此次变化的原因,该属性的值由系统模板生成,例如赞助扣款时会生成支付者向收款者的赞助支付。CoinChange的控制器仅有两个方法:列出所有的CoinChange,列出某个用户所有的CoinChange。 Sponsorship表示某条赞助关系,它属于两个用户,一个是开发者,一个是赞助者。Sponsorship的Model还有三个属性,一个是amount,表示这个赞助关系的支付金额,一个是total_amount,表示这个赞助关系已经总共支付了多少金额,一个是visible,表示该条关系是否公开。 StoppedSponsorship表示某条已经终止的赞助关系,它和Sponsorship完全一样,但是只由Sponsorship的stop方法产生。 SponsorTier表示某个赞助等级,它属于一个用户。它的模型中有两个属性,一个是tier,表示该等级的金额,一个是description,表示开发者对该等级的描述。 此外,还修改了ApplicationController,我们增加了after_action,会记录用户日志。 新增了LogController,该控制器有两个动作,一个是list,该动作会返回日志文件夹下的文件列表。一个是download,该动作会根据参数返回一个日志文件。 ## 7. 前端模块 前端修改了用户主页。在用户主页上添加了赞助按钮,点击会跳转到用户的赞助页面,如果登录用户访问了其他用户的主页,则该按钮显示“赞助”,当用户访问了自己的主页,则该按钮显示的文字为“赞助信息修改”。在左边的菜单栏中增加了赞助相关的条目,包括钱包管理和赞助管理。 新增了页面Wallet。该页面由用户从个人主页的我的钱包进入。进入后会显示钱包余额,以及每次钱包的余额变动。 新增了赞助管理页面SponsorManagement。该页面由个人主页的赞助管理进入。该页面可以查看所有与自己相关的赞助关系,会按照我赞助的、赞助我的、进行中的赞助关系、已终止的关系进行区分。如果是一个未终止的赞助关系,还会在该条目的右侧显示一个“终止赞助关系”的按钮。如果用户是某条进行中关系的赞助者,还会显示一个“修改赞助关系”的按钮。 新增了赞助页面Sponsor。该页面会显示对应用户的头像、名称,并展示其自我介绍,以及公开的部分赞助者。如果用户访问了其他人的赞助页面,在页面右侧会有用户预留的赞助等级。可以选择某个等级,点击选择按钮会跳转到赞助确认页面。如果用户访问了自己的赞助页面,则会在自我介绍处出现修改按钮。在右侧的赞助等级列表中也会有修改按钮和删除按钮。在赞助等级列表的底部有新增赞助等级按钮。 新增了页面SponsorConfirmation。该页面会显示谁是被赞助者,谁是赞助者,以及两方的用户信息等。会展示所选赞助等级的金额、描述。该页面能够选择是单次赞助还是持续赞助,以及赞助关系是否可见。如果点击确认赞助,并且后端成功生成了赞助关系,则页面会显示赞助成功,否则会显示赞助失败的原因。 ## 8. Gitea日志 新增:获取日志列表和下载日志的接口。 新增:在git push操作时,服务器会记录新的commit信息以及分支变化情况。这个记录会保存在access log中,请保证access log是激活的。激活方式需要修改配置文件。可在配置文件的[log]区加入以下两行: ``` ENABLE_ACCESS_LOG = true ACCESS_LOG_TEMPLATE = {login: {{.Identity}}, time: {{.Start.Format "2006-01-02 15:04:05 -0700" }}, method: {{.Ctx.Req.Method}}, uri: {{.Ctx.Req.URL.RequestURI}}, proto:{{.Ctx.Req.Proto}}, response_code: {{.ResponseWriter.Status}}, agent: {{.Ctx.Req.UserAgent}}, request_body: } ``` <!-- 添加了modules/userlog模块 修改了routers/repo/http.go 添加了routers/api/v1/trace/trace.go 修改了routers/api/v1/api.go -->
qyzh1996 added 32 commits 2021-04-08 18:46:48 +08:00
yystopf merged commit 9314d134be into integrated_blockchain 2021-04-08 18:53:19 +08:00
Sign in to join this conversation.
No reviewers
No Milestone
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: Gitlink/forgeplus#44
No description provided.