alist/server/controllers/account.go

96 lines
2.0 KiB
Go
Raw Normal View History

2021-12-07 07:56:43 +00:00
package controllers
2021-10-26 14:28:37 +00:00
import (
"fmt"
2021-12-06 07:55:05 +00:00
"github.com/Xhofe/alist/drivers/base"
2021-10-26 14:28:37 +00:00
"github.com/Xhofe/alist/model"
2021-12-07 07:56:43 +00:00
"github.com/Xhofe/alist/server/common"
2021-11-13 07:53:26 +00:00
"github.com/gin-gonic/gin"
2021-11-13 11:31:35 +00:00
log "github.com/sirupsen/logrus"
2021-11-13 09:10:44 +00:00
"strconv"
2021-10-30 09:34:34 +00:00
"time"
2021-10-26 14:28:37 +00:00
)
2021-11-13 07:53:26 +00:00
func GetAccounts(c *gin.Context) {
2021-11-03 02:37:33 +00:00
accounts, err := model.GetAccounts()
if err != nil {
2021-12-07 07:56:43 +00:00
common.ErrorResp(c, err, 500)
2021-11-13 07:53:26 +00:00
return
2021-11-03 02:37:33 +00:00
}
2021-12-07 07:56:43 +00:00
common.SuccessResp(c, accounts)
2021-10-26 14:28:37 +00:00
}
2021-11-13 08:49:03 +00:00
func CreateAccount(c *gin.Context) {
var req model.Account
if err := c.ShouldBind(&req); err != nil {
2021-12-07 07:56:43 +00:00
common.ErrorResp(c, err, 400)
2021-11-13 08:49:03 +00:00
return
}
2021-12-06 07:55:05 +00:00
driver, ok := base.GetDriver(req.Type)
2021-11-13 08:49:03 +00:00
if !ok {
2021-12-07 07:56:43 +00:00
common.ErrorResp(c, fmt.Errorf("no [%s] driver", req.Type), 400)
2021-11-13 08:49:03 +00:00
return
}
now := time.Now()
req.UpdatedAt = &now
2021-11-13 11:31:35 +00:00
if err := model.CreateAccount(&req); err != nil {
2021-12-07 07:56:43 +00:00
common.ErrorResp(c, err, 500)
2021-11-13 08:49:03 +00:00
} else {
2021-11-13 11:31:35 +00:00
log.Debugf("new account: %+v", req)
2021-11-13 08:49:03 +00:00
err = driver.Save(&req, nil)
if err != nil {
2021-12-07 07:56:43 +00:00
common.ErrorResp(c, err, 500)
2021-11-13 08:49:03 +00:00
return
}
2021-12-07 07:56:43 +00:00
common.SuccessResp(c)
2021-11-13 08:49:03 +00:00
}
}
2021-11-13 07:53:26 +00:00
func SaveAccount(c *gin.Context) {
2021-10-26 14:28:37 +00:00
var req model.Account
2021-11-13 07:53:26 +00:00
if err := c.ShouldBind(&req); err != nil {
2021-12-07 07:56:43 +00:00
common.ErrorResp(c, err, 400)
2021-11-13 07:53:26 +00:00
return
2021-10-26 14:28:37 +00:00
}
2021-12-06 07:55:05 +00:00
driver, ok := base.GetDriver(req.Type)
2021-10-26 14:28:37 +00:00
if !ok {
2021-12-07 07:56:43 +00:00
common.ErrorResp(c, fmt.Errorf("no [%s] driver", req.Type), 400)
2021-11-13 07:53:26 +00:00
return
2021-10-26 14:28:37 +00:00
}
2021-11-15 06:54:22 +00:00
old, err := model.GetAccountById(req.ID)
if err != nil {
2021-12-07 07:56:43 +00:00
common.ErrorResp(c, err, 400)
2021-11-15 06:54:22 +00:00
return
}
2021-10-30 09:34:34 +00:00
now := time.Now()
req.UpdatedAt = &now
if old.Name != req.Name {
model.DeleteAccountFromMap(old.Name)
}
2021-11-13 11:31:35 +00:00
if err := model.SaveAccount(&req); err != nil {
2021-12-07 07:56:43 +00:00
common.ErrorResp(c, err, 500)
2021-10-26 14:28:37 +00:00
} else {
2021-11-13 11:31:35 +00:00
log.Debugf("save account: %+v", req)
2021-11-15 06:54:22 +00:00
err = driver.Save(&req, old)
2021-10-27 10:59:03 +00:00
if err != nil {
2021-12-07 07:56:43 +00:00
common.ErrorResp(c, err, 500)
2021-11-13 07:53:26 +00:00
return
2021-10-27 10:59:03 +00:00
}
2021-12-07 07:56:43 +00:00
common.SuccessResp(c)
2021-10-26 14:28:37 +00:00
}
}
2021-11-13 07:53:26 +00:00
func DeleteAccount(c *gin.Context) {
2021-11-13 09:10:44 +00:00
idStr := c.Query("id")
id, err := strconv.Atoi(idStr)
if err != nil {
2021-12-07 07:56:43 +00:00
common.ErrorResp(c, err, 400)
2021-11-13 09:10:44 +00:00
return
}
if err := model.DeleteAccount(uint(id)); err != nil {
2021-12-07 07:56:43 +00:00
common.ErrorResp(c, err, 500)
2021-11-13 07:53:26 +00:00
return
2021-10-26 14:28:37 +00:00
}
2021-12-07 07:56:43 +00:00
common.SuccessResp(c)
2021-10-26 14:28:37 +00:00
}