package controllers import ( http_error "abdanhafidz.com/go-boilerplate/models/error" "abdanhafidz.com/go-boilerplate/utils" "github.com/gin-gonic/gin" uuid "github.com/google/uuid" ) func ParseAccountId(ctx *gin.Context) uuid.UUID { gaccountId, _ := ctx.Get("account_id") accountId, err := utils.ToUUID(gaccountId) if err != nil { ResponseJSON(ctx, gin.H{"account_id": accountId}, uuid.UUID{}, http_error.INVALID_TOKEN) return uuid.UUID{} } return accountId } func ParseUUID(ctx *gin.Context, attrName string) uuid.UUID { uuidRaw := ctx.Param(attrName) if uuidRaw == "" { if fromCtx, ok := ctx.Get(attrName); ok { uuidParsed, err := utils.ToUUID(fromCtx) if err == nil { return uuidParsed } } ResponseJSON(ctx, gin.H{"id": uuidRaw}, uuid.UUID{}, http_error.BAD_REQUEST_ERROR) ctx.Abort() return uuid.UUID{} } uuidParsed, err := utils.ToUUID(uuidRaw) if err != nil { ResponseJSON(ctx, gin.H{"id": uuidRaw}, uuid.UUID{}, http_error.BAD_REQUEST_ERROR) ctx.Abort() return uuid.UUID{} } return uuidParsed } func RequestJSON[TRequest any](ctx *gin.Context) TRequest { var request TRequest if err := ctx.ShouldBindJSON(&request); err != nil { utils.ResponseFAILED(ctx, request, http_error.BAD_REQUEST_ERROR) ctx.Abort() return request } else { return request } } func RequestForm[TRequest any](ctx *gin.Context) TRequest { var request TRequest if err := ctx.ShouldBind(&request); err != nil { utils.ResponseFAILED(ctx, request, http_error.BAD_REQUEST_ERROR) ctx.Abort() return request } return request } func ResponseJSON[TResponse any, TMetaData any](ctx *gin.Context, metaData TMetaData, res TResponse, err error) { utils.SendResponse(ctx, metaData, res, err) }