Select Git revision
object-storage.go
object-storage.go 7.44 KiB
package object_storage
import (
"bufio"
"bytes"
"context"
"encoding/json"
"fmt"
"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
"github.com/Azure/azure-sdk-for-go/sdk/storage/azblob"
"log"
"math/rand"
. "node/types"
. "node/utilities"
"os"
"strconv"
"time"
)
// AddTransactionToBlobStorage Add transaction to blob storage if it isn't in the database already and returns the database
func AddTransactionToBlobStorage(transaction Transaction, database Database, os Blob) Database {
for _, transactionInDatabase := range database {
if transactionInDatabase.Id == transaction.Id {
return database
}
}
database = append(database, transaction)
WriteDatabaseToBlobStorage(database, os)
return database
}
func FakeTransaction(transactionToFake Transaction, fakeTransaction Transaction, database Database) Database {
for i, trans := range database {
if trans.Id == transactionToFake.Id {
fakeTransaction.Id = transactionToFake.Id
database[i] = fakeTransaction
break
}
}
return database
}
func ReadDatabaseFromBlobStorage(blob Blob) Database {
ctx := context.Background()
// Download the blob
get, err := blob.BlockBlobClient.Download(ctx, nil)
if err != nil {
log.Fatal(err)
}
downloadedData := &bytes.Buffer{}
reader := get.Body(azblob.RetryReaderOptions{})
_, err = downloadedData.ReadFrom(reader)
if err != nil {
log.Fatal(err)
}
err = reader.Close()
if err != nil {
log.Fatal(err)
}
var database Database
err = json.Unmarshal(downloadedData.Bytes(), &database)
if err != nil {
log.Fatal(err)
}
fmt.Println(downloadedData.String())
return database