First implementation of liking a photo (#48)
First implementation of liking a photo
This commit is contained in:
parent
df98ed162f
commit
00f79b2d01
|
@ -515,6 +515,7 @@
|
|||
},
|
||||
likePhoto(photo) {
|
||||
photo.PhotoFavorite = !photo.PhotoFavorite;
|
||||
photo.like(photo.PhotoFavorite);
|
||||
},
|
||||
deletePhoto(photo) {
|
||||
this.$alert.success('Photo deleted');
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
import Abstract from 'model/abstract';
|
||||
import Api from 'common/api';
|
||||
|
||||
class Photo extends Abstract {
|
||||
getEntityName() {
|
||||
|
@ -117,6 +118,14 @@ class Photo extends Abstract {
|
|||
return 'Unknown'
|
||||
}
|
||||
|
||||
like(liked) {
|
||||
if (liked === true) {
|
||||
return Api.post(this.getEntityResource() + "/like");
|
||||
} else {
|
||||
return Api.delete(this.getEntityResource() + "/like");
|
||||
}
|
||||
}
|
||||
|
||||
static getCollectionResource() {
|
||||
return 'photos';
|
||||
}
|
||||
|
|
|
@ -5,6 +5,7 @@ import (
|
|||
"github.com/gin-gonic/gin/binding"
|
||||
"github.com/photoprism/photoprism/internal/forms"
|
||||
"github.com/photoprism/photoprism/internal/photoprism"
|
||||
"log"
|
||||
"net/http"
|
||||
"strconv"
|
||||
)
|
||||
|
@ -30,3 +31,39 @@ func GetPhotos(router *gin.RouterGroup, conf *photoprism.Config) {
|
|||
c.JSON(http.StatusOK, result)
|
||||
})
|
||||
}
|
||||
|
||||
func LikePhoto(router *gin.RouterGroup, conf *photoprism.Config) {
|
||||
router.POST("/photos/:photoId/like", func(c *gin.Context) {
|
||||
search := photoprism.NewSearch(conf.OriginalsPath, conf.GetDb())
|
||||
|
||||
photoId, err := strconv.ParseUint(c.Param("photoId"), 10, 64)
|
||||
|
||||
if err == nil {
|
||||
photo := search.FindPhotoById(photoId)
|
||||
photo.PhotoFavorite = true
|
||||
conf.GetDb().Save(&photo)
|
||||
c.JSON(http.StatusAccepted, http.Response{})
|
||||
} else {
|
||||
log.Printf("could not find image for id: %s", err.Error())
|
||||
c.Data(http.StatusNotFound, "image", []byte(""))
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
func DislikePhoto(router *gin.RouterGroup, conf *photoprism.Config) {
|
||||
router.DELETE("/photos/:photoId/like", func(c *gin.Context) {
|
||||
search := photoprism.NewSearch(conf.OriginalsPath, conf.GetDb())
|
||||
|
||||
photoId, err := strconv.ParseUint(c.Param("photoId"), 10, 64)
|
||||
|
||||
if err == nil {
|
||||
photo := search.FindPhotoById(photoId)
|
||||
photo.PhotoFavorite = false
|
||||
conf.GetDb().Save(&photo)
|
||||
c.JSON(http.StatusAccepted, http.Response{})
|
||||
} else {
|
||||
log.Printf("could not find image for id: %s", err.Error())
|
||||
c.Data(http.StatusNotFound, "image", []byte(""))
|
||||
}
|
||||
})
|
||||
}
|
||||
|
|
|
@ -193,3 +193,9 @@ func (s *Search) FindFileByHash(fileHash string) (file File) {
|
|||
|
||||
return file
|
||||
}
|
||||
|
||||
func (s *Search) FindPhotoById(photoId uint64) (photo Photo) {
|
||||
s.db.Where("id = ?", photoId).First(&photo)
|
||||
|
||||
return photo
|
||||
}
|
||||
|
|
|
@ -20,6 +20,8 @@ func registerRoutes(app *gin.Engine, conf *photoprism.Config) {
|
|||
{
|
||||
api.GetPhotos(v1, conf)
|
||||
api.GetThumbnail(v1, conf)
|
||||
api.LikePhoto(v1, conf)
|
||||
api.DislikePhoto(v1, conf)
|
||||
}
|
||||
|
||||
// Default HTML page (client-side routing implemented via Vue.js)
|
||||
|
|
Loading…
Reference in a new issue