Add endpoint to update user notification target
This commit is contained in:
parent
00d9d90a41
commit
042cd3b473
3 changed files with 49 additions and 3 deletions
|
@ -486,6 +486,32 @@ func (h *Handler) DeleteUserToken(c *gin.Context) {
|
||||||
c.JSON(http.StatusOK, gin.H{})
|
c.JSON(http.StatusOK, gin.H{})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (h *Handler) UpdateNotificationTarget(c *gin.Context) {
|
||||||
|
currentUser, ok := auth.CurrentUser(c)
|
||||||
|
if !ok {
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"error": "Failed to get current user"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
type Request struct {
|
||||||
|
Type uModel.UserNotificationType `json:"type" binding:"required"`
|
||||||
|
Token string `json:"token" binding:"required"`
|
||||||
|
}
|
||||||
|
|
||||||
|
var req Request
|
||||||
|
if err := c.ShouldBindJSON(&req); err != nil {
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"error": "Invalid request"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
err := h.userRepo.UpdateNotificationTarget(c, currentUser.ID, req.Token, req.Type)
|
||||||
|
if err != nil {
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"error": "Failed to update notification target"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
c.JSON(http.StatusOK, gin.H{})
|
||||||
|
}
|
||||||
func Routes(router *gin.Engine, h *Handler, auth *jwt.GinJWTMiddleware, limiter *limiter.Limiter) {
|
func Routes(router *gin.Engine, h *Handler, auth *jwt.GinJWTMiddleware, limiter *limiter.Limiter) {
|
||||||
|
|
||||||
userRoutes := router.Group("users")
|
userRoutes := router.Group("users")
|
||||||
|
@ -497,6 +523,7 @@ func Routes(router *gin.Engine, h *Handler, auth *jwt.GinJWTMiddleware, limiter
|
||||||
userRoutes.POST("/tokens", h.CreateLongLivedToken)
|
userRoutes.POST("/tokens", h.CreateLongLivedToken)
|
||||||
userRoutes.GET("/tokens", h.GetAllUserToken)
|
userRoutes.GET("/tokens", h.GetAllUserToken)
|
||||||
userRoutes.DELETE("/tokens/:id", h.DeleteUserToken)
|
userRoutes.DELETE("/tokens/:id", h.DeleteUserToken)
|
||||||
|
userRoutes.PUT("/targets", h.UpdateNotificationTarget)
|
||||||
}
|
}
|
||||||
|
|
||||||
authRoutes := router.Group("auth")
|
authRoutes := router.Group("auth")
|
||||||
|
|
|
@ -16,9 +16,10 @@ type User struct {
|
||||||
UpdatedAt time.Time `json:"updated_at" gorm:"column:updated_at"` // Updated at
|
UpdatedAt time.Time `json:"updated_at" gorm:"column:updated_at"` // Updated at
|
||||||
Disabled bool `json:"disabled" gorm:"column:disabled"` // Disabled
|
Disabled bool `json:"disabled" gorm:"column:disabled"` // Disabled
|
||||||
// Email string `json:"email" gorm:"column:email"` // Email
|
// Email string `json:"email" gorm:"column:email"` // Email
|
||||||
CustomerID *string `gorm:"column:customer_id;<-:false"` // read one column
|
CustomerID *string `gorm:"column:customer_id;<-:false"` // read only column
|
||||||
Subscription *string `json:"subscription" gorm:"column:subscription;<-:false"` // read one column
|
Subscription *string `json:"subscription" gorm:"column:subscription;<-:false"` // read only column
|
||||||
Expiration *string `json:"expiration" gorm:"column:expiration;<-:false"` // read one column
|
Expiration *string `json:"expiration" gorm:"column:expiration;<-:false"` // read only column
|
||||||
|
UserNotificationTargets []UserNotificationTarget `json:"-" gorm:"foreignKey:UserID;references:ID"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type UserPasswordReset struct {
|
type UserPasswordReset struct {
|
||||||
|
@ -36,3 +37,20 @@ type APIToken struct {
|
||||||
Token string `json:"token" gorm:"column:token;index"` // Index on token
|
Token string `json:"token" gorm:"column:token;index"` // Index on token
|
||||||
CreatedAt time.Time `json:"createdAt" gorm:"column:created_at"`
|
CreatedAt time.Time `json:"createdAt" gorm:"column:created_at"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type UserNotificationTarget struct {
|
||||||
|
ID int `json:"id" gorm:"primary_key"` // Unique identifier
|
||||||
|
UserID int `json:"userId" gorm:"column:user_id;index"` // Index on userID
|
||||||
|
Type UserNotificationType `json:"type" gorm:"column:type"` // Type
|
||||||
|
TargetID string `json:"targetId" gorm:"column:target_id"` // Target ID
|
||||||
|
CreatedAt time.Time `json:"createdAt" gorm:"column:created_at"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type UserNotificationType int8
|
||||||
|
|
||||||
|
const (
|
||||||
|
_ UserNotificationType = iota
|
||||||
|
Android
|
||||||
|
IOS
|
||||||
|
Telegram
|
||||||
|
)
|
||||||
|
|
|
@ -21,6 +21,7 @@ func Migration(db *gorm.DB) error {
|
||||||
tModel.ThingChore{},
|
tModel.ThingChore{},
|
||||||
tModel.ThingHistory{},
|
tModel.ThingHistory{},
|
||||||
uModel.APIToken{},
|
uModel.APIToken{},
|
||||||
|
uModel.UserNotificationTarget{},
|
||||||
); err != nil {
|
); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue