From 86d634d94fc14ab6ab510205857dd71feb011fc6 Mon Sep 17 00:00:00 2001 From: yystopf Date: Thu, 9 Sep 2021 16:32:13 +0800 Subject: [PATCH 01/38] add: notice message skeletal code --- app/controllers/users/messages_controller.rb | 121 +++ app/docs/slate/source/includes/_users.md | 250 ++++- app/libs/notice.rb | 21 + app/models/message_template.rb | 14 + app/models/message_template/issue_assigned.rb | 15 + .../message_template/issue_assigner_expire.rb | 15 + app/models/message_template/issue_atme.rb | 15 + app/models/message_template/issue_changed.rb | 15 + .../message_template/issue_creator_expire.rb | 15 + app/models/message_template/issue_deleted.rb | 15 + app/models/message_template/issue_journal.rb | 15 + app/models/message_template/login_ip_tip.rb | 15 + .../message_template/organization_joined.rb | 15 + .../message_template/organization_left.rb | 15 + .../message_template/organization_role.rb | 15 + app/models/message_template/project_delete.rb | 15 + .../message_template/project_followed.rb | 15 + app/models/message_template/project_forked.rb | 15 + app/models/message_template/project_issue.rb | 15 + app/models/message_template/project_joined.rb | 15 + app/models/message_template/project_left.rb | 16 + .../message_template/project_member_joined.rb | 15 + .../message_template/project_member_left.rb | 15 + .../message_template/project_milestone.rb | 15 + .../message_template/project_praised.rb | 15 + .../message_template/project_pull_request.rb | 15 + app/models/message_template/project_role.rb | 15 + .../project_setting_changed.rb | 15 + .../message_template/project_transfer.rb | 15 + .../message_template/project_version.rb | 15 + .../message_template/pull_request_assigned.rb | 15 + .../message_template/pull_request_atme.rb | 15 + .../message_template/pull_request_changed.rb | 15 + .../message_template/pull_request_journal.rb | 15 + app/services/notice/client_service.rb | 108 +++ app/views/users/get_user_info.json.jbuilder | 3 +- .../users/messages/_message.json.jbuilder | 22 + app/views/users/messages/index.json.jbuilder | 7 + config/configuration.yml.example | 3 + config/routes.rb | 7 + ...20210909030759_create_message_templates.rb | 11 + public/docs/api.html | 909 +++++++++++++----- spec/models/message_template_spec.rb | 5 + 43 files changed, 1696 insertions(+), 236 deletions(-) create mode 100644 app/controllers/users/messages_controller.rb create mode 100644 app/libs/notice.rb create mode 100644 app/models/message_template.rb create mode 100644 app/models/message_template/issue_assigned.rb create mode 100644 app/models/message_template/issue_assigner_expire.rb create mode 100644 app/models/message_template/issue_atme.rb create mode 100644 app/models/message_template/issue_changed.rb create mode 100644 app/models/message_template/issue_creator_expire.rb create mode 100644 app/models/message_template/issue_deleted.rb create mode 100644 app/models/message_template/issue_journal.rb create mode 100644 app/models/message_template/login_ip_tip.rb create mode 100644 app/models/message_template/organization_joined.rb create mode 100644 app/models/message_template/organization_left.rb create mode 100644 app/models/message_template/organization_role.rb create mode 100644 app/models/message_template/project_delete.rb create mode 100644 app/models/message_template/project_followed.rb create mode 100644 app/models/message_template/project_forked.rb create mode 100644 app/models/message_template/project_issue.rb create mode 100644 app/models/message_template/project_joined.rb create mode 100644 app/models/message_template/project_left.rb create mode 100644 app/models/message_template/project_member_joined.rb create mode 100644 app/models/message_template/project_member_left.rb create mode 100644 app/models/message_template/project_milestone.rb create mode 100644 app/models/message_template/project_praised.rb create mode 100644 app/models/message_template/project_pull_request.rb create mode 100644 app/models/message_template/project_role.rb create mode 100644 app/models/message_template/project_setting_changed.rb create mode 100644 app/models/message_template/project_transfer.rb create mode 100644 app/models/message_template/project_version.rb create mode 100644 app/models/message_template/pull_request_assigned.rb create mode 100644 app/models/message_template/pull_request_atme.rb create mode 100644 app/models/message_template/pull_request_changed.rb create mode 100644 app/models/message_template/pull_request_journal.rb create mode 100644 app/services/notice/client_service.rb create mode 100644 app/views/users/messages/_message.json.jbuilder create mode 100644 app/views/users/messages/index.json.jbuilder create mode 100644 db/migrate/20210909030759_create_message_templates.rb create mode 100644 spec/models/message_template_spec.rb diff --git a/app/controllers/users/messages_controller.rb b/app/controllers/users/messages_controller.rb new file mode 100644 index 000000000..0433d41ad --- /dev/null +++ b/app/controllers/users/messages_controller.rb @@ -0,0 +1,121 @@ +class Users::MessagesController < Users::BaseController + before_action :private_user_resources! + + def index + data = { + "receiver": 2, + "type": @message_type, + "unread_total": 5, + "unread_notification": 3, + "unread_atme": 2, + "records": [ + { + "id": 1, + "sender": 5, + "receiver": 2, + "content": "Atme Message Content 1", + "status": 1, + "type": 2, + "source": "PullRequestAtme", + "notification_url": "http://www.baidu.com", + "created_at": "2021-09-09 14:34:40" + }, + { + "id": 2, + "sender": 4, + "receiver": 2, + "content": "Atme Message Content 2", + "status": 0, + "type": 2, + "source": "IssueAtme", + "notification_url": "http://www.baidu.com", + "created_at": "2021-09-09 14:34:40" + }, + { + "id": 3, + "sender": -1, + "receiver": 2, + "content": "Notification Message Content 1", + "status": 1, + "type": 1, + "source": "IssueDelete", + "notification_url": "http://www.baidu.com", + "created_at": "2021-09-09 14:34:40" + }, + { + "id": 4, + "sender": -1, + "receiver": 2, + "content": "Notification Message Content 2", + "status": 0, + "type": 1, + "source": "IssueChanged", + "notification_url": "http://www.baidu.com", + "created_at": "2021-09-09 14:34:40" + }, + { + "id": 5, + "sender": -1, + "receiver": 2, + "content": "Notification Message Content 3", + "status": 0, + "type": 1, + "source": "ProjectJoined", + "notification_url": "http://www.baidu.com", + "created_at": "2021-09-09 14:34:40" + } + ], + "records_count": 5, + "page_num": 1, + "total_page_size": 1, + "page_size": 10 + } + result = [1, "请求成功", data] + return render_error if result.nil? + puts result + @data = result[2].stringify_keys + + end + + def create + return render_forbidden unless %w(3).include(@message_type) + render_ok + end + + def delete + return render_forbidden unless %w(2).include(@message_type) + render_ok + end + + def read + render_ok + end + + private + def message_type + @message_type = begin + case params[:type] + when "notification" + 1 + when "atme" + 2 + else + -1 + end + end + end + + def message_params + { + sender: current_user.id, + reservers: @receiver.id, + type: @message_type, + content: params[:content] + } + end + + + def find_receiver + @receiver = User.find_by(login: params[:receiver_login]) + end +end \ No newline at end of file diff --git a/app/docs/slate/source/includes/_users.md b/app/docs/slate/source/includes/_users.md index bb4fd2b66..f49fdcf6b 100644 --- a/app/docs/slate/source/includes/_users.md +++ b/app/docs/slate/source/includes/_users.md @@ -1,7 +1,7 @@ # Users @@ -47,6 +47,254 @@ await octokit.request('GET /api/users/me.json') Success Data. +## 用户消息列表 +获取用户消息列表 + +> 示例: + +```shell +curl -X GET http://localhost:3000/api/users/:login/messages.json +``` + +```javascript +await octokit.request('GET /api/users/:login/messages.json') +``` + +### HTTP 请求 +`GET api/users/yystopf/messages.json` + +### 请求字段说明: +参数 | 类型 | 字段说明 +--------- | ----------- | ----------- +|type | string | 消息类型,不传为所有消息,notification为系统消息,atme为@我消息| +|status | integer | 是否已读,不传为所有消息,0为未读,1为已读 | +|limit | integer | 每页个数 | +|page | integer | 页码 | + +### 返回字段说明: +参数 | 类型 | 字段说明 +--------- | ----------- | ----------- +|total_count | integer | 消息总数 | +|type | string | 消息类型 | +|unread_notification | integer | 未读系统通知数量 | +|unread_atme | integer | 未读@我数量 | +|messages.id | integer | 消息id | +|messages.status | integer | 消息是否已读,0为未读,1为已读 | +|messages.content | string | 消息内容 | +|messages.notification_url | string | 消息跳转地址 | +|messages.source | string | 消息来源 | +|messages.type | string | 消息类型,notification为系统消息,atme为@我消息| +|sender | object | 消息发送者 | + +#### 消息来源source字段说明 +类型|说明 +--------- | ----------- +|IssueAssigned | 有新指派给我的易修 | +|IssueAssignerExpire | 我负责的易修截止日期到达最后一天 | +|IssueAtme | 在易修中@我 | +|IssueChanged | 我创建或负责的易修状态变更 | +|IssueCreatorExpire | 我创建的易修截止日期到达最后一天 | +|IssueDeleted | 我创建或负责的易修删除 | +|IssueJournal | 我创建或负责的易修有新的评论 | +|LoginIpTip | 登录异常提示 | +|OrganizationJoined | 账号被拉入组织 | +|OrganizationLeft | 账号被移出组织 | +|OrganizationRole | 账号组织权限变更 | +|ProjectDelete | 我关注的仓库被删除 | +|ProjectFollowed | 我管理的仓库被关注 | +|ProjectForked | 我管理的仓库被复刻 | +|ProjectIssue | 我管理/关注的仓库有新的易修 | +|ProjectJoined | 账号被拉入项目 | +|ProjectLeft | 账号被移出项目 | +|ProjectMemberJoined | 我管理的仓库有成员加入 | +|ProjectMemberLeft | 我管理的仓库有成员移出 | +|ProjectMilestone | 我管理的仓库有新的里程碑 | +|ProjectPraised | 我管理的仓库被点赞 | +|ProjectPullRequest | 我管理/关注的仓库有新的合并请求 | +|ProjectRole | 账号仓库权限变更 | +|ProjectSettingChanged | 我管理的仓库项目设置被更改 | +|ProjectTransfer | 我关注的仓库被转移 | +|ProjectVersion | 我关注的仓库有新的发行版 | +|PullRequestAssigned | 有新指派给我的合并请求 | +|PullReuqestAtme | 在合并请求中@我 | +|PullRequestChanged | 我创建或负责的合并请求状态变更 | +|PullRequestJournal | 我创建或负责的合并请求有新的评论 | + + +> 返回的JSON示例: + +```json +{ + "total_count": 5, + "type": "", + "unread_notification": 3, + "unread_atme": 2, + "messages": [ + { + "id": 1, + "status": 1, + "content": "Atme Message Content 1", + "notification_url": "http://www.baidu.com", + "source": "PullRequestAtme", + "type": "atme", + "sender": { + "id": 5, + "type": "User", + "name": "testforge2", + "login": "testforge2", + "image_url": "system/lets/letter_avatars/2/T/236_177_85/120.png" + } + }, + { + "id": 2, + "status": 0, + "content": "Atme Message Content 2", + "notification_url": "http://www.baidu.com", + "source": "IssueAtme", + "type": "atme", + "sender": { + "id": 4, + "type": "User", + "name": "testforge1", + "login": "testforge1", + "image_url": "system/lets/letter_avatars/2/T/19_237_174/120.png" + } + }, + { + "id": 3, + "status": 1, + "content": "Notification Message Content 1", + "notification_url": "http://www.baidu.com", + "source": "IssueDelete", + "type": "notification" + }, + { + "id": 4, + "status": 0, + "content": "Notification Message Content 2", + "notification_url": "http://www.baidu.com", + "source": "IssueChanged", + "type": "notification" + }, + { + "id": 5, + "status": 0, + "content": "Notification Message Content 3", + "notification_url": "http://www.baidu.com", + "source": "ProjectJoined", + "type": "notification" + } + ] +} +``` + + +## 发送消息 +发送消息 + +> 示例: + +```shell +curl -X POST http://localhost:3000/api/users/:login/messages.json +``` + +```javascript +await octokit.request('POST /api/users/:login/messages.json') +``` + +### HTTP 请求 +`POST api/users/yystopf/messages.json` + +### 请求字段说明: +参数 | 类型 | 字段说明 +--------- | ----------- | ----------- +|type | string | 消息类型 | +|recervers_login | array | 需要发送消息的用户名数组| +|content | string | 消息内容 | + +> 返回的JSON示例: + +```json +{ + "status": 0, + "message": "success" +} +``` + + +## 阅读消息 +阅读消息 + +> 示例: + +```shell +curl -X POST http://localhost:3000/api/users/:login/messages/read.json +``` + +```javascript +await octokit.request('POST /api/users/:login/messages/read.json') +``` + +### HTTP 请求 +`POST api/users/yystopf/messages/read.json` + +### 请求字段说明: +参数 | 类型 | 字段说明 +--------- | ----------- | ----------- +|type | string | 消息类型,不传为所有消息,notification为系统消息,atme为@我消息| +|ids | array | 消息id数组,包含-1则把所有未读消息标记为已读| + +> 返回的JSON示例: + +```json +{ + "status": 0, + "message": "success" +} +``` + + +## 删除消息 +删除消息 + +> 示例: + +```shell +curl -X DELETE http://localhost:3000/api/users/:login/messages.json +``` + +```javascript +await octokit.request('DELETE /api/users/:login/messages.json') +``` + +### HTTP 请求 +`DELETE api/users/yystopf/messages.json` + +### 请求字段说明: +参数 | 类型 | 字段说明 +--------- | ----------- | ----------- +|type | string | 消息类型,atme为@我消息| +|ids | array | 消息id数组,包含-1则把所有消息删除| + +> 返回的JSON示例: + +```json +{ + "status": 0, + "message": "success" +} +``` + + + ## 更改用户信息 更改用户信息 diff --git a/app/libs/notice.rb b/app/libs/notice.rb new file mode 100644 index 000000000..93d5cb42d --- /dev/null +++ b/app/libs/notice.rb @@ -0,0 +1,21 @@ +module Notice + class << self + def notice_config + notice_config = {} + + begin + config = Rails.application.config_for(:configuration).symbolize_keys! + notice_config = config[:notice].symbolize_keys! + raise 'notice config missing' if notice_config.blank? + rescue => exception + raise ex if Rails.env.production? + + puts %Q{\033[33m [warning] gitea config or configuration.yml missing, + please add it or execute 'cp config/configuration.yml.example config/configuration.yml' \033[0m} + notice_config = {} + end + + notice_config + end + end +end \ No newline at end of file diff --git a/app/models/message_template.rb b/app/models/message_template.rb new file mode 100644 index 000000000..f19b77fb8 --- /dev/null +++ b/app/models/message_template.rb @@ -0,0 +1,14 @@ +# == Schema Information +# +# Table name: message_templates +# +# id :integer not null, primary key +# type :string(255) +# sys_notice :text(65535) +# email :text(65535) +# created_at :datetime not null +# updated_at :datetime not null +# + +class MessageTemplate < ApplicationRecord +end diff --git a/app/models/message_template/issue_assigned.rb b/app/models/message_template/issue_assigned.rb new file mode 100644 index 000000000..51e3e6174 --- /dev/null +++ b/app/models/message_template/issue_assigned.rb @@ -0,0 +1,15 @@ +# == Schema Information +# +# Table name: message_templates +# +# id :integer not null, primary key +# type :string(255) +# sys_notice :text(65535) +# email :text(65535) +# created_at :datetime not null +# updated_at :datetime not null +# + +# 有新指派给我的易修 +class MessageTemplate::IssueAssigned < MessageTemplate +end diff --git a/app/models/message_template/issue_assigner_expire.rb b/app/models/message_template/issue_assigner_expire.rb new file mode 100644 index 000000000..03af6163c --- /dev/null +++ b/app/models/message_template/issue_assigner_expire.rb @@ -0,0 +1,15 @@ +# == Schema Information +# +# Table name: message_templates +# +# id :integer not null, primary key +# type :string(255) +# sys_notice :text(65535) +# email :text(65535) +# created_at :datetime not null +# updated_at :datetime not null +# + +# 我负责的易修截止日期到达最后一天 +class MessageTemplate::IssueAssignerExpire < MessageTemplate +end diff --git a/app/models/message_template/issue_atme.rb b/app/models/message_template/issue_atme.rb new file mode 100644 index 000000000..d09155828 --- /dev/null +++ b/app/models/message_template/issue_atme.rb @@ -0,0 +1,15 @@ +# == Schema Information +# +# Table name: message_templates +# +# id :integer not null, primary key +# type :string(255) +# sys_notice :text(65535) +# email :text(65535) +# created_at :datetime not null +# updated_at :datetime not null +# + +# 在易修中@我 +class MessageTemplate::IssueAtme < MessageTemplate +end \ No newline at end of file diff --git a/app/models/message_template/issue_changed.rb b/app/models/message_template/issue_changed.rb new file mode 100644 index 000000000..98772ab0e --- /dev/null +++ b/app/models/message_template/issue_changed.rb @@ -0,0 +1,15 @@ +# == Schema Information +# +# Table name: message_templates +# +# id :integer not null, primary key +# type :string(255) +# sys_notice :text(65535) +# email :text(65535) +# created_at :datetime not null +# updated_at :datetime not null +# + +# 我创建或负责的易修状态变更 +class MessageTemplate::IssueChanged < MessageTemplate +end diff --git a/app/models/message_template/issue_creator_expire.rb b/app/models/message_template/issue_creator_expire.rb new file mode 100644 index 000000000..ee1940714 --- /dev/null +++ b/app/models/message_template/issue_creator_expire.rb @@ -0,0 +1,15 @@ +# == Schema Information +# +# Table name: message_templates +# +# id :integer not null, primary key +# type :string(255) +# sys_notice :text(65535) +# email :text(65535) +# created_at :datetime not null +# updated_at :datetime not null +# + +# 我创建的易修截止日期到达最后一天 +class MessageTemplate::IssueCreatorExpire < MessageTemplate +end diff --git a/app/models/message_template/issue_deleted.rb b/app/models/message_template/issue_deleted.rb new file mode 100644 index 000000000..d25fbffd0 --- /dev/null +++ b/app/models/message_template/issue_deleted.rb @@ -0,0 +1,15 @@ +# == Schema Information +# +# Table name: message_templates +# +# id :integer not null, primary key +# type :string(255) +# sys_notice :text(65535) +# email :text(65535) +# created_at :datetime not null +# updated_at :datetime not null +# + +# 我创建或负责的易修删除 +class MessageTemplate::IssueDeleted < MessageTemplate +end diff --git a/app/models/message_template/issue_journal.rb b/app/models/message_template/issue_journal.rb new file mode 100644 index 000000000..4252704c3 --- /dev/null +++ b/app/models/message_template/issue_journal.rb @@ -0,0 +1,15 @@ +# == Schema Information +# +# Table name: message_templates +# +# id :integer not null, primary key +# type :string(255) +# sys_notice :text(65535) +# email :text(65535) +# created_at :datetime not null +# updated_at :datetime not null +# + +# 我创建或负责的易修有新的评论 +class MessageTemplate::IssueJournal < MessageTemplate +end diff --git a/app/models/message_template/login_ip_tip.rb b/app/models/message_template/login_ip_tip.rb new file mode 100644 index 000000000..a86e03a50 --- /dev/null +++ b/app/models/message_template/login_ip_tip.rb @@ -0,0 +1,15 @@ +# == Schema Information +# +# Table name: message_templates +# +# id :integer not null, primary key +# type :string(255) +# sys_notice :text(65535) +# email :text(65535) +# created_at :datetime not null +# updated_at :datetime not null +# + +# 登录异常提示 +class MessageTemplate::LoginIpTip < MessageTemplate +end diff --git a/app/models/message_template/organization_joined.rb b/app/models/message_template/organization_joined.rb new file mode 100644 index 000000000..4440bb742 --- /dev/null +++ b/app/models/message_template/organization_joined.rb @@ -0,0 +1,15 @@ +# == Schema Information +# +# Table name: message_templates +# +# id :integer not null, primary key +# type :string(255) +# sys_notice :text(65535) +# email :text(65535) +# created_at :datetime not null +# updated_at :datetime not null +# + +# 账号被拉入组织 +class MessageTemplate::OrganizationJoined < MessageTemplate +end diff --git a/app/models/message_template/organization_left.rb b/app/models/message_template/organization_left.rb new file mode 100644 index 000000000..9d346b7b9 --- /dev/null +++ b/app/models/message_template/organization_left.rb @@ -0,0 +1,15 @@ +# == Schema Information +# +# Table name: message_templates +# +# id :integer not null, primary key +# type :string(255) +# sys_notice :text(65535) +# email :text(65535) +# created_at :datetime not null +# updated_at :datetime not null +# + +# 账号被移出组织 +class MessageTemplate::OrganizationLeft < MessageTemplate +end diff --git a/app/models/message_template/organization_role.rb b/app/models/message_template/organization_role.rb new file mode 100644 index 000000000..1222a6242 --- /dev/null +++ b/app/models/message_template/organization_role.rb @@ -0,0 +1,15 @@ +# == Schema Information +# +# Table name: message_templates +# +# id :integer not null, primary key +# type :string(255) +# sys_notice :text(65535) +# email :text(65535) +# created_at :datetime not null +# updated_at :datetime not null +# + +# 账号组织权限变更 +class MessageTemplate::OrganizationRole < MessageTemplate +end diff --git a/app/models/message_template/project_delete.rb b/app/models/message_template/project_delete.rb new file mode 100644 index 000000000..b03813f3a --- /dev/null +++ b/app/models/message_template/project_delete.rb @@ -0,0 +1,15 @@ +# == Schema Information +# +# Table name: message_templates +# +# id :integer not null, primary key +# type :string(255) +# sys_notice :text(65535) +# email :text(65535) +# created_at :datetime not null +# updated_at :datetime not null +# + +# 我关注的仓库被删除 +class MessageTemplate::ProjectDelete < MessageTemplate +end diff --git a/app/models/message_template/project_followed.rb b/app/models/message_template/project_followed.rb new file mode 100644 index 000000000..654e19c7e --- /dev/null +++ b/app/models/message_template/project_followed.rb @@ -0,0 +1,15 @@ +# == Schema Information +# +# Table name: message_templates +# +# id :integer not null, primary key +# type :string(255) +# sys_notice :text(65535) +# email :text(65535) +# created_at :datetime not null +# updated_at :datetime not null +# + +# 我管理的仓库被关注 +class MessageTemplate::ProjectFollowed < MessageTemplate +end diff --git a/app/models/message_template/project_forked.rb b/app/models/message_template/project_forked.rb new file mode 100644 index 000000000..711460c01 --- /dev/null +++ b/app/models/message_template/project_forked.rb @@ -0,0 +1,15 @@ +# == Schema Information +# +# Table name: message_templates +# +# id :integer not null, primary key +# type :string(255) +# sys_notice :text(65535) +# email :text(65535) +# created_at :datetime not null +# updated_at :datetime not null +# + +# 我管理的仓库被复刻 +class MessageTemplate::ProjectForked < MessageTemplate +end diff --git a/app/models/message_template/project_issue.rb b/app/models/message_template/project_issue.rb new file mode 100644 index 000000000..fc34d9a52 --- /dev/null +++ b/app/models/message_template/project_issue.rb @@ -0,0 +1,15 @@ +# == Schema Information +# +# Table name: message_templates +# +# id :integer not null, primary key +# type :string(255) +# sys_notice :text(65535) +# email :text(65535) +# created_at :datetime not null +# updated_at :datetime not null +# + +# 我管理/关注的仓库有新的易修 +class MessageTemplate::ProjectIssue < MessageTemplate +end diff --git a/app/models/message_template/project_joined.rb b/app/models/message_template/project_joined.rb new file mode 100644 index 000000000..6d21a39e1 --- /dev/null +++ b/app/models/message_template/project_joined.rb @@ -0,0 +1,15 @@ +# == Schema Information +# +# Table name: message_templates +# +# id :integer not null, primary key +# type :string(255) +# sys_notice :text(65535) +# email :text(65535) +# created_at :datetime not null +# updated_at :datetime not null +# + +# 账号被拉入项目 +class MessageTemplate::ProjectJoined < MessageTemplate +end diff --git a/app/models/message_template/project_left.rb b/app/models/message_template/project_left.rb new file mode 100644 index 000000000..f95467f0a --- /dev/null +++ b/app/models/message_template/project_left.rb @@ -0,0 +1,16 @@ +# == Schema Information +# +# Table name: message_templates +# +# id :integer not null, primary key +# type :string(255) +# sys_notice :text(65535) +# email :text(65535) +# created_at :datetime not null +# updated_at :datetime not null +# + +# 账号被移出项目 +class MessageTemplate::ProjectLeft < MessageTemplate + +end diff --git a/app/models/message_template/project_member_joined.rb b/app/models/message_template/project_member_joined.rb new file mode 100644 index 000000000..6e4e1accc --- /dev/null +++ b/app/models/message_template/project_member_joined.rb @@ -0,0 +1,15 @@ +# == Schema Information +# +# Table name: message_templates +# +# id :integer not null, primary key +# type :string(255) +# sys_notice :text(65535) +# email :text(65535) +# created_at :datetime not null +# updated_at :datetime not null +# + +# 我管理的仓库有成员加入 +class MessageTemplate::ProjectMemberJoined < MessageTemplate +end diff --git a/app/models/message_template/project_member_left.rb b/app/models/message_template/project_member_left.rb new file mode 100644 index 000000000..3259034d7 --- /dev/null +++ b/app/models/message_template/project_member_left.rb @@ -0,0 +1,15 @@ +# == Schema Information +# +# Table name: message_templates +# +# id :integer not null, primary key +# type :string(255) +# sys_notice :text(65535) +# email :text(65535) +# created_at :datetime not null +# updated_at :datetime not null +# + +# 我管理的仓库有成员移出 +class MessageTemplate::ProjectMemberLeft < MessageTemplate +end diff --git a/app/models/message_template/project_milestone.rb b/app/models/message_template/project_milestone.rb new file mode 100644 index 000000000..b1ff0b9e2 --- /dev/null +++ b/app/models/message_template/project_milestone.rb @@ -0,0 +1,15 @@ +# == Schema Information +# +# Table name: message_templates +# +# id :integer not null, primary key +# type :string(255) +# sys_notice :text(65535) +# email :text(65535) +# created_at :datetime not null +# updated_at :datetime not null +# + +# 我管理的仓库有新的里程碑 +class MessageTemplate::ProjectMilestone < MessageTemplate +end diff --git a/app/models/message_template/project_praised.rb b/app/models/message_template/project_praised.rb new file mode 100644 index 000000000..ebbdfd93f --- /dev/null +++ b/app/models/message_template/project_praised.rb @@ -0,0 +1,15 @@ +# == Schema Information +# +# Table name: message_templates +# +# id :integer not null, primary key +# type :string(255) +# sys_notice :text(65535) +# email :text(65535) +# created_at :datetime not null +# updated_at :datetime not null +# + +# 我管理的仓库被点赞 +class MessageTemplate::ProjectPraised < MessageTemplate +end diff --git a/app/models/message_template/project_pull_request.rb b/app/models/message_template/project_pull_request.rb new file mode 100644 index 000000000..b1706eb91 --- /dev/null +++ b/app/models/message_template/project_pull_request.rb @@ -0,0 +1,15 @@ +# == Schema Information +# +# Table name: message_templates +# +# id :integer not null, primary key +# type :string(255) +# sys_notice :text(65535) +# email :text(65535) +# created_at :datetime not null +# updated_at :datetime not null +# + +# 我管理/关注的仓库有新的合并请求 +class MessageTemplate::ProjectPullRequest < MessageTemplate +end diff --git a/app/models/message_template/project_role.rb b/app/models/message_template/project_role.rb new file mode 100644 index 000000000..a59df5361 --- /dev/null +++ b/app/models/message_template/project_role.rb @@ -0,0 +1,15 @@ +# == Schema Information +# +# Table name: message_templates +# +# id :integer not null, primary key +# type :string(255) +# sys_notice :text(65535) +# email :text(65535) +# created_at :datetime not null +# updated_at :datetime not null +# + +# 账号仓库权限变更 +class MessageTemplate::ProjectRole < MessageTemplate +end diff --git a/app/models/message_template/project_setting_changed.rb b/app/models/message_template/project_setting_changed.rb new file mode 100644 index 000000000..1c4040f5d --- /dev/null +++ b/app/models/message_template/project_setting_changed.rb @@ -0,0 +1,15 @@ +# == Schema Information +# +# Table name: message_templates +# +# id :integer not null, primary key +# type :string(255) +# sys_notice :text(65535) +# email :text(65535) +# created_at :datetime not null +# updated_at :datetime not null +# + +# 我管理的仓库项目设置被更改 +class MessageTemplate::ProjectSettingChanged < MessageTemplate +end diff --git a/app/models/message_template/project_transfer.rb b/app/models/message_template/project_transfer.rb new file mode 100644 index 000000000..38998d03b --- /dev/null +++ b/app/models/message_template/project_transfer.rb @@ -0,0 +1,15 @@ +# == Schema Information +# +# Table name: message_templates +# +# id :integer not null, primary key +# type :string(255) +# sys_notice :text(65535) +# email :text(65535) +# created_at :datetime not null +# updated_at :datetime not null +# + +# 我关注的仓库被转移 +class MessageTemplate::ProjectTransfer < MessageTemplate +end \ No newline at end of file diff --git a/app/models/message_template/project_version.rb b/app/models/message_template/project_version.rb new file mode 100644 index 000000000..330dfe95d --- /dev/null +++ b/app/models/message_template/project_version.rb @@ -0,0 +1,15 @@ +# == Schema Information +# +# Table name: message_templates +# +# id :integer not null, primary key +# type :string(255) +# sys_notice :text(65535) +# email :text(65535) +# created_at :datetime not null +# updated_at :datetime not null +# + +# 我关注的仓库有新的发行版 +class MessageTemplate::ProjectVersion < MessageTemplate +end diff --git a/app/models/message_template/pull_request_assigned.rb b/app/models/message_template/pull_request_assigned.rb new file mode 100644 index 000000000..1be86530c --- /dev/null +++ b/app/models/message_template/pull_request_assigned.rb @@ -0,0 +1,15 @@ +# == Schema Information +# +# Table name: message_templates +# +# id :integer not null, primary key +# type :string(255) +# sys_notice :text(65535) +# email :text(65535) +# created_at :datetime not null +# updated_at :datetime not null +# + +# 有新指派给我的合并请求 +class MessageTemplate::PullRequestAssigned < MessageTemplate +end diff --git a/app/models/message_template/pull_request_atme.rb b/app/models/message_template/pull_request_atme.rb new file mode 100644 index 000000000..afa7a4006 --- /dev/null +++ b/app/models/message_template/pull_request_atme.rb @@ -0,0 +1,15 @@ +# == Schema Information +# +# Table name: message_templates +# +# id :integer not null, primary key +# type :string(255) +# sys_notice :text(65535) +# email :text(65535) +# created_at :datetime not null +# updated_at :datetime not null +# + +# 在合并请求中@我 +class MessageTemplate::PullReuqestAtme < MessageTemplate +end \ No newline at end of file diff --git a/app/models/message_template/pull_request_changed.rb b/app/models/message_template/pull_request_changed.rb new file mode 100644 index 000000000..002de3a28 --- /dev/null +++ b/app/models/message_template/pull_request_changed.rb @@ -0,0 +1,15 @@ +# == Schema Information +# +# Table name: message_templates +# +# id :integer not null, primary key +# type :string(255) +# sys_notice :text(65535) +# email :text(65535) +# created_at :datetime not null +# updated_at :datetime not null +# + +# 我创建或负责的合并请求状态变更 +class MessageTemplate::PullRequestChanged < MessageTemplate +end diff --git a/app/models/message_template/pull_request_journal.rb b/app/models/message_template/pull_request_journal.rb new file mode 100644 index 000000000..0f79d1663 --- /dev/null +++ b/app/models/message_template/pull_request_journal.rb @@ -0,0 +1,15 @@ +# == Schema Information +# +# Table name: message_templates +# +# id :integer not null, primary key +# type :string(255) +# sys_notice :text(65535) +# email :text(65535) +# created_at :datetime not null +# updated_at :datetime not null +# + +# 我创建或负责的合并请求有新的评论 +class MessageTemplate::PullRequestJournal < MessageTemplate +end diff --git a/app/services/notice/client_service.rb b/app/services/notice/client_service.rb new file mode 100644 index 000000000..a2ada88c6 --- /dev/null +++ b/app/services/notice/client_service.rb @@ -0,0 +1,108 @@ +class Notice::ClientService < ApplicationService + attr_reader :url, :params + + def initialize(options={}) + @url = options[:url] + @params = options[:params] + end + + def post(url, params={}) + puts "[notice][POST] request params: #{params}" + conn.post do |req| + req.url = full_url(url) + req.body = params[:data].to_json + end + end + + def get(url, params={}) + puts "[notice][GET] request params: #{params}" + conn.get do |req| + req.url full_url(url, 'get') + params.each_pair do |key, value| + req.params["#{key}"] = value + end + end + end + + def delete(url, params={}) + puts "[notice][DELETE] request params: #{params}" + conn.delete do |req| + req.url full_url(url) + reb.body = params[:data].to_json + end + end + + def patch(url, params={}) + puts "[notice][PATCH] request params: #{params}" + conn.patch do |req| + req.url full_url(url) + reb.body = params[:data].to_json + end + end + + def put(url, params={}) + puts "[notice][PUT] request params: #{params}" + conn.put do |req| + req.url full_url(url) + reb.body = params[:data].to_json + end + end + + #private + def conn + @client ||= begin + Faraday.new(url: domain) do |req| + req.request :url_encoded + req.headers['Content-Type'] = 'application/json' + req.adapter Faraday.default_adapter + end + end + + @client + end + + def base_url + Notice.notice_config[:base_url] + end + + def domain + Notice.notice_config[:domain] + end + + def platform + Notice.notice_config[:platform] + end + + def api_url + [domain, base_url].join('') + end + + def full_url(api_rest, action='post') + url = [api_url, api_rest].join('').freeze + url = action === 'get' ? url : URI.escape(url) + url = URI.escape(url) unless url.ascii_only? + puts "[notice] request url: #{url}" + return url + end + + def log_error(status, body) + puts "[notice] status: #{status}" + puts "[notice] body: #{body&.force_encoding('UTF-8')}" + end + + def render_response(response) + status = response.status + body = response&.body + + log_error(status, body) + + if status == 200 + if body["code"] == 1 + return [body["code"], body["message"], body["data"]] + else + puts "[notice][ERROR] code: #{body["code"]}" + puts "[notice][ERROR] message: #{body["message"]}" + end + end + end +end \ No newline at end of file diff --git a/app/views/users/get_user_info.json.jbuilder b/app/views/users/get_user_info.json.jbuilder index 067019ef9..bf5ab8822 100644 --- a/app/views/users/get_user_info.json.jbuilder +++ b/app/views/users/get_user_info.json.jbuilder @@ -21,4 +21,5 @@ json.province @user.province json.city @user.city json.custom_department @user.custom_department json.description @user.description -json.(@user, :show_email, :show_department, :show_location) \ No newline at end of file +json.(@user, :show_email, :show_department, :show_location) +json.message_unread_total 5 \ No newline at end of file diff --git a/app/views/users/messages/_message.json.jbuilder b/app/views/users/messages/_message.json.jbuilder new file mode 100644 index 000000000..1d8a9b264 --- /dev/null +++ b/app/views/users/messages/_message.json.jbuilder @@ -0,0 +1,22 @@ +json.id message["id"] +# json.receiver do +# json.partial! '/users/user_simple', locals: {user: current_user} +# end +json.status message["status"] +json.content message["content"] +json.notification_url message["notification_url"] +json.source message["source"] +case message["type"] +when 1 + json.type "notification" +when 2 + json.type "atme" + json.sender do + sender = User.find_by_id(message["sender"]) + if sender.present? + json.partial! '/users/user_simple', locals: {user: sender} + else + json.nil + end + end +end diff --git a/app/views/users/messages/index.json.jbuilder b/app/views/users/messages/index.json.jbuilder new file mode 100644 index 000000000..b16d806b7 --- /dev/null +++ b/app/views/users/messages/index.json.jbuilder @@ -0,0 +1,7 @@ +json.total_count @data["records_count"] +json.type %w(notification atme).include?(params[:type]) ? params[:type] : "" +json.unread_notification @data["unread_notification"] +json.unread_atme @data["unread_atme"] +json.messages @data["records"].each do |message| + json.partial! "message", message: message.stringify_keys +end \ No newline at end of file diff --git a/config/configuration.yml.example b/config/configuration.yml.example index c8fe96ca2..61217d4e7 100644 --- a/config/configuration.yml.example +++ b/config/configuration.yml.example @@ -57,6 +57,9 @@ default: &default domain: 'https://testgit.trustie.net' base_url: '/api/v1' + notice: + domain: '' + base_url: '' production: <<: *default diff --git a/config/routes.rb b/config/routes.rb index dc8892081..2d5bb9ed5 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -300,6 +300,13 @@ Rails.application.routes.draw do # resources :recent_contacts, only: [:index] # resource :private_message_details, only: [:show] # resource :unread_message_info, only: [:show] + + # 通知中心 + resources :messages, only: [:index, :create, :delete] do + collection do + post :read + end + end end resources :tidings, only: [:index] diff --git a/db/migrate/20210909030759_create_message_templates.rb b/db/migrate/20210909030759_create_message_templates.rb new file mode 100644 index 000000000..dbae7f55d --- /dev/null +++ b/db/migrate/20210909030759_create_message_templates.rb @@ -0,0 +1,11 @@ +class CreateMessageTemplates < ActiveRecord::Migration[5.2] + def change + create_table :message_templates do |t| + t.string :type + t.text :sys_notice + t.text :email + + t.timestamps + end + end +end diff --git a/public/docs/api.html b/public/docs/api.html index 35099a4e8..b6083dcd2 100644 --- a/public/docs/api.html +++ b/public/docs/api.html @@ -345,6 +345,18 @@
  • 获取当前登陆用户信息
  • +
  • + 用户消息列表 +
  • +
  • + 发送消息 +
  • +
  • + 阅读消息 +
  • +
  • + 删除消息 +
  • 更改用户信息
  • @@ -909,7 +921,7 @@ Success — a happy kitten is an authenticated kitten!

    Users

    获取当前登陆用户信息

    @@ -971,6 +983,435 @@ Success — a happy kitten is an authenticated kitten! +

    用户消息列表

    +

    获取用户消息列表

    + +
    +

    示例:

    +
    +
    curl -X GET http://localhost:3000/api/users/:login/messages.json
    +
    await octokit.request('GET /api/users/:login/messages.json')
    +

    HTTP 请求

    +

    GET api/users/yystopf/messages.json

    +

    请求字段说明:

    + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    参数类型字段说明
    typestring消息类型,不传为所有消息,notification为系统消息,atme为@我消息
    statusinteger是否已读,不传为所有消息,0为未读,1为已读
    limitinteger每页个数
    pageinteger页码
    +

    返回字段说明:

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    参数类型字段说明
    total_countinteger消息总数
    typestring消息类型
    unread_notificationinteger未读系统通知数量
    unread_atmeinteger未读@我数量
    messages.idinteger消息id
    messages.statusinteger消息是否已读,0为未读,1为已读
    messages.contentstring消息内容
    messages.notification_urlstring消息跳转地址
    messages.sourcestring消息来源
    messages.typestring消息类型,notification为系统消息,atme为@我消息
    senderobject消息发送者
    +

    消息来源source字段说明

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    类型说明
    IssueAssigned有新指派给我的易修
    IssueAssignerExpire我负责的易修截止日期到达最后一天
    IssueAtme在易修中@我
    IssueChanged我创建或负责的易修状态变更
    IssueCreatorExpire我创建的易修截止日期到达最后一天
    IssueDeleted我创建或负责的易修删除
    IssueJournal我创建或负责的易修有新的评论
    LoginIpTip登录异常提示
    OrganizationJoined账号被拉入组织
    OrganizationLeft账号被移出组织
    OrganizationRole账号组织权限变更
    ProjectDelete我关注的仓库被删除
    ProjectFollowed我管理的仓库被关注
    ProjectForked我管理的仓库被复刻
    ProjectIssue我管理/关注的仓库有新的易修
    ProjectJoined账号被拉入项目
    ProjectLeft账号被移出项目
    ProjectMemberJoined我管理的仓库有成员加入
    ProjectMemberLeft我管理的仓库有成员移出
    ProjectMilestone我管理的仓库有新的里程碑
    ProjectPraised我管理的仓库被点赞
    ProjectPullRequest我管理/关注的仓库有新的合并请求
    ProjectRole账号仓库权限变更
    ProjectSettingChanged我管理的仓库项目设置被更改
    ProjectTransfer我关注的仓库被转移
    ProjectVersion我关注的仓库有新的发行版
    PullRequestAssigned有新指派给我的合并请求
    PullReuqestAtme在合并请求中@我
    PullRequestChanged我创建或负责的合并请求状态变更
    PullRequestJournal我创建或负责的合并请求有新的评论
    + +
    +

    返回的JSON示例:

    +
    +
    {
    +    "total_count": 5,
    +    "type": "",
    +    "unread_notification": 3,
    +    "unread_atme": 2,
    +    "messages": [
    +        {
    +            "id": 1,
    +            "status": 1,
    +            "content": "Atme Message Content 1",
    +            "notification_url": "http://www.baidu.com",
    +            "source": "PullRequestAtme",
    +            "type": "atme",
    +            "sender": {
    +                "id": 5,
    +                "type": "User",
    +                "name": "testforge2",
    +                "login": "testforge2",
    +                "image_url": "system/lets/letter_avatars/2/T/236_177_85/120.png"
    +            }
    +        },
    +        {
    +            "id": 2,
    +            "status": 0,
    +            "content": "Atme Message Content 2",
    +            "notification_url": "http://www.baidu.com",
    +            "source": "IssueAtme",
    +            "type": "atme",
    +            "sender": {
    +                "id": 4,
    +                "type": "User",
    +                "name": "testforge1",
    +                "login": "testforge1",
    +                "image_url": "system/lets/letter_avatars/2/T/19_237_174/120.png"
    +            }
    +        },
    +        {
    +            "id": 3,
    +            "status": 1,
    +            "content": "Notification Message Content 1",
    +            "notification_url": "http://www.baidu.com",
    +            "source": "IssueDelete",
    +            "type": "notification"
    +        },
    +        {
    +            "id": 4,
    +            "status": 0,
    +            "content": "Notification Message Content 2",
    +            "notification_url": "http://www.baidu.com",
    +            "source": "IssueChanged",
    +            "type": "notification"
    +        },
    +        {
    +            "id": 5,
    +            "status": 0,
    +            "content": "Notification Message Content 3",
    +            "notification_url": "http://www.baidu.com",
    +            "source": "ProjectJoined",
    +            "type": "notification"
    +        }
    +    ]
    +}
    +
    + +

    发送消息

    +

    发送消息

    + +
    +

    示例:

    +
    +
    curl -X POST http://localhost:3000/api/users/:login/messages.json
    +
    await octokit.request('POST /api/users/:login/messages.json')
    +

    HTTP 请求

    +

    POST api/users/yystopf/messages.json

    +

    请求字段说明:

    + + + + + + + + + + + + + + + + + + + + + + +
    参数类型字段说明
    typestring消息类型
    recervers_loginarray需要发送消息的用户名数组
    contentstring消息内容
    + +
    +

    返回的JSON示例:

    +
    +
    {
    +    "status": 0,
    +    "message": "success"
    +}
    +
    + +

    阅读消息

    +

    阅读消息

    + +
    +

    示例:

    +
    +
    curl -X POST http://localhost:3000/api/users/:login/messages/read.json
    +
    await octokit.request('POST /api/users/:login/messages/read.json')
    +

    HTTP 请求

    +

    POST api/users/yystopf/messages/read.json

    +

    请求字段说明:

    + + + + + + + + + + + + + + + + + +
    参数类型字段说明
    typestring消息类型,不传为所有消息,notification为系统消息,atme为@我消息
    idsarray消息id数组,包含-1则把所有未读消息标记为已读
    + +
    +

    返回的JSON示例:

    +
    +
    {
    +    "status": 0,
    +    "message": "success"
    +}
    +
    + +

    删除消息

    +

    删除消息

    + +
    +

    示例:

    +
    +
    curl -X DELETE http://localhost:3000/api/users/:login/messages.json
    +
    await octokit.request('DELETE /api/users/:login/messages.json')
    +

    HTTP 请求

    +

    DELETE api/users/yystopf/messages.json

    +

    请求字段说明:

    + + + + + + + + + + + + + + + + + +
    参数类型字段说明
    typestring消息类型,atme为@我消息
    idsarray消息id数组,包含-1则把所有消息删除
    + +
    +

    返回的JSON示例:

    +
    +
    {
    +    "status": 0,
    +    "message": "success"
    +}
    +
    +

    更改用户信息

    更改用户信息

    @@ -979,9 +1420,9 @@ Success — a happy kitten is an authenticated kitten!
    curl -X PATCH/PUT http://localhost:3000/api/users/yystopf.json
     
    await octokit.request('PATCH/PUT /api/users/:login.json')
    -

    HTTP 请求

    +

    HTTP 请求

    PATCH/PUT /api/users/:login.json

    -

    请求字段说明:

    +

    请求字段说明:

    @@ -1077,9 +1518,9 @@ Success — a happy kitten is an authenticated kitten!
    curl -X GET http://localhost:3000/api/users/yystopf/is_pinned_projects.json
     
    await octokit.request('GET /api/users/:login/is_pinned_projects.json')
    -

    HTTP 请求

    +

    HTTP 请求

    GET api/users/:login/is_pinned_projects.json

    -

    返回字段说明:

    +

    返回字段说明:

    参数
    @@ -1264,9 +1705,9 @@ Success — a happy kitten is an authenticated kitten!
    curl -X POST http://localhost:3000/api/users/yystopf/is_pinned_projects/pin.json
     
    await octokit.request('GET /api/users/:login/is_pinned_projects/pin.json')
    -

    HTTP 请求

    +

    HTTP 请求

    POST /api/users/:login/is_pinned_projects/pin.json

    -

    请求字段说明:

    同时设定多个星标项目

    +

    请求字段说明:

    同时设定多个星标项目

    参数
    @@ -1310,9 +1751,9 @@ Success — a happy kitten is an authenticated kitten!
    curl -X PATCH http://localhost:3000/api/users/yystopf/is_pinned_projects/11.json
     
    await octokit.request('PATCH/PUT /api/users/:login/is_pinned_projects/:id.json')
    -

    HTTP 请求

    +

    HTTP 请求

    PATCH/PUT /api/users/:login/is_pinned_projects/:id.json

    -

    请求字段说明:

    +

    请求字段说明:

    参数
    @@ -1351,9 +1792,9 @@ Success — a happy kitten is an authenticated kitten!
    curl -X GET http://localhost:3000/api/users/yystopf/statistics/activity.json
     
    await octokit.request('GET /api/users/:login/statistics/activity.json')
    -

    HTTP 请求

    +

    HTTP 请求

    GET /api/users/:login/statistics/activity.json

    -

    返回字段说明:

    +

    返回字段说明:

    参数
    @@ -1440,9 +1881,9 @@ Success — a happy kitten is an authenticated kitten!
    curl -X GET http://localhost:3000/api/users/yystopf/headmaps.json
     
    await octokit.request('GET /api/users/:login/headmaps.json')
    -

    HTTP 请求

    +

    HTTP 请求

    GET api/users/:login/headmaps.json

    -

    请求字段说明:

    +

    请求字段说明:

    参数
    @@ -1456,7 +1897,7 @@ Success — a happy kitten is an authenticated kitten!
    参数年份
    -

    返回字段说明:

    +

    返回字段说明:

    @@ -1585,9 +2026,9 @@ Success — a happy kitten is an authenticated kitten!
    curl -X GET http://localhost:3000/api/users/yystopf/project_trends.json
     
    await octokit.request('GET /api/users/:login/project_trends.json')
    -

    HTTP 请求

    +

    HTTP 请求

    GET api/users/:login/project_trends.json

    -

    请求字段说明:

    +

    请求字段说明:

    参数
    @@ -1601,7 +2042,7 @@ Success — a happy kitten is an authenticated kitten!
    参数日期,格式: 2021-05-28
    -

    返回字段说明:

    +

    返回字段说明:

    @@ -1902,9 +2343,9 @@ Success — a happy kitten is an authenticated kitten!
    curl -X GET http://localhost:3000/api/users/yystopf/statistics/develop.json
     
    await octokit.request('GET /api/users/:login/statistics/develop.json')
    -

    HTTP 请求

    +

    HTTP 请求

    GET /api/users/:login/statistics/develop.json

    -

    请求字段说明:

    +

    请求字段说明:

    参数
    @@ -1923,7 +2364,7 @@ Success — a happy kitten is an authenticated kitten!
    参数时间戳,结束时间,格式:1622131200
    -

    返回字段说明:

    +

    返回字段说明:

    @@ -2045,9 +2486,9 @@ Success — a happy kitten is an authenticated kitten!
    curl -X GET http://localhost:3000/api/users/yystopf/statistics/role.json
     
    await octokit.request('GET /api/users/:login/statistics/role.json')
    -

    HTTP 请求

    +

    HTTP 请求

    GET /api/users/:login/statistics/role.json

    -

    请求字段说明:

    +

    请求字段说明:

    参数
    @@ -2066,7 +2507,7 @@ Success — a happy kitten is an authenticated kitten!
    参数时间戳,结束时间,格式:1622131200
    -

    返回字段说明:

    +

    返回字段说明:

    @@ -2127,9 +2568,9 @@ Success — a happy kitten is an authenticated kitten!
    curl -X GET http://localhost:3000/api/users/yystopf/statistics/major.json
     
    await octokit.request('GET /api/users/:login/statistics/major.json')
    -

    HTTP 请求

    +

    HTTP 请求

    GET /api/users/:login/statistics/major.json

    -

    请求字段说明:

    +

    请求字段说明:

    参数
    @@ -2148,7 +2589,7 @@ Success — a happy kitten is an authenticated kitten!
    参数时间戳,结束时间,格式:1622131200
    -

    返回字段说明:

    +

    返回字段说明:

    @@ -2188,9 +2629,9 @@ Success — a happy kitten is an authenticated kitten!
    curl -X GET http://localhost:3000/api/users/yystopf/applied_messages.json
     
    await octokit.request('GET /api/users/:login/applied_messages.json')
    -

    HTTP 请求

    +

    HTTP 请求

    GET /api/users/:login/applied_messages.json

    -

    请求字段说明:

    +

    请求字段说明:

    参数
    @@ -2204,7 +2645,7 @@ Success — a happy kitten is an authenticated kitten!
    参数用户标识
    -

    返回字段说明:

    +

    返回字段说明:

    @@ -2467,9 +2908,9 @@ Success — a happy kitten is an authenticated kitten!
    curl -X GET http://localhost:3000/api/users/yystopf/applied_transfer_projects.json
     
    await octokit.request('GET /api/users/:login/applied_transfer_projects.json')
    -

    HTTP 请求

    +

    HTTP 请求

    GET /api/users/:login/applied_transfer_projects.json

    -

    请求字段说明:

    +

    请求字段说明:

    参数
    @@ -2483,7 +2924,7 @@ Success — a happy kitten is an authenticated kitten!
    参数用户标识
    -

    返回字段说明:

    +

    返回字段说明:

    @@ -2659,200 +3100,9 @@ Success — a happy kitten is an authenticated kitten!
    curl -X POST http://localhost:3000/api/users/yystopf/applied_transfer_projects/2/accept.json
     
    await octokit.request('GET /api/users/:login/applied_transfer_projects/:id/accept.json')
    -

    HTTP 请求

    +

    HTTP 请求

    GET /api/users/:login/applied_transfer_projects/:id/accept.json

    -

    请求字段说明:

    -
    参数
    - - - - - - - - - - - - - - - - -
    参数类型字段说明
    loginstring用户标识
    idint迁移id
    -

    返回字段说明:

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    参数类型字段说明
    idint迁移id
    statusstring迁移状态,canceled:取消,common:正在迁移, accept:已接受,refuse:已拒绝
    time_agostring迁移创建的时间
    project.idint迁移项目的id
    project.identifierstring迁移项目的标识
    project.namestring迁移项目的名称
    project.descriptionstring迁移项目的描述
    project.is_publicbool迁移项目是否公开
    project.owner.idbool迁移项目拥有者id
    project.owner.typestring迁移项目拥有者类型
    project.owner.namestring迁移项目拥有者昵称
    project.owner.loginstring迁移项目拥有者标识
    project.owner.image_urlstring迁移项目拥有者头像
    user.idint迁移创建者的id
    user.typestring迁移创建者的类型
    user.namestring迁移创建者的名称
    user.loginstring迁移创建者的标识
    user.image_urlstring迁移创建者头像
    owner.idint迁移接受者的id
    owner.typestring迁移接受者的类型
    owner.namestring迁移接受者的名称
    owner.loginstring迁移接受者的标识
    owner.image_urlstring迁移接受者头像
    - -
    -

    返回的JSON示例:

    -
    -
    {
    -    "project": {
    -        "id": 86,
    -        "identifier": "ceshi_repo1",
    -        "name": "测试项目啊1",
    -        "description": "二十多",
    -        "is_public": true,
    -        "owner": {
    -            "id": 52,
    -            "type": "Organization",
    -            "name": "身份卡手动阀",
    -            "login": "ceshi1",
    -            "image_url": "images/avatars/Organization/52?t=1618805056"
    -        }
    -    },
    -    "user": {
    -        "id": 6,
    -        "type": "User",
    -        "name": "yystopf",
    -        "login": "yystopf",
    -        "image_url": "system/lets/letter_avatars/2/Y/241_125_89/120.png"
    -    },
    -    "owner": {
    -        "id": 52,
    -        "type": "Organization",
    -        "name": "身份卡手动阀",
    -        "login": "ceshi1",
    -        "image_url": "images/avatars/Organization/52?t=1618805056"
    -    },
    -    "id": 1,
    -    "status": "canceled",
    -    "created_at": "2021-04-25 18:06",
    -    "time_ago": "16小时前"
    -}
    -

    用户拒绝迁移

    -

    用户拒绝迁移

    - -
    -

    示例:

    -
    -
    curl -X POST http://localhost:3000/api/users/yystopf/applied_transfer_projects/2/refuse.json
    -
    await octokit.request('GET /api/users/:login/applied_transfer_projects/:id/refuse.json')
    -

    HTTP 请求

    -

    GET /api/users/:login/applied_transfer_projects/:id/refuse.json

    -

    请求字段说明:

    +

    请求字段说明:

    @@ -2996,6 +3246,197 @@ Success — a happy kitten is an authenticated kitten!
    参数
    +
    +

    返回的JSON示例:

    +
    +
    {
    +    "project": {
    +        "id": 86,
    +        "identifier": "ceshi_repo1",
    +        "name": "测试项目啊1",
    +        "description": "二十多",
    +        "is_public": true,
    +        "owner": {
    +            "id": 52,
    +            "type": "Organization",
    +            "name": "身份卡手动阀",
    +            "login": "ceshi1",
    +            "image_url": "images/avatars/Organization/52?t=1618805056"
    +        }
    +    },
    +    "user": {
    +        "id": 6,
    +        "type": "User",
    +        "name": "yystopf",
    +        "login": "yystopf",
    +        "image_url": "system/lets/letter_avatars/2/Y/241_125_89/120.png"
    +    },
    +    "owner": {
    +        "id": 52,
    +        "type": "Organization",
    +        "name": "身份卡手动阀",
    +        "login": "ceshi1",
    +        "image_url": "images/avatars/Organization/52?t=1618805056"
    +    },
    +    "id": 1,
    +    "status": "canceled",
    +    "created_at": "2021-04-25 18:06",
    +    "time_ago": "16小时前"
    +}
    +

    用户拒绝迁移

    +

    用户拒绝迁移

    + +
    +

    示例:

    +
    +
    curl -X POST http://localhost:3000/api/users/yystopf/applied_transfer_projects/2/refuse.json
    +
    await octokit.request('GET /api/users/:login/applied_transfer_projects/:id/refuse.json')
    +

    HTTP 请求

    +

    GET /api/users/:login/applied_transfer_projects/:id/refuse.json

    +

    请求字段说明:

    + + + + + + + + + + + + + + + + + +
    参数类型字段说明
    loginstring用户标识
    idint迁移id
    +

    返回字段说明:

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    参数类型字段说明
    idint迁移id
    statusstring迁移状态,canceled:取消,common:正在迁移, accept:已接受,refuse:已拒绝
    time_agostring迁移创建的时间
    project.idint迁移项目的id
    project.identifierstring迁移项目的标识
    project.namestring迁移项目的名称
    project.descriptionstring迁移项目的描述
    project.is_publicbool迁移项目是否公开
    project.owner.idbool迁移项目拥有者id
    project.owner.typestring迁移项目拥有者类型
    project.owner.namestring迁移项目拥有者昵称
    project.owner.loginstring迁移项目拥有者标识
    project.owner.image_urlstring迁移项目拥有者头像
    user.idint迁移创建者的id
    user.typestring迁移创建者的类型
    user.namestring迁移创建者的名称
    user.loginstring迁移创建者的标识
    user.image_urlstring迁移创建者头像
    owner.idint迁移接受者的id
    owner.typestring迁移接受者的类型
    owner.namestring迁移接受者的名称
    owner.loginstring迁移接受者的标识
    owner.image_urlstring迁移接受者头像
    +

    返回的JSON示例:

    @@ -3041,9 +3482,9 @@ Success — a happy kitten is an authenticated kitten!
    curl -X GET http://localhost:3000/api/users/yystopf/applied_projects.json
     
    await octokit.request('GET /api/users/:login/applied_projects.json')
    -

    HTTP 请求

    +

    HTTP 请求

    GET /api/users/:login/applied_projects.json

    -

    请求字段说明:

    +

    请求字段说明:

    @@ -3057,7 +3498,7 @@ Success — a happy kitten is an authenticated kitten!
    参数用户标识
    -

    返回字段说明:

    +

    返回字段说明:

    @@ -3201,9 +3642,9 @@ Success — a happy kitten is an authenticated kitten!
    curl -X POST http://localhost:3000/api/users/yystopf/applied_projects/2/accept.json
     
    await octokit.request('GET /api/users/:login/applied_projects/:id/accept.json')
    -

    HTTP 请求

    +

    HTTP 请求

    GET /api/users/:login/applied_projects/:id/accept.json

    -

    请求字段说明:

    +

    请求字段说明:

    参数
    @@ -3222,7 +3663,7 @@ Success — a happy kitten is an authenticated kitten!
    参数申请id
    -

    返回字段说明:

    +

    返回字段说明:

    @@ -3360,9 +3801,9 @@ Success — a happy kitten is an authenticated kitten!
    curl -X POST http://localhost:3000/api/users/yystopf/applied_projects/2/refuse.json
     
    await octokit.request('GET /api/users/:login/applied_projects/:id/refuse.json')
    -

    HTTP 请求

    +

    HTTP 请求

    GET /api/users/:login/applied_projects/:id/refuse.json

    -

    请求字段说明:

    +

    请求字段说明:

    参数
    @@ -3381,7 +3822,7 @@ Success — a happy kitten is an authenticated kitten!
    参数申请id
    -

    返回字段说明:

    +

    返回字段说明:

    diff --git a/spec/models/message_template_spec.rb b/spec/models/message_template_spec.rb new file mode 100644 index 000000000..8f1d26fcd --- /dev/null +++ b/spec/models/message_template_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe MessageTemplate, type: :model do + pending "add some examples to (or delete) #{__FILE__}" +end From 877a20350d080226e818165f981432ab34e5c662 Mon Sep 17 00:00:00 2001 From: yystopf Date: Fri, 10 Sep 2021 16:05:08 +0800 Subject: [PATCH 02/38] fix: notice messages status value --- app/controllers/users/messages_controller.rb | 6 +++--- app/docs/slate/source/includes/_users.md | 11 ++++++++--- app/views/users/messages/_message.json.jbuilder | 2 ++ public/docs/api.html | 11 ++++++++--- 4 files changed, 21 insertions(+), 9 deletions(-) diff --git a/app/controllers/users/messages_controller.rb b/app/controllers/users/messages_controller.rb index 0433d41ad..24c2a1934 100644 --- a/app/controllers/users/messages_controller.rb +++ b/app/controllers/users/messages_controller.rb @@ -25,7 +25,7 @@ class Users::MessagesController < Users::BaseController "sender": 4, "receiver": 2, "content": "Atme Message Content 2", - "status": 0, + "status": 2, "type": 2, "source": "IssueAtme", "notification_url": "http://www.baidu.com", @@ -47,7 +47,7 @@ class Users::MessagesController < Users::BaseController "sender": -1, "receiver": 2, "content": "Notification Message Content 2", - "status": 0, + "status": 2, "type": 1, "source": "IssueChanged", "notification_url": "http://www.baidu.com", @@ -58,7 +58,7 @@ class Users::MessagesController < Users::BaseController "sender": -1, "receiver": 2, "content": "Notification Message Content 3", - "status": 0, + "status": 2, "type": 1, "source": "ProjectJoined", "notification_url": "http://www.baidu.com", diff --git a/app/docs/slate/source/includes/_users.md b/app/docs/slate/source/includes/_users.md index f49fdcf6b..71a16ee87 100644 --- a/app/docs/slate/source/includes/_users.md +++ b/app/docs/slate/source/includes/_users.md @@ -1,7 +1,7 @@ # Users @@ -67,7 +67,7 @@ await octokit.request('GET /api/users/:login/messages.json') 参数 | 类型 | 字段说明 --------- | ----------- | ----------- |type | string | 消息类型,不传为所有消息,notification为系统消息,atme为@我消息| -|status | integer | 是否已读,不传为所有消息,0为未读,1为已读 | +|status | integer | 是否已读,不传为所有消息,1为未读,2为已读 | |limit | integer | 每页个数 | |page | integer | 页码 | @@ -79,7 +79,7 @@ await octokit.request('GET /api/users/:login/messages.json') |unread_notification | integer | 未读系统通知数量 | |unread_atme | integer | 未读@我数量 | |messages.id | integer | 消息id | -|messages.status | integer | 消息是否已读,0为未读,1为已读 | +|messages.status | integer | 消息是否已读,1为未读,2为已读 | |messages.content | string | 消息内容 | |messages.notification_url | string | 消息跳转地址 | |messages.source | string | 消息来源 | @@ -136,6 +136,7 @@ await octokit.request('GET /api/users/:login/messages.json') "content": "Atme Message Content 1", "notification_url": "http://www.baidu.com", "source": "PullRequestAtme", + "time_ago": "1天前", "type": "atme", "sender": { "id": 5, @@ -151,6 +152,7 @@ await octokit.request('GET /api/users/:login/messages.json') "content": "Atme Message Content 2", "notification_url": "http://www.baidu.com", "source": "IssueAtme", + "time_ago": "1天前", "type": "atme", "sender": { "id": 4, @@ -166,6 +168,7 @@ await octokit.request('GET /api/users/:login/messages.json') "content": "Notification Message Content 1", "notification_url": "http://www.baidu.com", "source": "IssueDelete", + "time_ago": "1天前", "type": "notification" }, { @@ -174,6 +177,7 @@ await octokit.request('GET /api/users/:login/messages.json') "content": "Notification Message Content 2", "notification_url": "http://www.baidu.com", "source": "IssueChanged", + "time_ago": "1天前", "type": "notification" }, { @@ -182,6 +186,7 @@ await octokit.request('GET /api/users/:login/messages.json') "content": "Notification Message Content 3", "notification_url": "http://www.baidu.com", "source": "ProjectJoined", + "time_ago": "1天前", "type": "notification" } ] diff --git a/app/views/users/messages/_message.json.jbuilder b/app/views/users/messages/_message.json.jbuilder index 1d8a9b264..9f6f0c504 100644 --- a/app/views/users/messages/_message.json.jbuilder +++ b/app/views/users/messages/_message.json.jbuilder @@ -6,6 +6,8 @@ json.status message["status"] json.content message["content"] json.notification_url message["notification_url"] json.source message["source"] +json.time_ago time_from_now(message["created_at"].to_time) + case message["type"] when 1 json.type "notification" diff --git a/public/docs/api.html b/public/docs/api.html index b6083dcd2..faabfbc7e 100644 --- a/public/docs/api.html +++ b/public/docs/api.html @@ -921,7 +921,7 @@ Success — a happy kitten is an authenticated kitten!

    Users

    获取当前登陆用户信息

    @@ -1009,7 +1009,7 @@ Success — a happy kitten is an authenticated kitten!
    - + @@ -1058,7 +1058,7 @@ Success — a happy kitten is an authenticated kitten! - + @@ -1230,6 +1230,7 @@ Success — a happy kitten is an authenticated kitten! "content": "Atme Message Content 1", "notification_url": "http://www.baidu.com", "source": "PullRequestAtme", + "time_ago": "1天前", "type": "atme", "sender": { "id": 5, @@ -1245,6 +1246,7 @@ Success — a happy kitten is an authenticated kitten! "content": "Atme Message Content 2", "notification_url": "http://www.baidu.com", "source": "IssueAtme", + "time_ago": "1天前", "type": "atme", "sender": { "id": 4, @@ -1260,6 +1262,7 @@ Success — a happy kitten is an authenticated kitten! "content": "Notification Message Content 1", "notification_url": "http://www.baidu.com", "source": "IssueDelete", + "time_ago": "1天前", "type": "notification" }, { @@ -1268,6 +1271,7 @@ Success — a happy kitten is an authenticated kitten! "content": "Notification Message Content 2", "notification_url": "http://www.baidu.com", "source": "IssueChanged", + "time_ago": "1天前", "type": "notification" }, { @@ -1276,6 +1280,7 @@ Success — a happy kitten is an authenticated kitten! "content": "Notification Message Content 3", "notification_url": "http://www.baidu.com", "source": "ProjectJoined", + "time_ago": "1天前", "type": "notification" } ] From 465a3a67a59ca8f2e3f7d5b1c77bf542e72eb5a3 Mon Sep 17 00:00:00 2001 From: yystopf Date: Mon, 13 Sep 2021 17:51:34 +0800 Subject: [PATCH 03/38] add: notice system api --- app/controllers/users/messages_controller.rb | 134 +++++++----------- app/forms/notice/write/create_atme_form.rb | 23 +++ .../notice/{ => read}/client_service.rb | 36 ++--- app/services/notice/read/count_service.rb | 25 ++++ app/services/notice/read/list_service.rb | 40 ++++++ .../notice/write/change_status_service.rb | 29 ++++ app/services/notice/write/client_service.rb | 108 ++++++++++++++ app/services/notice/write/create_service.rb | 37 +++++ app/services/notice/write/delete_service.rb | 27 ++++ config/configuration.yml.example | 4 +- config/routes.rb | 4 +- 11 files changed, 365 insertions(+), 102 deletions(-) create mode 100644 app/forms/notice/write/create_atme_form.rb rename app/services/notice/{ => read}/client_service.rb (65%) create mode 100644 app/services/notice/read/count_service.rb create mode 100644 app/services/notice/read/list_service.rb create mode 100644 app/services/notice/write/change_status_service.rb create mode 100644 app/services/notice/write/client_service.rb create mode 100644 app/services/notice/write/create_service.rb create mode 100644 app/services/notice/write/delete_service.rb diff --git a/app/controllers/users/messages_controller.rb b/app/controllers/users/messages_controller.rb index 24c2a1934..8c704c1bf 100644 --- a/app/controllers/users/messages_controller.rb +++ b/app/controllers/users/messages_controller.rb @@ -1,110 +1,80 @@ class Users::MessagesController < Users::BaseController before_action :private_user_resources! + before_action :find_receivers, only: [:create] def index - data = { - "receiver": 2, - "type": @message_type, - "unread_total": 5, - "unread_notification": 3, - "unread_atme": 2, - "records": [ - { - "id": 1, - "sender": 5, - "receiver": 2, - "content": "Atme Message Content 1", - "status": 1, - "type": 2, - "source": "PullRequestAtme", - "notification_url": "http://www.baidu.com", - "created_at": "2021-09-09 14:34:40" - }, - { - "id": 2, - "sender": 4, - "receiver": 2, - "content": "Atme Message Content 2", - "status": 2, - "type": 2, - "source": "IssueAtme", - "notification_url": "http://www.baidu.com", - "created_at": "2021-09-09 14:34:40" - }, - { - "id": 3, - "sender": -1, - "receiver": 2, - "content": "Notification Message Content 1", - "status": 1, - "type": 1, - "source": "IssueDelete", - "notification_url": "http://www.baidu.com", - "created_at": "2021-09-09 14:34:40" - }, - { - "id": 4, - "sender": -1, - "receiver": 2, - "content": "Notification Message Content 2", - "status": 2, - "type": 1, - "source": "IssueChanged", - "notification_url": "http://www.baidu.com", - "created_at": "2021-09-09 14:34:40" - }, - { - "id": 5, - "sender": -1, - "receiver": 2, - "content": "Notification Message Content 3", - "status": 2, - "type": 1, - "source": "ProjectJoined", - "notification_url": "http://www.baidu.com", - "created_at": "2021-09-09 14:34:40" - } - ], - "records_count": 5, - "page_num": 1, - "total_page_size": 1, - "page_size": 10 - } - result = [1, "请求成功", data] + limit = params[:limit] || params[:per_page] + limit = (limit.to_i.zero? || limit.to_i > 15) ? 15 : limit.to_i + page = params[:page].to_i.zero? ? 1 : params[:page].to_i + result = Notice::Read::ListService.call(observed_user.id, message_type, message_status, page, limit) return render_error if result.nil? - puts result - @data = result[2].stringify_keys - + @data = result[2] end def create - return render_forbidden unless %w(3).include(@message_type) + return render_forbidden unless %w(atme).include?(params[:type]) + case params[:type] + when 'atme' + Notice::Write::CreateAtmeForm.new(atme_params).validate! + result = Notice::Write::CreateService.call(@receivers.pluck(:id), '发送了一个@我消息', base_url, "IssueAtme", 2) + return render_error if result.nil? + end render_ok + rescue Exception => e + uid_logger_error(e.message) + tip_exception(e.message) end def delete - return render_forbidden unless %w(2).include(@message_type) + return render_forbidden unless %w(atme).include?(params[:type]) + result = Notice::Write::DeleteService.call(params[:ids], observed_user.id) + return render_error if result.nil? + render_ok + rescue Exception => e + uid_logger_error(e.message) + tip_exception(e.message) end def read - render_ok + return render_forbidden unless %w(notification atme).include?(params[:type]) + result = Notice::Write::ChangeStatusService.call(params[:ids], observed_user.id) + if result.nil? + render_error + else + render_ok + end + rescue Exception => e + uid_logger_error(e.message) + tip_exception(e.message) end private def message_type @message_type = begin case params[:type] - when "notification" - 1 - when "atme" - 2 + when "notification" then 1 + when "atme" then 2 else -1 end end end + def message_status + @message_status = begin + case params[:status] + when "1" then 1 + else + 2 + end + end + end + + def atme_params + params.permit(:atmeable_type, :atmeable_id, receivers_login: []) + end + def message_params { sender: current_user.id, @@ -114,8 +84,8 @@ class Users::MessagesController < Users::BaseController } end - - def find_receiver - @receiver = User.find_by(login: params[:receiver_login]) + def find_receivers + @receivers = User.where(login: params[:receivers_login]) + return render_not_found if @receivers.size == 0 end end \ No newline at end of file diff --git a/app/forms/notice/write/create_atme_form.rb b/app/forms/notice/write/create_atme_form.rb new file mode 100644 index 000000000..5ac3acc25 --- /dev/null +++ b/app/forms/notice/write/create_atme_form.rb @@ -0,0 +1,23 @@ +class Notice::Write::CreateAtmeForm + include ActiveModel::Model + + attr_accessor :receivers_login, :atmeable_type, :atmeable_id + + validate :check_receivers + + def check_receivers + receivers_login.each do |login| + receiver = User.find_by(login: login) || User.find_by_id(login) + raise 'receivers_login值无效.' unless receiver.present? + end + end + + def check_atmeable + begin + raise 'atmeable对象无效.' unless atmeable_type.constantize.find_by_id(atmeable_id).present? + rescue => exception + raise 'atmeable对象无效.' + end + end + +end \ No newline at end of file diff --git a/app/services/notice/client_service.rb b/app/services/notice/read/client_service.rb similarity index 65% rename from app/services/notice/client_service.rb rename to app/services/notice/read/client_service.rb index a2ada88c6..39ba816cc 100644 --- a/app/services/notice/client_service.rb +++ b/app/services/notice/read/client_service.rb @@ -1,4 +1,4 @@ -class Notice::ClientService < ApplicationService +class Notice::Read::ClientService < ApplicationService attr_reader :url, :params def initialize(options={}) @@ -7,7 +7,7 @@ class Notice::ClientService < ApplicationService end def post(url, params={}) - puts "[notice][POST] request params: #{params}" + puts "[notice][read][POST] request params: #{params}" conn.post do |req| req.url = full_url(url) req.body = params[:data].to_json @@ -15,7 +15,7 @@ class Notice::ClientService < ApplicationService end def get(url, params={}) - puts "[notice][GET] request params: #{params}" + puts "[notice][read][GET] request params: #{params}" conn.get do |req| req.url full_url(url, 'get') params.each_pair do |key, value| @@ -25,31 +25,31 @@ class Notice::ClientService < ApplicationService end def delete(url, params={}) - puts "[notice][DELETE] request params: #{params}" + puts "[notice][read][DELETE] request params: #{params}" conn.delete do |req| req.url full_url(url) - reb.body = params[:data].to_json + req.body = params[:data].to_json end end def patch(url, params={}) - puts "[notice][PATCH] request params: #{params}" + puts "[notice][read][PATCH] request params: #{params}" conn.patch do |req| req.url full_url(url) - reb.body = params[:data].to_json + req.body = params[:data].to_json end end def put(url, params={}) - puts "[notice][PUT] request params: #{params}" + puts "[notice][read][PUT] request params: #{params}" conn.put do |req| req.url full_url(url) - reb.body = params[:data].to_json + req.body = params[:data].to_json end end #private - def conn + def conn @client ||= begin Faraday.new(url: domain) do |req| req.request :url_encoded @@ -66,7 +66,7 @@ class Notice::ClientService < ApplicationService end def domain - Notice.notice_config[:domain] + Notice.notice_config[:read_domain] end def platform @@ -74,25 +74,25 @@ class Notice::ClientService < ApplicationService end def api_url - [domain, base_url].join('') + [domain, base_url, "/#{platform}"].join('') end def full_url(api_rest, action='post') url = [api_url, api_rest].join('').freeze url = action === 'get' ? url : URI.escape(url) url = URI.escape(url) unless url.ascii_only? - puts "[notice] request url: #{url}" + puts "[notice][read] request url: #{url}" return url end def log_error(status, body) - puts "[notice] status: #{status}" - puts "[notice] body: #{body&.force_encoding('UTF-8')}" + puts "[notice][read] status: #{status}" + puts "[notice][read] body: #{body}" end def render_response(response) status = response.status - body = response&.body + body = JSON.parse(response&.body) log_error(status, body) @@ -100,8 +100,8 @@ class Notice::ClientService < ApplicationService if body["code"] == 1 return [body["code"], body["message"], body["data"]] else - puts "[notice][ERROR] code: #{body["code"]}" - puts "[notice][ERROR] message: #{body["message"]}" + puts "[notice][read][ERROR] code: #{body["code"]}" + puts "[notice][read][ERROR] message: #{body["message"]}" end end end diff --git a/app/services/notice/read/count_service.rb b/app/services/notice/read/count_service.rb new file mode 100644 index 000000000..502d57a64 --- /dev/null +++ b/app/services/notice/read/count_service.rb @@ -0,0 +1,25 @@ +class Notice::Read::CountService < Notice::Read::ClientService + attr_accessor :receiver, :type + + def initialize(receiver, type=-1) + @receiver = receiver + @type = type + end + + def call + result = get(url, request_params) + response = render_response(result) + end + + private + def request_params + { + receiver: receiver, + type: type + }.stringify_keys + end + + def url + "/count".freeze + end +end \ No newline at end of file diff --git a/app/services/notice/read/list_service.rb b/app/services/notice/read/list_service.rb new file mode 100644 index 000000000..69c5c57ce --- /dev/null +++ b/app/services/notice/read/list_service.rb @@ -0,0 +1,40 @@ +class Notice::Read::ListService < Notice::Read::ClientService + attr_accessor :receiver, :type, :status, :page, :size + + def initialize(receiver, type=-1, status=2, page=1, size=15) + @receiver = receiver + @type = type + @status = status + @page = page + @size = size + end + + def call + result = get(url, request_params) + response = render_response(result) + end + + private + + def request_status + case status + when 1 then 1 + else + 2 + end + end + + def request_params + { + receiver: receiver, + page: page, + show: request_status, + size: size, + type: type + }.stringify_keys + end + + def url + "/list".freeze + end +end \ No newline at end of file diff --git a/app/services/notice/write/change_status_service.rb b/app/services/notice/write/change_status_service.rb new file mode 100644 index 000000000..c6a9b06ce --- /dev/null +++ b/app/services/notice/write/change_status_service.rb @@ -0,0 +1,29 @@ +class Notice::Write::ChangeStatusService < Notice::Write::ClientService + attr_accessor :notification_ids, :receiver, :status + + def initialize(notification_ids, receiver, status=2) + @notification_ids = notification_ids + @receiver = receiver + @status = status + end + + def call + result = put("", request_params) + response = render_response(result) + end + + private + + def request_notification_ids + notification_ids.join(",") + end + + def request_params + Hash.new.merge(data: { + notificationIds: request_notification_ids, + receiver: receiver, + status: status + }.stringify_keys) + end + +end \ No newline at end of file diff --git a/app/services/notice/write/client_service.rb b/app/services/notice/write/client_service.rb new file mode 100644 index 000000000..51ba5656e --- /dev/null +++ b/app/services/notice/write/client_service.rb @@ -0,0 +1,108 @@ +class Notice::Write::ClientService < ApplicationService + attr_reader :url, :params + + def initialize(options={}) + @url = options[:url] + @params = options[:params] + end + + def post(url, params={}) + puts "[notice][write][POST] request params: #{params}" + conn.post do |req| + req.url full_url(url) + req.body = params[:data].to_json + end + end + + def get(url, params={}) + puts "[notice][write][GET] request params: #{params}" + conn.get do |req| + req.url full_url(url, 'get') + params.each_pair do |key, value| + req.params["#{key}"] = value + end + end + end + + def delete(url, params={}) + puts "[notice][write][DELETE] request params: #{params}" + conn.delete do |req| + req.url full_url(url) + req.body = params[:data].to_json + end + end + + def patch(url, params={}) + puts "[notice][write][PATCH] request params: #{params}" + conn.patch do |req| + req.url full_url(url) + req.body = params[:data].to_json + end + end + + def put(url, params={}) + puts "[notice][write][PUT] request params: #{params}" + conn.put do |req| + req.url full_url(url) + req.body = params[:data].to_json + end + end + + #private + def conn + @client ||= begin + Faraday.new(url: domain) do |req| + req.request :url_encoded + req.headers['Content-Type'] = 'application/json' + req.adapter Faraday.default_adapter + end + end + + @client + end + + def base_url + Notice.notice_config[:base_url] + end + + def domain + Notice.notice_config[:write_domain] + end + + def platform + Notice.notice_config[:platform] + end + + def api_url + [domain, base_url, "/#{platform}"].join('') + end + + def full_url(api_rest, action='post') + url = [api_url, api_rest].join('').freeze + url = action === 'get' ? url : URI.escape(url) + url = URI.escape(url) unless url.ascii_only? + puts "[notice][write] request url: #{url}" + return url + end + + def log_error(status, body) + puts "[notice][write] status: #{status}" + puts "[notice][write] body: #{body}" + end + + def render_response(response) + status = response.status + body = JSON.parse(response&.body) + + log_error(status, body) + + if status == 200 + if body["code"] == 1 + return [body["code"], body["message"], body["data"]] + else + puts "[notice][write][ERROR] code: #{body["code"]}" + puts "[notice][write][ERROR] message: #{body["message"]}" + end + end + end +end \ No newline at end of file diff --git a/app/services/notice/write/create_service.rb b/app/services/notice/write/create_service.rb new file mode 100644 index 000000000..76883c67f --- /dev/null +++ b/app/services/notice/write/create_service.rb @@ -0,0 +1,37 @@ +class Notice::Write::CreateService < Notice::Write::ClientService + attr_accessor :receivers, :sender, :content, :notification_url, :source, :extra, :type + + def initialize(receivers, content, notification_url, source, type=1, extra={},sender=-1) + @receivers = receivers + @sender = sender + @content = content + @notification_url = notification_url + @source = source + @extra = extra + @type = type + end + + def call + result = post("", request_params) + response = render_response(result) + end + + private + + def request_receivers + receivers.join(",") + end + + def request_params + Hash.new.merge(data: { + receivers: request_receivers, + sender: sender, + content: content, + notification_url: notification_url, + source: source, + extra: extra.to_json.to_s, + type: type + }.stringify_keys) + end + +end \ No newline at end of file diff --git a/app/services/notice/write/delete_service.rb b/app/services/notice/write/delete_service.rb new file mode 100644 index 000000000..d2f0a9fd9 --- /dev/null +++ b/app/services/notice/write/delete_service.rb @@ -0,0 +1,27 @@ +class Notice::Write::DeleteService < Notice::Write::ClientService + attr_accessor :notification_ids, :receiver + + def initialize(notification_ids, receiver) + @notification_ids = notification_ids + @receiver = receiver + end + + def call + result = delete("", request_params) + response = render_response(result) + end + + private + + def request_notification_ids + notification_ids.join(",") + end + + def request_params + Hash.new.merge(data: { + notificationIds: request_notification_ids, + receiver: receiver + }.stringify_keys) + end + +end \ No newline at end of file diff --git a/config/configuration.yml.example b/config/configuration.yml.example index 61217d4e7..4671e4166 100644 --- a/config/configuration.yml.example +++ b/config/configuration.yml.example @@ -58,7 +58,9 @@ default: &default base_url: '/api/v1' notice: - domain: '' + platform: '' + write_domain: '' + read_domain: '' base_url: '' production: diff --git a/config/routes.rb b/config/routes.rb index 2d5bb9ed5..06b634fc0 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -302,11 +302,13 @@ Rails.application.routes.draw do # resource :unread_message_info, only: [:show] # 通知中心 - resources :messages, only: [:index, :create, :delete] do + resources :messages, only: [:index, :create] do collection do post :read + end end + delete 'messages', to: 'messages#delete' end resources :tidings, only: [:index] From 8ad087820efa3a1fc5c47d6c91d72c123bc1cc0c Mon Sep 17 00:00:00 2001 From: yystopf Date: Mon, 13 Sep 2021 18:03:57 +0800 Subject: [PATCH 04/38] fix: message api doc --- app/docs/slate/source/includes/_users.md | 20 ++++++++++++++--- public/docs/api.html | 28 ++++++++++++++++++++---- 2 files changed, 41 insertions(+), 7 deletions(-) diff --git a/app/docs/slate/source/includes/_users.md b/app/docs/slate/source/includes/_users.md index 71a16ee87..b43ca4101 100644 --- a/app/docs/slate/source/includes/_users.md +++ b/app/docs/slate/source/includes/_users.md @@ -1,7 +1,7 @@ # Users @@ -83,6 +83,7 @@ await octokit.request('GET /api/users/:login/messages.json') |messages.content | string | 消息内容 | |messages.notification_url | string | 消息跳转地址 | |messages.source | string | 消息来源 | +|messages.timeago | string | 消息时间 | |messages.type | string | 消息类型,notification为系统消息,atme为@我消息| |sender | object | 消息发送者 | @@ -197,7 +198,7 @@ await octokit.request('GET /api/users/:login/messages.json') ## 发送消息 -发送消息 +发送消息, 目前只支持atme > 示例: @@ -217,7 +218,20 @@ await octokit.request('POST /api/users/:login/messages.json') --------- | ----------- | ----------- |type | string | 消息类型 | |recervers_login | array | 需要发送消息的用户名数组| -|content | string | 消息内容 | +|atmeable_type | string | atme消息对象,是从哪里@我的,比如评论:Journal | +|atmeable_id | integer | atme消息对象id | + +> 请求的JSON示例: + +```json +{ + "type": "atme", + "receivers_login": ["yystopf", "testforge1"], + "atmeable_type": "Journal", + "atmeable_id": 67 +} +``` + > 返回的JSON示例: diff --git a/public/docs/api.html b/public/docs/api.html index faabfbc7e..94b177432 100644 --- a/public/docs/api.html +++ b/public/docs/api.html @@ -921,7 +921,7 @@ Success — a happy kitten is an authenticated kitten!

    Users

    获取当前登陆用户信息

    @@ -1076,6 +1076,11 @@ Success — a happy kitten is an authenticated kitten!
    + + + + + @@ -1290,7 +1295,7 @@ Success — a happy kitten is an authenticated kitten! Success Data.

    发送消息

    -

    发送消息

    +

    发送消息, 目前只支持atme

    示例:

    @@ -1318,12 +1323,27 @@ Success — a happy kitten is an authenticated kitten!
    - + - + + + + + +
    参数
    status integer是否已读,不传为所有消息,0为未读,1为已读是否已读,不传为所有消息,1为未读,2为已读
    limit
    messages.status integer消息是否已读,0为未读,1为已读消息是否已读,1为未读,2为已读
    messages.content消息来源
    messages.timeagostring消息时间
    messages.type string 消息类型,notification为系统消息,atme为@我消息 需要发送消息的用户名数组
    contentatmeable_type string消息内容atme消息对象,是从哪里@我的,比如评论:Journal
    atmeable_idintegeratme消息对象id
    +
    +

    请求的JSON示例:

    +
    +
    {
    +    "type": "atme",
    +    "receivers_login": ["yystopf", "testforge1"],
    +    "atmeable_type": "Journal",
    +    "atmeable_id": 67
    +}
    +

    返回的JSON示例:

    From a0b60413940ba5a105a327511da9f25e38e0441d Mon Sep 17 00:00:00 2001 From: yystopf Date: Mon, 13 Sep 2021 18:17:09 +0800 Subject: [PATCH 05/38] add: get user info unread total --- app/controllers/users_controller.rb | 2 ++ app/views/users/get_user_info.json.jbuilder | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 470c61437..c69dfdb69 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -91,6 +91,8 @@ class UsersController < ApplicationController def get_user_info begin @user = current_user + result = Notice::Read::CountService.call(current_user.id) + @message_unread_total = result.nil? ? 0 : result[2]["unread_notification"] # TODO 等消息上线再打开注释 #@tidding_count = unviewed_tiddings(current_user) if current_user.present? rescue Exception => e diff --git a/app/views/users/get_user_info.json.jbuilder b/app/views/users/get_user_info.json.jbuilder index bf5ab8822..ff20f803a 100644 --- a/app/views/users/get_user_info.json.jbuilder +++ b/app/views/users/get_user_info.json.jbuilder @@ -22,4 +22,4 @@ json.city @user.city json.custom_department @user.custom_department json.description @user.description json.(@user, :show_email, :show_department, :show_location) -json.message_unread_total 5 \ No newline at end of file +json.message_unread_total @message_unread_total \ No newline at end of file From a8c75f3b20e7967241ba1f8e03e945fdcd653952 Mon Sep 17 00:00:00 2001 From: yystopf Date: Tue, 14 Sep 2021 11:21:58 +0800 Subject: [PATCH 06/38] fix: messages list status select --- app/controllers/users/messages_controller.rb | 12 ++---------- app/services/notice/read/list_service.rb | 10 +--------- 2 files changed, 3 insertions(+), 19 deletions(-) diff --git a/app/controllers/users/messages_controller.rb b/app/controllers/users/messages_controller.rb index 8c704c1bf..efff9e01a 100644 --- a/app/controllers/users/messages_controller.rb +++ b/app/controllers/users/messages_controller.rb @@ -65,8 +65,9 @@ class Users::MessagesController < Users::BaseController @message_status = begin case params[:status] when "1" then 1 + when "2" then 2 else - 2 + -1 end end end @@ -75,15 +76,6 @@ class Users::MessagesController < Users::BaseController params.permit(:atmeable_type, :atmeable_id, receivers_login: []) end - def message_params - { - sender: current_user.id, - reservers: @receiver.id, - type: @message_type, - content: params[:content] - } - end - def find_receivers @receivers = User.where(login: params[:receivers_login]) return render_not_found if @receivers.size == 0 diff --git a/app/services/notice/read/list_service.rb b/app/services/notice/read/list_service.rb index 69c5c57ce..e4b1fda44 100644 --- a/app/services/notice/read/list_service.rb +++ b/app/services/notice/read/list_service.rb @@ -16,19 +16,11 @@ class Notice::Read::ListService < Notice::Read::ClientService private - def request_status - case status - when 1 then 1 - else - 2 - end - end - def request_params { receiver: receiver, page: page, - show: request_status, + status: status, size: size, type: type }.stringify_keys From 91676492ab2f9dbc88bc7ff674d1a71f878e6664 Mon Sep 17 00:00:00 2001 From: yystopf Date: Tue, 14 Sep 2021 13:59:23 +0800 Subject: [PATCH 07/38] fix: some detail for messages --- api_document.md | 8 ++++---- app/controllers/users/messages_controller.rb | 6 +++--- app/services/notice/write/change_status_service.rb | 6 ++++-- app/services/notice/write/delete_service.rb | 8 +++++--- 4 files changed, 16 insertions(+), 12 deletions(-) diff --git a/api_document.md b/api_document.md index 8a579f8e7..3f609ed3e 100644 --- a/api_document.md +++ b/api_document.md @@ -26,11 +26,11 @@ POST accounts/remote_register *示例* ```bash curl -X POST \ --d "email=2456233122@qq.com" \ --d "password=djs_D_00001" \ --d "username=16895620" \ +-d "email=yystopf@163.com" \ +-d "password=a19960425" \ +-d "username=yystopf" \ -d "platform=forge" \ -http://localhost:3000/api/accounts/remote_register | jq +http://120.132.31.109:8080/api/accounts/remote_register | jq ``` *请求参数说明:* diff --git a/app/controllers/users/messages_controller.rb b/app/controllers/users/messages_controller.rb index efff9e01a..648b38b18 100644 --- a/app/controllers/users/messages_controller.rb +++ b/app/controllers/users/messages_controller.rb @@ -16,7 +16,7 @@ class Users::MessagesController < Users::BaseController case params[:type] when 'atme' Notice::Write::CreateAtmeForm.new(atme_params).validate! - result = Notice::Write::CreateService.call(@receivers.pluck(:id), '发送了一个@我消息', base_url, "IssueAtme", 2) + result = Notice::Write::CreateService.call(@receivers.pluck(:id), '发送了一个@我消息', base_url, "IssueAtme", 2, {}, current_user.id) return render_error if result.nil? end render_ok @@ -27,7 +27,7 @@ class Users::MessagesController < Users::BaseController def delete return render_forbidden unless %w(atme).include?(params[:type]) - result = Notice::Write::DeleteService.call(params[:ids], observed_user.id) + result = Notice::Write::DeleteService.call(params[:ids], observed_user.id, message_type) return render_error if result.nil? render_ok @@ -38,7 +38,7 @@ class Users::MessagesController < Users::BaseController def read return render_forbidden unless %w(notification atme).include?(params[:type]) - result = Notice::Write::ChangeStatusService.call(params[:ids], observed_user.id) + result = Notice::Write::ChangeStatusService.call(params[:ids], observed_user.id, message_type) if result.nil? render_error else diff --git a/app/services/notice/write/change_status_service.rb b/app/services/notice/write/change_status_service.rb index c6a9b06ce..9091d2111 100644 --- a/app/services/notice/write/change_status_service.rb +++ b/app/services/notice/write/change_status_service.rb @@ -1,9 +1,10 @@ class Notice::Write::ChangeStatusService < Notice::Write::ClientService - attr_accessor :notification_ids, :receiver, :status + attr_accessor :notification_ids, :receiver, :type, :status - def initialize(notification_ids, receiver, status=2) + def initialize(notification_ids, receiver, type=-1, status=2) @notification_ids = notification_ids @receiver = receiver + @type = type @status = status end @@ -22,6 +23,7 @@ class Notice::Write::ChangeStatusService < Notice::Write::ClientService Hash.new.merge(data: { notificationIds: request_notification_ids, receiver: receiver, + type: type, status: status }.stringify_keys) end diff --git a/app/services/notice/write/delete_service.rb b/app/services/notice/write/delete_service.rb index d2f0a9fd9..82ab904ad 100644 --- a/app/services/notice/write/delete_service.rb +++ b/app/services/notice/write/delete_service.rb @@ -1,9 +1,10 @@ class Notice::Write::DeleteService < Notice::Write::ClientService - attr_accessor :notification_ids, :receiver + attr_accessor :notification_ids, :receiver, :type - def initialize(notification_ids, receiver) + def initialize(notification_ids, receiver, type=-1) @notification_ids = notification_ids @receiver = receiver + @type = type end def call @@ -20,7 +21,8 @@ class Notice::Write::DeleteService < Notice::Write::ClientService def request_params Hash.new.merge(data: { notificationIds: request_notification_ids, - receiver: receiver + receiver: receiver, + type: type }.stringify_keys) end From ca4f416f0ac9a259c6f1467582729e72a476f537 Mon Sep 17 00:00:00 2001 From: yystopf Date: Tue, 14 Sep 2021 17:39:58 +0800 Subject: [PATCH 08/38] add: message template content --- app/docs/slate/source/includes/_users.md | 8 ++- app/models/message_template.rb | 55 ++++++++++++++++--- app/models/message_template/followed_tip.rb | 16 ++++++ app/models/message_template/issue_assigned.rb | 13 +++-- .../message_template/issue_assigner_expire.rb | 13 +++-- app/models/message_template/issue_atme.rb | 15 ++--- app/models/message_template/issue_changed.rb | 13 +++-- .../message_template/issue_creator_expire.rb | 13 +++-- app/models/message_template/issue_deleted.rb | 13 +++-- app/models/message_template/issue_journal.rb | 13 +++-- app/models/message_template/login_ip_tip.rb | 13 +++-- .../message_template/organization_joined.rb | 13 +++-- .../message_template/organization_left.rb | 13 +++-- .../message_template/organization_role.rb | 13 +++-- app/models/message_template/project_delete.rb | 15 ----- .../message_template/project_deleted.rb | 16 ++++++ .../message_template/project_followed.rb | 13 +++-- app/models/message_template/project_forked.rb | 13 +++-- app/models/message_template/project_issue.rb | 13 +++-- app/models/message_template/project_joined.rb | 13 +++-- app/models/message_template/project_left.rb | 13 +++-- .../message_template/project_member_joined.rb | 13 +++-- .../message_template/project_member_left.rb | 13 +++-- .../message_template/project_milestone.rb | 13 +++-- .../message_template/project_praised.rb | 13 +++-- .../message_template/project_pull_request.rb | 13 +++-- app/models/message_template/project_role.rb | 13 +++-- .../project_setting_changed.rb | 13 +++-- .../message_template/project_transfer.rb | 15 ++--- .../message_template/project_version.rb | 13 +++-- .../message_template/pull_request_assigned.rb | 13 +++-- .../message_template/pull_request_atme.rb | 2 +- .../message_template/pull_request_changed.rb | 13 +++-- .../message_template/pull_request_closed.rb | 16 ++++++ .../message_template/pull_request_journal.rb | 13 +++-- .../message_template/pull_request_merged.rb | 16 ++++++ ...d_notification_url_to_message_templates.rb | 5 ++ public/docs/api.html | 12 +++- 38 files changed, 331 insertions(+), 198 deletions(-) create mode 100644 app/models/message_template/followed_tip.rb delete mode 100644 app/models/message_template/project_delete.rb create mode 100644 app/models/message_template/project_deleted.rb create mode 100644 app/models/message_template/pull_request_closed.rb create mode 100644 app/models/message_template/pull_request_merged.rb create mode 100644 db/migrate/20210914064456_add_notification_url_to_message_templates.rb diff --git a/app/docs/slate/source/includes/_users.md b/app/docs/slate/source/includes/_users.md index b43ca4101..7225b90e3 100644 --- a/app/docs/slate/source/includes/_users.md +++ b/app/docs/slate/source/includes/_users.md @@ -1,7 +1,7 @@ # Users @@ -101,7 +101,7 @@ await octokit.request('GET /api/users/:login/messages.json') |OrganizationJoined | 账号被拉入组织 | |OrganizationLeft | 账号被移出组织 | |OrganizationRole | 账号组织权限变更 | -|ProjectDelete | 我关注的仓库被删除 | +|ProjectDeleted | 我关注的仓库被删除 | |ProjectFollowed | 我管理的仓库被关注 | |ProjectForked | 我管理的仓库被复刻 | |ProjectIssue | 我管理/关注的仓库有新的易修 | @@ -119,7 +119,9 @@ await octokit.request('GET /api/users/:login/messages.json') |PullRequestAssigned | 有新指派给我的合并请求 | |PullReuqestAtme | 在合并请求中@我 | |PullRequestChanged | 我创建或负责的合并请求状态变更 | -|PullRequestJournal | 我创建或负责的合并请求有新的评论 | +|PullRequestClosed | 我创建或负责的合并请求被关闭 | +|PullRequestJournal | 我创建或负责的合并请求有新的评论 | +|PullRequestMerged | 我创建或负责的合并请求被合并 | > 返回的JSON示例: diff --git a/app/models/message_template.rb b/app/models/message_template.rb index f19b77fb8..bee4ebae6 100644 --- a/app/models/message_template.rb +++ b/app/models/message_template.rb @@ -2,13 +2,54 @@ # # Table name: message_templates # -# id :integer not null, primary key -# type :string(255) -# sys_notice :text(65535) -# email :text(65535) -# created_at :datetime not null -# updated_at :datetime not null +# id :integer not null, primary key +# type :string(255) +# sys_notice :text(65535) +# email :text(65535) +# created_at :datetime not null +# updated_at :datetime not null +# notification_url :string(255) # -class MessageTemplate < ApplicationRecord +class MessageTemplate {nickname}关注了你', notification_url: '{baseurl}/{login}') + self.create(type: 'MessageTemplate::IssueAssigned', sys_notice: '{nickname1}在{nickname2}/{repository}指派给你一个易修:{title}', notification_url: '{baseurl}/{owner}/{identifier}/issues/{id}') + self.create(type: 'MessageTemplate::IssueAssignerExpire', sys_notice: '您负责的易修{title}已临近截止日期,请尽快处理', notification_url: '{baseurl}/{owner}/{identifier}/issues/{id}') + self.create(type: 'MessageTemplate::IssueAtme', sys_notice: '{nickname}在易修{title}中@我', notification_url: '{baseurl}/{owner}/{identifier}/issues/{id}') + self.create(type: 'MessageTemplate::IssueChanged', sys_notice: '在项目{nickname2}/{repository1}的易修{title}中:{ifassigner}{nickname1}将负责人从{assigner1}修改为{assigner1}{endassigner}
    {ifstatus}{nickname1}将状态从{status1}修改为{status1}{endstatus}
    {iftracker}{nickname1}将类型从{tracker1}修改为{tracker1}{endtracker}
    {ifpriority}{nickname1}将优先度从{priority1}修改为{priority1}{endpriority}
    {ifmilestone}{nickname1}将里程碑从{milestone1}修改为{milestone1}{endmilestone}
    {iftag}{nickname1}将标签从{tag1}修改为{tag1}{endtag}
    {ifdoneratio}{nickname1}将完成度从{doneratio1}修改为{doneratio1}{enddoneratio}
    {ifbranch}{nickname1}将指定分支从{branch1}修改为{branch1}{endbranch}
    {ifstartdate}{nickname1}将开始日期从{startdate1}修改为{startdate1}{endstartdate}
    {ifduedate}{nickname1}将结束日期从{duedate1}修改为{duedate1}{endduedate}', notification_url: '{baseurl}/{owner}/{identifier}/issues/{id}') + self.create(type: 'MessageTemplate::IssueCreatorExpire', sys_notice: '您发布的易修{title}已临近截止日期,请尽快处理', notification_url: '{baseurl}/{owner}/{identifier}/issues/{id}') + self.create(type: 'MessageTemplate::IssueDeleted', sys_notice: '{nickname}已将易修{title}删除', notification_url: '') + self.create(type: 'MessageTemplate::IssueJournal', sys_notice: '{nickname}评论易修{title}:{notes}', notification_url: '{baseurl}/{owner}/{identifier}/issues/{id}') + self.create(type: 'MessageTemplate::LoginIpTip', sys_notice: '您的账号{nickname}于{login_time)在非常用的IP地址{ip}登录,如非本人操作,请立即修改密码', notification_url: '') + self.create(type: 'MessageTemplate::OrganizationJoined', sys_notice: '你已加入{organization}组织', notification_url: '{baseurl}/{login}') + self.create(type: 'MessageTemplate::OrganizationLeft', sys_notice: '你已被移出{organization}组织', notification_url: '') + self.create(type: 'MessageTemplate::OrganizationRole', sys_notice: '组织{organization}已把你的角色改为{role}', notification_url: '{baseurl}/{owner}') + self.create(type: 'MessageTemplate::ProjectDeleted', sys_notice: '你关注的仓库{nickname}/{repository}已被删除', notification_url: '') + self.create(type: 'MessageTemplate::ProjectFollowed', sys_notice: '{nickname}关注了你管理的仓库', notification_url: '{baseurl}/{login}') + self.create(type: 'MessageTemplate::ProjectForked', sys_notice: '{nickname1}复刻了你管理的仓库{nickname1}/{repository1}到{nickname2}/{repository2}', notification_url: '{baseurl}/{owner}/{identifier}') + self.create(type: 'MessageTemplate::ProjectIssue', sys_notice: '{nickname1}在{nickname2}/{repository}新建易修:{title}', notification_url: '{baseurl}/{owner}/{identifier}/issues/{id}') + self.create(type: 'MessageTemplate::ProjectJoined', sys_notice: '你已加入{repository}项目', notification_url: '{baseurl}/{owner}/{identifier}') + self.create(type: 'MessageTemplate::ProjectLeft', sys_notice: '你已被移出{repository}项目', notification_url: '') + self.create(type: 'MessageTemplate::ProjectMemberJoined', sys_notice: '{nickname1}已加入项目{nickname2}/{repository}', notification_url: '{baseurl}/{owner}/{identifier}') + self.create(type: 'MessageTemplate::ProjectMemberLeft', sys_notice: '{nickname1}已被移出项目{nickname2}/{repository}', notification_url: '{baseurl}/{owner}/{identifier}') + self.create(type: 'MessageTemplate::ProjectMilestone', sys_notice: '{nickname1}在{nickname2}/{repository}创建了一个里程碑:{title}', notification_url: '{baseurl}/{owner}/{identifier}/milestones/{id}') + self.create(type: 'MessageTemplate::ProjectPraised', sys_notice: '{nickname}点赞了你管理的仓库', notification_url: '{baseurl}/{login}') + self.create(type: 'MessageTemplate::ProjectPullRequest', sys_notice: '{nickname1}在{nickname2}/{repository}提交了一个合并请求:{title}', notification_url: '{baseurl}/{owner}/{identifier}/pulls/{id}/Messagecount') + self.create(type: 'MessageTemplate::ProjectRole', sys_notice: '仓库{repository}已把你的角色改为{role}', notification_url: '{baseurl}/{owner}/{identifier}') + self.create(type: 'MessageTemplate::ProjectSettingChanged', sys_notice: '{nickname1}更改了{nickname2}/{repository}仓库设置:{ifname}更改项目名称为"{name}";{endname}{ifdescription}更改项目简介为"{description}";{enddescription}{ifcategory}更改项目类别为"{category}";{endcategory}{iflanguage}更改项目语言为"{language}";{endlanguage}{ifpermission}将仓库设为"{permission}";{endpermission}{ifnavbar}将项目导航更改为"{navbar}";{endnavbar}', notification_url: '{baseurl}/{owner}/{identifier}/settings') + self.create(type: 'MessageTemplate::ProjectTransfer', sys_notice: '你关注的仓库{nickname1}/{repository1}已被转移至{nickname2}/{repository2}', notification_url: '{baseurl}/{owner}/{identifier}') + self.create(type: 'MessageTemplate::ProjectVersion', sys_notice: '{nickname1}在{nickname2}/{repository}创建了发行版:{title}', notification_url: '{baseurl}/{owner}/{identifier}/releases') + self.create(type: 'MessageTemplate::PullRequestAssigned', sys_notice: '{nickname1}在{nickname2}/{repository}指派给你一个合并请求:{title}', notification_url: '{baseurl}/{owner}/{identifier}/pulls/{id}/Messagecount') + self.create(type: 'MessageTemplate::PullRequestAtme', sys_notice: '{nickname}在合并请求{title}中@我', notification_url: '{baseurl}/{owner}/{identifier}/pulls/{id}/Messagecount') + self.create(type: 'MessageTemplate::PullRequestChanged', sys_notice: '在项目{nickname2}/{repository1}的合并请求{title}中:{ifassigner}{nickname1}将审查成员从{assigner1}修改为{assigner1}{endassigner}
    {ifmilestone}{nickname1}将里程碑从{milestone1}修改为{milestone1}{endmilestone}
    {iftag}{nickname1}将标签从{tag1}修改为{tag1}{endtag}
    {ifpriority}{nickname1}将优先度从{priority1}修改为{priority1}{endpriority}
    ', notification_url: '{baseurl}/{owner}/{identifier}/pulls/{id}/Messagecount') + self.create(type: 'MessageTemplate::PullRequestClosed', sys_notice: '你提交的合并请求:{title]被拒绝', notification_url: '') + self.create(type: 'MessageTemplate::PullRequestJournal', sys_notice: '{nickname}评论合并请求{title}:{notes}', notification_url: '{baseurl}/{owner}/{identifier}/pulls/{id}/Messagecount') + self.create(type: 'MessageTemplate::PullRequestMerged', sys_notice: '你提交的合并请求:{title}被合并', notification_url: '{baseurl}/{owner}/{identifier}/pulls/{id}/Messagecount') + end + + def self.sys_notice + self.last&.sys_notice + end end diff --git a/app/models/message_template/followed_tip.rb b/app/models/message_template/followed_tip.rb new file mode 100644 index 000000000..dd11982c6 --- /dev/null +++ b/app/models/message_template/followed_tip.rb @@ -0,0 +1,16 @@ +# == Schema Information +# +# Table name: message_templates +# +# id :integer not null, primary key +# type :string(255) +# sys_notice :text(65535) +# email :text(65535) +# created_at :datetime not null +# updated_at :datetime not null +# notification_url :string(255) +# + +# 被关注提示 +class MessageTemplate::FollowedTip < MessageTemplate +end diff --git a/app/models/message_template/issue_assigned.rb b/app/models/message_template/issue_assigned.rb index 51e3e6174..76e9781ab 100644 --- a/app/models/message_template/issue_assigned.rb +++ b/app/models/message_template/issue_assigned.rb @@ -2,12 +2,13 @@ # # Table name: message_templates # -# id :integer not null, primary key -# type :string(255) -# sys_notice :text(65535) -# email :text(65535) -# created_at :datetime not null -# updated_at :datetime not null +# id :integer not null, primary key +# type :string(255) +# sys_notice :text(65535) +# email :text(65535) +# created_at :datetime not null +# updated_at :datetime not null +# notification_url :string(255) # # 有新指派给我的易修 diff --git a/app/models/message_template/issue_assigner_expire.rb b/app/models/message_template/issue_assigner_expire.rb index 03af6163c..b9afeae00 100644 --- a/app/models/message_template/issue_assigner_expire.rb +++ b/app/models/message_template/issue_assigner_expire.rb @@ -2,12 +2,13 @@ # # Table name: message_templates # -# id :integer not null, primary key -# type :string(255) -# sys_notice :text(65535) -# email :text(65535) -# created_at :datetime not null -# updated_at :datetime not null +# id :integer not null, primary key +# type :string(255) +# sys_notice :text(65535) +# email :text(65535) +# created_at :datetime not null +# updated_at :datetime not null +# notification_url :string(255) # # 我负责的易修截止日期到达最后一天 diff --git a/app/models/message_template/issue_atme.rb b/app/models/message_template/issue_atme.rb index d09155828..2a87da11c 100644 --- a/app/models/message_template/issue_atme.rb +++ b/app/models/message_template/issue_atme.rb @@ -2,14 +2,15 @@ # # Table name: message_templates # -# id :integer not null, primary key -# type :string(255) -# sys_notice :text(65535) -# email :text(65535) -# created_at :datetime not null -# updated_at :datetime not null +# id :integer not null, primary key +# type :string(255) +# sys_notice :text(65535) +# email :text(65535) +# created_at :datetime not null +# updated_at :datetime not null +# notification_url :string(255) # # 在易修中@我 class MessageTemplate::IssueAtme < MessageTemplate -end \ No newline at end of file +end diff --git a/app/models/message_template/issue_changed.rb b/app/models/message_template/issue_changed.rb index 98772ab0e..0820d4bfe 100644 --- a/app/models/message_template/issue_changed.rb +++ b/app/models/message_template/issue_changed.rb @@ -2,12 +2,13 @@ # # Table name: message_templates # -# id :integer not null, primary key -# type :string(255) -# sys_notice :text(65535) -# email :text(65535) -# created_at :datetime not null -# updated_at :datetime not null +# id :integer not null, primary key +# type :string(255) +# sys_notice :text(65535) +# email :text(65535) +# created_at :datetime not null +# updated_at :datetime not null +# notification_url :string(255) # # 我创建或负责的易修状态变更 diff --git a/app/models/message_template/issue_creator_expire.rb b/app/models/message_template/issue_creator_expire.rb index ee1940714..41c471528 100644 --- a/app/models/message_template/issue_creator_expire.rb +++ b/app/models/message_template/issue_creator_expire.rb @@ -2,12 +2,13 @@ # # Table name: message_templates # -# id :integer not null, primary key -# type :string(255) -# sys_notice :text(65535) -# email :text(65535) -# created_at :datetime not null -# updated_at :datetime not null +# id :integer not null, primary key +# type :string(255) +# sys_notice :text(65535) +# email :text(65535) +# created_at :datetime not null +# updated_at :datetime not null +# notification_url :string(255) # # 我创建的易修截止日期到达最后一天 diff --git a/app/models/message_template/issue_deleted.rb b/app/models/message_template/issue_deleted.rb index d25fbffd0..a6a0ef204 100644 --- a/app/models/message_template/issue_deleted.rb +++ b/app/models/message_template/issue_deleted.rb @@ -2,12 +2,13 @@ # # Table name: message_templates # -# id :integer not null, primary key -# type :string(255) -# sys_notice :text(65535) -# email :text(65535) -# created_at :datetime not null -# updated_at :datetime not null +# id :integer not null, primary key +# type :string(255) +# sys_notice :text(65535) +# email :text(65535) +# created_at :datetime not null +# updated_at :datetime not null +# notification_url :string(255) # # 我创建或负责的易修删除 diff --git a/app/models/message_template/issue_journal.rb b/app/models/message_template/issue_journal.rb index 4252704c3..e4f7572b9 100644 --- a/app/models/message_template/issue_journal.rb +++ b/app/models/message_template/issue_journal.rb @@ -2,12 +2,13 @@ # # Table name: message_templates # -# id :integer not null, primary key -# type :string(255) -# sys_notice :text(65535) -# email :text(65535) -# created_at :datetime not null -# updated_at :datetime not null +# id :integer not null, primary key +# type :string(255) +# sys_notice :text(65535) +# email :text(65535) +# created_at :datetime not null +# updated_at :datetime not null +# notification_url :string(255) # # 我创建或负责的易修有新的评论 diff --git a/app/models/message_template/login_ip_tip.rb b/app/models/message_template/login_ip_tip.rb index a86e03a50..898a30c72 100644 --- a/app/models/message_template/login_ip_tip.rb +++ b/app/models/message_template/login_ip_tip.rb @@ -2,12 +2,13 @@ # # Table name: message_templates # -# id :integer not null, primary key -# type :string(255) -# sys_notice :text(65535) -# email :text(65535) -# created_at :datetime not null -# updated_at :datetime not null +# id :integer not null, primary key +# type :string(255) +# sys_notice :text(65535) +# email :text(65535) +# created_at :datetime not null +# updated_at :datetime not null +# notification_url :string(255) # # 登录异常提示 diff --git a/app/models/message_template/organization_joined.rb b/app/models/message_template/organization_joined.rb index 4440bb742..95c9611ac 100644 --- a/app/models/message_template/organization_joined.rb +++ b/app/models/message_template/organization_joined.rb @@ -2,12 +2,13 @@ # # Table name: message_templates # -# id :integer not null, primary key -# type :string(255) -# sys_notice :text(65535) -# email :text(65535) -# created_at :datetime not null -# updated_at :datetime not null +# id :integer not null, primary key +# type :string(255) +# sys_notice :text(65535) +# email :text(65535) +# created_at :datetime not null +# updated_at :datetime not null +# notification_url :string(255) # # 账号被拉入组织 diff --git a/app/models/message_template/organization_left.rb b/app/models/message_template/organization_left.rb index 9d346b7b9..30df516e1 100644 --- a/app/models/message_template/organization_left.rb +++ b/app/models/message_template/organization_left.rb @@ -2,12 +2,13 @@ # # Table name: message_templates # -# id :integer not null, primary key -# type :string(255) -# sys_notice :text(65535) -# email :text(65535) -# created_at :datetime not null -# updated_at :datetime not null +# id :integer not null, primary key +# type :string(255) +# sys_notice :text(65535) +# email :text(65535) +# created_at :datetime not null +# updated_at :datetime not null +# notification_url :string(255) # # 账号被移出组织 diff --git a/app/models/message_template/organization_role.rb b/app/models/message_template/organization_role.rb index 1222a6242..6ca825034 100644 --- a/app/models/message_template/organization_role.rb +++ b/app/models/message_template/organization_role.rb @@ -2,12 +2,13 @@ # # Table name: message_templates # -# id :integer not null, primary key -# type :string(255) -# sys_notice :text(65535) -# email :text(65535) -# created_at :datetime not null -# updated_at :datetime not null +# id :integer not null, primary key +# type :string(255) +# sys_notice :text(65535) +# email :text(65535) +# created_at :datetime not null +# updated_at :datetime not null +# notification_url :string(255) # # 账号组织权限变更 diff --git a/app/models/message_template/project_delete.rb b/app/models/message_template/project_delete.rb deleted file mode 100644 index b03813f3a..000000000 --- a/app/models/message_template/project_delete.rb +++ /dev/null @@ -1,15 +0,0 @@ -# == Schema Information -# -# Table name: message_templates -# -# id :integer not null, primary key -# type :string(255) -# sys_notice :text(65535) -# email :text(65535) -# created_at :datetime not null -# updated_at :datetime not null -# - -# 我关注的仓库被删除 -class MessageTemplate::ProjectDelete < MessageTemplate -end diff --git a/app/models/message_template/project_deleted.rb b/app/models/message_template/project_deleted.rb new file mode 100644 index 000000000..334c6d871 --- /dev/null +++ b/app/models/message_template/project_deleted.rb @@ -0,0 +1,16 @@ +# == Schema Information +# +# Table name: message_templates +# +# id :integer not null, primary key +# type :string(255) +# sys_notice :text(65535) +# email :text(65535) +# created_at :datetime not null +# updated_at :datetime not null +# notification_url :string(255) +# + +# 我关注的仓库被删除 +class MessageTemplate::ProjectDeleted < MessageTemplate +end diff --git a/app/models/message_template/project_followed.rb b/app/models/message_template/project_followed.rb index 654e19c7e..d7ade39e2 100644 --- a/app/models/message_template/project_followed.rb +++ b/app/models/message_template/project_followed.rb @@ -2,12 +2,13 @@ # # Table name: message_templates # -# id :integer not null, primary key -# type :string(255) -# sys_notice :text(65535) -# email :text(65535) -# created_at :datetime not null -# updated_at :datetime not null +# id :integer not null, primary key +# type :string(255) +# sys_notice :text(65535) +# email :text(65535) +# created_at :datetime not null +# updated_at :datetime not null +# notification_url :string(255) # # 我管理的仓库被关注 diff --git a/app/models/message_template/project_forked.rb b/app/models/message_template/project_forked.rb index 711460c01..b69892fa0 100644 --- a/app/models/message_template/project_forked.rb +++ b/app/models/message_template/project_forked.rb @@ -2,12 +2,13 @@ # # Table name: message_templates # -# id :integer not null, primary key -# type :string(255) -# sys_notice :text(65535) -# email :text(65535) -# created_at :datetime not null -# updated_at :datetime not null +# id :integer not null, primary key +# type :string(255) +# sys_notice :text(65535) +# email :text(65535) +# created_at :datetime not null +# updated_at :datetime not null +# notification_url :string(255) # # 我管理的仓库被复刻 diff --git a/app/models/message_template/project_issue.rb b/app/models/message_template/project_issue.rb index fc34d9a52..f657084a5 100644 --- a/app/models/message_template/project_issue.rb +++ b/app/models/message_template/project_issue.rb @@ -2,12 +2,13 @@ # # Table name: message_templates # -# id :integer not null, primary key -# type :string(255) -# sys_notice :text(65535) -# email :text(65535) -# created_at :datetime not null -# updated_at :datetime not null +# id :integer not null, primary key +# type :string(255) +# sys_notice :text(65535) +# email :text(65535) +# created_at :datetime not null +# updated_at :datetime not null +# notification_url :string(255) # # 我管理/关注的仓库有新的易修 diff --git a/app/models/message_template/project_joined.rb b/app/models/message_template/project_joined.rb index 6d21a39e1..1da83b0c4 100644 --- a/app/models/message_template/project_joined.rb +++ b/app/models/message_template/project_joined.rb @@ -2,12 +2,13 @@ # # Table name: message_templates # -# id :integer not null, primary key -# type :string(255) -# sys_notice :text(65535) -# email :text(65535) -# created_at :datetime not null -# updated_at :datetime not null +# id :integer not null, primary key +# type :string(255) +# sys_notice :text(65535) +# email :text(65535) +# created_at :datetime not null +# updated_at :datetime not null +# notification_url :string(255) # # 账号被拉入项目 diff --git a/app/models/message_template/project_left.rb b/app/models/message_template/project_left.rb index f95467f0a..639235026 100644 --- a/app/models/message_template/project_left.rb +++ b/app/models/message_template/project_left.rb @@ -2,12 +2,13 @@ # # Table name: message_templates # -# id :integer not null, primary key -# type :string(255) -# sys_notice :text(65535) -# email :text(65535) -# created_at :datetime not null -# updated_at :datetime not null +# id :integer not null, primary key +# type :string(255) +# sys_notice :text(65535) +# email :text(65535) +# created_at :datetime not null +# updated_at :datetime not null +# notification_url :string(255) # # 账号被移出项目 diff --git a/app/models/message_template/project_member_joined.rb b/app/models/message_template/project_member_joined.rb index 6e4e1accc..0b4025459 100644 --- a/app/models/message_template/project_member_joined.rb +++ b/app/models/message_template/project_member_joined.rb @@ -2,12 +2,13 @@ # # Table name: message_templates # -# id :integer not null, primary key -# type :string(255) -# sys_notice :text(65535) -# email :text(65535) -# created_at :datetime not null -# updated_at :datetime not null +# id :integer not null, primary key +# type :string(255) +# sys_notice :text(65535) +# email :text(65535) +# created_at :datetime not null +# updated_at :datetime not null +# notification_url :string(255) # # 我管理的仓库有成员加入 diff --git a/app/models/message_template/project_member_left.rb b/app/models/message_template/project_member_left.rb index 3259034d7..ed261e0f3 100644 --- a/app/models/message_template/project_member_left.rb +++ b/app/models/message_template/project_member_left.rb @@ -2,12 +2,13 @@ # # Table name: message_templates # -# id :integer not null, primary key -# type :string(255) -# sys_notice :text(65535) -# email :text(65535) -# created_at :datetime not null -# updated_at :datetime not null +# id :integer not null, primary key +# type :string(255) +# sys_notice :text(65535) +# email :text(65535) +# created_at :datetime not null +# updated_at :datetime not null +# notification_url :string(255) # # 我管理的仓库有成员移出 diff --git a/app/models/message_template/project_milestone.rb b/app/models/message_template/project_milestone.rb index b1ff0b9e2..b28766c5f 100644 --- a/app/models/message_template/project_milestone.rb +++ b/app/models/message_template/project_milestone.rb @@ -2,12 +2,13 @@ # # Table name: message_templates # -# id :integer not null, primary key -# type :string(255) -# sys_notice :text(65535) -# email :text(65535) -# created_at :datetime not null -# updated_at :datetime not null +# id :integer not null, primary key +# type :string(255) +# sys_notice :text(65535) +# email :text(65535) +# created_at :datetime not null +# updated_at :datetime not null +# notification_url :string(255) # # 我管理的仓库有新的里程碑 diff --git a/app/models/message_template/project_praised.rb b/app/models/message_template/project_praised.rb index ebbdfd93f..ec7a0564f 100644 --- a/app/models/message_template/project_praised.rb +++ b/app/models/message_template/project_praised.rb @@ -2,12 +2,13 @@ # # Table name: message_templates # -# id :integer not null, primary key -# type :string(255) -# sys_notice :text(65535) -# email :text(65535) -# created_at :datetime not null -# updated_at :datetime not null +# id :integer not null, primary key +# type :string(255) +# sys_notice :text(65535) +# email :text(65535) +# created_at :datetime not null +# updated_at :datetime not null +# notification_url :string(255) # # 我管理的仓库被点赞 diff --git a/app/models/message_template/project_pull_request.rb b/app/models/message_template/project_pull_request.rb index b1706eb91..43a8359b7 100644 --- a/app/models/message_template/project_pull_request.rb +++ b/app/models/message_template/project_pull_request.rb @@ -2,12 +2,13 @@ # # Table name: message_templates # -# id :integer not null, primary key -# type :string(255) -# sys_notice :text(65535) -# email :text(65535) -# created_at :datetime not null -# updated_at :datetime not null +# id :integer not null, primary key +# type :string(255) +# sys_notice :text(65535) +# email :text(65535) +# created_at :datetime not null +# updated_at :datetime not null +# notification_url :string(255) # # 我管理/关注的仓库有新的合并请求 diff --git a/app/models/message_template/project_role.rb b/app/models/message_template/project_role.rb index a59df5361..95ebe5ba9 100644 --- a/app/models/message_template/project_role.rb +++ b/app/models/message_template/project_role.rb @@ -2,12 +2,13 @@ # # Table name: message_templates # -# id :integer not null, primary key -# type :string(255) -# sys_notice :text(65535) -# email :text(65535) -# created_at :datetime not null -# updated_at :datetime not null +# id :integer not null, primary key +# type :string(255) +# sys_notice :text(65535) +# email :text(65535) +# created_at :datetime not null +# updated_at :datetime not null +# notification_url :string(255) # # 账号仓库权限变更 diff --git a/app/models/message_template/project_setting_changed.rb b/app/models/message_template/project_setting_changed.rb index 1c4040f5d..b983e6c60 100644 --- a/app/models/message_template/project_setting_changed.rb +++ b/app/models/message_template/project_setting_changed.rb @@ -2,12 +2,13 @@ # # Table name: message_templates # -# id :integer not null, primary key -# type :string(255) -# sys_notice :text(65535) -# email :text(65535) -# created_at :datetime not null -# updated_at :datetime not null +# id :integer not null, primary key +# type :string(255) +# sys_notice :text(65535) +# email :text(65535) +# created_at :datetime not null +# updated_at :datetime not null +# notification_url :string(255) # # 我管理的仓库项目设置被更改 diff --git a/app/models/message_template/project_transfer.rb b/app/models/message_template/project_transfer.rb index 38998d03b..ce422f090 100644 --- a/app/models/message_template/project_transfer.rb +++ b/app/models/message_template/project_transfer.rb @@ -2,14 +2,15 @@ # # Table name: message_templates # -# id :integer not null, primary key -# type :string(255) -# sys_notice :text(65535) -# email :text(65535) -# created_at :datetime not null -# updated_at :datetime not null +# id :integer not null, primary key +# type :string(255) +# sys_notice :text(65535) +# email :text(65535) +# created_at :datetime not null +# updated_at :datetime not null +# notification_url :string(255) # # 我关注的仓库被转移 class MessageTemplate::ProjectTransfer < MessageTemplate -end \ No newline at end of file +end diff --git a/app/models/message_template/project_version.rb b/app/models/message_template/project_version.rb index 330dfe95d..afc25fc4e 100644 --- a/app/models/message_template/project_version.rb +++ b/app/models/message_template/project_version.rb @@ -2,12 +2,13 @@ # # Table name: message_templates # -# id :integer not null, primary key -# type :string(255) -# sys_notice :text(65535) -# email :text(65535) -# created_at :datetime not null -# updated_at :datetime not null +# id :integer not null, primary key +# type :string(255) +# sys_notice :text(65535) +# email :text(65535) +# created_at :datetime not null +# updated_at :datetime not null +# notification_url :string(255) # # 我关注的仓库有新的发行版 diff --git a/app/models/message_template/pull_request_assigned.rb b/app/models/message_template/pull_request_assigned.rb index 1be86530c..d6d497daa 100644 --- a/app/models/message_template/pull_request_assigned.rb +++ b/app/models/message_template/pull_request_assigned.rb @@ -2,12 +2,13 @@ # # Table name: message_templates # -# id :integer not null, primary key -# type :string(255) -# sys_notice :text(65535) -# email :text(65535) -# created_at :datetime not null -# updated_at :datetime not null +# id :integer not null, primary key +# type :string(255) +# sys_notice :text(65535) +# email :text(65535) +# created_at :datetime not null +# updated_at :datetime not null +# notification_url :string(255) # # 有新指派给我的合并请求 diff --git a/app/models/message_template/pull_request_atme.rb b/app/models/message_template/pull_request_atme.rb index afa7a4006..5ff526fa9 100644 --- a/app/models/message_template/pull_request_atme.rb +++ b/app/models/message_template/pull_request_atme.rb @@ -11,5 +11,5 @@ # # 在合并请求中@我 -class MessageTemplate::PullReuqestAtme < MessageTemplate +class MessageTemplate::PullRequestAtme < MessageTemplate end \ No newline at end of file diff --git a/app/models/message_template/pull_request_changed.rb b/app/models/message_template/pull_request_changed.rb index 002de3a28..dcde72b84 100644 --- a/app/models/message_template/pull_request_changed.rb +++ b/app/models/message_template/pull_request_changed.rb @@ -2,12 +2,13 @@ # # Table name: message_templates # -# id :integer not null, primary key -# type :string(255) -# sys_notice :text(65535) -# email :text(65535) -# created_at :datetime not null -# updated_at :datetime not null +# id :integer not null, primary key +# type :string(255) +# sys_notice :text(65535) +# email :text(65535) +# created_at :datetime not null +# updated_at :datetime not null +# notification_url :string(255) # # 我创建或负责的合并请求状态变更 diff --git a/app/models/message_template/pull_request_closed.rb b/app/models/message_template/pull_request_closed.rb new file mode 100644 index 000000000..0574b6409 --- /dev/null +++ b/app/models/message_template/pull_request_closed.rb @@ -0,0 +1,16 @@ +# == Schema Information +# +# Table name: message_templates +# +# id :integer not null, primary key +# type :string(255) +# sys_notice :text(65535) +# email :text(65535) +# created_at :datetime not null +# updated_at :datetime not null +# notification_url :string(255) +# + +# 我创建或负责的合并请求被关闭 +class MessageTemplate::PullRequestClosed < MessageTemplate +end diff --git a/app/models/message_template/pull_request_journal.rb b/app/models/message_template/pull_request_journal.rb index 0f79d1663..6d3b4fe3b 100644 --- a/app/models/message_template/pull_request_journal.rb +++ b/app/models/message_template/pull_request_journal.rb @@ -2,12 +2,13 @@ # # Table name: message_templates # -# id :integer not null, primary key -# type :string(255) -# sys_notice :text(65535) -# email :text(65535) -# created_at :datetime not null -# updated_at :datetime not null +# id :integer not null, primary key +# type :string(255) +# sys_notice :text(65535) +# email :text(65535) +# created_at :datetime not null +# updated_at :datetime not null +# notification_url :string(255) # # 我创建或负责的合并请求有新的评论 diff --git a/app/models/message_template/pull_request_merged.rb b/app/models/message_template/pull_request_merged.rb new file mode 100644 index 000000000..b06687cbc --- /dev/null +++ b/app/models/message_template/pull_request_merged.rb @@ -0,0 +1,16 @@ +# == Schema Information +# +# Table name: message_templates +# +# id :integer not null, primary key +# type :string(255) +# sys_notice :text(65535) +# email :text(65535) +# created_at :datetime not null +# updated_at :datetime not null +# notification_url :string(255) +# + +# 我创建或负责的合并请求被合并 +class MessageTemplate::PullRequestMerged < MessageTemplate +end diff --git a/db/migrate/20210914064456_add_notification_url_to_message_templates.rb b/db/migrate/20210914064456_add_notification_url_to_message_templates.rb new file mode 100644 index 000000000..2adb842c8 --- /dev/null +++ b/db/migrate/20210914064456_add_notification_url_to_message_templates.rb @@ -0,0 +1,5 @@ +class AddNotificationUrlToMessageTemplates < ActiveRecord::Migration[5.2] + def change + add_column :message_templates, :notification_url, :string + end +end diff --git a/public/docs/api.html b/public/docs/api.html index 94b177432..6446d796c 100644 --- a/public/docs/api.html +++ b/public/docs/api.html @@ -921,7 +921,7 @@ Success — a happy kitten is an authenticated kitten!

    Users

    获取当前登陆用户信息

    @@ -1143,7 +1143,7 @@ Success — a happy kitten is an authenticated kitten! 账号组织权限变更 -ProjectDelete +ProjectDeleted 我关注的仓库被删除 @@ -1215,9 +1215,17 @@ Success — a happy kitten is an authenticated kitten! 我创建或负责的合并请求状态变更 +PullRequestClosed +我创建或负责的合并请求被关闭 + + PullRequestJournal 我创建或负责的合并请求有新的评论 + +PullRequestMerged +我创建或负责的合并请求被合并 +
    From 65af40c29b87632c0397324526f857ef125598ef Mon Sep 17 00:00:00 2001 From: yystopf Date: Tue, 14 Sep 2021 23:04:33 +0800 Subject: [PATCH 09/38] add: join message content be necessary --- app/models/message_template.rb | 20 +++- app/models/message_template/followed_tip.rb | 7 ++ app/models/message_template/issue_assigned.rb | 12 ++ .../message_template/issue_assigner_expire.rb | 12 ++ app/models/message_template/issue_atme.rb | 12 ++ app/models/message_template/issue_changed.rb | 113 ++++++++++++++++++ .../message_template/issue_creator_expire.rb | 12 ++ app/models/message_template/issue_deleted.rb | 11 ++ app/models/message_template/issue_journal.rb | 10 +- app/models/message_template/login_ip_tip.rb | 10 +- .../message_template/organization_joined.rb | 10 ++ .../message_template/organization_left.rb | 10 ++ .../message_template/organization_role.rb | 10 ++ .../message_template/project_deleted.rb | 10 +- .../message_template/project_followed.rb | 10 +- app/models/message_template/project_forked.rb | 10 +- app/models/message_template/project_issue.rb | 10 +- app/models/message_template/project_joined.rb | 10 ++ app/models/message_template/project_left.rb | 9 ++ .../message_template/project_member_joined.rb | 10 +- .../message_template/project_member_left.rb | 10 +- .../message_template/project_milestone.rb | 10 +- .../message_template/project_praised.rb | 10 +- .../message_template/project_pull_request.rb | 10 +- app/models/message_template/project_role.rb | 10 ++ .../project_setting_changed.rb | 60 ++++++++++ .../message_template/project_transfer.rb | 10 +- .../message_template/project_version.rb | 10 +- .../message_template/pull_request_assigned.rb | 12 ++ .../message_template/pull_request_atme.rb | 12 ++ .../message_template/pull_request_changed.rb | 54 +++++++++ .../message_template/pull_request_closed.rb | 12 ++ .../message_template/pull_request_journal.rb | 10 +- .../message_template/pull_request_merged.rb | 12 ++ 34 files changed, 542 insertions(+), 18 deletions(-) diff --git a/app/models/message_template.rb b/app/models/message_template.rb index bee4ebae6..6c5e4df22 100644 --- a/app/models/message_template.rb +++ b/app/models/message_template.rb @@ -18,14 +18,14 @@ class MessageTemplate {nickname2}/{repository}指派给你一个易修:{title}', notification_url: '{baseurl}/{owner}/{identifier}/issues/{id}') self.create(type: 'MessageTemplate::IssueAssignerExpire', sys_notice: '您负责的易修{title}已临近截止日期,请尽快处理', notification_url: '{baseurl}/{owner}/{identifier}/issues/{id}') self.create(type: 'MessageTemplate::IssueAtme', sys_notice: '{nickname}在易修{title}中@我', notification_url: '{baseurl}/{owner}/{identifier}/issues/{id}') - self.create(type: 'MessageTemplate::IssueChanged', sys_notice: '在项目{nickname2}/{repository1}的易修{title}中:{ifassigner}{nickname1}将负责人从{assigner1}修改为{assigner1}{endassigner}
    {ifstatus}{nickname1}将状态从{status1}修改为{status1}{endstatus}
    {iftracker}{nickname1}将类型从{tracker1}修改为{tracker1}{endtracker}
    {ifpriority}{nickname1}将优先度从{priority1}修改为{priority1}{endpriority}
    {ifmilestone}{nickname1}将里程碑从{milestone1}修改为{milestone1}{endmilestone}
    {iftag}{nickname1}将标签从{tag1}修改为{tag1}{endtag}
    {ifdoneratio}{nickname1}将完成度从{doneratio1}修改为{doneratio1}{enddoneratio}
    {ifbranch}{nickname1}将指定分支从{branch1}修改为{branch1}{endbranch}
    {ifstartdate}{nickname1}将开始日期从{startdate1}修改为{startdate1}{endstartdate}
    {ifduedate}{nickname1}将结束日期从{duedate1}修改为{duedate1}{endduedate}', notification_url: '{baseurl}/{owner}/{identifier}/issues/{id}') + self.create(type: 'MessageTemplate::IssueChanged', sys_notice: '在项目{nickname2}/{repository}的易修{title}中:{ifassigner}{nickname1}将负责人从{assigner1}修改为{assigner2}
    {endassigner}{ifstatus}{nickname1}将状态从{status1}修改为{status2}
    {endstatus}{iftracker}{nickname1}将类型从{tracker1}修改为{tracker2}
    {endtracker}{ifpriority}{nickname1}将优先级从{priority1}修改为{priority2}
    {endpriority}{ifmilestone}{nickname1}将里程碑从{milestone1}修改为{milestone2}
    {endmilestone}{iftag}{nickname1}将标签从{tag1}修改为{tag2}
    {endtag}{ifdoneratio}{nickname1}将完成度从{doneratio2}修改为{doneratio1}{enddoneratio}
    {ifbranch}{nickname1}将指定分支从{branch1}修改为{branch2}
    {endbranch}{ifstartdate}{nickname1}将开始日期从{startdate1}修改为{startdate2}
    {endstartdate}{ifduedate}{nickname1}将结束日期从{duedate1}修改为{duedate2}
    {endduedate}', notification_url: '{baseurl}/{owner}/{identifier}/issues/{id}') self.create(type: 'MessageTemplate::IssueCreatorExpire', sys_notice: '您发布的易修{title}已临近截止日期,请尽快处理', notification_url: '{baseurl}/{owner}/{identifier}/issues/{id}') self.create(type: 'MessageTemplate::IssueDeleted', sys_notice: '{nickname}已将易修{title}删除', notification_url: '') self.create(type: 'MessageTemplate::IssueJournal', sys_notice: '{nickname}评论易修{title}:{notes}', notification_url: '{baseurl}/{owner}/{identifier}/issues/{id}') self.create(type: 'MessageTemplate::LoginIpTip', sys_notice: '您的账号{nickname}于{login_time)在非常用的IP地址{ip}登录,如非本人操作,请立即修改密码', notification_url: '') self.create(type: 'MessageTemplate::OrganizationJoined', sys_notice: '你已加入{organization}组织', notification_url: '{baseurl}/{login}') self.create(type: 'MessageTemplate::OrganizationLeft', sys_notice: '你已被移出{organization}组织', notification_url: '') - self.create(type: 'MessageTemplate::OrganizationRole', sys_notice: '组织{organization}已把你的角色改为{role}', notification_url: '{baseurl}/{owner}') + self.create(type: 'MessageTemplate::OrganizationRole', sys_notice: '组织{organization}已把你的角色改为{role}', notification_url: '{baseurl}/{login}') self.create(type: 'MessageTemplate::ProjectDeleted', sys_notice: '你关注的仓库{nickname}/{repository}已被删除', notification_url: '') self.create(type: 'MessageTemplate::ProjectFollowed', sys_notice: '{nickname}关注了你管理的仓库', notification_url: '{baseurl}/{login}') self.create(type: 'MessageTemplate::ProjectForked', sys_notice: '{nickname1}复刻了你管理的仓库{nickname1}/{repository1}到{nickname2}/{repository2}', notification_url: '{baseurl}/{owner}/{identifier}') @@ -43,8 +43,8 @@ class MessageTemplate {nickname2}/{repository}
    创建了发行版:{title}', notification_url: '{baseurl}/{owner}/{identifier}/releases') self.create(type: 'MessageTemplate::PullRequestAssigned', sys_notice: '{nickname1}在{nickname2}/{repository}指派给你一个合并请求:{title}', notification_url: '{baseurl}/{owner}/{identifier}/pulls/{id}/Messagecount') self.create(type: 'MessageTemplate::PullRequestAtme', sys_notice: '{nickname}在合并请求{title}中@我', notification_url: '{baseurl}/{owner}/{identifier}/pulls/{id}/Messagecount') - self.create(type: 'MessageTemplate::PullRequestChanged', sys_notice: '在项目{nickname2}/{repository1}的合并请求{title}中:{ifassigner}{nickname1}将审查成员从{assigner1}修改为{assigner1}{endassigner}
    {ifmilestone}{nickname1}将里程碑从{milestone1}修改为{milestone1}{endmilestone}
    {iftag}{nickname1}将标签从{tag1}修改为{tag1}{endtag}
    {ifpriority}{nickname1}将优先度从{priority1}修改为{priority1}{endpriority}
    ', notification_url: '{baseurl}/{owner}/{identifier}/pulls/{id}/Messagecount') - self.create(type: 'MessageTemplate::PullRequestClosed', sys_notice: '你提交的合并请求:{title]被拒绝', notification_url: '') + self.create(type: 'MessageTemplate::PullRequestChanged', sys_notice: '在项目{nickname2}/{repository}的合并请求{title}中:{ifassigner}{nickname1}将审查成员从{assigner1}修改为{assigner2}
    {endassigner}{ifmilestone}{nickname1}将里程碑从{milestone1}修改为{milestone2}
    {endmilestone}{iftag}{nickname1}将标签从{tag1}修改为{tag2}
    {endtag}{ifpriority}{nickname1}将优先级从{priority1}修改为{priority2}
    {endpriority}', notification_url: '{baseurl}/{owner}/{identifier}/pulls/{id}/Messagecount') + self.create(type: 'MessageTemplate::PullRequestClosed', sys_notice: '你提交的合并请求:{title}被拒绝', notification_url: '') self.create(type: 'MessageTemplate::PullRequestJournal', sys_notice: '{nickname}评论合并请求{title}:{notes}', notification_url: '{baseurl}/{owner}/{identifier}/pulls/{id}/Messagecount') self.create(type: 'MessageTemplate::PullRequestMerged', sys_notice: '你提交的合并请求:{title}被合并', notification_url: '{baseurl}/{owner}/{identifier}/pulls/{id}/Messagecount') end @@ -52,4 +52,16 @@ class MessageTemplate e + Rails.logger.info("MessageTemplate::IssueAssigned.get_message_content [ERROR] #{e}") + return '', '', '' + end end diff --git a/app/models/message_template/issue_assigner_expire.rb b/app/models/message_template/issue_assigner_expire.rb index b9afeae00..dc7a34fa9 100644 --- a/app/models/message_template/issue_assigner_expire.rb +++ b/app/models/message_template/issue_assigner_expire.rb @@ -13,4 +13,16 @@ # 我负责的易修截止日期到达最后一天 class MessageTemplate::IssueAssignerExpire < MessageTemplate + + # MessageTemplate::IssueAssignerExpire.get_message_content(User.where(login: 'yystopf'), Issue.last) + def self.get_message_content(receivers, issue) + project = issue&.project + owner = project&.owner + content = sys_notice.gsub('{title}', issue&.subject) + url = notification_url.gsub('{owner}', owner&.login).gsub('{identifier}', project&.identifier).gsub('{id}', issue&.id.to_s) + return receivers_string(receivers), content, url + rescue => e + Rails.logger.info("MessageTemplate::IssueAssignerExpire.get_message_content [ERROR] #{e}") + return '', '', '' + end end diff --git a/app/models/message_template/issue_atme.rb b/app/models/message_template/issue_atme.rb index 2a87da11c..0aa1c946d 100644 --- a/app/models/message_template/issue_atme.rb +++ b/app/models/message_template/issue_atme.rb @@ -13,4 +13,16 @@ # 在易修中@我 class MessageTemplate::IssueAtme < MessageTemplate + + # MessageTemplate::IssueAtme.get_message_content(User.where(login: 'yystopf'), User.last, Issue.last) + def self.get_message_content(receivers, operator, issue) + project = issue&.project + owner = project&.owner + content = sys_notice.gsub('{nickname}', operator&.nickname).gsub('{title}', issue&.subject) + url = notification_url.gsub('{owner}', owner&.login).gsub('{identifer}', project&.identifier).gsub('{id}', issue&.id.to_s) + return receivers_string(receivers), content, url + rescue => e + Rails.logger.info("MessageTemplate::IssueAtme.get_message_content [ERROR] #{e}") + return 0, '', '' + end end diff --git a/app/models/message_template/issue_changed.rb b/app/models/message_template/issue_changed.rb index 0820d4bfe..33cd6170d 100644 --- a/app/models/message_template/issue_changed.rb +++ b/app/models/message_template/issue_changed.rb @@ -13,4 +13,117 @@ # 我创建或负责的易修状态变更 class MessageTemplate::IssueChanged < MessageTemplate + + # MessageTemplate::IssueChanged.get_message_content(User.where(login: 'yystopf'), User.last, Issue.last, {assigner: 'testforge2', milestone: '里程碑', tag: '标签', priority: '低', tracker: '支持', doneratio: '70', branch: 'master', startdate: Date.today, duedate: Date.today + 1.days}) + def self.get_message_content(receivers, operator, issue, change_params) + project = issue&.project + owner = project&.owner + content = MessageTemplate::IssueChanged.sys_notice.gsub('{nickname1}', operator&.nickname).gsub('{nickname2}', owner&.nickname).gsub('{repository}', project&.name).gsub('{title}', issue&.subject) + url = notification_url.gsub('{owner}', owner&.login).gsub('{identifier}', project&.identifier).gsub('{id}', issue&.id.to_s) + # 易修负责人修改 + if change_params[:assigner].present? + assigner = issue&.get_assign_user&.nickname || '未指派成员' + content.sub!('{ifassigner}', '') + content.sub!('{endassigner}', '') + content.gsub!('{assigner1}', assigner) + content.gsub!('{assigner2}', change_params[:assigner]) + else + content.gsub!(/({ifassigner})(.*)({endassigner})/, '') + end + # 易修状态修改 + if change_params[:status].present? + status = issue&.issue_status&.name + content.sub!('{ifstatus}', '') + content.sub!('{endstatus}', '') + content.gsub!('{status1}', status) + content.gsub!('{status2}', change_params[:status]) + else + content.gsub!(/({ifstatus})(.*)({endstatus})/, '') + end + # 易修类型修改 + if change_params[:tracker].present? + tracker = issue&.tracker&.name + content.sub!('{iftracker}', '') + content.sub!('{endtracker}', '') + content.gsub!('{tracker1}', tracker) + content.gsub!('{tracker2}', change_params[:tracker]) + else + content.gsub!(/({iftracker})(.*)({endtracker})/, '') + end + # 合并请求里程碑修改 + if change_params[:milestone].present? + milestone = issue&.version&.name || '未选择里程碑' + content.sub!('{ifmilestone}', '') + content.sub!('{endmilestone}', '') + content.gsub!('{milestone1}', milestone) + content.gsub!('{milestone2}', change_params[:milestone]) + else + content.gsub!(/({ifmilestone})(.*)({endmilestone})/, '') + end + # 合并请求标签修改 + if change_params[:tag].present? + tag = issue&.issue_tags.distinct.pluck(:name).join(",") + tag = '未选择标签' if tag == '' + content.sub!('{iftag}', '') + content.sub!('{endtag}', '') + content.gsub!('{tag1}', tag) + content.gsub!('{tag2}', change_params[:tag]) + else + content.gsub!(/({iftag})(.*)({endtag})()/, '') + end + # 合并请求优先级修改 + if change_params[:priority].present? + priority = issue&.priority&.name + content.sub!('{ifpriority}', '') + content.sub!('{endpriority}', '') + content.gsub!('{priority1}', priority) + content.gsub!('{priority2}', change_params[:priority]) + else + content.gsub!(/({ifpriority})(.*)({endpriority})/, '') + end + # 易修完成度修改 + if change_params[:doneratio].present? + doneratio = issue&.done_ratio + content.sub!('{ifdoneratio}', '') + content.sub!('{enddoneratio}', '') + content.gsub!('{doneratio1}', "#{doneratio}%") + content.gsub!('{doneratio2}', "#{change_params[:doneratio]}%") + else + content.gsub!(/({ifdoneratio})(.*)({enddoneratio})/, '') + end + # 易修指定分支修改 + if change_params[:branch].present? + branch = issue&.branch_name || '分支未指定' + content.sub!('{ifbranch}', '') + content.sub!('{endbranch}', '') + content.gsub!('{branch1}', branch ) + content.gsub!('{branch2}', change_params[:branch]) + else + content.gsub!(/({ifbranch})(.*)({endbranch})/, '') + end + # 易修开始日期修改 + if change_params[:startdate].present? + startdate = issue&.start_date || "未选择开始日期" + content.sub!('{ifstartdate}', '') + content.sub!('{endstartdate}', '') + content.gsub!('{startdate1}', startdate.to_s ) + content.gsub!('{startdate2}', change_params[:startdate].to_s) + else + content.gsub!(/({ifstartdate})(.*)({endstartdate})/, '') + end + # 易修结束日期修改 + if change_params[:duedate].present? + duedate = issue&.due_date || '未选择结束日期' + content.sub!('{ifduedate}', '') + content.sub!('{endduedate}', '') + content.gsub!('{duedate1}', duedate.to_s) + content.gsub!('{duedate2}', change_params[:duedate].to_s) + else + content.gsub!(/({ifduedate})(.*)({endduedate})/, '') + end + return receivers_string(receivers), content, url + # rescue => e + # Rails.logger.info("MessageTemplate::IssueAssigned.get_message_content [ERROR] #{e}") + # return '', '', '' + end end diff --git a/app/models/message_template/issue_creator_expire.rb b/app/models/message_template/issue_creator_expire.rb index 41c471528..9878f37f3 100644 --- a/app/models/message_template/issue_creator_expire.rb +++ b/app/models/message_template/issue_creator_expire.rb @@ -13,4 +13,16 @@ # 我创建的易修截止日期到达最后一天 class MessageTemplate::IssueCreatorExpire < MessageTemplate + + # MessageTemplate::IssueCreatorExpire.get_message_content(User.where(login: 'yystopf'), Issue.last) + def self.get_message_content(receivers, issue) + project = issue&.project + owner = project&.owner + content = sys_notice.gsub('{title}', issue&.subject) + url = notification_url.gsub('{owner}', owner&.login).gsub('{identifier}', project&.identifier).gsub('{id}', issue&.id.to_s) + return receivers_string(receivers), content, url + rescue => e + Rails.logger.info("MessageTemplate::IssueAssignerExpire.get_message_content [ERROR] #{e}") + return '', '', '' + end end diff --git a/app/models/message_template/issue_deleted.rb b/app/models/message_template/issue_deleted.rb index a6a0ef204..a261b713d 100644 --- a/app/models/message_template/issue_deleted.rb +++ b/app/models/message_template/issue_deleted.rb @@ -13,4 +13,15 @@ # 我创建或负责的易修删除 class MessageTemplate::IssueDeleted < MessageTemplate + + # MessageTemplate::IssueDeleted.get_message_content(User.where(login: 'yystopf'), User.last, Issue.last) + def self.get_message_content(receivers, operator, issue) + project = issue&.project + owner = project&.owner + content = sys_notice.gsub('{nickname}', operator&.nickname).gsub('{title}', issue&.subject) + return receivers_string(receivers), content, notification_url + rescue => e + Rails.logger.info("MessageTemplate::IssueAtme.get_message_content [ERROR] #{e}") + return '', '', '' + end end diff --git a/app/models/message_template/issue_journal.rb b/app/models/message_template/issue_journal.rb index e4f7572b9..a24616f1d 100644 --- a/app/models/message_template/issue_journal.rb +++ b/app/models/message_template/issue_journal.rb @@ -11,6 +11,14 @@ # notification_url :string(255) # -# 我创建或负责的易修有新的评论 +# TODO 我创建或负责的易修有新的评论 class MessageTemplate::IssueJournal < MessageTemplate + + # MessageTemplate::IssueJournal.get_message_content(User.where(login: 'yystopf')) + def self.get_message_content(receivers) + return receivers_string(receivers), content, url + rescue => e + Rails.logger.info("MessageTemplate::IssueJournal.get_message_content [ERROR] #{e}") + return '', '', '' + end end diff --git a/app/models/message_template/login_ip_tip.rb b/app/models/message_template/login_ip_tip.rb index 898a30c72..f7ecc776b 100644 --- a/app/models/message_template/login_ip_tip.rb +++ b/app/models/message_template/login_ip_tip.rb @@ -11,6 +11,14 @@ # notification_url :string(255) # -# 登录异常提示 +# TODO 登录异常提示 class MessageTemplate::LoginIpTip < MessageTemplate + + # MessageTemplate::LoginIpTip.get_message_content(User.where(login: 'yystopf')) + def self.get_message_content(receivers) + return receivers_string(receivers), content, url + rescue => e + Rails.logger.info("MessageTemplate::LoginIpTip.get_message_content [ERROR] #{e}") + return '', '', '' + end end diff --git a/app/models/message_template/organization_joined.rb b/app/models/message_template/organization_joined.rb index 95c9611ac..d3a7ca1d1 100644 --- a/app/models/message_template/organization_joined.rb +++ b/app/models/message_template/organization_joined.rb @@ -13,4 +13,14 @@ # 账号被拉入组织 class MessageTemplate::OrganizationJoined < MessageTemplate + + # MessageTemplate::OrganizationJoined.get_message_content(User.where(login: 'yystopf'), Organization.last) + def self.get_message_content(receivers, organization) + content = sys_notice.gsub('{organization}', organization&.name) + url = notification_url.gsub('{login}', organization&.name) + return receivers_string(receivers), content, url + rescue => e + Rails.logger.info("MessageTemplate::OrganizationJoined.get_message_content [ERROR] #{e}") + return '', '', '' + end end diff --git a/app/models/message_template/organization_left.rb b/app/models/message_template/organization_left.rb index 30df516e1..9fe844746 100644 --- a/app/models/message_template/organization_left.rb +++ b/app/models/message_template/organization_left.rb @@ -13,4 +13,14 @@ # 账号被移出组织 class MessageTemplate::OrganizationLeft < MessageTemplate + + # MessageTemplate::OrganizationLeft.get_message_content(User.where(login: 'yystopf'), Organization.last) + def self.get_message_content(receivers, organization) + content = sys_notice.gsub('{organization}', organization&.name) + url = notification_url.gsub('{login}', organization&.name) + return receivers_string(receivers), content, url + rescue => e + Rails.logger.info("MessageTemplate::OrganizationLeft.get_message_content [ERROR] #{e}") + return '', '', '' + end end diff --git a/app/models/message_template/organization_role.rb b/app/models/message_template/organization_role.rb index 6ca825034..223ecf8bb 100644 --- a/app/models/message_template/organization_role.rb +++ b/app/models/message_template/organization_role.rb @@ -13,4 +13,14 @@ # 账号组织权限变更 class MessageTemplate::OrganizationRole < MessageTemplate + + # MessageTemplate::OrganizationRole.get_message_content(User.where(login: 'yystopf'), Organization.last, '管理员') + def self.get_message_content(receivers, organization, role) + content = sys_notice.gsub('{organization}', organization&.name).gsub('{role}', role) + url = notification_url.gsub('{login}', organization&.login) + return receivers_string(receivers), content, url + rescue => e + Rails.logger.info("MessageTemplate::OrganizationRole.get_message_content [ERROR] #{e}") + return '', '', '' + end end diff --git a/app/models/message_template/project_deleted.rb b/app/models/message_template/project_deleted.rb index 334c6d871..69f094526 100644 --- a/app/models/message_template/project_deleted.rb +++ b/app/models/message_template/project_deleted.rb @@ -11,6 +11,14 @@ # notification_url :string(255) # -# 我关注的仓库被删除 +# TODO 我关注的仓库被删除 class MessageTemplate::ProjectDeleted < MessageTemplate + + # MessageTemplate::ProjectDeleted.get_message_content(User.where(login: 'yystopf')) + def self.get_message_content(receivers) + return receivers_string(receivers), content, url + rescue => e + Rails.logger.info("MessageTemplate::ProjectDeleted.get_message_content [ERROR] #{e}") + return '', '', '' + end end diff --git a/app/models/message_template/project_followed.rb b/app/models/message_template/project_followed.rb index d7ade39e2..07dadb7c1 100644 --- a/app/models/message_template/project_followed.rb +++ b/app/models/message_template/project_followed.rb @@ -11,6 +11,14 @@ # notification_url :string(255) # -# 我管理的仓库被关注 +# TODO 我管理的仓库被关注 class MessageTemplate::ProjectFollowed < MessageTemplate + + # MessageTemplate::ProjectFollowed.get_message_content(User.where(login: 'yystopf')) + def self.get_message_content(receivers) + return receivers_string(receivers), content, url + rescue => e + Rails.logger.info("MessageTemplate::ProjectFollowed.get_message_content [ERROR] #{e}") + return '', '', '' + end end diff --git a/app/models/message_template/project_forked.rb b/app/models/message_template/project_forked.rb index b69892fa0..a419bc8ff 100644 --- a/app/models/message_template/project_forked.rb +++ b/app/models/message_template/project_forked.rb @@ -11,6 +11,14 @@ # notification_url :string(255) # -# 我管理的仓库被复刻 +# TODO 我管理的仓库被复刻 class MessageTemplate::ProjectForked < MessageTemplate + + # MessageTemplate::ProjectForked.get_message_content(User.where(login: 'yystopf')) + def self.get_message_content(receivers) + return receivers_string(receivers), content, url + rescue => e + Rails.logger.info("MessageTemplate::ProjectForked.get_message_content [ERROR] #{e}") + return '', '', '' + end end diff --git a/app/models/message_template/project_issue.rb b/app/models/message_template/project_issue.rb index f657084a5..81904f230 100644 --- a/app/models/message_template/project_issue.rb +++ b/app/models/message_template/project_issue.rb @@ -11,6 +11,14 @@ # notification_url :string(255) # -# 我管理/关注的仓库有新的易修 +# TODO 我管理/关注的仓库有新的易修 class MessageTemplate::ProjectIssue < MessageTemplate + + # MessageTemplate::ProjectIssue.get_message_content(User.where(login: 'yystopf')) + def self.get_message_content(receivers) + return receivers_string(receivers), content, url + rescue => e + Rails.logger.info("MessageTemplate::ProjectIssue.get_message_content [ERROR] #{e}") + return '', '', '' + end end diff --git a/app/models/message_template/project_joined.rb b/app/models/message_template/project_joined.rb index 1da83b0c4..91d4b3c13 100644 --- a/app/models/message_template/project_joined.rb +++ b/app/models/message_template/project_joined.rb @@ -13,4 +13,14 @@ # 账号被拉入项目 class MessageTemplate::ProjectJoined < MessageTemplate + + # MessageTemplate::ProjectJoined.get_message_content(User.where(login: 'yystopf'), Project.last) + def self.get_message_content(receivers, project) + content = sys_notice.gsub('{repository}', project&.name) + url = notification_url.gsub('{owner}', project&.owner&.login).gsub('{identifier}', project&.identifier) + return receivers_string(receivers), content, url + rescue => e + Rails.logger.info("MessageTemplate::ProjectJoined.get_message_content [ERROR] #{e}") + return '', '', '' + end end diff --git a/app/models/message_template/project_left.rb b/app/models/message_template/project_left.rb index 639235026..e83b027a5 100644 --- a/app/models/message_template/project_left.rb +++ b/app/models/message_template/project_left.rb @@ -14,4 +14,13 @@ # 账号被移出项目 class MessageTemplate::ProjectLeft < MessageTemplate + # MessageTemplate::ProjectLeft.get_message_content(User.where(login: 'yystopf'), Project.last) + def self.get_message_content(receivers, project) + content = sys_notice.gsub('{repository}', project&.name) + url = notification_url.gsub('{owner}', project&.owner&.login).gsub('{identifier}', project&.identifier) + return receivers_string(receivers), content, url + rescue => e + Rails.logger.info("MessageTemplate::ProjectLeft.get_message_content [ERROR] #{e}") + return '', '', '' + end end diff --git a/app/models/message_template/project_member_joined.rb b/app/models/message_template/project_member_joined.rb index 0b4025459..c10edb596 100644 --- a/app/models/message_template/project_member_joined.rb +++ b/app/models/message_template/project_member_joined.rb @@ -11,6 +11,14 @@ # notification_url :string(255) # -# 我管理的仓库有成员加入 +# TODO 我管理的仓库有成员加入 class MessageTemplate::ProjectMemberJoined < MessageTemplate + + # MessageTemplate::ProjectMemberJoined.get_message_content(User.where(login: 'yystopf')) + def self.get_message_content(receivers) + return receivers_string(receivers), content, url + rescue => e + Rails.logger.info("MessageTemplate::ProjectMemberJoined.get_message_content [ERROR] #{e}") + return '', '', '' + end end diff --git a/app/models/message_template/project_member_left.rb b/app/models/message_template/project_member_left.rb index ed261e0f3..b7133e052 100644 --- a/app/models/message_template/project_member_left.rb +++ b/app/models/message_template/project_member_left.rb @@ -11,6 +11,14 @@ # notification_url :string(255) # -# 我管理的仓库有成员移出 +# TODO 我管理的仓库有成员移出 class MessageTemplate::ProjectMemberLeft < MessageTemplate + + # MessageTemplate::ProjectMemberLeft.get_message_content(User.where(login: 'yystopf')) + def self.get_message_content(receivers) + return receivers_string(receivers), content, url + rescue => e + Rails.logger.info("MessageTemplate::ProjectMemberLeft.get_message_content [ERROR] #{e}") + return '', '', '' + end end diff --git a/app/models/message_template/project_milestone.rb b/app/models/message_template/project_milestone.rb index b28766c5f..79e83485f 100644 --- a/app/models/message_template/project_milestone.rb +++ b/app/models/message_template/project_milestone.rb @@ -11,6 +11,14 @@ # notification_url :string(255) # -# 我管理的仓库有新的里程碑 +# TODO 我管理的仓库有新的里程碑 class MessageTemplate::ProjectMilestone < MessageTemplate + + # MessageTemplate::ProjectMilestone.get_message_content(User.where(login: 'yystopf')) + def self.get_message_content(receivers) + return receivers_string(receivers), content, url + rescue => e + Rails.logger.info("MessageTemplate::ProjectMilestone.get_message_content [ERROR] #{e}") + return '', '', '' + end end diff --git a/app/models/message_template/project_praised.rb b/app/models/message_template/project_praised.rb index ec7a0564f..1af2ce88f 100644 --- a/app/models/message_template/project_praised.rb +++ b/app/models/message_template/project_praised.rb @@ -11,6 +11,14 @@ # notification_url :string(255) # -# 我管理的仓库被点赞 +# TODO 我管理的仓库被点赞 class MessageTemplate::ProjectPraised < MessageTemplate + + # MessageTemplate::ProjectPraised.get_message_content(User.where(login: 'yystopf')) + def self.get_message_content(receivers) + return receivers_string(receivers), content, url + rescue => e + Rails.logger.info("MessageTemplate::ProjectPraised.get_message_content [ERROR] #{e}") + return '', '', '' + end end diff --git a/app/models/message_template/project_pull_request.rb b/app/models/message_template/project_pull_request.rb index 43a8359b7..f0c642d19 100644 --- a/app/models/message_template/project_pull_request.rb +++ b/app/models/message_template/project_pull_request.rb @@ -11,6 +11,14 @@ # notification_url :string(255) # -# 我管理/关注的仓库有新的合并请求 +# TODO 我管理/关注的仓库有新的合并请求 class MessageTemplate::ProjectPullRequest < MessageTemplate + + # MessageTemplate::ProjectPullRequest.get_message_content(User.where(login: 'yystopf')) + def self.get_message_content(receivers) + return receivers_string(receivers), content, url + rescue => e + Rails.logger.info("MessageTemplate::ProjectPullRequest.get_message_content [ERROR] #{e}") + return '', '', '' + end end diff --git a/app/models/message_template/project_role.rb b/app/models/message_template/project_role.rb index 95ebe5ba9..cb229007a 100644 --- a/app/models/message_template/project_role.rb +++ b/app/models/message_template/project_role.rb @@ -13,4 +13,14 @@ # 账号仓库权限变更 class MessageTemplate::ProjectRole < MessageTemplate + + # MessageTemplate::ProjectRole.get_message_content(User.where(login: 'yystopf'), Project.last, '管理员') + def self.get_message_content(receivers, project, role) + content = sys_notice.gsub('{repository}', project&.name).gsub('{role}', role) + url = notification_url.gsub('{owner}', project&.owner&.login).gsub('{identifier}', project&.identifier) + return receivers_string(receivers), content, url + rescue => e + Rails.logger.info("MessageTemplate::ProjectRole.get_message_content [ERROR] #{e}") + return '', '', '' + end end diff --git a/app/models/message_template/project_setting_changed.rb b/app/models/message_template/project_setting_changed.rb index b983e6c60..b62b52e42 100644 --- a/app/models/message_template/project_setting_changed.rb +++ b/app/models/message_template/project_setting_changed.rb @@ -13,4 +13,64 @@ # 我管理的仓库项目设置被更改 class MessageTemplate::ProjectSettingChanged < MessageTemplate + + # MessageTemplate::ProjectSettingChanged.get_message_content(User.where(login: 'yystopf'), User.last, Project.last, {description: '测试修改项目简介', category: '大数据', language: 'Ruby', permission: '公有', navbar: '易修, 合并请求'}) + def self.get_message_content(receivers, operator, project, change_params) + owner = project&.owner + content = sys_notice.gsub('{nickname1}', operator&.nickname).gsub('{nickname2}', owner&.nickname).gsub('{repository}', project&.name) + url = notification_url.gsub('{owner}', owner&.login).gsub('{identifier}', project&.identifier) + # 项目名称更改 + if change_params[:name].present? + content.sub!('{ifname}', '') + content.sub!('{endname}', '') + content.gsub!('{name}', change_params[:name]) + else + content.gsub!(/({ifname})(.*)({endname})/, '') + end + # 项目简介更改 + if change_params[:description].present? + content.sub!('{ifdescription}', '') + content.sub!('{enddescription}', '') + content.gsub!('{description}', change_params[:description]) + else + content.gsub!(/({ifdescription})(.*)({enddescription})/, '') + end + # 项目类别更改 + if change_params[:category].present? + content.sub!('{ifcategory}', '') + content.sub!('{endcategory}', '') + content.gsub!('{category}', change_params[:category]) + else + content.gsub!(/({ifcategory})(.*)({endcategory})/, '') + end + # 项目语言更改 + if change_params[:language].present? + content.sub!('{iflanguage}', '') + content.sub!('{endlanguage}', '') + content.gsub!('{language}', change_params[:language]) + else + content.gsub!(/({iflanguage})(.*)({endlanguage})/, '') + end + # 项目公私有更改 + if change_params[:permission].present? + content.sub!('{ifpermission}', '') + content.sub!('{endpermission}', '') + content.gsub!('{permission}', change_params[:permission]) + else + content.gsub!(/({ifpermission})(.*)({endpermission})/, '') + end + # 项目导航更改 + if change_params[:navbar].present? + content.sub!('{ifnavbar}', '') + content.sub!('{endnavbar}', '') + content.gsub!('{navbar}', change_params[:navbar]) + else + content.gsub!(/({ifnavbar})(.*)({endnavbar})/, '') + end + + return receivers_string(receivers.where.not(id: operator.id)), content, url + rescue => e + Rails.logger.info("MessageTemplate::ProjectSettingChanged.get_message_content [ERROR] #{e}") + return '', '', '' + end end diff --git a/app/models/message_template/project_transfer.rb b/app/models/message_template/project_transfer.rb index ce422f090..e931e7b1f 100644 --- a/app/models/message_template/project_transfer.rb +++ b/app/models/message_template/project_transfer.rb @@ -11,6 +11,14 @@ # notification_url :string(255) # -# 我关注的仓库被转移 +# TODO 我关注的仓库被转移 class MessageTemplate::ProjectTransfer < MessageTemplate + + # MessageTemplate::ProjectTransfer.get_message_content(User.where(login: 'yystopf')) + def self.get_message_content(receivers) + return receivers_string(receivers), content, url + rescue => e + Rails.logger.info("MessageTemplate::ProjectTransfer.get_message_content [ERROR] #{e}") + return '', '', '' + end end diff --git a/app/models/message_template/project_version.rb b/app/models/message_template/project_version.rb index afc25fc4e..26067b7f4 100644 --- a/app/models/message_template/project_version.rb +++ b/app/models/message_template/project_version.rb @@ -11,6 +11,14 @@ # notification_url :string(255) # -# 我关注的仓库有新的发行版 +# TODO 我关注的仓库有新的发行版 class MessageTemplate::ProjectVersion < MessageTemplate + + # MessageTemplate::ProjectVersion.get_message_content(User.where(login: 'yystopf')) + def self.get_message_content(receivers) + return receivers_string(receivers), content, url + rescue => e + Rails.logger.info("MessageTemplate::ProjectVersion.get_message_content [ERROR] #{e}") + return '', '', '' + end end diff --git a/app/models/message_template/pull_request_assigned.rb b/app/models/message_template/pull_request_assigned.rb index d6d497daa..132a36154 100644 --- a/app/models/message_template/pull_request_assigned.rb +++ b/app/models/message_template/pull_request_assigned.rb @@ -13,4 +13,16 @@ # 有新指派给我的合并请求 class MessageTemplate::PullRequestAssigned < MessageTemplate + + # MessageTemplate::PullRequestAssigned.get_message_content(User.where(login: 'yystopf'), User.last, PullRequest.last) + def self.get_message_content(receivers, operator, pull_request) + project = pull_request&.project + owner = project&.owner + content = sys_notice.gsub('{nickname1}', operator&.nickname).gsub('{nickname2}', owner&.nickname).gsub('{repository}', project&.name).gsub('{title}', pull_request&.title) + url = notification_url.gsub('{owner}', owner&.login).gsub('{identifier}', project&.identifier).gsub('{id}', pull_request&.id.to_s) + return receivers_string(receivers), content, url + rescue => e + Rails.logger.info("MessageTemplate::PullRequestAssigned.get_message_content [ERROR] #{e}") + return '', '', '' + end end diff --git a/app/models/message_template/pull_request_atme.rb b/app/models/message_template/pull_request_atme.rb index 5ff526fa9..d940b2358 100644 --- a/app/models/message_template/pull_request_atme.rb +++ b/app/models/message_template/pull_request_atme.rb @@ -12,4 +12,16 @@ # 在合并请求中@我 class MessageTemplate::PullRequestAtme < MessageTemplate + + # MessageTemplate::PullRequestAtme.get_message_content(User.where(login: 'yystopf'), User.last, PullRequest.last) + def self.get_message_content(receivers, operator, pull_request) + project = pull_request&.project + owner = project&.owner + content = sys_notice.gsub('{nickname}', operator&.nickname).gsub('{title}', pull_request&.title) + url = notification_url.gsub('{owner}', owner&.login).gsub('{identifier}', project&.identifier).gsub('{id}', pull_request&.id.to_s) + return receivers_string(receivers), content, url + rescue => e + Rails.logger.info("MessageTemplate::PullRequestAtme.get_message_content [ERROR] #{e}") + return '', '', '' + end end \ No newline at end of file diff --git a/app/models/message_template/pull_request_changed.rb b/app/models/message_template/pull_request_changed.rb index dcde72b84..487b250b3 100644 --- a/app/models/message_template/pull_request_changed.rb +++ b/app/models/message_template/pull_request_changed.rb @@ -13,4 +13,58 @@ # 我创建或负责的合并请求状态变更 class MessageTemplate::PullRequestChanged < MessageTemplate + + # MessageTemplate::PullRequestChanged.get_message_content(User.where(login: 'yystopf'), User.last, PullRequest.last, {assigner: 'testforge2', tag: '标签', priority: '低'}) + def self.get_message_content(receivers, operator, pull_request, change_params) + project = pull_request&.project + owner = project&.owner + issue = pull_request&.issue + content = sys_notice.gsub('{nickname1}', operator&.nickname).gsub('{nickname2}', owner&.nickname).gsub('{repository}', project&.name) + url = notification_url.gsub('{owner}', owner&.login).gsub('{identifier}', project&.identifier).gsub('{id}', pull_request&.id.to_s) + # 合并请求审查成员修改 + if change_params[:assigner].present? + assigner = issue&.get_assign_user&.nickname || '未指派成员' + content.sub!('{ifassigner}', '') + content.sub!('{endassigner}', '') + content.gsub!('{assigner1}', assigner) + content.gsub!('{assigner2}', change_params[:assigner]) + else + content.gsub!(/({ifassigner})(.*)({endassigner})/, '') + end + # 合并请求里程碑修改 + if change_params[:milestone].present? + milestone = issue&.version&.name || '未选择里程碑' + content.sub!('{ifmilestone}', '') + content.sub!('{endmilestone}', '') + content.gsub!('{milestone1}', milestone) + content.gsub!('{milestone2}', change_params[:milestone]) + else + content.gsub!(/({ifmilestone})(.*)({endmilestone})/, '') + end + # 合并请求标签修改 + if change_params[:tag].present? + tag = issue&.issue_tags.distinct.pluck(:name).join(",") + tag = '未选择标签' if tag == '' + content.sub!('{iftag}', '') + content.sub!('{endtag}', '') + content.gsub!('{tag1}', tag) + content.gsub!('{tag2}', change_params[:tag]) + else + content.gsub!(/({iftag})(.*)({endtag})()/, '') + end + # 合并请求优先级修改 + if change_params[:priority].present? + priority = issue&.priority&.name + content.sub!('{ifpriority}', '') + content.sub!('{endpriority}', '') + content.gsub!('{priority1}', priority) + content.gsub!('{priority2}', change_params[:priority]) + else + content.gsub!(/({ifpriority})(.*)({endpriority})/, '') + end + return receivers_string(receivers), content, url + rescue => e + Rails.logger.info("MessageTemplate::PullRequestChanged.get_message_content [ERROR] #{e}") + return '', '', '' + end end diff --git a/app/models/message_template/pull_request_closed.rb b/app/models/message_template/pull_request_closed.rb index 0574b6409..6e5bfbe17 100644 --- a/app/models/message_template/pull_request_closed.rb +++ b/app/models/message_template/pull_request_closed.rb @@ -13,4 +13,16 @@ # 我创建或负责的合并请求被关闭 class MessageTemplate::PullRequestClosed < MessageTemplate + + # MessageTemplate::PullRequestClosed.get_message_content(User.where(login: 'yystopf'), User.last, PullRequest.last) + def self.get_message_content(receivers, operator, pull_request) + project = pull_request&.project + owner = project&.owner + content = sys_notice.gsub('{title}', pull_request&.title) + url = notification_url + return receivers_string(receivers), content, url + rescue => e + Rails.logger.info("MessageTemplate::PullRequestClosed.get_message_content [ERROR] #{e}") + return '', '', '' + end end diff --git a/app/models/message_template/pull_request_journal.rb b/app/models/message_template/pull_request_journal.rb index 6d3b4fe3b..9c68e64f4 100644 --- a/app/models/message_template/pull_request_journal.rb +++ b/app/models/message_template/pull_request_journal.rb @@ -11,6 +11,14 @@ # notification_url :string(255) # -# 我创建或负责的合并请求有新的评论 +# TODO 我创建或负责的合并请求有新的评论 class MessageTemplate::PullRequestJournal < MessageTemplate + + # MessageTemplate::PullRequestJournal.get_message_content(User.where(login: 'yystopf')) + def self.get_message_content(receivers) + return receivers_string(receivers), content, url + rescue => e + Rails.logger.info("MessageTemplate::PullRequestJournal.get_message_content [ERROR] #{e}") + return '', '', '' + end end diff --git a/app/models/message_template/pull_request_merged.rb b/app/models/message_template/pull_request_merged.rb index b06687cbc..2d229bb6b 100644 --- a/app/models/message_template/pull_request_merged.rb +++ b/app/models/message_template/pull_request_merged.rb @@ -13,4 +13,16 @@ # 我创建或负责的合并请求被合并 class MessageTemplate::PullRequestMerged < MessageTemplate + + # MessageTemplate::PullRequestMerged.get_message_content(User.where(login: 'yystopf'), User.last, PullRequest.last) + def self.get_message_content(receivers, operator, pull_request) + project = pull_request&.project + owner = project&.owner + content = sys_notice.gsub('{title}', pull_request&.title) + url = notification_url.gsub('{owner}', owner&.login).gsub('{identifier}', project&.identifier).gsub('{id}', pull_request&.id.to_s) + return receivers_string(receivers), content, url + rescue => e + Rails.logger.info("MessageTemplate::PullRequestMerged.get_message_content [ERROR] #{e}") + return '', '', '' + end end From fa0021b504e7e889d3740412bbcebd56498d4ef8 Mon Sep 17 00:00:00 2001 From: yystopf Date: Wed, 15 Sep 2021 11:10:09 +0800 Subject: [PATCH 10/38] fix --- app/jobs/send_template_message_job.rb | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 app/jobs/send_template_message_job.rb diff --git a/app/jobs/send_template_message_job.rb b/app/jobs/send_template_message_job.rb new file mode 100644 index 000000000..e8e4a82a0 --- /dev/null +++ b/app/jobs/send_template_message_job.rb @@ -0,0 +1,12 @@ +class SendTemplateMessageJob < ApplicationJob + queue_as :default + + def perform(source, *args) + Rails.logger.info "SendTemplateMessageJob [args] #{args}" + case source + when 'FollowTip' + receivers, followeder = args + Rails.logger.info "#{receivers} #{followeder}" + end + end +end \ No newline at end of file From 8a02981a2ef6a3dda6afd2b8cd2535185cd740ac Mon Sep 17 00:00:00 2001 From: yystopf Date: Wed, 15 Sep 2021 11:28:38 +0800 Subject: [PATCH 11/38] fix: mirror broadcast error and retry --- app/jobs/broadcast_mirror_repo_msg_job.rb | 19 ++++++++++++++++++- app/jobs/migrate_remote_repository_job.rb | 1 + app/jobs/sync_mirrored_repository_job.rb | 1 + app/models/mirror.rb | 2 +- 4 files changed, 21 insertions(+), 2 deletions(-) diff --git a/app/jobs/broadcast_mirror_repo_msg_job.rb b/app/jobs/broadcast_mirror_repo_msg_job.rb index 6372ae2e3..a62bfaba2 100644 --- a/app/jobs/broadcast_mirror_repo_msg_job.rb +++ b/app/jobs/broadcast_mirror_repo_msg_job.rb @@ -18,12 +18,29 @@ class BroadcastMirrorRepoMsgJob < ApplicationJob id: project.id, type: project.numerical_for_project_type } + # 新增失败重试机制, 重试三次 + result = broadcast(project, json_data) + + if result == 0 + count = 3 + while count > 0 + result = broadcast(project, json_data) + if result > 0 + break + end + count -= 1 + end + end + end + + def broadcast(project, json_data) puts "############ broadcast start.......... " puts "############ broadcast channel_name: channel_room_#{project.id}" puts "############ broadcast project data: #{json_data} " cable_result = ActionCable.server.broadcast "channel_room_#{project.id}", project: json_data - puts "############ broadcast result: #{cable_result == 1 ? 'successed' : 'failed'} " + puts "############ broadcast result: #{cable_result > 0 ? 'successed' : 'failed'} " + return cable_result end end diff --git a/app/jobs/migrate_remote_repository_job.rb b/app/jobs/migrate_remote_repository_job.rb index 340e006ea..e54eaf2bc 100644 --- a/app/jobs/migrate_remote_repository_job.rb +++ b/app/jobs/migrate_remote_repository_job.rb @@ -16,5 +16,6 @@ class MigrateRemoteRepositoryJob < ApplicationJob else repo&.mirror&.failed! end + BroadcastMirrorRepoMsgJob.perform_later(repo.id) unless repo&.mirror.waiting? end end diff --git a/app/jobs/sync_mirrored_repository_job.rb b/app/jobs/sync_mirrored_repository_job.rb index a1408153f..63abbfd80 100644 --- a/app/jobs/sync_mirrored_repository_job.rb +++ b/app/jobs/sync_mirrored_repository_job.rb @@ -26,6 +26,7 @@ class SyncMirroredRepositoryJob < ApplicationJob result = Gitea::Repository::SyncMirroredService.call(repo.owner.login, repo.identifier, token: user.gitea_token) repo&.mirror.set_status! if result[:status] === 200 + BroadcastMirrorRepoMsgJob.perform_later(repo.id) unless repo&.mirror.waiting? end end diff --git a/app/models/mirror.rb b/app/models/mirror.rb index 67ef73775..b71dce3fb 100644 --- a/app/models/mirror.rb +++ b/app/models/mirror.rb @@ -18,7 +18,7 @@ class Mirror < ApplicationRecord # 0: 同步镜像成功;1: 正在同步镜像;2: 同步失败; 默认值为0 enum status: { succeeded: 0, waiting: 1, failed: 2 } - after_update :websocket_boardcast, if: :saved_change_to_status? + # after_update :websocket_boardcast, if: :saved_change_to_status? belongs_to :repository, foreign_key: :repo_id From 91e6e0384edcdcdba1d9d7e847e5bfec625188ab Mon Sep 17 00:00:00 2001 From: yystopf Date: Wed, 15 Sep 2021 11:32:58 +0800 Subject: [PATCH 12/38] fix --- app/jobs/broadcast_mirror_repo_msg_job.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/app/jobs/broadcast_mirror_repo_msg_job.rb b/app/jobs/broadcast_mirror_repo_msg_job.rb index a62bfaba2..4dee6894a 100644 --- a/app/jobs/broadcast_mirror_repo_msg_job.rb +++ b/app/jobs/broadcast_mirror_repo_msg_job.rb @@ -24,6 +24,7 @@ class BroadcastMirrorRepoMsgJob < ApplicationJob if result == 0 count = 3 while count > 0 + sleep 3.seconds result = broadcast(project, json_data) if result > 0 break From 88bc5f29ffa09c3817c120565841e7e7d917a04c Mon Sep 17 00:00:00 2001 From: yystopf Date: Wed, 15 Sep 2021 18:55:58 +0800 Subject: [PATCH 13/38] add: message touch condition --- app/controllers/issues_controller.rb | 16 ++ app/controllers/members_controller.rb | 13 ++ .../organizations/team_users_controller.rb | 1 + .../projects/project_units_controller.rb | 3 +- app/controllers/projects_controller.rb | 1 + app/controllers/pull_requests_controller.rb | 11 +- app/controllers/users/messages_controller.rb | 17 +- app/docs/slate/source/includes/_users.md | 6 +- app/jobs/send_template_message_job.rb | 148 +++++++++++++++++- app/models/message_template/issue_atme.rb | 2 +- app/models/message_template/issue_changed.rb | 112 +++++++------ app/models/message_template/issue_deleted.rb | 8 +- .../project_setting_changed.rb | 38 +++-- .../message_template/pull_request_changed.rb | 44 +++--- app/models/organization_user.rb | 11 ++ app/models/project_unit.rb | 4 + app/models/team.rb | 11 ++ app/models/watcher.rb | 5 + app/services/notice/write/create_service.rb | 5 +- public/docs/api.html | 6 +- 20 files changed, 362 insertions(+), 100 deletions(-) diff --git a/app/controllers/issues_controller.rb b/app/controllers/issues_controller.rb index 266d746d7..e383a4f5c 100644 --- a/app/controllers/issues_controller.rb +++ b/app/controllers/issues_controller.rb @@ -111,6 +111,7 @@ class IssuesController < ApplicationController Issues::CreateForm.new({subject:issue_params[:subject]}).validate! @issue = Issue.new(issue_params) if @issue.save! + SendTemplateMessageJob.perform_later('IssueAssigned', current_user.id, @issue&.id) if params[:attachment_ids].present? params[:attachment_ids].each do |id| attachment = Attachment.select(:id, :container_id, :container_type)&.find_by_id(id) @@ -202,6 +203,20 @@ class IssuesController < ApplicationController issue_params = issue_send_params(params).except(:issue_classify, :author_id, :project_id) Issues::UpdateForm.new({subject:issue_params[:subject]}).validate! if @issue.update_attributes(issue_params) + if @issue&.pull_request.present? + SendTemplateMessageJob.perform_later('PullRequestChanged', current_user.id, @issue&.pull_request&.id, @issue.previous_changes.slice(:assigned_to_id, :priority_id, :fixed_version_id, :issue_tags_value)) + SendTemplateMessageJob.perform_later('PullRequestAssigned', current_user.id, @issue&.pull_request&.id ) if @issue.previous_changes[:assigned_to_id].present? + else + previous_changes = @issue.previous_changes.slice(:status_id, :assigned_to_id, :tracker_id, :priority_id, :fixed_version_id, :done_ratio, :issue_tags_value, :branch_name) + if @issue.previous_changes[:start_date].present? + previous_changes.merge!(start_date: [@issue.previous_changes[:start_date][0].to_s, @issue.previous_changes[:start_date][1].to_s]) + end + if @issue.previous_changes[:due_date].present? + previous_changes.merge!(due_date: [@issue.previous_changes[:due_date][0].to_s, @issue.previous_changes[:due_date][1].to_s]) + end + SendTemplateMessageJob.perform_later('IssueChanged', current_user.id, @issue&.id, previous_changes) + SendTemplateMessageJob.perform_later('IssueAssigned', current_user.id, @issue&.id) if @issue.previous_changes[:assigned_to_id].present? + end if params[:status_id].to_i == 5 #任务由非关闭状态到关闭状态时 @issue.issue_times.update_all(end_time: Time.now) @issue.update_closed_issues_count_in_project! @@ -253,6 +268,7 @@ class IssuesController < ApplicationController status_id = @issue.status_id token = @issue.token login = @issue.user.try(:login) + SendTemplateMessageJob.perform_later('IssueDeleted', current_user.id, @issue&.subject, @issue.assigned_to_id, @issue.author_id) if @issue.destroy if issue_type == "2" && status_id != 5 post_to_chain("add", token, login) diff --git a/app/controllers/members_controller.rb b/app/controllers/members_controller.rb index 7fb211e38..36c57b5b6 100644 --- a/app/controllers/members_controller.rb +++ b/app/controllers/members_controller.rb @@ -9,6 +9,7 @@ class MembersController < ApplicationController def create interactor = Projects::AddMemberInteractor.call(@project.owner, @project, @user) + SendTemplateMessageJob.perform_later('ProjectJoined', @user.id, @project.id) render_response(interactor) rescue Exception => e uid_logger_error(e.message) @@ -28,6 +29,7 @@ class MembersController < ApplicationController def remove interactor = Projects::DeleteMemberInteractor.call(@project.owner, @project, @user) + SendTemplateMessageJob.perform_later('ProjectLeft', @user.id, @project.id) render_response(interactor) rescue Exception => e uid_logger_error(e.message) @@ -36,6 +38,7 @@ class MembersController < ApplicationController def change_role interactor = Projects::ChangeMemberRoleInteractor.call(@project.owner, @project, @user, params[:role]) + SendTemplateMessageJob.perform_later('ProjectRole', @user.id, @project.id, message_role_name) render_response(interactor) rescue Exception => e uid_logger_error(e.message) @@ -66,4 +69,14 @@ class MembersController < ApplicationController def check_user_profile_completed require_user_profile_completed(@user) end + + def message_role_name + case params[:role] + when 'Manager' then '管理员' + when 'Developer' then '开发者' + when 'Reporter' then '报告者' + else + '' + end + end end diff --git a/app/controllers/organizations/team_users_controller.rb b/app/controllers/organizations/team_users_controller.rb index 43ed10708..c63005260 100644 --- a/app/controllers/organizations/team_users_controller.rb +++ b/app/controllers/organizations/team_users_controller.rb @@ -18,6 +18,7 @@ class Organizations::TeamUsersController < Organizations::BaseController ActiveRecord::Base.transaction do @team_user = TeamUser.build(@organization.id, @operate_user.id, @team.id) @organization_user = OrganizationUser.build(@organization.id, @operate_user.id) + SendTemplateMessageJob.perform_later('OrganizationRole', @operate_user.id, @organization.id, @team.authorize_name) Gitea::Organization::TeamUser::CreateService.call(@organization.gitea_token, @team.gtid, @operate_user.login) end rescue Exception => e diff --git a/app/controllers/projects/project_units_controller.rb b/app/controllers/projects/project_units_controller.rb index e21fa388f..e8b8f67a1 100644 --- a/app/controllers/projects/project_units_controller.rb +++ b/app/controllers/projects/project_units_controller.rb @@ -6,7 +6,8 @@ class Projects::ProjectUnitsController < Projects::BaseController def create if current_user.admin? || @project.manager?(current_user) ActiveRecord::Base.transaction do - ProjectUnit.update_by_unit_types!(@project, unit_types) + before_units, after_units = ProjectUnit.update_by_unit_types!(@project, unit_types) + SendTemplateMessageJob.perform_later('ProjectSettingChanged', current_user.id, @project&.id, {navbar: true}) unless before_units.eql?(after_units) render_ok end else diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index 325d76ccb..78056beed 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -139,6 +139,7 @@ class ProjectsController < ApplicationController @project.repository.update_column(:hidden, private) end end + SendTemplateMessageJob.perform_later('ProjectSettingChanged', current_user.id, @project&.id, @project.previous_changes.slice(:name, :description, :project_category_id, :project_language_id, :is_public)) end rescue Exception => e uid_logger_error(e.message) diff --git a/app/controllers/pull_requests_controller.rb b/app/controllers/pull_requests_controller.rb index 79221a665..0799beb58 100644 --- a/app/controllers/pull_requests_controller.rb +++ b/app/controllers/pull_requests_controller.rb @@ -59,6 +59,7 @@ class PullRequestsController < ApplicationController @pull_request, @gitea_pull_request = PullRequests::CreateService.call(current_user, @owner, @project, params) if @gitea_pull_request[:status] == :success @pull_request.bind_gitea_pull_request!(@gitea_pull_request[:body]["number"]) + SendTemplateMessageJob.perform_later('PullRequestAssigned', current_user.id, @pull_request&.id) render_ok else render_error("create pull request error: #{@gitea_pull_request[:status]}") @@ -91,6 +92,8 @@ class PullRequestsController < ApplicationController end if @issue.update_attributes(@issue_params) + SendTemplateMessageJob.perform_later('PullRequestChanged', current_user.id, @pull_request&.id, @issue.previous_changes.slice(:assigned_to_id, :priority_id, :fixed_version_id, :issue_tags_value)) + SendTemplateMessageJob.perform_later('PullRequestAssigned', current_user.id, @pull_request&.id ) if @issue.previous_changes[:assigned_to_id].present? if @pull_request.update_attributes(@local_params.compact) gitea_pull = Gitea::PullRequest::UpdateService.call(@owner.login, @repository.identifier, @pull_request.gitea_number, @requests_params, current_user.gitea_token) @@ -125,7 +128,12 @@ class PullRequestsController < ApplicationController ActiveRecord::Base.transaction do begin colsed = PullRequests::CloseService.call(@owner, @repository, @pull_request, current_user) - colsed === true ? normal_status(1, "已拒绝") : normal_status(-1, '合并失败') + if colsed === true + SendTemplateMessageJob.perform_later('PullRequestClosed', current_user.id, @pull_request.id) + normal_status(1, "已拒绝") + else + normal_status(-1, '合并失败') + end rescue => e normal_status(-1, e.message) raise ActiveRecord::Rollback @@ -164,6 +172,7 @@ class PullRequestsController < ApplicationController if success_condition && @pull_request.merge! @pull_request.project_trend_status! @issue&.custom_journal_detail("merge", "", "该合并请求已被合并", current_user&.id) + SendTemplateMessageJob.perform_later('PullRequestMerged', current_user.id, @pull_request.id) normal_status(1, "合并成功") else normal_status(-1, result.message) diff --git a/app/controllers/users/messages_controller.rb b/app/controllers/users/messages_controller.rb index 648b38b18..035441ccb 100644 --- a/app/controllers/users/messages_controller.rb +++ b/app/controllers/users/messages_controller.rb @@ -16,8 +16,21 @@ class Users::MessagesController < Users::BaseController case params[:type] when 'atme' Notice::Write::CreateAtmeForm.new(atme_params).validate! - result = Notice::Write::CreateService.call(@receivers.pluck(:id), '发送了一个@我消息', base_url, "IssueAtme", 2, {}, current_user.id) - return render_error if result.nil? + case atme_params[:atmeable_type] + when 'Issue' + SendTemplateMessageJob.perform_now('IssueAtme', @receivers, current_user.id, atme_params[:atmeable_id]) + when 'PullRequest' + SendTemplateMessageJob.perform_now('PullRequestAtme', @receivers, current_user.id, atme_params[:atmeable_id]) + when 'Journal' + journal = Journal.find_by_id(atme_params[:atmeable_id]) + if journal.present? + if journal&.issue&.pull_request.present? + SendTemplateMessageJob.perform_now('PullRequestAtme', @receivers, current_user.id, atme_params[:atmeable_id]) + else + SendTemplateMessageJob.perform_now('IssueAtme', @receivers, current_user.id, atme_params[:atmeable_id]) + end + end + end end render_ok rescue Exception => e diff --git a/app/docs/slate/source/includes/_users.md b/app/docs/slate/source/includes/_users.md index 7225b90e3..9d6b80927 100644 --- a/app/docs/slate/source/includes/_users.md +++ b/app/docs/slate/source/includes/_users.md @@ -1,7 +1,7 @@ # Users @@ -219,8 +219,8 @@ await octokit.request('POST /api/users/:login/messages.json') 参数 | 类型 | 字段说明 --------- | ----------- | ----------- |type | string | 消息类型 | -|recervers_login | array | 需要发送消息的用户名数组| -|atmeable_type | string | atme消息对象,是从哪里@我的,比如评论:Journal | +|receivers_login | array | 需要发送消息的用户名数组| +|atmeable_type | string | atme消息对象,是从哪里@我的,比如评论:Journal、易修:Issue、合并请求:PullRequest | |atmeable_id | integer | atme消息对象id | > 请求的JSON示例: diff --git a/app/jobs/send_template_message_job.rb b/app/jobs/send_template_message_job.rb index e8e4a82a0..f1e73a7ed 100644 --- a/app/jobs/send_template_message_job.rb +++ b/app/jobs/send_template_message_job.rb @@ -5,8 +5,152 @@ class SendTemplateMessageJob < ApplicationJob Rails.logger.info "SendTemplateMessageJob [args] #{args}" case source when 'FollowTip' - receivers, followeder = args - Rails.logger.info "#{receivers} #{followeder}" + watcher_id = args[0] + watcher = Watcher.find_by_id(watcher_id) + return unless watcher.present? + receivers = User.where(id: watcher.watchable_id) + followeder = User.find_by_id(watcher.user_id) + receivers_string, content, notification_url = MessageTemplate::FollowedTip.get_message_content(receivers, followeder) + Notice::Write::CreateService.call(receivers_string, content, notification_url, source, {watcher_id: watcher.id}) + when 'IssueAssigned' + operator_id, issue_id = args[0], args[1] + operator = User.find_by_id(operator_id) + issue = Issue.find_by_id(issue_id) + return unless operator.present? && issue.present? + receivers = User.where(id: issue&.assigned_to_id) + receivers_string, content, notification_url = MessageTemplate::IssueAssigned.get_message_content(receivers, operator, issue) + Notice::Write::CreateService.call(receivers_string, content, notification_url, source, {operator_id: operator.id, issue_id: issue.id}) + when 'IssueAssignerExpire' + issue_id = args[0] + issue = Issue.find_by_id(issue_id) + return unless issue.present? + receivers = User.where(id: issue&.assigned_to_id) + receivers_string, content, notification_url = MessageTemplate::IssueAssignerExpire.get_message_content(receivers, issue) + Notice::Write::CreateService.call(receivers_string, content, notification_url, source, {issue_id: issue.id}) + when 'IssueAtme' + receivers, operator_id, issue_id = args[0], args[1], args[2] + operator = User.find_by_id(operator_id) + issue = Issue.find_by_id(issue_id) + return unless operator.present? && issue.present? + receivers_string, content, notification_url = MessageTemplate::IssueAtme.get_message_content(receivers, operator, issue) + Notice::Write::CreateService.call(receivers_string, content, notification_url, source, {operator_id: operator.id, issue_id: issue.id}, 2) + when 'IssueChanged' + operator_id, issue_id, change_params = args[0], args[1], args[2] + operator = User.find_by_id(operator_id) + issue = Issue.find_by_id(issue_id) + return unless operator.present? && issue.present? + receivers = User.where(id: [issue&.assigned_to_id, issue&.author_id]) + receivers_string, content, notification_url = MessageTemplate::IssueChanged.get_message_content(receivers, operator, issue, change_params) + Notice::Write::CreateService.call(receivers_string, content, notification_url, source, {operator_id: operator.id, issue_id: issue.id, change_params: change_params.symbolize_keys}) + when 'IssueCreatorExpire' + issue_id = args[0] + issue = Issue.find_by_id(issue_id) + return unless issue.present? + receivers = User.where(id: issue&.author_id) + receivers_string, content, notification_url = MessageTemplate::IssueCreatorExpire.get_message_content(receivers, issue) + Notice::Write::CreateService.call(receivers_string, content, notification_url, source, {issue_id: issue.id}) + when 'IssueDeleted' + operator_id, issue_title, issue_assigned_to_id, issue_author_id = args[0], args[1], args[2], args[3] + operator = User.find_by_id(operator_id) + return unless operator.present? + receivers = User.where(id: [issue_assigned_to_id, issue_author_id]) + receivers_string, content, notification_url = MessageTemplate::IssueDeleted.get_message_content(receivers, operator, issue_title) + Notice::Write::CreateService.call(receivers_string, content, notification_url, source, {operator_id: operator.id, issue_title: issue_title}) + when 'OrganizationJoined' + user_id, organization_id = args[0], args[1] + user = User.find_by_id(user_id) + organization = Organization.find_by_id(organization_id) + return unless user.present? && organization.present? + receivers = User.where(id: user.id) + receivers_string, content, notification_url = MessageTemplate::OrganizationJoined.get_message_content(receivers, organization) + Notice::Write::CreateService.call(receivers_string, content, notification_url, source, {user_id: user.id, organization_id: organization.id}) + when 'OrganizationLeft' + user_id, organization_id = args[0], args[1] + user = User.find_by_id(user_id) + organization = Organization.find_by_id(organization_id) + return unless user.present? && organization.present? + receivers = User.where(id: user.id) + receivers_string, content, notification_url = MessageTemplate::OrganizationLeft.get_message_content(receivers, organization) + Notice::Write::CreateService.call(receivers_string, content, notification_url, source, {user_id: user.id, organization_id: organization.id}) + when 'OrganizationRole' + user_id, organization_id, role = args[0], args[1], args[2] + user = User.find_by_id(user_id) + organization = Organization.find_by_id(organization_id) + return unless user.present? && organization.present? + receivers = User.where(id: user.id) + receivers_string, content, notification_url = MessageTemplate::OrganizationRole.get_message_content(receivers, organization, role) + Notice::Write::CreateService.call(receivers_string, content, notification_url, source, {user_id: user.id, organization_id: organization.id, role: role}) + when 'ProjectJoined' + user_id, project_id = args[0], args[1] + user = User.find_by_id(user_id) + project = Project.find_by_id(project_id) + return unless user.present? && project.present? + receivers = User.where(id: user.user_id) + receivers_string, content, notification_url = MessageTemplate::ProjectJoined.get_message_content(receivers, project) + Notice::Write::CreateService.call(receivers_string, content, notification_url, source, {user_id: user.id, project_id: project.id}) + when 'ProjectLeft' + user_id, project_id = args[0], args[1] + user = User.find_by_id(user_id) + project = Project.find_by_id(project_id) + return unless user.present? && project.present? + receivers = User.where(id: user.user_id) + receivers_string, content, notification_url = MessageTemplate::ProjectJoined.get_message_content(receivers, project) + Notice::Write::CreateService.call(receivers_string, content, notification_url, source, {user_id: user.id, project_id: project.id}) + when 'ProjectRole' + user_id, project_id, role = args[0], args[1], args[2] + user = User.find_by_id(user_id) + project = Project.find_by_id(project_id) + return unless user.present? && project.present? + receivers = User.where(id: user.user_id) + receivers_string, content, notification_url = MessageTemplate::ProjectRole.get_message_content(receivers, project, role) + Notice::Write::CreateService.call(receivers_string, content, notification_url, source, {user_id: user.id, project_id: project.id, role: role}) + when 'ProjectSettingChanged' + operator_id, project_id, change_params = args[0], args[1], args[2] + operator = User.find_by_id(operator_id) + project = Project.find_by_id(project_id) + return unless operator.present? && project.present? + receivers = project.all_managers + receivers_string, content, notification_url = MessageTemplate::ProjectSettingChanged.get_message_content(receivers, operator, project, change_params.symbolize_keys) + Notice::Write::CreateService.call(receivers_string, content, notification_url, source, {operator_id: operator.id, project_id: project.id, change_params: change_params}) + when 'PullRequestAssigned' + operator_id, pull_request_id = args[0], args[1] + operator = User.find_by_id(operator_id) + pull_request = PullRequest.find_by_id(pull_request_id) + return unless operator.present? && pull_request.present? + receivers = User.where(id: pull_request&.issue&.assigned_to_id) + receivers_string, content, notification_url = MessageTemplate::PullRequestAssigned.get_message_content(receivers, operator, pull_request) + Notice::Write::CreateService.call(receivers_string, content, notification_url, source, {operator_id: operator.id, pull_request_id: pull_request.id}) + when 'PullRequestAtme' + receivers, operator_id, pull_request_id = args[0], args[1], args[2] + operator = User.find_by_id(operator_id) + pull_request = PullRequest.find_by_id(pull_request_id) + return unless operator.present? && pull_request.present? + receivers_string, content, notification_url = MessageTemplate::PullRequestAtme.get_message_content(receivers, operator, pull_request) + Notice::Write::CreateService.call(receivers_string, content, notification_url, source, {operator_id: operator.id, pull_request_id: pull_request.id}, 2) + when 'PullRequestChanged' + operator_id, pull_request_id, change_params = args[0], args[1], args[2] + operator = User.find_by_id(operator_id) + pull_request = PullRequest.find_by_id(pull_request_id) + return unless operator.present? && pull_request.present? + receivers = User.where(id: [pull_request&.issue&.assigned_to_id, pull_request&.user_id]) + receivers_string, content, notification_url = MessageTemplate::PullRequestChanged.get_message_content(receivers, operator, pull_request, change_params.symbolize_keys) + Notice::Write::CreateService.call(receivers_string, content, notification_url, source, {operator_id: operator.id, pull_request_id: pull_request.id, change_params: change_params}) + when 'PullRequestClosed' + operator_id, pull_request_id = args[0], args[1] + operator = User.find_by_id(operator_id) + pull_request = PullRequest.find_by_id(pull_request_id) + return unless operator.present? && pull_request.present? + receivers = User.where(id: [pull_request&.issue&.assigned_to_id, pull_request&.user_id]) + receivers_string, content, notification_url = MessageTemplate::PullRequestClosed.get_message_content(receivers, operator, pull_request) + Notice::Write::CreateService.call(receivers_string, content, notification_url, source, {operator_id: operator.id, pull_request_id: pull_request.id}) + when 'PullRequestMerged' + operator_id, pull_request_id = args[0], args[1] + operator = User.find_by_id(operator_id) + pull_request = PullRequest.find_by_id(pull_request_id) + return unless operator.present? && pull_request.present? + receivers = User.where(id: [pull_request&.issue&.assigned_to_id, pull_request&.user_id]) + receivers_string, content, notification_url = MessageTemplate::PullRequestMerged.get_message_content(receivers, operator, pull_request) + Notice::Write::CreateService.call(receivers_string, content, notification_url, source, {operator_id: operator.id, pull_request_id: pull_request.id}) end end end \ No newline at end of file diff --git a/app/models/message_template/issue_atme.rb b/app/models/message_template/issue_atme.rb index 0aa1c946d..1738838ef 100644 --- a/app/models/message_template/issue_atme.rb +++ b/app/models/message_template/issue_atme.rb @@ -19,7 +19,7 @@ class MessageTemplate::IssueAtme < MessageTemplate project = issue&.project owner = project&.owner content = sys_notice.gsub('{nickname}', operator&.nickname).gsub('{title}', issue&.subject) - url = notification_url.gsub('{owner}', owner&.login).gsub('{identifer}', project&.identifier).gsub('{id}', issue&.id.to_s) + url = notification_url.gsub('{owner}', owner&.login).gsub('{identifier}', project&.identifier).gsub('{id}', issue&.id.to_s) return receivers_string(receivers), content, url rescue => e Rails.logger.info("MessageTemplate::IssueAtme.get_message_content [ERROR] #{e}") diff --git a/app/models/message_template/issue_changed.rb b/app/models/message_template/issue_changed.rb index 33cd6170d..ddecab80e 100644 --- a/app/models/message_template/issue_changed.rb +++ b/app/models/message_template/issue_changed.rb @@ -14,116 +14,132 @@ # 我创建或负责的易修状态变更 class MessageTemplate::IssueChanged < MessageTemplate - # MessageTemplate::IssueChanged.get_message_content(User.where(login: 'yystopf'), User.last, Issue.last, {assigner: 'testforge2', milestone: '里程碑', tag: '标签', priority: '低', tracker: '支持', doneratio: '70', branch: 'master', startdate: Date.today, duedate: Date.today + 1.days}) + # MessageTemplate::IssueChanged.get_message_content(User.where(login: 'yystopf'), User.last, Issue.last, {status_id: [1, 2], assigned_to_id: [nil, 203], tracker_id: [4, 3], priority_id: [2, 4], fixed_version_id: [nil, 5], due_date: ['', '2021-09-11'], done_ratio: [0, 40], issue_tags_value: ["", "7"], branch_name: ["", "master"]}) def self.get_message_content(receivers, operator, issue, change_params) + return '', '', '' if change_params.blank? project = issue&.project owner = project&.owner content = MessageTemplate::IssueChanged.sys_notice.gsub('{nickname1}', operator&.nickname).gsub('{nickname2}', owner&.nickname).gsub('{repository}', project&.name).gsub('{title}', issue&.subject) url = notification_url.gsub('{owner}', owner&.login).gsub('{identifier}', project&.identifier).gsub('{id}', issue&.id.to_s) # 易修负责人修改 - if change_params[:assigner].present? - assigner = issue&.get_assign_user&.nickname || '未指派成员' + if change_params[:assigned_to_id].present? + assigner1 = User.find_by_id(change_params[:assigned_to_id][0]) + assigner2 = User.find_by_id(change_params[:assigned_to_id][1]) content.sub!('{ifassigner}', '') content.sub!('{endassigner}', '') - content.gsub!('{assigner1}', assigner) - content.gsub!('{assigner2}', change_params[:assigner]) + content.gsub!('{assigner1}', assigner1.present? ? assigner1&.nickname || assigner1.login : '未指派成员') + content.gsub!('{assigner2}', assigner2.present? ? assigner2&.nickname || assigner2.login : '未指派成员') else content.gsub!(/({ifassigner})(.*)({endassigner})/, '') end # 易修状态修改 - if change_params[:status].present? - status = issue&.issue_status&.name + if change_params[:status_id].present? + status1 = IssueStatus.find_by_id(change_params[:status_id][0]) + status2 = IssueStatus.find_by_id(change_params[:status_id][1]) content.sub!('{ifstatus}', '') content.sub!('{endstatus}', '') - content.gsub!('{status1}', status) - content.gsub!('{status2}', change_params[:status]) + content.gsub!('{status1}', status1&.name) + content.gsub!('{status2}', status2&.name) else content.gsub!(/({ifstatus})(.*)({endstatus})/, '') end # 易修类型修改 - if change_params[:tracker].present? - tracker = issue&.tracker&.name + if change_params[:tracker_id].present? + tracker1 = Tracker.find_by_id(change_params[:tracker_id][0]) + tracker2 = Tracker.find_by_id(change_params[:tracker_id][1]) content.sub!('{iftracker}', '') content.sub!('{endtracker}', '') - content.gsub!('{tracker1}', tracker) - content.gsub!('{tracker2}', change_params[:tracker]) + content.gsub!('{tracker1}', tracker1&.name) + content.gsub!('{tracker2}', tracker2&.name) else content.gsub!(/({iftracker})(.*)({endtracker})/, '') end - # 合并请求里程碑修改 - if change_params[:milestone].present? - milestone = issue&.version&.name || '未选择里程碑' + # 易修里程碑修改 + if change_params[:fixed_version_id].present? + fix_version1 = Version.find_by_id(change_params[:fixed_version_id][0]) + fix_version2 = Version.find_by_id(change_params[:fixed_version_id][1]) content.sub!('{ifmilestone}', '') content.sub!('{endmilestone}', '') - content.gsub!('{milestone1}', milestone) - content.gsub!('{milestone2}', change_params[:milestone]) + content.gsub!('{milestone1}', fix_version1.present? ? fix_version1&.name : '未选择里程碑') + content.gsub!('{milestone2}', fix_version2.present? ? fix_version2&.name : '未选择里程碑') else content.gsub!(/({ifmilestone})(.*)({endmilestone})/, '') end - # 合并请求标签修改 - if change_params[:tag].present? - tag = issue&.issue_tags.distinct.pluck(:name).join(",") - tag = '未选择标签' if tag == '' + # 易修标签修改 + if change_params[:issue_tags_value].present? + issue_tags1 = IssueTag.where(id: change_params[:issue_tags_value][0]).distinct + issue_tags2 = IssueTag.where(id: change_params[:issue_tags_value][1]).distinct + tag1 = issue_tags1.pluck(:name).join(",").blank? ? '未选择标签' : issue_tags1.pluck(:name).join(",") + tag2 = issue_tags2.pluck(:name).join(",").blank? ? '未选择标签' : issue_tags2.pluck(:name).join(",") content.sub!('{iftag}', '') content.sub!('{endtag}', '') - content.gsub!('{tag1}', tag) - content.gsub!('{tag2}', change_params[:tag]) + content.gsub!('{tag1}', tag1) + content.gsub!('{tag2}', tag2) else content.gsub!(/({iftag})(.*)({endtag})()/, '') end - # 合并请求优先级修改 - if change_params[:priority].present? - priority = issue&.priority&.name + # 易修优先级修改 + if change_params[:priority_id].present? + priority1 = IssuePriority.find_by_id(change_params[:priority_id][0]) + priority2 = IssuePriority.find_by_id(change_params[:priority_id][1]) + content.sub!('{ifpriority}', '') content.sub!('{endpriority}', '') - content.gsub!('{priority1}', priority) - content.gsub!('{priority2}', change_params[:priority]) + content.gsub!('{priority1}', priority1&.name) + content.gsub!('{priority2}', priority2&.name) else content.gsub!(/({ifpriority})(.*)({endpriority})/, '') end # 易修完成度修改 - if change_params[:doneratio].present? - doneratio = issue&.done_ratio + if change_params[:done_ratio].present? + doneratio1 = change_params[:done_ratio][0] + doneratio2 = change_params[:done_ratio][1] + content.sub!('{ifdoneratio}', '') content.sub!('{enddoneratio}', '') - content.gsub!('{doneratio1}', "#{doneratio}%") - content.gsub!('{doneratio2}', "#{change_params[:doneratio]}%") + content.gsub!('{doneratio1}', "#{doneratio1}%") + content.gsub!('{doneratio2}', "#{doneratio2}%") else content.gsub!(/({ifdoneratio})(.*)({enddoneratio})/, '') end # 易修指定分支修改 - if change_params[:branch].present? - branch = issue&.branch_name || '分支未指定' + if change_params[:branch_name].present? + branch1 = change_params[:branch_name][0].blank? ? '分支未指定' : change_params[:branch_name][0] + branch2 = change_params[:branch_name][1].blank? ? '分支未指定' : change_params[:branch_name][1] + content.sub!('{ifbranch}', '') content.sub!('{endbranch}', '') - content.gsub!('{branch1}', branch ) - content.gsub!('{branch2}', change_params[:branch]) + content.gsub!('{branch1}', branch1) + content.gsub!('{branch2}', branch2) else content.gsub!(/({ifbranch})(.*)({endbranch})/, '') end # 易修开始日期修改 - if change_params[:startdate].present? - startdate = issue&.start_date || "未选择开始日期" + if change_params[:start_date].present? + startdate1 = change_params[:start_date][0].blank? ? "未选择开始日期" : change_params[:start_date][0] + startdate2 = change_params[:start_date][1].blank? ? "未选择开始日期" : change_params[:start_date][1] + content.sub!('{ifstartdate}', '') content.sub!('{endstartdate}', '') - content.gsub!('{startdate1}', startdate.to_s ) - content.gsub!('{startdate2}', change_params[:startdate].to_s) + content.gsub!('{startdate1}', startdate1 ) + content.gsub!('{startdate2}', startdate2) else content.gsub!(/({ifstartdate})(.*)({endstartdate})/, '') end # 易修结束日期修改 - if change_params[:duedate].present? - duedate = issue&.due_date || '未选择结束日期' + if change_params[:due_date].present? + duedate1 = change_params[:due_date][0].blank? ? '未选择结束日期' : change_params[:due_date][0] + duedate2 = change_params[:due_date][1].blank? ? '未选择结束日期' : change_params[:due_date][1] content.sub!('{ifduedate}', '') content.sub!('{endduedate}', '') - content.gsub!('{duedate1}', duedate.to_s) - content.gsub!('{duedate2}', change_params[:duedate].to_s) + content.gsub!('{duedate1}', duedate1) + content.gsub!('{duedate2}', duedate2) else content.gsub!(/({ifduedate})(.*)({endduedate})/, '') end return receivers_string(receivers), content, url - # rescue => e - # Rails.logger.info("MessageTemplate::IssueAssigned.get_message_content [ERROR] #{e}") - # return '', '', '' + rescue => e + Rails.logger.info("MessageTemplate::IssueAssigned.get_message_content [ERROR] #{e}") + return '', '', '' end end diff --git a/app/models/message_template/issue_deleted.rb b/app/models/message_template/issue_deleted.rb index a261b713d..8decdd157 100644 --- a/app/models/message_template/issue_deleted.rb +++ b/app/models/message_template/issue_deleted.rb @@ -14,11 +14,9 @@ # 我创建或负责的易修删除 class MessageTemplate::IssueDeleted < MessageTemplate - # MessageTemplate::IssueDeleted.get_message_content(User.where(login: 'yystopf'), User.last, Issue.last) - def self.get_message_content(receivers, operator, issue) - project = issue&.project - owner = project&.owner - content = sys_notice.gsub('{nickname}', operator&.nickname).gsub('{title}', issue&.subject) + # MessageTemplate::IssueDeleted.get_message_content(User.where(login: 'yystopf'), User.last, "hahah") + def self.get_message_content(receivers, operator, issue_title) + content = sys_notice.gsub('{nickname}', operator&.nickname).gsub('{title}', issue_title) return receivers_string(receivers), content, notification_url rescue => e Rails.logger.info("MessageTemplate::IssueAtme.get_message_content [ERROR] #{e}") diff --git a/app/models/message_template/project_setting_changed.rb b/app/models/message_template/project_setting_changed.rb index b62b52e42..fe9da7c50 100644 --- a/app/models/message_template/project_setting_changed.rb +++ b/app/models/message_template/project_setting_changed.rb @@ -16,6 +16,7 @@ class MessageTemplate::ProjectSettingChanged < MessageTemplate # MessageTemplate::ProjectSettingChanged.get_message_content(User.where(login: 'yystopf'), User.last, Project.last, {description: '测试修改项目简介', category: '大数据', language: 'Ruby', permission: '公有', navbar: '易修, 合并请求'}) def self.get_message_content(receivers, operator, project, change_params) + return '', '', '' if change_params.blank? owner = project&.owner content = sys_notice.gsub('{nickname1}', operator&.nickname).gsub('{nickname2}', owner&.nickname).gsub('{repository}', project&.name) url = notification_url.gsub('{owner}', owner&.login).gsub('{identifier}', project&.identifier) @@ -23,7 +24,7 @@ class MessageTemplate::ProjectSettingChanged < MessageTemplate if change_params[:name].present? content.sub!('{ifname}', '') content.sub!('{endname}', '') - content.gsub!('{name}', change_params[:name]) + content.gsub!('{name}', change_params[:name][1]) else content.gsub!(/({ifname})(.*)({endname})/, '') end @@ -31,46 +32,57 @@ class MessageTemplate::ProjectSettingChanged < MessageTemplate if change_params[:description].present? content.sub!('{ifdescription}', '') content.sub!('{enddescription}', '') - content.gsub!('{description}', change_params[:description]) + content.gsub!('{description}', change_params[:description][1]) else content.gsub!(/({ifdescription})(.*)({enddescription})/, '') end # 项目类别更改 - if change_params[:category].present? + if change_params[:project_category_id].present? + category = ProjectCategory.find_by_id(change_params[:project_category_id][1]) content.sub!('{ifcategory}', '') content.sub!('{endcategory}', '') - content.gsub!('{category}', change_params[:category]) + content.gsub!('{category}', category&.name) else content.gsub!(/({ifcategory})(.*)({endcategory})/, '') end # 项目语言更改 - if change_params[:language].present? + if change_params[:project_language_id].present? + language = ProjectLanguage.find_by_id(change_params[:project_language_id][1]) content.sub!('{iflanguage}', '') content.sub!('{endlanguage}', '') - content.gsub!('{language}', change_params[:language]) + content.gsub!('{language}', language&.name) else content.gsub!(/({iflanguage})(.*)({endlanguage})/, '') end # 项目公私有更改 - if change_params[:permission].present? + if change_params[:is_public].present? + permission = change_params[:is_public][1] ? '公有' : '私有' content.sub!('{ifpermission}', '') content.sub!('{endpermission}', '') - content.gsub!('{permission}', change_params[:permission]) + content.gsub!('{permission}', permission) else content.gsub!(/({ifpermission})(.*)({endpermission})/, '') end # 项目导航更改 - if change_params[:navbar].present? + if change_params[:navbar].present? || navbar_is_changed_by_time + navbar = project.project_units.order(unit_type: :asc).pluck(:unit_type).join(',') + navbar.gsub!('code,', '') + navbar.gsub!('issues', '易修') + navbar.gsub!('pulls', '合并请求') + navbar.gsub!('wiki', 'Wiki') + navbar.gsub!('devops', '工作流') + navbar.gsub!('versions', '里程碑') + navbar.gsub!('resources', '资源库') content.sub!('{ifnavbar}', '') content.sub!('{endnavbar}', '') - content.gsub!('{navbar}', change_params[:navbar]) + content.gsub!('{navbar}', navbar) else content.gsub!(/({ifnavbar})(.*)({endnavbar})/, '') end return receivers_string(receivers.where.not(id: operator.id)), content, url - rescue => e - Rails.logger.info("MessageTemplate::ProjectSettingChanged.get_message_content [ERROR] #{e}") - return '', '', '' + # rescue => e + # Rails.logger.info("MessageTemplate::ProjectSettingChanged.get_message_content [ERROR] #{e}") + # return '', '', '' end end diff --git a/app/models/message_template/pull_request_changed.rb b/app/models/message_template/pull_request_changed.rb index 487b250b3..6107a9691 100644 --- a/app/models/message_template/pull_request_changed.rb +++ b/app/models/message_template/pull_request_changed.rb @@ -14,51 +14,57 @@ # 我创建或负责的合并请求状态变更 class MessageTemplate::PullRequestChanged < MessageTemplate - # MessageTemplate::PullRequestChanged.get_message_content(User.where(login: 'yystopf'), User.last, PullRequest.last, {assigner: 'testforge2', tag: '标签', priority: '低'}) + # MessageTemplate::PullRequestChanged.get_message_content(User.where(login: 'yystopf'), User.last, PullRequest.last, {assigned_to_id: [nil, 203], priority_id: [2, 4], fixed_version_id: [nil, 5], issue_tags_value: ["", "7"]}) def self.get_message_content(receivers, operator, pull_request, change_params) + return '', '', '' if change_params.blank? project = pull_request&.project owner = project&.owner issue = pull_request&.issue - content = sys_notice.gsub('{nickname1}', operator&.nickname).gsub('{nickname2}', owner&.nickname).gsub('{repository}', project&.name) + content = sys_notice.gsub('{nickname1}', operator&.nickname).gsub('{nickname2}', owner&.nickname).gsub('{repository}', project&.name).gsub("{title}", pull_request&.title) url = notification_url.gsub('{owner}', owner&.login).gsub('{identifier}', project&.identifier).gsub('{id}', pull_request&.id.to_s) # 合并请求审查成员修改 - if change_params[:assigner].present? - assigner = issue&.get_assign_user&.nickname || '未指派成员' + if change_params[:assigned_to_id].present? + assigner1 = User.find_by_id(change_params[:assigned_to_id][0]) + assigner2 = User.find_by_id(change_params[:assigned_to_id][1]) content.sub!('{ifassigner}', '') content.sub!('{endassigner}', '') - content.gsub!('{assigner1}', assigner) - content.gsub!('{assigner2}', change_params[:assigner]) + content.gsub!('{assigner1}', assigner1.present? ? assigner1&.nickname || assigner1.login : '未指派成员') + content.gsub!('{assigner2}', assigner2.present? ? assigner2&.nickname || assigner2.login : '未指派成员') else content.gsub!(/({ifassigner})(.*)({endassigner})/, '') end # 合并请求里程碑修改 - if change_params[:milestone].present? - milestone = issue&.version&.name || '未选择里程碑' + if change_params[:fixed_version_id].present? + fix_version1 = Version.find_by_id(change_params[:fixed_version_id][0]) + fix_version2 = Version.find_by_id(change_params[:fixed_version_id][1]) content.sub!('{ifmilestone}', '') content.sub!('{endmilestone}', '') - content.gsub!('{milestone1}', milestone) - content.gsub!('{milestone2}', change_params[:milestone]) + content.gsub!('{milestone1}', fix_version1.present? ? fix_version1&.name : '未选择里程碑') + content.gsub!('{milestone2}', fix_version2.present? ? fix_version2&.name : '未选择里程碑') else content.gsub!(/({ifmilestone})(.*)({endmilestone})/, '') end # 合并请求标签修改 - if change_params[:tag].present? - tag = issue&.issue_tags.distinct.pluck(:name).join(",") - tag = '未选择标签' if tag == '' + if change_params[:issue_tags_value].present? + issue_tags1 = IssueTag.where(id: change_params[:issue_tags_value][0]).distinct + issue_tags2 = IssueTag.where(id: change_params[:issue_tags_value][1]).distinct + tag1 = issue_tags1.pluck(:name).join(",").blank? ? '未选择标签' : issue_tags1.pluck(:name).join(",") + tag2 = issue_tags2.pluck(:name).join(",").blank? ? '未选择标签' : issue_tags2.pluck(:name).join(",") content.sub!('{iftag}', '') content.sub!('{endtag}', '') - content.gsub!('{tag1}', tag) - content.gsub!('{tag2}', change_params[:tag]) + content.gsub!('{tag1}', tag1) + content.gsub!('{tag2}', tag2) else content.gsub!(/({iftag})(.*)({endtag})()/, '') end # 合并请求优先级修改 - if change_params[:priority].present? - priority = issue&.priority&.name + if change_params[:priority_id].present? + priority1 = IssuePriority.find_by_id(change_params[:priority_id][0]) + priority2 = IssuePriority.find_by_id(change_params[:priority_id][1]) content.sub!('{ifpriority}', '') content.sub!('{endpriority}', '') - content.gsub!('{priority1}', priority) - content.gsub!('{priority2}', change_params[:priority]) + content.gsub!('{priority1}', priority1&.name) + content.gsub!('{priority2}', priority2&.name) else content.gsub!(/({ifpriority})(.*)({endpriority})/, '') end diff --git a/app/models/organization_user.rb b/app/models/organization_user.rb index cf9e22371..1ad2abd9a 100644 --- a/app/models/organization_user.rb +++ b/app/models/organization_user.rb @@ -22,6 +22,9 @@ class OrganizationUser < ApplicationRecord validates :user_id, uniqueness: {scope: :organization_id} + after_create :send_create_message_to_notice_system + after_destroy :send_destroy_message_to_notice_system + def self.build(organization_id, user_id) org_user = self.find_by(organization_id: organization_id, user_id: user_id) return org_user unless org_user.nil? @@ -31,4 +34,12 @@ class OrganizationUser < ApplicationRecord def teams organization.teams.joins(:team_users).where(team_users: {user_id: user_id}) end + + def send_create_message_to_notice_system + SendTemplateMessageJob.perform_later('OrganizationJoined', self.user_id, self.organization_id) + end + + def send_destroy_message_to_notice_system + SendTemplateMessageJob.perform_later('OrganizationLeft', self.user_id, self.organization_id) + end end diff --git a/app/models/project_unit.rb b/app/models/project_unit.rb index 5c519e1d5..cc35a6b28 100644 --- a/app/models/project_unit.rb +++ b/app/models/project_unit.rb @@ -32,9 +32,13 @@ class ProjectUnit < ApplicationRecord types.delete("pulls") if project.sync_mirror? # 默认code类型自动创建 types << "code" + before_units = project.project_units.pluck(:unit_type).sort project.project_units.where.not(unit_type: types).each(&:destroy!) types.each do |type| project.project_units.find_or_create_by!(unit_type: type) end + after_units = project.project_units.pluck(:unit_type).sort + return before_units, after_units end + end diff --git a/app/models/team.rb b/app/models/team.rb index 72df05097..481e8c340 100644 --- a/app/models/team.rb +++ b/app/models/team.rb @@ -54,4 +54,15 @@ class Team < ApplicationRecord team_users.where(user_id: user_id).present? end + def authorize_name + case self.authorize + when 'read' then '报告者' + when 'write' then '开发者' + when 'admin' then '管理员' + when 'owner' then '管理员' + else + '' + end + end + end diff --git a/app/models/watcher.rb b/app/models/watcher.rb index ccc8eefaa..7ff20943e 100644 --- a/app/models/watcher.rb +++ b/app/models/watcher.rb @@ -24,6 +24,7 @@ class Watcher < ApplicationRecord after_save :reset_cache_data after_destroy :reset_cache_data + after_create :send_create_message_to_notice_system def reset_cache_data if self.watchable.is_a?(User) @@ -35,4 +36,8 @@ class Watcher < ApplicationRecord self.reset_platform_cache_async_job end + def send_create_message_to_notice_system + SendTemplateMessageJob.perform_later('FollowTip', self.id) if self.watchable.is_a?(User) + end + end diff --git a/app/services/notice/write/create_service.rb b/app/services/notice/write/create_service.rb index 76883c67f..9c1b84925 100644 --- a/app/services/notice/write/create_service.rb +++ b/app/services/notice/write/create_service.rb @@ -1,7 +1,7 @@ class Notice::Write::CreateService < Notice::Write::ClientService attr_accessor :receivers, :sender, :content, :notification_url, :source, :extra, :type - def initialize(receivers, content, notification_url, source, type=1, extra={},sender=-1) + def initialize(receivers, content, notification_url, source, extra={}, type=1, sender=-1) @receivers = receivers @sender = sender @content = content @@ -12,6 +12,7 @@ class Notice::Write::CreateService < Notice::Write::ClientService end def call + return nil if request_receivers.blank? result = post("", request_params) response = render_response(result) end @@ -19,7 +20,7 @@ class Notice::Write::CreateService < Notice::Write::ClientService private def request_receivers - receivers.join(",") + receivers.is_a?(Array) ? receivers.join(",") : receivers end def request_params diff --git a/public/docs/api.html b/public/docs/api.html index 6446d796c..c77c08988 100644 --- a/public/docs/api.html +++ b/public/docs/api.html @@ -921,7 +921,7 @@ Success — a happy kitten is an authenticated kitten!

    Users

    获取当前登陆用户信息

    @@ -1326,14 +1326,14 @@ Success — a happy kitten is an authenticated kitten! 消息类型 -recervers_login +receivers_login array 需要发送消息的用户名数组 atmeable_type string -atme消息对象,是从哪里@我的,比如评论:Journal +atme消息对象,是从哪里@我的,比如评论:Journal、易修:Issue、合并请求:PullRequest atmeable_id From cb76a946ef5f870db50e063655e47f99a4a45a3a Mon Sep 17 00:00:00 2001 From: yystopf Date: Thu, 16 Sep 2021 09:21:35 +0800 Subject: [PATCH 14/38] fix --- app/jobs/send_template_message_job.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/jobs/send_template_message_job.rb b/app/jobs/send_template_message_job.rb index f1e73a7ed..52d4f31b3 100644 --- a/app/jobs/send_template_message_job.rb +++ b/app/jobs/send_template_message_job.rb @@ -85,7 +85,7 @@ class SendTemplateMessageJob < ApplicationJob user = User.find_by_id(user_id) project = Project.find_by_id(project_id) return unless user.present? && project.present? - receivers = User.where(id: user.user_id) + receivers = User.where(id: user.id) receivers_string, content, notification_url = MessageTemplate::ProjectJoined.get_message_content(receivers, project) Notice::Write::CreateService.call(receivers_string, content, notification_url, source, {user_id: user.id, project_id: project.id}) when 'ProjectLeft' @@ -93,7 +93,7 @@ class SendTemplateMessageJob < ApplicationJob user = User.find_by_id(user_id) project = Project.find_by_id(project_id) return unless user.present? && project.present? - receivers = User.where(id: user.user_id) + receivers = User.where(id: user.id) receivers_string, content, notification_url = MessageTemplate::ProjectJoined.get_message_content(receivers, project) Notice::Write::CreateService.call(receivers_string, content, notification_url, source, {user_id: user.id, project_id: project.id}) when 'ProjectRole' @@ -101,7 +101,7 @@ class SendTemplateMessageJob < ApplicationJob user = User.find_by_id(user_id) project = Project.find_by_id(project_id) return unless user.present? && project.present? - receivers = User.where(id: user.user_id) + receivers = User.where(id: user.id) receivers_string, content, notification_url = MessageTemplate::ProjectRole.get_message_content(receivers, project, role) Notice::Write::CreateService.call(receivers_string, content, notification_url, source, {user_id: user.id, project_id: project.id, role: role}) when 'ProjectSettingChanged' From b8a52107a5d14453ee7b466a4584a618fa97eebe Mon Sep 17 00:00:00 2001 From: yystopf Date: Thu, 16 Sep 2021 10:10:05 +0800 Subject: [PATCH 15/38] add: expire issue send message --- app/jobs/delay_expired_issue_job.rb | 11 +++++++++++ app/jobs/send_template_message_job.rb | 4 ++-- .../message_template/project_setting_changed.rb | 2 +- config/sidekiq.yml | 1 + config/sidekiq_cron.yml | 5 +++++ 5 files changed, 20 insertions(+), 3 deletions(-) create mode 100644 app/jobs/delay_expired_issue_job.rb diff --git a/app/jobs/delay_expired_issue_job.rb b/app/jobs/delay_expired_issue_job.rb new file mode 100644 index 000000000..4633a953d --- /dev/null +++ b/app/jobs/delay_expired_issue_job.rb @@ -0,0 +1,11 @@ +class DelayExpiredIssueJob < ApplicationJob + queue_as :message + + def perform + Issue.where(due_date: Date.today + 1.days).find_each do |issue| + SendTemplateMessageJob.perform_later('IssueAssignerExpire', issue.id) + SendTemplateMessageJob.perform_later('IssueCreatorExpire', issue.id) + end + end + +end \ No newline at end of file diff --git a/app/jobs/send_template_message_job.rb b/app/jobs/send_template_message_job.rb index 52d4f31b3..9c94e16e9 100644 --- a/app/jobs/send_template_message_job.rb +++ b/app/jobs/send_template_message_job.rb @@ -1,5 +1,5 @@ class SendTemplateMessageJob < ApplicationJob - queue_as :default + queue_as :message def perform(source, *args) Rails.logger.info "SendTemplateMessageJob [args] #{args}" @@ -94,7 +94,7 @@ class SendTemplateMessageJob < ApplicationJob project = Project.find_by_id(project_id) return unless user.present? && project.present? receivers = User.where(id: user.id) - receivers_string, content, notification_url = MessageTemplate::ProjectJoined.get_message_content(receivers, project) + receivers_string, content, notification_url = MessageTemplate::ProjectLeft.get_message_content(receivers, project) Notice::Write::CreateService.call(receivers_string, content, notification_url, source, {user_id: user.id, project_id: project.id}) when 'ProjectRole' user_id, project_id, role = args[0], args[1], args[2] diff --git a/app/models/message_template/project_setting_changed.rb b/app/models/message_template/project_setting_changed.rb index fe9da7c50..8c272f65d 100644 --- a/app/models/message_template/project_setting_changed.rb +++ b/app/models/message_template/project_setting_changed.rb @@ -64,7 +64,7 @@ class MessageTemplate::ProjectSettingChanged < MessageTemplate content.gsub!(/({ifpermission})(.*)({endpermission})/, '') end # 项目导航更改 - if change_params[:navbar].present? || navbar_is_changed_by_time + if change_params[:navbar].present? navbar = project.project_units.order(unit_type: :asc).pluck(:unit_type).join(',') navbar.gsub!('code,', '') navbar.gsub!('issues', '易修') diff --git a/config/sidekiq.yml b/config/sidekiq.yml index a50c1c1aa..f8981a8b1 100644 --- a/config/sidekiq.yml +++ b/config/sidekiq.yml @@ -8,3 +8,4 @@ - [notify, 100] - [mailers, 101] - [cache, 10] + - [message, 20] diff --git a/config/sidekiq_cron.yml b/config/sidekiq_cron.yml index 3e807fa10..448e9c945 100644 --- a/config/sidekiq_cron.yml +++ b/config/sidekiq_cron.yml @@ -2,3 +2,8 @@ sync_gitea_repo_update_time: cron: "0 0 * * *" class: "SyncRepoUpdateTimeJob" queue: default + +delay_expired_issue: + cron: "0 0 * * *" + class: "DelayExpiredIssueJob" + queue: message From dbcbc01251c38ba64bb682650487353779ff52d2 Mon Sep 17 00:00:00 2001 From: yystopf Date: Thu, 16 Sep 2021 16:54:49 +0800 Subject: [PATCH 16/38] fix and add some message feature --- api_document.md | 8 +- app/controllers/issues_controller.rb | 22 ++++- app/controllers/members_controller.rb | 8 +- app/controllers/pull_requests_controller.rb | 1 + app/controllers/users_controller.rb | 8 +- app/jobs/send_template_message_job.rb | 83 ++++++++++++++----- app/models/message_template.rb | 6 +- app/models/message_template/followed_tip.rb | 2 +- app/models/message_template/issue_assigned.rb | 2 +- app/models/message_template/issue_atme.rb | 2 +- app/models/message_template/issue_changed.rb | 72 ++++++++++++---- app/models/message_template/issue_deleted.rb | 2 +- .../message_template/organization_joined.rb | 2 +- .../message_template/organization_left.rb | 2 +- .../message_template/organization_role.rb | 2 +- app/models/message_template/project_issue.rb | 10 ++- .../message_template/project_member_joined.rb | 6 +- .../message_template/project_member_left.rb | 8 +- .../message_template/project_pull_request.rb | 10 ++- .../project_setting_changed.rb | 47 ++++++++--- .../message_template/pull_request_assigned.rb | 2 +- .../message_template/pull_request_atme.rb | 2 +- .../message_template/pull_request_changed.rb | 30 +++++-- app/services/projects/accept_join_service.rb | 2 + 24 files changed, 250 insertions(+), 89 deletions(-) diff --git a/api_document.md b/api_document.md index 3f609ed3e..8a579f8e7 100644 --- a/api_document.md +++ b/api_document.md @@ -26,11 +26,11 @@ POST accounts/remote_register *示例* ```bash curl -X POST \ --d "email=yystopf@163.com" \ --d "password=a19960425" \ --d "username=yystopf" \ +-d "email=2456233122@qq.com" \ +-d "password=djs_D_00001" \ +-d "username=16895620" \ -d "platform=forge" \ -http://120.132.31.109:8080/api/accounts/remote_register | jq +http://localhost:3000/api/accounts/remote_register | jq ``` *请求参数说明:* diff --git a/app/controllers/issues_controller.rb b/app/controllers/issues_controller.rb index e383a4f5c..208e68a47 100644 --- a/app/controllers/issues_controller.rb +++ b/app/controllers/issues_controller.rb @@ -112,6 +112,7 @@ class IssuesController < ApplicationController @issue = Issue.new(issue_params) if @issue.save! SendTemplateMessageJob.perform_later('IssueAssigned', current_user.id, @issue&.id) + SendTemplateMessageJob.perform_later('ProjectIssue', current_user.id, @issue&.id) if params[:attachment_ids].present? params[:attachment_ids].each do |id| attachment = Attachment.select(:id, :container_id, :container_type)&.find_by_id(id) @@ -288,8 +289,12 @@ class IssuesController < ApplicationController def clean #批量删除,暂时只能删除未悬赏的 issue_ids = params[:ids] - if issue_ids.present? - if Issue.where(id: issue_ids, issue_type: "1").destroy_all + issues = Issue.where(id: issue_ids, issue_type: "1") + if issues.present? + issues.find_each do |i| + SendTemplateMessageJob.perform_later('IssueDeleted', current_user.id, i&.subject, i.assigned_to_id, i.author_id) + end + if issues.destroy_all normal_status(0, "删除成功") else normal_status(-1, "删除失败") @@ -323,7 +328,18 @@ class IssuesController < ApplicationController if update_hash.blank? normal_status(-1, "请选择批量更新内容") elsif issues&.update(update_hash) - issues.map{|i| i.create_journal_detail(false, [], [], current_user&.id) if i.previous_changes.present?} + issues.each do |i| + i.create_journal_detail(false, [], [], current_user&.id) if i.previous_changes.present? + previous_changes = i.previous_changes.slice(:status_id, :assigned_to_id, :tracker_id, :priority_id, :fixed_version_id, :done_ratio, :issue_tags_value, :branch_name) + if i.previous_changes[:start_date].present? + previous_changes.merge!(start_date: [i.previous_changes[:start_date][0].to_s, i.previous_changes[:start_date][1].to_s]) + end + if i.previous_changes[:due_date].present? + previous_changes.merge!(due_date: [i.previous_changes[:due_date][0].to_s, i.previous_changes[:due_date][1].to_s]) + end + SendTemplateMessageJob.perform_later('IssueChanged', current_user.id, i&.id, previous_changes) + SendTemplateMessageJob.perform_later('IssueAssigned', current_user.id, i&.id) if i.previous_changes[:assigned_to_id].present? + end normal_status(0, "批量更新成功") else normal_status(-1, "批量更新失败") diff --git a/app/controllers/members_controller.rb b/app/controllers/members_controller.rb index 36c57b5b6..0af4898fc 100644 --- a/app/controllers/members_controller.rb +++ b/app/controllers/members_controller.rb @@ -9,7 +9,8 @@ class MembersController < ApplicationController def create interactor = Projects::AddMemberInteractor.call(@project.owner, @project, @user) - SendTemplateMessageJob.perform_later('ProjectJoined', @user.id, @project.id) + SendTemplateMessageJob.perform_later('ProjectJoined', current_user.id, @user.id, @project.id) + SendTemplateMessageJob.perform_later('ProjectMemberJoined', current_user.id, @user.id, @project.id) render_response(interactor) rescue Exception => e uid_logger_error(e.message) @@ -29,7 +30,8 @@ class MembersController < ApplicationController def remove interactor = Projects::DeleteMemberInteractor.call(@project.owner, @project, @user) - SendTemplateMessageJob.perform_later('ProjectLeft', @user.id, @project.id) + SendTemplateMessageJob.perform_later('ProjectLeft', current_user.id, @user.id, @project.id) + SendTemplateMessageJob.perform_later('ProjectMemberLeft', current_user.id, @user.id, @project.id) render_response(interactor) rescue Exception => e uid_logger_error(e.message) @@ -38,7 +40,7 @@ class MembersController < ApplicationController def change_role interactor = Projects::ChangeMemberRoleInteractor.call(@project.owner, @project, @user, params[:role]) - SendTemplateMessageJob.perform_later('ProjectRole', @user.id, @project.id, message_role_name) + SendTemplateMessageJob.perform_later('ProjectRole', current_user.id, @user.id, @project.id, message_role_name) render_response(interactor) rescue Exception => e uid_logger_error(e.message) diff --git a/app/controllers/pull_requests_controller.rb b/app/controllers/pull_requests_controller.rb index 0799beb58..fe1edab5f 100644 --- a/app/controllers/pull_requests_controller.rb +++ b/app/controllers/pull_requests_controller.rb @@ -60,6 +60,7 @@ class PullRequestsController < ApplicationController if @gitea_pull_request[:status] == :success @pull_request.bind_gitea_pull_request!(@gitea_pull_request[:body]["number"]) SendTemplateMessageJob.perform_later('PullRequestAssigned', current_user.id, @pull_request&.id) + SendTemplateMessageJob.perform_later('ProjectPullRequest', current_user.id, @pull_request&.id) render_ok else render_error("create pull request error: #{@gitea_pull_request[:status]}") diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index c69dfdb69..b80827efa 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -91,8 +91,12 @@ class UsersController < ApplicationController def get_user_info begin @user = current_user - result = Notice::Read::CountService.call(current_user.id) - @message_unread_total = result.nil? ? 0 : result[2]["unread_notification"] + begin + result = Notice::Read::CountService.call(current_user.id) + @message_unread_total = result.nil? ? 0 : result[2]["unread_notification"] + rescue + @message_unread_total = 0 + end # TODO 等消息上线再打开注释 #@tidding_count = unviewed_tiddings(current_user) if current_user.present? rescue Exception => e diff --git a/app/jobs/send_template_message_job.rb b/app/jobs/send_template_message_job.rb index 9c94e16e9..d35938063 100644 --- a/app/jobs/send_template_message_job.rb +++ b/app/jobs/send_template_message_job.rb @@ -17,7 +17,7 @@ class SendTemplateMessageJob < ApplicationJob operator = User.find_by_id(operator_id) issue = Issue.find_by_id(issue_id) return unless operator.present? && issue.present? - receivers = User.where(id: issue&.assigned_to_id) + receivers = User.where(id: issue&.assigned_to_id).where.not(id: operator&.id) receivers_string, content, notification_url = MessageTemplate::IssueAssigned.get_message_content(receivers, operator, issue) Notice::Write::CreateService.call(receivers_string, content, notification_url, source, {operator_id: operator.id, issue_id: issue.id}) when 'IssueAssignerExpire' @@ -32,6 +32,7 @@ class SendTemplateMessageJob < ApplicationJob operator = User.find_by_id(operator_id) issue = Issue.find_by_id(issue_id) return unless operator.present? && issue.present? + receivers = receivers.where.not(id: operator&.id) receivers_string, content, notification_url = MessageTemplate::IssueAtme.get_message_content(receivers, operator, issue) Notice::Write::CreateService.call(receivers_string, content, notification_url, source, {operator_id: operator.id, issue_id: issue.id}, 2) when 'IssueChanged' @@ -39,7 +40,7 @@ class SendTemplateMessageJob < ApplicationJob operator = User.find_by_id(operator_id) issue = Issue.find_by_id(issue_id) return unless operator.present? && issue.present? - receivers = User.where(id: [issue&.assigned_to_id, issue&.author_id]) + receivers = User.where(id: [issue&.assigned_to_id, issue&.author_id]).where.not(id: operator&.id) receivers_string, content, notification_url = MessageTemplate::IssueChanged.get_message_content(receivers, operator, issue, change_params) Notice::Write::CreateService.call(receivers_string, content, notification_url, source, {operator_id: operator.id, issue_id: issue.id, change_params: change_params.symbolize_keys}) when 'IssueCreatorExpire' @@ -53,7 +54,7 @@ class SendTemplateMessageJob < ApplicationJob operator_id, issue_title, issue_assigned_to_id, issue_author_id = args[0], args[1], args[2], args[3] operator = User.find_by_id(operator_id) return unless operator.present? - receivers = User.where(id: [issue_assigned_to_id, issue_author_id]) + receivers = User.where(id: [issue_assigned_to_id, issue_author_id]).where.not(id: operator&.id) receivers_string, content, notification_url = MessageTemplate::IssueDeleted.get_message_content(receivers, operator, issue_title) Notice::Write::CreateService.call(receivers_string, content, notification_url, source, {operator_id: operator.id, issue_title: issue_title}) when 'OrganizationJoined' @@ -80,36 +81,75 @@ class SendTemplateMessageJob < ApplicationJob receivers = User.where(id: user.id) receivers_string, content, notification_url = MessageTemplate::OrganizationRole.get_message_content(receivers, organization, role) Notice::Write::CreateService.call(receivers_string, content, notification_url, source, {user_id: user.id, organization_id: organization.id, role: role}) + when 'ProjectIssue' + operator_id, issue_id = args[0], args[1] + operator = User.find_by_id(operator_id) + issue = Issue.find_by_id(issue_id) + return unless operator.present? && issue.present? && issue&.project.present? + managers = issue&.project&.all_managers.where.not(id: operator&.id) + followers = [] # TODO + receivers_string, content, notification_url = MessageTemplate::ProjectIssue.get_message_content(managers, followers, operator, issue) + Notice::Write::CreateService.call(receivers_string, content, notification_url, source, {operator_id: operator.id, issue_id: issue.id}) when 'ProjectJoined' - user_id, project_id = args[0], args[1] + operator_id, user_id, project_id = args[0], args[1], args[2] + operator = User.find_by_id(operator_id) user = User.find_by_id(user_id) project = Project.find_by_id(project_id) - return unless user.present? && project.present? - receivers = User.where(id: user.id) + return unless operator.present? && user.present? && project.present? + receivers = User.where(id: user.id).where.not(id: operator&.id) receivers_string, content, notification_url = MessageTemplate::ProjectJoined.get_message_content(receivers, project) - Notice::Write::CreateService.call(receivers_string, content, notification_url, source, {user_id: user.id, project_id: project.id}) + Notice::Write::CreateService.call(receivers_string, content, notification_url, source, {operator_id: operator.id, user_id: user.id, project_id: project.id}) when 'ProjectLeft' - user_id, project_id = args[0], args[1] + operator_id, user_id, project_id = args[0], args[1], args[2] + operator = User.find_by_id(operator_id) user = User.find_by_id(user_id) project = Project.find_by_id(project_id) - return unless user.present? && project.present? - receivers = User.where(id: user.id) + return unless operator.present? && user.present? && project.present? + receivers = User.where(id: user.id).where.not(id: operator&.id) receivers_string, content, notification_url = MessageTemplate::ProjectLeft.get_message_content(receivers, project) - Notice::Write::CreateService.call(receivers_string, content, notification_url, source, {user_id: user.id, project_id: project.id}) - when 'ProjectRole' - user_id, project_id, role = args[0], args[1], args[2] + Notice::Write::CreateService.call(receivers_string, content, notification_url, source, {operator_id: operator.id, user_id: user.id, project_id: project.id}) + when 'ProjectMemberJoined' + operator_id, user_id, project_id = args[0], args[1], args[2] + operator = User.find_by_id(operator_id) user = User.find_by_id(user_id) project = Project.find_by_id(project_id) - return unless user.present? && project.present? - receivers = User.where(id: user.id) + return unless operator.present? && user.present? && project.present? + receivers = project&.all_managers.where.not(id: operator&.id) + receivers_string, content, notification_url = MessageTemplate::ProjectMemberJoined.get_message_content(receivers, user, project) + Notice::Write::CreateService.call(receivers_string, content, notification_url, source, {operator_id: operator.id, user_id: user.id, project_id: project.id}) + when 'ProjectMemberLeft' + operator_id, user_id, project_id = args[0], args[1], args[2] + operator = User.find_by_id(operator_id) + user = User.find_by_id(user_id) + project = Project.find_by_id(project_id) + return unless operator.present? && user.present? && project.present? + receivers = project&.all_managers.where.not(id: operator&.id) + receivers_string, content, notification_url = MessageTemplate::ProjectMemberLeft.get_message_content(receivers, user, project) + Notice::Write::CreateService.call(receivers_string, content, notification_url, source, {operator_id: operator.id, user_id: user.id, project_id: project.id}) + when 'ProjectPullRequest' + operator_id, pull_request_id = args[0], args[1] + operator = User.find_by_id(operator_id) + pull_request = PullRequest.find_by_id(pull_request_id) + return unless operator.present? && pull_request.present? && pull_request&.project.present? + managers = pull_request&.project&.all_managers.where.not(id: operator&.id) + followers = [] # TODO + receivers_string, content, notification_url = MessageTemplate::ProjectPullRequest.get_message_content(managers, followers, operator, pull_request) + Notice::Write::CreateService.call(receivers_string, content, notification_url, source, {operator_id: operator.id, pull_request_id: pull_request.id}) + when 'ProjectRole' + operator_id, user_id, project_id, role = args[0], args[1], args[2], args[3] + operator = User.find_by_id(operator_id) + user = User.find_by_id(user_id) + project = Project.find_by_id(project_id) + return unless operator.present? && user.present? && project.present? + receivers = User.where(id: user.id).where.not(id: operator&.id) receivers_string, content, notification_url = MessageTemplate::ProjectRole.get_message_content(receivers, project, role) - Notice::Write::CreateService.call(receivers_string, content, notification_url, source, {user_id: user.id, project_id: project.id, role: role}) + Notice::Write::CreateService.call(receivers_string, content, notification_url, source, {operator_id: operator.id, user_id: user.id, project_id: project.id, role: role}) when 'ProjectSettingChanged' operator_id, project_id, change_params = args[0], args[1], args[2] operator = User.find_by_id(operator_id) project = Project.find_by_id(project_id) return unless operator.present? && project.present? - receivers = project.all_managers + receivers = project.all_managers.where.not(id: operator&.id) receivers_string, content, notification_url = MessageTemplate::ProjectSettingChanged.get_message_content(receivers, operator, project, change_params.symbolize_keys) Notice::Write::CreateService.call(receivers_string, content, notification_url, source, {operator_id: operator.id, project_id: project.id, change_params: change_params}) when 'PullRequestAssigned' @@ -117,7 +157,7 @@ class SendTemplateMessageJob < ApplicationJob operator = User.find_by_id(operator_id) pull_request = PullRequest.find_by_id(pull_request_id) return unless operator.present? && pull_request.present? - receivers = User.where(id: pull_request&.issue&.assigned_to_id) + receivers = User.where(id: pull_request&.issue&.assigned_to_id).where.not(id: operator&.id) receivers_string, content, notification_url = MessageTemplate::PullRequestAssigned.get_message_content(receivers, operator, pull_request) Notice::Write::CreateService.call(receivers_string, content, notification_url, source, {operator_id: operator.id, pull_request_id: pull_request.id}) when 'PullRequestAtme' @@ -125,6 +165,7 @@ class SendTemplateMessageJob < ApplicationJob operator = User.find_by_id(operator_id) pull_request = PullRequest.find_by_id(pull_request_id) return unless operator.present? && pull_request.present? + receivers = receivers.where.not(id: operator&.id) receivers_string, content, notification_url = MessageTemplate::PullRequestAtme.get_message_content(receivers, operator, pull_request) Notice::Write::CreateService.call(receivers_string, content, notification_url, source, {operator_id: operator.id, pull_request_id: pull_request.id}, 2) when 'PullRequestChanged' @@ -132,7 +173,7 @@ class SendTemplateMessageJob < ApplicationJob operator = User.find_by_id(operator_id) pull_request = PullRequest.find_by_id(pull_request_id) return unless operator.present? && pull_request.present? - receivers = User.where(id: [pull_request&.issue&.assigned_to_id, pull_request&.user_id]) + receivers = User.where(id: [pull_request&.issue&.assigned_to_id, pull_request&.user_id]).where.not(id: operator&.id) receivers_string, content, notification_url = MessageTemplate::PullRequestChanged.get_message_content(receivers, operator, pull_request, change_params.symbolize_keys) Notice::Write::CreateService.call(receivers_string, content, notification_url, source, {operator_id: operator.id, pull_request_id: pull_request.id, change_params: change_params}) when 'PullRequestClosed' @@ -140,7 +181,7 @@ class SendTemplateMessageJob < ApplicationJob operator = User.find_by_id(operator_id) pull_request = PullRequest.find_by_id(pull_request_id) return unless operator.present? && pull_request.present? - receivers = User.where(id: [pull_request&.issue&.assigned_to_id, pull_request&.user_id]) + receivers = User.where(id: [pull_request&.issue&.assigned_to_id, pull_request&.user_id]).where.not(id: operator&.id) receivers_string, content, notification_url = MessageTemplate::PullRequestClosed.get_message_content(receivers, operator, pull_request) Notice::Write::CreateService.call(receivers_string, content, notification_url, source, {operator_id: operator.id, pull_request_id: pull_request.id}) when 'PullRequestMerged' @@ -148,7 +189,7 @@ class SendTemplateMessageJob < ApplicationJob operator = User.find_by_id(operator_id) pull_request = PullRequest.find_by_id(pull_request_id) return unless operator.present? && pull_request.present? - receivers = User.where(id: [pull_request&.issue&.assigned_to_id, pull_request&.user_id]) + receivers = User.where(id: [pull_request&.issue&.assigned_to_id, pull_request&.user_id]).where.not(id: operator&.id) receivers_string, content, notification_url = MessageTemplate::PullRequestMerged.get_message_content(receivers, operator, pull_request) Notice::Write::CreateService.call(receivers_string, content, notification_url, source, {operator_id: operator.id, pull_request_id: pull_request.id}) end diff --git a/app/models/message_template.rb b/app/models/message_template.rb index 6c5e4df22..42aa64a44 100644 --- a/app/models/message_template.rb +++ b/app/models/message_template.rb @@ -18,7 +18,7 @@ class MessageTemplate {nickname2}/{repository}
    指派给你一个易修:{title}', notification_url: '{baseurl}/{owner}/{identifier}/issues/{id}') self.create(type: 'MessageTemplate::IssueAssignerExpire', sys_notice: '您负责的易修{title}已临近截止日期,请尽快处理', notification_url: '{baseurl}/{owner}/{identifier}/issues/{id}') self.create(type: 'MessageTemplate::IssueAtme', sys_notice: '{nickname}在易修{title}中@我', notification_url: '{baseurl}/{owner}/{identifier}/issues/{id}') - self.create(type: 'MessageTemplate::IssueChanged', sys_notice: '在项目{nickname2}/{repository}的易修{title}中:{ifassigner}{nickname1}将负责人从{assigner1}修改为{assigner2}
    {endassigner}{ifstatus}{nickname1}将状态从{status1}修改为{status2}
    {endstatus}{iftracker}{nickname1}将类型从{tracker1}修改为{tracker2}
    {endtracker}{ifpriority}{nickname1}将优先级从{priority1}修改为{priority2}
    {endpriority}{ifmilestone}{nickname1}将里程碑从{milestone1}修改为{milestone2}
    {endmilestone}{iftag}{nickname1}将标签从{tag1}修改为{tag2}
    {endtag}{ifdoneratio}{nickname1}将完成度从{doneratio2}修改为{doneratio1}{enddoneratio}
    {ifbranch}{nickname1}将指定分支从{branch1}修改为{branch2}
    {endbranch}{ifstartdate}{nickname1}将开始日期从{startdate1}修改为{startdate2}
    {endstartdate}{ifduedate}{nickname1}将结束日期从{duedate1}修改为{duedate2}
    {endduedate}', notification_url: '{baseurl}/{owner}/{identifier}/issues/{id}') + self.create(type: 'MessageTemplate::IssueChanged', sys_notice: '在项目{nickname2}/{repository}的易修{title}中:{ifassigner}{nickname1}将负责人从{assigner1}修改为{assigner2}{endassigner}{ifstatus}{nickname1}将状态从{status1}修改为{status2}{endstatus}{iftracker}{nickname1}将类型从{tracker1}修改为{tracker2}{endtracker}{ifpriority}{nickname1}将优先级从{priority1}修改为{priority2}{endpriority}{ifmilestone}{nickname1}将里程碑从{milestone1}修改为{milestone2}{endmilestone}{iftag}{nickname1}将标签从{tag1}修改为{tag2}{endtag}{ifdoneratio}{nickname1}将完成度从{doneratio1}修改为{doneratio2}{enddoneratio}{ifbranch}{nickname1}将指定分支从{branch1}修改为{branch2}{endbranch}{ifstartdate}{nickname1}将开始日期从{startdate1}修改为{startdate2}{endstartdate}{ifduedate}{nickname1}将结束日期从{duedate1}修改为{duedate2}{endduedate}', notification_url: '{baseurl}/{owner}/{identifier}/issues/{id}') self.create(type: 'MessageTemplate::IssueCreatorExpire', sys_notice: '您发布的易修{title}已临近截止日期,请尽快处理', notification_url: '{baseurl}/{owner}/{identifier}/issues/{id}') self.create(type: 'MessageTemplate::IssueDeleted', sys_notice: '{nickname}已将易修{title}删除', notification_url: '') self.create(type: 'MessageTemplate::IssueJournal', sys_notice: '{nickname}评论易修{title}:{notes}', notification_url: '{baseurl}/{owner}/{identifier}/issues/{id}') @@ -38,12 +38,12 @@ class MessageTemplate {nickname}
    点赞了你管理的仓库', notification_url: '{baseurl}/{login}') self.create(type: 'MessageTemplate::ProjectPullRequest', sys_notice: '{nickname1}在{nickname2}/{repository}提交了一个合并请求:{title}', notification_url: '{baseurl}/{owner}/{identifier}/pulls/{id}/Messagecount') self.create(type: 'MessageTemplate::ProjectRole', sys_notice: '仓库{repository}已把你的角色改为{role}', notification_url: '{baseurl}/{owner}/{identifier}') - self.create(type: 'MessageTemplate::ProjectSettingChanged', sys_notice: '{nickname1}更改了{nickname2}/{repository}仓库设置:{ifname}更改项目名称为"{name}";{endname}{ifdescription}更改项目简介为"{description}";{enddescription}{ifcategory}更改项目类别为"{category}";{endcategory}{iflanguage}更改项目语言为"{language}";{endlanguage}{ifpermission}将仓库设为"{permission}";{endpermission}{ifnavbar}将项目导航更改为"{navbar}";{endnavbar}', notification_url: '{baseurl}/{owner}/{identifier}/settings') + self.create(type: 'MessageTemplate::ProjectSettingChanged', sys_notice: '{nickname1}更改了{nickname2}/{repository}仓库设置:{ifname}更改项目名称为"{name}"{endname}{ifdescription}更改项目简介为"{description}"{enddescription}{ifcategory}更改项目类别为"{category}"{endcategory}{iflanguage}更改项目语言为"{language}"{endlanguage}{ifpermission}将仓库设为"{permission}"{endpermission}{ifnavbar}将项目导航更改为"{navbar}"{endnavbar}', notification_url: '{baseurl}/{owner}/{identifier}/settings') self.create(type: 'MessageTemplate::ProjectTransfer', sys_notice: '你关注的仓库{nickname1}/{repository1}已被转移至{nickname2}/{repository2}', notification_url: '{baseurl}/{owner}/{identifier}') self.create(type: 'MessageTemplate::ProjectVersion', sys_notice: '{nickname1}在{nickname2}/{repository}创建了发行版:{title}', notification_url: '{baseurl}/{owner}/{identifier}/releases') self.create(type: 'MessageTemplate::PullRequestAssigned', sys_notice: '{nickname1}在{nickname2}/{repository}指派给你一个合并请求:{title}', notification_url: '{baseurl}/{owner}/{identifier}/pulls/{id}/Messagecount') self.create(type: 'MessageTemplate::PullRequestAtme', sys_notice: '{nickname}在合并请求{title}中@我', notification_url: '{baseurl}/{owner}/{identifier}/pulls/{id}/Messagecount') - self.create(type: 'MessageTemplate::PullRequestChanged', sys_notice: '在项目{nickname2}/{repository}的合并请求{title}中:{ifassigner}{nickname1}将审查成员从{assigner1}修改为{assigner2}
    {endassigner}{ifmilestone}{nickname1}将里程碑从{milestone1}修改为{milestone2}
    {endmilestone}{iftag}{nickname1}将标签从{tag1}修改为{tag2}
    {endtag}{ifpriority}{nickname1}将优先级从{priority1}修改为{priority2}
    {endpriority}', notification_url: '{baseurl}/{owner}/{identifier}/pulls/{id}/Messagecount') + self.create(type: 'MessageTemplate::PullRequestChanged', sys_notice: '在项目{nickname2}/{repository}的合并请求{title}中:{ifassigner}{nickname1}将审查成员从{assigner1}修改为{assigner2}{endassigner}{ifmilestone}{nickname1}将里程碑从{milestone1}修改为{milestone2}{endmilestone}{iftag}{nickname1}将标签从{tag1}修改为{tag2}{endtag}{ifpriority}{nickname1}将优先级从{priority1}修改为{priority2}{endpriority}', notification_url: '{baseurl}/{owner}/{identifier}/pulls/{id}/Messagecount') self.create(type: 'MessageTemplate::PullRequestClosed', sys_notice: '你提交的合并请求:{title}被拒绝', notification_url: '') self.create(type: 'MessageTemplate::PullRequestJournal', sys_notice: '{nickname}评论合并请求{title}:{notes}', notification_url: '{baseurl}/{owner}/{identifier}/pulls/{id}/Messagecount') self.create(type: 'MessageTemplate::PullRequestMerged', sys_notice: '你提交的合并请求:{title}被合并', notification_url: '{baseurl}/{owner}/{identifier}/pulls/{id}/Messagecount') diff --git a/app/models/message_template/followed_tip.rb b/app/models/message_template/followed_tip.rb index 15a074fb3..d8c6cba20 100644 --- a/app/models/message_template/followed_tip.rb +++ b/app/models/message_template/followed_tip.rb @@ -16,7 +16,7 @@ class MessageTemplate::FollowedTip < MessageTemplate # MessageTemplate::FollowedTip.get_message_content(User.where(login: 'yystopf'), User.last) def self.get_message_content(receivers, followeder) - return receivers_string(receivers), sys_notice.gsub('{nickname}', followeder&.nickname), notification_url.gsub('{login}', followeder.login) + return receivers_string(receivers), sys_notice.gsub('{nickname}', followeder&.real_name), notification_url.gsub('{login}', followeder.login) rescue return '', '', '' end diff --git a/app/models/message_template/issue_assigned.rb b/app/models/message_template/issue_assigned.rb index ccef717e2..0507f2acb 100644 --- a/app/models/message_template/issue_assigned.rb +++ b/app/models/message_template/issue_assigned.rb @@ -18,7 +18,7 @@ class MessageTemplate::IssueAssigned < MessageTemplate def self.get_message_content(receivers, operator, issue) project = issue&.project owner = project&.owner - content = sys_notice.gsub('{nickname1}', operator&.nickname).gsub('{nickname2}', owner&.nickname).gsub('{repository}', project&.name).gsub('{title}', issue&.subject) + content = sys_notice.gsub('{nickname1}', operator&.real_name).gsub('{nickname2}', owner&.real_name).gsub('{repository}', project&.name).gsub('{title}', issue&.subject) url = notification_url.gsub('{owner}', owner&.login).gsub('{identifier}', project&.identifier).gsub('{id}', issue&.id.to_s) return receivers_string(receivers), content, url rescue => e diff --git a/app/models/message_template/issue_atme.rb b/app/models/message_template/issue_atme.rb index 1738838ef..5678b31de 100644 --- a/app/models/message_template/issue_atme.rb +++ b/app/models/message_template/issue_atme.rb @@ -18,7 +18,7 @@ class MessageTemplate::IssueAtme < MessageTemplate def self.get_message_content(receivers, operator, issue) project = issue&.project owner = project&.owner - content = sys_notice.gsub('{nickname}', operator&.nickname).gsub('{title}', issue&.subject) + content = sys_notice.gsub('{nickname}', operator&.real_name).gsub('{title}', issue&.subject) url = notification_url.gsub('{owner}', owner&.login).gsub('{identifier}', project&.identifier).gsub('{id}', issue&.id.to_s) return receivers_string(receivers), content, url rescue => e diff --git a/app/models/message_template/issue_changed.rb b/app/models/message_template/issue_changed.rb index ddecab80e..f6f443677 100644 --- a/app/models/message_template/issue_changed.rb +++ b/app/models/message_template/issue_changed.rb @@ -19,16 +19,21 @@ class MessageTemplate::IssueChanged < MessageTemplate return '', '', '' if change_params.blank? project = issue&.project owner = project&.owner - content = MessageTemplate::IssueChanged.sys_notice.gsub('{nickname1}', operator&.nickname).gsub('{nickname2}', owner&.nickname).gsub('{repository}', project&.name).gsub('{title}', issue&.subject) + content = MessageTemplate::IssueChanged.sys_notice.gsub('{nickname1}', operator&.real_name).gsub('{nickname2}', owner&.real_name).gsub('{repository}', project&.name).gsub('{title}', issue&.subject) url = notification_url.gsub('{owner}', owner&.login).gsub('{identifier}', project&.identifier).gsub('{id}', issue&.id.to_s) + change_count = change_params.keys.size # 易修负责人修改 if change_params[:assigned_to_id].present? assigner1 = User.find_by_id(change_params[:assigned_to_id][0]) assigner2 = User.find_by_id(change_params[:assigned_to_id][1]) - content.sub!('{ifassigner}', '') + if change_count > 1 + content.sub!('{ifassigner}', '
    ') + else + content.sub!('{ifassigner}', '') + end content.sub!('{endassigner}', '') - content.gsub!('{assigner1}', assigner1.present? ? assigner1&.nickname || assigner1.login : '未指派成员') - content.gsub!('{assigner2}', assigner2.present? ? assigner2&.nickname || assigner2.login : '未指派成员') + content.gsub!('{assigner1}', assigner1.present? ? assigner1&.real_name : '未指派成员') + content.gsub!('{assigner2}', assigner2.present? ? assigner2&.real_name : '未指派成员') else content.gsub!(/({ifassigner})(.*)({endassigner})/, '') end @@ -36,7 +41,11 @@ class MessageTemplate::IssueChanged < MessageTemplate if change_params[:status_id].present? status1 = IssueStatus.find_by_id(change_params[:status_id][0]) status2 = IssueStatus.find_by_id(change_params[:status_id][1]) - content.sub!('{ifstatus}', '') + if change_count > 1 + content.sub!('{ifstatus}', '
    ') + else + content.sub!('{ifstatus}', '') + end content.sub!('{endstatus}', '') content.gsub!('{status1}', status1&.name) content.gsub!('{status2}', status2&.name) @@ -47,7 +56,11 @@ class MessageTemplate::IssueChanged < MessageTemplate if change_params[:tracker_id].present? tracker1 = Tracker.find_by_id(change_params[:tracker_id][0]) tracker2 = Tracker.find_by_id(change_params[:tracker_id][1]) - content.sub!('{iftracker}', '') + if change_count > 1 + content.sub!('{iftracker}', '
    ') + else + content.sub!('{iftracker}', '') + end content.sub!('{endtracker}', '') content.gsub!('{tracker1}', tracker1&.name) content.gsub!('{tracker2}', tracker2&.name) @@ -58,7 +71,11 @@ class MessageTemplate::IssueChanged < MessageTemplate if change_params[:fixed_version_id].present? fix_version1 = Version.find_by_id(change_params[:fixed_version_id][0]) fix_version2 = Version.find_by_id(change_params[:fixed_version_id][1]) - content.sub!('{ifmilestone}', '') + if change_count > 1 + content.sub!('{ifmilestone}', '
    ') + else + content.sub!('{ifmilestone}', '') + end content.sub!('{endmilestone}', '') content.gsub!('{milestone1}', fix_version1.present? ? fix_version1&.name : '未选择里程碑') content.gsub!('{milestone2}', fix_version2.present? ? fix_version2&.name : '未选择里程碑') @@ -71,8 +88,11 @@ class MessageTemplate::IssueChanged < MessageTemplate issue_tags2 = IssueTag.where(id: change_params[:issue_tags_value][1]).distinct tag1 = issue_tags1.pluck(:name).join(",").blank? ? '未选择标签' : issue_tags1.pluck(:name).join(",") tag2 = issue_tags2.pluck(:name).join(",").blank? ? '未选择标签' : issue_tags2.pluck(:name).join(",") - content.sub!('{iftag}', '') - content.sub!('{endtag}', '') + if change_count > 1 + content.sub!('{iftag}', '
    ') + else + content.sub!('{endtag}', '') + end content.gsub!('{tag1}', tag1) content.gsub!('{tag2}', tag2) else @@ -82,8 +102,11 @@ class MessageTemplate::IssueChanged < MessageTemplate if change_params[:priority_id].present? priority1 = IssuePriority.find_by_id(change_params[:priority_id][0]) priority2 = IssuePriority.find_by_id(change_params[:priority_id][1]) - - content.sub!('{ifpriority}', '') + if change_count > 1 + content.sub!('{ifpriority}', '
    ') + else + content.sub!('{ifpriority}', '') + end content.sub!('{endpriority}', '') content.gsub!('{priority1}', priority1&.name) content.gsub!('{priority2}', priority2&.name) @@ -94,8 +117,11 @@ class MessageTemplate::IssueChanged < MessageTemplate if change_params[:done_ratio].present? doneratio1 = change_params[:done_ratio][0] doneratio2 = change_params[:done_ratio][1] - - content.sub!('{ifdoneratio}', '') + if change_count > 1 + content.sub!('{ifdoneratio}', '
    ') + else + content.sub!('{ifdoneratio}', '') + end content.sub!('{enddoneratio}', '') content.gsub!('{doneratio1}', "#{doneratio1}%") content.gsub!('{doneratio2}', "#{doneratio2}%") @@ -106,8 +132,11 @@ class MessageTemplate::IssueChanged < MessageTemplate if change_params[:branch_name].present? branch1 = change_params[:branch_name][0].blank? ? '分支未指定' : change_params[:branch_name][0] branch2 = change_params[:branch_name][1].blank? ? '分支未指定' : change_params[:branch_name][1] - - content.sub!('{ifbranch}', '') + if change_count > 1 + content.sub!('{ifbranch}', '
    ') + else + content.sub!('{ifbranch}', '') + end content.sub!('{endbranch}', '') content.gsub!('{branch1}', branch1) content.gsub!('{branch2}', branch2) @@ -118,8 +147,11 @@ class MessageTemplate::IssueChanged < MessageTemplate if change_params[:start_date].present? startdate1 = change_params[:start_date][0].blank? ? "未选择开始日期" : change_params[:start_date][0] startdate2 = change_params[:start_date][1].blank? ? "未选择开始日期" : change_params[:start_date][1] - - content.sub!('{ifstartdate}', '') + if change_count > 1 + content.sub!('{ifstartdate}', '
    ') + else + content.sub!('{ifstartdate}', '') + end content.sub!('{endstartdate}', '') content.gsub!('{startdate1}', startdate1 ) content.gsub!('{startdate2}', startdate2) @@ -130,7 +162,11 @@ class MessageTemplate::IssueChanged < MessageTemplate if change_params[:due_date].present? duedate1 = change_params[:due_date][0].blank? ? '未选择结束日期' : change_params[:due_date][0] duedate2 = change_params[:due_date][1].blank? ? '未选择结束日期' : change_params[:due_date][1] - content.sub!('{ifduedate}', '') + if change_count > 1 + content.sub!('{ifduedate}', '
    ') + else + content.sub!('{ifduedate}', '') + end content.sub!('{endduedate}', '') content.gsub!('{duedate1}', duedate1) content.gsub!('{duedate2}', duedate2) diff --git a/app/models/message_template/issue_deleted.rb b/app/models/message_template/issue_deleted.rb index 8decdd157..46d7d6e64 100644 --- a/app/models/message_template/issue_deleted.rb +++ b/app/models/message_template/issue_deleted.rb @@ -16,7 +16,7 @@ class MessageTemplate::IssueDeleted < MessageTemplate # MessageTemplate::IssueDeleted.get_message_content(User.where(login: 'yystopf'), User.last, "hahah") def self.get_message_content(receivers, operator, issue_title) - content = sys_notice.gsub('{nickname}', operator&.nickname).gsub('{title}', issue_title) + content = sys_notice.gsub('{nickname}', operator&.real_name).gsub('{title}', issue_title) return receivers_string(receivers), content, notification_url rescue => e Rails.logger.info("MessageTemplate::IssueAtme.get_message_content [ERROR] #{e}") diff --git a/app/models/message_template/organization_joined.rb b/app/models/message_template/organization_joined.rb index d3a7ca1d1..81ae2a67d 100644 --- a/app/models/message_template/organization_joined.rb +++ b/app/models/message_template/organization_joined.rb @@ -16,7 +16,7 @@ class MessageTemplate::OrganizationJoined < MessageTemplate # MessageTemplate::OrganizationJoined.get_message_content(User.where(login: 'yystopf'), Organization.last) def self.get_message_content(receivers, organization) - content = sys_notice.gsub('{organization}', organization&.name) + content = sys_notice.gsub('{organization}', organization&.real_name) url = notification_url.gsub('{login}', organization&.name) return receivers_string(receivers), content, url rescue => e diff --git a/app/models/message_template/organization_left.rb b/app/models/message_template/organization_left.rb index 9fe844746..16652d30e 100644 --- a/app/models/message_template/organization_left.rb +++ b/app/models/message_template/organization_left.rb @@ -16,7 +16,7 @@ class MessageTemplate::OrganizationLeft < MessageTemplate # MessageTemplate::OrganizationLeft.get_message_content(User.where(login: 'yystopf'), Organization.last) def self.get_message_content(receivers, organization) - content = sys_notice.gsub('{organization}', organization&.name) + content = sys_notice.gsub('{organization}', organization&.real_name) url = notification_url.gsub('{login}', organization&.name) return receivers_string(receivers), content, url rescue => e diff --git a/app/models/message_template/organization_role.rb b/app/models/message_template/organization_role.rb index 223ecf8bb..33c326514 100644 --- a/app/models/message_template/organization_role.rb +++ b/app/models/message_template/organization_role.rb @@ -16,7 +16,7 @@ class MessageTemplate::OrganizationRole < MessageTemplate # MessageTemplate::OrganizationRole.get_message_content(User.where(login: 'yystopf'), Organization.last, '管理员') def self.get_message_content(receivers, organization, role) - content = sys_notice.gsub('{organization}', organization&.name).gsub('{role}', role) + content = sys_notice.gsub('{organization}', organization&.real_name).gsub('{role}', role) url = notification_url.gsub('{login}', organization&.login) return receivers_string(receivers), content, url rescue => e diff --git a/app/models/message_template/project_issue.rb b/app/models/message_template/project_issue.rb index 81904f230..700932ad6 100644 --- a/app/models/message_template/project_issue.rb +++ b/app/models/message_template/project_issue.rb @@ -14,8 +14,14 @@ # TODO 我管理/关注的仓库有新的易修 class MessageTemplate::ProjectIssue < MessageTemplate - # MessageTemplate::ProjectIssue.get_message_content(User.where(login: 'yystopf')) - def self.get_message_content(receivers) + # MessageTemplate::ProjectIssue.get_message_content(User.where(login: 'yystopf'), User.where(login: 'forgetest1'), User.last, Issue.last) + def self.get_message_content(managers, followers, operator, issue) + project = issue&.project + owner = project&.owner + receivers = managers + followers + content = sys_notice.gsub('{nickname1}', operator&.real_name).gsub('{nickname2}', owner&.real_name).gsub('{repository}', project&.name).gsub('{title}', issue&.subject) + url = notification_url.gsub('{owner}', owner&.login).gsub('{identifier}', project&.identifier).gsub('{id}', issue&.id.to_s) + return receivers_string(receivers), content, url rescue => e Rails.logger.info("MessageTemplate::ProjectIssue.get_message_content [ERROR] #{e}") diff --git a/app/models/message_template/project_member_joined.rb b/app/models/message_template/project_member_joined.rb index c10edb596..a510265bc 100644 --- a/app/models/message_template/project_member_joined.rb +++ b/app/models/message_template/project_member_joined.rb @@ -11,11 +11,13 @@ # notification_url :string(255) # -# TODO 我管理的仓库有成员加入 +# 我管理的仓库有成员加入 class MessageTemplate::ProjectMemberJoined < MessageTemplate # MessageTemplate::ProjectMemberJoined.get_message_content(User.where(login: 'yystopf')) - def self.get_message_content(receivers) + def self.get_message_content(receivers, user, project) + content = sys_notice.gsub('{nickname1}', user&.real_name).gsub('{nickname2}', project&.owner&.real_name).gsub('{repository}', project&.name) + url = notification_url.gsub('{owner}', project&.owner&.login).gsub('{identifier}', project&.identifier) return receivers_string(receivers), content, url rescue => e Rails.logger.info("MessageTemplate::ProjectMemberJoined.get_message_content [ERROR] #{e}") diff --git a/app/models/message_template/project_member_left.rb b/app/models/message_template/project_member_left.rb index b7133e052..9d26e1027 100644 --- a/app/models/message_template/project_member_left.rb +++ b/app/models/message_template/project_member_left.rb @@ -11,11 +11,13 @@ # notification_url :string(255) # -# TODO 我管理的仓库有成员移出 +# 我管理的仓库有成员移出 class MessageTemplate::ProjectMemberLeft < MessageTemplate - # MessageTemplate::ProjectMemberLeft.get_message_content(User.where(login: 'yystopf')) - def self.get_message_content(receivers) + # MessageTemplate::ProjectMemberLeft.get_message_content(User.where(login: 'yystopf'), User.last, Project.last) + def self.get_message_content(receivers, user, project) + content = sys_notice.gsub('{nickname1}', user&.real_name).gsub('{nickname2}', project&.owner&.real_name).gsub('{repository}', project&.name) + url = notification_url.gsub('{owner}', project&.owner&.login).gsub('{identifier}', project&.identifier) return receivers_string(receivers), content, url rescue => e Rails.logger.info("MessageTemplate::ProjectMemberLeft.get_message_content [ERROR] #{e}") diff --git a/app/models/message_template/project_pull_request.rb b/app/models/message_template/project_pull_request.rb index f0c642d19..2db1021ad 100644 --- a/app/models/message_template/project_pull_request.rb +++ b/app/models/message_template/project_pull_request.rb @@ -14,8 +14,14 @@ # TODO 我管理/关注的仓库有新的合并请求 class MessageTemplate::ProjectPullRequest < MessageTemplate - # MessageTemplate::ProjectPullRequest.get_message_content(User.where(login: 'yystopf')) - def self.get_message_content(receivers) + # MessageTemplate::ProjectPullRequest.get_message_content(User.where(login: 'yystopf'), User.where(login: 'testforge2'), User.last, PullRequest.last) + def self.get_message_content(managers, followers, operator, pull_request) + project = pull_request&.project + owner = project&.owner + receivers = managers + followers + content = sys_notice.gsub('{nickname1}', operator&.real_name).gsub('{nickname2}', owner&.real_name).gsub('{repository}', project&.name).gsub('{title}', pull_request&.title) + url = notification_url.gsub('{owner}', owner&.login).gsub('{identifier}', project&.identifier).gsub('{id}', pull_request&.id.to_s) + return receivers_string(receivers), content, url rescue => e Rails.logger.info("MessageTemplate::ProjectPullRequest.get_message_content [ERROR] #{e}") diff --git a/app/models/message_template/project_setting_changed.rb b/app/models/message_template/project_setting_changed.rb index 8c272f65d..f973f99d5 100644 --- a/app/models/message_template/project_setting_changed.rb +++ b/app/models/message_template/project_setting_changed.rb @@ -18,11 +18,16 @@ class MessageTemplate::ProjectSettingChanged < MessageTemplate def self.get_message_content(receivers, operator, project, change_params) return '', '', '' if change_params.blank? owner = project&.owner - content = sys_notice.gsub('{nickname1}', operator&.nickname).gsub('{nickname2}', owner&.nickname).gsub('{repository}', project&.name) + content = sys_notice.gsub('{nickname1}', operator&.real_name).gsub('{nickname2}', owner&.real_name).gsub('{repository}', project&.name) url = notification_url.gsub('{owner}', owner&.login).gsub('{identifier}', project&.identifier) + change_count = change_params.keys.size # 项目名称更改 if change_params[:name].present? - content.sub!('{ifname}', '') + if change_count > 1 + content.sub!('{ifname}', '
    ') + else + content.sub!('{ifname}', '') + end content.sub!('{endname}', '') content.gsub!('{name}', change_params[:name][1]) else @@ -30,7 +35,11 @@ class MessageTemplate::ProjectSettingChanged < MessageTemplate end # 项目简介更改 if change_params[:description].present? - content.sub!('{ifdescription}', '') + if change_count > 1 + content.sub!('{ifdescription}', '
    ') + else + content.sub!('{ifdescription}', '') + end content.sub!('{enddescription}', '') content.gsub!('{description}', change_params[:description][1]) else @@ -39,7 +48,11 @@ class MessageTemplate::ProjectSettingChanged < MessageTemplate # 项目类别更改 if change_params[:project_category_id].present? category = ProjectCategory.find_by_id(change_params[:project_category_id][1]) - content.sub!('{ifcategory}', '') + if change_count > 1 + content.sub!('{ifcategory}', '
    ') + else + content.sub!('{ifcategory}', '') + end content.sub!('{endcategory}', '') content.gsub!('{category}', category&.name) else @@ -48,7 +61,11 @@ class MessageTemplate::ProjectSettingChanged < MessageTemplate # 项目语言更改 if change_params[:project_language_id].present? language = ProjectLanguage.find_by_id(change_params[:project_language_id][1]) - content.sub!('{iflanguage}', '') + if change_count > 1 + content.sub!('{iflanguage}', '
    ') + else + content.sub!('{iflanguage}', '') + end content.sub!('{endlanguage}', '') content.gsub!('{language}', language&.name) else @@ -57,7 +74,11 @@ class MessageTemplate::ProjectSettingChanged < MessageTemplate # 项目公私有更改 if change_params[:is_public].present? permission = change_params[:is_public][1] ? '公有' : '私有' - content.sub!('{ifpermission}', '') + if change_count > 1 + content.sub!('{ifpermission}', '
    ') + else + content.sub!('{ifpermission}', '') + end content.sub!('{endpermission}', '') content.gsub!('{permission}', permission) else @@ -73,16 +94,20 @@ class MessageTemplate::ProjectSettingChanged < MessageTemplate navbar.gsub!('devops', '工作流') navbar.gsub!('versions', '里程碑') navbar.gsub!('resources', '资源库') - content.sub!('{ifnavbar}', '') + if change_count > 1 + content.sub!('{ifnavbar}', '
    ') + else + content.sub!('{ifnavbar}', '') + end content.sub!('{endnavbar}', '') content.gsub!('{navbar}', navbar) else content.gsub!(/({ifnavbar})(.*)({endnavbar})/, '') end - return receivers_string(receivers.where.not(id: operator.id)), content, url - # rescue => e - # Rails.logger.info("MessageTemplate::ProjectSettingChanged.get_message_content [ERROR] #{e}") - # return '', '', '' + return receivers_string(receivers), content, url + rescue => e + Rails.logger.info("MessageTemplate::ProjectSettingChanged.get_message_content [ERROR] #{e}") + return '', '', '' end end diff --git a/app/models/message_template/pull_request_assigned.rb b/app/models/message_template/pull_request_assigned.rb index 132a36154..5b3e6538d 100644 --- a/app/models/message_template/pull_request_assigned.rb +++ b/app/models/message_template/pull_request_assigned.rb @@ -18,7 +18,7 @@ class MessageTemplate::PullRequestAssigned < MessageTemplate def self.get_message_content(receivers, operator, pull_request) project = pull_request&.project owner = project&.owner - content = sys_notice.gsub('{nickname1}', operator&.nickname).gsub('{nickname2}', owner&.nickname).gsub('{repository}', project&.name).gsub('{title}', pull_request&.title) + content = sys_notice.gsub('{nickname1}', operator&.real_name).gsub('{nickname2}', owner&.real_name).gsub('{repository}', project&.name).gsub('{title}', pull_request&.title) url = notification_url.gsub('{owner}', owner&.login).gsub('{identifier}', project&.identifier).gsub('{id}', pull_request&.id.to_s) return receivers_string(receivers), content, url rescue => e diff --git a/app/models/message_template/pull_request_atme.rb b/app/models/message_template/pull_request_atme.rb index d940b2358..b9764e2be 100644 --- a/app/models/message_template/pull_request_atme.rb +++ b/app/models/message_template/pull_request_atme.rb @@ -17,7 +17,7 @@ class MessageTemplate::PullRequestAtme < MessageTemplate def self.get_message_content(receivers, operator, pull_request) project = pull_request&.project owner = project&.owner - content = sys_notice.gsub('{nickname}', operator&.nickname).gsub('{title}', pull_request&.title) + content = sys_notice.gsub('{nickname}', operator&.real_name).gsub('{title}', pull_request&.title) url = notification_url.gsub('{owner}', owner&.login).gsub('{identifier}', project&.identifier).gsub('{id}', pull_request&.id.to_s) return receivers_string(receivers), content, url rescue => e diff --git a/app/models/message_template/pull_request_changed.rb b/app/models/message_template/pull_request_changed.rb index 6107a9691..1f34f2d0e 100644 --- a/app/models/message_template/pull_request_changed.rb +++ b/app/models/message_template/pull_request_changed.rb @@ -20,16 +20,21 @@ class MessageTemplate::PullRequestChanged < MessageTemplate project = pull_request&.project owner = project&.owner issue = pull_request&.issue - content = sys_notice.gsub('{nickname1}', operator&.nickname).gsub('{nickname2}', owner&.nickname).gsub('{repository}', project&.name).gsub("{title}", pull_request&.title) + content = sys_notice.gsub('{nickname1}', operator&.real_name).gsub('{nickname2}', owner&.real_name).gsub('{repository}', project&.name).gsub("{title}", pull_request&.title) url = notification_url.gsub('{owner}', owner&.login).gsub('{identifier}', project&.identifier).gsub('{id}', pull_request&.id.to_s) + change_count = change_params.keys.size # 合并请求审查成员修改 if change_params[:assigned_to_id].present? assigner1 = User.find_by_id(change_params[:assigned_to_id][0]) assigner2 = User.find_by_id(change_params[:assigned_to_id][1]) - content.sub!('{ifassigner}', '') + if change_count > 1 + content.sub!('{ifassigner}', '
    ') + else + content.sub!('{ifassigner}', '') + end content.sub!('{endassigner}', '') - content.gsub!('{assigner1}', assigner1.present? ? assigner1&.nickname || assigner1.login : '未指派成员') - content.gsub!('{assigner2}', assigner2.present? ? assigner2&.nickname || assigner2.login : '未指派成员') + content.gsub!('{assigner1}', assigner1.present? ? assigner1&.real_name : '未指派成员') + content.gsub!('{assigner2}', assigner2.present? ? assigner2&.real_name : '未指派成员') else content.gsub!(/({ifassigner})(.*)({endassigner})/, '') end @@ -37,7 +42,11 @@ class MessageTemplate::PullRequestChanged < MessageTemplate if change_params[:fixed_version_id].present? fix_version1 = Version.find_by_id(change_params[:fixed_version_id][0]) fix_version2 = Version.find_by_id(change_params[:fixed_version_id][1]) - content.sub!('{ifmilestone}', '') + if change_count > 1 + content.sub!('{ifmilestone}', '
    ') + else + content.sub!('{ifmilestone}', '') + end content.sub!('{endmilestone}', '') content.gsub!('{milestone1}', fix_version1.present? ? fix_version1&.name : '未选择里程碑') content.gsub!('{milestone2}', fix_version2.present? ? fix_version2&.name : '未选择里程碑') @@ -50,7 +59,11 @@ class MessageTemplate::PullRequestChanged < MessageTemplate issue_tags2 = IssueTag.where(id: change_params[:issue_tags_value][1]).distinct tag1 = issue_tags1.pluck(:name).join(",").blank? ? '未选择标签' : issue_tags1.pluck(:name).join(",") tag2 = issue_tags2.pluck(:name).join(",").blank? ? '未选择标签' : issue_tags2.pluck(:name).join(",") - content.sub!('{iftag}', '') + if change_count > 1 + content.sub!('{iftag}', '
    ') + else + content.sub!('{iftag}', '') + end content.sub!('{endtag}', '') content.gsub!('{tag1}', tag1) content.gsub!('{tag2}', tag2) @@ -61,6 +74,11 @@ class MessageTemplate::PullRequestChanged < MessageTemplate if change_params[:priority_id].present? priority1 = IssuePriority.find_by_id(change_params[:priority_id][0]) priority2 = IssuePriority.find_by_id(change_params[:priority_id][1]) + if change_count > 1 + content.sub!('{ifpriority}', '
    ') + else + content.sub!('{ifpriority}', '') + end content.sub!('{ifpriority}', '') content.sub!('{endpriority}', '') content.gsub!('{priority1}', priority1&.name) diff --git a/app/services/projects/accept_join_service.rb b/app/services/projects/accept_join_service.rb index 69cb97603..b1a996fd8 100644 --- a/app/services/projects/accept_join_service.rb +++ b/app/services/projects/accept_join_service.rb @@ -53,6 +53,8 @@ class Projects::AcceptJoinService < ApplicationService def operate_project_member Projects::AddMemberInteractor.call(@project.owner, @project, @applied_project.user, permission) + SendTemplateMessageJob.perform_later('ProjectJoined', @user.id, @applied_project.user_id, @project.id) + SendTemplateMessageJob.perform_later('ProjectMemberJoined', @user.id, @applied_project.user_id, @project.id) end def send_apply_message From a1679cfc53c3ddcdca9c296e28effcdec23abbd4 Mon Sep 17 00:00:00 2001 From: yystopf Date: Thu, 16 Sep 2021 17:29:07 +0800 Subject: [PATCH 17/38] fix some template and add copy issue message --- app/controllers/issues_controller.rb | 2 ++ app/models/message_template.rb | 6 +++--- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/app/controllers/issues_controller.rb b/app/controllers/issues_controller.rb index 208e68a47..118e80100 100644 --- a/app/controllers/issues_controller.rb +++ b/app/controllers/issues_controller.rb @@ -353,6 +353,8 @@ class IssuesController < ApplicationController @new_issue = @issue.dup @new_issue.author_id = current_user.id if @new_issue.save + SendTemplateMessageJob.perform_later('IssueAssigned', current_user.id, @new_issue&.id) + SendTemplateMessageJob.perform_later('ProjectIssue', current_user.id, @new_issue&.id) issue_tags = @issue.issue_tags.pluck(:id) if issue_tags.present? issue_tags.each do |tag| diff --git a/app/models/message_template.rb b/app/models/message_template.rb index 42aa64a44..593369c57 100644 --- a/app/models/message_template.rb +++ b/app/models/message_template.rb @@ -18,7 +18,7 @@ class MessageTemplate {nickname2}/{repository}
    指派给你一个易修:{title}', notification_url: '{baseurl}/{owner}/{identifier}/issues/{id}') self.create(type: 'MessageTemplate::IssueAssignerExpire', sys_notice: '您负责的易修{title}已临近截止日期,请尽快处理', notification_url: '{baseurl}/{owner}/{identifier}/issues/{id}') self.create(type: 'MessageTemplate::IssueAtme', sys_notice: '{nickname}在易修{title}中@我', notification_url: '{baseurl}/{owner}/{identifier}/issues/{id}') - self.create(type: 'MessageTemplate::IssueChanged', sys_notice: '在项目{nickname2}/{repository}的易修{title}中:{ifassigner}{nickname1}将负责人从{assigner1}修改为{assigner2}{endassigner}{ifstatus}{nickname1}将状态从{status1}修改为{status2}{endstatus}{iftracker}{nickname1}将类型从{tracker1}修改为{tracker2}{endtracker}{ifpriority}{nickname1}将优先级从{priority1}修改为{priority2}{endpriority}{ifmilestone}{nickname1}将里程碑从{milestone1}修改为{milestone2}{endmilestone}{iftag}{nickname1}将标签从{tag1}修改为{tag2}{endtag}{ifdoneratio}{nickname1}将完成度从{doneratio1}修改为{doneratio2}{enddoneratio}{ifbranch}{nickname1}将指定分支从{branch1}修改为{branch2}{endbranch}{ifstartdate}{nickname1}将开始日期从{startdate1}修改为{startdate2}{endstartdate}{ifduedate}{nickname1}将结束日期从{duedate1}修改为{duedate2}{endduedate}', notification_url: '{baseurl}/{owner}/{identifier}/issues/{id}') + self.create(type: 'MessageTemplate::IssueChanged', sys_notice: '在项目{nickname2}/{repository}的易修{title}中:{ifassigner}{nickname1}将负责人从{assigner1}修改为{assigner2}{endassigner}{ifstatus}{nickname1}将状态从{status1}修改为{status2}{endstatus}{iftracker}{nickname1}将类型从{tracker1}修改为{tracker2}{endtracker}{ifpriority}{nickname1}将优先级从{priority1}修改为{priority2}{endpriority}{ifmilestone}{nickname1}将里程碑从{milestone1}修改为{milestone2}{endmilestone}{iftag}{nickname1}将标记从{tag1}修改为{tag2}{endtag}{ifdoneratio}{nickname1}将完成度从{doneratio1}修改为{doneratio2}{enddoneratio}{ifbranch}{nickname1}将指定分支从{branch1}修改为{branch2}{endbranch}{ifstartdate}{nickname1}将开始日期从{startdate1}修改为{startdate2}{endstartdate}{ifduedate}{nickname1}将结束日期从{duedate1}修改为{duedate2}{endduedate}', notification_url: '{baseurl}/{owner}/{identifier}/issues/{id}') self.create(type: 'MessageTemplate::IssueCreatorExpire', sys_notice: '您发布的易修{title}已临近截止日期,请尽快处理', notification_url: '{baseurl}/{owner}/{identifier}/issues/{id}') self.create(type: 'MessageTemplate::IssueDeleted', sys_notice: '{nickname}已将易修{title}删除', notification_url: '') self.create(type: 'MessageTemplate::IssueJournal', sys_notice: '{nickname}评论易修{title}:{notes}', notification_url: '{baseurl}/{owner}/{identifier}/issues/{id}') @@ -38,12 +38,12 @@ class MessageTemplate {nickname}点赞了你管理的仓库', notification_url: '{baseurl}/{login}') self.create(type: 'MessageTemplate::ProjectPullRequest', sys_notice: '{nickname1}在{nickname2}/{repository}提交了一个合并请求:{title}', notification_url: '{baseurl}/{owner}/{identifier}/pulls/{id}/Messagecount') self.create(type: 'MessageTemplate::ProjectRole', sys_notice: '仓库{repository}已把你的角色改为{role}', notification_url: '{baseurl}/{owner}/{identifier}') - self.create(type: 'MessageTemplate::ProjectSettingChanged', sys_notice: '{nickname1}更改了{nickname2}/{repository}仓库设置:{ifname}更改项目名称为"{name}"{endname}{ifdescription}更改项目简介为"{description}"{enddescription}{ifcategory}更改项目类别为"{category}"{endcategory}{iflanguage}更改项目语言为"{language}"{endlanguage}{ifpermission}将仓库设为"{permission}"{endpermission}{ifnavbar}将项目导航更改为"{navbar}"{endnavbar}', notification_url: '{baseurl}/{owner}/{identifier}/settings') + self.create(type: 'MessageTemplate::ProjectSettingChanged', sys_notice: '{nickname1}更改了{nickname2}/{repository}仓库设置:{ifname}更改项目名称为"{name}"{endname}{ifdescription}更改项目简介为"{description}"{enddescription}{ifcategory}更改项目类别为"{category}"{endcategory}{iflanguage}更改项目语言为"{language}"{endlanguage}{ifpermission}将仓库设为"{permission}"{endpermission}{ifnavbar}将项目导航更改为"{navbar}"{endnavbar}', notification_url: '{baseurl}/{owner}/{identifier}/settings') self.create(type: 'MessageTemplate::ProjectTransfer', sys_notice: '你关注的仓库{nickname1}/{repository1}已被转移至{nickname2}/{repository2}', notification_url: '{baseurl}/{owner}/{identifier}') self.create(type: 'MessageTemplate::ProjectVersion', sys_notice: '{nickname1}在{nickname2}/{repository}创建了发行版:{title}', notification_url: '{baseurl}/{owner}/{identifier}/releases') self.create(type: 'MessageTemplate::PullRequestAssigned', sys_notice: '{nickname1}在{nickname2}/{repository}指派给你一个合并请求:{title}', notification_url: '{baseurl}/{owner}/{identifier}/pulls/{id}/Messagecount') self.create(type: 'MessageTemplate::PullRequestAtme', sys_notice: '{nickname}在合并请求{title}中@我', notification_url: '{baseurl}/{owner}/{identifier}/pulls/{id}/Messagecount') - self.create(type: 'MessageTemplate::PullRequestChanged', sys_notice: '在项目{nickname2}/{repository}的合并请求{title}中:{ifassigner}{nickname1}将审查成员从{assigner1}修改为{assigner2}{endassigner}{ifmilestone}{nickname1}将里程碑从{milestone1}修改为{milestone2}{endmilestone}{iftag}{nickname1}将标签从{tag1}修改为{tag2}{endtag}{ifpriority}{nickname1}将优先级从{priority1}修改为{priority2}{endpriority}', notification_url: '{baseurl}/{owner}/{identifier}/pulls/{id}/Messagecount') + self.create(type: 'MessageTemplate::PullRequestChanged', sys_notice: '在项目{nickname2}/{repository}的合并请求{title}中:{ifassigner}{nickname1}将审查成员从{assigner1}修改为{assigner2}{endassigner}{ifmilestone}{nickname1}将里程碑从{milestone1}修改为{milestone2}{endmilestone}{iftag}{nickname1}将标记从{tag1}修改为{tag2}{endtag}{ifpriority}{nickname1}将优先级从{priority1}修改为{priority2}{endpriority}', notification_url: '{baseurl}/{owner}/{identifier}/pulls/{id}/Messagecount') self.create(type: 'MessageTemplate::PullRequestClosed', sys_notice: '你提交的合并请求:{title}被拒绝', notification_url: '') self.create(type: 'MessageTemplate::PullRequestJournal', sys_notice: '{nickname}评论合并请求{title}:{notes}', notification_url: '{baseurl}/{owner}/{identifier}/pulls/{id}/Messagecount') self.create(type: 'MessageTemplate::PullRequestMerged', sys_notice: '你提交的合并请求:{title}被合并', notification_url: '{baseurl}/{owner}/{identifier}/pulls/{id}/Messagecount') From 41d04e9e9947bb650ddff051761031cc1304fafc Mon Sep 17 00:00:00 2001 From: yystopf Date: Thu, 16 Sep 2021 18:39:19 +0800 Subject: [PATCH 18/38] =?UTF-8?q?fix:=20=E6=A0=87=E7=AD=BE=E6=94=B9?= =?UTF-8?q?=E4=B8=BA=E6=A0=87=E8=AE=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/issues_controller.rb | 1 + app/controllers/pull_requests_controller.rb | 3 ++- config/locales/zh-CN.yml | 4 ++-- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/app/controllers/issues_controller.rb b/app/controllers/issues_controller.rb index 266d746d7..bbde2ecb3 100644 --- a/app/controllers/issues_controller.rb +++ b/app/controllers/issues_controller.rb @@ -158,6 +158,7 @@ class IssuesController < ApplicationController def update last_token = @issue.token last_status_id = @issue.status_id + @issue&.issue_tags_relates&.destroy_all if params[:issue_tag_ids].blank? if params[:issue_tag_ids].present? && !@issue&.issue_tags_relates.where(issue_tag_id: params[:issue_tag_ids]).exists? @issue&.issue_tags_relates&.destroy_all params[:issue_tag_ids].each do |tag| diff --git a/app/controllers/pull_requests_controller.rb b/app/controllers/pull_requests_controller.rb index 79221a665..7950d343d 100644 --- a/app/controllers/pull_requests_controller.rb +++ b/app/controllers/pull_requests_controller.rb @@ -77,12 +77,13 @@ class PullRequestsController < ApplicationController if params[:title].nil? normal_status(-1, "名称不能为空") elsif params[:issue_tag_ids].nil? - normal_status(-1, "标签不能为空") + normal_status(-1, "标记不能为空") else ActiveRecord::Base.transaction do begin merge_params + @issue&.issue_tags_relates&.destroy_all if params[:issue_tag_ids].blank? if params[:issue_tag_ids].present? && !@issue&.issue_tags_relates.where(issue_tag_id: params[:issue_tag_ids]).exists? @issue&.issue_tags_relates&.destroy_all params[:issue_tag_ids].each do |tag| diff --git a/config/locales/zh-CN.yml b/config/locales/zh-CN.yml index db1030163..f6f478625 100644 --- a/config/locales/zh-CN.yml +++ b/config/locales/zh-CN.yml @@ -31,7 +31,7 @@ zh-CN: branch_name: 分支 close_pr: 合并 merge: 合并 - issue_tags_value: 标签 + issue_tags_value: 标记 lock_issue: 锁定工单 unlock_issue: 解锁工单 destroy_issue_depend: 删除依赖 @@ -55,7 +55,7 @@ zh-CN: f: 否 true: 是 false: 否 - issue_tag_ids: 标签 + issue_tag_ids: 标记 issue_type: 分类 token: 悬赏金额 close_issue: 工单 From a5861ce1d69e9e1306c157463dd91ca9ff4e749a Mon Sep 17 00:00:00 2001 From: yystopf Date: Fri, 17 Sep 2021 09:38:31 +0800 Subject: [PATCH 19/38] =?UTF-8?q?fix:=20=E9=A1=B9=E7=9B=AE=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E7=AE=80=E4=BB=8B=E3=80=81=E8=AF=AD=E8=A8=80=E3=80=81?= =?UTF-8?q?=E5=88=86=E7=B1=BB=E5=8F=AF=E4=BB=A5=E4=B8=BA=E7=A9=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/forms/base_form.rb | 4 ++-- app/forms/projects/update_form.rb | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/forms/base_form.rb b/app/forms/base_form.rb index c41a12993..c5776048e 100644 --- a/app/forms/base_form.rb +++ b/app/forms/base_form.rb @@ -2,11 +2,11 @@ class BaseForm include ActiveModel::Model def check_project_category(project_category_id) - raise "project_category_id参数值无效." if project_category_id && !ProjectCategory.exists?(project_category_id) + raise "project_category_id参数值无效." unless project_category_id == '' && (project_category_id && !ProjectCategory.exists?(project_category_id)) end def check_project_language(project_language_id) - raise "project_language_id参数值无效." if project_language_id && !ProjectLanguage.exists?(project_language_id) + raise "project_language_id参数值无效." unless project_language_id == '' && (project_language_id && !ProjectLanguage.exists?(project_language_id)) end def check_repository_name(user_id, repository_name) diff --git a/app/forms/projects/update_form.rb b/app/forms/projects/update_form.rb index 65810a820..0cd2c9459 100644 --- a/app/forms/projects/update_form.rb +++ b/app/forms/projects/update_form.rb @@ -1,6 +1,6 @@ class Projects::UpdateForm < BaseForm attr_accessor :name, :description, :project_category_id, :project_language_id, :private - validates :name, :description, :project_category_id, :project_language_id, presence: true + validates :name, presence: true validates :name, length: { maximum: 50 } validates :description, length: { maximum: 200 } validate do From 08de4819d73fda835dae5600b015529fd0d9069b Mon Sep 17 00:00:00 2001 From: yystopf Date: Fri, 17 Sep 2021 09:44:17 +0800 Subject: [PATCH 20/38] fix: bold messsage some content --- app/models/message_template.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/models/message_template.rb b/app/models/message_template.rb index 593369c57..a69c839d2 100644 --- a/app/models/message_template.rb +++ b/app/models/message_template.rb @@ -18,7 +18,7 @@ class MessageTemplate {nickname2}/{repository}指派给你一个易修:{title}', notification_url: '{baseurl}/{owner}/{identifier}/issues/{id}') self.create(type: 'MessageTemplate::IssueAssignerExpire', sys_notice: '您负责的易修{title}已临近截止日期,请尽快处理', notification_url: '{baseurl}/{owner}/{identifier}/issues/{id}') self.create(type: 'MessageTemplate::IssueAtme', sys_notice: '{nickname}在易修{title}中@我', notification_url: '{baseurl}/{owner}/{identifier}/issues/{id}') - self.create(type: 'MessageTemplate::IssueChanged', sys_notice: '在项目{nickname2}/{repository}的易修{title}中:{ifassigner}{nickname1}将负责人从{assigner1}修改为{assigner2}{endassigner}{ifstatus}{nickname1}将状态从{status1}修改为{status2}{endstatus}{iftracker}{nickname1}将类型从{tracker1}修改为{tracker2}{endtracker}{ifpriority}{nickname1}将优先级从{priority1}修改为{priority2}{endpriority}{ifmilestone}{nickname1}将里程碑从{milestone1}修改为{milestone2}{endmilestone}{iftag}{nickname1}将标记从{tag1}修改为{tag2}{endtag}{ifdoneratio}{nickname1}将完成度从{doneratio1}修改为{doneratio2}{enddoneratio}{ifbranch}{nickname1}将指定分支从{branch1}修改为{branch2}{endbranch}{ifstartdate}{nickname1}将开始日期从{startdate1}修改为{startdate2}{endstartdate}{ifduedate}{nickname1}将结束日期从{duedate1}修改为{duedate2}{endduedate}', notification_url: '{baseurl}/{owner}/{identifier}/issues/{id}') + self.create(type: 'MessageTemplate::IssueChanged', sys_notice: '在项目{nickname2}/{repository}的易修{title}中:{ifassigner}{nickname1}将负责人从{assigner1}修改为{assigner2}{endassigner}{ifstatus}{nickname1}将状态从{status1}修改为{status2}{endstatus}{iftracker}{nickname1}将类型从{tracker1}修改为{tracker2}{endtracker}{ifpriority}{nickname1}将优先级从{priority1}修改为{priority2}{endpriority}{ifmilestone}{nickname1}将里程碑从{milestone1}修改为{milestone2}{endmilestone}{iftag}{nickname1}将标记从{tag1}修改为{tag2}{endtag}{ifdoneratio}{nickname1}将完成度从{doneratio1}修改为{doneratio2}{enddoneratio}{ifbranch}{nickname1}将指定分支从{branch1}修改为{branch2}{endbranch}{ifstartdate}{nickname1}将开始日期从{startdate1}修改为{startdate2}{endstartdate}{ifduedate}{nickname1}将结束日期从{duedate1}修改为{duedate2}{endduedate}', notification_url: '{baseurl}/{owner}/{identifier}/issues/{id}') self.create(type: 'MessageTemplate::IssueCreatorExpire', sys_notice: '您发布的易修{title}已临近截止日期,请尽快处理', notification_url: '{baseurl}/{owner}/{identifier}/issues/{id}') self.create(type: 'MessageTemplate::IssueDeleted', sys_notice: '{nickname}已将易修{title}删除', notification_url: '') self.create(type: 'MessageTemplate::IssueJournal', sys_notice: '{nickname}评论易修{title}:{notes}', notification_url: '{baseurl}/{owner}/{identifier}/issues/{id}') From 76268c4952a03a4c0424261703ad06ec2f2b1534 Mon Sep 17 00:00:00 2001 From: yystopf Date: Fri, 17 Sep 2021 10:02:42 +0800 Subject: [PATCH 21/38] fix --- app/forms/base_form.rb | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/app/forms/base_form.rb b/app/forms/base_form.rb index c5776048e..71eaee174 100644 --- a/app/forms/base_form.rb +++ b/app/forms/base_form.rb @@ -2,11 +2,15 @@ class BaseForm include ActiveModel::Model def check_project_category(project_category_id) - raise "project_category_id参数值无效." unless project_category_id == '' && (project_category_id && !ProjectCategory.exists?(project_category_id)) + unless project_category_id == '' + raise "project_category_id参数值无效." if project_category_id && !ProjectCategory.exists?(project_category_id) + end end def check_project_language(project_language_id) - raise "project_language_id参数值无效." unless project_language_id == '' && (project_language_id && !ProjectLanguage.exists?(project_language_id)) + unless project_language_id == '' + raise "project_language_id参数值无效." if project_language_id && !ProjectLanguage.exists?(project_language_id) + end end def check_repository_name(user_id, repository_name) From 228becfe079e70d43ea8dc63875058ed592b7d8e Mon Sep 17 00:00:00 2001 From: yystopf Date: Fri, 17 Sep 2021 10:37:49 +0800 Subject: [PATCH 22/38] fix: some content for messages --- app/models/message_template.rb | 4 ++-- app/models/team.rb | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/models/message_template.rb b/app/models/message_template.rb index a69c839d2..db412920e 100644 --- a/app/models/message_template.rb +++ b/app/models/message_template.rb @@ -25,7 +25,7 @@ class MessageTemplate {organization}组织', notification_url: '{baseurl}/{login}') self.create(type: 'MessageTemplate::OrganizationLeft', sys_notice: '你已被移出{organization}组织', notification_url: '') - self.create(type: 'MessageTemplate::OrganizationRole', sys_notice: '组织{organization}已把你的角色改为{role}', notification_url: '{baseurl}/{login}') + self.create(type: 'MessageTemplate::OrganizationRole', sys_notice: '组织{organization}已把你的角色改为{role}', notification_url: '{baseurl}/{login}') self.create(type: 'MessageTemplate::ProjectDeleted', sys_notice: '你关注的仓库{nickname}/{repository}已被删除', notification_url: '') self.create(type: 'MessageTemplate::ProjectFollowed', sys_notice: '{nickname}关注了你管理的仓库', notification_url: '{baseurl}/{login}') self.create(type: 'MessageTemplate::ProjectForked', sys_notice: '{nickname1}复刻了你管理的仓库{nickname1}/{repository1}到{nickname2}/{repository2}', notification_url: '{baseurl}/{owner}/{identifier}') @@ -37,7 +37,7 @@ class MessageTemplate {nickname2}/{repository}创建了一个里程碑:{title}', notification_url: '{baseurl}/{owner}/{identifier}/milestones/{id}') self.create(type: 'MessageTemplate::ProjectPraised', sys_notice: '{nickname}点赞了你管理的仓库', notification_url: '{baseurl}/{login}') self.create(type: 'MessageTemplate::ProjectPullRequest', sys_notice: '{nickname1}在{nickname2}/{repository}提交了一个合并请求:{title}', notification_url: '{baseurl}/{owner}/{identifier}/pulls/{id}/Messagecount') - self.create(type: 'MessageTemplate::ProjectRole', sys_notice: '仓库{repository}已把你的角色改为{role}', notification_url: '{baseurl}/{owner}/{identifier}') + self.create(type: 'MessageTemplate::ProjectRole', sys_notice: '仓库{repository}已把你的角色改为{role}', notification_url: '{baseurl}/{owner}/{identifier}') self.create(type: 'MessageTemplate::ProjectSettingChanged', sys_notice: '{nickname1}更改了{nickname2}/{repository}仓库设置:{ifname}更改项目名称为"{name}"{endname}{ifdescription}更改项目简介为"{description}"{enddescription}{ifcategory}更改项目类别为"{category}"{endcategory}{iflanguage}更改项目语言为"{language}"{endlanguage}{ifpermission}将仓库设为"{permission}"{endpermission}{ifnavbar}将项目导航更改为"{navbar}"{endnavbar}', notification_url: '{baseurl}/{owner}/{identifier}/settings') self.create(type: 'MessageTemplate::ProjectTransfer', sys_notice: '你关注的仓库{nickname1}/{repository1}已被转移至{nickname2}/{repository2}', notification_url: '{baseurl}/{owner}/{identifier}') self.create(type: 'MessageTemplate::ProjectVersion', sys_notice: '{nickname1}在{nickname2}/{repository}创建了发行版:{title}', notification_url: '{baseurl}/{owner}/{identifier}/releases') diff --git a/app/models/team.rb b/app/models/team.rb index 481e8c340..19d05c77a 100644 --- a/app/models/team.rb +++ b/app/models/team.rb @@ -59,7 +59,7 @@ class Team < ApplicationRecord when 'read' then '报告者' when 'write' then '开发者' when 'admin' then '管理员' - when 'owner' then '管理员' + when 'owner' then '拥有者' else '' end From 18b0c760827cf4292c865c1cef0d97933239a9d9 Mon Sep 17 00:00:00 2001 From: yystopf Date: Fri, 17 Sep 2021 14:15:38 +0800 Subject: [PATCH 23/38] fix --- app/controllers/pull_requests_controller.rb | 4 +- app/jobs/send_template_message_job.rb | 10 ++-- app/models/message_template.rb | 2 +- .../project_setting_changed.rb | 56 +++++++++++++------ 4 files changed, 49 insertions(+), 23 deletions(-) diff --git a/app/controllers/pull_requests_controller.rb b/app/controllers/pull_requests_controller.rb index fe1edab5f..c48e12a82 100644 --- a/app/controllers/pull_requests_controller.rb +++ b/app/controllers/pull_requests_controller.rb @@ -93,8 +93,6 @@ class PullRequestsController < ApplicationController end if @issue.update_attributes(@issue_params) - SendTemplateMessageJob.perform_later('PullRequestChanged', current_user.id, @pull_request&.id, @issue.previous_changes.slice(:assigned_to_id, :priority_id, :fixed_version_id, :issue_tags_value)) - SendTemplateMessageJob.perform_later('PullRequestAssigned', current_user.id, @pull_request&.id ) if @issue.previous_changes[:assigned_to_id].present? if @pull_request.update_attributes(@local_params.compact) gitea_pull = Gitea::PullRequest::UpdateService.call(@owner.login, @repository.identifier, @pull_request.gitea_number, @requests_params, current_user.gitea_token) @@ -120,6 +118,8 @@ class PullRequestsController < ApplicationController normal_status(-1, e.message) raise ActiveRecord::Rollback end + SendTemplateMessageJob.perform_later('PullRequestChanged', current_user.id, @pull_request&.id, @issue.previous_changes.slice(:assigned_to_id, :priority_id, :fixed_version_id, :issue_tags_value)) + SendTemplateMessageJob.perform_later('PullRequestAssigned', current_user.id, @pull_request&.id ) if @issue.previous_changes[:assigned_to_id].present? end end diff --git a/app/jobs/send_template_message_job.rb b/app/jobs/send_template_message_job.rb index d35938063..ac5e956a4 100644 --- a/app/jobs/send_template_message_job.rb +++ b/app/jobs/send_template_message_job.rb @@ -156,8 +156,9 @@ class SendTemplateMessageJob < ApplicationJob operator_id, pull_request_id = args[0], args[1] operator = User.find_by_id(operator_id) pull_request = PullRequest.find_by_id(pull_request_id) - return unless operator.present? && pull_request.present? - receivers = User.where(id: pull_request&.issue&.assigned_to_id).where.not(id: operator&.id) + issue = Issue.find_by_id(pull_request&.issue_id) + return unless operator.present? && pull_request.present? && issue.present? + receivers = User.where(id: issue&.assigned_to_id).where.not(id: operator&.id) receivers_string, content, notification_url = MessageTemplate::PullRequestAssigned.get_message_content(receivers, operator, pull_request) Notice::Write::CreateService.call(receivers_string, content, notification_url, source, {operator_id: operator.id, pull_request_id: pull_request.id}) when 'PullRequestAtme' @@ -172,8 +173,9 @@ class SendTemplateMessageJob < ApplicationJob operator_id, pull_request_id, change_params = args[0], args[1], args[2] operator = User.find_by_id(operator_id) pull_request = PullRequest.find_by_id(pull_request_id) - return unless operator.present? && pull_request.present? - receivers = User.where(id: [pull_request&.issue&.assigned_to_id, pull_request&.user_id]).where.not(id: operator&.id) + issue = Issue.find_by_id(pull_request&.issue_id) + return unless operator.present? && pull_request.present? && issue.present? + receivers = User.where(id: [issue&.assigned_to_id, pull_request&.user_id]).where.not(id: operator&.id) receivers_string, content, notification_url = MessageTemplate::PullRequestChanged.get_message_content(receivers, operator, pull_request, change_params.symbolize_keys) Notice::Write::CreateService.call(receivers_string, content, notification_url, source, {operator_id: operator.id, pull_request_id: pull_request.id, change_params: change_params}) when 'PullRequestClosed' diff --git a/app/models/message_template.rb b/app/models/message_template.rb index db412920e..6a3aebf62 100644 --- a/app/models/message_template.rb +++ b/app/models/message_template.rb @@ -46,7 +46,7 @@ class MessageTemplate {title}中:{ifassigner}{nickname1}将审查成员从{assigner1}修改为{assigner2}{endassigner}{ifmilestone}{nickname1}将里程碑从{milestone1}修改为{milestone2}{endmilestone}{iftag}{nickname1}将标记从{tag1}修改为{tag2}{endtag}{ifpriority}{nickname1}将优先级从{priority1}修改为{priority2}{endpriority}', notification_url: '{baseurl}/{owner}/{identifier}/pulls/{id}/Messagecount') self.create(type: 'MessageTemplate::PullRequestClosed', sys_notice: '你提交的合并请求:{title}被拒绝', notification_url: '') self.create(type: 'MessageTemplate::PullRequestJournal', sys_notice: '{nickname}评论合并请求{title}:{notes}', notification_url: '{baseurl}/{owner}/{identifier}/pulls/{id}/Messagecount') - self.create(type: 'MessageTemplate::PullRequestMerged', sys_notice: '你提交的合并请求:{title}被合并', notification_url: '{baseurl}/{owner}/{identifier}/pulls/{id}/Messagecount') + self.create(type: 'MessageTemplate::PullRequestMerged', sys_notice: '你提交的合并请求:{title}已通过', notification_url: '{baseurl}/{owner}/{identifier}/pulls/{id}/Messagecount') end def self.sys_notice diff --git a/app/models/message_template/project_setting_changed.rb b/app/models/message_template/project_setting_changed.rb index f973f99d5..9510fa581 100644 --- a/app/models/message_template/project_setting_changed.rb +++ b/app/models/message_template/project_setting_changed.rb @@ -35,39 +35,63 @@ class MessageTemplate::ProjectSettingChanged < MessageTemplate end # 项目简介更改 if change_params[:description].present? - if change_count > 1 - content.sub!('{ifdescription}', '
    ') + if change_params[:description][1].blank? + if change_count > 1 + content.gsub!(/({ifdescription})(.*)({enddescription})/, '
    删除了项目简介') + else + content.gsub!(/({ifdescription})(.*)({enddescription})/, '删除了项目简介') + end else - content.sub!('{ifdescription}', '') + if change_count > 1 + content.sub!('{ifdescription}', '
    ') + else + content.sub!('{ifdescription}', '') + end + content.sub!('{enddescription}', '') + content.gsub!('{description}', change_params[:description][1]) end - content.sub!('{enddescription}', '') - content.gsub!('{description}', change_params[:description][1]) else content.gsub!(/({ifdescription})(.*)({enddescription})/, '') end # 项目类别更改 if change_params[:project_category_id].present? category = ProjectCategory.find_by_id(change_params[:project_category_id][1]) - if change_count > 1 - content.sub!('{ifcategory}', '
    ') - else - content.sub!('{ifcategory}', '') + if category.present? + if change_count > 1 + content.sub!('{ifcategory}', '
    ') + else + content.sub!('{ifcategory}', '') + end + content.sub!('{endcategory}', '') + content.gsub!('{category}', category&.name) + else + if change_count > 1 + content.gsub!(/({ifcategory})(.*)({endcategory})/, '
    删除了项目类别') + else + content.gsub!(/({ifcategory})(.*)({endcategory})/, '删除了项目类别') + end end - content.sub!('{endcategory}', '') - content.gsub!('{category}', category&.name) else content.gsub!(/({ifcategory})(.*)({endcategory})/, '') end # 项目语言更改 if change_params[:project_language_id].present? language = ProjectLanguage.find_by_id(change_params[:project_language_id][1]) - if change_count > 1 - content.sub!('{iflanguage}', '
    ') + if language.present? + if change_count > 1 + content.sub!('{iflanguage}', '
    ') + else + content.sub!('{iflanguage}', '') + end + content.sub!('{endlanguage}', '') + content.gsub!('{language}', language&.name) else - content.sub!('{iflanguage}', '') + if change_count > 1 + content.gsub!(/({iflanguage})(.*)({endlanguage})/, '
    删除了项目语言') + else + content.gsub!(/({iflanguage})(.*)({endlanguage})/, '删除了项目语言') + end end - content.sub!('{endlanguage}', '') - content.gsub!('{language}', language&.name) else content.gsub!(/({iflanguage})(.*)({endlanguage})/, '') end From 9a7a5ca3a1cb12bded7af608cf1bcdec017bd578 Mon Sep 17 00:00:00 2001 From: yystopf Date: Fri, 17 Sep 2021 14:48:00 +0800 Subject: [PATCH 24/38] fix: message content add space --- app/models/message_template.rb | 52 +++++++++---------- app/models/message_template/issue_changed.rb | 9 ++-- .../message_template/pull_request_changed.rb | 6 +-- 3 files changed, 34 insertions(+), 33 deletions(-) diff --git a/app/models/message_template.rb b/app/models/message_template.rb index 6a3aebf62..df4ed7829 100644 --- a/app/models/message_template.rb +++ b/app/models/message_template.rb @@ -14,36 +14,36 @@ class MessageTemplate {nickname}关注了你', notification_url: '{baseurl}/{login}') - self.create(type: 'MessageTemplate::IssueAssigned', sys_notice: '{nickname1}在{nickname2}/{repository}指派给你一个易修:{title}', notification_url: '{baseurl}/{owner}/{identifier}/issues/{id}') - self.create(type: 'MessageTemplate::IssueAssignerExpire', sys_notice: '您负责的易修{title}已临近截止日期,请尽快处理', notification_url: '{baseurl}/{owner}/{identifier}/issues/{id}') - self.create(type: 'MessageTemplate::IssueAtme', sys_notice: '{nickname}在易修{title}中@我', notification_url: '{baseurl}/{owner}/{identifier}/issues/{id}') - self.create(type: 'MessageTemplate::IssueChanged', sys_notice: '在项目{nickname2}/{repository}的易修{title}中:{ifassigner}{nickname1}将负责人从{assigner1}修改为{assigner2}{endassigner}{ifstatus}{nickname1}将状态从{status1}修改为{status2}{endstatus}{iftracker}{nickname1}将类型从{tracker1}修改为{tracker2}{endtracker}{ifpriority}{nickname1}将优先级从{priority1}修改为{priority2}{endpriority}{ifmilestone}{nickname1}将里程碑从{milestone1}修改为{milestone2}{endmilestone}{iftag}{nickname1}将标记从{tag1}修改为{tag2}{endtag}{ifdoneratio}{nickname1}将完成度从{doneratio1}修改为{doneratio2}{enddoneratio}{ifbranch}{nickname1}将指定分支从{branch1}修改为{branch2}{endbranch}{ifstartdate}{nickname1}将开始日期从{startdate1}修改为{startdate2}{endstartdate}{ifduedate}{nickname1}将结束日期从{duedate1}修改为{duedate2}{endduedate}', notification_url: '{baseurl}/{owner}/{identifier}/issues/{id}') - self.create(type: 'MessageTemplate::IssueCreatorExpire', sys_notice: '您发布的易修{title}已临近截止日期,请尽快处理', notification_url: '{baseurl}/{owner}/{identifier}/issues/{id}') - self.create(type: 'MessageTemplate::IssueDeleted', sys_notice: '{nickname}已将易修{title}删除', notification_url: '') + self.create(type: 'MessageTemplate::FollowedTip', sys_notice: '{nickname} 关注了你', notification_url: '{baseurl}/{login}') + self.create(type: 'MessageTemplate::IssueAssigned', sys_notice: '{nickname1}在 {nickname2}/{repository} 指派给你一个易修:{title}', notification_url: '{baseurl}/{owner}/{identifier}/issues/{id}') + self.create(type: 'MessageTemplate::IssueAssignerExpire', sys_notice: '您负责的易修 {title} 已临近截止日期,请尽快处理', notification_url: '{baseurl}/{owner}/{identifier}/issues/{id}') + self.create(type: 'MessageTemplate::IssueAtme', sys_notice: '{nickname} 在易修 {title} 中@我', notification_url: '{baseurl}/{owner}/{identifier}/issues/{id}') + self.create(type: 'MessageTemplate::IssueChanged', sys_notice: '在项目 {nickname2}/{repository} 的易修 {title} 中:{ifassigner}{nickname1}将负责人从 {assigner1} 修改为 {assigner2} {endassigner}{ifstatus}{nickname1}将状态从 {status1} 修改为 {status2} {endstatus}{iftracker}{nickname1}将类型从 {tracker1} 修改为 {tracker2} {endtracker}{ifpriority}{nickname1}将优先级从 {priority1} 修改为 {priority2} {endpriority}{ifmilestone}{nickname1}将里程碑从 {milestone1} 修改为 {milestone2} {endmilestone}{iftag}{nickname1}将标记从 {tag1} 修改为 {tag2} {endtag}{ifdoneratio}{nickname1}将完成度从 {doneratio1} 修改为 {doneratio2} {enddoneratio}{ifbranch}{nickname1}将指定分支从 {branch1} 修改为 {branch2} {endbranch}{ifstartdate}{nickname1}将开始日期从 {startdate1} 修改为 {startdate2} {endstartdate}{ifduedate}{nickname1}将结束日期从 {duedate1} 修改为 {duedate2} {endduedate}', notification_url: '{baseurl}/{owner}/{identifier}/issues/{id}') + self.create(type: 'MessageTemplate::IssueCreatorExpire', sys_notice: '您发布的易修 {title} 已临近截止日期,请尽快处理', notification_url: '{baseurl}/{owner}/{identifier}/issues/{id}') + self.create(type: 'MessageTemplate::IssueDeleted', sys_notice: '{nickname}已将易修 {title} 删除', notification_url: '') self.create(type: 'MessageTemplate::IssueJournal', sys_notice: '{nickname}评论易修{title}:{notes}', notification_url: '{baseurl}/{owner}/{identifier}/issues/{id}') self.create(type: 'MessageTemplate::LoginIpTip', sys_notice: '您的账号{nickname}于{login_time)在非常用的IP地址{ip}登录,如非本人操作,请立即修改密码', notification_url: '') - self.create(type: 'MessageTemplate::OrganizationJoined', sys_notice: '你已加入{organization}组织', notification_url: '{baseurl}/{login}') - self.create(type: 'MessageTemplate::OrganizationLeft', sys_notice: '你已被移出{organization}组织', notification_url: '') - self.create(type: 'MessageTemplate::OrganizationRole', sys_notice: '组织{organization}已把你的角色改为{role}', notification_url: '{baseurl}/{login}') + self.create(type: 'MessageTemplate::OrganizationJoined', sys_notice: '你已加入 {organization} 组织', notification_url: '{baseurl}/{login}') + self.create(type: 'MessageTemplate::OrganizationLeft', sys_notice: '你已被移出 {organization} 组织', notification_url: '') + self.create(type: 'MessageTemplate::OrganizationRole', sys_notice: '组织 {organization} 已把你的角色改为 {role}', notification_url: '{baseurl}/{login}') self.create(type: 'MessageTemplate::ProjectDeleted', sys_notice: '你关注的仓库{nickname}/{repository}已被删除', notification_url: '') - self.create(type: 'MessageTemplate::ProjectFollowed', sys_notice: '{nickname}关注了你管理的仓库', notification_url: '{baseurl}/{login}') - self.create(type: 'MessageTemplate::ProjectForked', sys_notice: '{nickname1}复刻了你管理的仓库{nickname1}/{repository1}到{nickname2}/{repository2}', notification_url: '{baseurl}/{owner}/{identifier}') - self.create(type: 'MessageTemplate::ProjectIssue', sys_notice: '{nickname1}在{nickname2}/{repository}新建易修:{title}', notification_url: '{baseurl}/{owner}/{identifier}/issues/{id}') - self.create(type: 'MessageTemplate::ProjectJoined', sys_notice: '你已加入{repository}项目', notification_url: '{baseurl}/{owner}/{identifier}') - self.create(type: 'MessageTemplate::ProjectLeft', sys_notice: '你已被移出{repository}项目', notification_url: '') - self.create(type: 'MessageTemplate::ProjectMemberJoined', sys_notice: '{nickname1}已加入项目{nickname2}/{repository}', notification_url: '{baseurl}/{owner}/{identifier}') - self.create(type: 'MessageTemplate::ProjectMemberLeft', sys_notice: '{nickname1}已被移出项目{nickname2}/{repository}', notification_url: '{baseurl}/{owner}/{identifier}') - self.create(type: 'MessageTemplate::ProjectMilestone', sys_notice: '{nickname1}在{nickname2}/{repository}创建了一个里程碑:{title}', notification_url: '{baseurl}/{owner}/{identifier}/milestones/{id}') - self.create(type: 'MessageTemplate::ProjectPraised', sys_notice: '{nickname}点赞了你管理的仓库', notification_url: '{baseurl}/{login}') - self.create(type: 'MessageTemplate::ProjectPullRequest', sys_notice: '{nickname1}在{nickname2}/{repository}提交了一个合并请求:{title}', notification_url: '{baseurl}/{owner}/{identifier}/pulls/{id}/Messagecount') - self.create(type: 'MessageTemplate::ProjectRole', sys_notice: '仓库{repository}已把你的角色改为{role}', notification_url: '{baseurl}/{owner}/{identifier}') - self.create(type: 'MessageTemplate::ProjectSettingChanged', sys_notice: '{nickname1}更改了{nickname2}/{repository}仓库设置:{ifname}更改项目名称为"{name}"{endname}{ifdescription}更改项目简介为"{description}"{enddescription}{ifcategory}更改项目类别为"{category}"{endcategory}{iflanguage}更改项目语言为"{language}"{endlanguage}{ifpermission}将仓库设为"{permission}"{endpermission}{ifnavbar}将项目导航更改为"{navbar}"{endnavbar}', notification_url: '{baseurl}/{owner}/{identifier}/settings') + self.create(type: 'MessageTemplate::ProjectFollowed', sys_notice: '{nickname} 关注了你管理的仓库', notification_url: '{baseurl}/{login}') + self.create(type: 'MessageTemplate::ProjectForked', sys_notice: '{nickname1} 复刻了你管理的仓库{nickname1}/{repository1}到{nickname2}/{repository2}', notification_url: '{baseurl}/{owner}/{identifier}') + self.create(type: 'MessageTemplate::ProjectIssue', sys_notice: '{nickname1}在 {nickname2}/{repository} 新建易修:{title}', notification_url: '{baseurl}/{owner}/{identifier}/issues/{id}') + self.create(type: 'MessageTemplate::ProjectJoined', sys_notice: '你已加入 {repository} 项目', notification_url: '{baseurl}/{owner}/{identifier}') + self.create(type: 'MessageTemplate::ProjectLeft', sys_notice: '你已被移出 {repository} 项目', notification_url: '') + self.create(type: 'MessageTemplate::ProjectMemberJoined', sys_notice: '{nickname1} 已加入项目 {nickname2}/{repository}', notification_url: '{baseurl}/{owner}/{identifier}') + self.create(type: 'MessageTemplate::ProjectMemberLeft', sys_notice: '{nickname1} 已被移出项目 {nickname2}/{repository}', notification_url: '{baseurl}/{owner}/{identifier}') + self.create(type: 'MessageTemplate::ProjectMilestone', sys_notice: '{nickname1}在 {nickname2}/{repository} 创建了一个里程碑:{title}', notification_url: '{baseurl}/{owner}/{identifier}/milestones/{id}') + self.create(type: 'MessageTemplate::ProjectPraised', sys_notice: '{nickname} 点赞了你管理的仓库', notification_url: '{baseurl}/{login}') + self.create(type: 'MessageTemplate::ProjectPullRequest', sys_notice: '{nickname1}在 {nickname2}/{repository} 提交了一个合并请求:{title}', notification_url: '{baseurl}/{owner}/{identifier}/pulls/{id}/Messagecount') + self.create(type: 'MessageTemplate::ProjectRole', sys_notice: '仓库 {repository} 已把你的角色改为 {role}', notification_url: '{baseurl}/{owner}/{identifier}') + self.create(type: 'MessageTemplate::ProjectSettingChanged', sys_notice: '{nickname1}更改了 {nickname2}/{repository} 仓库设置:{ifname}更改项目名称为"{name}"{endname}{ifdescription}更改项目简介为"{description}"{enddescription}{ifcategory}更改项目类别为"{category}"{endcategory}{iflanguage}更改项目语言为"{language}"{endlanguage}{ifpermission}将仓库设为"{permission}"{endpermission}{ifnavbar}将项目导航更改为"{navbar}"{endnavbar}', notification_url: '{baseurl}/{owner}/{identifier}/settings') self.create(type: 'MessageTemplate::ProjectTransfer', sys_notice: '你关注的仓库{nickname1}/{repository1}已被转移至{nickname2}/{repository2}', notification_url: '{baseurl}/{owner}/{identifier}') - self.create(type: 'MessageTemplate::ProjectVersion', sys_notice: '{nickname1}在{nickname2}/{repository}创建了发行版:{title}', notification_url: '{baseurl}/{owner}/{identifier}/releases') - self.create(type: 'MessageTemplate::PullRequestAssigned', sys_notice: '{nickname1}在{nickname2}/{repository}指派给你一个合并请求:{title}', notification_url: '{baseurl}/{owner}/{identifier}/pulls/{id}/Messagecount') - self.create(type: 'MessageTemplate::PullRequestAtme', sys_notice: '{nickname}在合并请求{title}中@我', notification_url: '{baseurl}/{owner}/{identifier}/pulls/{id}/Messagecount') - self.create(type: 'MessageTemplate::PullRequestChanged', sys_notice: '在项目{nickname2}/{repository}的合并请求{title}中:{ifassigner}{nickname1}将审查成员从{assigner1}修改为{assigner2}{endassigner}{ifmilestone}{nickname1}将里程碑从{milestone1}修改为{milestone2}{endmilestone}{iftag}{nickname1}将标记从{tag1}修改为{tag2}{endtag}{ifpriority}{nickname1}将优先级从{priority1}修改为{priority2}{endpriority}', notification_url: '{baseurl}/{owner}/{identifier}/pulls/{id}/Messagecount') + self.create(type: 'MessageTemplate::ProjectVersion', sys_notice: '{nickname1}在 {nickname2}/{repository} 创建了发行版:{title}', notification_url: '{baseurl}/{owner}/{identifier}/releases') + self.create(type: 'MessageTemplate::PullRequestAssigned', sys_notice: '{nickname1}在 {nickname2}/{repository} 指派给你一个合并请求:{title}', notification_url: '{baseurl}/{owner}/{identifier}/pulls/{id}/Messagecount') + self.create(type: 'MessageTemplate::PullRequestAtme', sys_notice: '{nickname} 在合并请求 {title} 中@我', notification_url: '{baseurl}/{owner}/{identifier}/pulls/{id}/Messagecount') + self.create(type: 'MessageTemplate::PullRequestChanged', sys_notice: '在项目{nickname2}/{repository}的合并请求 {title} 中:{ifassigner}{nickname1}将审查成员从 {assigner1} 修改为 {assigner2} {endassigner}{ifmilestone}{nickname1}将里程碑从 {milestone1} 修改为 {milestone2} {endmilestone}{iftag}{nickname1}将标记从 {tag1} 修改为 {tag2} {endtag}{ifpriority}{nickname1}将优先级从 {priority1} 修改为 {priority2} {endpriority}', notification_url: '{baseurl}/{owner}/{identifier}/pulls/{id}/Messagecount') self.create(type: 'MessageTemplate::PullRequestClosed', sys_notice: '你提交的合并请求:{title}被拒绝', notification_url: '') self.create(type: 'MessageTemplate::PullRequestJournal', sys_notice: '{nickname}评论合并请求{title}:{notes}', notification_url: '{baseurl}/{owner}/{identifier}/pulls/{id}/Messagecount') self.create(type: 'MessageTemplate::PullRequestMerged', sys_notice: '你提交的合并请求:{title}已通过', notification_url: '{baseurl}/{owner}/{identifier}/pulls/{id}/Messagecount') diff --git a/app/models/message_template/issue_changed.rb b/app/models/message_template/issue_changed.rb index f6f443677..e1fe764a2 100644 --- a/app/models/message_template/issue_changed.rb +++ b/app/models/message_template/issue_changed.rb @@ -82,17 +82,18 @@ class MessageTemplate::IssueChanged < MessageTemplate else content.gsub!(/({ifmilestone})(.*)({endmilestone})/, '') end - # 易修标签修改 + # 易修标记修改 if change_params[:issue_tags_value].present? issue_tags1 = IssueTag.where(id: change_params[:issue_tags_value][0]).distinct issue_tags2 = IssueTag.where(id: change_params[:issue_tags_value][1]).distinct - tag1 = issue_tags1.pluck(:name).join(",").blank? ? '未选择标签' : issue_tags1.pluck(:name).join(",") - tag2 = issue_tags2.pluck(:name).join(",").blank? ? '未选择标签' : issue_tags2.pluck(:name).join(",") + tag1 = issue_tags1.pluck(:name).join(",").blank? ? '未选择标记' : issue_tags1.pluck(:name).join(",") + tag2 = issue_tags2.pluck(:name).join(",").blank? ? '未选择标记' : issue_tags2.pluck(:name).join(",") if change_count > 1 content.sub!('{iftag}', '
    ') else - content.sub!('{endtag}', '') + content.sub!('{iftag}', '') end + content.sub!('{endtag}', '') content.gsub!('{tag1}', tag1) content.gsub!('{tag2}', tag2) else diff --git a/app/models/message_template/pull_request_changed.rb b/app/models/message_template/pull_request_changed.rb index 1f34f2d0e..e7ebc6709 100644 --- a/app/models/message_template/pull_request_changed.rb +++ b/app/models/message_template/pull_request_changed.rb @@ -53,12 +53,12 @@ class MessageTemplate::PullRequestChanged < MessageTemplate else content.gsub!(/({ifmilestone})(.*)({endmilestone})/, '') end - # 合并请求标签修改 + # 合并请求标记修改 if change_params[:issue_tags_value].present? issue_tags1 = IssueTag.where(id: change_params[:issue_tags_value][0]).distinct issue_tags2 = IssueTag.where(id: change_params[:issue_tags_value][1]).distinct - tag1 = issue_tags1.pluck(:name).join(",").blank? ? '未选择标签' : issue_tags1.pluck(:name).join(",") - tag2 = issue_tags2.pluck(:name).join(",").blank? ? '未选择标签' : issue_tags2.pluck(:name).join(",") + tag1 = issue_tags1.pluck(:name).join(",").blank? ? '未选择标记' : issue_tags1.pluck(:name).join(",") + tag2 = issue_tags2.pluck(:name).join(",").blank? ? '未选择标记' : issue_tags2.pluck(:name).join(",") if change_count > 1 content.sub!('{iftag}', '
    ') else From 12681b0842578a23a92bb2267777e63d3b178c8e Mon Sep 17 00:00:00 2001 From: yystopf Date: Fri, 17 Sep 2021 14:56:34 +0800 Subject: [PATCH 25/38] fix: issue visit permission --- app/controllers/issues_controller.rb | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/app/controllers/issues_controller.rb b/app/controllers/issues_controller.rb index bbde2ecb3..43e901956 100644 --- a/app/controllers/issues_controller.rb +++ b/app/controllers/issues_controller.rb @@ -399,22 +399,22 @@ class IssuesController < ApplicationController def check_project_public unless @project.is_public || @project.member?(current_user) || current_user.admin? || (@project.user_id == current_user.id) - normal_status(-1, "您没有权限") + return render_forbidden end end def set_issue @issue = Issue.find_by_id(params[:id]) if @issue.blank? - normal_status(-1, "标签不存在") - elsif @issue.is_lock &&!(@project.member?(current_user) || current_user.admin?) - normal_status(-1, "您没有权限") + return render_not_found + elsif !(@project.is_public || (current_user.present? && (@project.member?(current_user) || current_user&.admin? || (@project.user_id == current_user&.id)))) + return render_forbidden end end def check_issue_permission unless @project.is_public || (current_user.present? && (@project.member?(current_user) || current_user&.admin? || (@project.user_id == current_user&.id))) - normal_status(-1, "您没有权限") + return render_forbidden end end From 74a4b499a946733d218ad687c686f983282fe6bd Mon Sep 17 00:00:00 2001 From: yystopf Date: Sat, 18 Sep 2021 10:16:37 +0800 Subject: [PATCH 26/38] fix --- app/models/message_template.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/models/message_template.rb b/app/models/message_template.rb index df4ed7829..194580765 100644 --- a/app/models/message_template.rb +++ b/app/models/message_template.rb @@ -44,9 +44,9 @@ class MessageTemplate {nickname2}/{repository}
    指派给你一个合并请求:{title}', notification_url: '{baseurl}/{owner}/{identifier}/pulls/{id}/Messagecount') self.create(type: 'MessageTemplate::PullRequestAtme', sys_notice: '{nickname} 在合并请求 {title} 中@我', notification_url: '{baseurl}/{owner}/{identifier}/pulls/{id}/Messagecount') self.create(type: 'MessageTemplate::PullRequestChanged', sys_notice: '在项目{nickname2}/{repository}的合并请求 {title} 中:{ifassigner}{nickname1}将审查成员从 {assigner1} 修改为 {assigner2} {endassigner}{ifmilestone}{nickname1}将里程碑从 {milestone1} 修改为 {milestone2} {endmilestone}{iftag}{nickname1}将标记从 {tag1} 修改为 {tag2} {endtag}{ifpriority}{nickname1}将优先级从 {priority1} 修改为 {priority2} {endpriority}', notification_url: '{baseurl}/{owner}/{identifier}/pulls/{id}/Messagecount') - self.create(type: 'MessageTemplate::PullRequestClosed', sys_notice: '你提交的合并请求:{title}被拒绝', notification_url: '') + self.create(type: 'MessageTemplate::PullRequestClosed', sys_notice: '你提交的合并请求:{title} 被拒绝', notification_url: '') self.create(type: 'MessageTemplate::PullRequestJournal', sys_notice: '{nickname}评论合并请求{title}:{notes}', notification_url: '{baseurl}/{owner}/{identifier}/pulls/{id}/Messagecount') - self.create(type: 'MessageTemplate::PullRequestMerged', sys_notice: '你提交的合并请求:{title}已通过', notification_url: '{baseurl}/{owner}/{identifier}/pulls/{id}/Messagecount') + self.create(type: 'MessageTemplate::PullRequestMerged', sys_notice: '你提交的合并请求:{title} 已通过', notification_url: '{baseurl}/{owner}/{identifier}/pulls/{id}/Messagecount') end def self.sys_notice From a2ae8f1630397cfc48e0bafce8f376b26e8aaf53 Mon Sep 17 00:00:00 2001 From: yystopf Date: Sat, 18 Sep 2021 10:24:16 +0800 Subject: [PATCH 27/38] fix: profile completed --- app/models/user.rb | 10 +++++----- app/views/users/get_user_info.json.jbuilder | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/app/models/user.rb b/app/models/user.rb index 1a7cdeecc..3c4a900a0 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -186,7 +186,7 @@ class User < Owner :show_email, :show_location, :show_department, :technical_title, :province, :city, :custom_department, to: :user_extension, allow_nil: true - before_save :update_hashed_password, :set_lastname, :set_profile_completed + before_save :update_hashed_password, :set_lastname after_create do SyncTrustieJob.perform_later("user", 1) if allow_sync_to_trustie? end @@ -757,6 +757,10 @@ class User < Owner laboratory_id.present? && laboratory_id != 1 end + def profile_is_completed? + self.nickname.present? && self.gender.present? && self.mail.present? && self.custom_department.present? + end + protected def validate_password_length # 管理员的初始密码是5位 @@ -783,10 +787,6 @@ class User < Owner def set_lastname self.lastname = self.nickname if changes[:nickname].present? end - - def set_profile_completed - self.profile_completed = self.nickname.present? && self.gender.present? && self.mail.present? && self.custom_department.present? - end end diff --git a/app/views/users/get_user_info.json.jbuilder b/app/views/users/get_user_info.json.jbuilder index 067019ef9..09de3d63b 100644 --- a/app/views/users/get_user_info.json.jbuilder +++ b/app/views/users/get_user_info.json.jbuilder @@ -12,7 +12,7 @@ json.tidding_count 0 json.user_phone_binded @user.phone.present? # json.phone @user.phone # json.email @user.mail -json.profile_completed @user.profile_completed? +json.profile_completed @user.profile_is_completed? json.professional_certification @user.professional_certification json.devops_step @user.devops_step json.ci_certification @user.ci_certification? From a910b11860e623f47c68e3b2d7d813377993f146 Mon Sep 17 00:00:00 2001 From: yystopf Date: Sat, 18 Sep 2021 10:38:07 +0800 Subject: [PATCH 28/38] =?UTF-8?q?fix:=20=E9=A1=B9=E7=9B=AE=E5=88=97?= =?UTF-8?q?=E8=A1=A8=E5=88=A0=E9=99=A4=E7=BB=84=E7=BB=87=E7=AD=9B=E9=80=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/queries/projects/list_query.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/queries/projects/list_query.rb b/app/queries/projects/list_query.rb index 771d4c927..4658408d2 100644 --- a/app/queries/projects/list_query.rb +++ b/app/queries/projects/list_query.rb @@ -11,7 +11,7 @@ class Projects::ListQuery < ApplicationQuery end def call - q = Project.all_visible(current_user_id).by_name_or_identifier(params[:search]) + q = Project.visible.by_name_or_identifier(params[:search]) scope = q .with_project_type(params[:project_type]) From d957e0544ff92dd8749becf81dd29a8d726638fb Mon Sep 17 00:00:00 2001 From: yystopf Date: Sat, 18 Sep 2021 18:41:03 +0800 Subject: [PATCH 29/38] add: message template management --- .../admins/message_templates_controller.rb | 34 ++++++++++++ .../project_setting_changed.rb | 8 ++- .../admins/message_templates/_form.html.erb | 53 +++++++++++++++++++ .../admins/message_templates/_list.html.erb | 39 ++++++++++++++ .../admins/message_templates/edit.js.erb | 1 + .../admins/message_templates/index.html.erb | 9 ++++ .../admins/message_templates/index.js.erb | 1 + app/views/admins/shared/_sidebar.html.erb | 1 + config/routes.rb | 1 + 9 files changed, 145 insertions(+), 2 deletions(-) create mode 100644 app/controllers/admins/message_templates_controller.rb create mode 100644 app/views/admins/message_templates/_form.html.erb create mode 100644 app/views/admins/message_templates/_list.html.erb create mode 100644 app/views/admins/message_templates/edit.js.erb create mode 100644 app/views/admins/message_templates/index.html.erb create mode 100644 app/views/admins/message_templates/index.js.erb diff --git a/app/controllers/admins/message_templates_controller.rb b/app/controllers/admins/message_templates_controller.rb new file mode 100644 index 000000000..7724dde59 --- /dev/null +++ b/app/controllers/admins/message_templates_controller.rb @@ -0,0 +1,34 @@ +class Admins::MessageTemplatesController < Admins::BaseController + before_action :get_template, only: [:edit,:update, :destroy] + + def index + message_templates = MessageTemplate.group(:type).count.keys + @message_templates = kaminari_array_paginate(message_templates) + end + + def edit + end + + def update + if @message_template.update_attributes(message_template_params) + redirect_to admins_message_templates_path + flash[:success] = '消息模版更新成功' + else + redirect_to admins_message_templates_path + flash[:danger] = @message_template.errors.full_messages.join(",") + end + end + + private + def message_template_params + params.require(:message_template).permit! + end + + def get_template + @message_template = MessageTemplate.find_by(id: params[:id]) + unless @message_template.present? + redirect_to admins_message_templates_path + flash[:danger] = "消息模版不存在" + end + end +end \ No newline at end of file diff --git a/app/models/message_template/project_setting_changed.rb b/app/models/message_template/project_setting_changed.rb index 9510fa581..8d4947db6 100644 --- a/app/models/message_template/project_setting_changed.rb +++ b/app/models/message_template/project_setting_changed.rb @@ -110,8 +110,12 @@ class MessageTemplate::ProjectSettingChanged < MessageTemplate end # 项目导航更改 if change_params[:navbar].present? - navbar = project.project_units.order(unit_type: :asc).pluck(:unit_type).join(',') - navbar.gsub!('code,', '') + unit_types = project.project_units.order(unit_type: :asc).pluck(:unit_type) + unit_types.delete('code') + unit_types.unshift('代码库') + unit_types.unshift('主页') + unit_types.append('动态') + navbar = unit_types.join(',') navbar.gsub!('issues', '易修') navbar.gsub!('pulls', '合并请求') navbar.gsub!('wiki', 'Wiki') diff --git a/app/views/admins/message_templates/_form.html.erb b/app/views/admins/message_templates/_form.html.erb new file mode 100644 index 000000000..d8b7158c9 --- /dev/null +++ b/app/views/admins/message_templates/_form.html.erb @@ -0,0 +1,53 @@ +
    +
    <%= type == "create" ? "新建" : "编辑" %>消息模版
    + <%= link_to "返回", admins_message_templates_path, class: "btn btn-default pull-right" %> +
    + +
    + <%= form_for @message_template, url: {controller: "message_templates", action: "#{type}"} do |f| %> + +
    + +
    + <%= f.text_area :sys_notice, class:"form-control", rows: "10", cols: "20",placeholer: "站内信模版" %> +
    + + + +
    +
    + +
    + <%= f.text_area :email, class:"form-control", rows: "10", cols: "20",placeholer: "邮件模版" %> +
    + + + +
    +
    + +
    + <%= f.text_field :notification_url, class: "form-control input-lg", maxlength: "60", placeholder: "跳转地址" %> +
    + +
    +
    + <%= f.submit "确认", class: "btn btn-primary submit-btn" %> +
    + <% end %> +
    \ No newline at end of file diff --git a/app/views/admins/message_templates/_list.html.erb b/app/views/admins/message_templates/_list.html.erb new file mode 100644 index 000000000..0f495eff6 --- /dev/null +++ b/app/views/admins/message_templates/_list.html.erb @@ -0,0 +1,39 @@ + + + + + + + + + + + + + <% if message_templates.present? %> + <% message_templates.each_with_index do |message_template_type, index| %> + <% message_template = message_template_type.constantize.last%> + + + + + + + + + <% end %> + <% else %> + <%= render 'admins/shared/no_data_for_table' %> + <% end %> + +
    序号类型系统消息模版邮件模版通知地址操作
    <%= list_index_no((params[:page] || 1).to_i, index) %><%= message_template.type.split("::")[1] %> + <%= message_template.sys_notice.to_s.truncate(200) %> + + <%= message_template.email.to_s.truncate(200) %> + + <%= message_template.notification_url.to_s.truncate(200) %> + + <%= link_to "编辑", edit_admins_message_template_path(message_template),remote: true, class: "action" %> +
    + +<%= render partial: 'admins/shared/paginate', locals: { objects: message_templates } %> \ No newline at end of file diff --git a/app/views/admins/message_templates/edit.js.erb b/app/views/admins/message_templates/edit.js.erb new file mode 100644 index 000000000..789dd286d --- /dev/null +++ b/app/views/admins/message_templates/edit.js.erb @@ -0,0 +1 @@ +$("#admins-message-templates-content").html("<%= j render partial: 'admins/message_templates/form', locals:{type: 'update'} %>") \ No newline at end of file diff --git a/app/views/admins/message_templates/index.html.erb b/app/views/admins/message_templates/index.html.erb new file mode 100644 index 000000000..ab2af2f9d --- /dev/null +++ b/app/views/admins/message_templates/index.html.erb @@ -0,0 +1,9 @@ +<% define_admin_breadcrumbs do %> + <% add_admin_breadcrumb('消息模版') %> +<% end %> +
    +
    + <%= render partial: 'admins/message_templates/list', locals: { message_templates: @message_templates } %> +
    +
    + diff --git a/app/views/admins/message_templates/index.js.erb b/app/views/admins/message_templates/index.js.erb new file mode 100644 index 000000000..d8e0fdd26 --- /dev/null +++ b/app/views/admins/message_templates/index.js.erb @@ -0,0 +1 @@ +$('.message-templates-list-container').html("<%= j( render partial: 'admins/message_templates/list', locals: { message_templates: @message_templates } ) %>"); \ No newline at end of file diff --git a/app/views/admins/shared/_sidebar.html.erb b/app/views/admins/shared/_sidebar.html.erb index e58337c18..402449b3b 100644 --- a/app/views/admins/shared/_sidebar.html.erb +++ b/app/views/admins/shared/_sidebar.html.erb @@ -30,6 +30,7 @@
  • <%= sidebar_item(admins_reversed_keywords_path, '系统保留关键词', icon: 'key', controller: 'admins-reversed_keywords') %>
  • +
  • <%= sidebar_item(admins_message_templates_path, '消息模版', icon: 'folder', controller: 'admins-message_templates') %>
  • <%= sidebar_item(admins_laboratories_path, '云上实验室', icon: 'cloud', controller: 'admins-laboratories') %>
  • diff --git a/config/routes.rb b/config/routes.rb index 06b634fc0..e0ea42073 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -668,6 +668,7 @@ Rails.application.routes.draw do resources :project_licenses resources :project_ignores resources :reversed_keywords + resources :message_templates, only: [:index, :edit, :update] resources :major_informations, only: [:index] resources :ec_templates, only: [:index, :destroy] do collection do From 0581c59a84ab1e723391b95cf6323e4f59ade197 Mon Sep 17 00:00:00 2001 From: yystopf Date: Sat, 18 Sep 2021 18:50:45 +0800 Subject: [PATCH 30/38] fix: message template simple type --- app/models/message_template.rb | 4 ++++ app/views/admins/message_templates/_form.html.erb | 2 +- app/views/admins/message_templates/_list.html.erb | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/app/models/message_template.rb b/app/models/message_template.rb index 194580765..88be2f519 100644 --- a/app/models/message_template.rb +++ b/app/models/message_template.rb @@ -64,4 +64,8 @@ class MessageTemplate -
    <%= type == "create" ? "新建" : "编辑" %>消息模版
    +
    <%= type == "create" ? "新建" : "编辑" %><%= @message_template.simple_type %>消息模版
    <%= link_to "返回", admins_message_templates_path, class: "btn btn-default pull-right" %> diff --git a/app/views/admins/message_templates/_list.html.erb b/app/views/admins/message_templates/_list.html.erb index 0f495eff6..a5a1a7265 100644 --- a/app/views/admins/message_templates/_list.html.erb +++ b/app/views/admins/message_templates/_list.html.erb @@ -15,7 +15,7 @@ <% message_template = message_template_type.constantize.last%> <%= list_index_no((params[:page] || 1).to_i, index) %> - <%= message_template.type.split("::")[1] %> + <%= message_template.simple_type %> <%= message_template.sys_notice.to_s.truncate(200) %> From 53212975f1bbb08b71ae03ac4f8cf767457942aa Mon Sep 17 00:00:00 2001 From: yystopf Date: Wed, 22 Sep 2021 09:53:43 +0800 Subject: [PATCH 31/38] add: init data button --- app/controllers/admins/message_templates_controller.rb | 10 ++++++++++ app/views/admins/message_templates/index.html.erb | 3 +++ config/routes.rb | 6 +++++- 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/app/controllers/admins/message_templates_controller.rb b/app/controllers/admins/message_templates_controller.rb index 7724dde59..b474c428c 100644 --- a/app/controllers/admins/message_templates_controller.rb +++ b/app/controllers/admins/message_templates_controller.rb @@ -19,6 +19,16 @@ class Admins::MessageTemplatesController < Admins::BaseController end end + def init_data + if MessageTemplate.build_init_data + redirect_to admins_message_templates_path + flash[:success] = '消息模版初始化成功' + else + redirect_to admins_message_templates_path + flash[:danger] = '消息模版初始化失败' + end + end + private def message_template_params params.require(:message_template).permit! diff --git a/app/views/admins/message_templates/index.html.erb b/app/views/admins/message_templates/index.html.erb index ab2af2f9d..54d273332 100644 --- a/app/views/admins/message_templates/index.html.erb +++ b/app/views/admins/message_templates/index.html.erb @@ -2,6 +2,9 @@ <% add_admin_breadcrumb('消息模版') %> <% end %>
    +
    + <%= link_to "初始化数据", init_data_admins_message_templates_path, class: "btn btn-primary pull-right", "data-disabled-with":"...初始化数据" %> +
    <%= render partial: 'admins/message_templates/list', locals: { message_templates: @message_templates } %>
    diff --git a/config/routes.rb b/config/routes.rb index e0ea42073..9c6dda1b0 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -668,7 +668,11 @@ Rails.application.routes.draw do resources :project_licenses resources :project_ignores resources :reversed_keywords - resources :message_templates, only: [:index, :edit, :update] + resources :message_templates, only: [:index, :edit, :update] do + collection do + get :init_data + end + end resources :major_informations, only: [:index] resources :ec_templates, only: [:index, :destroy] do collection do From e5199425ee90e1ba7f3a2dd5cd58bbf859197c77 Mon Sep 17 00:00:00 2001 From: yystopf Date: Wed, 22 Sep 2021 14:25:56 +0800 Subject: [PATCH 32/38] add: template email message --- .../admins/message_templates_controller.rb | 6 +- app/jobs/send_template_message_job.rb | 26 ++++ app/models/message_template.rb | 10 +- app/models/message_template/issue_assigned.rb | 11 ++ .../message_template/organization_joined.rb | 9 ++ .../message_template/organization_left.rb | 10 ++ .../message_template/organization_role.rb | 9 ++ app/models/message_template/project_issue.rb | 13 ++ app/models/message_template/project_joined.rb | 8 ++ app/models/message_template/project_left.rb | 10 ++ .../message_template/project_member_joined.rb | 9 ++ .../message_template/project_member_left.rb | 9 ++ .../message_template/project_pull_request.rb | 13 ++ app/models/message_template/project_role.rb | 9 ++ .../project_setting_changed.rb | 124 ++++++++++++++++++ .../message_template/pull_request_assigned.rb | 11 ++ app/services/notice/read/client_service.rb | 12 +- app/services/notice/read/count_service.rb | 2 +- app/services/notice/read/list_service.rb | 2 +- .../notice/write/change_status_service.rb | 6 +- app/services/notice/write/client_service.rb | 12 +- app/services/notice/write/create_service.rb | 6 +- app/services/notice/write/delete_service.rb | 6 +- .../notice/write/email_create_service.rb | 36 +++++ 24 files changed, 348 insertions(+), 21 deletions(-) create mode 100644 app/services/notice/write/email_create_service.rb diff --git a/app/controllers/admins/message_templates_controller.rb b/app/controllers/admins/message_templates_controller.rb index b474c428c..23c94e784 100644 --- a/app/controllers/admins/message_templates_controller.rb +++ b/app/controllers/admins/message_templates_controller.rb @@ -1,5 +1,5 @@ class Admins::MessageTemplatesController < Admins::BaseController - before_action :get_template, only: [:edit,:update, :destroy] + before_action :get_template, only: [:edit, :update, :destroy] def index message_templates = MessageTemplate.group(:type).count.keys @@ -30,8 +30,8 @@ class Admins::MessageTemplatesController < Admins::BaseController end private - def message_template_params - params.require(:message_template).permit! + def message_template_params + params.require(@message_template.type.split("::").join("_").underscore.to_sym).permit! end def get_template diff --git a/app/jobs/send_template_message_job.rb b/app/jobs/send_template_message_job.rb index ac5e956a4..3dc946e76 100644 --- a/app/jobs/send_template_message_job.rb +++ b/app/jobs/send_template_message_job.rb @@ -20,6 +20,8 @@ class SendTemplateMessageJob < ApplicationJob receivers = User.where(id: issue&.assigned_to_id).where.not(id: operator&.id) receivers_string, content, notification_url = MessageTemplate::IssueAssigned.get_message_content(receivers, operator, issue) Notice::Write::CreateService.call(receivers_string, content, notification_url, source, {operator_id: operator.id, issue_id: issue.id}) + receivers_email_string, email_content, notification_url = MessageTemplate::IssueAssigned.get_email_message_content(receivers, operator, issue) + Notice::Write::EmailCreateService.call(receivers_email_string, email_content, source) when 'IssueAssignerExpire' issue_id = args[0] issue = Issue.find_by_id(issue_id) @@ -65,6 +67,8 @@ class SendTemplateMessageJob < ApplicationJob receivers = User.where(id: user.id) receivers_string, content, notification_url = MessageTemplate::OrganizationJoined.get_message_content(receivers, organization) Notice::Write::CreateService.call(receivers_string, content, notification_url, source, {user_id: user.id, organization_id: organization.id}) + receivers_email_string, email_content, notification_url = MessageTemplate::OrganizationJoined.get_email_message_content(receivers, organization) + Notice::Write::EmailCreateService.call(receivers_email_string, email_content, source) when 'OrganizationLeft' user_id, organization_id = args[0], args[1] user = User.find_by_id(user_id) @@ -73,6 +77,8 @@ class SendTemplateMessageJob < ApplicationJob receivers = User.where(id: user.id) receivers_string, content, notification_url = MessageTemplate::OrganizationLeft.get_message_content(receivers, organization) Notice::Write::CreateService.call(receivers_string, content, notification_url, source, {user_id: user.id, organization_id: organization.id}) + receivers_email_string, email_content, notification_url = MessageTemplate::OrganizationLeft.get_email_message_content(receivers, organization) + Notice::Write::EmailCreateService.call(receivers_email_string, email_content, source) when 'OrganizationRole' user_id, organization_id, role = args[0], args[1], args[2] user = User.find_by_id(user_id) @@ -81,6 +87,8 @@ class SendTemplateMessageJob < ApplicationJob receivers = User.where(id: user.id) receivers_string, content, notification_url = MessageTemplate::OrganizationRole.get_message_content(receivers, organization, role) Notice::Write::CreateService.call(receivers_string, content, notification_url, source, {user_id: user.id, organization_id: organization.id, role: role}) + receivers_email_string, email_content, notification_url = MessageTemplate::OrganizationRole.get_email_message_content(receivers, organization, role) + Notice::Write::EmailCreateService.call(receivers_email_string, email_content, source) when 'ProjectIssue' operator_id, issue_id = args[0], args[1] operator = User.find_by_id(operator_id) @@ -90,6 +98,8 @@ class SendTemplateMessageJob < ApplicationJob followers = [] # TODO receivers_string, content, notification_url = MessageTemplate::ProjectIssue.get_message_content(managers, followers, operator, issue) Notice::Write::CreateService.call(receivers_string, content, notification_url, source, {operator_id: operator.id, issue_id: issue.id}) + receivers_email_string, email_content, notification_url = MessageTemplate::ProjectIssue.get_email_message_content(managers, followers, operator, issue) + Notice::Write::EmailCreateService.call(receivers_email_string, email_content, source) when 'ProjectJoined' operator_id, user_id, project_id = args[0], args[1], args[2] operator = User.find_by_id(operator_id) @@ -99,6 +109,8 @@ class SendTemplateMessageJob < ApplicationJob receivers = User.where(id: user.id).where.not(id: operator&.id) receivers_string, content, notification_url = MessageTemplate::ProjectJoined.get_message_content(receivers, project) Notice::Write::CreateService.call(receivers_string, content, notification_url, source, {operator_id: operator.id, user_id: user.id, project_id: project.id}) + receivers_emal_string, email_content, notification_url = MessageTemplate::ProjectJoined.get_email_message_content(receivers, project) + Notice::Write::EmailCreateService.call(receivers_email_string, email_content, source) when 'ProjectLeft' operator_id, user_id, project_id = args[0], args[1], args[2] operator = User.find_by_id(operator_id) @@ -108,6 +120,8 @@ class SendTemplateMessageJob < ApplicationJob receivers = User.where(id: user.id).where.not(id: operator&.id) receivers_string, content, notification_url = MessageTemplate::ProjectLeft.get_message_content(receivers, project) Notice::Write::CreateService.call(receivers_string, content, notification_url, source, {operator_id: operator.id, user_id: user.id, project_id: project.id}) + receivers_email_string, email_content, notification_url = MessageTemplate::ProjectLeft.get_email_message_content(receivers, project) + Notice::Write::EmailCreateService.call(receivers_email_string, email_content, source) when 'ProjectMemberJoined' operator_id, user_id, project_id = args[0], args[1], args[2] operator = User.find_by_id(operator_id) @@ -117,6 +131,8 @@ class SendTemplateMessageJob < ApplicationJob receivers = project&.all_managers.where.not(id: operator&.id) receivers_string, content, notification_url = MessageTemplate::ProjectMemberJoined.get_message_content(receivers, user, project) Notice::Write::CreateService.call(receivers_string, content, notification_url, source, {operator_id: operator.id, user_id: user.id, project_id: project.id}) + receivers_email_string, email_content, notification_url = MessageTemplate::ProjectMemberJoined.get_email_message_content(receivers, user, project) + Notice::Write::EmailCreateService.call(receivers_email_string, email_content, source) when 'ProjectMemberLeft' operator_id, user_id, project_id = args[0], args[1], args[2] operator = User.find_by_id(operator_id) @@ -126,6 +142,8 @@ class SendTemplateMessageJob < ApplicationJob receivers = project&.all_managers.where.not(id: operator&.id) receivers_string, content, notification_url = MessageTemplate::ProjectMemberLeft.get_message_content(receivers, user, project) Notice::Write::CreateService.call(receivers_string, content, notification_url, source, {operator_id: operator.id, user_id: user.id, project_id: project.id}) + receivers_email_string, email_content, notification_url = MessageTemplate::ProjectMemberLeft.get_email_message_content(receivers, user, project) + Notice::Write::EmailCreateService.call(receivers_email_string, email_content, source) when 'ProjectPullRequest' operator_id, pull_request_id = args[0], args[1] operator = User.find_by_id(operator_id) @@ -135,6 +153,8 @@ class SendTemplateMessageJob < ApplicationJob followers = [] # TODO receivers_string, content, notification_url = MessageTemplate::ProjectPullRequest.get_message_content(managers, followers, operator, pull_request) Notice::Write::CreateService.call(receivers_string, content, notification_url, source, {operator_id: operator.id, pull_request_id: pull_request.id}) + receivers_email_string, email_content, notification_url = MessageTemplate::ProjectPullRequest.get_email_message_content(managers, followers, operator, pull_request) + Notice::Write::EmailCreateService.call(receivers_email_string, email_content, source) when 'ProjectRole' operator_id, user_id, project_id, role = args[0], args[1], args[2], args[3] operator = User.find_by_id(operator_id) @@ -144,6 +164,8 @@ class SendTemplateMessageJob < ApplicationJob receivers = User.where(id: user.id).where.not(id: operator&.id) receivers_string, content, notification_url = MessageTemplate::ProjectRole.get_message_content(receivers, project, role) Notice::Write::CreateService.call(receivers_string, content, notification_url, source, {operator_id: operator.id, user_id: user.id, project_id: project.id, role: role}) + receivers_email_string, email_content, notification_url = MessageTemplate::ProjectRole.get_email_message_content(receivers, project, role) + Notice::Write::EmailCreateService.call(receivers_email_string, email_content, source) when 'ProjectSettingChanged' operator_id, project_id, change_params = args[0], args[1], args[2] operator = User.find_by_id(operator_id) @@ -152,6 +174,8 @@ class SendTemplateMessageJob < ApplicationJob receivers = project.all_managers.where.not(id: operator&.id) receivers_string, content, notification_url = MessageTemplate::ProjectSettingChanged.get_message_content(receivers, operator, project, change_params.symbolize_keys) Notice::Write::CreateService.call(receivers_string, content, notification_url, source, {operator_id: operator.id, project_id: project.id, change_params: change_params}) + receivers_email_string, email_content, notification_url = MessageTemplate::ProjectSettingChanged.get_email_message_content(receivers, operator, project, change_params.symbolize_keys) + Notice::Write::EmailCreateService.call(receivers_email_string, email_content, source) when 'PullRequestAssigned' operator_id, pull_request_id = args[0], args[1] operator = User.find_by_id(operator_id) @@ -161,6 +185,8 @@ class SendTemplateMessageJob < ApplicationJob receivers = User.where(id: issue&.assigned_to_id).where.not(id: operator&.id) receivers_string, content, notification_url = MessageTemplate::PullRequestAssigned.get_message_content(receivers, operator, pull_request) Notice::Write::CreateService.call(receivers_string, content, notification_url, source, {operator_id: operator.id, pull_request_id: pull_request.id}) + receivers_email_string, email_content, notification_url = MessageTemplate::PullRequestAssigned.get_email_message_content(receivers, operator, pull_request) + Notice::Write::EmailCreateService.call(receivers_email_string, email_content, source) when 'PullRequestAtme' receivers, operator_id, pull_request_id = args[0], args[1], args[2] operator = User.find_by_id(operator_id) diff --git a/app/models/message_template.rb b/app/models/message_template.rb index 88be2f519..daca02838 100644 --- a/app/models/message_template.rb +++ b/app/models/message_template.rb @@ -11,7 +11,7 @@ # notification_url :string(255) # -class MessageTemplate {nickname}
    关注了你', notification_url: '{baseurl}/{login}') @@ -53,6 +53,10 @@ class MessageTemplate e + Rails.logger.info("MessageTemplate::IssueAssigned.get_email_message_content [ERROR] #{e}") + return '', '', '' + end end diff --git a/app/models/message_template/organization_joined.rb b/app/models/message_template/organization_joined.rb index 81ae2a67d..918374837 100644 --- a/app/models/message_template/organization_joined.rb +++ b/app/models/message_template/organization_joined.rb @@ -23,4 +23,13 @@ class MessageTemplate::OrganizationJoined < MessageTemplate Rails.logger.info("MessageTemplate::OrganizationJoined.get_message_content [ERROR] #{e}") return '', '', '' end + + def self.get_email_message_content(receivers, organization) + content = email.gsub('{organization}', organization&.real_name) + url = notification_url.gsub('{login}', organization&.login) + return receivers_email_string(receivers), content, url + rescue => e + Rails.logger.info("MessageTemplate::OrganizationJoined.get_email_message_content [ERROR] #{e}") + return '', '', '' + end end diff --git a/app/models/message_template/organization_left.rb b/app/models/message_template/organization_left.rb index 16652d30e..2f63cfca0 100644 --- a/app/models/message_template/organization_left.rb +++ b/app/models/message_template/organization_left.rb @@ -23,4 +23,14 @@ class MessageTemplate::OrganizationLeft < MessageTemplate Rails.logger.info("MessageTemplate::OrganizationLeft.get_message_content [ERROR] #{e}") return '', '', '' end + + def self.get_email_message_content(receivers, organization) + content = email.gsub('{organization}', organization&.real_name) + url = notification_url.gsub('{login}', organization&.login) + + return receivers_email_string(receivers), content, url + rescue => e + Rails.logger.info("MessageTemplate::OrganizationLeft.get_email_message_content [ERROR] #{e}") + return '', '', '' + end end diff --git a/app/models/message_template/organization_role.rb b/app/models/message_template/organization_role.rb index 33c326514..f494d5bd9 100644 --- a/app/models/message_template/organization_role.rb +++ b/app/models/message_template/organization_role.rb @@ -23,4 +23,13 @@ class MessageTemplate::OrganizationRole < MessageTemplate Rails.logger.info("MessageTemplate::OrganizationRole.get_message_content [ERROR] #{e}") return '', '', '' end + + def self.get_email_message_content(receivers, organization, role) + content = email.gsub('{organization}', organization&.real_name).gsub('{role}', role) + url = notification_url.gsub('{login}', organization&.login) + return receivers_email_string(receivers), content, url + rescue => e + Rails.logger.info("MessageTemplate::OrganizationRole.get_email_message_content [ERROR] #{e}") + return '', '', '' + end end diff --git a/app/models/message_template/project_issue.rb b/app/models/message_template/project_issue.rb index 700932ad6..e7126237e 100644 --- a/app/models/message_template/project_issue.rb +++ b/app/models/message_template/project_issue.rb @@ -27,4 +27,17 @@ class MessageTemplate::ProjectIssue < MessageTemplate Rails.logger.info("MessageTemplate::ProjectIssue.get_message_content [ERROR] #{e}") return '', '', '' end + + def self.get_email_message_content(managers, followers, operator, issue) + project = issue&.project + owner = project&.owner + receivers = managers + followers + content = email.gsub('{nickname1}', operator&.real_name).gsub('{nickname2}', owner&.real_name).gsub('{repository}', project&.name).gsub('{title}', issue&.subject) + url = notification_url.gsub('{owner}', owner&.login).gsub('{identifier}', project&.identifier).gsub('{id}', issue&.id.to_s) + + return receivers_email_string(receivers), content, url + rescue => e + Rails.logger.info("MessageTemplate::ProjectIssue.get_email_message_content [ERROR] #{e}") + return '', '', '' + end end diff --git a/app/models/message_template/project_joined.rb b/app/models/message_template/project_joined.rb index 91d4b3c13..91836a595 100644 --- a/app/models/message_template/project_joined.rb +++ b/app/models/message_template/project_joined.rb @@ -23,4 +23,12 @@ class MessageTemplate::ProjectJoined < MessageTemplate Rails.logger.info("MessageTemplate::ProjectJoined.get_message_content [ERROR] #{e}") return '', '', '' end + + def self.get_email_message_content(receivers, project) + content = email.gsub('{repository}', project&.name) + url = notification_url.gsub('{owner}', project&.owner&.login).gsub('{identifier}', project&.identifier) + rescue => e + Rails.logger.info("MessageTemplate::ProjectJoined.get_email_message_content [ERROR] #{e}") + return '', '', '' + end end diff --git a/app/models/message_template/project_left.rb b/app/models/message_template/project_left.rb index e83b027a5..dabb31d11 100644 --- a/app/models/message_template/project_left.rb +++ b/app/models/message_template/project_left.rb @@ -23,4 +23,14 @@ class MessageTemplate::ProjectLeft < MessageTemplate Rails.logger.info("MessageTemplate::ProjectLeft.get_message_content [ERROR] #{e}") return '', '', '' end + + def self.get_email_message_content(receivers, project) + content = email.gsub('{repository}', project&.name) + url = notification_url.gsub('{owner}', project&.owner&.login).gsub('{identifier}', project&.identifier) + + return receivers_email_string(receivers), content, url + rescue => e + Rails.logger.info("MessageTemplate::ProjectLeft.get_email_message_content [ERROR] #{e}") + return '', '', '' + end end diff --git a/app/models/message_template/project_member_joined.rb b/app/models/message_template/project_member_joined.rb index a510265bc..f08a99ff8 100644 --- a/app/models/message_template/project_member_joined.rb +++ b/app/models/message_template/project_member_joined.rb @@ -23,4 +23,13 @@ class MessageTemplate::ProjectMemberJoined < MessageTemplate Rails.logger.info("MessageTemplate::ProjectMemberJoined.get_message_content [ERROR] #{e}") return '', '', '' end + + def self.get_email_message_content(receivers, user, project) + content = email.gsub('{nickname}', user&.real_name).gsub('{nickname2}', project&.owner&.real_name).gsub('{repository}', project&.name) + url = notification_url.gsub('{owner}', project&.owner&.login).gsub('{identifier}', project&.identifier) + return receivers_email_string(receivers), content, url + rescue => e + Rails.logger.info("MessageTemplate::ProjectMemberJoined.get_email_message_content [ERROR] #{e}") + return '', '', '' + end end diff --git a/app/models/message_template/project_member_left.rb b/app/models/message_template/project_member_left.rb index 9d26e1027..846a496ee 100644 --- a/app/models/message_template/project_member_left.rb +++ b/app/models/message_template/project_member_left.rb @@ -23,4 +23,13 @@ class MessageTemplate::ProjectMemberLeft < MessageTemplate Rails.logger.info("MessageTemplate::ProjectMemberLeft.get_message_content [ERROR] #{e}") return '', '', '' end + + def self.get_email_message_content(receivers, user, project) + content = email.gsub('{nickname1}', user&.real_name).gsub('{nickname2}', project&.owner&.real_name).gsub("{repository}", project&.name) + url = notification_url.gsub('{owner}', project&.owner&.login).gsub('{identifier}', project&.identifier) + return receivers_email_string(receivers), content, url + rescue => e + Rails.logger.info("MessageTemplate::ProjectMemberLeft.get_email_message_content [ERROR] #{e}") + return '', '', '' + end end diff --git a/app/models/message_template/project_pull_request.rb b/app/models/message_template/project_pull_request.rb index 2db1021ad..70c0ab541 100644 --- a/app/models/message_template/project_pull_request.rb +++ b/app/models/message_template/project_pull_request.rb @@ -27,4 +27,17 @@ class MessageTemplate::ProjectPullRequest < MessageTemplate Rails.logger.info("MessageTemplate::ProjectPullRequest.get_message_content [ERROR] #{e}") return '', '', '' end + + def self.get_email_message_content(managers, followers, operator, pull_request) + project = pull_request&.project + owner = project&.owner + receivers = managers + followers + content = email.gsub('{nickname1}', operator&.real_name).gsub('{nickname2}', owner&.real_name).gsub('{repository}', project&.name).gsub('{title}', pull_request&.title) + url = notification_url.gsub('{owner}', owner&.login).gsub('{identifier}', project&.identifier).gsub('{id}', pull_request&.id.to_s) + + return receivers_email_string(receivers), content, url + rescue => e + Rails.logger.info("MessageTemplate::ProjectPullRequest.get_email_message_content [ERROR] #{e}") + return '', '', '' + end end diff --git a/app/models/message_template/project_role.rb b/app/models/message_template/project_role.rb index cb229007a..459b6fd19 100644 --- a/app/models/message_template/project_role.rb +++ b/app/models/message_template/project_role.rb @@ -23,4 +23,13 @@ class MessageTemplate::ProjectRole < MessageTemplate Rails.logger.info("MessageTemplate::ProjectRole.get_message_content [ERROR] #{e}") return '', '', '' end + + def self.get_email_message_content(receivers, project, role) + content = email.gsub('{repository}', project&.name).gsub('{role}', role) + url = notification_url.gsub('{owner}', project&.owner&.login).gsub('{identifier}', project&.identifier) + return receivers_email_string(receivers), content, url + rescue => e + Rails.logger.info("MessageTemplate::ProjectRole.get_email_message_content [ERROR] #{e}") + return '', '', '' + end end diff --git a/app/models/message_template/project_setting_changed.rb b/app/models/message_template/project_setting_changed.rb index 8d4947db6..9bd11986b 100644 --- a/app/models/message_template/project_setting_changed.rb +++ b/app/models/message_template/project_setting_changed.rb @@ -138,4 +138,128 @@ class MessageTemplate::ProjectSettingChanged < MessageTemplate Rails.logger.info("MessageTemplate::ProjectSettingChanged.get_message_content [ERROR] #{e}") return '', '', '' end + + def self.get_email_message_content(receivers, operator, project, change_params) + return '', '', '' if change_params.blank? + owner = project&.owner + content = email.gsub('{nickname1}', operator&.real_name).gsub('{nickname2}', owner&.real_name).gsub('{repository}', project&.name) + url = notification_url.gsub('{owner}', owner&.login).gsub('{identifier}', project&.identifier) + change_count = change_params.keys.size + # 项目名称更改 + if change_params[:name].present? + if change_count > 1 + content.sub!('{ifname}', '
    ') + else + content.sub!('{ifname}', '') + end + content.sub!('{endname}', '') + content.gsub!('{name}', change_params[:name][1]) + else + content.gsub!(/({ifname})(.*)({endname})/, '') + end + # 项目简介更改 + if change_params[:description].present? + if change_params[:description][1].blank? + if change_count > 1 + content.gsub!(/({ifdescription})(.*)({enddescription})/, '
    删除了项目简介') + else + content.gsub!(/({ifdescription})(.*)({enddescription})/, '删除了项目简介') + end + else + if change_count > 1 + content.sub!('{ifdescription}', '
    ') + else + content.sub!('{ifdescription}', '') + end + content.sub!('{enddescription}', '') + content.gsub!('{description}', change_params[:description][1]) + end + else + content.gsub!(/({ifdescription})(.*)({enddescription})/, '') + end + # 项目类别更改 + if change_params[:project_category_id].present? + category = ProjectCategory.find_by_id(change_params[:project_category_id][1]) + if category.present? + if change_count > 1 + content.sub!('{ifcategory}', '
    ') + else + content.sub!('{ifcategory}', '') + end + content.sub!('{endcategory}', '') + content.gsub!('{category}', category&.name) + else + if change_count > 1 + content.gsub!(/({ifcategory})(.*)({endcategory})/, '
    删除了项目类别') + else + content.gsub!(/({ifcategory})(.*)({endcategory})/, '删除了项目类别') + end + end + else + content.gsub!(/({ifcategory})(.*)({endcategory})/, '') + end + # 项目语言更改 + if change_params[:project_language_id].present? + language = ProjectLanguage.find_by_id(change_params[:project_language_id][1]) + if language.present? + if change_count > 1 + content.sub!('{iflanguage}', '
    ') + else + content.sub!('{iflanguage}', '') + end + content.sub!('{endlanguage}', '') + content.gsub!('{language}', language&.name) + else + if change_count > 1 + content.gsub!(/({iflanguage})(.*)({endlanguage})/, '
    删除了项目语言') + else + content.gsub!(/({iflanguage})(.*)({endlanguage})/, '删除了项目语言') + end + end + else + content.gsub!(/({iflanguage})(.*)({endlanguage})/, '') + end + # 项目公私有更改 + if change_params[:is_public].present? + permission = change_params[:is_public][1] ? '公有' : '私有' + if change_count > 1 + content.sub!('{ifpermission}', '
    ') + else + content.sub!('{ifpermission}', '') + end + content.sub!('{endpermission}', '') + content.gsub!('{permission}', permission) + else + content.gsub!(/({ifpermission})(.*)({endpermission})/, '') + end + # 项目导航更改 + if change_params[:navbar].present? + unit_types = project.project_units.order(unit_type: :asc).pluck(:unit_type) + unit_types.delete('code') + unit_types.unshift('代码库') + unit_types.unshift('主页') + unit_types.append('动态') + navbar = unit_types.join(',') + navbar.gsub!('issues', '易修') + navbar.gsub!('pulls', '合并请求') + navbar.gsub!('wiki', 'Wiki') + navbar.gsub!('devops', '工作流') + navbar.gsub!('versions', '里程碑') + navbar.gsub!('resources', '资源库') + if change_count > 1 + content.sub!('{ifnavbar}', '
    ') + else + content.sub!('{ifnavbar}', '') + end + content.sub!('{endnavbar}', '') + content.gsub!('{navbar}', navbar) + else + content.gsub!(/({ifnavbar})(.*)({endnavbar})/, '') + end + + return receivers_email_string(receivers), content, url + rescue => e + Rails.logger.info("MessageTemplate::ProjectSettingChanged.get_email_message_content [ERROR] #{e}") + return '', '', '' + end end diff --git a/app/models/message_template/pull_request_assigned.rb b/app/models/message_template/pull_request_assigned.rb index 5b3e6538d..1cd901642 100644 --- a/app/models/message_template/pull_request_assigned.rb +++ b/app/models/message_template/pull_request_assigned.rb @@ -25,4 +25,15 @@ class MessageTemplate::PullRequestAssigned < MessageTemplate Rails.logger.info("MessageTemplate::PullRequestAssigned.get_message_content [ERROR] #{e}") return '', '', '' end + + def self.get_email_message_content(receivers, operator, pull_request) + project = pull_request&.project + owner = project&.owner + content = email.gsub('{nickname1}', operator&.real_name).gsub('{nickname2}', owner&.real_name).gsub('{repository}', project&.name).gsub('{title}', pull_request&.title) + url = notification_url.gsub('{owner}', owner&.login).gsub('{identifier}', project&.identifier).gsub('{id}', pull_request&.id.to_s) + return receivers_email_string(receivers), content, url + rescue => e + Rails.logger.info("MessageTemplate::PullRequestAssigned.get_email_message_content [ERROR] #{e}") + return '', '', '' + end end diff --git a/app/services/notice/read/client_service.rb b/app/services/notice/read/client_service.rb index 39ba816cc..95ab8159e 100644 --- a/app/services/notice/read/client_service.rb +++ b/app/services/notice/read/client_service.rb @@ -48,7 +48,11 @@ class Notice::Read::ClientService < ApplicationService end end - #private + def platform + Notice.notice_config[:platform] + end + + private def conn @client ||= begin Faraday.new(url: domain) do |req| @@ -69,12 +73,8 @@ class Notice::Read::ClientService < ApplicationService Notice.notice_config[:read_domain] end - def platform - Notice.notice_config[:platform] - end - def api_url - [domain, base_url, "/#{platform}"].join('') + [domain, base_url].join('') end def full_url(api_rest, action='post') diff --git a/app/services/notice/read/count_service.rb b/app/services/notice/read/count_service.rb index 502d57a64..fade12278 100644 --- a/app/services/notice/read/count_service.rb +++ b/app/services/notice/read/count_service.rb @@ -20,6 +20,6 @@ class Notice::Read::CountService < Notice::Read::ClientService end def url - "/count".freeze + "/notification/#{platform}/count".freeze end end \ No newline at end of file diff --git a/app/services/notice/read/list_service.rb b/app/services/notice/read/list_service.rb index e4b1fda44..3f6645d77 100644 --- a/app/services/notice/read/list_service.rb +++ b/app/services/notice/read/list_service.rb @@ -27,6 +27,6 @@ class Notice::Read::ListService < Notice::Read::ClientService end def url - "/list".freeze + "/notification/#{platform}/list".freeze end end \ No newline at end of file diff --git a/app/services/notice/write/change_status_service.rb b/app/services/notice/write/change_status_service.rb index 9091d2111..de2c89815 100644 --- a/app/services/notice/write/change_status_service.rb +++ b/app/services/notice/write/change_status_service.rb @@ -9,7 +9,7 @@ class Notice::Write::ChangeStatusService < Notice::Write::ClientService end def call - result = put("", request_params) + result = put(url, request_params) response = render_response(result) end @@ -28,4 +28,8 @@ class Notice::Write::ChangeStatusService < Notice::Write::ClientService }.stringify_keys) end + def url + "/notification/#{platform}".freeze + end + end \ No newline at end of file diff --git a/app/services/notice/write/client_service.rb b/app/services/notice/write/client_service.rb index 51ba5656e..c76691cfb 100644 --- a/app/services/notice/write/client_service.rb +++ b/app/services/notice/write/client_service.rb @@ -48,7 +48,11 @@ class Notice::Write::ClientService < ApplicationService end end - #private + def platform + Notice.notice_config[:platform] + end + + private def conn @client ||= begin Faraday.new(url: domain) do |req| @@ -69,12 +73,8 @@ class Notice::Write::ClientService < ApplicationService Notice.notice_config[:write_domain] end - def platform - Notice.notice_config[:platform] - end - def api_url - [domain, base_url, "/#{platform}"].join('') + [domain, base_url].join('') end def full_url(api_rest, action='post') diff --git a/app/services/notice/write/create_service.rb b/app/services/notice/write/create_service.rb index 9c1b84925..8dfc88483 100644 --- a/app/services/notice/write/create_service.rb +++ b/app/services/notice/write/create_service.rb @@ -13,7 +13,7 @@ class Notice::Write::CreateService < Notice::Write::ClientService def call return nil if request_receivers.blank? - result = post("", request_params) + result = post(url, request_params) response = render_response(result) end @@ -35,4 +35,8 @@ class Notice::Write::CreateService < Notice::Write::ClientService }.stringify_keys) end + def url + "/notification/#{platform}".freeze + end + end \ No newline at end of file diff --git a/app/services/notice/write/delete_service.rb b/app/services/notice/write/delete_service.rb index 82ab904ad..f63584819 100644 --- a/app/services/notice/write/delete_service.rb +++ b/app/services/notice/write/delete_service.rb @@ -8,7 +8,7 @@ class Notice::Write::DeleteService < Notice::Write::ClientService end def call - result = delete("", request_params) + result = delete(url, request_params) response = render_response(result) end @@ -26,4 +26,8 @@ class Notice::Write::DeleteService < Notice::Write::ClientService }.stringify_keys) end + def url + "/notification/#{platform}".freeze + end + end \ No newline at end of file diff --git a/app/services/notice/write/email_create_service.rb b/app/services/notice/write/email_create_service.rb new file mode 100644 index 000000000..0e95e86a4 --- /dev/null +++ b/app/services/notice/write/email_create_service.rb @@ -0,0 +1,36 @@ +class Notice::Write::EmailCreateService < Notice::Write::ClientService + attr_accessor :receivers, :sender, :content, :subject + + def initialize(receivers, content, subject, sender=-1) + @receivers = receivers + @sender = sender + @content = content + @subject = subject + end + + def call + return nil if request_receivers.blank? + result = post(url, request_params) + response = render_response(result) + end + + private + + def request_receivers + receivers.is_a?(Array) ? receivers.join(",") : receivers + end + + def request_params + Hash.new.merge(data: { + emails: request_receivers, + sender: sender, + content: content, + subject: subject + }.stringify_keys) + end + + def url + "/email/#{platform}".freeze + end + +end \ No newline at end of file From 1c27e9ccd87c28fbc0ad78a333faa3e8adbc8288 Mon Sep 17 00:00:00 2001 From: yystopf Date: Thu, 23 Sep 2021 17:08:53 +0800 Subject: [PATCH 33/38] fix: textarea md editor --- app/views/admins/message_templates/_form.html.erb | 7 +++---- app/views/admins/message_templates/edit.js.erb | 3 ++- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/app/views/admins/message_templates/_form.html.erb b/app/views/admins/message_templates/_form.html.erb index ec640d1db..823c4408a 100644 --- a/app/views/admins/message_templates/_form.html.erb +++ b/app/views/admins/message_templates/_form.html.erb @@ -28,11 +28,10 @@
    - <%= f.text_area :email, class:"form-control", rows: "10", cols: "20",placeholer: "邮件模版" %> +
    + <%= f.text_area :email, class:"form-control", style: 'display: none;', rows: "10", cols: "20", placeholer: "请输入邮件模版" %> +
    - - -
    -
    +
    + +
    + <%= f.text_field :notification_url, class: "form-control input-lg", maxlength: "60", placeholder: "请输入站内信跳转地址" %> +
    + +
    +
    -
    - -
    - <%= f.text_field :notification_url, class: "form-control input-lg", maxlength: "60", placeholder: "请输入站内信跳转地址" %> -
    -
    <%= f.submit "确认", class: "btn btn-primary submit-btn" %>
    diff --git a/app/views/admins/message_templates/edit.js.erb b/app/views/admins/message_templates/edit.js.erb index 8d22ddc02..5d797af2f 100644 --- a/app/views/admins/message_templates/edit.js.erb +++ b/app/views/admins/message_templates/edit.js.erb @@ -1,2 +1,2 @@ $("#admins-message-templates-content").html("<%= j render partial: 'admins/message_templates/form', locals:{type: 'update'} %>") -createMDEditor('message-template-email-editor', { height: 200, placeholder: '请输入邮件模版' }); +createMDEditor('message-template-email-editor', { height: 500, placeholder: '请输入邮件模版' }); From 3a22ece8717673ee1479e668584ea8c008ba90d9 Mon Sep 17 00:00:00 2001 From: yystopf Date: Sun, 26 Sep 2021 15:00:17 +0800 Subject: [PATCH 36/38] fix: orgainization left receiver email --- app/models/message_template/organization_left.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/models/message_template/organization_left.rb b/app/models/message_template/organization_left.rb index fc6ab2306..edf8b32ec 100644 --- a/app/models/message_template/organization_left.rb +++ b/app/models/message_template/organization_left.rb @@ -34,7 +34,7 @@ class MessageTemplate::OrganizationLeft < MessageTemplate content.gsub!('{login}', organization&.login) content.gsub!('{organization}', organization&.real_name) - return receiver, title, content + return receiver&.mail, title, content rescue => e Rails.logger.info("MessageTemplate::OrganizationLeft.get_email_message_content [ERROR] #{e}") return '', '', '' From c9a902d41614e84ac2954e12e14da45fd7c3b10c Mon Sep 17 00:00:00 2001 From: chenjing Date: Mon, 27 Sep 2021 10:03:27 +0800 Subject: [PATCH 37/38] fix database.yml.example gitea adapter --- config/database.yml.example | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/database.yml.example b/config/database.yml.example index b0f1f2bef..52f6538e1 100644 --- a/config/database.yml.example +++ b/config/database.yml.example @@ -18,7 +18,7 @@ default: &default password: 123456 # socket: /var/run/mysqld/mysqld.sock gitea_server: - aadapter: mysql2 + adapter: mysql2 database: gitea_development host: 127.0.0.1 username: root From be5b3864cd6bad91dbf7056805e65c7c7072fcd9 Mon Sep 17 00:00:00 2001 From: yystopf Date: Mon, 27 Sep 2021 11:25:12 +0800 Subject: [PATCH 38/38] fix: remove repeat message --- app/jobs/send_template_message_job.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/jobs/send_template_message_job.rb b/app/jobs/send_template_message_job.rb index bc080c689..2c463d705 100644 --- a/app/jobs/send_template_message_job.rb +++ b/app/jobs/send_template_message_job.rb @@ -146,7 +146,7 @@ class SendTemplateMessageJob < ApplicationJob user = User.find_by_id(user_id) project = Project.find_by_id(project_id) return unless operator.present? && user.present? && project.present? - receivers = project&.all_managers.where.not(id: operator&.id) + receivers = project&.all_managers.where.not(id: [operator&.id, user&.id]) receivers_string, content, notification_url = MessageTemplate::ProjectMemberJoined.get_message_content(receivers, user, project) Notice::Write::CreateService.call(receivers_string, content, notification_url, source, {operator_id: operator.id, user_id: user.id, project_id: project.id}) receivers.find_each do |receiver| @@ -159,7 +159,7 @@ class SendTemplateMessageJob < ApplicationJob user = User.find_by_id(user_id) project = Project.find_by_id(project_id) return unless operator.present? && user.present? && project.present? - receivers = project&.all_managers.where.not(id: operator&.id) + receivers = project&.all_managers.where.not(id: [operator&.id, user&.id]) receivers_string, content, notification_url = MessageTemplate::ProjectMemberLeft.get_message_content(receivers, user, project) Notice::Write::CreateService.call(receivers_string, content, notification_url, source, {operator_id: operator.id, user_id: user.id, project_id: project.id}) receivers.find_each do |receiver|