From ee9d2c80bff182b70ded72c57f805d93917e3c9d Mon Sep 17 00:00:00 2001
From: Damillora
Date: Tue, 11 May 2021 17:50:34 +0700
Subject: [PATCH] Add uploader
---
pkg/app/post_routes.go | 14 ++++++++++++--
pkg/database/post.go | 2 ++
pkg/middleware/auth_middleware.go | 1 +
pkg/models/read.go | 1 +
pkg/services/post.go | 5 +++--
web/app/src/routes/Post.svelte | 6 ++++++
web/app/src/routes/Posts.svelte | 20 +++++++++++---------
7 files changed, 36 insertions(+), 13 deletions(-)
diff --git a/pkg/app/post_routes.go b/pkg/app/post_routes.go
index bf76a81..0276c80 100644
--- a/pkg/app/post_routes.go
+++ b/pkg/app/post_routes.go
@@ -88,12 +88,13 @@ func postGetOne(c *gin.Context) {
Tags: tagStrings,
Width: post.Blob.Width,
Height: post.Blob.Height,
+ Uploader: post.User.Username,
})
}
func postCreate(c *gin.Context) {
var model models.PostCreateModel
- err := c.ShouldBindJSON(&model)
+ err := c.BindJSON(&model)
if err != nil {
c.JSON(http.StatusBadRequest, models.ErrorResponse{
Code: http.StatusBadRequest,
@@ -113,8 +114,17 @@ func postCreate(c *gin.Context) {
c.Abort()
return
}
+ user, ok := c.Get("user")
+ if !ok {
+ c.JSON(http.StatusForbidden, models.ErrorResponse{
+ Code: http.StatusBadRequest,
+ Message: "User don't exist",
+ })
+ c.Abort()
+ }
+ userObj := user.(*database.User)
- post, err := services.CreatePost(model)
+ post, err := services.CreatePost(userObj.ID, model)
if err != nil {
c.JSON(http.StatusBadRequest, models.ErrorResponse{
diff --git a/pkg/database/post.go b/pkg/database/post.go
index b6eb51b..8c6141f 100644
--- a/pkg/database/post.go
+++ b/pkg/database/post.go
@@ -6,6 +6,8 @@ import (
type Post struct {
ID string `gorm:"size:36"`
+ UserID string
+ User User
BlobID string
Blob Blob `gorm:"constraint:OnUpdate:CASCADE,OnDelete:CASCADE;"`
SourceURL string
diff --git a/pkg/middleware/auth_middleware.go b/pkg/middleware/auth_middleware.go
index ada0993..46f9065 100644
--- a/pkg/middleware/auth_middleware.go
+++ b/pkg/middleware/auth_middleware.go
@@ -43,6 +43,7 @@ func AuthMiddleware() gin.HandlerFunc {
return
}
user := services.GetUser(claims["sub"].(string))
+
c.Set("user", user)
c.Next()
diff --git a/pkg/models/read.go b/pkg/models/read.go
index 7c30b47..6744ec1 100644
--- a/pkg/models/read.go
+++ b/pkg/models/read.go
@@ -7,4 +7,5 @@ type PostReadModel struct {
Tags []string `json:"tags"`
Width int `json:"width"`
Height int `json:"height"`
+ Uploader string `json:"uploader"`
}
diff --git a/pkg/services/post.go b/pkg/services/post.go
index f004f19..88a268a 100644
--- a/pkg/services/post.go
+++ b/pkg/services/post.go
@@ -29,14 +29,14 @@ func GetPostTags(page int, tagSyntax []string) []database.Post {
func GetPost(id string) (*database.Post, error) {
var post database.Post
- result := database.DB.Joins("Blob").Preload("Tags").Preload("Tags.TagType").Where("posts.id = ?", id).First(&post)
+ result := database.DB.Joins("User").Joins("Blob").Preload("Tags").Preload("Tags.TagType").Where("posts.id = ?", id).First(&post)
if result.Error != nil {
return nil, result.Error
}
return &post, nil
}
-func CreatePost(model models.PostCreateModel) (*database.Post, error) {
+func CreatePost(userID string, model models.PostCreateModel) (*database.Post, error) {
tags, err := ParseTags(model.Tags)
if err != nil {
return nil, err
@@ -44,6 +44,7 @@ func CreatePost(model models.PostCreateModel) (*database.Post, error) {
post := database.Post{
ID: uuid.NewString(),
+ UserID: userID,
BlobID: model.BlobID,
SourceURL: model.SourceURL,
Tags: tags,
diff --git a/web/app/src/routes/Post.svelte b/web/app/src/routes/Post.svelte
index d30634f..500f14f 100644
--- a/web/app/src/routes/Post.svelte
+++ b/web/app/src/routes/Post.svelte
@@ -43,11 +43,17 @@
to="/post/edit/{post.id}">Edit
+
+ Uploader: {post.uploader}
+
Source URL: {trimUrl(post.source_url)}
+
+ Dimensions: {post.width}x{post.height}
+
Tags:
diff --git a/web/app/src/routes/Posts.svelte b/web/app/src/routes/Posts.svelte
index 60b4a18..16fcb67 100644
--- a/web/app/src/routes/Posts.svelte
+++ b/web/app/src/routes/Posts.svelte
@@ -18,8 +18,12 @@
const splitToChunks = (array, parts) => {
let result = [];
- for (let i = parts; i > 0; i--) {
- result.push(array.slice(i * parts, i * parts + parts + 1));
+ for (let i = 0; i < parts; i++) {
+ let currentColumn = [];
+ for (let j = i; j < array.length; j += parts) {
+ currentColumn.push(array[j]);
+ }
+ result.push(currentColumn);
}
return result;
};
@@ -27,11 +31,10 @@
let postChunks = [];
// split posts into 4 columns
$: {
- postChunks = splitToChunks(posts, 4);
+ postChunks = splitToChunks(posts, 5);
}
const getData = async () => {
- console.log("page " + page);
const data = await getPostSearchTag({ page, q: searchTerms.join("+") });
if (data.posts) {
newBatch = data.posts;
@@ -98,7 +101,7 @@
{#each postChunks as postChunk}
-
+
{#each postChunk as post, i (post.id)}
@@ -130,7 +133,6 @@
{
page++;
getData();
@@ -138,9 +140,9 @@
/>
{#if newBatch.length == 0}
-
+
{/if}