socialnetworknews-api

git clone git://archive.git.mtrnord.blog/SocialNetworkNews/socialnetworknews-api.git
Log | Files | Refs | LICENSE

commit 37edaf489c7a9e9d4f94bc6ee6c0bde9ebb47bbd
parent 0ebd0e0dab4a088f21475b2642fb2d81997d8a8c
Author: MTRNord <mtrnord1@gmail.com>
Date:   Tue,  3 Apr 2018 18:16:35 +0200

Return basic author data

Diffstat:
Mapi/login/twitter.go | 22++++++++++++++++------
Mapi/webserver.go | 48++++++++++++++++++++++++++++++++++++++++++++++--
2 files changed, 62 insertions(+), 8 deletions(-)

diff --git a/api/login/twitter.go b/api/login/twitter.go @@ -43,12 +43,18 @@ func getUserUUID(id string) (string, error) { return uuidS, DBerr } -func saveTUser(id, accessToken, accessSecret string, data []byte) error { +func saveTUser(id, accessToken, accessSecret, name string, data []byte) error { dataDB, err := db.OpenDB() if err != nil { return err } + puuid, UUIDerr := uuid.NewV4() + if UUIDerr != nil { + return UUIDerr + } + newUUID := puuid.String() + return dataDB.Update(func(txn *badger.Txn) error { ATerr := txn.Set([]byte(fmt.Sprintf("users|T|%s|accessToken", id)), []byte(accessToken)) if ATerr != nil { @@ -60,11 +66,15 @@ func saveTUser(id, accessToken, accessSecret string, data []byte) error { return ASerr } - puuid, UUIDerr := uuid.NewV4() - if UUIDerr != nil { - return UUIDerr + Nerr := txn.Set([]byte(fmt.Sprintf("users|username|T|%s", newUUID)), []byte(name)) + if Nerr != nil { + return Nerr + } + + IDerr := txn.Set([]byte(fmt.Sprintf("users|id|T|%s", newUUID)), []byte(id)) + if IDerr != nil { + return IDerr } - newUUID := puuid.String() UUIDDBerr := txn.Set([]byte(fmt.Sprintf("users|T|%s|uuid", id)), []byte(newUUID)) if UUIDDBerr != nil { @@ -121,7 +131,7 @@ func IssueSession() http.Handler { fmt.Println("error:", err) } - SErr := saveTUser(twitterUser.IDStr, accessToken, accessSecret, b) + SErr := saveTUser(twitterUser.IDStr, accessToken, accessSecret, twitterUser.ScreenName, b) if SErr != nil { http.Error(w, SErr.Error(), http.StatusInternalServerError) return diff --git a/api/webserver.go b/api/webserver.go @@ -7,6 +7,7 @@ import ( "github.com/SocialNetworkNews/SocialNetworkNews_API/config" "github.com/SocialNetworkNews/SocialNetworkNews_API/db" "github.com/SocialNetworkNews/SocialNetworkNews_API/twitter" + TLoginStructs "github.com/dghubble/go-twitter/twitter" "github.com/dgraph-io/badger" "github.com/gorilla/mux" "github.com/pkg/errors" @@ -57,7 +58,7 @@ type Paper struct { UUID string `json:"uuid,omitempty"` Description string `json:"description,omitempty"` PaperImage string `json:"paper_image,omitempty"` - Author `json:",omitempty"` + Author `json:"author,omitempty"` } type Author struct { @@ -124,6 +125,36 @@ func PaperFunc(w http.ResponseWriter, r *http.Request) { w.Write(data) } +func getAuthorData(id string) (*Author, error) { + author := &Author{} + dataDB, err := db.OpenDB() + if err != nil { + return nil, err + } + + DBerr := dataDB.View(func(txn *badger.Txn) error { + username, err := db.Get(txn, []byte(fmt.Sprintf("users|username|T|%s", id))) + if err != nil { + return err + } + author.Username = fmt.Sprintf("%s", username) + + author.UUID = id + + data, err := db.Get(txn, []byte(fmt.Sprintf("users|T|%s|uuid", id))) + TUserData := TLoginStructs.User{} + UMerr := json.Unmarshal(data, &TUserData) + if UMerr != nil { + return UMerr + } + author.TwitterProfile = TUserData.URL + author.ProfileIMGURL = TUserData.ProfileImageURLHttps + return nil + }) + + return author, DBerr +} + func addPapers(data []Paper) ([]byte, error) { papersDB, openErr := db.OpenDB() if openErr != nil { @@ -169,6 +200,11 @@ func addPapers(data []Paper) ([]byte, error) { paper.UUID = newUUID paper.Name = newName paper.PaperImage = newPIMG + author, err := getAuthorData(newAuthor) + if err != nil { + return nil, err + } + paper.Author = *author papers = append(papers, paper) } @@ -241,7 +277,15 @@ func getPapers(full bool, uuid string) ([]byte, error) { paper.Description = fmt.Sprintf("%s", descResult) if full { - //TODO Add Author Object! + AUUIDResult, QueryErr := db.Get(txn, []byte(fmt.Sprintf("%s%s|author", prefix, stringKeyEnd))) + if QueryErr != nil { + return errors.WithMessage(QueryErr, fmt.Sprintf("%s%s|author", prefix, stringKeyEnd)) + } + author, err := getAuthorData(fmt.Sprintf("%s", AUUIDResult)) + if err != nil { + return err + } + paper.Author = *author } papers = append(papers, paper)