1
0

refactor: update backend database return type

This commit is contained in:
2026-07-16 20:51:18 +08:00
parent 14350f84c5
commit 20bf3a0c34
3 changed files with 148 additions and 160 deletions

View File

@@ -150,7 +150,7 @@ func (d *Sqlite3Database) Close() error {
// tokens (logging when it does), run the work, commit on success / rollback on
// error. DB errors are logged only in debug mode, matching the legacy
// `if cfg.others.debug: LOGGER.exception(e)` behavior.
func (d *Sqlite3Database) safeOp(ctx context.Context, fn dbOp) ResponseBody {
func (d *Sqlite3Database) safeOp(ctx context.Context, fn dbOp) (any, error) {
d.mu.Lock()
defer d.mu.Unlock()
@@ -162,7 +162,7 @@ func (d *Sqlite3Database) safeOp(ctx context.Context, fn dbOp) ResponseBody {
if debug {
logger.Error("failed to begin transaction", "error", err)
}
return ResponseBody{Success: false, Error: err.Error()}
return nil, err
}
if now := utils.GetCurrentTimestamp(); now-d.latestClean > d.deps.Cfg.Others.AutoTokenCleanDuration {
@@ -173,7 +173,7 @@ func (d *Sqlite3Database) safeOp(ctx context.Context, fn dbOp) ResponseBody {
if debug {
logger.Error("failed to clean outdated tokens", "error", err)
}
return ResponseBody{Success: false, Error: err.Error()}
return nil, err
}
}
@@ -183,15 +183,15 @@ func (d *Sqlite3Database) safeOp(ctx context.Context, fn dbOp) ResponseBody {
if debug {
logger.Error("database operation failed", "error", err)
}
return ResponseBody{Success: false, Error: err.Error()}
return nil, err
}
if err := tx.Commit(); err != nil {
if debug {
logger.Error("failed to commit transaction", "error", err)
}
return ResponseBody{Success: false, Error: err.Error()}
return nil, err
}
return ResponseBody{Success: true, Data: data}
return data, nil
}
// region: Token-related Internal Operations
@@ -246,7 +246,7 @@ func tokenOperIsAdmin(ctx context.Context, tx *sql.Tx, username string) (bool, e
// region: Common Namespace
func (d *Sqlite3Database) CommonSalt(ctx context.Context, username string) ResponseBody {
func (d *Sqlite3Database) CommonSalt(ctx context.Context, username string) (any, error) {
return d.safeOp(ctx, func(ctx context.Context, tx *sql.Tx) (any, error) {
salt := utils.GenerateSalt()
if _, err := tx.ExecContext(ctx, "UPDATE user SET [salt] = ? WHERE [name] = ?;", salt, username); err != nil {
@@ -256,7 +256,7 @@ func (d *Sqlite3Database) CommonSalt(ctx context.Context, username string) Respo
})
}
func (d *Sqlite3Database) CommonLogin(ctx context.Context, username, password, clientUa, clientIp string) ResponseBody {
func (d *Sqlite3Database) CommonLogin(ctx context.Context, username, password, clientUa, clientIp string) (any, error) {
return d.safeOp(ctx, func(ctx context.Context, tx *sql.Tx) (any, error) {
var gottenPassword string
var gottenSalt int64
@@ -278,7 +278,7 @@ func (d *Sqlite3Database) CommonLogin(ctx context.Context, username, password, c
})
}
func (d *Sqlite3Database) CommonWebLogin(ctx context.Context, username, password, clientUa, clientIp string) ResponseBody {
func (d *Sqlite3Database) CommonWebLogin(ctx context.Context, username, password, clientUa, clientIp string) (any, error) {
return d.safeOp(ctx, func(ctx context.Context, tx *sql.Tx) (any, error) {
logger := d.deps.Logger
logger.Debug("WebLogin username", "username", username)
@@ -298,7 +298,7 @@ func (d *Sqlite3Database) CommonWebLogin(ctx context.Context, username, password
})
}
func (d *Sqlite3Database) CommonLogout(ctx context.Context, token string) ResponseBody {
func (d *Sqlite3Database) CommonLogout(ctx context.Context, token string) (any, error) {
return d.safeOp(ctx, func(ctx context.Context, tx *sql.Tx) (any, error) {
if err := tokenOperCheckValid(ctx, tx, token); err != nil {
return nil, err
@@ -310,7 +310,7 @@ func (d *Sqlite3Database) CommonLogout(ctx context.Context, token string) Respon
})
}
func (d *Sqlite3Database) CommonTokenValid(ctx context.Context, token string) ResponseBody {
func (d *Sqlite3Database) CommonTokenValid(ctx context.Context, token string) (any, error) {
return d.safeOp(ctx, func(ctx context.Context, tx *sql.Tx) (any, error) {
if err := tokenOperCheckValid(ctx, tx, token); err != nil {
return nil, err
@@ -323,7 +323,7 @@ func (d *Sqlite3Database) CommonTokenValid(ctx context.Context, token string) Re
// region: Calendar Namespace
func (d *Sqlite3Database) CalendarGetFull(ctx context.Context, token string, startDateTime, endDateTime int64) ResponseBody {
func (d *Sqlite3Database) CalendarGetFull(ctx context.Context, token string, startDateTime, endDateTime int64) (any, error) {
return d.safeOp(ctx, func(ctx context.Context, tx *sql.Tx) (any, error) {
username, err := tokenOperGetUsername(ctx, tx, token)
if err != nil {
@@ -353,7 +353,7 @@ func (d *Sqlite3Database) CalendarGetFull(ctx context.Context, token string, sta
})
}
func (d *Sqlite3Database) CalendarGetList(ctx context.Context, token string, startDateTime, endDateTime int64) ResponseBody {
func (d *Sqlite3Database) CalendarGetList(ctx context.Context, token string, startDateTime, endDateTime int64) (any, error) {
return d.safeOp(ctx, func(ctx context.Context, tx *sql.Tx) (any, error) {
username, err := tokenOperGetUsername(ctx, tx, token)
if err != nil {
@@ -382,7 +382,7 @@ func (d *Sqlite3Database) CalendarGetList(ctx context.Context, token string, sta
})
}
func (d *Sqlite3Database) CalendarGetDetail(ctx context.Context, token, uuid string) ResponseBody {
func (d *Sqlite3Database) CalendarGetDetail(ctx context.Context, token, uuid string) (any, error) {
return d.safeOp(ctx, func(ctx context.Context, tx *sql.Tx) (any, error) {
if err := tokenOperCheckValid(ctx, tx, token); err != nil {
return nil, err
@@ -401,7 +401,7 @@ func (d *Sqlite3Database) CalendarGetDetail(ctx context.Context, token, uuid str
})
}
func (d *Sqlite3Database) CalendarUpdate(ctx context.Context, token, uuid, lastChange string, opts CalendarUpdateOptions) ResponseBody {
func (d *Sqlite3Database) CalendarUpdate(ctx context.Context, token, uuid, lastChange string, opts CalendarUpdateOptions) (any, error) {
return d.safeOp(ctx, func(ctx context.Context, tx *sql.Tx) (any, error) {
if err := tokenOperCheckValid(ctx, tx, token); err != nil {
return nil, err
@@ -489,7 +489,7 @@ func (d *Sqlite3Database) CalendarUpdate(ctx context.Context, token, uuid, lastC
})
}
func (d *Sqlite3Database) CalendarAdd(ctx context.Context, token, belongTo, title, description string, eventDateTimeStart, eventDateTimeEnd int64, loopRules string, timezoneOffset int64) ResponseBody {
func (d *Sqlite3Database) CalendarAdd(ctx context.Context, token, belongTo, title, description string, eventDateTimeStart, eventDateTimeEnd int64, loopRules string, timezoneOffset int64) (any, error) {
return d.safeOp(ctx, func(ctx context.Context, tx *sql.Tx) (any, error) {
if err := tokenOperCheckValid(ctx, tx, token); err != nil {
return nil, err
@@ -511,7 +511,7 @@ func (d *Sqlite3Database) CalendarAdd(ctx context.Context, token, belongTo, titl
})
}
func (d *Sqlite3Database) CalendarDelete(ctx context.Context, token, uuid, lastChange string) ResponseBody {
func (d *Sqlite3Database) CalendarDelete(ctx context.Context, token, uuid, lastChange string) (any, error) {
return d.safeOp(ctx, func(ctx context.Context, tx *sql.Tx) (any, error) {
if err := tokenOperCheckValid(ctx, tx, token); err != nil {
return nil, err
@@ -535,7 +535,7 @@ func (d *Sqlite3Database) CalendarDelete(ctx context.Context, token, uuid, lastC
// region: Collection Namespace
func (d *Sqlite3Database) CollectionGetFullOwn(ctx context.Context, token string) ResponseBody {
func (d *Sqlite3Database) CollectionGetFullOwn(ctx context.Context, token string) (any, error) {
return d.safeOp(ctx, func(ctx context.Context, tx *sql.Tx) (any, error) {
username, err := tokenOperGetUsername(ctx, tx, token)
if err != nil {
@@ -561,7 +561,7 @@ func (d *Sqlite3Database) CollectionGetFullOwn(ctx context.Context, token string
})
}
func (d *Sqlite3Database) CollectionGetListOwn(ctx context.Context, token string) ResponseBody {
func (d *Sqlite3Database) CollectionGetListOwn(ctx context.Context, token string) (any, error) {
return d.safeOp(ctx, func(ctx context.Context, tx *sql.Tx) (any, error) {
username, err := tokenOperGetUsername(ctx, tx, token)
if err != nil {
@@ -587,7 +587,7 @@ func (d *Sqlite3Database) CollectionGetListOwn(ctx context.Context, token string
})
}
func (d *Sqlite3Database) CollectionGetDetailOwn(ctx context.Context, token, uuid string) ResponseBody {
func (d *Sqlite3Database) CollectionGetDetailOwn(ctx context.Context, token, uuid string) (any, error) {
return d.safeOp(ctx, func(ctx context.Context, tx *sql.Tx) (any, error) {
username, err := tokenOperGetUsername(ctx, tx, token)
if err != nil {
@@ -605,7 +605,7 @@ func (d *Sqlite3Database) CollectionGetDetailOwn(ctx context.Context, token, uui
})
}
func (d *Sqlite3Database) CollectionAddOwn(ctx context.Context, token, name string) ResponseBody {
func (d *Sqlite3Database) CollectionAddOwn(ctx context.Context, token, name string) (any, error) {
return d.safeOp(ctx, func(ctx context.Context, tx *sql.Tx) (any, error) {
username, err := tokenOperGetUsername(ctx, tx, token)
if err != nil {
@@ -620,7 +620,7 @@ func (d *Sqlite3Database) CollectionAddOwn(ctx context.Context, token, name stri
})
}
func (d *Sqlite3Database) CollectionUpdateOwn(ctx context.Context, token, uuid, name, lastChange string) ResponseBody {
func (d *Sqlite3Database) CollectionUpdateOwn(ctx context.Context, token, uuid, name, lastChange string) (any, error) {
return d.safeOp(ctx, func(ctx context.Context, tx *sql.Tx) (any, error) {
if err := tokenOperCheckValid(ctx, tx, token); err != nil {
return nil, err
@@ -641,7 +641,7 @@ func (d *Sqlite3Database) CollectionUpdateOwn(ctx context.Context, token, uuid,
})
}
func (d *Sqlite3Database) CollectionDeleteOwn(ctx context.Context, token, uuid, lastChange string) ResponseBody {
func (d *Sqlite3Database) CollectionDeleteOwn(ctx context.Context, token, uuid, lastChange string) (any, error) {
return d.safeOp(ctx, func(ctx context.Context, tx *sql.Tx) (any, error) {
if err := tokenOperCheckValid(ctx, tx, token); err != nil {
return nil, err
@@ -661,7 +661,7 @@ func (d *Sqlite3Database) CollectionDeleteOwn(ctx context.Context, token, uuid,
})
}
func (d *Sqlite3Database) CollectionGetSharing(ctx context.Context, token, uuid string) ResponseBody {
func (d *Sqlite3Database) CollectionGetSharing(ctx context.Context, token, uuid string) (any, error) {
return d.safeOp(ctx, func(ctx context.Context, tx *sql.Tx) (any, error) {
if err := tokenOperCheckValid(ctx, tx, token); err != nil {
return nil, err
@@ -686,7 +686,7 @@ func (d *Sqlite3Database) CollectionGetSharing(ctx context.Context, token, uuid
})
}
func (d *Sqlite3Database) CollectionDeleteSharing(ctx context.Context, token, uuid, target, lastChange string) ResponseBody {
func (d *Sqlite3Database) CollectionDeleteSharing(ctx context.Context, token, uuid, target, lastChange string) (any, error) {
return d.safeOp(ctx, func(ctx context.Context, tx *sql.Tx) (any, error) {
if err := tokenOperCheckValid(ctx, tx, token); err != nil {
return nil, err
@@ -720,7 +720,7 @@ func (d *Sqlite3Database) CollectionDeleteSharing(ctx context.Context, token, uu
})
}
func (d *Sqlite3Database) CollectionAddSharing(ctx context.Context, token, uuid, target, lastChange string) ResponseBody {
func (d *Sqlite3Database) CollectionAddSharing(ctx context.Context, token, uuid, target, lastChange string) (any, error) {
return d.safeOp(ctx, func(ctx context.Context, tx *sql.Tx) (any, error) {
if err := tokenOperCheckValid(ctx, tx, token); err != nil {
return nil, err
@@ -751,7 +751,7 @@ func (d *Sqlite3Database) CollectionAddSharing(ctx context.Context, token, uuid,
})
}
func (d *Sqlite3Database) CollectionGetShared(ctx context.Context, token string) ResponseBody {
func (d *Sqlite3Database) CollectionGetShared(ctx context.Context, token string) (any, error) {
return d.safeOp(ctx, func(ctx context.Context, tx *sql.Tx) (any, error) {
username, err := tokenOperGetUsername(ctx, tx, token)
if err != nil {
@@ -784,7 +784,7 @@ func (d *Sqlite3Database) CollectionGetShared(ctx context.Context, token string)
// region: Todo Namespace
func (d *Sqlite3Database) TodoGetFull(ctx context.Context, token string) ResponseBody {
func (d *Sqlite3Database) TodoGetFull(ctx context.Context, token string) (any, error) {
return d.safeOp(ctx, func(ctx context.Context, tx *sql.Tx) (any, error) {
username, err := tokenOperGetUsername(ctx, tx, token)
if err != nil {
@@ -810,7 +810,7 @@ func (d *Sqlite3Database) TodoGetFull(ctx context.Context, token string) Respons
})
}
func (d *Sqlite3Database) TodoGetList(ctx context.Context, token string) ResponseBody {
func (d *Sqlite3Database) TodoGetList(ctx context.Context, token string) (any, error) {
return d.safeOp(ctx, func(ctx context.Context, tx *sql.Tx) (any, error) {
username, err := tokenOperGetUsername(ctx, tx, token)
if err != nil {
@@ -836,7 +836,7 @@ func (d *Sqlite3Database) TodoGetList(ctx context.Context, token string) Respons
})
}
func (d *Sqlite3Database) TodoGetDetail(ctx context.Context, token, uuid string) ResponseBody {
func (d *Sqlite3Database) TodoGetDetail(ctx context.Context, token, uuid string) (any, error) {
return d.safeOp(ctx, func(ctx context.Context, tx *sql.Tx) (any, error) {
username, err := tokenOperGetUsername(ctx, tx, token)
if err != nil {
@@ -854,7 +854,7 @@ func (d *Sqlite3Database) TodoGetDetail(ctx context.Context, token, uuid string)
})
}
func (d *Sqlite3Database) TodoAdd(ctx context.Context, token string) ResponseBody {
func (d *Sqlite3Database) TodoAdd(ctx context.Context, token string) (any, error) {
return d.safeOp(ctx, func(ctx context.Context, tx *sql.Tx) (any, error) {
username, err := tokenOperGetUsername(ctx, tx, token)
if err != nil {
@@ -870,7 +870,7 @@ func (d *Sqlite3Database) TodoAdd(ctx context.Context, token string) ResponseBod
})
}
func (d *Sqlite3Database) TodoUpdate(ctx context.Context, token, uuid, data, lastChange string) ResponseBody {
func (d *Sqlite3Database) TodoUpdate(ctx context.Context, token, uuid, data, lastChange string) (any, error) {
return d.safeOp(ctx, func(ctx context.Context, tx *sql.Tx) (any, error) {
// check valid token
if err := tokenOperCheckValid(ctx, tx, token); err != nil {
@@ -894,7 +894,7 @@ func (d *Sqlite3Database) TodoUpdate(ctx context.Context, token, uuid, data, las
})
}
func (d *Sqlite3Database) TodoDelete(ctx context.Context, token, uuid, lastChange string) ResponseBody {
func (d *Sqlite3Database) TodoDelete(ctx context.Context, token, uuid, lastChange string) (any, error) {
return d.safeOp(ctx, func(ctx context.Context, tx *sql.Tx) (any, error) {
// check valid token
if err := tokenOperCheckValid(ctx, tx, token); err != nil {
@@ -921,7 +921,7 @@ func (d *Sqlite3Database) TodoDelete(ctx context.Context, token, uuid, lastChang
// region: Admin Namespace
func (d *Sqlite3Database) AdminGet(ctx context.Context, token string) ResponseBody {
func (d *Sqlite3Database) AdminGet(ctx context.Context, token string) (any, error) {
return d.safeOp(ctx, func(ctx context.Context, tx *sql.Tx) (any, error) {
username, err := tokenOperGetUsername(ctx, tx, token)
if err != nil {
@@ -955,7 +955,7 @@ func (d *Sqlite3Database) AdminGet(ctx context.Context, token string) ResponseBo
})
}
func (d *Sqlite3Database) AdminAdd(ctx context.Context, token, username string) ResponseBody {
func (d *Sqlite3Database) AdminAdd(ctx context.Context, token, username string) (any, error) {
return d.safeOp(ctx, func(ctx context.Context, tx *sql.Tx) (any, error) {
caller, err := tokenOperGetUsername(ctx, tx, token)
if err != nil {
@@ -976,7 +976,7 @@ func (d *Sqlite3Database) AdminAdd(ctx context.Context, token, username string)
})
}
func (d *Sqlite3Database) AdminUpdate(ctx context.Context, token, username string, opts AdminUpdateOptions) ResponseBody {
func (d *Sqlite3Database) AdminUpdate(ctx context.Context, token, username string, opts AdminUpdateOptions) (any, error) {
return d.safeOp(ctx, func(ctx context.Context, tx *sql.Tx) (any, error) {
caller, err := tokenOperGetUsername(ctx, tx, token)
if err != nil {
@@ -1030,7 +1030,7 @@ func (d *Sqlite3Database) AdminUpdate(ctx context.Context, token, username strin
})
}
func (d *Sqlite3Database) AdminDelete(ctx context.Context, token, username string) ResponseBody {
func (d *Sqlite3Database) AdminDelete(ctx context.Context, token, username string) (any, error) {
return d.safeOp(ctx, func(ctx context.Context, tx *sql.Tx) (any, error) {
caller, err := tokenOperGetUsername(ctx, tx, token)
if err != nil {
@@ -1062,7 +1062,7 @@ func (d *Sqlite3Database) AdminDelete(ctx context.Context, token, username strin
// region: Profile Namespace
func (d *Sqlite3Database) ProfileIsAdmin(ctx context.Context, token string) ResponseBody {
func (d *Sqlite3Database) ProfileIsAdmin(ctx context.Context, token string) (any, error) {
return d.safeOp(ctx, func(ctx context.Context, tx *sql.Tx) (any, error) {
username, err := tokenOperGetUsername(ctx, tx, token)
if err != nil {
@@ -1072,7 +1072,7 @@ func (d *Sqlite3Database) ProfileIsAdmin(ctx context.Context, token string) Resp
})
}
func (d *Sqlite3Database) ProfileChangePassword(ctx context.Context, token, password string) ResponseBody {
func (d *Sqlite3Database) ProfileChangePassword(ctx context.Context, token, password string) (any, error) {
return d.safeOp(ctx, func(ctx context.Context, tx *sql.Tx) (any, error) {
username, err := tokenOperGetUsername(ctx, tx, token)
if err != nil {
@@ -1085,7 +1085,7 @@ func (d *Sqlite3Database) ProfileChangePassword(ctx context.Context, token, pass
})
}
func (d *Sqlite3Database) ProfileGetToken(ctx context.Context, token string) ResponseBody {
func (d *Sqlite3Database) ProfileGetToken(ctx context.Context, token string) (any, error) {
return d.safeOp(ctx, func(ctx context.Context, tx *sql.Tx) (any, error) {
username, err := tokenOperGetUsername(ctx, tx, token)
if err != nil {
@@ -1112,7 +1112,7 @@ func (d *Sqlite3Database) ProfileGetToken(ctx context.Context, token string) Res
})
}
func (d *Sqlite3Database) ProfileDeleteToken(ctx context.Context, token, deleteToken string) ResponseBody {
func (d *Sqlite3Database) ProfileDeleteToken(ctx context.Context, token, deleteToken string) (any, error) {
return d.safeOp(ctx, func(ctx context.Context, tx *sql.Tx) (any, error) {
username, err := tokenOperGetUsername(ctx, tx, token)
if err != nil {