sipd-master/handler/sub_kegiatan_handler.go
2025-09-16 08:26:35 +07:00

243 lines
7.1 KiB
Go

package handler
import (
"kemendagri/sipd/services/master-sipd/controllers"
"log"
"strconv"
"github.com/go-playground/validator/v10"
"github.com/gofiber/fiber/v2"
)
type SubKegiatanHandler struct {
Controller *controllers.SubKegiatanController
Validate *validator.Validate
}
func NewSubKegiatanHandler(app *fiber.App, vld *validator.Validate, controller *controllers.SubKegiatanController) {
handler := &SubKegiatanHandler{
Controller: controller,
Validate: vld,
}
// public route
rpub := app.Group("/subkegiatan")
rpub.Get("/", handler.Index)
rpub.Get("/:id/:tahun", handler.View)
// rpub.Post("/", handler.Create)
// rpub.Put("/:id", handler.Update)
// rpub.Delete("/:id", handler.Delete)
}
// Index func for get lists of Sub Kegiatan.
//
// @Summary get lists of Sub Kegiatan
// @Description get lists of Sub Kegiatan
// @Tags Master Sub Kegiatan
// @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_sub_kegiatan,nama_sub_kegiatan,tahun,daerah_khusus,jenis_pemda]). Contoh: kode_sub_kegiatan.1.01.02.1.01.01 -> (akan menampilkan data dengan kode sub kegiatan = '1.01.02.1.01.01')"
// @Produce json
// @success 200 {array} models.MstSubKegiatanModel "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 /subkegiatan [get]
func (h *SubKegiatanHandler) 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 Sub Kegiatan.
//
// @Summary get detail of Sub Kegiatan
// @Description get detail of Sub Kegiatan
// @Tags Master Sub Kegiatan
// @Accept json
// @Param id path int false "data yang dipilih berdasarkan id sub kegiatan"
// @Param tahun path int false "data yang dipilih berdasarkan tahun"
// @Produce json
// @success 200 {object} models.MstSubKegiatanDetilModel "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 /subkegiatan/{id}/{tahun} [get]
func (h *SubKegiatanHandler) View(c *fiber.Ctx) error {
id, err := c.ParamsInt("id", 0)
if err != nil {
return err
}
tahun, err := c.ParamsInt("tahun", 0)
if err != nil {
return err
}
resp, err := h.Controller.View(id, tahun)
if err != nil {
return err
}
return c.JSON(resp)
}
// // Create func for create new daerah.
// //
// // @Summary create new daerah
// // @Description create new daerah.
// // @Tags Ref Daerah
// // @Accept json
// // @Param payload body models.RefDaerahModelPayload 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.RefDaerahModelPayload)
// // 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 Ref Daerah
// // @Accept json
// // @Param id path int false "data yang dipilih untuk diubah berdasarkan id daerah"
// // @Param payload body models.RefDaerahModelPayload 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.RefDaerahModelPayload)
// // 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 Ref 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")
// }