97 lines
4.6 KiB
Go
97 lines
4.6 KiB
Go
|
|
package database
|
||
|
|
|
||
|
|
import (
|
||
|
|
"context"
|
||
|
|
"log/slog"
|
||
|
|
|
||
|
|
"github.com/yyc12345/coconut-leaf/backend/config"
|
||
|
|
)
|
||
|
|
|
||
|
|
// ResponseBody is the envelope returned by every Database operation, mirroring
|
||
|
|
// the legacy database.ResponseBody. Data is any so each method can return its
|
||
|
|
// own shape (scalar, []string, []any row, [][]any rows, ...). JSON tags keep the
|
||
|
|
// legacy lowercase keys (success/error/data) used by ConstructResponseBody.
|
||
|
|
type ResponseBody struct {
|
||
|
|
Success bool `json:"success"`
|
||
|
|
Error string `json:"error"`
|
||
|
|
Data any `json:"data"`
|
||
|
|
}
|
||
|
|
|
||
|
|
// CalendarUpdateOptions carries the optional fields of CalendarUpdate. A nil
|
||
|
|
// pointer means "not provided", mirroring the legacy **optArgs semantics: a
|
||
|
|
// field is applied only when its pointer is non-nil.
|
||
|
|
type CalendarUpdateOptions struct {
|
||
|
|
BelongTo *string
|
||
|
|
Title *string
|
||
|
|
Description *string
|
||
|
|
EventDateTimeStart *int64
|
||
|
|
EventDateTimeEnd *int64
|
||
|
|
LoopRules *string
|
||
|
|
TimezoneOffset *int64
|
||
|
|
}
|
||
|
|
|
||
|
|
// AdminUpdateOptions carries the optional fields of AdminUpdate. A nil pointer
|
||
|
|
// means "not provided".
|
||
|
|
type AdminUpdateOptions struct {
|
||
|
|
Password *string
|
||
|
|
IsAdmin *bool
|
||
|
|
}
|
||
|
|
|
||
|
|
// Deps bundles the shared dependencies a database implementation needs: the
|
||
|
|
// loaded configuration and a logger. It is passed to database constructors and
|
||
|
|
// stored inside each implementation so they can read config and emit logs.
|
||
|
|
type Deps struct {
|
||
|
|
Cfg *config.Config
|
||
|
|
Logger *slog.Logger
|
||
|
|
}
|
||
|
|
|
||
|
|
// Database describes every database operation the Gin server may use. It is the
|
||
|
|
// Go equivalent of the legacy CalendarDatabase public surface: each method takes
|
||
|
|
// a context.Context for cancellation and returns a ResponseBody whose
|
||
|
|
// Success/Error fields encode failure (mirroring the legacy decorator behavior).
|
||
|
|
type Database interface {
|
||
|
|
Init(username, password string) error
|
||
|
|
Close() error
|
||
|
|
|
||
|
|
CommonSalt(ctx context.Context, username string) ResponseBody
|
||
|
|
CommonLogin(ctx context.Context, username, password, clientUa, clientIp string) ResponseBody
|
||
|
|
CommonWebLogin(ctx context.Context, username, password, clientUa, clientIp string) ResponseBody
|
||
|
|
CommonLogout(ctx context.Context, token string) ResponseBody
|
||
|
|
CommonTokenValid(ctx context.Context, token string) ResponseBody
|
||
|
|
|
||
|
|
CalendarGetFull(ctx context.Context, token string, startDateTime, endDateTime int64) ResponseBody
|
||
|
|
CalendarGetList(ctx context.Context, token string, startDateTime, endDateTime int64) ResponseBody
|
||
|
|
CalendarGetDetail(ctx context.Context, token, uuid string) ResponseBody
|
||
|
|
CalendarUpdate(ctx context.Context, token, uuid, lastChange string, opts CalendarUpdateOptions) ResponseBody
|
||
|
|
CalendarAdd(ctx context.Context, token, belongTo, title, description string, eventDateTimeStart, eventDateTimeEnd int64, loopRules string, timezoneOffset int64) ResponseBody
|
||
|
|
CalendarDelete(ctx context.Context, token, uuid, lastChange string) ResponseBody
|
||
|
|
|
||
|
|
CollectionGetFullOwn(ctx context.Context, token string) ResponseBody
|
||
|
|
CollectionGetListOwn(ctx context.Context, token string) ResponseBody
|
||
|
|
CollectionGetDetailOwn(ctx context.Context, token, uuid string) ResponseBody
|
||
|
|
CollectionAddOwn(ctx context.Context, token, name string) ResponseBody
|
||
|
|
CollectionUpdateOwn(ctx context.Context, token, uuid, name, lastChange string) ResponseBody
|
||
|
|
CollectionDeleteOwn(ctx context.Context, token, uuid, lastChange string) ResponseBody
|
||
|
|
CollectionGetSharing(ctx context.Context, token, uuid string) ResponseBody
|
||
|
|
CollectionDeleteSharing(ctx context.Context, token, uuid, target, lastChange string) ResponseBody
|
||
|
|
CollectionAddSharing(ctx context.Context, token, uuid, target, lastChange string) ResponseBody
|
||
|
|
CollectionGetShared(ctx context.Context, token string) ResponseBody
|
||
|
|
|
||
|
|
TodoGetFull(ctx context.Context, token string) ResponseBody
|
||
|
|
TodoGetList(ctx context.Context, token string) ResponseBody
|
||
|
|
TodoGetDetail(ctx context.Context, token, uuid string) ResponseBody
|
||
|
|
TodoAdd(ctx context.Context, token string) ResponseBody
|
||
|
|
TodoUpdate(ctx context.Context, token, uuid, data, lastChange string) ResponseBody
|
||
|
|
TodoDelete(ctx context.Context, token, uuid, lastChange string) ResponseBody
|
||
|
|
|
||
|
|
AdminGet(ctx context.Context, token string) ResponseBody
|
||
|
|
AdminAdd(ctx context.Context, token, username string) ResponseBody
|
||
|
|
AdminUpdate(ctx context.Context, token, username string, opts AdminUpdateOptions) ResponseBody
|
||
|
|
AdminDelete(ctx context.Context, token, username string) ResponseBody
|
||
|
|
|
||
|
|
ProfileIsAdmin(ctx context.Context, token string) ResponseBody
|
||
|
|
ProfileChangePassword(ctx context.Context, token, password string) ResponseBody
|
||
|
|
ProfileGetToken(ctx context.Context, token string) ResponseBody
|
||
|
|
ProfileDeleteToken(ctx context.Context, token, deleteToken string) ResponseBody
|
||
|
|
}
|