database

package
v0.0.0-...-b66f058 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 30, 2025 License: AGPL-3.0 Imports: 15 Imported by: 0

Documentation

Index

Constants

View Source
const GBucketBackupData = "backup_data"
View Source
const GBucketEmailIndex = "emails_users_index"
View Source
const GBucketRefreshToken = "refresh_tokens"
View Source
const GBucketSync = "sync"
View Source
const GBucketUsers = "users"

bucket du handler auth

Variables

View Source
var MakeErrBucketNotFound func(bucketName string) error = func(bucketName string) error {
	return fmt.Errorf("le bucket %s n'existe pas", bucketName)
}
View Source
var MakeErrDeserializeError func(name string, err error) error = func(name string, err error) error {
	return fmt.Errorf("impossible de deserialiser l'objet %s: %w", name, err)
}
View Source
var MakeErrSerializeError func(name string, err error) error = func(name string, err error) error {
	return fmt.Errorf("impossible de serialiser l'objet %s: %w", name, err)
}

Functions

func Backup

func Backup(hnd *Handler, path string, now time.Time) error

Backup exécute une sauvegarde cohérente des bases de données auth et sync. Elle crée deux fichiers de sauvegarde horodatés dans le répertoire `path`. La sauvegarde est une opération non-destructive (en lecture seule) sur les bases de production. Un "breakpoint" temporel est injecté dans la sauvegarde de la base de synchronisation pour permettre une récupération de données après une restauration.

func DecodeTimestamp

func DecodeTimestamp(data []byte) (*time.Time, error)

Decode un timestamp depuis un buffer de 16 bytes exactement

func EncodeTimestamp

func EncodeTimestamp(t time.Time) ([]byte, error)

Encode un timestamp dans un buffer de 16 bytes exactement

func GetRescueDelay

func GetRescueDelay() int

Retourne le nombre de jours max où le serveur peut rester en mode rescue

func GetSyncRows

func GetSyncRows(tx *bolt.Tx, userUUID uuid.UUID, excludeDatabaseUUID uuid.UUID, fromDate time.Time, maxOperations uint64) ([]*pb.SyncRowStorage, bool, *timestamppb.Timestamp, error)

GetSyncRows récupère toutes les SyncRows pour un utilisateur à partir d'une certaine date, en excluant celles provenant d'un `databaseId` spécifique.

func MakeSyncRowStorageKey

func MakeSyncRowStorageKey(updatedAt time.Time, userUUID uuid.UUID, databaseUUID uuid.UUID, entityUUID uuid.UUID, clientTaskUUID uuid.UUID) ([]byte, error)

MakeSyncRowStorageKey fabrique la clée de stockage du bucket de sync La structure est optimisée pour la localité des données par utilisateur et le tri chronologique. [userUUID][timestamp][databaseUUID][entityUUID][clientTaskUUID] [ 16 ][ 16 ][ 16 ][ 16 ][ 16 ] = 80 octets

func ParseDatabaseId

func ParseDatabaseId(key []byte) (databaseID uuid.UUID, err error)

ParseDatabaseId extrait le databaseID d'une clé de 80 octets. La structure de la clé est : [0-15]: userUUID | [16-31]: timestamp | [32-47]: databaseUUID | [48-63]: entityUUID | [64-79]: clientTaskUUID

func ParseUserUUID

func ParseUserUUID(key []byte) (userUUID uuid.UUID, err error)

ParseUserUUID extrait l'user uuid d'une clé de 80 octets. La structure de la clé est : [0-15]: userUUID | [16-31]: timestamp | [32-47]: databaseUUID | [48-63]: entityUUID | [64-79]: clientTaskUUID

func SetAndCheckRescueMode

func SetAndCheckRescueMode(handler *Handler, userUUID uuid.UUID, rescueDelay int) error

func StoreSyncRow

func StoreSyncRow(tx *bolt.Tx, data *SyncData) error

Insert une ligne dans le bucket Sync Si un pre insert hook est trigger, retourne un payload à ajouter à la réponse

func UpsertRow

func UpsertRow(tx *bolt.Tx, key []byte, row *pb.SyncRowStorage) error

Met à jour une ligne de la table de sync

Types

type Handler

type Handler struct {
	Rescue *RescueData
	// contains filtered or unexported fields
}

func Open

func Open(path string, customInitializer func(*bolt.Tx) error) *Handler

Ouvre et retourne les bases de données Ne pas oublier de faire un defer handler.Close()

func (*Handler) BatchCtxSync

func (handler *Handler) BatchCtxSync(ctx context.Context, fn func(tx *bolt.Tx) error) error

func (*Handler) Close

func (handler *Handler) Close()

func (*Handler) UpdateCtxAuth

func (handler *Handler) UpdateCtxAuth(ctx context.Context, fn func(tx *bolt.Tx) error) error

func (*Handler) UpdateCtxSync

func (handler *Handler) UpdateCtxSync(ctx context.Context, fn func(tx *bolt.Tx) error) error

func (*Handler) ViewCtxAuth

func (handler *Handler) ViewCtxAuth(ctx context.Context, fn func(tx *bolt.Tx) error) error

func (*Handler) ViewCtxSync

func (handler *Handler) ViewCtxSync(ctx context.Context, fn func(tx *bolt.Tx) error) error

type RescueData

type RescueData struct {
	UsersAreSynced map[uuid.UUID]bool
	Breakpoint     time.Time
	StartedAt      time.Time
}

type SyncData

type SyncData struct {
	UserUUID     uuid.UUID
	Task         *pb.SyncTask //la syncTask d'origine
	DatabaseUUID uuid.UUID
	PreInsert    hooks.PreUpsertHook
	OnSuccess    hooks.PostUpsertHook
}

Structure de transition pour store une entitée

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL