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} -
-

End of posts

-
+
+

End of posts

+
{/if}