Skip to content

Commit

Permalink
Save json to firestore
Browse files Browse the repository at this point in the history
  • Loading branch information
mpppk committed Jul 21, 2019
1 parent 71f3aad commit 8eb53e1
Showing 1 changed file with 13 additions and 64 deletions.
77 changes: 13 additions & 64 deletions storage/firestore.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ package storage

import (
"context"
"log"
"encoding/json"

"github.com/pkg/errors"

Expand All @@ -24,17 +24,7 @@ type Cache struct {
}

type cacheDoc struct {
WordsList []*fireStoreWords
}

type fireStoreWords struct {
Id int
Words []*fireStoreWord
}

type fireStoreWord struct {
Id int
Bits int
WordsList string
}

func NewFireStore(ctx context.Context, filePath string) (storage *FireStore, err error) {
Expand All @@ -58,10 +48,13 @@ func NewFireStore(ctx context.Context, filePath string) (storage *FireStore, err

func (f *FireStore) Set(indices []int, wordsList [][]*ktkn.Word) error {
ctx := context.Background()
fswordsList := fromWordsList(wordsList)
doc := &cacheDoc{WordsList: fswordsList}
log.Println("doc", len(doc.WordsList))
_, err := f.client.Collection(f.collectionName).Doc(toStorageStrKey(indices)).Set(ctx, doc)
wl := wordsList
if wl == nil {
wl = make([][]*ktkn.Word, 0)
}
wordsListJsonBytes, err := json.Marshal(wordsList)
doc := &cacheDoc{WordsList: string(wordsListJsonBytes)}
_, err = f.client.Collection(f.collectionName).Doc(toStorageStrKey(indices)).Set(ctx, doc)
if err != nil {
return errors.Wrap(err, "failed to set cache to firestore")
}
Expand All @@ -78,58 +71,14 @@ func (f *FireStore) Get(indices []int) ([][]*ktkn.Word, bool, error) {
if err != nil {
return nil, false, errors.Wrapf(err, "failed to get cache from firestore. indices: %s", key)
}
//var WordsList [][]*fireStoreWord
//var WordsList [][]*ktkn.Word
var doc cacheDoc
if err := dsnap.DataTo(&doc); err != nil {
return nil, false, errors.Wrap(err, "failed to convert firestore data to WordsList")
}
wordsList := toWordsList(doc.WordsList)
log.Println("firestore get")
log.Println(doc.WordsList)

return wordsList, true, nil
}

func fromWord(word *ktkn.Word) *fireStoreWord {
return &fireStoreWord{
Id: int(word.Id),
Bits: int(word.Bits),
}
}

func fromWords(id int, words []*ktkn.Word) *fireStoreWords {
fswords := &fireStoreWords{Id: id, Words: []*fireStoreWord{}}
for _, word := range words {
fswords.Words = append(fswords.Words, fromWord(word))
}
return fswords
}

func fromWordsList(wordsList [][]*ktkn.Word) (fswordsList []*fireStoreWords) {
for i, words := range wordsList {
fswordsList = append(fswordsList, fromWords(i, words))
}
return
}

func toWord(fsword *fireStoreWord) *ktkn.Word {
return &ktkn.Word{
Id: ktkn.WordId(fsword.Id),
Bits: ktkn.WordBits(fsword.Bits),
}
}

func toWords(fswords *fireStoreWords) (words []*ktkn.Word) {
for _, fsword := range fswords.Words {
words = append(words, toWord(fsword))
}
return
}

func toWordsList(fswordsList []*fireStoreWords) (wordsList [][]*ktkn.Word) {
for _, fswords := range fswordsList {
wordsList = append(wordsList, toWords(fswords))
var wordsList [][]*ktkn.Word
if err = json.Unmarshal([]byte(doc.WordsList), &wordsList); err != nil {
return nil, false, errors.Wrap(err, "failed to unmarshal firestore results")
}
return
return wordsList, true, nil
}

0 comments on commit 8eb53e1

Please sign in to comment.