Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Почему выбор пал на gin? Исторически сложилось или по каким-то критериям?
Нам необходимо было достаточно быстро закрыть вопрос автоматизации
У вас jira.New(...) на каждый запрос инициализируется в каждой функции отдельно?
Да, мы планируем устанавливать соединение глобально и повторно выполнять соединение в случае если оно не установлено.
И вроде странно выглядит конструкция в eventPOST(c *gin.Context). Почему у вас список булевых значений?
Спикок булевых значений так как у нас в каджом случае выполняется три действия (и этот метод, на самом деле, является заготовкой для модификации логики выполнения).
Да, согласен, можно было сделать иначе, скажем так:
func eventPOST(c *gin.Context) {
c.Bind(&event)
log.WithFields(event.ToFields()).Info("Processing event")
switch event.AlertName {
case "subscription_payment_succeeded", "subscription_created":
errJira : = InviteToJira(event.Email))
if !errJira {
c.String(http.StatusInternalServerError, "not Ok\n")
return
}
errJiraGroup := AddToJiraGroup(event.Email)
if !errJiraGroup {
c.String(http.StatusInternalServerError, "not Ok\n")
return
}
errSlack := InviteToSlack(event.Email)
if !errSlack {
c.String(http.StatusInternalServerError, "not Ok\n")
return
}
case "payment_succeeded":
errJira := InviteToJira(event.Email)
if !errJira {
c.String(http.StatusInternalServerError, "not Ok\n")
return
}
errSlack := InviteToSlack(event.Email)
if !errSlack {
c.String(http.StatusInternalServerError, "not Ok\n")
return
}
case "subscription_cancelled":
errRemove := RemoveFromJiraGroup(event.Email)
if !errRemove {
c.String(http.StatusInternalServerError, "not Ok\n")
return
}
default:
log.WithFields(log.Fields{
"event": event.AlertName,
}).Error("Unknown event")
c.String(http.StatusInternalServerError, "not Ok\n")
return
}
c.String(http.StatusOK, "Ok\n")
return
}func eventPOST(c *gin.Context) {
c.Bind(&event)
log.WithFields(event.ToFields()).Info("Processing event")
var errJira, errJiraGroup, errSlack, errRemove, errUnknown error
switch event.AlertName {
case "subscription_payment_succeeded", "subscription_created":
errJira = InviteToJira(event.Email)
errJiraGroup = AddToJiraGroup(event.Email)
errSlack = InviteToSlack(event.Email)
case "payment_succeeded":
errJira = InviteToJira(event.Email)
errSlack = InviteToSlack(event.Email)
case "subscription_cancelled":
errRemove = RemoveFromJiraGroup(event.Email)
default:
log.WithFields(log.Fields{
"event": event.AlertName,
}).Error("Unknown event")
errUnknown = fmt.Errorf("Unknown event")
}
if errJira != nil || errJiraGroup != nil || errSlack != nil ||
errRemove != nil || errUnknown != nil {
c.String(http.StatusInternalServerError, "not Ok\n")
return
}
c.String(http.StatusOK, "Ok\n")
return
}
Коллеги,
Исходный код уже доступен на GitHub: paddle-endpoint. Если есть интерес, желание и время поучаствовать в совершенствовании — буду крайне признателен.
Экосистема поддержки. Автоматизация регистрации пользователей средствами Golang