feat: webhook server part done (#76)
This commit is contained in:
@@ -68,6 +68,10 @@ func InitDB() (err error) {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
err = db.AutoMigrate(&Webhook{})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
err = createRootAccountIfNeed()
|
||||
return err
|
||||
} else {
|
||||
|
||||
@@ -0,0 +1,89 @@
|
||||
package model
|
||||
|
||||
import (
|
||||
"errors"
|
||||
)
|
||||
|
||||
// WebhookConstructRule Keep compatible with Message
|
||||
type WebhookConstructRule struct {
|
||||
Title string `json:"title"`
|
||||
Description string `json:"description"`
|
||||
Content string `json:"content"`
|
||||
URL string `json:"url"`
|
||||
}
|
||||
|
||||
type Webhook struct {
|
||||
Id int `json:"id"`
|
||||
UserId int `json:"user_id" gorm:"index"`
|
||||
Name string `json:"name" gorm:"type:varchar(32);index"`
|
||||
Status int `json:"status" gorm:"default:1"` // enabled, disabled
|
||||
Link string `json:"link" gorm:"type:char(32);uniqueIndex"`
|
||||
CreatedTime int64 `json:"created_time" gorm:"bigint"`
|
||||
ExtractRule string `json:"extract_rule" gorm:"not null"` // how we extract key info from the request
|
||||
ConstructRule string `json:"construct_rule" gorm:"not null"` // how we construct message with the extracted info
|
||||
Channel string `json:"channel" gorm:"type:varchar(32); not null"` // which channel to send our message
|
||||
}
|
||||
|
||||
func GetWebhookById(id int, userId int) (*Webhook, error) {
|
||||
if id == 0 || userId == 0 {
|
||||
return nil, errors.New("id 或 userId 为空!")
|
||||
}
|
||||
c := Webhook{Id: id, UserId: userId}
|
||||
err := DB.Where(c).First(&c).Error
|
||||
return &c, err
|
||||
}
|
||||
|
||||
func GetWebhookByLink(link string) (*Webhook, error) {
|
||||
if link == "" {
|
||||
return nil, errors.New("link 为空!")
|
||||
}
|
||||
c := Webhook{Link: link}
|
||||
err := DB.Where(c).First(&c).Error
|
||||
return &c, err
|
||||
}
|
||||
|
||||
func GetWebhooksByUserId(userId int, startIdx int, num int) (webhooks []*Webhook, err error) {
|
||||
err = DB.Where("user_id = ?", userId).Order("id desc").Limit(num).Offset(startIdx).Find(&webhooks).Error
|
||||
return webhooks, err
|
||||
}
|
||||
|
||||
func SearchWebhooks(userId int, keyword string) (webhooks []*Webhook, err error) {
|
||||
err = DB.Where("user_id = ?", userId).Where("id = ? or name LIKE ?", keyword, keyword+"%").Find(&webhooks).Error
|
||||
return webhooks, err
|
||||
}
|
||||
|
||||
func DeleteWebhookById(id int, userId int) (c *Webhook, err error) {
|
||||
// Why we need userId here? In case user want to delete other's c.
|
||||
if id == 0 || userId == 0 {
|
||||
return nil, errors.New("id 或 userId 为空!")
|
||||
}
|
||||
c = &Webhook{Id: id, UserId: userId}
|
||||
err = DB.Where(c).First(&c).Error
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return c, c.Delete()
|
||||
}
|
||||
|
||||
func (webhook *Webhook) Insert() error {
|
||||
var err error
|
||||
err = DB.Create(webhook).Error
|
||||
return err
|
||||
}
|
||||
|
||||
func (webhook *Webhook) UpdateStatus(status int) error {
|
||||
err := DB.Model(webhook).Update("status", status).Error
|
||||
return err
|
||||
}
|
||||
|
||||
// Update Make sure your token's fields is completed, because this will update non-zero values
|
||||
func (webhook *Webhook) Update() error {
|
||||
var err error
|
||||
err = DB.Model(webhook).Select("name", "extract_rule", "construct_rule", "channel").Updates(webhook).Error
|
||||
return err
|
||||
}
|
||||
|
||||
func (webhook *Webhook) Delete() error {
|
||||
err := DB.Delete(webhook).Error
|
||||
return err
|
||||
}
|
||||
Reference in New Issue
Block a user