package database import ( "context" "log/slog" "github.com/yyc12345/coconut-leaf/backend/config" ) // 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 (any, error). The server layer // is responsible for wrapping the result into an HTTP response body. type Database interface { Init(username, password string) error Close() error CommonSalt(ctx context.Context, username string) (any, error) CommonLogin(ctx context.Context, username, password, clientUa, clientIp string) (any, error) CommonWebLogin(ctx context.Context, username, password, clientUa, clientIp string) (any, error) CommonLogout(ctx context.Context, token string) (any, error) CommonTokenValid(ctx context.Context, token string) (any, error) CalendarGetFull(ctx context.Context, token string, startDateTime, endDateTime int64) (any, error) CalendarGetList(ctx context.Context, token string, startDateTime, endDateTime int64) (any, error) CalendarGetDetail(ctx context.Context, token, uuid string) (any, error) CalendarUpdate(ctx context.Context, token, uuid, lastChange string, opts CalendarUpdateOptions) (any, error) CalendarAdd(ctx context.Context, token, belongTo, title, description string, eventDateTimeStart, eventDateTimeEnd int64, loopRules string, timezoneOffset int64) (any, error) CalendarDelete(ctx context.Context, token, uuid, lastChange string) (any, error) CollectionGetFullOwn(ctx context.Context, token string) (any, error) CollectionGetListOwn(ctx context.Context, token string) (any, error) CollectionGetDetailOwn(ctx context.Context, token, uuid string) (any, error) CollectionAddOwn(ctx context.Context, token, name string) (any, error) CollectionUpdateOwn(ctx context.Context, token, uuid, name, lastChange string) (any, error) CollectionDeleteOwn(ctx context.Context, token, uuid, lastChange string) (any, error) CollectionGetSharing(ctx context.Context, token, uuid string) (any, error) CollectionDeleteSharing(ctx context.Context, token, uuid, target, lastChange string) (any, error) CollectionAddSharing(ctx context.Context, token, uuid, target, lastChange string) (any, error) CollectionGetShared(ctx context.Context, token string) (any, error) TodoGetFull(ctx context.Context, token string) (any, error) TodoGetList(ctx context.Context, token string) (any, error) TodoGetDetail(ctx context.Context, token, uuid string) (any, error) TodoAdd(ctx context.Context, token string) (any, error) TodoUpdate(ctx context.Context, token, uuid, data, lastChange string) (any, error) TodoDelete(ctx context.Context, token, uuid, lastChange string) (any, error) AdminGet(ctx context.Context, token string) (any, error) AdminAdd(ctx context.Context, token, username string) (any, error) AdminUpdate(ctx context.Context, token, username string, opts AdminUpdateOptions) (any, error) AdminDelete(ctx context.Context, token, username string) (any, error) ProfileIsAdmin(ctx context.Context, token string) (any, error) ProfileChangePassword(ctx context.Context, token, password string) (any, error) ProfileGetToken(ctx context.Context, token string) (any, error) ProfileDeleteToken(ctx context.Context, token, deleteToken string) (any, error) }