update and delete methods
This commit is contained in:
parent
d58ad2970b
commit
726fe425f4
5 changed files with 159 additions and 15 deletions
|
|
@ -27,7 +27,7 @@ func (h *Handler) RegisterRoutes(r *gin.RouterGroup, authMW gin.HandlerFunc, ref
|
|||
merchGroup.GET("/:uuid", h.controller.getSingleMerch)
|
||||
merchGroup.GET("/", h.controller.getAllMerch)
|
||||
merchGroup.PUT("/", h.controller.updateMerch)
|
||||
merchGroup.DELETE("/", h.controller.deleteMerch)
|
||||
merchGroup.DELETE("/:uuid", h.controller.deleteMerch)
|
||||
|
||||
}
|
||||
|
||||
|
|
@ -125,10 +125,65 @@ func (co *controller) getAllMerch(c *gin.Context) {
|
|||
c.JSON(http.StatusOK, response)
|
||||
}
|
||||
|
||||
// @Summary Обновить информацию про мерч
|
||||
// @Description Обновить информацию про мерч по его uuid в json-е
|
||||
// @Tags Merch
|
||||
// @Security BearerAuth
|
||||
// @Param body body MerchDTO true "merch_uuid"
|
||||
// @Success 200 {object} MerchDTO
|
||||
// @Failure 400 {object} responses.ErrorResponse400
|
||||
// @Failure 500 {object} responses.ErrorResponse500
|
||||
// @Router /merch/{uuid} [put]
|
||||
func (co *controller) updateMerch(c *gin.Context) {
|
||||
c.JSON(200, gin.H{"msg": "placeholder"})
|
||||
var payload MerchDTO
|
||||
if err := c.ShouldBind(&payload); err != nil {
|
||||
c.JSON(http.StatusBadRequest, responses.ErrorResponse400{Error: err.Error()})
|
||||
log.WithError(err).Error("Merch | Failed to bind JSON on add merch")
|
||||
return
|
||||
}
|
||||
|
||||
userUuid, err := co.utils.GetUserUuidFromContext(c)
|
||||
if err != nil {
|
||||
c.JSON(http.StatusInternalServerError, responses.ErrorResponse500{Error: err.Error()})
|
||||
log.WithError(err).Error("Merch | Failed to get user uuid from context")
|
||||
return
|
||||
}
|
||||
|
||||
if err = co.service.updateMerch(payload, userUuid); err != nil {
|
||||
c.JSON(http.StatusBadRequest, responses.ErrorResponse500{Error: err.Error()})
|
||||
log.WithError(err).Error("Merch | Failed to get single merch")
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
// @Summary Пометить мерч как удаленный
|
||||
// @Description Пометить мерч как удаленный по его uuid
|
||||
// @Tags Merch
|
||||
// @Security BearerAuth
|
||||
// @Param uuid path string true "merch_uuid"
|
||||
// @Success 200 {object} MerchDTO
|
||||
// @Failure 400 {object} responses.ErrorResponse400
|
||||
// @Failure 500 {object} responses.ErrorResponse500
|
||||
// @Router /merch/{uuid} [delete]
|
||||
func (co *controller) deleteMerch(c *gin.Context) {
|
||||
c.JSON(200, gin.H{"msg": "placeholder"})
|
||||
merchUuid := c.Param("uuid")
|
||||
if merchUuid == "" {
|
||||
c.JSON(http.StatusBadRequest, responses.ErrorResponse400{Error: "MerchUuid is empty"})
|
||||
return
|
||||
}
|
||||
|
||||
userUuid, err := co.utils.GetUserUuidFromContext(c)
|
||||
if err != nil {
|
||||
c.JSON(http.StatusInternalServerError, responses.ErrorResponse500{Error: err.Error()})
|
||||
log.WithError(err).Error("Merch | Failed to get user uuid from context")
|
||||
return
|
||||
}
|
||||
|
||||
if err = co.service.deleteMerch(userUuid, merchUuid); err != nil {
|
||||
c.JSON(http.StatusBadRequest, responses.ErrorResponse500{Error: err.Error()})
|
||||
log.WithError(err).Error("Merch | Failed to get single merch")
|
||||
return
|
||||
}
|
||||
|
||||
c.Status(http.StatusOK)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,9 +1,9 @@
|
|||
package merch
|
||||
|
||||
type merchBundle struct {
|
||||
Merch
|
||||
Surugaya
|
||||
Mandarake
|
||||
Merch Merch
|
||||
Surugaya Surugaya
|
||||
Mandarake Mandarake
|
||||
}
|
||||
type MerchDTO struct {
|
||||
MerchUuid string `json:"merch_uuid"`
|
||||
|
|
|
|||
|
|
@ -21,8 +21,8 @@ func (Merch) TableName() string {
|
|||
|
||||
type Surugaya struct {
|
||||
Id uint `gorm:"primary_key" json:"-"`
|
||||
DeletedAt sql.NullTime `gorm:"index" json:"-"`
|
||||
MerchUuid string `gorm:"index" json:"-"`
|
||||
DeletedAt sql.NullTime `json:"-"`
|
||||
MerchUuid string `json:"-"`
|
||||
Link string `json:"link"`
|
||||
CookieValues string `json:"cookie_values"`
|
||||
}
|
||||
|
|
@ -33,8 +33,8 @@ func (Surugaya) TableName() string {
|
|||
|
||||
type Mandarake struct {
|
||||
Id uint `gorm:"primary_key" json:"-"`
|
||||
DeletedAt sql.NullTime `gorm:"index" json:"-"`
|
||||
MerchUuid string `gorm:"index" json:"-"`
|
||||
DeletedAt sql.NullTime `json:"-"`
|
||||
MerchUuid string `json:"-"`
|
||||
Link string `json:"link"`
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,10 @@
|
|||
package merch
|
||||
|
||||
import "gorm.io/gorm"
|
||||
import (
|
||||
"database/sql"
|
||||
"gorm.io/gorm"
|
||||
"time"
|
||||
)
|
||||
|
||||
type Repo struct {
|
||||
db *gorm.DB
|
||||
|
|
@ -14,8 +18,13 @@ func NewRepo(db *gorm.DB) *Repo {
|
|||
|
||||
type repository interface {
|
||||
addMerch(bundle merchBundle) error
|
||||
|
||||
getSingleMerch(userUuid, merchUuid string) (merchBundle, error)
|
||||
getAllMerch(userUuid string) ([]ListResponse, error)
|
||||
|
||||
updateMerch(payload MerchDTO, userUuid string) error
|
||||
|
||||
deleteMerch(userUuid, merchUuid string) error
|
||||
}
|
||||
|
||||
func (r *Repo) addMerch(bundle merchBundle) error {
|
||||
|
|
@ -72,3 +81,79 @@ func (r *Repo) getAllMerch(userUuid string) ([]ListResponse, error) {
|
|||
}
|
||||
return list, nil
|
||||
}
|
||||
|
||||
func (r *Repo) updateMerch(payload MerchDTO, userUuid string) error {
|
||||
m := make(map[string]any)
|
||||
m["name"] = payload.Name
|
||||
m["updated_at"] = sql.NullTime{
|
||||
Time: time.Now(),
|
||||
Valid: true,
|
||||
}
|
||||
|
||||
if err := r.db.
|
||||
Model(&Merch{}).
|
||||
Where("user_uuid = ?", userUuid).
|
||||
Where("merch_uuid = ?", payload.MerchUuid).
|
||||
Updates(m).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// surugaya
|
||||
fields := make(map[string]any, 2)
|
||||
if payload.OriginSurugaya.Link != "" {
|
||||
fields["link"] = payload.OriginSurugaya.Link
|
||||
}
|
||||
|
||||
if payload.OriginSurugaya.CookieValues != "" {
|
||||
fields["cookie_values"] = payload.OriginSurugaya.CookieValues
|
||||
}
|
||||
|
||||
if len(fields) > 0 {
|
||||
if err := r.db.
|
||||
Model(&Surugaya{}).
|
||||
Where("merch_uuid = ?", payload.MerchUuid).
|
||||
Updates(fields).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
// mandarake
|
||||
if payload.OriginMandarake.Link != "" {
|
||||
if err := r.db.
|
||||
Model(&Mandarake{}).
|
||||
Where("merch_uuid = ?", payload.MerchUuid).
|
||||
Update("link", payload.OriginMandarake.Link).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (r *Repo) deleteMerch(userUuid, merchUuid string) error {
|
||||
now := time.Now().UTC()
|
||||
|
||||
if err := r.db.
|
||||
Model(&Merch{}).
|
||||
Where("user_uuid = ?", userUuid).
|
||||
Where("merch_uuid = ?", merchUuid).
|
||||
Update("deleted_at", now).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err := r.db.
|
||||
Model(&Surugaya{}).
|
||||
Where("merch_uuid = ?", merchUuid).
|
||||
Update("deleted_at", now).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err := r.db.
|
||||
Model(&Mandarake{}).
|
||||
Where("merch_uuid = ?", merchUuid).
|
||||
Update("deleted_at", now).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ package merch
|
|||
|
||||
import (
|
||||
"database/sql"
|
||||
"errors"
|
||||
"github.com/google/uuid"
|
||||
"time"
|
||||
)
|
||||
|
|
@ -68,10 +69,13 @@ func (s *service) getAllMerch(userUuid string) ([]ListResponse, error) {
|
|||
return s.repo.getAllMerch(userUuid)
|
||||
}
|
||||
|
||||
func (s *service) updateMerch() error {
|
||||
return nil
|
||||
func (s *service) updateMerch(payload MerchDTO, userUuid string) error {
|
||||
if payload.MerchUuid == "" {
|
||||
return errors.New("no MerchUuid or empty payload")
|
||||
}
|
||||
return s.repo.updateMerch(payload, userUuid)
|
||||
}
|
||||
|
||||
func (s *service) deleteMerch() error {
|
||||
return nil
|
||||
func (s *service) deleteMerch(userUuid, merchUuid string) error {
|
||||
return s.repo.deleteMerch(userUuid, merchUuid)
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue