Skip to content
Snippets Groups Projects
Select Git revision
  • 0d60943db43c1f71641f1338615100093da66486
  • master default protected
2 results

object-storage.go

Blame
  • 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