diff --git a/app/database/entity/article_categories.entity.go b/app/database/entity/article_categories.entity.go index 6b287a8..e7b3bdd 100644 --- a/app/database/entity/article_categories.entity.go +++ b/app/database/entity/article_categories.entity.go @@ -8,6 +8,7 @@ type ArticleCategories struct { Description string `json:"description" gorm:"type:varchar"` ThumbnailPath *string `json:"thumbnail_path" gorm:"type:varchar"` ParentId *int `json:"parent_id" gorm:"type:int4"` + Position *int `json:"position" gorm:"type:int4"` CreatedById *uint `json:"created_by_id" gorm:"type:int4"` StatusId int `json:"status_id" gorm:"type:int4;default:1"` IsPublish *bool `json:"is_publish" gorm:"type:bool;default:false"` diff --git a/app/database/entity/ppid_data_categories.entity.go b/app/database/entity/ppid_data_categories.entity.go index f0c4b37..c09e1cd 100644 --- a/app/database/entity/ppid_data_categories.entity.go +++ b/app/database/entity/ppid_data_categories.entity.go @@ -8,6 +8,7 @@ type PpidDataCategories struct { Description string `json:"description" gorm:"type:varchar"` Slug string `json:"slug" gorm:"type:varchar"` ParentId *uint `json:"parent_id" gorm:"type:int4"` + Position *int `json:"position" gorm:"type:int4"` ThumbnailPath *string `json:"thumbnail_path" gorm:"type:varchar"` IsActive *bool `json:"is_active" gorm:"type:bool;default:true"` CreatedAt time.Time `json:"created_at" gorm:"default:now()"` diff --git a/app/database/entity/ppid_data_files.entity.go b/app/database/entity/ppid_data_files.entity.go index 0a87b19..71ae48a 100644 --- a/app/database/entity/ppid_data_files.entity.go +++ b/app/database/entity/ppid_data_files.entity.go @@ -9,7 +9,9 @@ type PpidDataFiles struct { FileType *string `json:"file_type" gorm:"type:varchar"` FileName *string `json:"file_name" gorm:"type:varchar"` FilePath *string `json:"file_path" gorm:"type:varchar"` + FileUrl *string `json:"file_url" gorm:"type:varchar"` Size *string `json:"size" gorm:"type:varchar"` + Position *int `json:"position" gorm:"type:int4"` DownloadCount *int `json:"download_count" gorm:"type:int4;default:0"` CreatedById *int `json:"created_by_id" gorm:"type:int4"` StatusId *int `json:"status_id" gorm:"type:int4"` diff --git a/app/database/entity/ppid_datas.entity.go b/app/database/entity/ppid_datas.entity.go index 036f026..ed9858b 100644 --- a/app/database/entity/ppid_datas.entity.go +++ b/app/database/entity/ppid_datas.entity.go @@ -11,6 +11,7 @@ type PpidDatas struct { CreatedById *uint `json:"created_by_id" gorm:"type:int4"` LevelGroupId *uint `json:"level_group_id" gorm:"type:int4"` Group *string `json:"group" gorm:"type:varchar"` + Position *int `json:"position" gorm:"type:int4"` NeedApprovalFromUserRole *string `json:"need_approval_from_user_role" gorm:"type:varchar"` NeedApprovalFromUserLevel *string `json:"need_approval_from_user_level" gorm:"type:varchar"` BackApprovalToUserRole *string `json:"back_approval_to_user_role" gorm:"type:varchar"` diff --git a/app/module/ppid_data_categories/controller/controller.go b/app/module/ppid_data_categories/controller/controller.go index 9504fff..136e207 100644 --- a/app/module/ppid_data_categories/controller/controller.go +++ b/app/module/ppid_data_categories/controller/controller.go @@ -1,13 +1,16 @@ package controller -import "go-humas-be/app/module/ppid_data_categories/service" +import ( + "github.com/rs/zerolog" + "go-humas-be/app/module/ppid_data_categories/service" +) type Controller struct { PpidDataCategories PpidDataCategoriesController } -func NewController(PpidDataCategoriesService service.PpidDataCategoriesService) *Controller { +func NewController(PpidDataCategoriesService service.PpidDataCategoriesService, log zerolog.Logger) *Controller { return &Controller{ - PpidDataCategories: NewPpidDataCategoriesController(PpidDataCategoriesService), + PpidDataCategories: NewPpidDataCategoriesController(PpidDataCategoriesService, log), } -} \ No newline at end of file +} diff --git a/app/module/ppid_data_categories/controller/ppid_data_categories.controller.go b/app/module/ppid_data_categories/controller/ppid_data_categories.controller.go index 85bcaa8..241ff69 100644 --- a/app/module/ppid_data_categories/controller/ppid_data_categories.controller.go +++ b/app/module/ppid_data_categories/controller/ppid_data_categories.controller.go @@ -26,13 +26,15 @@ type PpidDataCategoriesController interface { Save(c *fiber.Ctx) error SaveThumbnail(c *fiber.Ctx) error Update(c *fiber.Ctx) error + UpdatePosition(c *fiber.Ctx) error Delete(c *fiber.Ctx) error Viewer(c *fiber.Ctx) error } -func NewPpidDataCategoriesController(ppidDataCategoriesService service.PpidDataCategoriesService) PpidDataCategoriesController { +func NewPpidDataCategoriesController(ppidDataCategoriesService service.PpidDataCategoriesService, log zerolog.Logger) PpidDataCategoriesController { return &ppidDataCategoriesController{ ppidDataCategoriesService: ppidDataCategoriesService, + Log: log, } } @@ -240,6 +242,34 @@ func (_i *ppidDataCategoriesController) Update(c *fiber.Ctx) error { }) } +// UpdatePosition PpidDataCategories +// @Summary UpdatePosition PpidDataCategories +// @Description API for Update Position PpidDataCategories +// @Tags PPID Categories +// @Security Bearer +// @Param payload body request.PpidDataCategoriesUpdatePositionPayload true "Required payload" +// @Success 200 {object} response.Response +// @Failure 400 {object} response.BadRequestError +// @Failure 401 {object} response.UnauthorizedError +// @Failure 500 {object} response.InternalServerError +// @Router /ppid-data-categories/position [post] +func (_i *ppidDataCategoriesController) UpdatePosition(c *fiber.Ctx) error { + req := new(request.PpidDataCategoriesUpdatePositionPayload) + if err := utilVal.ParseAndValidate(c, req); err != nil { + return err + } + + err := _i.ppidDataCategoriesService.UpdatePosition(req.Positions) + if err != nil { + return err + } + + return utilRes.Resp(c, utilRes.Response{ + Success: true, + Messages: utilRes.Messages{"PpidDataCategories successfully updated"}, + }) +} + // Delete PpidDataCategories // @Summary Delete PpidDataCategories // @Description API for delete PpidDataCategories diff --git a/app/module/ppid_data_categories/mapper/ppid_data_categories.mapper.go b/app/module/ppid_data_categories/mapper/ppid_data_categories.mapper.go index 5c846f8..6d3a54b 100644 --- a/app/module/ppid_data_categories/mapper/ppid_data_categories.mapper.go +++ b/app/module/ppid_data_categories/mapper/ppid_data_categories.mapper.go @@ -30,6 +30,7 @@ func PpidDataCategoriesResponseMapper(ppidDataCategoriesReq *entity.PpidDataCate Description: ppidDataCategoriesReq.Description, Slug: ppidDataCategoriesReq.Slug, ParentId: ppidDataCategoriesReq.ParentId, + Position: ppidDataCategoriesReq.Position, ThumbnailUrl: "/ppid-data-categories/thumbnail/viewer/" + strconv.Itoa(int(ppidDataCategoriesReq.ID)), IsActive: ppidDataCategoriesReq.IsActive, CreatedAt: ppidDataCategoriesReq.CreatedAt, @@ -74,6 +75,7 @@ func PpidDataCategoriesWithPpidDataResponseMapper( Description: ppidDataCategoriesReq.Description, Slug: ppidDataCategoriesReq.Slug, ParentId: ppidDataCategoriesReq.ParentId, + Position: ppidDataCategoriesReq.Position, ThumbnailUrl: "/ppid-data-categories/thumbnail/viewer/" + strconv.Itoa(int(ppidDataCategoriesReq.ID)), IsActive: ppidDataCategoriesReq.IsActive, CreatedAt: ppidDataCategoriesReq.CreatedAt, diff --git a/app/module/ppid_data_categories/ppid_data_categories.module.go b/app/module/ppid_data_categories/ppid_data_categories.module.go index b0ee88e..5bdafae 100644 --- a/app/module/ppid_data_categories/ppid_data_categories.module.go +++ b/app/module/ppid_data_categories/ppid_data_categories.module.go @@ -49,6 +49,7 @@ func (_i *PpidDataCategoriesRouter) RegisterPpidDataCategoriesRoutes() { router.Get("/slug/:slug", ppidDataCategoriesController.ShowBySlug) router.Post("/", ppidDataCategoriesController.Save) router.Put("/:id", ppidDataCategoriesController.Update) + router.Post("/position", ppidDataCategoriesController.UpdatePosition) router.Post("/thumbnail/:id", ppidDataCategoriesController.SaveThumbnail) router.Get("/thumbnail/viewer/:id", ppidDataCategoriesController.Viewer) router.Delete("/:id", ppidDataCategoriesController.Delete) diff --git a/app/module/ppid_data_categories/repository/ppid_data_categories.repository.go b/app/module/ppid_data_categories/repository/ppid_data_categories.repository.go index 1665196..16f3e74 100644 --- a/app/module/ppid_data_categories/repository/ppid_data_categories.repository.go +++ b/app/module/ppid_data_categories/repository/ppid_data_categories.repository.go @@ -22,8 +22,10 @@ type PpidDataCategoriesRepository interface { GetAllNonPage(req request.PpidDataCategoriesQueryRequest) (ppidDataCategoriess []*entity.PpidDataCategories, paging paginator.Pagination, err error) FindOne(id uint) (ppidDataCategories *entity.PpidDataCategories, err error) FindOneBySlug(slug string) (ppidDataCategories *entity.PpidDataCategories, err error) + FindOneLastPosition() (ppidDataCategories *entity.PpidDataCategories, err error) Create(ppidDataCategories *entity.PpidDataCategories) (err error) Update(id uint, ppidDataCategories *entity.PpidDataCategories) (err error) + UpdateAll(ppidDataCategories []*entity.PpidDataCategories) (err error) Delete(id uint) (err error) } @@ -141,6 +143,15 @@ func (_i *ppidDataCategoriesRepository) FindOneBySlug(slug string) (ppidDataCate return ppidDataCategories, nil } +func (_i *ppidDataCategoriesRepository) FindOneLastPosition() (ppidDataCategories *entity.PpidDataCategories, err error) { + if err := _i.DB.DB.Where("position IS NOT NULL").Last(&ppidDataCategories). + Order(fmt.Sprintf("%s %s", "position", "DESC")).Error; err != nil { + return nil, err + } + + return ppidDataCategories, nil +} + func (_i *ppidDataCategoriesRepository) Create(ppidDataCategories *entity.PpidDataCategories) (err error) { return _i.DB.DB.Create(ppidDataCategories).Error } @@ -151,6 +162,18 @@ func (_i *ppidDataCategoriesRepository) Update(id uint, ppidDataCategories *enti Updates(ppidDataCategories).Error } +func (_i *ppidDataCategoriesRepository) UpdateAll(ppidDataCategories []*entity.PpidDataCategories) (err error) { + for _, req := range ppidDataCategories { + err := _i.DB.DB.Model(&entity.PpidDataCategories{}). + Where(&entity.PpidDataCategories{ID: req.ID}). + Updates(req).Error + if err != nil { + return err + } + } + return nil +} + func (_i *ppidDataCategoriesRepository) Delete(id uint) error { return _i.DB.DB.Delete(&entity.PpidDataCategories{}, id).Error } diff --git a/app/module/ppid_data_categories/request/ppid_data_categories.request.go b/app/module/ppid_data_categories/request/ppid_data_categories.request.go index ccdf2b2..783610b 100644 --- a/app/module/ppid_data_categories/request/ppid_data_categories.request.go +++ b/app/module/ppid_data_categories/request/ppid_data_categories.request.go @@ -55,6 +55,23 @@ func (req PpidDataCategoriesUpdateRequest) ToEntity() *entity.PpidDataCategories } } +type PpidDataCategoriesUpdatePositionPayload struct { + Positions []PpidDataCategoriesUpdatePositionRequest `json:"positions"` +} + +type PpidDataCategoriesUpdatePositionRequest struct { + ID uint `json:"id" validate:"required"` + Position int `json:"position" validate:"required"` +} + +func (req PpidDataCategoriesUpdatePositionRequest) ToEntity() *entity.PpidDataCategories { + return &entity.PpidDataCategories{ + ID: req.ID, + Position: &req.Position, + UpdatedAt: time.Now(), + } +} + type PpidDataCategoriesQueryRequestContext struct { Title string `json:"title"` Description string `json:"description"` diff --git a/app/module/ppid_data_categories/response/ppid_data_categories.response.go b/app/module/ppid_data_categories/response/ppid_data_categories.response.go index 520a62a..75e241b 100644 --- a/app/module/ppid_data_categories/response/ppid_data_categories.response.go +++ b/app/module/ppid_data_categories/response/ppid_data_categories.response.go @@ -11,6 +11,7 @@ type PpidDataCategoriesResponse struct { Description string `json:"description"` Slug string `json:"slug"` ParentId *uint `json:"parentId"` + Position *int `json:"position"` ThumbnailUrl string `json:"thumbnailUrl"` IsActive *bool `json:"isActive"` CreatedAt time.Time `json:"createdAt"` @@ -25,6 +26,7 @@ type PpidDataCategoriesWithPpidDataResponse struct { Description string `json:"description"` Slug string `json:"slug"` ParentId *uint `json:"parentId"` + Position *int `json:"position"` ThumbnailUrl string `json:"thumbnailUrl"` IsActive *bool `json:"isActive"` CreatedAt time.Time `json:"createdAt"` diff --git a/app/module/ppid_data_categories/service/ppid_data_categories.service.go b/app/module/ppid_data_categories/service/ppid_data_categories.service.go index d8789ec..ce01cd9 100644 --- a/app/module/ppid_data_categories/service/ppid_data_categories.service.go +++ b/app/module/ppid_data_categories/service/ppid_data_categories.service.go @@ -5,6 +5,7 @@ import ( "github.com/gofiber/fiber/v2" "github.com/minio/minio-go/v7" "github.com/rs/zerolog" + "go-humas-be/app/database/entity" "go-humas-be/app/module/ppid_data_categories/mapper" "go-humas-be/app/module/ppid_data_categories/repository" "go-humas-be/app/module/ppid_data_categories/request" @@ -43,6 +44,7 @@ type PpidDataCategoriesService interface { Save(req request.PpidDataCategoriesCreateRequest) (err error) SaveThumbnail(c *fiber.Ctx) (err error) Update(id uint, req request.PpidDataCategoriesUpdateRequest) (err error) + UpdatePosition(req []request.PpidDataCategoriesUpdatePositionRequest) (err error) Delete(id uint) error Viewer(c *fiber.Ctx) error } @@ -140,7 +142,14 @@ func (_i *ppidDataCategoriesService) ShowBySlug(slug string) (ppidDataCategories func (_i *ppidDataCategoriesService) Save(req request.PpidDataCategoriesCreateRequest) (err error) { _i.Log.Info().Interface("data", req).Msg("") - return _i.Repo.Create(req.ToEntity()) + lastPpidData, _ := _i.Repo.FindOneLastPosition() + lastPosition := lastPpidData.Position + *lastPosition += 1 + + newReq := req.ToEntity() + newReq.Position = lastPosition + + return _i.Repo.Create(newReq) } func (_i *ppidDataCategoriesService) SaveThumbnail(c *fiber.Ctx) (err error) { @@ -223,6 +232,21 @@ func (_i *ppidDataCategoriesService) Update(id uint, req request.PpidDataCategor return _i.Repo.Update(id, req.ToEntity()) } +func (_i *ppidDataCategoriesService) UpdatePosition(req []request.PpidDataCategoriesUpdatePositionRequest) (err error) { + _i.Log.Info().Interface("data", req).Msg("") + + var entityReq []*entity.PpidDataCategories + for _, reqItem := range req { + entityReq = append(entityReq, reqItem.ToEntity()) + } + + _i.Log.Info().Str("timestamp", time.Now(). + Format(time.RFC3339)).Str("Service:UpdatePosition", "ppidDataCategoriesController"). + Interface("entityReq", entityReq).Msg("") + + return _i.Repo.UpdateAll(entityReq) +} + func (_i *ppidDataCategoriesService) Delete(id uint) error { result, err := _i.Repo.FindOne(id) if err != nil { diff --git a/app/module/ppid_data_files/controller/controller.go b/app/module/ppid_data_files/controller/controller.go index c36eac8..9bbebfa 100644 --- a/app/module/ppid_data_files/controller/controller.go +++ b/app/module/ppid_data_files/controller/controller.go @@ -1,13 +1,16 @@ package controller -import "go-humas-be/app/module/ppid_data_files/service" +import ( + "github.com/rs/zerolog" + "go-humas-be/app/module/ppid_data_files/service" +) type Controller struct { PpidDataFiles PpidDataFilesController } -func NewController(PpidDataFilesService service.PpidDataFilesService) *Controller { +func NewController(PpidDataFilesService service.PpidDataFilesService, log zerolog.Logger) *Controller { return &Controller{ - PpidDataFiles: NewPpidDataFilesController(PpidDataFilesService), + PpidDataFiles: NewPpidDataFilesController(PpidDataFilesService, log), } -} \ No newline at end of file +} diff --git a/app/module/ppid_data_files/controller/ppid_data_files.controller.go b/app/module/ppid_data_files/controller/ppid_data_files.controller.go index 65bebbd..a33e931 100644 --- a/app/module/ppid_data_files/controller/ppid_data_files.controller.go +++ b/app/module/ppid_data_files/controller/ppid_data_files.controller.go @@ -2,10 +2,12 @@ package controller import ( "github.com/gofiber/fiber/v2" + "github.com/rs/zerolog" "go-humas-be/app/module/ppid_data_files/request" "go-humas-be/app/module/ppid_data_files/service" "go-humas-be/utils/paginator" "strconv" + "time" utilRes "go-humas-be/utils/response" utilVal "go-humas-be/utils/validator" @@ -13,6 +15,7 @@ import ( type ppidDataFilesController struct { ppidDataFilesService service.PpidDataFilesService + Log zerolog.Logger } type PpidDataFilesController interface { @@ -20,13 +23,15 @@ type PpidDataFilesController interface { Show(c *fiber.Ctx) error Save(c *fiber.Ctx) error Update(c *fiber.Ctx) error + UpdatePosition(c *fiber.Ctx) error Delete(c *fiber.Ctx) error Viewer(c *fiber.Ctx) error } -func NewPpidDataFilesController(ppidDataFilesService service.PpidDataFilesService) PpidDataFilesController { +func NewPpidDataFilesController(ppidDataFilesService service.PpidDataFilesService, log zerolog.Logger) PpidDataFilesController { return &ppidDataFilesController{ ppidDataFilesService: ppidDataFilesService, + Log: log, } } @@ -161,6 +166,48 @@ func (_i *ppidDataFilesController) Update(c *fiber.Ctx) error { }) } +// UpdatePosition PpidDataFiles +// @Summary UpdatePosition PpidDataFiles +// @Description API for Update Position PpidDataFiles +// @Tags PPID Files +// @Security Bearer +// @Param payload body request.PpidDataFilesUpdatePositionPayload true "Required payload" +// @Success 200 {object} response.Response +// @Failure 400 {object} response.BadRequestError +// @Failure 401 {object} response.UnauthorizedError +// @Failure 500 {object} response.InternalServerError +// @Router /ppid-data-files/position [post] +func (_i *ppidDataFilesController) UpdatePosition(c *fiber.Ctx) error { + + _i.Log.Info().Str("timestamp", time.Now(). + Format(time.RFC3339)).Str("Service:All", "ppidDataFilesController"). + Interface("req", "TEST").Msg("") + + //req := new(request.PpidDataFilesUpdatePositionPayload) + // + //_i.Log.Info().Str("timestamp", time.Now(). + // Format(time.RFC3339)).Str("Service:All", "ppidDataCategoriesController"). + // Interface("req", "TEST").Msg("") + // + //if err := utilVal.ParseAndValidate(c, req); err != nil { + // return err + //} + // + //_i.Log.Info().Str("timestamp", time.Now(). + // Format(time.RFC3339)).Str("Service:All", "ppidDataCategoriesController"). + // Interface("req", req).Msg("") + // + //err := _i.ppidDataFilesService.UpdatePosition(req.Positions) + //if err != nil { + // return err + //} + + return utilRes.Resp(c, utilRes.Response{ + Success: true, + Messages: utilRes.Messages{"PpidDataFiles successfully updated"}, + }) +} + // Delete PpidDataFiles // @Summary delete PpidDataFiles // @Description API for delete PpidDataFiles diff --git a/app/module/ppid_data_files/ppid_data_files.module.go b/app/module/ppid_data_files/ppid_data_files.module.go index 323d3e8..4905547 100644 --- a/app/module/ppid_data_files/ppid_data_files.module.go +++ b/app/module/ppid_data_files/ppid_data_files.module.go @@ -48,6 +48,7 @@ func (_i *PpidDataFilesRouter) RegisterPpidDataFilesRoutes() { router.Get("/:id", ppidDataFilesController.Show) router.Post("/:ppidDataId", ppidDataFilesController.Save) router.Put("/:id", ppidDataFilesController.Update) + router.Post("/position", ppidDataFilesController.UpdatePosition) router.Delete("/:id", ppidDataFilesController.Delete) router.Get("/viewer/:filename", ppidDataFilesController.Viewer) }) diff --git a/app/module/ppid_data_files/repository/ppid_data_files.repository.go b/app/module/ppid_data_files/repository/ppid_data_files.repository.go index 517f425..3908e7d 100644 --- a/app/module/ppid_data_files/repository/ppid_data_files.repository.go +++ b/app/module/ppid_data_files/repository/ppid_data_files.repository.go @@ -1,6 +1,7 @@ package repository import ( + "fmt" "github.com/rs/zerolog" "go-humas-be/app/database" "go-humas-be/app/database/entity" @@ -18,9 +19,11 @@ type PpidDataFilesRepository interface { GetAll(req request.PpidDataFilesQueryRequest) (ppidDataFiless []*entity.PpidDataFiles, paging paginator.Pagination, err error) FindOne(id uint) (ppidDataFiles *entity.PpidDataFiles, err error) FindByFilename(filename string) (ppidDataFiles *entity.PpidDataFiles, err error) - FindByPpidData(ppidDataId uint) (ppidDataFiless []*entity.PpidDataFiles, err error) + FindByPpidData(ppidDataId uint) (ppidDataFiles []*entity.PpidDataFiles, err error) + FindOneLastPosition() (ppidDataFiles *entity.PpidDataFiles, err error) Create(ppidDataFiles *entity.PpidDataFiles) (err error) Update(id uint, ppidDataFiles *entity.PpidDataFiles) (err error) + UpdateAll(ppidDataFiles []*entity.PpidDataFiles) (err error) Delete(id uint) (err error) } @@ -76,6 +79,15 @@ func (_i *ppidDataFilesRepository) FindByPpidData(ppidDataId uint) (ppidDataFile return ppidDataFiles, nil } +func (_i *ppidDataFilesRepository) FindOneLastPosition() (ppidDataFiles *entity.PpidDataFiles, err error) { + if err := _i.DB.DB.Where("position IS NOT NULL").Last(&ppidDataFiles). + Order(fmt.Sprintf("%s %s", "position", "DESC")).Error; err != nil { + return nil, err + } + + return ppidDataFiles, nil +} + func (_i *ppidDataFilesRepository) Create(ppidDataFiles *entity.PpidDataFiles) (err error) { return _i.DB.DB.Create(ppidDataFiles).Error } @@ -86,6 +98,18 @@ func (_i *ppidDataFilesRepository) Update(id uint, ppidDataFiles *entity.PpidDat Updates(ppidDataFiles).Error } +func (_i *ppidDataFilesRepository) UpdateAll(ppidDataFiles []*entity.PpidDataFiles) (err error) { + for _, req := range ppidDataFiles { + err := _i.DB.DB.Model(&entity.PpidDataFiles{}). + Where(&entity.PpidDataFiles{ID: req.ID}). + Updates(req).Error + if err != nil { + return err + } + } + return nil +} + func (_i *ppidDataFilesRepository) Delete(id uint) error { return _i.DB.DB.Delete(&entity.PpidDataFiles{}, id).Error } diff --git a/app/module/ppid_data_files/request/ppid_data_files.request.go b/app/module/ppid_data_files/request/ppid_data_files.request.go index 74cc4e0..ad86bf8 100644 --- a/app/module/ppid_data_files/request/ppid_data_files.request.go +++ b/app/module/ppid_data_files/request/ppid_data_files.request.go @@ -73,6 +73,23 @@ func (req PpidDataFilesUpdateRequest) ToEntity() *entity.PpidDataFiles { } } +type PpidDataFilesUpdatePositionPayload struct { + Positions []PpidDataFilesUpdatePositionRequest `json:"positions"` +} + +type PpidDataFilesUpdatePositionRequest struct { + ID uint `json:"id"` + Position int `json:"position"` +} + +func (req PpidDataFilesUpdatePositionRequest) ToEntity() *entity.PpidDataFiles { + return &entity.PpidDataFiles{ + ID: req.ID, + Position: &req.Position, + UpdatedAt: time.Now(), + } +} + type PpidDataFilesQueryRequestContext struct { Title string `json:"title"` PpidDataId string `json:"ppidDataId"` diff --git a/app/module/ppid_data_files/service/ppid_data_files.service.go b/app/module/ppid_data_files/service/ppid_data_files.service.go index fa01b2a..9601e39 100644 --- a/app/module/ppid_data_files/service/ppid_data_files.service.go +++ b/app/module/ppid_data_files/service/ppid_data_files.service.go @@ -5,6 +5,7 @@ import ( "github.com/gofiber/fiber/v2" "github.com/minio/minio-go/v7" "github.com/rs/zerolog" + "go-humas-be/app/database/entity" "go-humas-be/app/module/ppid_data_files/mapper" "go-humas-be/app/module/ppid_data_files/repository" "go-humas-be/app/module/ppid_data_files/request" @@ -34,6 +35,7 @@ type PpidDataFilesService interface { Show(id uint) (ppidDataFiles *response.PpidDataFilesResponse, err error) Save(c *fiber.Ctx) error Update(id uint, req request.PpidDataFilesUpdateRequest) (err error) + UpdatePosition(req []request.PpidDataFilesUpdatePositionRequest) (err error) Delete(id uint) error Viewer(c *fiber.Ctx, filename string) error } @@ -158,6 +160,17 @@ func (_i *ppidDataFilesService) Update(id uint, req request.PpidDataFilesUpdateR return _i.Repo.Update(id, req.ToEntity()) } +func (_i *ppidDataFilesService) UpdatePosition(req []request.PpidDataFilesUpdatePositionRequest) (err error) { + _i.Log.Info().Interface("data", req).Msg("") + + var entityReq []*entity.PpidDataFiles + for _, reqItem := range req { + entityReq = append(entityReq, reqItem.ToEntity()) + } + + return _i.Repo.UpdateAll(entityReq) +} + func (_i *ppidDataFilesService) Delete(id uint) error { return _i.Repo.Delete(id) } diff --git a/app/module/ppid_datas/controller/ppid_datas.controller.go b/app/module/ppid_datas/controller/ppid_datas.controller.go index 51647a3..a958008 100644 --- a/app/module/ppid_datas/controller/ppid_datas.controller.go +++ b/app/module/ppid_datas/controller/ppid_datas.controller.go @@ -23,6 +23,7 @@ type PpidDatasController interface { Show(c *fiber.Ctx) error Save(c *fiber.Ctx) error Update(c *fiber.Ctx) error + UpdatePosition(c *fiber.Ctx) error UpdateApprovalStatus(c *fiber.Ctx) error Delete(c *fiber.Ctx) error } @@ -202,6 +203,34 @@ func (_i *ppidDatasController) UpdateApprovalStatus(c *fiber.Ctx) error { }) } +// UpdatePosition PpidDatas +// @Summary UpdatePosition PpidDatas +// @Description API for Update Position PpidDatas +// @Tags PPID Data +// @Security Bearer +// @Param payload body request.PpidDatasUpdatePositionPayload true "Required payload" +// @Success 200 {object} response.Response +// @Failure 400 {object} response.BadRequestError +// @Failure 401 {object} response.UnauthorizedError +// @Failure 500 {object} response.InternalServerError +// @Router /ppid-datas/position [post] +func (_i *ppidDatasController) UpdatePosition(c *fiber.Ctx) error { + req := new(request.PpidDatasUpdatePositionPayload) + if err := utilVal.ParseAndValidate(c, req); err != nil { + return err + } + + err := _i.ppidDatasService.UpdatePosition(req.Positions) + if err != nil { + return err + } + + return utilRes.Resp(c, utilRes.Response{ + Success: true, + Messages: utilRes.Messages{"PpidDataCategories successfully updated"}, + }) +} + // Delete PpidDatas // @Summary delete PpidDatas // @Description API for delete PpidDatas diff --git a/app/module/ppid_datas/ppid_datas.module.go b/app/module/ppid_datas/ppid_datas.module.go index 5077fb7..f11611e 100644 --- a/app/module/ppid_datas/ppid_datas.module.go +++ b/app/module/ppid_datas/ppid_datas.module.go @@ -48,6 +48,7 @@ func (_i *PpidDatasRouter) RegisterPpidDatasRoutes() { router.Get("/:id", ppidDatasController.Show) router.Post("/", ppidDatasController.Save) router.Put("/:id", ppidDatasController.Update) + router.Post("/position", ppidDatasController.UpdatePosition) router.Post("/approval", ppidDatasController.UpdateApprovalStatus) router.Delete("/:id", ppidDatasController.Delete) }) diff --git a/app/module/ppid_datas/repository/ppid_datas.repository.go b/app/module/ppid_datas/repository/ppid_datas.repository.go index ca983ec..d733d2c 100644 --- a/app/module/ppid_datas/repository/ppid_datas.repository.go +++ b/app/module/ppid_datas/repository/ppid_datas.repository.go @@ -22,8 +22,10 @@ type PpidDatasRepository interface { GetAll(req request.PpidDatasQueryRequest) (ppidDatass []*entity.PpidDatas, paging paginator.Pagination, err error) FindOne(id uint) (ppidDatas *entity.PpidDatas, err error) FindOneUsingSlug(slug string) (ppidDatas *entity.PpidDatas, err error) + FindOneLastPosition() (ppidDatas *entity.PpidDatas, err error) Create(ppidDatas *entity.PpidDatas) (ppidDataReturn *entity.PpidDatas, err error) Update(id uint, ppidDatas *entity.PpidDatas) (err error) + UpdateAll(ppidDatas []*entity.PpidDatas) (err error) Delete(id uint) (err error) } @@ -115,6 +117,15 @@ func (_i *ppidDatasRepository) FindOneUsingSlug(slug string) (ppidDatas *entity. return ppidDatas, nil } +func (_i *ppidDatasRepository) FindOneLastPosition() (ppidDatas *entity.PpidDatas, err error) { + if err := _i.DB.DB.Where("position IS NOT NULL").Last(&ppidDatas). + Order(fmt.Sprintf("%s %s", "position", "DESC")).Error; err != nil { + return nil, err + } + + return ppidDatas, nil +} + func (_i *ppidDatasRepository) Create(ppidDatas *entity.PpidDatas) (ppidDataReturn *entity.PpidDatas, err error) { result := _i.DB.DB.Create(ppidDatas) @@ -131,6 +142,18 @@ func (_i *ppidDatasRepository) Update(id uint, ppidDatas *entity.PpidDatas) (err Updates(ppidDatas).Error } +func (_i *ppidDatasRepository) UpdateAll(ppidDatas []*entity.PpidDatas) (err error) { + for _, req := range ppidDatas { + err := _i.DB.DB.Model(&entity.PpidDatas{}). + Where(&entity.PpidDatas{ID: req.ID}). + Updates(req).Error + if err != nil { + return err + } + } + return nil +} + func (_i *ppidDatasRepository) Delete(id uint) error { return _i.DB.DB.Delete(&entity.PpidDatas{}, id).Error } diff --git a/app/module/ppid_datas/request/ppid_datas.request.go b/app/module/ppid_datas/request/ppid_datas.request.go index 9ceefc0..6c31769 100644 --- a/app/module/ppid_datas/request/ppid_datas.request.go +++ b/app/module/ppid_datas/request/ppid_datas.request.go @@ -85,6 +85,23 @@ func (req PpidDatasUpdateRequest) ToEntity() *entity.PpidDatas { } } +type PpidDatasUpdatePositionPayload struct { + Positions []PpidDatasUpdatePositionRequest `json:"positions"` +} + +type PpidDatasUpdatePositionRequest struct { + ID uint `json:"id" validate:"required"` + Position int `json:"position" validate:"required"` +} + +func (req PpidDatasUpdatePositionRequest) ToEntity() *entity.PpidDatas { + return &entity.PpidDatas{ + ID: req.ID, + Position: &req.Position, + UpdatedAt: time.Now(), + } +} + type PpidDatasQueryRequestContext struct { Title string `json:"title"` Description string `json:"description"` diff --git a/app/module/ppid_datas/service/ppid_datas.service.go b/app/module/ppid_datas/service/ppid_datas.service.go index c48e404..33224e0 100644 --- a/app/module/ppid_datas/service/ppid_datas.service.go +++ b/app/module/ppid_datas/service/ppid_datas.service.go @@ -38,6 +38,7 @@ type PpidDatasService interface { Save(req request.PpidDatasCreateRequest, authToken string) (ppidDatas *entity.PpidDatas, err error) Update(id uint, req request.PpidDatasUpdateRequest) (err error) UpdateApprovalStatus(req requestPpidApproval.PpidDataApprovalHistoriesCreateRequest, authToken string) (err error) + UpdatePosition(req []request.PpidDatasUpdatePositionRequest) (err error) Delete(id uint) error } @@ -119,6 +120,11 @@ func (_i *ppidDatasService) Save(req request.PpidDatasCreateRequest, authToken s } newReq.Group = userLevels.Group + lastPpidData, _ := _i.Repo.FindOneLastPosition() + lastPosition := lastPpidData.Position + *lastPosition += 1 + newReq.Position = lastPosition + return _i.Repo.Create(newReq) } @@ -127,6 +133,17 @@ func (_i *ppidDatasService) Update(id uint, req request.PpidDatasUpdateRequest) return _i.Repo.Update(id, req.ToEntity()) } +func (_i *ppidDatasService) UpdatePosition(req []request.PpidDatasUpdatePositionRequest) (err error) { + _i.Log.Info().Interface("data", req).Msg("") + + var entityReq []*entity.PpidDatas + for _, reqItem := range req { + entityReq = append(entityReq, reqItem.ToEntity()) + } + + return _i.Repo.UpdateAll(entityReq) +} + func (_i *ppidDatasService) UpdateApprovalStatus(req requestPpidApproval.PpidDataApprovalHistoriesCreateRequest, authToken string) (err error) { _i.Log.Info().Interface("data", req).Msg("") ppidData, err := _i.Repo.FindOne(req.PpidDataId) diff --git a/docs/swagger/docs.go b/docs/swagger/docs.go index 96437c1..b39d6d6 100644 --- a/docs/swagger/docs.go +++ b/docs/swagger/docs.go @@ -3776,6 +3776,57 @@ const docTemplate = `{ } } }, + "/ppid-data-categories/position": { + "post": { + "security": [ + { + "Bearer": [] + } + ], + "description": "API for Update Position PpidDataCategories", + "tags": [ + "PPID Categories" + ], + "summary": "UpdatePosition PpidDataCategories", + "parameters": [ + { + "description": "Required payload", + "name": "payload", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/request.PpidDataCategoriesUpdatePositionPayload" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/response.Response" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/response.BadRequestError" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "$ref": "#/definitions/response.UnauthorizedError" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/response.InternalServerError" + } + } + } + } + }, "/ppid-data-categories/slug/{slug}": { "get": { "security": [ @@ -4202,6 +4253,57 @@ const docTemplate = `{ } } }, + "/ppid-data-files/position": { + "post": { + "security": [ + { + "Bearer": [] + } + ], + "description": "API for Update Position PpidDataFiles", + "tags": [ + "PPID Files" + ], + "summary": "UpdatePosition PpidDataFiles", + "parameters": [ + { + "description": "Required payload", + "name": "payload", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/request.PpidDataFilesUpdatePositionPayload" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/response.Response" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/response.BadRequestError" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "$ref": "#/definitions/response.UnauthorizedError" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/response.InternalServerError" + } + } + } + } + }, "/ppid-data-files/viewer/{filename}": { "get": { "security": [ @@ -4718,6 +4820,57 @@ const docTemplate = `{ } } }, + "/ppid-datas/position": { + "post": { + "security": [ + { + "Bearer": [] + } + ], + "description": "API for Update Position PpidDatas", + "tags": [ + "PPID Data" + ], + "summary": "UpdatePosition PpidDatas", + "parameters": [ + { + "description": "Required payload", + "name": "payload", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/request.PpidDatasUpdatePositionPayload" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/response.Response" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/response.BadRequestError" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "$ref": "#/definitions/response.UnauthorizedError" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/response.InternalServerError" + } + } + } + } + }, "/ppid-datas/{id}": { "get": { "security": [ @@ -7005,6 +7158,32 @@ const docTemplate = `{ } } }, + "request.PpidDataCategoriesUpdatePositionPayload": { + "type": "object", + "properties": { + "positions": { + "type": "array", + "items": { + "$ref": "#/definitions/request.PpidDataCategoriesUpdatePositionRequest" + } + } + } + }, + "request.PpidDataCategoriesUpdatePositionRequest": { + "type": "object", + "required": [ + "id", + "position" + ], + "properties": { + "id": { + "type": "integer" + }, + "position": { + "type": "integer" + } + } + }, "request.PpidDataCategoriesUpdateRequest": { "type": "object", "required": [ @@ -7031,6 +7210,28 @@ const docTemplate = `{ } } }, + "request.PpidDataFilesUpdatePositionPayload": { + "type": "object", + "properties": { + "positions": { + "type": "array", + "items": { + "$ref": "#/definitions/request.PpidDataFilesUpdatePositionRequest" + } + } + } + }, + "request.PpidDataFilesUpdatePositionRequest": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "position": { + "type": "integer" + } + } + }, "request.PpidDataFilesUpdateRequest": { "type": "object", "required": [ @@ -7100,6 +7301,32 @@ const docTemplate = `{ } } }, + "request.PpidDatasUpdatePositionPayload": { + "type": "object", + "properties": { + "positions": { + "type": "array", + "items": { + "$ref": "#/definitions/request.PpidDatasUpdatePositionRequest" + } + } + } + }, + "request.PpidDatasUpdatePositionRequest": { + "type": "object", + "required": [ + "id", + "position" + ], + "properties": { + "id": { + "type": "integer" + }, + "position": { + "type": "integer" + } + } + }, "request.UserLevelsCreateRequest": { "type": "object", "required": [ diff --git a/docs/swagger/swagger.json b/docs/swagger/swagger.json index 52928fb..1c864e2 100644 --- a/docs/swagger/swagger.json +++ b/docs/swagger/swagger.json @@ -3765,6 +3765,57 @@ } } }, + "/ppid-data-categories/position": { + "post": { + "security": [ + { + "Bearer": [] + } + ], + "description": "API for Update Position PpidDataCategories", + "tags": [ + "PPID Categories" + ], + "summary": "UpdatePosition PpidDataCategories", + "parameters": [ + { + "description": "Required payload", + "name": "payload", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/request.PpidDataCategoriesUpdatePositionPayload" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/response.Response" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/response.BadRequestError" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "$ref": "#/definitions/response.UnauthorizedError" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/response.InternalServerError" + } + } + } + } + }, "/ppid-data-categories/slug/{slug}": { "get": { "security": [ @@ -4191,6 +4242,57 @@ } } }, + "/ppid-data-files/position": { + "post": { + "security": [ + { + "Bearer": [] + } + ], + "description": "API for Update Position PpidDataFiles", + "tags": [ + "PPID Files" + ], + "summary": "UpdatePosition PpidDataFiles", + "parameters": [ + { + "description": "Required payload", + "name": "payload", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/request.PpidDataFilesUpdatePositionPayload" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/response.Response" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/response.BadRequestError" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "$ref": "#/definitions/response.UnauthorizedError" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/response.InternalServerError" + } + } + } + } + }, "/ppid-data-files/viewer/{filename}": { "get": { "security": [ @@ -4707,6 +4809,57 @@ } } }, + "/ppid-datas/position": { + "post": { + "security": [ + { + "Bearer": [] + } + ], + "description": "API for Update Position PpidDatas", + "tags": [ + "PPID Data" + ], + "summary": "UpdatePosition PpidDatas", + "parameters": [ + { + "description": "Required payload", + "name": "payload", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/request.PpidDatasUpdatePositionPayload" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/response.Response" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/response.BadRequestError" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "$ref": "#/definitions/response.UnauthorizedError" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/response.InternalServerError" + } + } + } + } + }, "/ppid-datas/{id}": { "get": { "security": [ @@ -6994,6 +7147,32 @@ } } }, + "request.PpidDataCategoriesUpdatePositionPayload": { + "type": "object", + "properties": { + "positions": { + "type": "array", + "items": { + "$ref": "#/definitions/request.PpidDataCategoriesUpdatePositionRequest" + } + } + } + }, + "request.PpidDataCategoriesUpdatePositionRequest": { + "type": "object", + "required": [ + "id", + "position" + ], + "properties": { + "id": { + "type": "integer" + }, + "position": { + "type": "integer" + } + } + }, "request.PpidDataCategoriesUpdateRequest": { "type": "object", "required": [ @@ -7020,6 +7199,28 @@ } } }, + "request.PpidDataFilesUpdatePositionPayload": { + "type": "object", + "properties": { + "positions": { + "type": "array", + "items": { + "$ref": "#/definitions/request.PpidDataFilesUpdatePositionRequest" + } + } + } + }, + "request.PpidDataFilesUpdatePositionRequest": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "position": { + "type": "integer" + } + } + }, "request.PpidDataFilesUpdateRequest": { "type": "object", "required": [ @@ -7089,6 +7290,32 @@ } } }, + "request.PpidDatasUpdatePositionPayload": { + "type": "object", + "properties": { + "positions": { + "type": "array", + "items": { + "$ref": "#/definitions/request.PpidDatasUpdatePositionRequest" + } + } + } + }, + "request.PpidDatasUpdatePositionRequest": { + "type": "object", + "required": [ + "id", + "position" + ], + "properties": { + "id": { + "type": "integer" + }, + "position": { + "type": "integer" + } + } + }, "request.UserLevelsCreateRequest": { "type": "object", "required": [ diff --git a/docs/swagger/swagger.yaml b/docs/swagger/swagger.yaml index efa6797..ef9f480 100644 --- a/docs/swagger/swagger.yaml +++ b/docs/swagger/swagger.yaml @@ -253,6 +253,23 @@ definitions: - slug - title type: object + request.PpidDataCategoriesUpdatePositionPayload: + properties: + positions: + items: + $ref: '#/definitions/request.PpidDataCategoriesUpdatePositionRequest' + type: array + type: object + request.PpidDataCategoriesUpdatePositionRequest: + properties: + id: + type: integer + position: + type: integer + required: + - id + - position + type: object request.PpidDataCategoriesUpdateRequest: properties: description: @@ -271,6 +288,20 @@ definitions: - slug - title type: object + request.PpidDataFilesUpdatePositionPayload: + properties: + positions: + items: + $ref: '#/definitions/request.PpidDataFilesUpdatePositionRequest' + type: array + type: object + request.PpidDataFilesUpdatePositionRequest: + properties: + id: + type: integer + position: + type: integer + type: object request.PpidDataFilesUpdateRequest: properties: createdById: @@ -318,6 +349,23 @@ definitions: - statusId - title type: object + request.PpidDatasUpdatePositionPayload: + properties: + positions: + items: + $ref: '#/definitions/request.PpidDatasUpdatePositionRequest' + type: array + type: object + request.PpidDatasUpdatePositionRequest: + properties: + id: + type: integer + position: + type: integer + required: + - id + - position + type: object request.UserLevelsCreateRequest: properties: aliasName: @@ -3090,6 +3138,38 @@ paths: summary: Update PpidDataCategories tags: - PPID Categories + /ppid-data-categories/position: + post: + description: API for Update Position PpidDataCategories + parameters: + - description: Required payload + in: body + name: payload + required: true + schema: + $ref: '#/definitions/request.PpidDataCategoriesUpdatePositionPayload' + responses: + "200": + description: OK + schema: + $ref: '#/definitions/response.Response' + "400": + description: Bad Request + schema: + $ref: '#/definitions/response.BadRequestError' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/response.UnauthorizedError' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/response.InternalServerError' + security: + - Bearer: [] + summary: UpdatePosition PpidDataCategories + tags: + - PPID Categories /ppid-data-categories/slug/{slug}: get: description: API for getting one PpidDataCategories @@ -3396,6 +3476,38 @@ paths: summary: Create PpidDataFiles tags: - PPID Files + /ppid-data-files/position: + post: + description: API for Update Position PpidDataFiles + parameters: + - description: Required payload + in: body + name: payload + required: true + schema: + $ref: '#/definitions/request.PpidDataFilesUpdatePositionPayload' + responses: + "200": + description: OK + schema: + $ref: '#/definitions/response.Response' + "400": + description: Bad Request + schema: + $ref: '#/definitions/response.BadRequestError' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/response.UnauthorizedError' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/response.InternalServerError' + security: + - Bearer: [] + summary: UpdatePosition PpidDataFiles + tags: + - PPID Files /ppid-data-files/viewer/{filename}: get: description: API for create PpidDataFiles @@ -3685,6 +3797,38 @@ paths: summary: UpdateApprovalStatus PpidDatas tags: - PPID Data + /ppid-datas/position: + post: + description: API for Update Position PpidDatas + parameters: + - description: Required payload + in: body + name: payload + required: true + schema: + $ref: '#/definitions/request.PpidDatasUpdatePositionPayload' + responses: + "200": + description: OK + schema: + $ref: '#/definitions/response.Response' + "400": + description: Bad Request + schema: + $ref: '#/definitions/response.BadRequestError' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/response.UnauthorizedError' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/response.InternalServerError' + security: + - Bearer: [] + summary: UpdatePosition PpidDatas + tags: + - PPID Data /provinces: get: description: API for getting all Provinces