package Post import ( "github.com/nspcc-dev/neo-go/pkg/interop/iterator" "github.com/nspcc-dev/neo-go/pkg/interop/native/std" "github.com/nspcc-dev/neo-go/pkg/interop/runtime" "github.com/nspcc-dev/neo-go/pkg/interop/storage" ) type Post struct { postName string text string login string likes int dislikes int id string } const ( lastIndex = "user_post_index" id = "current_post_id" comment_prefix = "comment_" ) func NewPost(login string, text string, postName string) { ctx := storage.GetContext() updatePostId() id := storage.Get(ctx, id).(int) post_id := "post_" + std.Itoa10(id) post := Post{ text: text, login: login, dislikes: 0, likes: 0, postName: postName, id: post_id, } storage.Put(ctx, post.id, std.Serialize(post)) updatePostIndex(login) lastPostIndex := storage.Get(ctx, login+lastIndex).(int) storage.Put(ctx, login+"_p_"+std.Itoa10(lastPostIndex), post.id) runtime.Log("Post created. Post id: " + post.id + "; User post id" + login + "_p_" + std.Itoa10(lastPostIndex)) } func GetAllPosts() []Post { posts := make([]Post, 0) ctx := storage.GetReadOnlyContext() it := storage.Find(ctx, "post", storage.ValuesOnly|storage.DeserializeValues) for iterator.Next(it) { post := iterator.Value(it).(Post) runtime.Log(string(std.Serialize(post))) posts = append(posts, post) } return posts } func GetPost(postId string) Post { ctx := storage.GetReadOnlyContext() data := storage.Get(ctx, postId) if data == nil { panic("post not found") } return std.Deserialize(data.([]byte)).(Post) } func GetAllPostsByUser(login string) []Post { ctx := storage.GetReadOnlyContext() var postsByUser []Post = make([]Post, 0) i := 1 n := getPostIndex(login) for i < n+1 { post_key := storage.Get(ctx, login+"_p_"+std.Itoa10(i)) if post_key == nil { panic("post key not found") } post_key = post_key.(string) post := storage.Get(ctx, post_key) if post == nil { panic("post not found") } i++ postsByUser = append(postsByUser, std.Deserialize(post.([]byte)).(Post)) } return postsByUser } func RatePost(isLike bool, postId string) { ctx := storage.GetContext() post := GetPost(postId) if isLike { post.likes++ } else { post.dislikes++ } storage.Put(ctx, post.id, std.Serialize(post)) } func getPostIndex(userId string) int { ctx := storage.GetContext() index := storage.Get(ctx, userId+lastIndex) if index == nil { index = 0 } return index.(int) } func updatePostIndex(userId string) { ctx := storage.GetContext() index := getPostIndex(userId) storage.Put(ctx, userId+lastIndex, index+1) } func getPostId() int { ctx := storage.GetContext() current_id := storage.Get(ctx, id) if current_id == nil { current_id = 0 } return current_id.(int) } func updatePostId() { ctx := storage.GetContext() cur_id := getPostId() storage.Put(ctx, id, cur_id+1) }