get merch methods
This commit is contained in:
parent
6be1cc79fa
commit
d58ad2970b
4 changed files with 165 additions and 30 deletions
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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"`
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue