get merch methods

This commit is contained in:
nquidox 2025-09-15 17:56:16 +03:00
parent 6be1cc79fa
commit d58ad2970b
4 changed files with 165 additions and 30 deletions

View file

@ -24,7 +24,8 @@ func (h *Handler) RegisterRoutes(r *gin.RouterGroup, authMW gin.HandlerFunc, ref
merchGroup := r.Group("/merch", authMW)
merchGroup.POST("/", h.controller.addMerch)
merchGroup.GET("/", h.controller.getMerch)
merchGroup.GET("/:uuid", h.controller.getSingleMerch)
merchGroup.GET("/", h.controller.getAllMerch)
merchGroup.PUT("/", h.controller.updateMerch)
merchGroup.DELETE("/", h.controller.deleteMerch)
@ -64,8 +65,64 @@ func (co *controller) addMerch(c *gin.Context) {
c.Status(http.StatusOK)
}
func (co *controller) getMerch(c *gin.Context) {
c.JSON(200, gin.H{"msg": "placeholder"})
// @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} [get]
func (co *controller) getSingleMerch(c *gin.Context) {
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
}
response, err := co.service.getSingleMerch(userUuid, merchUuid)
if err != nil {
c.JSON(http.StatusBadRequest, responses.ErrorResponse500{Error: err.Error()})
log.WithError(err).Error("Merch | Failed to get single merch")
return
}
c.JSON(http.StatusOK, response)
}
// @Summary Получить все записи мерча
// @Description Получить все записи мерча
// @Tags Merch
// @Security BearerAuth
// @Success 200 {array} ListResponse
// @Failure 400 {object} responses.ErrorResponse400
// @Failure 500 {object} responses.ErrorResponse500
// @Router /merch/{uuid} [get]
func (co *controller) getAllMerch(c *gin.Context) {
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
}
response, err := co.service.getAllMerch(userUuid)
if err != nil {
c.JSON(http.StatusBadRequest, responses.ErrorResponse500{Error: err.Error()})
log.WithError(err).Error("Merch | Failed to get all merch")
return
}
c.JSON(http.StatusOK, response)
}
func (co *controller) updateMerch(c *gin.Context) {

View file

@ -1,5 +1,10 @@
package merch
type merchBundle struct {
Merch
Surugaya
Mandarake
}
type MerchDTO struct {
MerchUuid string `json:"merch_uuid"`
Name string `json:"name"`
@ -15,3 +20,14 @@ type SurugayaDTO struct {
type MandarakeDTO struct {
Link string `json:"link"`
}
type SingleMerchResponse struct {
MerchUuid string `json:"merch_uuid"`
Name string `json:"name"`
Origins []any `json:"origins"`
}
type ListResponse struct {
MerchUuid string `json:"merch_uuid"`
Name string `json:"name"`
}

View file

@ -13,21 +13,62 @@ func NewRepo(db *gorm.DB) *Repo {
}
type repository interface {
addMerch(merch Merch, surugaya Surugaya, mandarake Mandarake) error
addMerch(bundle merchBundle) error
getSingleMerch(userUuid, merchUuid string) (merchBundle, error)
getAllMerch(userUuid string) ([]ListResponse, error)
}
func (r *Repo) addMerch(merch Merch, surugaya Surugaya, mandarake Mandarake) error {
if err := r.db.Create(merch).Error; err != nil {
func (r *Repo) addMerch(bundle merchBundle) error {
if err := r.db.Create(bundle.Merch).Error; err != nil {
return err
}
if err := r.db.Create(surugaya).Error; err != nil {
if err := r.db.Create(bundle.Surugaya).Error; err != nil {
return err
}
if err := r.db.Create(mandarake).Error; err != nil {
if err := r.db.Create(bundle.Mandarake).Error; err != nil {
return err
}
return nil
}
func (r *Repo) getSingleMerch(userUuid, merchUuid string) (merchBundle, error) {
var merch Merch
if err := r.db.
Where("user_uuid = ?", userUuid).
Where("merch_uuid = ?", merchUuid).
Where("deleted_at IS NULL").
First(&merch).Error; err != nil {
return merchBundle{}, err
}
var surugaya Surugaya
if err := r.db.
Where("merch_uuid = ?", merchUuid).
First(&surugaya).Error; err != nil {
return merchBundle{}, err
}
var mandarake Mandarake
if err := r.db.
Where("merch_uuid = ?", merchUuid).
First(&mandarake).Error; err != nil {
return merchBundle{}, err
}
return merchBundle{
Merch: merch,
Surugaya: surugaya,
Mandarake: mandarake,
}, nil
}
func (r *Repo) getAllMerch(userUuid string) ([]ListResponse, error) {
var list []ListResponse
if err := r.db.Where("user_uuid = ?", userUuid).Find(&list).Error; err != nil {
return nil, err
}
return list, nil
}

View file

@ -19,32 +19,53 @@ func newService(repo repository) *service {
func (s *service) addMerch(payload MerchDTO, userUuid string) error {
merchUuid := uuid.NewString()
merch := Merch{
CreatedAt: time.Time{},
UpdatedAt: sql.NullTime{Valid: false},
DeletedAt: sql.NullTime{Valid: false},
MerchUuid: merchUuid,
UserUuid: userUuid,
Name: payload.Name,
}
bundle := merchBundle{
Merch{
CreatedAt: time.Time{},
UpdatedAt: sql.NullTime{Valid: false},
DeletedAt: sql.NullTime{Valid: false},
MerchUuid: merchUuid,
UserUuid: userUuid,
Name: payload.Name,
},
surugaya := Surugaya{
DeletedAt: sql.NullTime{},
MerchUuid: merchUuid,
Link: payload.OriginSurugaya.Link,
CookieValues: payload.OriginSurugaya.CookieValues,
}
Surugaya{
DeletedAt: sql.NullTime{},
MerchUuid: merchUuid,
Link: payload.OriginSurugaya.Link,
CookieValues: payload.OriginSurugaya.CookieValues,
},
mandarake := Mandarake{
DeletedAt: sql.NullTime{},
MerchUuid: merchUuid,
Link: payload.OriginMandarake.Link,
Mandarake{
DeletedAt: sql.NullTime{},
MerchUuid: merchUuid,
Link: payload.OriginMandarake.Link,
},
}
return s.repo.addMerch(merch, surugaya, mandarake)
return s.repo.addMerch(bundle)
}
func (s *service) getMerch() error {
return nil
func (s *service) getSingleMerch(userUuid, merchUuid string) (MerchDTO, error) {
bundle, err := s.repo.getSingleMerch(userUuid, merchUuid)
if err != nil {
return MerchDTO{}, err
}
return MerchDTO{
MerchUuid: bundle.Merch.MerchUuid,
Name: bundle.Merch.Name,
OriginSurugaya: SurugayaDTO{
Link: bundle.Surugaya.Link,
CookieValues: bundle.Surugaya.CookieValues,
},
OriginMandarake: MandarakeDTO{
Link: bundle.Mandarake.Link,
},
}, nil
}
func (s *service) getAllMerch(userUuid string) ([]ListResponse, error) {
return s.repo.getAllMerch(userUuid)
}
func (s *service) updateMerch() error {