add: deletesubscription

This commit is contained in:
Alex
2025-02-18 11:33:21 +01:00
parent d1273d3e23
commit 9d83afa525
5 changed files with 41 additions and 18 deletions

View File

@@ -37,7 +37,7 @@ func (mc *MembershipController) RegisterSubscription(c *gin.Context) {
} }
if !utils.HasPrivilige(requestUser, constants.Priviliges.Update) { if !utils.HasPrivilige(requestUser, constants.Priviliges.Update) {
utils.RespondWithError(c, errors.ErrNotAuthorized, "Not allowed to register subscription", http.StatusForbidden, "user", "server.error.unauthorized") utils.RespondWithError(c, errors.ErrNotAuthorized, "Not allowed to register subscription", http.StatusForbidden, "user.user", "server.error.unauthorized")
return return
} }
@@ -75,7 +75,7 @@ func (mc *MembershipController) UpdateHandler(c *gin.Context) {
} }
if !utils.HasPrivilige(requestUser, constants.Priviliges.Update) { if !utils.HasPrivilige(requestUser, constants.Priviliges.Update) {
utils.RespondWithError(c, errors.ErrNotAuthorized, "Not allowed to update subscription", http.StatusForbidden, "user", "server.error.unauthorized") utils.RespondWithError(c, errors.ErrNotAuthorized, "Not allowed to update subscription", http.StatusForbidden, "user.user", "server.error.unauthorized")
return return
} }
@@ -104,7 +104,14 @@ func (mc *MembershipController) UpdateHandler(c *gin.Context) {
} }
func (mc *MembershipController) DeleteSubscription(c *gin.Context) { func (mc *MembershipController) DeleteSubscription(c *gin.Context) {
var membershipdata MembershipData type deleteData struct {
Subscription struct {
ID uint `json:"id"`
Name string `json:"name"`
} `json:"subscription"`
}
var data deleteData
requestUser, err := mc.UserController.ExtractUserFromContext(c) requestUser, err := mc.UserController.ExtractUserFromContext(c)
if err != nil { if err != nil {
utils.RespondWithError(c, err, "Error extracting user from context in subscription UpdateHandler", http.StatusBadRequest, "general", "server.validation.no_auth_tokenw") utils.RespondWithError(c, err, "Error extracting user from context in subscription UpdateHandler", http.StatusBadRequest, "general", "server.validation.no_auth_tokenw")
@@ -112,16 +119,16 @@ func (mc *MembershipController) DeleteSubscription(c *gin.Context) {
} }
if !utils.HasPrivilige(requestUser, constants.Priviliges.Update) { if !utils.HasPrivilige(requestUser, constants.Priviliges.Update) {
utils.RespondWithError(c, errors.ErrNotAuthorized, "Not allowed to update subscription", http.StatusForbidden, "user", "server.error.unauthorized") utils.RespondWithError(c, errors.ErrNotAuthorized, "Not allowed to update subscription", http.StatusForbidden, "user.user", "server.error.unauthorized")
return return
} }
if err := c.ShouldBindJSON(&membershipdata); err != nil { if err := c.ShouldBindJSON(&data); err != nil {
utils.HandleValidationError(c, err) utils.HandleValidationError(c, err)
return return
} }
if err := mc.Service.DeleteSubscription(&membershipdata.Subscription); err != nil { if err := mc.Service.DeleteSubscription(&data.Subscription.ID, &data.Subscription.Name); err != nil {
utils.RespondWithError(c, err, "Error during subscription Deletion", http.StatusExpectationFailed, "subscription", "server.error.not_possible") utils.RespondWithError(c, err, "Error during subscription Deletion", http.StatusExpectationFailed, "subscription", "server.error.not_possible")
return return
} }

View File

@@ -7,6 +7,7 @@ import (
"testing" "testing"
"GoMembership/internal/constants" "GoMembership/internal/constants"
"GoMembership/internal/database"
"GoMembership/internal/models" "GoMembership/internal/models"
"GoMembership/pkg/logger" "GoMembership/pkg/logger"
@@ -332,6 +333,13 @@ func getSubscriptionUpdateData() []UpdateSubscriptionTest {
} }
func getSubscriptionDeleteData() []DeleteSubscriptionTest { func getSubscriptionDeleteData() []DeleteSubscriptionTest {
var premiumSub, basicSub models.SubscriptionModel
database.DB.Where("name = ?", "Premium").First(&premiumSub)
database.DB.Where("name = ?", "Basic").First(&basicSub)
logger.Error.Printf("premiumSub.ID: %v", premiumSub.ID)
logger.Error.Printf("basicSub.ID: %v", basicSub.ID)
return []DeleteSubscriptionTest{ return []DeleteSubscriptionTest{
{ {
Name: "Delete non-existent subscription should fail", Name: "Delete non-existent subscription should fail",
@@ -341,17 +349,19 @@ func getSubscriptionDeleteData() []DeleteSubscriptionTest {
Input: GenerateInputJSON( Input: GenerateInputJSON(
customizeSubscription(func(subscription MembershipData) MembershipData { customizeSubscription(func(subscription MembershipData) MembershipData {
subscription.Subscription.Name = "NonExistentSubscription" subscription.Subscription.Name = "NonExistentSubscription"
subscription.Subscription.ID = basicSub.ID
return subscription return subscription
})), })),
}, },
{ {
Name: "Delete subscription without name should fail", Name: "Delete subscription without name should fail",
WantResponse: http.StatusBadRequest, WantResponse: http.StatusExpectationFailed,
WantDBData: map[string]interface{}{"name": ""}, WantDBData: map[string]interface{}{"name": ""},
Assert: false, Assert: false,
Input: GenerateInputJSON( Input: GenerateInputJSON(
customizeSubscription(func(subscription MembershipData) MembershipData { customizeSubscription(func(subscription MembershipData) MembershipData {
subscription.Subscription.Name = "" subscription.Subscription.Name = ""
subscription.Subscription.ID = basicSub.ID
return subscription return subscription
})), })),
}, },
@@ -363,6 +373,7 @@ func getSubscriptionDeleteData() []DeleteSubscriptionTest {
Input: GenerateInputJSON( Input: GenerateInputJSON(
customizeSubscription(func(subscription MembershipData) MembershipData { customizeSubscription(func(subscription MembershipData) MembershipData {
subscription.Subscription.Name = "Basic" subscription.Subscription.Name = "Basic"
subscription.Subscription.ID = basicSub.ID
return subscription return subscription
})), })),
}, },
@@ -374,6 +385,7 @@ func getSubscriptionDeleteData() []DeleteSubscriptionTest {
Input: GenerateInputJSON( Input: GenerateInputJSON(
customizeSubscription(func(subscription MembershipData) MembershipData { customizeSubscription(func(subscription MembershipData) MembershipData {
subscription.Subscription.Name = "Premium" subscription.Subscription.Name = "Premium"
subscription.Subscription.ID = premiumSub.ID
return subscription return subscription
})), })),
}, },

View File

@@ -14,7 +14,7 @@ type SubscriptionModelsRepositoryInterface interface {
GetSubscriptionModelNames() ([]string, error) GetSubscriptionModelNames() ([]string, error)
GetSubscriptions(where map[string]interface{}) (*[]models.SubscriptionModel, error) GetSubscriptions(where map[string]interface{}) (*[]models.SubscriptionModel, error)
// GetUsersBySubscription(id uint) (*[]models.SubscriptionModel, error) // GetUsersBySubscription(id uint) (*[]models.SubscriptionModel, error)
DeleteSubscription(subscription *models.SubscriptionModel) error DeleteSubscription(id *uint) error
} }
type SubscriptionModelsRepository struct{} type SubscriptionModelsRepository struct{}
@@ -37,9 +37,9 @@ func (sr *SubscriptionModelsRepository) UpdateSubscription(subscription *models.
return subscription, nil return subscription, nil
} }
func (sr *SubscriptionModelsRepository) DeleteSubscription(subscription *models.SubscriptionModel) error { func (sr *SubscriptionModelsRepository) DeleteSubscription(id *uint) error {
result := database.DB.Delete(&models.SubscriptionModel{}, subscription.ID) result := database.DB.Delete(&models.SubscriptionModel{}, id)
if result.Error != nil { if result.Error != nil {
return result.Error return result.Error
} }

View File

@@ -38,7 +38,7 @@ func RegisterRoutes(router *gin.Engine, userController *controllers.UserControll
membershipRouter.GET("/subscriptions", membershipcontroller.GetSubscriptions) membershipRouter.GET("/subscriptions", membershipcontroller.GetSubscriptions)
membershipRouter.PATCH("/subscriptions", membershipcontroller.UpdateHandler) membershipRouter.PATCH("/subscriptions", membershipcontroller.UpdateHandler)
membershipRouter.POST("/subscriptions", membershipcontroller.RegisterSubscription) membershipRouter.POST("/subscriptions", membershipcontroller.RegisterSubscription)
membershipRouter.DELETE("/subscriptions", membershipcontroller.DeleteSubscription)
} }
licenceRouter := router.Group("/backend/licence") licenceRouter := router.Group("/backend/licence")

View File

@@ -13,7 +13,7 @@ type MembershipServiceInterface interface {
FindMembershipByUserID(userID uint) (*models.Membership, error) FindMembershipByUserID(userID uint) (*models.Membership, error)
RegisterSubscription(subscription *models.SubscriptionModel) (uint, error) RegisterSubscription(subscription *models.SubscriptionModel) (uint, error)
UpdateSubscription(subscription *models.SubscriptionModel) (*models.SubscriptionModel, error) UpdateSubscription(subscription *models.SubscriptionModel) (*models.SubscriptionModel, error)
DeleteSubscription(subscription *models.SubscriptionModel) error DeleteSubscription(id *uint, name *string) error
GetSubscriptionModelNames() ([]string, error) GetSubscriptionModelNames() ([]string, error)
GetSubscriptionByName(modelname *string) (*models.SubscriptionModel, error) GetSubscriptionByName(modelname *string) (*models.SubscriptionModel, error)
GetSubscriptions(where map[string]interface{}) (*[]models.SubscriptionModel, error) GetSubscriptions(where map[string]interface{}) (*[]models.SubscriptionModel, error)
@@ -50,17 +50,21 @@ func (service *MembershipService) UpdateSubscription(subscription *models.Subscr
} }
func (service *MembershipService) DeleteSubscription(subscription *models.SubscriptionModel) error { func (service *MembershipService) DeleteSubscription(id *uint, name *string) error {
exists, err := repositories.GetSubscriptionByName(&subscription.Name) if *name == "" {
return errors.ErrNoData
}
exists, err := repositories.GetSubscriptionByName(name)
if err != nil { if err != nil {
return err return err
} }
if exists == nil { if exists == nil {
return errors.ErrNotFound return errors.ErrNotFound
} }
if *id != exists.ID {
subscription.ID = exists.ID return errors.ErrInvalidSubscriptionData
usersInSubscription, err := repositories.GetUsersBySubscription(subscription.ID) }
usersInSubscription, err := repositories.GetUsersBySubscription(*id)
if err != nil { if err != nil {
return err return err
@@ -68,7 +72,7 @@ func (service *MembershipService) DeleteSubscription(subscription *models.Subscr
if len(*usersInSubscription) > 0 { if len(*usersInSubscription) > 0 {
return errors.ErrSubscriptionInUse return errors.ErrSubscriptionInUse
} }
return service.SubscriptionRepo.DeleteSubscription(subscription) return service.SubscriptionRepo.DeleteSubscription(id)
} }
func (service *MembershipService) FindMembershipByUserID(userID uint) (*models.Membership, error) { func (service *MembershipService) FindMembershipByUserID(userID uint) (*models.Membership, error) {