package event import ( "nixcn-cms/internal/exception" "nixcn-cms/service/service_event" "nixcn-cms/utils" "github.com/gin-gonic/gin" "github.com/google/uuid" ) // List retrieves a paginated list of events from the database. // // @Summary List Events // @Description Fetches a list of events with support for pagination via limit and offset. Data is retrieved directly from the database for consistency. // @Tags Event // @Accept json // @Produce json // @Param limit query int false "Maximum number of events to return (default 20)" // @Param offset query int false "Number of events to skip" // @Success 200 {object} utils.RespStatus{data=[]data.EventIndexDoc} "Successful paginated list retrieval" // @Failure 400 {object} utils.RespStatus{data=nil} "Invalid Input (Missing offset or malformed parameters)" // @Failure 401 {object} utils.RespStatus{data=nil} "Missing User ID / Unauthorized" // @Failure 500 {object} utils.RespStatus{data=nil} "Internal Server Error (Database query failed)" // @Security ApiKeyAuth // @Router /event/list [get] func (self *EventHandler) List(c *gin.Context) { userIdOrig, ok := c.Get("user_id") if !ok { errorCode := new(exception.Builder). SetStatus(exception.StatusUser). SetService(exception.ServiceUser). SetEndpoint(exception.EndpointUserServiceInfo). SetType(exception.TypeCommon). SetOriginal(exception.CommonErrorMissingUserId). Throw(c). String() utils.HttpResponse(c, 403, errorCode) return } userId, err := uuid.Parse(userIdOrig.(string)) if err != nil { errorCode := new(exception.Builder). SetStatus(exception.StatusServer). SetService(exception.ServiceUser). SetEndpoint(exception.EndpointUserServiceInfo). SetType(exception.TypeCommon). SetOriginal(exception.CommonErrorUuidParseFailed). SetError(err). Throw(c). String() utils.HttpResponse(c, 500, errorCode) return } type ListQuery struct { Limit *string `form:"limit"` Offset *string `form:"offset"` } var query ListQuery if err := c.ShouldBindQuery(&query); err != nil { // Handle binding error (e.g., syntax errors in query string) exc := new(exception.Builder). SetStatus(exception.StatusClient). SetService(exception.ServiceEvent). SetEndpoint(exception.EndpointEventServiceList). SetType(exception.TypeCommon). SetOriginal(exception.CommonErrorInvalidInput). Throw(c). String() utils.HttpResponse(c, 400, exc) return } // Prepare payload for the service layer eventListPayload := &service_event.EventListPayload{ Context: c, UserId: userId, Data: &service_event.EventListData{ Limit: query.Limit, Offset: query.Offset, }, } // Call the service implementation result := self.svc.ListEvents(eventListPayload) // Check if the service returned any exception if result.Common.Exception.Original != exception.CommonSuccess { utils.HttpResponse(c, result.Common.HttpCode, result.Common.Exception.String()) return } // Return successful response with event data utils.HttpResponse(c, result.Common.HttpCode, result.Common.Exception.String(), result.Data) }