æ·feat: commplete init process
This commit is contained in:
@@ -0,0 +1,32 @@
|
||||
package models
|
||||
|
||||
import "github.com/jinzhu/gorm"
|
||||
|
||||
type Auth struct {
|
||||
ID int `gorm:"primary_key" json:"id"`
|
||||
Username string `json:"username"`
|
||||
Password string `json:"password"`
|
||||
}
|
||||
|
||||
// CheckAuth checks if authentication information exists
|
||||
func CheckAuth(username, password string) (bool, error) {
|
||||
var auth Auth
|
||||
err := db.Select("id").Where(Auth{Username: username, Password: password}).First(&auth).Error
|
||||
if err != nil && err != gorm.ErrRecordNotFound {
|
||||
return false, err
|
||||
}
|
||||
|
||||
if auth.ID > 0 {
|
||||
return true, nil
|
||||
}
|
||||
|
||||
return false, nil
|
||||
}
|
||||
|
||||
// EditUser 编辑用户信息
|
||||
func EditUser(username string, data interface{}) error {
|
||||
if err := db.Model(&Auth{}).Where("username = ? ", username).Updates(data).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
@@ -0,0 +1,124 @@
|
||||
package models
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/google/uuid"
|
||||
"github.com/jinzhu/gorm"
|
||||
_ "github.com/jinzhu/gorm/dialects/mysql"
|
||||
"log"
|
||||
"message-nest/pkg/setting"
|
||||
"message-nest/pkg/util"
|
||||
"time"
|
||||
)
|
||||
|
||||
var db *gorm.DB
|
||||
|
||||
//type Model struct {
|
||||
// ID int `gorm:"primary_key" json:"id"`
|
||||
// CreatedOn util.Time `json:"created_on"`
|
||||
// ModifiedOn util.Time `json:"modified_on"`
|
||||
//}
|
||||
|
||||
type UUIDModel struct {
|
||||
ID uuid.UUID `gorm:"primary_key" json:"id"`
|
||||
|
||||
CreatedBy string `json:"created_by"`
|
||||
ModifiedBy string `json:"modified_by"`
|
||||
CreatedOn util.Time `json:"created_on"`
|
||||
ModifiedOn util.Time `json:"modified_on"`
|
||||
}
|
||||
|
||||
// Setup initializes the database instance
|
||||
func Setup() {
|
||||
var err error
|
||||
db, err = gorm.Open(setting.DatabaseSetting.Type, fmt.Sprintf("%s:%s@tcp(%s)/%s?charset=utf8mb4&parseTime=True&loc=Local",
|
||||
setting.DatabaseSetting.User,
|
||||
setting.DatabaseSetting.Password,
|
||||
setting.DatabaseSetting.Host,
|
||||
setting.DatabaseSetting.Name))
|
||||
|
||||
if err != nil {
|
||||
log.Fatalf("models.Setup err: %v", err)
|
||||
}
|
||||
gorm.DefaultTableNameHandler = func(db *gorm.DB, defaultTableName string) string {
|
||||
return setting.DatabaseSetting.TablePrefix + defaultTableName
|
||||
}
|
||||
|
||||
db.LogMode(true)
|
||||
db.SingularTable(true)
|
||||
db.Callback().Create().Replace("gorm:update_time_stamp", updateTimeStampForCreateCallback)
|
||||
db.Callback().Update().Replace("gorm:update_time_stamp", updateTimeStampForUpdateCallback)
|
||||
db.Callback().Delete().Replace("gorm:delete", deleteCallback)
|
||||
db.DB().SetMaxIdleConns(10)
|
||||
db.DB().SetMaxOpenConns(100)
|
||||
}
|
||||
|
||||
// CloseDB closes database connection (unnecessary)
|
||||
func CloseDB() {
|
||||
defer db.Close()
|
||||
}
|
||||
|
||||
// updateTimeStampForCreateCallback will set `CreatedOn`, `ModifiedOn` when creating
|
||||
func updateTimeStampForCreateCallback(scope *gorm.Scope) {
|
||||
if !scope.HasError() {
|
||||
nowTime := time.Now()
|
||||
fmt.Printf("fyyyyyynowTime %s", nowTime)
|
||||
|
||||
if createTimeField, ok := scope.FieldByName("CreatedOn"); ok {
|
||||
if createTimeField.IsBlank {
|
||||
createTimeField.Set(nowTime)
|
||||
}
|
||||
}
|
||||
|
||||
if modifyTimeField, ok := scope.FieldByName("ModifiedOn"); ok {
|
||||
if modifyTimeField.IsBlank {
|
||||
modifyTimeField.Set(nowTime)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// updateTimeStampForUpdateCallback will set `ModifiedOn` when updating
|
||||
func updateTimeStampForUpdateCallback(scope *gorm.Scope) {
|
||||
if _, ok := scope.Get("gorm:update_column"); !ok {
|
||||
scope.SetColumn("ModifiedOn", time.Now())
|
||||
}
|
||||
}
|
||||
|
||||
// deleteCallback will set `DeletedOn` where deleting
|
||||
func deleteCallback(scope *gorm.Scope) {
|
||||
if !scope.HasError() {
|
||||
var extraOption string
|
||||
if str, ok := scope.Get("gorm:delete_option"); ok {
|
||||
extraOption = fmt.Sprint(str)
|
||||
}
|
||||
|
||||
deletedOnField, hasDeletedOnField := scope.FieldByName("DeletedOn")
|
||||
|
||||
if !scope.Search.Unscoped && hasDeletedOnField {
|
||||
scope.Raw(fmt.Sprintf(
|
||||
"UPDATE %v SET %v=%v%v%v",
|
||||
scope.QuotedTableName(),
|
||||
scope.Quote(deletedOnField.DBName),
|
||||
scope.AddToVars(time.Now().Unix()),
|
||||
addExtraSpaceIfExist(scope.CombinedConditionSql()),
|
||||
addExtraSpaceIfExist(extraOption),
|
||||
)).Exec()
|
||||
} else {
|
||||
scope.Raw(fmt.Sprintf(
|
||||
"DELETE FROM %v%v%v",
|
||||
scope.QuotedTableName(),
|
||||
addExtraSpaceIfExist(scope.CombinedConditionSql()),
|
||||
addExtraSpaceIfExist(extraOption),
|
||||
)).Exec()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// addExtraSpaceIfExist adds a separator
|
||||
func addExtraSpaceIfExist(str string) string {
|
||||
if str != "" {
|
||||
return " " + str
|
||||
}
|
||||
return ""
|
||||
}
|
||||
@@ -0,0 +1,55 @@
|
||||
package models
|
||||
|
||||
type SendTasksIns struct {
|
||||
UUIDModel
|
||||
|
||||
TaskID string `json:"task_id"`
|
||||
WayID string `json:"way_id"`
|
||||
WayType string `json:"way_type"`
|
||||
ContentType string `json:"content_type"`
|
||||
Config string `json:"config"`
|
||||
Extra string `json:"extra"`
|
||||
}
|
||||
|
||||
// InsEmailConfig 实例里面的邮箱config
|
||||
type InsEmailConfig struct {
|
||||
ToAccount string `json:"to_account" validate:"required,email" label:"收件邮箱"`
|
||||
Title string `json:"title" validate:"required,max=150" label:"邮箱标题"`
|
||||
}
|
||||
|
||||
// ManyAddTaskIns 批量添加实例
|
||||
func ManyAddTaskIns(taskIns []SendTasksIns) error {
|
||||
tx := db.Begin()
|
||||
for _, ins := range taskIns {
|
||||
// 存在就跳过这条ins记录
|
||||
err := db.Where("id = ?", ins.ID).Find(&SendTasksIns{}).Error
|
||||
if err == nil {
|
||||
continue
|
||||
}
|
||||
if err := tx.Create(&ins).Error; err != nil {
|
||||
tx.Rollback()
|
||||
return err
|
||||
}
|
||||
}
|
||||
if err := tx.Commit().Error; err != nil {
|
||||
tx.Rollback()
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// AddTaskInsOne 添加一条实例
|
||||
func AddTaskInsOne(ins SendTasksIns) error {
|
||||
if err := db.Create(&ins).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// DeleteMsgTaskIns 删除一条实例
|
||||
func DeleteMsgTaskIns(id string) error {
|
||||
if err := db.Where("id = ?", id).Delete(&SendTasksIns{}).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
@@ -0,0 +1,164 @@
|
||||
package models
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"github.com/google/uuid"
|
||||
"github.com/jinzhu/gorm"
|
||||
"message-nest/pkg/table"
|
||||
)
|
||||
|
||||
type SendTasks struct {
|
||||
UUIDModel
|
||||
|
||||
Name string `json:"name"`
|
||||
}
|
||||
|
||||
// AddSendTaskWithID 添加实例的时候添加任务
|
||||
func AddSendTaskWithID(name string, id string, createdBy string) error {
|
||||
err := db.Where("id = ?", id).Find(&SendTasks{}).Error
|
||||
if err == nil {
|
||||
return nil
|
||||
}
|
||||
uuidObj, _ := uuid.Parse(id)
|
||||
task := SendTasks{
|
||||
UUIDModel: UUIDModel{
|
||||
ID: uuidObj,
|
||||
CreatedBy: createdBy,
|
||||
ModifiedBy: createdBy,
|
||||
},
|
||||
Name: name,
|
||||
}
|
||||
if err := db.Create(&task).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// AddSendTask 添加任务
|
||||
func AddSendTask(name string, createdBy string) error {
|
||||
newUUID := uuid.New()
|
||||
task := SendTasks{
|
||||
UUIDModel: UUIDModel{
|
||||
ID: newUUID,
|
||||
CreatedBy: createdBy,
|
||||
ModifiedBy: createdBy,
|
||||
},
|
||||
Name: name,
|
||||
}
|
||||
if err := db.Create(&task).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// GetSendTasks 获取所有任务
|
||||
func GetSendTasks(pageNum int, pageSize int, name string, maps interface{}) ([]SendTasks, error) {
|
||||
var (
|
||||
tasks []SendTasks
|
||||
err error
|
||||
)
|
||||
query := db.Where(maps)
|
||||
if name != "" {
|
||||
query = query.Where("name like ?", fmt.Sprintf("%%%s%%", name))
|
||||
}
|
||||
query = query.Order("created_on DESC")
|
||||
if pageSize > 0 || pageNum > 0 {
|
||||
query = query.Offset(pageNum).Limit(pageSize)
|
||||
}
|
||||
err = query.Find(&tasks).Error
|
||||
if err != nil && err != gorm.ErrRecordNotFound {
|
||||
return nil, err
|
||||
}
|
||||
return tasks, nil
|
||||
}
|
||||
|
||||
// GetSendTasksTotal 获取所有任务总数
|
||||
func GetSendTasksTotal(name string, maps interface{}) (int, error) {
|
||||
var (
|
||||
err error
|
||||
total int
|
||||
)
|
||||
query := db.Model(&SendTasks{}).Where(maps)
|
||||
if name != "" {
|
||||
query = query.Where("name like ?", fmt.Sprintf("%%%s%%", name))
|
||||
}
|
||||
|
||||
err = query.Count(&total).Error
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
return total, nil
|
||||
}
|
||||
|
||||
type SendTasksInsRes struct {
|
||||
SendTasksIns
|
||||
|
||||
WayName string `json:"way_name"`
|
||||
}
|
||||
|
||||
type TaskIns struct {
|
||||
ID uuid.UUID `json:"id"`
|
||||
Name string `json:"name"`
|
||||
InsData []SendTasksInsRes `json:"ins_data"`
|
||||
}
|
||||
|
||||
// GetSendTasksTotal 获取所有任务下所有的实例
|
||||
func GetTasksIns(id string) (TaskIns, error) {
|
||||
insTable := table.InsTableName
|
||||
waysTable := table.WayTableName
|
||||
var (
|
||||
task SendTasks
|
||||
taskIns []SendTasksInsRes
|
||||
taskResult TaskIns
|
||||
)
|
||||
err := db.Where("id = ?", id).First(&task).Error
|
||||
if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
|
||||
return taskResult, err
|
||||
}
|
||||
|
||||
db.
|
||||
Table(insTable).
|
||||
Select(fmt.Sprintf("%s.*, %s.name as way_name", insTable, waysTable)).
|
||||
Joins(fmt.Sprintf("JOIN %s ON %s.way_id = %s.id", waysTable, insTable, waysTable)).
|
||||
Where(fmt.Sprintf("%s.task_id = ?", insTable), id).
|
||||
Scan(&taskIns)
|
||||
|
||||
taskResult.ID = task.ID
|
||||
taskResult.Name = task.Name
|
||||
taskResult.InsData = taskIns
|
||||
return taskResult, nil
|
||||
}
|
||||
|
||||
// FindTaskByWayId 通过way_id找到关联的任务
|
||||
func FindTaskByWayId(wayId string) []SendTasks {
|
||||
insTable := table.InsTableName
|
||||
taskTable := table.TasksTableName
|
||||
var (
|
||||
tasks []SendTasks
|
||||
)
|
||||
|
||||
db.
|
||||
Table(taskTable).
|
||||
Select(fmt.Sprintf("%s.*", taskTable)).
|
||||
Joins(fmt.Sprintf("JOIN %s ON %s.task_id = %s.id", insTable, insTable, taskTable)).
|
||||
Where(fmt.Sprintf("%s.way_id = ?", insTable), wayId).
|
||||
Scan(&tasks)
|
||||
|
||||
return tasks
|
||||
}
|
||||
|
||||
// 删除任务并删除所有关联的实例
|
||||
func DeleteMsgTask(id string) error {
|
||||
tx := db.Begin()
|
||||
if err := db.Where("id = ?", id).Delete(&SendTasks{}).Error; err != nil {
|
||||
tx.Rollback()
|
||||
return err
|
||||
}
|
||||
if err := db.Where("task_id = ?", id).Delete(&SendTasksIns{}).Error; err != nil {
|
||||
tx.Rollback()
|
||||
return err
|
||||
}
|
||||
tx.Commit()
|
||||
return nil
|
||||
}
|
||||
@@ -0,0 +1,80 @@
|
||||
package models
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"message-nest/pkg/table"
|
||||
"message-nest/pkg/util"
|
||||
)
|
||||
|
||||
type SendTasksLogs struct {
|
||||
ID int `gorm:"primary_key" json:"id"`
|
||||
TaskID string `json:"task_id"`
|
||||
Log string `json:"log"`
|
||||
Status int `json:"status"`
|
||||
|
||||
CreatedOn util.Time `json:"created_on"`
|
||||
ModifiedOn util.Time `json:"modified_on"`
|
||||
}
|
||||
|
||||
// Add 添加日志记录
|
||||
func (log *SendTasksLogs) Add() error {
|
||||
if err := db.Create(&log).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// 日志列表的结果
|
||||
type LogsResult struct {
|
||||
ID int `json:"id"`
|
||||
TaskID string `json:"task_id"`
|
||||
Log string `json:"log"`
|
||||
CreatedOn util.Time `json:"created_on"`
|
||||
ModifiedOn util.Time `json:"modified_on"`
|
||||
TaskName string `json:"task_name"`
|
||||
Status int `json:"status"`
|
||||
}
|
||||
|
||||
// GetSendLogs 获取所有日志记录
|
||||
func GetSendLogs(pageNum int, pageSize int, name string, taskId string, maps interface{}) ([]LogsResult, error) {
|
||||
var logs []LogsResult
|
||||
logt := table.LogsTableName
|
||||
taskt := table.TasksTableName
|
||||
|
||||
query := db.
|
||||
Table(logt).
|
||||
Select(fmt.Sprintf("%s.*, %s.name as task_name", logt, taskt)).
|
||||
Joins(fmt.Sprintf("JOIN %s ON %s.task_id = %s.id", taskt, logt, taskt))
|
||||
|
||||
if name != "" {
|
||||
query = query.Where(fmt.Sprintf("%s.name like ?", taskt), fmt.Sprintf("%%%s%%", name))
|
||||
}
|
||||
if taskId != "" {
|
||||
query = query.Where(fmt.Sprintf("%s.id = ?", taskt), taskId)
|
||||
}
|
||||
query = query.Order("created_on DESC")
|
||||
if pageSize > 0 || pageNum > 0 {
|
||||
query = query.Offset(pageNum).Limit(pageSize)
|
||||
}
|
||||
query.Scan(&logs)
|
||||
|
||||
return logs, nil
|
||||
}
|
||||
|
||||
// GetSendLogsTotal 获取所有日志总数
|
||||
func GetSendLogsTotal(name string, taskId string, maps interface{}) (int, error) {
|
||||
var total int
|
||||
logt := table.LogsTableName
|
||||
taskt := table.TasksTableName
|
||||
query := db.
|
||||
Table(logt).
|
||||
Joins(fmt.Sprintf("JOIN %s ON %s.task_id = %s.id", taskt, logt, taskt))
|
||||
if name != "" {
|
||||
query = query.Where(fmt.Sprintf("%s.name like ?", taskt), fmt.Sprintf("%%%s%%", name))
|
||||
}
|
||||
if taskId != "" {
|
||||
query = query.Where(fmt.Sprintf("%s.id = ?", taskt), taskId)
|
||||
}
|
||||
query.Count(&total)
|
||||
return total, nil
|
||||
}
|
||||
@@ -0,0 +1,104 @@
|
||||
package models
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"github.com/google/uuid"
|
||||
"github.com/jinzhu/gorm"
|
||||
)
|
||||
|
||||
type SendWays struct {
|
||||
UUIDModel
|
||||
|
||||
Name string `json:"name"`
|
||||
Type string `json:"type"`
|
||||
Auth string `gorm:"not null" json:"auth"`
|
||||
}
|
||||
|
||||
func AddSendWay(name string, auth string, wayType string, createdBy string, modifiedBy string) error {
|
||||
newUUID := uuid.New()
|
||||
way := SendWays{
|
||||
UUIDModel: UUIDModel{
|
||||
ID: newUUID,
|
||||
CreatedBy: createdBy,
|
||||
ModifiedBy: modifiedBy,
|
||||
},
|
||||
Name: name,
|
||||
Type: wayType,
|
||||
Auth: auth,
|
||||
}
|
||||
if err := db.Create(&way).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func GetSendWays(pageNum int, pageSize int, name string, type_ string, maps interface{}) ([]SendWays, error) {
|
||||
var (
|
||||
ways []SendWays
|
||||
err error
|
||||
)
|
||||
query := db.Where(maps)
|
||||
if name != "" {
|
||||
query = query.Where("name like ?", fmt.Sprintf("%%%s%%", name))
|
||||
}
|
||||
if type_ != "" {
|
||||
query = query.Where("type = ?", type_)
|
||||
}
|
||||
|
||||
query = query.Order("created_on DESC")
|
||||
if pageSize > 0 || pageNum > 0 {
|
||||
query = query.Offset(pageNum).Limit(pageSize)
|
||||
}
|
||||
|
||||
err = query.Find(&ways).Error
|
||||
if err != nil && err != gorm.ErrRecordNotFound {
|
||||
return nil, err
|
||||
}
|
||||
return ways, nil
|
||||
}
|
||||
|
||||
func GetSendWaysTotal(name string, type_ string, maps interface{}) (int, error) {
|
||||
var (
|
||||
err error
|
||||
total int
|
||||
)
|
||||
query := db.Model(&SendWays{}).Where(maps)
|
||||
if name != "" {
|
||||
query = query.Where("name like ?", fmt.Sprintf("%%%s%%", name))
|
||||
}
|
||||
if type_ != "" {
|
||||
query = query.Where("type = ?", type_)
|
||||
}
|
||||
|
||||
err = query.Count(&total).Error
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
return total, nil
|
||||
}
|
||||
|
||||
func GetWayByID(id string) (SendWays, error) {
|
||||
var way SendWays
|
||||
err := db.Where("id = ? ", id).Find(&way).Error
|
||||
if err != nil && errors.Is(err, gorm.ErrRecordNotFound) {
|
||||
return way, err
|
||||
}
|
||||
return way, nil
|
||||
}
|
||||
|
||||
func DeleteMsgWay(id string) error {
|
||||
if err := db.Where("id = ?", id).Delete(&SendWays{}).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func EditSendWay(id string, data interface{}) error {
|
||||
if err := db.Model(&SendWays{}).Where("id = ? ", id).Updates(data).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user