Skip to content

Commit

Permalink
add update & delete to seocial_media_repo.go
Browse files Browse the repository at this point in the history
  • Loading branch information
devkuros committed Apr 7, 2022
1 parent d02c819 commit 1d37977
Show file tree
Hide file tree
Showing 4 changed files with 113 additions and 1 deletion.
35 changes: 35 additions & 0 deletions middlewares/authorization.go
Original file line number Diff line number Diff line change
Expand Up @@ -125,3 +125,38 @@ func (pa *authorization) CommentAuthorizations() gin.HandlerFunc {
c.Next()
}
}

func (pa *authorization) SocialMediaAuthorizations() gin.HandlerFunc {
return func(c *gin.Context) {
socialMediaId, err := strconv.Atoi(c.Param("socialMediaId"))
if err != nil {
c.AbortWithStatusJSON(http.StatusBadRequest, gin.H{
"error": "Bad Request",
"message": "invalid parameter",
})
return
}

userData := c.MustGet("userData").(jwt.MapClaims)
userID := uint(userData["id"].(float64))
Social := models.SocialMedia{}

err = pa.DB.Select("user_id").First(&Social, uint(socialMediaId)).Error
if err != nil {
c.AbortWithStatusJSON(http.StatusNotFound, gin.H{
"error": "Data not found",
"message": "data not exist",
})
return
}

if Social.UserID != userID {
c.AbortWithStatusJSON(http.StatusUnauthorized, gin.H{
"error": "Unauthorized",
"message": "please try again!",
})
return
}
c.Next()
}
}
8 changes: 8 additions & 0 deletions models/socialmedias_models.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,14 @@ type SocialMedia struct {
User *User `json:"user" gorm:"constraint:OnUpdate:CASCADE,OnDelete:SET NULL;"`
}

type GetSocialMediaBody struct {
ID uint `json:"id"`
Nama string `json:"name"`
SocialMediaUrl string `json:"social_media_url"`
UserID uint `json:"user_id"`
UpdatedAt time.Time `json:"updated_at"`
}

type UserSocialMediaBody struct {
StatsSocialMedia struct {
ID uint `json:"id"`
Expand Down
69 changes: 68 additions & 1 deletion repositories/social_media_repo.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import (
"mygram/handlers"
"mygram/models"
"net/http"
"strconv"

"github.com/gin-gonic/gin"
"github.com/golang-jwt/jwt"
Expand Down Expand Up @@ -58,7 +59,7 @@ func (som *socialMediaRepo) GetSocialMedias(c *gin.Context) {
return
}

if err := som.DB.Select("photo_url").Where("user_id = ?", userID).First(&Photo).Error; err != nil {
if err := som.DB.Select("photo_url").Where("user_id = ?", userID).Last(&Photo).Error; err != nil {
c.JSON(http.StatusNotFound, gin.H{
"error": "Data not found",
"message": err.Error(),
Expand Down Expand Up @@ -110,3 +111,69 @@ func (som *socialMediaRepo) CreateSocialMedias(c *gin.Context) {
"created_at": Social.CreatedAt,
})
}

func (som *socialMediaRepo) UpdateSocialMedias(c *gin.Context) {
userData := c.MustGet("userData").(jwt.MapClaims)
contentType := handlers.GetContentType(c)

Social := models.SocialMedia{}
GetSocialBody := models.GetSocialMediaBody{}

socialMediaId, _ := strconv.Atoi(c.Param("socialMediaId"))
userID := uint(userData["id"].(float64))

if contentType == socialMediatApp {
c.ShouldBindJSON(&Social)
} else {
c.ShouldBind(&Social)
}

Social.UserID = userID
Social.ID = uint(socialMediaId)

if err := som.DB.Model(&Social).Where("id = ?", socialMediaId).Updates(models.SocialMedia{Nama: Social.Nama, SocialMediaUrl: Social.SocialMediaUrl}).Error; err != nil {
c.JSON(http.StatusBadRequest, gin.H{
"err": "Bad Request",
"message": err.Error(),
})
return
}

GetSocialBody.ID = Social.ID
GetSocialBody.Nama = Social.Nama
GetSocialBody.SocialMediaUrl = Social.SocialMediaUrl
GetSocialBody.UserID = Social.UserID
GetSocialBody.UpdatedAt = Social.UpdatedAt

c.JSON(http.StatusOK, GetSocialBody)
}

func (som *socialMediaRepo) DeleteSocialMedias(c *gin.Context) {
userData := c.MustGet("userData").(jwt.MapClaims)
contentType := handlers.GetContentType(c)
Social := models.SocialMedia{}

socialMediaId, _ := strconv.Atoi(c.Param("socialMediaId"))
userID := uint(userData["id"].(float64))

if contentType == socialMediatApp {
c.ShouldBindJSON(&Social)
} else {
c.ShouldBind(&Social)
}

Social.UserID = userID
Social.ID = uint(socialMediaId)

if err := som.DB.Model(&Social).Where("id = ?", socialMediaId).Delete(&Social).Error; err != nil {
c.JSON(http.StatusBadRequest, gin.H{
"err": "Bad Request",
"message": err.Error(),
})
return
}

c.JSON(http.StatusOK, gin.H{
"message": "your social media has been successfully deleted",
})
}
2 changes: 2 additions & 0 deletions routers/routers.go
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,8 @@ func StartServer() *gin.Engine {
socialMediaMiddleware.Use(middlewares.Authentication())
socialMediaMiddleware.POST("/", ctrlSocials.CreateSocialMedias)
socialMediaMiddleware.GET("/", ctrlSocials.GetSocialMedias)
socialMediaMiddleware.PUT("/:socialMediaId", authorizations.SocialMediaAuthorizations(), ctrlSocials.UpdateSocialMedias)
socialMediaMiddleware.DELETE("/:socialMediaId", authorizations.SocialMediaAuthorizations(), ctrlSocials.DeleteSocialMedias)
}

return r
Expand Down

0 comments on commit 1d37977

Please sign in to comment.