🗑️ Remove feed api
This commit is contained in:
		@@ -1,131 +0,0 @@
 | 
			
		||||
package api
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"time"
 | 
			
		||||
 | 
			
		||||
	"git.solsynth.dev/hydrogen/interactive/pkg/internal/database"
 | 
			
		||||
	"git.solsynth.dev/hydrogen/interactive/pkg/internal/gap"
 | 
			
		||||
	"git.solsynth.dev/hydrogen/interactive/pkg/internal/models"
 | 
			
		||||
	"git.solsynth.dev/hydrogen/interactive/pkg/internal/services"
 | 
			
		||||
	"github.com/gofiber/fiber/v2"
 | 
			
		||||
	jsoniter "github.com/json-iterator/go"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type FeedRecord struct {
 | 
			
		||||
	Type      string         `json:"type"`
 | 
			
		||||
	Data      map[string]any `json:"data"`
 | 
			
		||||
	CreatedAt time.Time      `json:"created_at"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func listFeed(c *fiber.Ctx) error {
 | 
			
		||||
	take := c.QueryInt("take", 0)
 | 
			
		||||
	offset := c.QueryInt("offset", 0)
 | 
			
		||||
	realmId := c.QueryInt("realmId", 0)
 | 
			
		||||
 | 
			
		||||
	postTx := services.FilterPostDraft(database.C)
 | 
			
		||||
 | 
			
		||||
	if realmId > 0 {
 | 
			
		||||
		if realm, err := services.GetRealmWithExtID(uint(realmId)); err != nil {
 | 
			
		||||
			return fiber.NewError(fiber.StatusBadRequest, fmt.Sprintf("realm was not found: %v", err))
 | 
			
		||||
		} else {
 | 
			
		||||
			postTx = services.FilterPostWithRealm(postTx, realm.ID)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if len(c.Query("authorId")) > 0 {
 | 
			
		||||
		var author models.Account
 | 
			
		||||
		if err := database.C.Where(&models.Account{Name: c.Query("authorId")}).First(&author).Error; err != nil {
 | 
			
		||||
			return fiber.NewError(fiber.StatusNotFound, err.Error())
 | 
			
		||||
		}
 | 
			
		||||
		postTx = postTx.Where("author_id = ?", author.ID)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if len(c.Query("category")) > 0 {
 | 
			
		||||
		postTx = services.FilterPostWithCategory(postTx, c.Query("category"))
 | 
			
		||||
	}
 | 
			
		||||
	if len(c.Query("tag")) > 0 {
 | 
			
		||||
		postTx = services.FilterPostWithTag(postTx, c.Query("tag"))
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	postCountTx := postTx
 | 
			
		||||
 | 
			
		||||
	postCount, err := services.CountPost(postCountTx)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return fiber.NewError(fiber.StatusInternalServerError, err.Error())
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	postItems, err := services.ListPost(postTx, take, offset)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return fiber.NewError(fiber.StatusBadRequest, err.Error())
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	var feed []FeedRecord
 | 
			
		||||
 | 
			
		||||
	encodeToFeed := func(t string, in any, createdAt time.Time) FeedRecord {
 | 
			
		||||
		var result map[string]any
 | 
			
		||||
		raw, _ := jsoniter.Marshal(in)
 | 
			
		||||
		_ = jsoniter.Unmarshal(raw, &result)
 | 
			
		||||
 | 
			
		||||
		return FeedRecord{
 | 
			
		||||
			Type:      t,
 | 
			
		||||
			Data:      result,
 | 
			
		||||
			CreatedAt: createdAt,
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	for _, post := range postItems {
 | 
			
		||||
		feed = append(feed, encodeToFeed("post", post, post.CreatedAt))
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return c.JSON(fiber.Map{
 | 
			
		||||
		"count": postCount,
 | 
			
		||||
		"data":  feed,
 | 
			
		||||
	})
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func listDraftMixed(c *fiber.Ctx) error {
 | 
			
		||||
	take := c.QueryInt("take", 0)
 | 
			
		||||
	offset := c.QueryInt("offset", 0)
 | 
			
		||||
 | 
			
		||||
	if err := gap.H.EnsureAuthenticated(c); err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	user := c.Locals("user").(models.Account)
 | 
			
		||||
 | 
			
		||||
	postTx := services.FilterPostWithAuthorDraft(database.C, user.ID)
 | 
			
		||||
	postCountTx := postTx
 | 
			
		||||
 | 
			
		||||
	postCount, err := services.CountPost(postCountTx)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return fiber.NewError(fiber.StatusInternalServerError, err.Error())
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	postItems, err := services.ListPost(postTx, take, offset)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return fiber.NewError(fiber.StatusBadRequest, err.Error())
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	var feed []FeedRecord
 | 
			
		||||
 | 
			
		||||
	encodeToFeed := func(t string, in any, createdAt time.Time) FeedRecord {
 | 
			
		||||
		var result map[string]any
 | 
			
		||||
		raw, _ := jsoniter.Marshal(in)
 | 
			
		||||
		_ = jsoniter.Unmarshal(raw, &result)
 | 
			
		||||
 | 
			
		||||
		return FeedRecord{
 | 
			
		||||
			Type:      t,
 | 
			
		||||
			Data:      result,
 | 
			
		||||
			CreatedAt: createdAt,
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	for _, post := range postItems {
 | 
			
		||||
		feed = append(feed, encodeToFeed("post", post, post.CreatedAt))
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return c.JSON(fiber.Map{
 | 
			
		||||
		"count": postCount,
 | 
			
		||||
		"data":  feed,
 | 
			
		||||
	})
 | 
			
		||||
}
 | 
			
		||||
@@ -10,14 +10,6 @@ func MapAPIs(app *fiber.App, baseURL string) {
 | 
			
		||||
		api.Get("/users/me", getUserinfo)
 | 
			
		||||
		api.Get("/users/:accountId", getOthersInfo)
 | 
			
		||||
 | 
			
		||||
		api.Get("/feed", listFeed)
 | 
			
		||||
 | 
			
		||||
		drafts := api.Group("/drafts").Name("Draft box API")
 | 
			
		||||
		{
 | 
			
		||||
			drafts.Get("/", listDraftMixed)
 | 
			
		||||
			drafts.Get("/posts", listDraftPost)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		stories := api.Group("/stories").Name("Story API")
 | 
			
		||||
		{
 | 
			
		||||
			stories.Post("/", createStory)
 | 
			
		||||
@@ -32,6 +24,7 @@ func MapAPIs(app *fiber.App, baseURL string) {
 | 
			
		||||
		posts := api.Group("/posts").Name("Posts API")
 | 
			
		||||
		{
 | 
			
		||||
			posts.Get("/", listPost)
 | 
			
		||||
			posts.Get("/drafts", listDraftPost)
 | 
			
		||||
			posts.Get("/:postId", getPost)
 | 
			
		||||
			posts.Post("/:postId/react", reactPost)
 | 
			
		||||
			posts.Delete("/:postId", deletePost)
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user