package database import ( "bytes" "encoding/gob" "fmt" "time" bolt "go.etcd.io/bbolt" ) type User struct { CreatedAt time.Time UpdatedAt time.Time HashedPassword string Profile Profile } type Profile struct { Name string URL string Photo string Email string } func UpdateUser(boltdb *bolt.DB, identifier string, user User) error { bucketName := []byte(usersBucket) err := boltdb.Update(func(tx *bolt.Tx) error { bucket := tx.Bucket(bucketName) if bucket == nil { return fmt.Errorf("the %s bucket does not exist", string(bucketName)) } key := []byte(identifier) buffer := new(bytes.Buffer) if err := gob.NewEncoder(buffer).Encode(user); err != nil { return fmt.Errorf( "unable to encode the user data: %w", err, ) } if err := bucket.Put(key, buffer.Bytes()); err != nil { return fmt.Errorf( "unable to update the user in the %s bucket: %w", string(bucketName), err, ) } return nil }) if err != nil { return fmt.Errorf("error updating the user in the database: %w", err) } return nil }