[MM-43649] - Ability for end users to notify admin to upgrade workspace (#20338)

* [MM-43649] - Ability for end users to notify admin to upgrade workspace

* add test case

* move code to app layer

* feedback impl

* feedback impl-1

* feedback impl

* simplify logic

* fix typo and lint

* fix app layers

* Use a single critical section for users notified admin (#20488)

* Use a single critical section for users notifying admin

* change persistence mechanism

* add more tests

* change bot message

* fix translations

* update logic to notify once within cooloff period

Co-authored-by: Mattermod <mattermod@users.noreply.github.com>
Co-authored-by: Nathaniel Allred <neallred@protonmail.com>
Этот коммит содержится в:
Allan Guwatudde
2022-06-30 09:24:42 +03:00
коммит произвёл GitHub
родитель dad8eab777
Коммит 1d9fa3c333
9 изменённых файлов: 293 добавлений и 1 удалений

Просмотреть файл

@@ -7915,6 +7915,22 @@ func (c *Client4) RequestCloudTrial(email *StartCloudTrialRequest) (*Subscriptio
return subscription, BuildResponse(r), nil
}
func (c *Client4) NotifyAdmin(nr *NotifyAdminToUpgradeRequest) int {
nrJSON, jsonErr := json.Marshal(nr)
if jsonErr != nil {
return 0
}
r, err := c.DoAPIPost(c.cloudRoute()+"/notify-admin-to-upgrade", string(nrJSON))
if err != nil {
return r.StatusCode
}
closeBody(r)
return r.StatusCode
}
func (c *Client4) ValidateBusinessEmail(email *ValidateBusinessEmailRequest) (*Response, error) {
payload, _ := json.Marshal(email)
r, err := c.DoAPIPostBytes(c.cloudRoute()+"/validate-business-email", payload)

Просмотреть файл

@@ -3,7 +3,11 @@
package model
import "strings"
import (
"os"
"strconv"
"strings"
)
const (
EventTypeFailedPayment = "failed-payment"
@@ -37,6 +41,9 @@ const (
SubscriptionFamilyOnPrem = SubscriptionFamily("on-prem")
)
const defaultCloudNotifyAdminCoolOffDays = 30
const CloudNotifyAdminInfo = "cloud_notify_admin_info"
// Product model represents a product on the cloud system.
type Product struct {
ID string `json:"id"`
@@ -228,3 +235,23 @@ type ProductLimits struct {
Messages *MessagesLimits `json:"messages,omitempty"`
Teams *TeamsLimits `json:"teams,omitempty"`
}
type NotifyAdminToUpgradeRequest struct {
CurrentTeamId string `json:"current_team_id"`
}
type AdminNotificationUserInfo struct {
LastUserIDToNotify string
LastNotificationTimestamp int64
}
func CanNotify(lastNotificationTimestamp int64) bool {
coolOffPeriodDaysEnv := os.Getenv("MM_CLOUD_NOTIFY_ADMIN_COOL_OFF_DAYS")
coolOffPeriodDays, parseError := strconv.ParseFloat(coolOffPeriodDaysEnv, 64)
if parseError != nil {
coolOffPeriodDays = defaultCloudNotifyAdminCoolOffDays
}
daysToMillis := coolOffPeriodDays * 24 * 60 * 60 * 1000
timeDiff := GetMillis() - lastNotificationTimestamp
return timeDiff >= int64(daysToMillis)
}

Просмотреть файл

@@ -59,6 +59,7 @@ const (
PreferenceEmailIntervalFifteenAsSeconds = "900"
PreferenceEmailIntervalHour = "hour"
PreferenceEmailIntervalHourAsSeconds = "3600"
PreferenceCloudUserEphemeralInfo = "cloud_user_ephemeral_info"
)
type Preference struct {