130 lines
3 KiB
Go
Executable file
130 lines
3 KiB
Go
Executable file
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("BLIN BLINSKIY POST " + post.id + "--------" + login + "_p_" + std.Itoa10(lastPostIndex))
|
|
runtime.Log("AIDISHNIK " + storage.Get(ctx, post.id).(string))
|
|
}
|
|
|
|
func GetAllPosts() []Post {
|
|
posts := make([]Post, 0)
|
|
ctx := storage.GetReadOnlyContext()
|
|
runtime.Log("SUUUUUDAAAAAAAAAAAAAAAAA SUKA xyu")
|
|
it := storage.Find(ctx, "post", storage.ValuesOnly|storage.DeserializeValues)
|
|
for iterator.Next(it) {
|
|
post := iterator.Value(it).(Post)
|
|
runtime.Log("SUUUUUDAAAAAAAAAAAAAAAAA SUKA")
|
|
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)
|
|
runtime.Log("N NUM BLIN BLIN" + std.Itoa10(n))
|
|
for i < n+1 {
|
|
post_key := storage.Get(ctx, login+"_p_"+std.Itoa10(i)).(string)
|
|
runtime.Log("SUKA POSTKEY " + post_key)
|
|
post := storage.Get(ctx, post_key)
|
|
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)
|
|
}
|