Added picture like

master
Alex 2021-08-19 20:00:47 +02:00
parent 60d469c7ab
commit ab30af410c
1 changed files with 64 additions and 0 deletions

View File

@ -0,0 +1,64 @@
package picture
import (
"time"
"git.umbach.dev/app-idea/rest-api/modules/config"
"git.umbach.dev/app-idea/rest-api/modules/database"
"git.umbach.dev/app-idea/rest-api/modules/structs"
"git.umbach.dev/app-idea/rest-api/routers/api/v1/user"
"github.com/gofiber/fiber/v2"
log "github.com/sirupsen/logrus"
"gorm.io/gorm"
)
func Like(c *fiber.Ctx) error {
state := c.Params("state")
db := database.DB
user, err := user.GetUserBySessionId(c.Cookies(config.Cfg.Settings.Cookies.SessionId))
if err != nil {
return c.SendStatus(fiber.StatusInternalServerError)
}
if state == "1" {
// create if like
db.Create(&structs.PictureLike{UserId: user.Id, PictureId: c.Params("pictureId"), LikedAt: time.Now()})
} else {
// delete if unlike
db.Where("user_id = ?", user.Id).Where("picture_id = ?", c.Params("pictureId")).Delete(&structs.PictureLike{})
}
err = db.Transaction(func(tx *gorm.DB) error {
picture := &structs.Picture{}
if err := tx.First(&picture, "picture_id = ?", c.Params("pictureId")).Error; err != nil {
log.Infoln("here1", err)
return err
}
if state == "1" {
// like
err = tx.Model(&picture).Where("picture_id = ?", c.Params("pictureId")).Update("likes", picture.Likes+1).Error
} else {
// unlike
err = tx.Model(&picture).Where("picture_id = ?", c.Params("pictureId")).Update("likes", picture.Likes-1).Error
}
if err != nil {
log.Debugln("err update picture likes:", err)
return err
}
return nil
})
if err != nil {
log.Infoln("err picture like transaction", err)
return c.SendStatus(fiber.StatusInternalServerError)
}
return c.SendStatus(fiber.StatusOK)
}