package handler import ( "kemendagri/sipd/services/master-sipd/controllers" "kemendagri/sipd/services/master-sipd/models" "log" "strconv" "github.com/go-playground/validator/v10" "github.com/gofiber/fiber/v2" ) type DaerahHandler struct { Controller *controllers.DaerahController Validate *validator.Validate } func NewDaerahHandler(app *fiber.App, vld *validator.Validate, controller *controllers.DaerahController) { handler := &DaerahHandler{ Controller: controller, Validate: vld, } // public route rpub := app.Group("/daerah") rpub.Get("/", handler.Index) rpub.Get("/:id", handler.View) rpub.Post("/", handler.Create) rpub.Put("/:id", handler.Update) rpub.Delete("/:id", handler.Delete) } // Index func for get lists of daerah. // // @Summary get lists of daerah // @Description get lists of daerah // @Tags Master Daerah // @Accept json // @Param page query int false "Halaman yang ditampilkan" // @Param limit query int false "Jumlah data per halaman, maksimal 50 data" // @param filter query string false "Key value pencarian ([kode_daerah,nama_daerah,jns_pemda]). Contoh: kode_ddn.11 -> (akan menampilkan data dengan kode ddn = '11')" // @Produce json // @success 200 {array} models.MstDaerahModel "Success" // @Failure 400 {object} utils.RequestError "Bad request" // @Failure 401 {object} utils.RequestError "Unauthorized" // @Failure 404 {object} utils.RequestError "Not found" // @Failure 422 {array} utils.RequestError "Data validation failed" // @Failure 500 {object} utils.RequestError "Server error" // @Router /daerah [get] func (h *DaerahHandler) Index(c *fiber.Ctx) error { page, err := strconv.Atoi(c.Query("page", "1")) if err != nil { return err } log.Println("page: ", page) var limit int limit, err = strconv.Atoi(c.Query("limit", "20")) if err != nil { return err } log.Println("page: ", page) //limit max 50 if limit > 50 { limit = 50 } resp, totalCount, pageCount, err := h.Controller.Index(page, limit, c.Query("filter", "")) if err != nil { return err } log.Printf("totalCount: %d, perPage: %d, pageCount: %d\n", totalCount, limit, pageCount) c.Append("x-pagination-total-count", strconv.Itoa(totalCount)) c.Append("x-pagination-page-count", strconv.Itoa(pageCount)) c.Append("x-pagination-page-size", strconv.Itoa(limit)) if page > 1 { c.Append("x-pagination-previous-page", strconv.Itoa(page-1)) } c.Append("x-pagination-current-page", strconv.Itoa(page)) if page < pageCount { c.Append("x-pagination-next-page", strconv.Itoa(page+1)) } return c.JSON(resp) } // Index func for get detail of daerah. // // @Summary get detail of daerah // @Description get detail of daerah // @Tags Master Daerah // @Accept json // @Param id path int false "data yang dipilih berdasarkan id daerah" // @Produce json // @success 200 {object} models.MstDaerahDetilModel "Success" // @Failure 400 {object} utils.RequestError "Bad request" // @Failure 401 {object} utils.RequestError "Unauthorized" // @Failure 404 {object} utils.RequestError "Not found" // @Failure 422 {array} utils.RequestError "Data validation failed" // @Failure 500 {object} utils.RequestError "Server error" // @Router /daerah/{id} [get] func (h *DaerahHandler) View(c *fiber.Ctx) error { id, err := c.ParamsInt("id", 0) if err != nil { return err } resp, err := h.Controller.View(id) if err != nil { return err } return c.JSON(resp) } // Create func for create new daerah. // // @Summary create new daerah // @Description create new daerah. // @Tags Master Daerah // @Accept json // @Param payload body models.MstDaerahPayloadModel true "Payload" // @Produce json // @success 200 {object} bool "Create success" // @Failure 400 {object} utils.RequestError "Bad request" // @Failure 401 {object} utils.RequestError "Unauthorized" // @Failure 404 {object} utils.RequestError "Not found" // @Failure 422 {array} utils.DataValidationError "Data validation failed" // @Failure 500 {object} utils.RequestError "Server error" // @Security ApiKeyAuth // @Router /daerah [post] func (h *DaerahHandler) Create(c *fiber.Ctx) error { // siapkan penampung payload dari fe payloadl := new(models.MstDaerahPayloadModel) // baca kiriman dari fe err := c.BodyParser(payloadl) if err != nil { return err } // Validate form input err = h.Validate.Struct(payloadl) if err != nil { return err } err = h.Controller.Create(*payloadl) if err != nil { return err } return c.JSON("true") } // Create func for update daerah. // // @Summary update daerah // @Description update daerah. // @Tags Master Daerah // @Accept json // @Param id path int false "data yang dipilih untuk diubah berdasarkan id daerah" // @Param payload body models.MstDaerahPayloadModel true "Payload" // @Produce json // @success 200 {object} bool "Update success" // @Failure 400 {object} utils.RequestError "Bad request" // @Failure 401 {object} utils.RequestError "Unauthorized" // @Failure 404 {object} utils.RequestError "Not found" // @Failure 422 {array} utils.DataValidationError "Data validation failed" // @Failure 500 {object} utils.RequestError "Server error" // @Security ApiKeyAuth // @Router /daerah/{id} [put] func (h *DaerahHandler) Update(c *fiber.Ctx) error { id, err := c.ParamsInt("id", 0) if err != nil { return err } // siapkan penampung payload dari fe payloadl := new(models.MstDaerahPayloadModel) // baca kiriman dari fe err = c.BodyParser(payloadl) if err != nil { return err } // Validate form input err = h.Validate.Struct(payloadl) if err != nil { return err } err = h.Controller.Update(id, *payloadl) if err != nil { return err } return c.JSON("true") } // Create func for delete daerah. // // @Summary delete daerah // @Description delete daerah. // @Tags Master Daerah // @Accept json // @Param id path int false "data yang dipilih untuk dihapus berdasarkan id daerah" // @Produce json // @success 200 {object} bool "Delete success" // @Failure 400 {object} utils.RequestError "Bad request" // @Failure 401 {object} utils.RequestError "Unauthorized" // @Failure 404 {object} utils.RequestError "Not found" // @Failure 422 {array} utils.DataValidationError "Data validation failed" // @Failure 500 {object} utils.RequestError "Server error" // @Security ApiKeyAuth // @Router /daerah/{id} [delete] func (h *DaerahHandler) Delete(c *fiber.Ctx) error { id, err := c.ParamsInt("id", 0) if err != nil { return err } err = h.Controller.Delete(id) if err != nil { return err } return c.JSON("true") }