Able to subscribe to realm

This commit is contained in:
2024-10-14 21:40:28 +08:00
parent 6f26a44838
commit 4d602220d2
6 changed files with 181 additions and 19 deletions

View File

@@ -51,12 +51,15 @@ func MapAPIs(app *fiber.App, baseURL string) {
subscriptions.Get("/users/:userId", getSubscriptionOnUser)
subscriptions.Get("/tags/:tagId", getSubscriptionOnTag)
subscriptions.Get("/categories/:categoryId", getSubscriptionOnCategory)
subscriptions.Get("/realms/:realmId", getSubscriptionOnRealm)
subscriptions.Post("/users/:userId", subscribeToUser)
subscriptions.Post("/tags/:tagId", subscribeToTag)
subscriptions.Post("/categories/:categoryId", subscribeToCategory)
subscriptions.Post("/realms/:realmId", subscribeToRealm)
subscriptions.Delete("/users/:userId", unsubscribeFromUser)
subscriptions.Delete("/tags/:tagId", unsubscribeFromTag)
subscriptions.Delete("/categories/:categoryId", unsubscribeFromCategory)
subscriptions.Delete("/realms/:realmId", unsubscribeFromRealm)
}
api.Get("/categories", listCategories)

View File

@@ -76,6 +76,28 @@ func getSubscriptionOnCategory(c *fiber.Ctx) error {
return c.JSON(subscription)
}
func getSubscriptionOnRealm(c *fiber.Ctx) error {
if err := gap.H.EnsureAuthenticated(c); err != nil {
return err
}
user := c.Locals("user").(models.Account)
realmId, err := c.ParamsInt("realmId", 0)
realm, err := services.GetRealmWithID(uint(realmId))
if err != nil {
return fiber.NewError(fiber.StatusBadRequest, fmt.Sprintf("unable to get realm: %v", err))
}
subscription, err := services.GetSubscriptionOnRealm(user, realm)
if err != nil {
return fiber.NewError(fiber.StatusBadRequest, fmt.Sprintf("unable to get subscription: %v", err))
} else if subscription == nil {
return fiber.NewError(fiber.StatusNotFound, "subscription does not exist")
}
return c.JSON(subscription)
}
func subscribeToUser(c *fiber.Ctx) error {
if err := gap.H.EnsureAuthenticated(c); err != nil {
return err
@@ -160,6 +182,34 @@ func subscribeToCategory(c *fiber.Ctx) error {
return c.JSON(subscription)
}
func subscribeToRealm(c *fiber.Ctx) error {
if err := gap.H.EnsureAuthenticated(c); err != nil {
return err
}
user := c.Locals("user").(models.Account)
realmId, err := c.ParamsInt("realmId", 0)
realm, err := services.GetRealmWithID(uint(realmId))
if err != nil {
return fiber.NewError(fiber.StatusBadRequest, fmt.Sprintf("unable to get realm: %v", err))
}
subscription, err := services.SubscribeToRealm(user, realm)
if err != nil {
return fiber.NewError(fiber.StatusBadRequest, fmt.Sprintf("unable to subscribe to realm: %v", err))
}
_ = gap.H.RecordAuditLog(
user.ID,
"posts.subscribe.realms",
strconv.Itoa(int(realm.ID)),
c.IP(),
c.Get(fiber.HeaderUserAgent),
)
return c.JSON(subscription)
}
func unsubscribeFromUser(c *fiber.Ctx) error {
if err := gap.H.EnsureAuthenticated(c); err != nil {
return err
@@ -243,3 +293,31 @@ func unsubscribeFromCategory(c *fiber.Ctx) error {
return c.SendStatus(fiber.StatusOK)
}
func unsubscribeFromRealm(c *fiber.Ctx) error {
if err := gap.H.EnsureAuthenticated(c); err != nil {
return err
}
user := c.Locals("user").(models.Account)
realmId, err := c.ParamsInt("realmId", 0)
realm, err := services.GetRealmWithID(uint(realmId))
if err != nil {
return fiber.NewError(fiber.StatusBadRequest, fmt.Sprintf("unable to get realm: %v", err))
}
err = services.UnsubscribeFromRealm(user, realm)
if err != nil {
return fiber.NewError(fiber.StatusBadRequest, fmt.Sprintf("unable to unsubscribe from realm: %v", err))
}
_ = gap.H.RecordAuditLog(
user.ID,
"posts.unsubscribe.realms",
strconv.Itoa(int(realm.ID)),
c.IP(),
c.Get(fiber.HeaderUserAgent),
)
return c.SendStatus(fiber.StatusOK)
}