From a3fd7e7fe79cb2729ab615252a9657f7fd6b01da Mon Sep 17 00:00:00 2001 From: hanif salafi Date: Mon, 29 Apr 2024 01:39:43 +0700 Subject: [PATCH] feat: update user, user_role, user_level, ppid_datas, ppid_data_files, ppid_categories, article, article_categories, article_files, etc --- app/database/entity/districts.entity.go | 6 +- .../entity/ppid_data_categories.entity.go | 16 +- app/database/entity/ppid_data_files.entity.go | 33 +- app/database/entity/ppid_datas.entity.go | 24 +- app/database/entity/user_levels.entity.go | 1 + app/database/entity/user_roles.entity.go | 4 +- .../article_categories.controller.go | 1 + .../article_categories.repository.go | 9 + .../controller/article_files.controller.go | 2 + .../repository/article_files.repository.go | 9 + .../service/article_files.service.go | 1 - .../controller/articles.controller.go | 1 + .../repository/articles.repository.go | 9 + .../districts/mapper/districts.mapper.go | 8 +- .../districts/request/districts.request.go | 29 +- .../ppid_data_categories.controller.go | 72 +- .../ppid_data_categories.repository.go | 22 +- .../request/ppid_data_categories.request.go | 41 +- .../response/ppid_data_categories.response.go | 16 +- .../service/ppid_data_categories.service.go | 9 +- .../controller/ppid_data_files.controller.go | 111 +- .../ppid_data_files/ppid_data_files.module.go | 1 + .../request/ppid_data_files.request.go | 161 ++- .../response/ppid_data_files.response.go | 30 +- .../service/ppid_data_files.service.go | 160 ++- .../controller/ppid_datas.controller.go | 13 +- .../repository/ppid_datas.repository.go | 38 +- .../ppid_datas/request/ppid_datas.request.go | 82 +- .../ppid_datas/service/ppid_datas.service.go | 7 + .../controller/user_levels.controller.go | 1 + .../repository/user_levels.repository.go | 10 + .../controller/user_roles.controller.go | 6 +- .../user_roles/mapper/user_roles.mapper.go | 18 +- .../repository/user_roles.repository.go | 14 +- .../user_roles/request/user_roles.request.go | 6 +- .../response/user_roles.response.go | 4 +- .../user_roles/service/user_roles.service.go | 22 +- .../users/controller/users.controller.go | 1 + .../users/repository/users.repository.go | 18 + docs/swagger/docs.go | 1155 +++++++++++++---- docs/swagger/swagger.json | 1155 +++++++++++++---- docs/swagger/swagger.yaml | 807 +++++++++--- go.mod | 1 + go.sum | 2 + utils/paginator/index.paginator.go | 34 +- utils/service/user_utils.service.go | 31 + 46 files changed, 3229 insertions(+), 972 deletions(-) create mode 100644 utils/service/user_utils.service.go diff --git a/app/database/entity/districts.entity.go b/app/database/entity/districts.entity.go index 5892118..480de99 100644 --- a/app/database/entity/districts.entity.go +++ b/app/database/entity/districts.entity.go @@ -1,7 +1,7 @@ package entity type Districts struct { - ID uint `json:"id" gorm:"primaryKey;type:int4;autoIncrement"` - DisNam string `json:"dis_nam" gorm:"type:varchar"` - CityId int `json:"city_id" gorm:"type:int4"` + ID uint `json:"id" gorm:"primaryKey;type:int4;autoIncrement"` + DisName string `json:"dis_name" gorm:"type:varchar"` + CityId int `json:"city_id" gorm:"type:int4"` } diff --git a/app/database/entity/ppid_data_categories.entity.go b/app/database/entity/ppid_data_categories.entity.go index 0a08763..1191b50 100644 --- a/app/database/entity/ppid_data_categories.entity.go +++ b/app/database/entity/ppid_data_categories.entity.go @@ -3,11 +3,11 @@ package entity import "time" type PpidDataCategories struct { - ID uint `json:"id" gorm:"primaryKey;type:int4;autoIncrement"` - Title string `json:"title" gorm:"type:varchar"` - Description string `json:"description" gorm:"type:varchar"` - Slug string `json:"slug" gorm:"type:varchar"` - IsActive bool `json:"is_active" gorm:"type:bool"` - CreatedAt time.Time `json:"created_at" gorm:"default:now()"` - UpdatedAt time.Time `json:"updated_at" gorm:"default:now()"` -} \ No newline at end of file + ID uint `json:"id" gorm:"primaryKey;type:int4;autoIncrement"` + Title string `json:"title" gorm:"type:varchar"` + Description string `json:"description" gorm:"type:varchar"` + Slug string `json:"slug" gorm:"type:varchar"` + IsActive *bool `json:"is_active" gorm:"type:bool;default:true"` + CreatedAt time.Time `json:"created_at" gorm:"default:now()"` + UpdatedAt time.Time `json:"updated_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 e4ff541..c4a9b93 100644 --- a/app/database/entity/ppid_data_files.entity.go +++ b/app/database/entity/ppid_data_files.entity.go @@ -3,18 +3,21 @@ package entity import "time" type PpidDataFiles struct { - ID uint `json:"id" gorm:"primaryKey;type:int4;autoIncrement"` - Title string `json:"title" gorm:"type:varchar"` - PpidDataId int `json:"ppid_data_id" gorm:"type:int4"` - Description string `json:"description" gorm:"type:varchar"` - Unit string `json:"unit" gorm:"type:varchar"` - FileType string `json:"file_type" gorm:"type:varchar"` - DownloadCount int `json:"download_count" gorm:"type:int4"` - CreatedById int `json:"created_by_id" gorm:"type:int4"` - StatusId int `json:"status_id" gorm:"type:int4"` - IsPublish bool `json:"is_publish" gorm:"type:bool"` - PublishedAt time.Time `json:"published_at" gorm:"type:timestamp"` - IsActive bool `json:"is_active" gorm:"type:bool"` - CreatedAt time.Time `json:"created_at" gorm:"default:now()"` - UpdatedAt time.Time `json:"updated_at" gorm:"default:now()"` -} \ No newline at end of file + ID uint `json:"id" gorm:"primaryKey;type:int4;autoIncrement"` + Title string `json:"title" gorm:"type:varchar"` + PpidDataId int `json:"ppid_data_id" gorm:"type:int4"` + Description string `json:"description" gorm:"type:varchar"` + Unit string `json:"unit" gorm:"type:varchar"` + FileType string `json:"file_type" gorm:"type:varchar"` + FileName *string `json:"file_name" gorm:"type:varchar"` + FilePath *string `json:"file_path" gorm:"type:varchar"` + Size *string `json:"size" gorm:"type:varchar"` + DownloadCount *int `json:"download_count" gorm:"type:int4"` + CreatedById *int `json:"created_by_id" gorm:"type:int4"` + StatusId *int `json:"status_id" gorm:"type:int4"` + IsPublish *bool `json:"is_publish" gorm:"type:bool;default:false"` + PublishedAt *time.Time `json:"published_at" gorm:"type:timestamp"` + IsActive *bool `json:"is_active" gorm:"type:bool;default:false"` + CreatedAt time.Time `json:"created_at" gorm:"default:now()"` + UpdatedAt time.Time `json:"updated_at" gorm:"default:now()"` +} diff --git a/app/database/entity/ppid_datas.entity.go b/app/database/entity/ppid_datas.entity.go index 2076dfd..625666c 100644 --- a/app/database/entity/ppid_datas.entity.go +++ b/app/database/entity/ppid_datas.entity.go @@ -3,15 +3,17 @@ package entity import "time" type PpidDatas struct { - ID uint `json:"id" gorm:"primaryKey;type:int4;autoIncrement"` - Title string `json:"title" gorm:"type:varchar"` - Description string `json:"description" gorm:"type:varchar"` - CategoryId int `json:"category_id" gorm:"type:int4"` - CreatedById int `json:"created_by_id" gorm:"type:int4"` - StatusId int `json:"status_id" gorm:"type:int4"` - IsPublish *bool `json:"is_publish" gorm:"type:bool;default:false"` - PublishedAt *time.Time `json:"published_at" gorm:"type:timestamp"` - IsActive *bool `json:"is_active" gorm:"type:bool;default:true"` - CreatedAt time.Time `json:"created_at" gorm:"default:now()"` - UpdatedAt time.Time `json:"updated_at" gorm:"default:now()"` + ID uint `json:"id" gorm:"primaryKey;type:int4;autoIncrement"` + Title string `json:"title" gorm:"type:varchar"` + Description string `json:"description" gorm:"type:varchar"` + CategoryId int `json:"category_id" gorm:"type:int4"` + CreatedById int `json:"created_by_id" gorm:"type:int4"` + LevelGroupId *int `json:"level_group_id" gorm:"type:int4"` + Group *string `json:"group" gorm:"type:varchar"` + StatusId int `json:"status_id" gorm:"type:int4"` + IsPublish *bool `json:"is_publish" gorm:"type:bool;default:false"` + PublishedAt *time.Time `json:"published_at" gorm:"type:timestamp"` + IsActive *bool `json:"is_active" gorm:"type:bool;default:true"` + CreatedAt time.Time `json:"created_at" gorm:"default:now()"` + UpdatedAt time.Time `json:"updated_at" gorm:"default:now()"` } diff --git a/app/database/entity/user_levels.entity.go b/app/database/entity/user_levels.entity.go index 608c51f..3498833 100644 --- a/app/database/entity/user_levels.entity.go +++ b/app/database/entity/user_levels.entity.go @@ -9,6 +9,7 @@ type UserLevels struct { LevelNumber int `json:"level_number" gorm:"type:int4"` ParentLevelId int `json:"parent_level_id" gorm:"type:int4"` ProvinceId int `json:"province_id" gorm:"type:int4"` + Group *string `json:"group" gorm:"type:varchar"` IsActive *bool `json:"is_active" gorm:"type:bool"` CreatedAt time.Time `json:"created_at" gorm:"default:now()"` UpdatedAt time.Time `json:"updated_at" gorm:"default:now()"` diff --git a/app/database/entity/user_roles.entity.go b/app/database/entity/user_roles.entity.go index 4583f78..8e8f052 100644 --- a/app/database/entity/user_roles.entity.go +++ b/app/database/entity/user_roles.entity.go @@ -8,8 +8,8 @@ type UserRoles struct { Description string `json:"description" gorm:"type:varchar"` Code string `json:"code" gorm:"type:varchar"` LevelNumber int `json:"level_number" gorm:"type:int4"` - StatusId *int `json:"status_id" gorm:"type:int4;default:1"` - CreatedById *int `json:"created_by_id" gorm:"type:int4"` + StatusId int `json:"status_id" gorm:"type:int4;default:1"` + CreatedById *uint `json:"created_by_id" gorm:"type:int4"` IsActive *bool `json:"is_active" gorm:"type:bool;default:true"` CreatedAt time.Time `json:"created_at" gorm:"default:now()"` UpdatedAt time.Time `json:"updated_at" gorm:"default:now()"` diff --git a/app/module/article_categories/controller/article_categories.controller.go b/app/module/article_categories/controller/article_categories.controller.go index fe7b9e9..102f38c 100644 --- a/app/module/article_categories/controller/article_categories.controller.go +++ b/app/module/article_categories/controller/article_categories.controller.go @@ -35,6 +35,7 @@ func NewArticleCategoriesController(articleCategoriesService service.ArticleCate // @Tags ArticleCategories // @Security Bearer // @Param req query request.ArticleCategoriesQueryRequest false "query parameters" +// @Param req query paginator.Pagination false "pagination parameters" // @Success 200 {object} response.Response // @Failure 400 {object} response.BadRequestError // @Failure 401 {object} response.UnauthorizedError diff --git a/app/module/article_categories/repository/article_categories.repository.go b/app/module/article_categories/repository/article_categories.repository.go index 54fd0cb..cea50bd 100644 --- a/app/module/article_categories/repository/article_categories.repository.go +++ b/app/module/article_categories/repository/article_categories.repository.go @@ -1,6 +1,7 @@ package repository import ( + "fmt" "go-humas-be/app/database" "go-humas-be/app/database/entity" "go-humas-be/app/module/article_categories/request" @@ -59,6 +60,14 @@ func (_i *articleCategoriesRepository) GetAll(req request.ArticleCategoriesQuery } query.Count(&count) + if req.Pagination.SortBy != "" { + direction := "ASC" + if req.Pagination.Sort == "desc" { + direction = "DESC" + } + query.Order(fmt.Sprintf("%s %s", req.Pagination.SortBy, direction)) + } + req.Pagination.Count = count req.Pagination = paginator.Paging(req.Pagination) diff --git a/app/module/article_files/controller/article_files.controller.go b/app/module/article_files/controller/article_files.controller.go index a9f02bd..b36c504 100644 --- a/app/module/article_files/controller/article_files.controller.go +++ b/app/module/article_files/controller/article_files.controller.go @@ -34,6 +34,8 @@ func NewArticleFilesController(articleFilesService service.ArticleFilesService) // @Description API for getting all ArticleFiles // @Tags ArticleFiles // @Security Bearer +// @Param req query request.ArticleFilesQueryRequest false "query parameters" +// @Param req query paginator.Pagination false "pagination parameters" // @Success 200 {object} response.Response // @Failure 400 {object} response.BadRequestError // @Failure 401 {object} response.UnauthorizedError diff --git a/app/module/article_files/repository/article_files.repository.go b/app/module/article_files/repository/article_files.repository.go index a011ec2..6291ebb 100644 --- a/app/module/article_files/repository/article_files.repository.go +++ b/app/module/article_files/repository/article_files.repository.go @@ -1,6 +1,7 @@ package repository import ( + "fmt" "go-humas-be/app/database" "go-humas-be/app/database/entity" "go-humas-be/app/module/article_files/request" @@ -49,6 +50,14 @@ func (_i *articleFilesRepository) GetAll(req request.ArticleFilesQueryRequest) ( } query.Count(&count) + if req.Pagination.SortBy != "" { + direction := "ASC" + if req.Pagination.Sort == "desc" { + direction = "DESC" + } + query.Order(fmt.Sprintf("%s %s", req.Pagination.SortBy, direction)) + } + req.Pagination.Count = count req.Pagination = paginator.Paging(req.Pagination) diff --git a/app/module/article_files/service/article_files.service.go b/app/module/article_files/service/article_files.service.go index 6805a43..2269c74 100644 --- a/app/module/article_files/service/article_files.service.go +++ b/app/module/article_files/service/article_files.service.go @@ -142,7 +142,6 @@ func (_i *articleFilesService) Delete(id uint) error { if err != nil { return err } - result.IsActive = false return _i.Repo.Update(id, result) } diff --git a/app/module/articles/controller/articles.controller.go b/app/module/articles/controller/articles.controller.go index ea9a584..e89a97b 100644 --- a/app/module/articles/controller/articles.controller.go +++ b/app/module/articles/controller/articles.controller.go @@ -35,6 +35,7 @@ func NewArticlesController(articlesService service.ArticlesService) ArticlesCont // @Tags Articles // @Security Bearer // @Param req query request.ArticlesQueryRequest false "query parameters" +// @Param req query paginator.Pagination false "pagination parameters" // @Success 200 {object} response.Response // @Failure 400 {object} response.BadRequestError // @Failure 401 {object} response.UnauthorizedError diff --git a/app/module/articles/repository/articles.repository.go b/app/module/articles/repository/articles.repository.go index d26d9b7..4b72397 100644 --- a/app/module/articles/repository/articles.repository.go +++ b/app/module/articles/repository/articles.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" @@ -63,6 +64,14 @@ func (_i *articlesRepository) GetAll(req request.ArticlesQueryRequest) (articles } query.Count(&count) + if req.Pagination.SortBy != "" { + direction := "ASC" + if req.Pagination.Sort == "desc" { + direction = "DESC" + } + query.Order(fmt.Sprintf("%s %s", req.Pagination.SortBy, direction)) + } + req.Pagination.Count = count req.Pagination = paginator.Paging(req.Pagination) diff --git a/app/module/districts/mapper/districts.mapper.go b/app/module/districts/mapper/districts.mapper.go index baa21b8..7a86e08 100644 --- a/app/module/districts/mapper/districts.mapper.go +++ b/app/module/districts/mapper/districts.mapper.go @@ -8,10 +8,10 @@ import ( func DistrictsResponseMapper(districtsReq *entity.Districts) (districtsRes *res.DistrictsResponse) { if districtsReq != nil { districtsRes = &res.DistrictsResponse{ - ID: districtsReq.ID, - DisNam: districtsReq.DisNam, - CityId: districtsReq.CityId, + ID: districtsReq.ID, + DisNam: districtsReq.DisName, + CityId: districtsReq.CityId, } } return districtsRes -} \ No newline at end of file +} diff --git a/app/module/districts/request/districts.request.go b/app/module/districts/request/districts.request.go index d9652f3..4c1f8c8 100644 --- a/app/module/districts/request/districts.request.go +++ b/app/module/districts/request/districts.request.go @@ -10,34 +10,33 @@ type DistrictsGeneric interface { } type DistrictsQueryRequest struct { - DisNam string `json:"dis_nam" validate:"required"` - CityId int `json:"city_id" validate:"required"` - Pagination *paginator.Pagination `json:"pagination"` + DisName string `json:"disName" validate:"required"` + CityId int `json:"cityId" validate:"required"` + Pagination *paginator.Pagination `json:"pagination"` } - type DistrictsCreateRequest struct { - DisNam string `json:"dis_nam" validate:"required"` - CityId int `json:"city_id" validate:"required"` + DisName string `json:"disName" validate:"required"` + CityId int `json:"cityId" validate:"required"` } func (req DistrictsCreateRequest) ToEntity() *entity.Districts { return &entity.Districts{ - DisNam: req.DisNam, - CityId: req.CityId, + DisName: req.DisName, + CityId: req.CityId, } } type DistrictsUpdateRequest struct { - ID uint `json:"id" validate:"required"` - DisNam string `json:"dis_nam" validate:"required"` - CityId int `json:"city_id" validate:"required"` + ID uint `json:"id" validate:"required"` + DisName string `json:"disName" validate:"required"` + CityId int `json:"cityId" validate:"required"` } func (req DistrictsUpdateRequest) ToEntity() *entity.Districts { return &entity.Districts{ - ID: req.ID, - DisNam: req.DisNam, - CityId: req.CityId, + ID: req.ID, + DisName: req.DisName, + CityId: req.CityId, } -} \ 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 1e5fefa..bc7fa11 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 @@ -29,16 +29,17 @@ func NewPpidDataCategoriesController(ppidDataCategoriesService service.PpidDataC } } -// All get all PpidDataCategories +// All PpidDataCategories // @Summary Get all PpidDataCategories // @Description API for getting all PpidDataCategories -// @Tags Task +// @Tags PPID Categories // @Security Bearer +// @Param req query request.PpidDataCategoriesQueryRequest false "query parameters" +// @Param req query paginator.Pagination false "pagination parameters" // @Success 200 {object} response.Response -// @Failure 401 {object} response.Response -// @Failure 404 {object} response.Response -// @Failure 422 {object} response.Response -// @Failure 500 {object} response.Response +// @Failure 400 {object} response.BadRequestError +// @Failure 401 {object} response.UnauthorizedError +// @Failure 500 {object} response.InternalServerError // @Router /ppid-data-categories [get] func (_i *ppidDataCategoriesController) All(c *fiber.Ctx) error { paginate, err := paginator.Paginate(c) @@ -46,7 +47,11 @@ func (_i *ppidDataCategoriesController) All(c *fiber.Ctx) error { return err } - var req request.PpidDataCategoriesQueryRequest + reqContext := request.PpidDataCategoriesQueryRequestContext{ + Title: c.Query("title"), + Description: c.Query("description"), + } + req := reqContext.ToParamRequest() req.Pagination = paginate ppidDataCategoriesData, paging, err := _i.ppidDataCategoriesService.All(req) @@ -55,23 +60,23 @@ func (_i *ppidDataCategoriesController) All(c *fiber.Ctx) error { } return utilRes.Resp(c, utilRes.Response{ + Success: true, Messages: utilRes.Messages{"PpidDataCategories list successfully retrieved"}, Data: ppidDataCategoriesData, Meta: paging, }) } -// Show get one PpidDataCategories +// Show PpidDataCategories // @Summary Get one PpidDataCategories // @Description API for getting one PpidDataCategories -// @Tags Task +// @Tags PPID Categories // @Security Bearer // @Param id path int true "PpidDataCategories ID" // @Success 200 {object} response.Response -// @Failure 401 {object} response.Response -// @Failure 404 {object} response.Response -// @Failure 422 {object} response.Response -// @Failure 500 {object} response.Response +// @Failure 400 {object} response.BadRequestError +// @Failure 401 {object} response.UnauthorizedError +// @Failure 500 {object} response.InternalServerError // @Router /ppid-data-categories/{id} [get] func (_i *ppidDataCategoriesController) Show(c *fiber.Ctx) error { id, err := strconv.ParseUint(c.Params("id"), 10, 0) @@ -85,22 +90,22 @@ func (_i *ppidDataCategoriesController) Show(c *fiber.Ctx) error { } return utilRes.Resp(c, utilRes.Response{ + Success: true, Messages: utilRes.Messages{"PpidDataCategories successfully retrieved"}, Data: ppidDataCategoriesData, }) } -// Save create PpidDataCategories +// Save PpidDataCategories // @Summary Create PpidDataCategories // @Description API for create PpidDataCategories -// @Tags Task +// @Tags PPID Categories // @Security Bearer -// @Body request.PpidDataCategoriesCreateRequest +// @Param payload body request.PpidDataCategoriesCreateRequest true "Required payload" // @Success 200 {object} response.Response -// @Failure 401 {object} response.Response -// @Failure 404 {object} response.Response -// @Failure 422 {object} response.Response -// @Failure 500 {object} response.Response +// @Failure 400 {object} response.BadRequestError +// @Failure 401 {object} response.UnauthorizedError +// @Failure 500 {object} response.InternalServerError // @Router /ppid-data-categories [post] func (_i *ppidDataCategoriesController) Save(c *fiber.Ctx) error { req := new(request.PpidDataCategoriesCreateRequest) @@ -114,22 +119,22 @@ func (_i *ppidDataCategoriesController) Save(c *fiber.Ctx) error { } return utilRes.Resp(c, utilRes.Response{ + Success: true, Messages: utilRes.Messages{"PpidDataCategories successfully created"}, }) } -// Update update PpidDataCategories +// Update PpidDataCategories // @Summary update PpidDataCategories // @Description API for update PpidDataCategories -// @Tags Task +// @Tags PPID Categories // @Security Bearer -// @Body request.PpidDataCategoriesUpdateRequest +// @Param payload body request.PpidDataCategoriesUpdateRequest true "Required payload" // @Param id path int true "PpidDataCategories ID" // @Success 200 {object} response.Response -// @Failure 401 {object} response.Response -// @Failure 404 {object} response.Response -// @Failure 422 {object} response.Response -// @Failure 500 {object} response.Response +// @Failure 400 {object} response.BadRequestError +// @Failure 401 {object} response.UnauthorizedError +// @Failure 500 {object} response.InternalServerError // @Router /ppid-data-categories/{id} [put] func (_i *ppidDataCategoriesController) Update(c *fiber.Ctx) error { id, err := strconv.ParseUint(c.Params("id"), 10, 0) @@ -148,21 +153,21 @@ func (_i *ppidDataCategoriesController) Update(c *fiber.Ctx) error { } return utilRes.Resp(c, utilRes.Response{ + Success: true, Messages: utilRes.Messages{"PpidDataCategories successfully updated"}, }) } -// Delete delete PpidDataCategories +// Delete PpidDataCategories // @Summary delete PpidDataCategories // @Description API for delete PpidDataCategories -// @Tags Task +// @Tags PPID Categories // @Security Bearer // @Param id path int true "PpidDataCategories ID" // @Success 200 {object} response.Response -// @Failure 401 {object} response.Response -// @Failure 404 {object} response.Response -// @Failure 422 {object} response.Response -// @Failure 500 {object} response.Response +// @Failure 400 {object} response.BadRequestError +// @Failure 401 {object} response.UnauthorizedError +// @Failure 500 {object} response.InternalServerError // @Router /ppid-data-categories/{id} [delete] func (_i *ppidDataCategoriesController) Delete(c *fiber.Ctx) error { id, err := strconv.ParseUint(c.Params("id"), 10, 0) @@ -176,6 +181,7 @@ func (_i *ppidDataCategoriesController) Delete(c *fiber.Ctx) error { } return utilRes.Resp(c, utilRes.Response{ + Success: true, Messages: utilRes.Messages{"PpidDataCategories successfully deleted"}, }) } 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 da10a69..cf639eb 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 @@ -1,10 +1,12 @@ package repository import ( + "fmt" "go-humas-be/app/database" "go-humas-be/app/database/entity" "go-humas-be/app/module/ppid_data_categories/request" "go-humas-be/utils/paginator" + "strings" ) type ppidDataCategoriesRepository struct { @@ -31,8 +33,26 @@ func (_i *ppidDataCategoriesRepository) GetAll(req request.PpidDataCategoriesQue var count int64 query := _i.DB.DB.Model(&entity.PpidDataCategories{}) + query = query.Where("is_active = ?", true) + + if req.Title != nil && *req.Title != "" { + title := strings.ToLower(*req.Title) + query = query.Where("LOWER(title) LIKE ?", "%"+strings.ToLower(title)+"%") + } + if req.Description != nil && *req.Description != "" { + description := strings.ToLower(*req.Description) + query = query.Where("LOWER(description) LIKE ?", "%"+strings.ToLower(description)+"%") + } query.Count(&count) + if req.Pagination.SortBy != "" { + direction := "ASC" + if req.Pagination.Sort == "desc" { + direction = "DESC" + } + query.Order(fmt.Sprintf("%s %s", req.Pagination.SortBy, direction)) + } + req.Pagination.Count = count req.Pagination = paginator.Paging(req.Pagination) @@ -66,4 +86,4 @@ func (_i *ppidDataCategoriesRepository) Update(id uint, ppidDataCategories *enti func (_i *ppidDataCategoriesRepository) Delete(id uint) error { return _i.DB.DB.Delete(&entity.PpidDataCategories{}, id).Error -} \ No newline at end of file +} 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 54f4db0..7d46aa9 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 @@ -11,10 +11,8 @@ type PpidDataCategoriesGeneric interface { } type PpidDataCategoriesQueryRequest struct { - Title string `json:"title" validate:"required"` - Description string `json:"description" validate:"required"` - Slug string `json:"slug" validate:"required"` - IsActive bool `json:"is_active" validate:"required"` + Title *string `json:"title"` + Description *string `json:"description"` Pagination *paginator.Pagination `json:"pagination"` } @@ -22,7 +20,6 @@ type PpidDataCategoriesCreateRequest struct { Title string `json:"title" validate:"required"` Description string `json:"description" validate:"required"` Slug string `json:"slug" validate:"required"` - IsActive bool `json:"is_active" validate:"required"` } func (req PpidDataCategoriesCreateRequest) ToEntity() *entity.PpidDataCategories { @@ -30,18 +27,14 @@ func (req PpidDataCategoriesCreateRequest) ToEntity() *entity.PpidDataCategories Title: req.Title, Description: req.Description, Slug: req.Slug, - IsActive: req.IsActive, } } type PpidDataCategoriesUpdateRequest struct { - ID uint `json:"id" validate:"required"` - Title string `json:"title" validate:"required"` - Description string `json:"description" validate:"required"` - Slug string `json:"slug" validate:"required"` - IsActive bool `json:"is_active" validate:"required"` - CreatedAt time.Time `json:"created_at"` - UpdatedAt time.Time `json:"updated_at"` + ID uint `json:"id" validate:"required"` + Title string `json:"title" validate:"required"` + Description string `json:"description" validate:"required"` + Slug string `json:"slug" validate:"required"` } func (req PpidDataCategoriesUpdateRequest) ToEntity() *entity.PpidDataCategories { @@ -50,8 +43,24 @@ func (req PpidDataCategoriesUpdateRequest) ToEntity() *entity.PpidDataCategories Title: req.Title, Description: req.Description, Slug: req.Slug, - IsActive: req.IsActive, - CreatedAt: req.CreatedAt, - UpdatedAt: req.UpdatedAt, + UpdatedAt: time.Now(), } } + +type PpidDataCategoriesQueryRequestContext struct { + Title string `json:"title"` + Description string `json:"description"` +} + +func (req PpidDataCategoriesQueryRequestContext) ToParamRequest() PpidDataCategoriesQueryRequest { + var request PpidDataCategoriesQueryRequest + + if title := req.Title; title != "" { + request.Title = &title + } + if description := req.Description; description != "" { + request.Description = &description + } + + return request +} 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 490557d..0b8a17a 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 @@ -3,11 +3,11 @@ package response import "time" type PpidDataCategoriesResponse struct { - ID uint `json:"id"` - Title string `json:"title"` - Description string `json:"description"` - Slug string `json:"slug"` - IsActive bool `json:"is_active"` - CreatedAt time.Time `json:"created_at"` - UpdatedAt time.Time `json:"updated_at"` -} \ No newline at end of file + ID uint `json:"id"` + Title string `json:"title"` + Description string `json:"description"` + Slug string `json:"slug"` + IsActive *bool `json:"is_active"` + CreatedAt time.Time `json:"created_at"` + UpdatedAt time.Time `json:"updated_at"` +} 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 eca172d..e8d789b 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 @@ -68,5 +68,12 @@ func (_i *ppidDataCategoriesService) Update(id uint, req request.PpidDataCategor } func (_i *ppidDataCategoriesService) Delete(id uint) error { - return _i.Repo.Delete(id) + result, err := _i.Repo.FindOne(id) + if err != nil { + return err + } + + isActive := false + result.IsActive = &isActive + return _i.Repo.Update(id, result) } 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 befe52c..63e6ca4 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 @@ -21,6 +21,7 @@ type PpidDataFilesController interface { Save(c *fiber.Ctx) error Update(c *fiber.Ctx) error Delete(c *fiber.Ctx) error + Viewer(c *fiber.Ctx) error } func NewPpidDataFilesController(ppidDataFilesService service.PpidDataFilesService) PpidDataFilesController { @@ -29,16 +30,17 @@ func NewPpidDataFilesController(ppidDataFilesService service.PpidDataFilesServic } } -// All get all PpidDataFiles +// All PpidDataFiles // @Summary Get all PpidDataFiles // @Description API for getting all PpidDataFiles -// @Tags Task +// @Tags PPID Files // @Security Bearer +// @Param req query request.PpidDataFilesQueryRequest false "query parameters" +// @Param req query paginator.Pagination false "pagination parameters" // @Success 200 {object} response.Response -// @Failure 401 {object} response.Response -// @Failure 404 {object} response.Response -// @Failure 422 {object} response.Response -// @Failure 500 {object} response.Response +// @Failure 400 {object} response.BadRequestError +// @Failure 401 {object} response.UnauthorizedError +// @Failure 500 {object} response.InternalServerError // @Router /ppid-data-files [get] func (_i *ppidDataFilesController) All(c *fiber.Ctx) error { paginate, err := paginator.Paginate(c) @@ -46,7 +48,16 @@ func (_i *ppidDataFilesController) All(c *fiber.Ctx) error { return err } - var req request.PpidDataFilesQueryRequest + reqContext := request.PpidDataFilesQueryRequestContext{ + Title: c.Query("title"), + PpidDataId: c.Query("ppidDataId"), + Description: c.Query("description"), + Unit: c.Query("unit"), + FileType: c.Query("fileType"), + StatusId: c.Query("statusId"), + IsPublish: c.Query("isPublish"), + } + req := reqContext.ToParamRequest() req.Pagination = paginate ppidDataFilesData, paging, err := _i.ppidDataFilesService.All(req) @@ -55,23 +66,23 @@ func (_i *ppidDataFilesController) All(c *fiber.Ctx) error { } return utilRes.Resp(c, utilRes.Response{ + Success: true, Messages: utilRes.Messages{"PpidDataFiles list successfully retrieved"}, Data: ppidDataFilesData, Meta: paging, }) } -// Show get one PpidDataFiles +// Show PpidDataFiles // @Summary Get one PpidDataFiles // @Description API for getting one PpidDataFiles -// @Tags Task +// @Tags PPID Files // @Security Bearer // @Param id path int true "PpidDataFiles ID" // @Success 200 {object} response.Response -// @Failure 401 {object} response.Response -// @Failure 404 {object} response.Response -// @Failure 422 {object} response.Response -// @Failure 500 {object} response.Response +// @Failure 400 {object} response.BadRequestError +// @Failure 401 {object} response.UnauthorizedError +// @Failure 500 {object} response.InternalServerError // @Router /ppid-data-files/{id} [get] func (_i *ppidDataFilesController) Show(c *fiber.Ctx) error { id, err := strconv.ParseUint(c.Params("id"), 10, 0) @@ -85,51 +96,49 @@ func (_i *ppidDataFilesController) Show(c *fiber.Ctx) error { } return utilRes.Resp(c, utilRes.Response{ + Success: true, Messages: utilRes.Messages{"PpidDataFiles successfully retrieved"}, Data: ppidDataFilesData, }) } -// Save create PpidDataFiles +// Save PpidDataFiles // @Summary Create PpidDataFiles // @Description API for create PpidDataFiles -// @Tags Task +// @Tags PPID Files // @Security Bearer -// @Body request.PpidDataFilesCreateRequest +// @Produce json +// @Param files formData file true "Upload file" +// @Param payload body request.PpidDataFilesCreateRequest true "Required payload" +// @Param ppidDataId path int true "Ppid Data ID" // @Success 200 {object} response.Response -// @Failure 401 {object} response.Response -// @Failure 404 {object} response.Response -// @Failure 422 {object} response.Response -// @Failure 500 {object} response.Response -// @Router /ppid-data-files [post] +// @Failure 400 {object} response.BadRequestError +// @Failure 401 {object} response.UnauthorizedError +// @Failure 500 {object} response.InternalServerError +// @Router /ppid-data-files/{ppidDataId} [post] func (_i *ppidDataFilesController) Save(c *fiber.Ctx) error { - req := new(request.PpidDataFilesCreateRequest) - if err := utilVal.ParseAndValidate(c, req); err != nil { - return err - } - - err := _i.ppidDataFilesService.Save(*req) + err := _i.ppidDataFilesService.Save(c) if err != nil { return err } return utilRes.Resp(c, utilRes.Response{ + Success: true, Messages: utilRes.Messages{"PpidDataFiles successfully created"}, }) } -// Update update PpidDataFiles +// Update PpidDataFiles // @Summary update PpidDataFiles // @Description API for update PpidDataFiles -// @Tags Task +// @Tags PPID Files // @Security Bearer -// @Body request.PpidDataFilesUpdateRequest -// @Param id path int true "PpidDataFiles ID" +// @Param payload body request.PpidDataFilesUpdateRequest true "Required payload" +// @Param id path int true "Ppid Data ID" // @Success 200 {object} response.Response -// @Failure 401 {object} response.Response -// @Failure 404 {object} response.Response -// @Failure 422 {object} response.Response -// @Failure 500 {object} response.Response +// @Failure 400 {object} response.BadRequestError +// @Failure 401 {object} response.UnauthorizedError +// @Failure 500 {object} response.InternalServerError // @Router /ppid-data-files/{id} [put] func (_i *ppidDataFilesController) Update(c *fiber.Ctx) error { id, err := strconv.ParseUint(c.Params("id"), 10, 0) @@ -148,21 +157,21 @@ func (_i *ppidDataFilesController) Update(c *fiber.Ctx) error { } return utilRes.Resp(c, utilRes.Response{ + Success: true, Messages: utilRes.Messages{"PpidDataFiles successfully updated"}, }) } -// Delete delete PpidDataFiles +// Delete PpidDataFiles // @Summary delete PpidDataFiles // @Description API for delete PpidDataFiles -// @Tags Task +// @Tags PPID Files // @Security Bearer // @Param id path int true "PpidDataFiles ID" // @Success 200 {object} response.Response -// @Failure 401 {object} response.Response -// @Failure 404 {object} response.Response -// @Failure 422 {object} response.Response -// @Failure 500 {object} response.Response +// @Failure 400 {object} response.BadRequestError +// @Failure 401 {object} response.UnauthorizedError +// @Failure 500 {object} response.InternalServerError // @Router /ppid-data-files/{id} [delete] func (_i *ppidDataFilesController) Delete(c *fiber.Ctx) error { id, err := strconv.ParseUint(c.Params("id"), 10, 0) @@ -176,6 +185,26 @@ func (_i *ppidDataFilesController) Delete(c *fiber.Ctx) error { } return utilRes.Resp(c, utilRes.Response{ + Success: true, Messages: utilRes.Messages{"PpidDataFiles successfully deleted"}, }) } + +// Viewer PpidDataFiles +// @Summary Create PpidDataFiles +// @Description API for create PpidDataFiles +// @Tags PPID Files +// @Security Bearer +// @Param id path string true "Ppid Data ID" +// @Success 200 {object} response.Response +// @Failure 400 {object} response.BadRequestError +// @Failure 401 {object} response.UnauthorizedError +// @Failure 500 {object} response.InternalServerError +// @Router /ppid-data-files/viewer/{id} [get] +func (_i *ppidDataFilesController) Viewer(c *fiber.Ctx) error { + id, err := strconv.ParseUint(c.Params("id"), 10, 0) + if err != nil { + return err + } + return _i.ppidDataFilesService.Viewer(c, uint(id)) +} 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 95c3f11..5c91168 100644 --- a/app/module/ppid_data_files/ppid_data_files.module.go +++ b/app/module/ppid_data_files/ppid_data_files.module.go @@ -49,5 +49,6 @@ func (_i *PpidDataFilesRouter) RegisterPpidDataFilesRoutes() { router.Post("/", ppidDataFilesController.Save) router.Put("/:id", ppidDataFilesController.Update) router.Delete("/:id", ppidDataFilesController.Delete) + router.Get("/viewer/:id", ppidDataFilesController.Viewer) }) } 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 506bfb7..3ef0eb9 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 @@ -3,6 +3,7 @@ package request import ( "go-humas-be/app/database/entity" "go-humas-be/utils/paginator" + "strconv" "time" ) @@ -11,82 +12,118 @@ type PpidDataFilesGeneric interface { } type PpidDataFilesQueryRequest struct { - Title string `json:"title" validate:"required"` - PpidDataId int `json:"ppid_data_id" validate:"required"` - Description string `json:"description" validate:"required"` - Unit string `json:"unit" validate:"required"` - FileType string `json:"file_type" validate:"required"` - DownloadCount int `json:"download_count" validate:"required"` - CreatedById int `json:"created_by_id" validate:"required"` - StatusId int `json:"status_id" validate:"required"` - IsPublish bool `json:"is_publish" validate:"required"` - PublishedAt time.Time `json:"published_at" validate:"required"` - IsActive bool `json:"is_active" validate:"required"` - Pagination *paginator.Pagination `json:"pagination"` + Title *string `json:"title"` + PpidDataId *int `json:"ppidDataId"` + Description *string `json:"description"` + Unit *string `json:"unit"` + FileType *string `json:"fileType"` + StatusId *int `json:"statusId"` + IsPublish *bool `json:"isPublish"` + Pagination *paginator.Pagination `json:"pagination"` } type PpidDataFilesCreateRequest struct { - Title string `json:"title" validate:"required"` - PpidDataId int `json:"ppid_data_id" validate:"required"` - Description string `json:"description" validate:"required"` - Unit string `json:"unit" validate:"required"` - FileType string `json:"file_type" validate:"required"` - DownloadCount int `json:"download_count" validate:"required"` - CreatedById int `json:"created_by_id" validate:"required"` - StatusId int `json:"status_id" validate:"required"` - IsPublish bool `json:"is_publish" validate:"required"` - PublishedAt time.Time `json:"published_at" validate:"required"` - IsActive bool `json:"is_active" validate:"required"` + Title string `json:"title" validate:"required"` + PpidDataId int `json:"ppidDataId" validate:"required"` + Description string `json:"description" validate:"required"` + Unit string `json:"unit" validate:"required"` + FileType string `json:"fileType" validate:"required"` + FileName *string `json:"fileName"` + FilePath *string `json:"filePath"` + Size *string `json:"size"` + CreatedById *int `json:"createdById"` + StatusId *int `json:"statusId"` } func (req PpidDataFilesCreateRequest) ToEntity() *entity.PpidDataFiles { return &entity.PpidDataFiles{ - Title: req.Title, - PpidDataId: req.PpidDataId, - Description: req.Description, - Unit: req.Unit, - FileType: req.FileType, - DownloadCount: req.DownloadCount, - CreatedById: req.CreatedById, - StatusId: req.StatusId, - IsPublish: req.IsPublish, - PublishedAt: req.PublishedAt, - IsActive: req.IsActive, + Title: req.Title, + PpidDataId: req.PpidDataId, + Description: req.Description, + Unit: req.Unit, + FileType: req.FileType, + FileName: req.FileName, + FilePath: req.FilePath, + Size: req.Size, + CreatedById: req.CreatedById, + StatusId: req.StatusId, } } type PpidDataFilesUpdateRequest struct { - ID uint `json:"id" validate:"required"` - Title string `json:"title" validate:"required"` - PpidDataId int `json:"ppid_data_id" validate:"required"` - Description string `json:"description" validate:"required"` - Unit string `json:"unit" validate:"required"` - FileType string `json:"file_type" validate:"required"` - DownloadCount int `json:"download_count" validate:"required"` - CreatedById int `json:"created_by_id" validate:"required"` - StatusId int `json:"status_id" validate:"required"` - IsPublish bool `json:"is_publish" validate:"required"` - PublishedAt time.Time `json:"published_at" validate:"required"` - IsActive bool `json:"is_active" validate:"required"` - CreatedAt time.Time `json:"created_at"` - UpdatedAt time.Time `json:"updated_at"` + ID uint `json:"id" validate:"required"` + Title string `json:"title" validate:"required"` + PpidDataId int `json:"ppidDataId" validate:"required"` + Description string `json:"description" validate:"required"` + Unit string `json:"unit" validate:"required"` + FileType string `json:"fileType" validate:"required"` + FilePath *string `json:"filePath"` + CreatedById *int `json:"createdById"` + StatusId *int `json:"statusId"` + IsPublish *bool `json:"isPublish"` + PublishedAt *time.Time `json:"publishedAt"` } func (req PpidDataFilesUpdateRequest) ToEntity() *entity.PpidDataFiles { return &entity.PpidDataFiles{ - ID: req.ID, - Title: req.Title, - PpidDataId: req.PpidDataId, - Description: req.Description, - Unit: req.Unit, - FileType: req.FileType, - DownloadCount: req.DownloadCount, - CreatedById: req.CreatedById, - StatusId: req.StatusId, - IsPublish: req.IsPublish, - PublishedAt: req.PublishedAt, - IsActive: req.IsActive, - CreatedAt: req.CreatedAt, - UpdatedAt: req.UpdatedAt, + ID: req.ID, + Title: req.Title, + PpidDataId: req.PpidDataId, + Description: req.Description, + Unit: req.Unit, + FileType: req.FileType, + FilePath: req.FilePath, + CreatedById: req.CreatedById, + StatusId: req.StatusId, + IsPublish: req.IsPublish, + PublishedAt: req.PublishedAt, + UpdatedAt: time.Now(), } } + +type PpidDataFilesQueryRequestContext struct { + Title string `json:"title"` + PpidDataId string `json:"ppidDataId"` + Description string `json:"description"` + Unit string `json:"unit"` + FileType string `json:"fileType"` + StatusId string `json:"statusId"` + IsPublish string `json:"isPublish"` +} + +func (req PpidDataFilesQueryRequestContext) ToParamRequest() PpidDataFilesQueryRequest { + var request PpidDataFilesQueryRequest + + if title := req.Title; title != "" { + request.Title = &title + } + if ppidDataIdStr := req.PpidDataId; ppidDataIdStr != "" { + ppidDataId, err := strconv.Atoi(ppidDataIdStr) + if err == nil { + request.PpidDataId = &ppidDataId + } + } + if description := req.Description; description != "" { + request.Title = &description + } + if unit := req.Unit; unit != "" { + request.Unit = &unit + } + if fileType := req.FileType; fileType != "" { + request.FileType = &fileType + } + if statusIdStr := req.StatusId; statusIdStr != "" { + statusId, err := strconv.Atoi(statusIdStr) + if err == nil { + request.StatusId = &statusId + } + } + if isPublishStr := req.IsPublish; isPublishStr != "" { + isPublish, err := strconv.ParseBool(isPublishStr) + if err == nil { + request.IsPublish = &isPublish + } + } + + return request +} diff --git a/app/module/ppid_data_files/response/ppid_data_files.response.go b/app/module/ppid_data_files/response/ppid_data_files.response.go index 8ce456c..6326664 100644 --- a/app/module/ppid_data_files/response/ppid_data_files.response.go +++ b/app/module/ppid_data_files/response/ppid_data_files.response.go @@ -3,18 +3,18 @@ package response import "time" type PpidDataFilesResponse struct { - ID uint `json:"id"` - Title string `json:"title"` - PpidDataId int `json:"ppid_data_id"` - Description string `json:"description"` - Unit string `json:"unit"` - FileType string `json:"file_type"` - DownloadCount int `json:"download_count"` - CreatedById int `json:"created_by_id"` - StatusId int `json:"status_id"` - IsPublish bool `json:"is_publish"` - PublishedAt time.Time `json:"published_at"` - IsActive bool `json:"is_active"` - CreatedAt time.Time `json:"created_at"` - UpdatedAt time.Time `json:"updated_at"` -} \ No newline at end of file + ID uint `json:"id"` + Title string `json:"title"` + PpidDataId int `json:"ppid_data_id"` + Description string `json:"description"` + Unit string `json:"unit"` + FileType string `json:"file_type"` + DownloadCount *int `json:"download_count"` + CreatedById *int `json:"created_by_id"` + StatusId *int `json:"status_id"` + IsPublish *bool `json:"is_publish"` + PublishedAt *time.Time `json:"published_at"` + IsActive *bool `json:"is_active"` + CreatedAt time.Time `json:"created_at"` + UpdatedAt time.Time `json:"updated_at"` +} 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 84b0621..cbd6a84 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 @@ -1,35 +1,49 @@ package service import ( + "context" + "github.com/gofiber/fiber/v2" + "github.com/minio/minio-go/v7" "github.com/rs/zerolog" "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" "go-humas-be/app/module/ppid_data_files/response" + minioStorage "go-humas-be/config/config" "go-humas-be/utils/paginator" + utilVal "go-humas-be/utils/validator" + "io" + "log" + "mime" + "strconv" + "strings" + "time" ) // PpidDataFilesService type ppidDataFilesService struct { - Repo repository.PpidDataFilesRepository - Log zerolog.Logger + Repo repository.PpidDataFilesRepository + Log zerolog.Logger + MinioStorage *minioStorage.MinioStorage } // PpidDataFilesService define interface of IPpidDataFilesService type PpidDataFilesService interface { All(req request.PpidDataFilesQueryRequest) (ppidDataFiles []*response.PpidDataFilesResponse, paging paginator.Pagination, err error) Show(id uint) (ppidDataFiles *response.PpidDataFilesResponse, err error) - Save(req request.PpidDataFilesCreateRequest) (err error) + Save(c *fiber.Ctx) error Update(id uint, req request.PpidDataFilesUpdateRequest) (err error) Delete(id uint) error + Viewer(c *fiber.Ctx, id uint) error } // NewPpidDataFilesService init PpidDataFilesService -func NewPpidDataFilesService(repo repository.PpidDataFilesRepository, log zerolog.Logger) PpidDataFilesService { +func NewPpidDataFilesService(repo repository.PpidDataFilesRepository, log zerolog.Logger, minioStorage *minioStorage.MinioStorage) PpidDataFilesService { return &ppidDataFilesService{ - Repo: repo, - Log: log, + Repo: repo, + Log: log, + MinioStorage: minioStorage, } } @@ -56,10 +70,80 @@ func (_i *ppidDataFilesService) Show(id uint) (ppidDataFiles *response.PpidDataF return mapper.PpidDataFilesResponseMapper(result), nil } -func (_i *ppidDataFilesService) Save(req request.PpidDataFilesCreateRequest) (err error) { - _i.Log.Info().Interface("data", req).Msg("") +func (_i *ppidDataFilesService) Save(c *fiber.Ctx) (err error) { + req := new(request.PpidDataFilesCreateRequest) + if err := utilVal.ParseAndValidate(c, req); err != nil { + return err + } - return _i.Repo.Create(req.ToEntity()) + id, err := strconv.ParseUint(c.Params("id"), 10, 0) + if err != nil { + return err + } + + bucketName := _i.MinioStorage.Cfg.ObjectStorage.MinioStorage.BucketName + + form, err := c.MultipartForm() + if err != nil { + return err + } + files := form.File["files"] + + // Create minio connection. + minioClient, err := _i.MinioStorage.ConnectMinio() + if err != nil { + // Return status 500 and minio connection error. + return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{ + "error": true, + "msg": err.Error(), + }) + } + + // Iterasi semua file yang diunggah + for _, file := range files { + + _i.Log.Info().Str("timestamp", time.Now(). + Format(time.RFC3339)).Str("Service:Resource", "Uploader:: loop1"). + Interface("data", file).Msg("") + + src, err := file.Open() + if err != nil { + return err + } + defer src.Close() + + objectName := "ppid/upload/" + file.Filename + //filenameOnly := file.Filename[:len(file.Filename)-len(filepath.Ext(file.Filename))] + size := strconv.FormatInt(file.Size, 10) + + req := request.PpidDataFilesCreateRequest{ + Title: req.Title, + Description: req.Description, + Unit: req.Unit, + PpidDataId: int(id), + FileType: req.FileType, + FileName: &file.Filename, + FilePath: &objectName, + Size: &size, + } + + err = _i.Repo.Create(req.ToEntity()) + if err != nil { + return err + } + + // Upload file ke MinIO + _, err = minioClient.PutObject(context.Background(), bucketName, objectName, src, file.Size, minio.PutObjectOptions{}) + if err != nil { + return err + } + } + + _i.Log.Info().Str("timestamp", time.Now(). + Format(time.RFC3339)).Str("Service:Resource", "User:All"). + Interface("data", "Successfully uploaded").Msg("") + + return } func (_i *ppidDataFilesService) Update(id uint, req request.PpidDataFilesUpdateRequest) (err error) { @@ -70,3 +154,61 @@ func (_i *ppidDataFilesService) Update(id uint, req request.PpidDataFilesUpdateR func (_i *ppidDataFilesService) Delete(id uint) error { return _i.Repo.Delete(id) } + +func (_i *ppidDataFilesService) Viewer(c *fiber.Ctx, id uint) (err error) { + result, err := _i.Repo.FindOne(id) + if err != nil { + return err + } + + ctx := context.Background() + bucketName := _i.MinioStorage.Cfg.ObjectStorage.MinioStorage.BucketName + objectName := result.FilePath + + _i.Log.Info().Str("timestamp", time.Now(). + Format(time.RFC3339)).Str("Service:Resource", "Article:Uploads"). + Interface("data", objectName).Msg("") + + // Create minio connection. + minioClient, err := _i.MinioStorage.ConnectMinio() + if err != nil { + // Return status 500 and minio connection error. + return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{ + "error": true, + "msg": err.Error(), + }) + } + + fileContent, err := minioClient.GetObject(ctx, bucketName, *objectName, minio.GetObjectOptions{}) + if err != nil { + log.Fatalln(err) + } + defer fileContent.Close() + + // Tentukan Content-Type berdasarkan ekstensi file + contentType := mime.TypeByExtension("." + getFileExtension(*objectName)) + if contentType == "" { + contentType = "application/octet-stream" // fallback jika tidak ada tipe MIME yang cocok + } + + c.Set("Content-Type", contentType) + + if _, err := io.Copy(c.Response().BodyWriter(), fileContent); err != nil { + return err + } + + return +} + +func getFileExtension(filename string) string { + // split file name + parts := strings.Split(filename, ".") + + // jika tidak ada ekstensi, kembalikan string kosong + if len(parts) == 1 || (len(parts) == 2 && parts[0] == "") { + return "" + } + + // ambil ekstensi terakhir + return parts[len(parts)-1] +} diff --git a/app/module/ppid_datas/controller/ppid_datas.controller.go b/app/module/ppid_datas/controller/ppid_datas.controller.go index 3a2ad53..b7fd00d 100644 --- a/app/module/ppid_datas/controller/ppid_datas.controller.go +++ b/app/module/ppid_datas/controller/ppid_datas.controller.go @@ -32,9 +32,10 @@ func NewPpidDatasController(ppidDatasService service.PpidDatasService) PpidDatas // All PpidDatas // @Summary Get all PpidDatas // @Description API for getting all PpidDatas -// @Tags Task +// @Tags PPID Data // @Security Bearer -// @Param req query request.PpidDatasQueryRequestContext false "query parameters" +// @Param req query request.PpidDatasQueryRequest false "query parameters" +// @Param req query paginator.Pagination false "pagination parameters" // @Success 200 {object} response.Response // @Failure 400 {object} response.BadRequestError // @Failure 401 {object} response.UnauthorizedError @@ -74,7 +75,7 @@ func (_i *ppidDatasController) All(c *fiber.Ctx) error { // Show PpidDatas // @Summary Get one PpidDatas // @Description API for getting one PpidDatas -// @Tags Task +// @Tags PPID Data // @Security Bearer // @Param id path int true "PpidDatas ID" // @Success 200 {object} response.Response @@ -103,7 +104,7 @@ func (_i *ppidDatasController) Show(c *fiber.Ctx) error { // Save PpidDatas // @Summary Create PpidDatas // @Description API for create PpidDatas -// @Tags Task +// @Tags PPID Data // @Security Bearer // @Param payload body request.PpidDatasCreateRequest true "Required payload" // @Success 200 {object} response.Response @@ -131,7 +132,7 @@ func (_i *ppidDatasController) Save(c *fiber.Ctx) error { // Update PpidDatas // @Summary update PpidDatas // @Description API for update PpidDatas -// @Tags Task +// @Tags PPID Data // @Security Bearer // @Param payload body request.PpidDatasCreateRequest true "Required payload" // @Param id path int true "PpidDatas ID" @@ -165,7 +166,7 @@ func (_i *ppidDatasController) Update(c *fiber.Ctx) error { // Delete PpidDatas // @Summary delete PpidDatas // @Description API for delete PpidDatas -// @Tags Task +// @Tags PPID Data // @Security Bearer // @Param id path int true "PpidDatas ID" // @Success 200 {object} response.Response diff --git a/app/module/ppid_datas/repository/ppid_datas.repository.go b/app/module/ppid_datas/repository/ppid_datas.repository.go index 35ac92b..1d3aee0 100644 --- a/app/module/ppid_datas/repository/ppid_datas.repository.go +++ b/app/module/ppid_datas/repository/ppid_datas.repository.go @@ -1,10 +1,12 @@ package repository import ( + "fmt" "go-humas-be/app/database" "go-humas-be/app/database/entity" "go-humas-be/app/module/ppid_datas/request" "go-humas-be/utils/paginator" + "strings" ) type ppidDatasRepository struct { @@ -31,8 +33,42 @@ func (_i *ppidDatasRepository) GetAll(req request.PpidDatasQueryRequest) (ppidDa var count int64 query := _i.DB.DB.Model(&entity.PpidDatas{}) + query = query.Where("is_active = ?", true) + + if req.Title != nil && *req.Title != "" { + title := strings.ToLower(*req.Title) + query = query.Where("LOWER(title) LIKE ?", "%"+strings.ToLower(title)+"%") + } + if req.Description != nil && *req.Description != "" { + description := strings.ToLower(*req.Description) + query = query.Where("LOWER(description) LIKE ?", "%"+strings.ToLower(description)+"%") + } + if req.CategoryId != nil { + query = query.Where("category_id = ?", req.CategoryId) + } + if req.Group != nil && *req.Group != "" { + title := strings.ToLower(*req.Title) + query = query.Where("LOWER(title) LIKE ?", "%"+strings.ToLower(title)+"%") + } + if req.IsPublish != nil { + query = query.Where("is_publish = ?", req.IsPublish) + } + if req.StatusId != nil { + query = query.Where("status_id = ?", req.StatusId) + } + if req.CreatedById != nil { + query = query.Where("created_by_id = ?", req.CreatedById) + } query.Count(&count) + if req.Pagination.SortBy != "" { + direction := "ASC" + if req.Pagination.Sort == "desc" { + direction = "DESC" + } + query.Order(fmt.Sprintf("%s %s", req.Pagination.SortBy, direction)) + } + req.Pagination.Count = count req.Pagination = paginator.Paging(req.Pagination) @@ -66,4 +102,4 @@ func (_i *ppidDatasRepository) Update(id uint, ppidDatas *entity.PpidDatas) (err func (_i *ppidDatasRepository) Delete(id uint) error { return _i.DB.DB.Delete(&entity.PpidDatas{}, id).Error -} \ No newline at end of file +} diff --git a/app/module/ppid_datas/request/ppid_datas.request.go b/app/module/ppid_datas/request/ppid_datas.request.go index 6a5a41a..1719d9a 100644 --- a/app/module/ppid_datas/request/ppid_datas.request.go +++ b/app/module/ppid_datas/request/ppid_datas.request.go @@ -12,55 +12,65 @@ type PpidDatasGeneric interface { } type PpidDatasQueryRequest struct { - Title *string `json:"title"` - Description *string `json:"description"` - CategoryId *int `json:"categoryId"` - CreatedById *int `json:"createdById"` - StatusId *int `json:"statusId"` - IsPublish *bool `json:"isPublish"` - Pagination *paginator.Pagination `json:"pagination"` + Title *string `json:"title"` + Description *string `json:"description"` + CategoryId *int `json:"categoryId"` + LevelGroupId *int `json:"levelGroupId"` + Group *string `json:"group"` + CreatedById *int `json:"createdById"` + StatusId *int `json:"statusId"` + IsPublish *bool `json:"isPublish"` + Pagination *paginator.Pagination `json:"pagination"` } type PpidDatasCreateRequest struct { - Title string `json:"title" validate:"required"` - Description string `json:"description" validate:"required"` - CategoryId int `json:"categoryId" validate:"required"` - CreatedById int `json:"createdById" validate:"required"` - StatusId int `json:"statusId" validate:"required"` + Title string `json:"title" validate:"required"` + Description string `json:"description" validate:"required"` + CategoryId int `json:"categoryId" validate:"required"` + CreatedById int `json:"createdById" validate:"required"` + StatusId int `json:"statusId" validate:"required"` + LevelGroupId *int `json:"levelGroupId"` + Group *string `json:"group"` } func (req PpidDatasCreateRequest) ToEntity() *entity.PpidDatas { return &entity.PpidDatas{ - Title: req.Title, - Description: req.Description, - CategoryId: req.CategoryId, - CreatedById: req.CreatedById, - StatusId: req.StatusId, + Title: req.Title, + Description: req.Description, + CategoryId: req.CategoryId, + CreatedById: req.CreatedById, + StatusId: req.StatusId, + LevelGroupId: req.LevelGroupId, + Group: req.Group, } } type PpidDatasUpdateRequest struct { - ID uint `json:"id" validate:"required"` - Title string `json:"title" validate:"required"` - Description string `json:"description" validate:"required"` - CategoryId int `json:"category_id" validate:"required"` - CreatedById int `json:"created_by_id" validate:"required"` - StatusId int `json:"status_id" validate:"required"` - IsPublish *bool `json:"is_publish" validate:"required"` - PublishedAt *time.Time `json:"published_at" validate:"required"` + ID uint `json:"id" validate:"required"` + Title string `json:"title" validate:"required"` + Description string `json:"description" validate:"required"` + CategoryId int `json:"category_id" validate:"required"` + CreatedById int `json:"created_by_id" validate:"required"` + StatusId int `json:"status_id" validate:"required"` + IsPublish *bool `json:"is_publish"` + PublishedAt *time.Time `json:"published_at"` + LevelGroupId *int `json:"levelGroupId"` + Group *string `json:"group"` } func (req PpidDatasUpdateRequest) ToEntity() *entity.PpidDatas { return &entity.PpidDatas{ - ID: req.ID, - Title: req.Title, - Description: req.Description, - CategoryId: req.CategoryId, - CreatedById: req.CreatedById, - StatusId: req.StatusId, - IsPublish: req.IsPublish, - PublishedAt: req.PublishedAt, - UpdatedAt: time.Now(), + ID: req.ID, + Title: req.Title, + Description: req.Description, + CategoryId: req.CategoryId, + CreatedById: req.CreatedById, + StatusId: req.StatusId, + IsPublish: req.IsPublish, + PublishedAt: req.PublishedAt, + LevelGroupId: req.LevelGroupId, + Group: req.Group, + UpdatedAt: time.Now(), } } @@ -68,6 +78,7 @@ type PpidDatasQueryRequestContext struct { Title string `json:"title"` Description string `json:"description"` CategoryId string `json:"categoryId"` + Group string `json:"group"` CreatedById string `json:"createdById"` StatusId string `json:"statusId"` IsPublish string `json:"isPublish"` @@ -82,6 +93,9 @@ func (req PpidDatasQueryRequestContext) ToParamRequest() PpidDatasQueryRequest { if description := req.Description; description != "" { request.Description = &description } + if group := req.Group; group != "" { + request.Group = &group + } if categoryIdStr := req.CategoryId; categoryIdStr != "" { categoryId, err := strconv.Atoi(categoryIdStr) if err == nil { diff --git a/app/module/ppid_datas/service/ppid_datas.service.go b/app/module/ppid_datas/service/ppid_datas.service.go index 914e081..a9517a0 100644 --- a/app/module/ppid_datas/service/ppid_datas.service.go +++ b/app/module/ppid_datas/service/ppid_datas.service.go @@ -68,5 +68,12 @@ func (_i *ppidDatasService) Update(id uint, req request.PpidDatasUpdateRequest) } func (_i *ppidDatasService) Delete(id uint) error { + result, err := _i.Repo.FindOne(id) + if err != nil { + return err + } + + isActive := false + result.IsActive = &isActive return _i.Repo.Delete(id) } diff --git a/app/module/user_levels/controller/user_levels.controller.go b/app/module/user_levels/controller/user_levels.controller.go index 58f6aca..2f9b425 100644 --- a/app/module/user_levels/controller/user_levels.controller.go +++ b/app/module/user_levels/controller/user_levels.controller.go @@ -35,6 +35,7 @@ func NewUserLevelsController(userLevelsService service.UserLevelsService) UserLe // @Tags UserLevels // @Security Bearer // @Param req query request.UserLevelsQueryRequest false "query parameters" +// @Param req query paginator.Pagination false "pagination parameters" // @Success 200 {object} response.Response // @Failure 400 {object} response.BadRequestError // @Failure 401 {object} response.UnauthorizedError diff --git a/app/module/user_levels/repository/user_levels.repository.go b/app/module/user_levels/repository/user_levels.repository.go index c173b63..6177b25 100644 --- a/app/module/user_levels/repository/user_levels.repository.go +++ b/app/module/user_levels/repository/user_levels.repository.go @@ -1,6 +1,7 @@ package repository import ( + "fmt" "go-humas-be/app/database" "go-humas-be/app/database/entity" "go-humas-be/app/module/user_levels/request" @@ -49,6 +50,15 @@ func (_i *userLevelsRepository) GetAll(req request.UserLevelsQueryRequest) (user } query.Count(&count) + if req.Pagination.SortBy != "" { + direction := "ASC" + if req.Pagination.Sort == "desc" { + direction = "DESC" + } + query.Order(fmt.Sprintf("%s %s", req.Pagination.SortBy, direction)) + } + + req.Pagination.Count = count req.Pagination = paginator.Paging(req.Pagination) err = query.Offset(req.Pagination.Offset).Limit(req.Pagination.Limit).Find(&userLevelss).Error diff --git a/app/module/user_roles/controller/user_roles.controller.go b/app/module/user_roles/controller/user_roles.controller.go index 311398b..d0957d9 100644 --- a/app/module/user_roles/controller/user_roles.controller.go +++ b/app/module/user_roles/controller/user_roles.controller.go @@ -37,6 +37,7 @@ func NewUserRolesController(userRolesService service.UserRolesService, log zerol // @Tags UserRoles // @Security Bearer // @Param req query request.UserRolesQueryRequest false "query parameters" +// @Param req query paginator.Pagination false "pagination parameters" // @Success 200 {object} response.Response // @Failure 400 {object} response.BadRequestError // @Failure 401 {object} response.UnauthorizedError @@ -105,6 +106,7 @@ func (_i *userRolesController) Show(c *fiber.Ctx) error { // @Description API for create UserRoles // @Tags UserRoles // @Security Bearer +// @Param Authorization header string true "Insert your access token" default(Bearer ) // @Param payload body request.UserRolesCreateRequest true "Required payload" // @Success 200 {object} response.Response // @Failure 400 {object} response.BadRequestError @@ -117,7 +119,9 @@ func (_i *userRolesController) Save(c *fiber.Ctx) error { return err } - err := _i.userRolesService.Save(*req) + authorizationHeader := c.Get("Authorization") + + err := _i.userRolesService.Save(*req, authorizationHeader) if err != nil { return err } diff --git a/app/module/user_roles/mapper/user_roles.mapper.go b/app/module/user_roles/mapper/user_roles.mapper.go index fc7529f..18de808 100644 --- a/app/module/user_roles/mapper/user_roles.mapper.go +++ b/app/module/user_roles/mapper/user_roles.mapper.go @@ -8,17 +8,17 @@ import ( func UserRolesResponseMapper(userRolesReq *entity.UserRoles) (userRolesRes *res.UserRolesResponse) { if userRolesReq != nil { userRolesRes = &res.UserRolesResponse{ - ID: userRolesReq.ID, - Name: userRolesReq.Name, - Description: userRolesReq.Description, - Code: userRolesReq.Code, - LevelNumber: userRolesReq.LevelNumber, + ID: userRolesReq.ID, + Name: userRolesReq.Name, + Description: userRolesReq.Description, + Code: userRolesReq.Code, + LevelNumber: userRolesReq.LevelNumber, StatusId: userRolesReq.StatusId, - CreatedById: userRolesReq.CreatedById, + CreatedById: userRolesReq.CreatedById, IsActive: userRolesReq.IsActive, - CreatedAt: userRolesReq.CreatedAt, - UpdatedAt: userRolesReq.UpdatedAt, + CreatedAt: userRolesReq.CreatedAt, + UpdatedAt: userRolesReq.UpdatedAt, } } return userRolesRes -} \ No newline at end of file +} diff --git a/app/module/user_roles/repository/user_roles.repository.go b/app/module/user_roles/repository/user_roles.repository.go index db4adce..742374e 100644 --- a/app/module/user_roles/repository/user_roles.repository.go +++ b/app/module/user_roles/repository/user_roles.repository.go @@ -1,13 +1,13 @@ package repository import ( + "fmt" "github.com/rs/zerolog" "go-humas-be/app/database" "go-humas-be/app/database/entity" "go-humas-be/app/module/user_roles/request" "go-humas-be/utils/paginator" "strings" - "time" ) type userRolesRepository struct { @@ -33,6 +33,8 @@ func NewUserRolesRepository(db *database.Database, log zerolog.Logger) UserRoles // implement interface of IUserRolesRepository func (_i *userRolesRepository) GetAll(req request.UserRolesQueryRequest) (userRoless []*entity.UserRoles, paging paginator.Pagination, err error) { + _i.Log.Info().Interface("data", req).Msg("") + var count int64 query := _i.DB.DB.Model(&entity.UserRoles{}) @@ -53,9 +55,13 @@ func (_i *userRolesRepository) GetAll(req request.UserRolesQueryRequest) (userRo } query.Count(&count) - _i.Log.Info().Str("timestamp", time.Now(). - Format(time.RFC3339)).Str("Service:userRolesRepository", "UserRoles:GetAll"). - Interface("req query", req).Msg("") + if req.Pagination.SortBy != "" { + direction := "ASC" + if req.Pagination.Sort == "desc" { + direction = "DESC" + } + query.Order(fmt.Sprintf("%s %s", req.Pagination.SortBy, direction)) + } req.Pagination.Count = count req.Pagination = paginator.Paging(req.Pagination) diff --git a/app/module/user_roles/request/user_roles.request.go b/app/module/user_roles/request/user_roles.request.go index ef91924..fdac691 100644 --- a/app/module/user_roles/request/user_roles.request.go +++ b/app/module/user_roles/request/user_roles.request.go @@ -24,7 +24,8 @@ type UserRolesCreateRequest struct { Name string `json:"name" validate:"required"` Description string `json:"description" validate:"required"` Code string `json:"code" validate:"required"` - LevelNumber int `json:"level_number" validate:"required"` + LevelNumber int `json:"levelNumber" validate:"required"` + StatusId int `json:"statusId" validate:"required"` } func (req UserRolesCreateRequest) ToEntity() *entity.UserRoles { @@ -33,6 +34,7 @@ func (req UserRolesCreateRequest) ToEntity() *entity.UserRoles { Description: req.Description, Code: req.Code, LevelNumber: req.LevelNumber, + StatusId: req.StatusId, } } @@ -41,7 +43,7 @@ type UserRolesUpdateRequest struct { Description string `json:"description" validate:"required"` Code string `json:"code" validate:"required"` LevelNumber int `json:"level_number" validate:"required"` - StatusId *int `json:"status_id"` + StatusId int `json:"status_id" validate:"required"` } func (req UserRolesUpdateRequest) ToEntity() *entity.UserRoles { diff --git a/app/module/user_roles/response/user_roles.response.go b/app/module/user_roles/response/user_roles.response.go index eedc459..e5f82bf 100644 --- a/app/module/user_roles/response/user_roles.response.go +++ b/app/module/user_roles/response/user_roles.response.go @@ -8,8 +8,8 @@ type UserRolesResponse struct { Description string `json:"description"` Code string `json:"code"` LevelNumber int `json:"level_number"` - StatusId *int `json:"status_id"` - CreatedById *int `json:"created_by_id"` + StatusId int `json:"status_id"` + CreatedById *uint `json:"created_by_id"` IsActive *bool `json:"is_active"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` diff --git a/app/module/user_roles/service/user_roles.service.go b/app/module/user_roles/service/user_roles.service.go index b10b8f1..50a3384 100644 --- a/app/module/user_roles/service/user_roles.service.go +++ b/app/module/user_roles/service/user_roles.service.go @@ -6,30 +6,34 @@ import ( "go-humas-be/app/module/user_roles/repository" "go-humas-be/app/module/user_roles/request" "go-humas-be/app/module/user_roles/response" + usersRepository "go-humas-be/app/module/users/repository" "go-humas-be/utils/paginator" + utilSvc "go-humas-be/utils/service" ) // UserRolesService type userRolesService struct { - Repo repository.UserRolesRepository - Log zerolog.Logger + Repo repository.UserRolesRepository + UsersRepo usersRepository.UsersRepository + Log zerolog.Logger } // UserRolesService define interface of IUserRolesService type UserRolesService interface { All(req request.UserRolesQueryRequest) (userRoles []*response.UserRolesResponse, paging paginator.Pagination, err error) Show(id uint) (userRoles *response.UserRolesResponse, err error) - Save(req request.UserRolesCreateRequest) (err error) + Save(req request.UserRolesCreateRequest, header string) (err error) Update(id uint, req request.UserRolesUpdateRequest) (err error) Delete(id uint) error } // NewUserRolesService init UserRolesService -func NewUserRolesService(repo repository.UserRolesRepository, log zerolog.Logger) UserRolesService { +func NewUserRolesService(repo repository.UserRolesRepository, usersRepo usersRepository.UsersRepository, log zerolog.Logger) UserRolesService { return &userRolesService{ - Repo: repo, - Log: log, + Repo: repo, + UsersRepo: usersRepo, + Log: log, } } @@ -57,12 +61,12 @@ func (_i *userRolesService) Show(id uint) (userRoles *response.UserRolesResponse return mapper.UserRolesResponseMapper(result), nil } -func (_i *userRolesService) Save(req request.UserRolesCreateRequest) (err error) { +func (_i *userRolesService) Save(req request.UserRolesCreateRequest, header string) (err error) { _i.Log.Info().Interface("data", req).Msg("") newReq := req.ToEntity() - statusId := 1 - newReq.StatusId = &statusId + createdBy := utilSvc.GetUserInfo(_i.Log, _i.UsersRepo, header) + newReq.CreatedById = &createdBy.ID return _i.Repo.Create(newReq) } diff --git a/app/module/users/controller/users.controller.go b/app/module/users/controller/users.controller.go index 9a6b678..28d194a 100644 --- a/app/module/users/controller/users.controller.go +++ b/app/module/users/controller/users.controller.go @@ -35,6 +35,7 @@ func NewUsersController(usersService service.UsersService) UsersController { // @Tags Users // @Security Bearer // @Param req query request.UsersQueryRequest false "query parameters" +// @Param req query paginator.Pagination false "pagination parameters" // @Success 200 {object} response.Response // @Failure 400 {object} response.BadRequestError // @Failure 401 {object} response.UnauthorizedError diff --git a/app/module/users/repository/users.repository.go b/app/module/users/repository/users.repository.go index a53bddf..bd1f073 100644 --- a/app/module/users/repository/users.repository.go +++ b/app/module/users/repository/users.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,6 +19,7 @@ type usersRepository struct { type UsersRepository interface { GetAll(req request.UsersQueryRequest) (userss []*entity.Users, paging paginator.Pagination, err error) FindOne(id uint) (users *entity.Users, err error) + FindByKeycloakId(keycloakId string) (users *entity.Users, err error) Create(users *entity.Users) (err error) Update(id uint, users *entity.Users) (err error) Delete(id uint) (err error) @@ -62,6 +64,14 @@ func (_i *usersRepository) GetAll(req request.UsersQueryRequest) (userss []*enti } query.Count(&count) + if req.Pagination.SortBy != "" { + direction := "ASC" + if req.Pagination.Sort == "desc" { + direction = "DESC" + } + query.Order(fmt.Sprintf("%s %s", req.Pagination.SortBy, direction)) + } + req.Pagination.Count = count req.Pagination = paginator.Paging(req.Pagination) @@ -83,6 +93,14 @@ func (_i *usersRepository) FindOne(id uint) (users *entity.Users, err error) { return users, nil } +func (_i *usersRepository) FindByKeycloakId(keycloakId string) (users *entity.Users, err error) { + if err := _i.DB.DB.Where("keycloak_id = ?", keycloakId).First(&users).Error; err != nil { + return nil, err + } + + return users, nil +} + func (_i *usersRepository) Create(users *entity.Users) (err error) { return _i.DB.DB.Create(users).Error } diff --git a/docs/swagger/docs.go b/docs/swagger/docs.go index 0d1a00d..a666d92 100644 --- a/docs/swagger/docs.go +++ b/docs/swagger/docs.go @@ -62,6 +62,46 @@ const docTemplate = `{ "type": "string", "name": "title", "in": "query" + }, + { + "type": "integer", + "name": "count", + "in": "query" + }, + { + "type": "integer", + "name": "limit", + "in": "query" + }, + { + "type": "integer", + "name": "nextPage", + "in": "query" + }, + { + "type": "integer", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "name": "previousPage", + "in": "query" + }, + { + "type": "string", + "name": "sort", + "in": "query" + }, + { + "type": "string", + "name": "sortBy", + "in": "query" + }, + { + "type": "integer", + "name": "totalPage", + "in": "query" } ], "responses": { @@ -556,6 +596,68 @@ const docTemplate = `{ "ArticleFiles" ], "summary": "Get all ArticleFiles", + "parameters": [ + { + "type": "integer", + "name": "articleId", + "in": "query" + }, + { + "type": "string", + "name": "fileName", + "in": "query" + }, + { + "type": "boolean", + "name": "isPublish", + "in": "query" + }, + { + "type": "integer", + "name": "statusId", + "in": "query" + }, + { + "type": "integer", + "name": "count", + "in": "query" + }, + { + "type": "integer", + "name": "limit", + "in": "query" + }, + { + "type": "integer", + "name": "nextPage", + "in": "query" + }, + { + "type": "integer", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "name": "previousPage", + "in": "query" + }, + { + "type": "string", + "name": "sort", + "in": "query" + }, + { + "type": "string", + "name": "sortBy", + "in": "query" + }, + { + "type": "integer", + "name": "totalPage", + "in": "query" + } + ], "responses": { "200": { "description": "OK", @@ -891,6 +993,46 @@ const docTemplate = `{ "type": "integer", "name": "typeId", "in": "query" + }, + { + "type": "integer", + "name": "count", + "in": "query" + }, + { + "type": "integer", + "name": "limit", + "in": "query" + }, + { + "type": "integer", + "name": "nextPage", + "in": "query" + }, + { + "type": "integer", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "name": "previousPage", + "in": "query" + }, + { + "type": "string", + "name": "sort", + "in": "query" + }, + { + "type": "string", + "name": "sortBy", + "in": "query" + }, + { + "type": "integer", + "name": "totalPage", + "in": "query" } ], "responses": { @@ -2914,9 +3056,61 @@ const docTemplate = `{ ], "description": "API for getting all PpidDataCategories", "tags": [ - "Task" + "PPID Categories" ], "summary": "Get all PpidDataCategories", + "parameters": [ + { + "type": "string", + "name": "description", + "in": "query" + }, + { + "type": "string", + "name": "title", + "in": "query" + }, + { + "type": "integer", + "name": "count", + "in": "query" + }, + { + "type": "integer", + "name": "limit", + "in": "query" + }, + { + "type": "integer", + "name": "nextPage", + "in": "query" + }, + { + "type": "integer", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "name": "previousPage", + "in": "query" + }, + { + "type": "string", + "name": "sort", + "in": "query" + }, + { + "type": "string", + "name": "sortBy", + "in": "query" + }, + { + "type": "integer", + "name": "totalPage", + "in": "query" + } + ], "responses": { "200": { "description": "OK", @@ -2924,28 +3118,22 @@ const docTemplate = `{ "$ref": "#/definitions/response.Response" } }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/response.BadRequestError" + } + }, "401": { "description": "Unauthorized", "schema": { - "$ref": "#/definitions/response.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/response.Response" - } - }, - "422": { - "description": "Unprocessable Entity", - "schema": { - "$ref": "#/definitions/response.Response" + "$ref": "#/definitions/response.UnauthorizedError" } }, "500": { "description": "Internal Server Error", "schema": { - "$ref": "#/definitions/response.Response" + "$ref": "#/definitions/response.InternalServerError" } } } @@ -2958,9 +3146,20 @@ const docTemplate = `{ ], "description": "API for create PpidDataCategories", "tags": [ - "Task" + "PPID Categories" ], "summary": "Create PpidDataCategories", + "parameters": [ + { + "description": "Required payload", + "name": "payload", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/request.PpidDataCategoriesCreateRequest" + } + } + ], "responses": { "200": { "description": "OK", @@ -2968,28 +3167,22 @@ const docTemplate = `{ "$ref": "#/definitions/response.Response" } }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/response.BadRequestError" + } + }, "401": { "description": "Unauthorized", "schema": { - "$ref": "#/definitions/response.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/response.Response" - } - }, - "422": { - "description": "Unprocessable Entity", - "schema": { - "$ref": "#/definitions/response.Response" + "$ref": "#/definitions/response.UnauthorizedError" } }, "500": { "description": "Internal Server Error", "schema": { - "$ref": "#/definitions/response.Response" + "$ref": "#/definitions/response.InternalServerError" } } } @@ -3004,7 +3197,7 @@ const docTemplate = `{ ], "description": "API for getting one PpidDataCategories", "tags": [ - "Task" + "PPID Categories" ], "summary": "Get one PpidDataCategories", "parameters": [ @@ -3023,28 +3216,22 @@ const docTemplate = `{ "$ref": "#/definitions/response.Response" } }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/response.BadRequestError" + } + }, "401": { "description": "Unauthorized", "schema": { - "$ref": "#/definitions/response.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/response.Response" - } - }, - "422": { - "description": "Unprocessable Entity", - "schema": { - "$ref": "#/definitions/response.Response" + "$ref": "#/definitions/response.UnauthorizedError" } }, "500": { "description": "Internal Server Error", "schema": { - "$ref": "#/definitions/response.Response" + "$ref": "#/definitions/response.InternalServerError" } } } @@ -3057,10 +3244,19 @@ const docTemplate = `{ ], "description": "API for update PpidDataCategories", "tags": [ - "Task" + "PPID Categories" ], "summary": "update PpidDataCategories", "parameters": [ + { + "description": "Required payload", + "name": "payload", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/request.PpidDataCategoriesUpdateRequest" + } + }, { "type": "integer", "description": "PpidDataCategories ID", @@ -3076,28 +3272,22 @@ const docTemplate = `{ "$ref": "#/definitions/response.Response" } }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/response.BadRequestError" + } + }, "401": { "description": "Unauthorized", "schema": { - "$ref": "#/definitions/response.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/response.Response" - } - }, - "422": { - "description": "Unprocessable Entity", - "schema": { - "$ref": "#/definitions/response.Response" + "$ref": "#/definitions/response.UnauthorizedError" } }, "500": { "description": "Internal Server Error", "schema": { - "$ref": "#/definitions/response.Response" + "$ref": "#/definitions/response.InternalServerError" } } } @@ -3110,7 +3300,7 @@ const docTemplate = `{ ], "description": "API for delete PpidDataCategories", "tags": [ - "Task" + "PPID Categories" ], "summary": "delete PpidDataCategories", "parameters": [ @@ -3129,28 +3319,22 @@ const docTemplate = `{ "$ref": "#/definitions/response.Response" } }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/response.BadRequestError" + } + }, "401": { "description": "Unauthorized", "schema": { - "$ref": "#/definitions/response.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/response.Response" - } - }, - "422": { - "description": "Unprocessable Entity", - "schema": { - "$ref": "#/definitions/response.Response" + "$ref": "#/definitions/response.UnauthorizedError" } }, "500": { "description": "Internal Server Error", "schema": { - "$ref": "#/definitions/response.Response" + "$ref": "#/definitions/response.InternalServerError" } } } @@ -3165,9 +3349,86 @@ const docTemplate = `{ ], "description": "API for getting all PpidDataFiles", "tags": [ - "Task" + "PPID Files" ], "summary": "Get all PpidDataFiles", + "parameters": [ + { + "type": "string", + "name": "description", + "in": "query" + }, + { + "type": "string", + "name": "fileType", + "in": "query" + }, + { + "type": "boolean", + "name": "isPublish", + "in": "query" + }, + { + "type": "integer", + "name": "ppidDataId", + "in": "query" + }, + { + "type": "integer", + "name": "statusId", + "in": "query" + }, + { + "type": "string", + "name": "title", + "in": "query" + }, + { + "type": "string", + "name": "unit", + "in": "query" + }, + { + "type": "integer", + "name": "count", + "in": "query" + }, + { + "type": "integer", + "name": "limit", + "in": "query" + }, + { + "type": "integer", + "name": "nextPage", + "in": "query" + }, + { + "type": "integer", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "name": "previousPage", + "in": "query" + }, + { + "type": "string", + "name": "sort", + "in": "query" + }, + { + "type": "string", + "name": "sortBy", + "in": "query" + }, + { + "type": "integer", + "name": "totalPage", + "in": "query" + } + ], "responses": { "200": { "description": "OK", @@ -3175,33 +3436,29 @@ const docTemplate = `{ "$ref": "#/definitions/response.Response" } }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/response.BadRequestError" + } + }, "401": { "description": "Unauthorized", "schema": { - "$ref": "#/definitions/response.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/response.Response" - } - }, - "422": { - "description": "Unprocessable Entity", - "schema": { - "$ref": "#/definitions/response.Response" + "$ref": "#/definitions/response.UnauthorizedError" } }, "500": { "description": "Internal Server Error", "schema": { - "$ref": "#/definitions/response.Response" + "$ref": "#/definitions/response.InternalServerError" } } } - }, - "post": { + } + }, + "/ppid-data-files/viewer/{id}": { + "get": { "security": [ { "Bearer": [] @@ -3209,9 +3466,18 @@ const docTemplate = `{ ], "description": "API for create PpidDataFiles", "tags": [ - "Task" + "PPID Files" ], "summary": "Create PpidDataFiles", + "parameters": [ + { + "type": "string", + "description": "Ppid Data ID", + "name": "id", + "in": "path", + "required": true + } + ], "responses": { "200": { "description": "OK", @@ -3219,28 +3485,22 @@ const docTemplate = `{ "$ref": "#/definitions/response.Response" } }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/response.BadRequestError" + } + }, "401": { "description": "Unauthorized", "schema": { - "$ref": "#/definitions/response.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/response.Response" - } - }, - "422": { - "description": "Unprocessable Entity", - "schema": { - "$ref": "#/definitions/response.Response" + "$ref": "#/definitions/response.UnauthorizedError" } }, "500": { "description": "Internal Server Error", "schema": { - "$ref": "#/definitions/response.Response" + "$ref": "#/definitions/response.InternalServerError" } } } @@ -3255,7 +3515,7 @@ const docTemplate = `{ ], "description": "API for getting one PpidDataFiles", "tags": [ - "Task" + "PPID Files" ], "summary": "Get one PpidDataFiles", "parameters": [ @@ -3274,28 +3534,22 @@ const docTemplate = `{ "$ref": "#/definitions/response.Response" } }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/response.BadRequestError" + } + }, "401": { "description": "Unauthorized", "schema": { - "$ref": "#/definitions/response.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/response.Response" - } - }, - "422": { - "description": "Unprocessable Entity", - "schema": { - "$ref": "#/definitions/response.Response" + "$ref": "#/definitions/response.UnauthorizedError" } }, "500": { "description": "Internal Server Error", "schema": { - "$ref": "#/definitions/response.Response" + "$ref": "#/definitions/response.InternalServerError" } } } @@ -3308,13 +3562,22 @@ const docTemplate = `{ ], "description": "API for update PpidDataFiles", "tags": [ - "Task" + "PPID Files" ], "summary": "update PpidDataFiles", "parameters": [ + { + "description": "Required payload", + "name": "payload", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/request.PpidDataFilesUpdateRequest" + } + }, { "type": "integer", - "description": "PpidDataFiles ID", + "description": "Ppid Data ID", "name": "id", "in": "path", "required": true @@ -3327,28 +3590,22 @@ const docTemplate = `{ "$ref": "#/definitions/response.Response" } }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/response.BadRequestError" + } + }, "401": { "description": "Unauthorized", "schema": { - "$ref": "#/definitions/response.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/response.Response" - } - }, - "422": { - "description": "Unprocessable Entity", - "schema": { - "$ref": "#/definitions/response.Response" + "$ref": "#/definitions/response.UnauthorizedError" } }, "500": { "description": "Internal Server Error", "schema": { - "$ref": "#/definitions/response.Response" + "$ref": "#/definitions/response.InternalServerError" } } } @@ -3361,7 +3618,7 @@ const docTemplate = `{ ], "description": "API for delete PpidDataFiles", "tags": [ - "Task" + "PPID Files" ], "summary": "delete PpidDataFiles", "parameters": [ @@ -3380,29 +3637,91 @@ const docTemplate = `{ "$ref": "#/definitions/response.Response" } }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/response.BadRequestError" + } + }, "401": { "description": "Unauthorized", "schema": { - "$ref": "#/definitions/response.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/response.Response" - } - }, - "422": { - "description": "Unprocessable Entity", - "schema": { - "$ref": "#/definitions/response.Response" + "$ref": "#/definitions/response.UnauthorizedError" } }, "500": { "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/response.InternalServerError" + } + } + } + } + }, + "/ppid-data-files/{ppidDataId}": { + "post": { + "security": [ + { + "Bearer": [] + } + ], + "description": "API for create PpidDataFiles", + "produces": [ + "application/json" + ], + "tags": [ + "PPID Files" + ], + "summary": "Create PpidDataFiles", + "parameters": [ + { + "type": "file", + "description": "Upload file", + "name": "files", + "in": "formData", + "required": true + }, + { + "description": "Required payload", + "name": "payload", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/request.PpidDataFilesCreateRequest" + } + }, + { + "type": "integer", + "description": "Ppid Data ID", + "name": "ppidDataId", + "in": "path", + "required": true + } + ], + "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" + } } } } @@ -3416,9 +3735,91 @@ const docTemplate = `{ ], "description": "API for getting all PpidDatas", "tags": [ - "Task" + "PPID Data" ], "summary": "Get all PpidDatas", + "parameters": [ + { + "type": "integer", + "name": "categoryId", + "in": "query" + }, + { + "type": "integer", + "name": "createdById", + "in": "query" + }, + { + "type": "string", + "name": "description", + "in": "query" + }, + { + "type": "string", + "name": "group", + "in": "query" + }, + { + "type": "boolean", + "name": "isPublish", + "in": "query" + }, + { + "type": "integer", + "name": "levelGroupId", + "in": "query" + }, + { + "type": "integer", + "name": "statusId", + "in": "query" + }, + { + "type": "string", + "name": "title", + "in": "query" + }, + { + "type": "integer", + "name": "count", + "in": "query" + }, + { + "type": "integer", + "name": "limit", + "in": "query" + }, + { + "type": "integer", + "name": "nextPage", + "in": "query" + }, + { + "type": "integer", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "name": "previousPage", + "in": "query" + }, + { + "type": "string", + "name": "sort", + "in": "query" + }, + { + "type": "string", + "name": "sortBy", + "in": "query" + }, + { + "type": "integer", + "name": "totalPage", + "in": "query" + } + ], "responses": { "200": { "description": "OK", @@ -3426,28 +3827,22 @@ const docTemplate = `{ "$ref": "#/definitions/response.Response" } }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/response.BadRequestError" + } + }, "401": { "description": "Unauthorized", "schema": { - "$ref": "#/definitions/response.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/response.Response" - } - }, - "422": { - "description": "Unprocessable Entity", - "schema": { - "$ref": "#/definitions/response.Response" + "$ref": "#/definitions/response.UnauthorizedError" } }, "500": { "description": "Internal Server Error", "schema": { - "$ref": "#/definitions/response.Response" + "$ref": "#/definitions/response.InternalServerError" } } } @@ -3460,9 +3855,20 @@ const docTemplate = `{ ], "description": "API for create PpidDatas", "tags": [ - "Task" + "PPID Data" ], "summary": "Create PpidDatas", + "parameters": [ + { + "description": "Required payload", + "name": "payload", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/request.PpidDatasCreateRequest" + } + } + ], "responses": { "200": { "description": "OK", @@ -3470,28 +3876,22 @@ const docTemplate = `{ "$ref": "#/definitions/response.Response" } }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/response.BadRequestError" + } + }, "401": { "description": "Unauthorized", "schema": { - "$ref": "#/definitions/response.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/response.Response" - } - }, - "422": { - "description": "Unprocessable Entity", - "schema": { - "$ref": "#/definitions/response.Response" + "$ref": "#/definitions/response.UnauthorizedError" } }, "500": { "description": "Internal Server Error", "schema": { - "$ref": "#/definitions/response.Response" + "$ref": "#/definitions/response.InternalServerError" } } } @@ -3506,7 +3906,7 @@ const docTemplate = `{ ], "description": "API for getting one PpidDatas", "tags": [ - "Task" + "PPID Data" ], "summary": "Get one PpidDatas", "parameters": [ @@ -3525,28 +3925,22 @@ const docTemplate = `{ "$ref": "#/definitions/response.Response" } }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/response.BadRequestError" + } + }, "401": { "description": "Unauthorized", "schema": { - "$ref": "#/definitions/response.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/response.Response" - } - }, - "422": { - "description": "Unprocessable Entity", - "schema": { - "$ref": "#/definitions/response.Response" + "$ref": "#/definitions/response.UnauthorizedError" } }, "500": { "description": "Internal Server Error", "schema": { - "$ref": "#/definitions/response.Response" + "$ref": "#/definitions/response.InternalServerError" } } } @@ -3559,10 +3953,19 @@ const docTemplate = `{ ], "description": "API for update PpidDatas", "tags": [ - "Task" + "PPID Data" ], "summary": "update PpidDatas", "parameters": [ + { + "description": "Required payload", + "name": "payload", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/request.PpidDatasCreateRequest" + } + }, { "type": "integer", "description": "PpidDatas ID", @@ -3578,28 +3981,22 @@ const docTemplate = `{ "$ref": "#/definitions/response.Response" } }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/response.BadRequestError" + } + }, "401": { "description": "Unauthorized", "schema": { - "$ref": "#/definitions/response.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/response.Response" - } - }, - "422": { - "description": "Unprocessable Entity", - "schema": { - "$ref": "#/definitions/response.Response" + "$ref": "#/definitions/response.UnauthorizedError" } }, "500": { "description": "Internal Server Error", "schema": { - "$ref": "#/definitions/response.Response" + "$ref": "#/definitions/response.InternalServerError" } } } @@ -3612,7 +4009,7 @@ const docTemplate = `{ ], "description": "API for delete PpidDatas", "tags": [ - "Task" + "PPID Data" ], "summary": "delete PpidDatas", "parameters": [ @@ -3631,28 +4028,22 @@ const docTemplate = `{ "$ref": "#/definitions/response.Response" } }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/response.BadRequestError" + } + }, "401": { "description": "Unauthorized", "schema": { - "$ref": "#/definitions/response.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/response.Response" - } - }, - "422": { - "description": "Unprocessable Entity", - "schema": { - "$ref": "#/definitions/response.Response" + "$ref": "#/definitions/response.UnauthorizedError" } }, "500": { "description": "Internal Server Error", "schema": { - "$ref": "#/definitions/response.Response" + "$ref": "#/definitions/response.InternalServerError" } } } @@ -3941,6 +4332,46 @@ const docTemplate = `{ "type": "integer", "name": "provinceId", "in": "query" + }, + { + "type": "integer", + "name": "count", + "in": "query" + }, + { + "type": "integer", + "name": "limit", + "in": "query" + }, + { + "type": "integer", + "name": "nextPage", + "in": "query" + }, + { + "type": "integer", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "name": "previousPage", + "in": "query" + }, + { + "type": "string", + "name": "sort", + "in": "query" + }, + { + "type": "string", + "name": "sortBy", + "in": "query" + }, + { + "type": "integer", + "name": "totalPage", + "in": "query" } ], "responses": { @@ -4476,6 +4907,46 @@ const docTemplate = `{ "type": "integer", "name": "statusId", "in": "query" + }, + { + "type": "integer", + "name": "count", + "in": "query" + }, + { + "type": "integer", + "name": "limit", + "in": "query" + }, + { + "type": "integer", + "name": "nextPage", + "in": "query" + }, + { + "type": "integer", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "name": "previousPage", + "in": "query" + }, + { + "type": "string", + "name": "sort", + "in": "query" + }, + { + "type": "string", + "name": "sortBy", + "in": "query" + }, + { + "type": "integer", + "name": "totalPage", + "in": "query" } ], "responses": { @@ -4517,6 +4988,14 @@ const docTemplate = `{ ], "summary": "Create UserRoles", "parameters": [ + { + "type": "string", + "default": "Bearer \u003cAdd access token here\u003e", + "description": "Insert your access token", + "name": "Authorization", + "in": "header", + "required": true + }, { "description": "Required payload", "name": "payload", @@ -4754,6 +5233,46 @@ const docTemplate = `{ "type": "string", "name": "username", "in": "query" + }, + { + "type": "integer", + "name": "count", + "in": "query" + }, + { + "type": "integer", + "name": "limit", + "in": "query" + }, + { + "type": "integer", + "name": "nextPage", + "in": "query" + }, + { + "type": "integer", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "name": "previousPage", + "in": "query" + }, + { + "type": "string", + "name": "sort", + "in": "query" + }, + { + "type": "string", + "name": "sortBy", + "in": "query" + }, + { + "type": "integer", + "name": "totalPage", + "in": "query" } ], "responses": { @@ -5005,6 +5524,12 @@ const docTemplate = `{ "previousPage": { "type": "integer" }, + "sort": { + "type": "string" + }, + "sortBy": { + "type": "string" + }, "totalPage": { "type": "integer" } @@ -5246,6 +5771,169 @@ const docTemplate = `{ } } }, + "request.PpidDataCategoriesCreateRequest": { + "type": "object", + "required": [ + "description", + "slug", + "title" + ], + "properties": { + "description": { + "type": "string" + }, + "slug": { + "type": "string" + }, + "title": { + "type": "string" + } + } + }, + "request.PpidDataCategoriesUpdateRequest": { + "type": "object", + "required": [ + "description", + "id", + "slug", + "title" + ], + "properties": { + "description": { + "type": "string" + }, + "id": { + "type": "integer" + }, + "slug": { + "type": "string" + }, + "title": { + "type": "string" + } + } + }, + "request.PpidDataFilesCreateRequest": { + "type": "object", + "required": [ + "description", + "fileType", + "ppidDataId", + "title", + "unit" + ], + "properties": { + "createdById": { + "type": "integer" + }, + "description": { + "type": "string" + }, + "fileName": { + "type": "string" + }, + "filePath": { + "type": "string" + }, + "fileType": { + "type": "string" + }, + "ppidDataId": { + "type": "integer" + }, + "size": { + "type": "string" + }, + "statusId": { + "type": "integer" + }, + "title": { + "type": "string" + }, + "unit": { + "type": "string" + } + } + }, + "request.PpidDataFilesUpdateRequest": { + "type": "object", + "required": [ + "description", + "fileType", + "id", + "ppidDataId", + "title", + "unit" + ], + "properties": { + "createdById": { + "type": "integer" + }, + "description": { + "type": "string" + }, + "filePath": { + "type": "string" + }, + "fileType": { + "type": "string" + }, + "id": { + "type": "integer" + }, + "isPublish": { + "type": "boolean" + }, + "ppidDataId": { + "type": "integer" + }, + "publishedAt": { + "type": "string" + }, + "statusId": { + "type": "integer" + }, + "title": { + "type": "string" + }, + "unit": { + "type": "string" + } + } + }, + "request.PpidDatasCreateRequest": { + "type": "object", + "required": [ + "categoryId", + "createdById", + "description", + "statusId", + "title" + ], + "properties": { + "categoryId": { + "type": "integer" + }, + "createdById": { + "type": "integer" + }, + "description": { + "type": "string" + }, + "group": { + "type": "string" + }, + "levelGroupId": { + "type": "integer" + }, + "statusId": { + "type": "integer" + }, + "title": { + "type": "string" + } + } + }, "request.UserLevelsCreateRequest": { "type": "object", "required": [ @@ -5390,8 +6078,9 @@ const docTemplate = `{ "required": [ "code", "description", - "level_number", - "name" + "levelNumber", + "name", + "statusId" ], "properties": { "code": { @@ -5400,11 +6089,14 @@ const docTemplate = `{ "description": { "type": "string" }, - "level_number": { + "levelNumber": { "type": "integer" }, "name": { "type": "string" + }, + "statusId": { + "type": "integer" } } }, @@ -5414,7 +6106,8 @@ const docTemplate = `{ "code", "description", "level_number", - "name" + "name", + "status_id" ], "properties": { "code": { diff --git a/docs/swagger/swagger.json b/docs/swagger/swagger.json index a54b012..f5d3200 100644 --- a/docs/swagger/swagger.json +++ b/docs/swagger/swagger.json @@ -51,6 +51,46 @@ "type": "string", "name": "title", "in": "query" + }, + { + "type": "integer", + "name": "count", + "in": "query" + }, + { + "type": "integer", + "name": "limit", + "in": "query" + }, + { + "type": "integer", + "name": "nextPage", + "in": "query" + }, + { + "type": "integer", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "name": "previousPage", + "in": "query" + }, + { + "type": "string", + "name": "sort", + "in": "query" + }, + { + "type": "string", + "name": "sortBy", + "in": "query" + }, + { + "type": "integer", + "name": "totalPage", + "in": "query" } ], "responses": { @@ -545,6 +585,68 @@ "ArticleFiles" ], "summary": "Get all ArticleFiles", + "parameters": [ + { + "type": "integer", + "name": "articleId", + "in": "query" + }, + { + "type": "string", + "name": "fileName", + "in": "query" + }, + { + "type": "boolean", + "name": "isPublish", + "in": "query" + }, + { + "type": "integer", + "name": "statusId", + "in": "query" + }, + { + "type": "integer", + "name": "count", + "in": "query" + }, + { + "type": "integer", + "name": "limit", + "in": "query" + }, + { + "type": "integer", + "name": "nextPage", + "in": "query" + }, + { + "type": "integer", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "name": "previousPage", + "in": "query" + }, + { + "type": "string", + "name": "sort", + "in": "query" + }, + { + "type": "string", + "name": "sortBy", + "in": "query" + }, + { + "type": "integer", + "name": "totalPage", + "in": "query" + } + ], "responses": { "200": { "description": "OK", @@ -880,6 +982,46 @@ "type": "integer", "name": "typeId", "in": "query" + }, + { + "type": "integer", + "name": "count", + "in": "query" + }, + { + "type": "integer", + "name": "limit", + "in": "query" + }, + { + "type": "integer", + "name": "nextPage", + "in": "query" + }, + { + "type": "integer", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "name": "previousPage", + "in": "query" + }, + { + "type": "string", + "name": "sort", + "in": "query" + }, + { + "type": "string", + "name": "sortBy", + "in": "query" + }, + { + "type": "integer", + "name": "totalPage", + "in": "query" } ], "responses": { @@ -2903,9 +3045,61 @@ ], "description": "API for getting all PpidDataCategories", "tags": [ - "Task" + "PPID Categories" ], "summary": "Get all PpidDataCategories", + "parameters": [ + { + "type": "string", + "name": "description", + "in": "query" + }, + { + "type": "string", + "name": "title", + "in": "query" + }, + { + "type": "integer", + "name": "count", + "in": "query" + }, + { + "type": "integer", + "name": "limit", + "in": "query" + }, + { + "type": "integer", + "name": "nextPage", + "in": "query" + }, + { + "type": "integer", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "name": "previousPage", + "in": "query" + }, + { + "type": "string", + "name": "sort", + "in": "query" + }, + { + "type": "string", + "name": "sortBy", + "in": "query" + }, + { + "type": "integer", + "name": "totalPage", + "in": "query" + } + ], "responses": { "200": { "description": "OK", @@ -2913,28 +3107,22 @@ "$ref": "#/definitions/response.Response" } }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/response.BadRequestError" + } + }, "401": { "description": "Unauthorized", "schema": { - "$ref": "#/definitions/response.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/response.Response" - } - }, - "422": { - "description": "Unprocessable Entity", - "schema": { - "$ref": "#/definitions/response.Response" + "$ref": "#/definitions/response.UnauthorizedError" } }, "500": { "description": "Internal Server Error", "schema": { - "$ref": "#/definitions/response.Response" + "$ref": "#/definitions/response.InternalServerError" } } } @@ -2947,9 +3135,20 @@ ], "description": "API for create PpidDataCategories", "tags": [ - "Task" + "PPID Categories" ], "summary": "Create PpidDataCategories", + "parameters": [ + { + "description": "Required payload", + "name": "payload", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/request.PpidDataCategoriesCreateRequest" + } + } + ], "responses": { "200": { "description": "OK", @@ -2957,28 +3156,22 @@ "$ref": "#/definitions/response.Response" } }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/response.BadRequestError" + } + }, "401": { "description": "Unauthorized", "schema": { - "$ref": "#/definitions/response.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/response.Response" - } - }, - "422": { - "description": "Unprocessable Entity", - "schema": { - "$ref": "#/definitions/response.Response" + "$ref": "#/definitions/response.UnauthorizedError" } }, "500": { "description": "Internal Server Error", "schema": { - "$ref": "#/definitions/response.Response" + "$ref": "#/definitions/response.InternalServerError" } } } @@ -2993,7 +3186,7 @@ ], "description": "API for getting one PpidDataCategories", "tags": [ - "Task" + "PPID Categories" ], "summary": "Get one PpidDataCategories", "parameters": [ @@ -3012,28 +3205,22 @@ "$ref": "#/definitions/response.Response" } }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/response.BadRequestError" + } + }, "401": { "description": "Unauthorized", "schema": { - "$ref": "#/definitions/response.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/response.Response" - } - }, - "422": { - "description": "Unprocessable Entity", - "schema": { - "$ref": "#/definitions/response.Response" + "$ref": "#/definitions/response.UnauthorizedError" } }, "500": { "description": "Internal Server Error", "schema": { - "$ref": "#/definitions/response.Response" + "$ref": "#/definitions/response.InternalServerError" } } } @@ -3046,10 +3233,19 @@ ], "description": "API for update PpidDataCategories", "tags": [ - "Task" + "PPID Categories" ], "summary": "update PpidDataCategories", "parameters": [ + { + "description": "Required payload", + "name": "payload", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/request.PpidDataCategoriesUpdateRequest" + } + }, { "type": "integer", "description": "PpidDataCategories ID", @@ -3065,28 +3261,22 @@ "$ref": "#/definitions/response.Response" } }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/response.BadRequestError" + } + }, "401": { "description": "Unauthorized", "schema": { - "$ref": "#/definitions/response.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/response.Response" - } - }, - "422": { - "description": "Unprocessable Entity", - "schema": { - "$ref": "#/definitions/response.Response" + "$ref": "#/definitions/response.UnauthorizedError" } }, "500": { "description": "Internal Server Error", "schema": { - "$ref": "#/definitions/response.Response" + "$ref": "#/definitions/response.InternalServerError" } } } @@ -3099,7 +3289,7 @@ ], "description": "API for delete PpidDataCategories", "tags": [ - "Task" + "PPID Categories" ], "summary": "delete PpidDataCategories", "parameters": [ @@ -3118,28 +3308,22 @@ "$ref": "#/definitions/response.Response" } }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/response.BadRequestError" + } + }, "401": { "description": "Unauthorized", "schema": { - "$ref": "#/definitions/response.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/response.Response" - } - }, - "422": { - "description": "Unprocessable Entity", - "schema": { - "$ref": "#/definitions/response.Response" + "$ref": "#/definitions/response.UnauthorizedError" } }, "500": { "description": "Internal Server Error", "schema": { - "$ref": "#/definitions/response.Response" + "$ref": "#/definitions/response.InternalServerError" } } } @@ -3154,9 +3338,86 @@ ], "description": "API for getting all PpidDataFiles", "tags": [ - "Task" + "PPID Files" ], "summary": "Get all PpidDataFiles", + "parameters": [ + { + "type": "string", + "name": "description", + "in": "query" + }, + { + "type": "string", + "name": "fileType", + "in": "query" + }, + { + "type": "boolean", + "name": "isPublish", + "in": "query" + }, + { + "type": "integer", + "name": "ppidDataId", + "in": "query" + }, + { + "type": "integer", + "name": "statusId", + "in": "query" + }, + { + "type": "string", + "name": "title", + "in": "query" + }, + { + "type": "string", + "name": "unit", + "in": "query" + }, + { + "type": "integer", + "name": "count", + "in": "query" + }, + { + "type": "integer", + "name": "limit", + "in": "query" + }, + { + "type": "integer", + "name": "nextPage", + "in": "query" + }, + { + "type": "integer", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "name": "previousPage", + "in": "query" + }, + { + "type": "string", + "name": "sort", + "in": "query" + }, + { + "type": "string", + "name": "sortBy", + "in": "query" + }, + { + "type": "integer", + "name": "totalPage", + "in": "query" + } + ], "responses": { "200": { "description": "OK", @@ -3164,33 +3425,29 @@ "$ref": "#/definitions/response.Response" } }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/response.BadRequestError" + } + }, "401": { "description": "Unauthorized", "schema": { - "$ref": "#/definitions/response.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/response.Response" - } - }, - "422": { - "description": "Unprocessable Entity", - "schema": { - "$ref": "#/definitions/response.Response" + "$ref": "#/definitions/response.UnauthorizedError" } }, "500": { "description": "Internal Server Error", "schema": { - "$ref": "#/definitions/response.Response" + "$ref": "#/definitions/response.InternalServerError" } } } - }, - "post": { + } + }, + "/ppid-data-files/viewer/{id}": { + "get": { "security": [ { "Bearer": [] @@ -3198,9 +3455,18 @@ ], "description": "API for create PpidDataFiles", "tags": [ - "Task" + "PPID Files" ], "summary": "Create PpidDataFiles", + "parameters": [ + { + "type": "string", + "description": "Ppid Data ID", + "name": "id", + "in": "path", + "required": true + } + ], "responses": { "200": { "description": "OK", @@ -3208,28 +3474,22 @@ "$ref": "#/definitions/response.Response" } }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/response.BadRequestError" + } + }, "401": { "description": "Unauthorized", "schema": { - "$ref": "#/definitions/response.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/response.Response" - } - }, - "422": { - "description": "Unprocessable Entity", - "schema": { - "$ref": "#/definitions/response.Response" + "$ref": "#/definitions/response.UnauthorizedError" } }, "500": { "description": "Internal Server Error", "schema": { - "$ref": "#/definitions/response.Response" + "$ref": "#/definitions/response.InternalServerError" } } } @@ -3244,7 +3504,7 @@ ], "description": "API for getting one PpidDataFiles", "tags": [ - "Task" + "PPID Files" ], "summary": "Get one PpidDataFiles", "parameters": [ @@ -3263,28 +3523,22 @@ "$ref": "#/definitions/response.Response" } }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/response.BadRequestError" + } + }, "401": { "description": "Unauthorized", "schema": { - "$ref": "#/definitions/response.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/response.Response" - } - }, - "422": { - "description": "Unprocessable Entity", - "schema": { - "$ref": "#/definitions/response.Response" + "$ref": "#/definitions/response.UnauthorizedError" } }, "500": { "description": "Internal Server Error", "schema": { - "$ref": "#/definitions/response.Response" + "$ref": "#/definitions/response.InternalServerError" } } } @@ -3297,13 +3551,22 @@ ], "description": "API for update PpidDataFiles", "tags": [ - "Task" + "PPID Files" ], "summary": "update PpidDataFiles", "parameters": [ + { + "description": "Required payload", + "name": "payload", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/request.PpidDataFilesUpdateRequest" + } + }, { "type": "integer", - "description": "PpidDataFiles ID", + "description": "Ppid Data ID", "name": "id", "in": "path", "required": true @@ -3316,28 +3579,22 @@ "$ref": "#/definitions/response.Response" } }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/response.BadRequestError" + } + }, "401": { "description": "Unauthorized", "schema": { - "$ref": "#/definitions/response.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/response.Response" - } - }, - "422": { - "description": "Unprocessable Entity", - "schema": { - "$ref": "#/definitions/response.Response" + "$ref": "#/definitions/response.UnauthorizedError" } }, "500": { "description": "Internal Server Error", "schema": { - "$ref": "#/definitions/response.Response" + "$ref": "#/definitions/response.InternalServerError" } } } @@ -3350,7 +3607,7 @@ ], "description": "API for delete PpidDataFiles", "tags": [ - "Task" + "PPID Files" ], "summary": "delete PpidDataFiles", "parameters": [ @@ -3369,29 +3626,91 @@ "$ref": "#/definitions/response.Response" } }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/response.BadRequestError" + } + }, "401": { "description": "Unauthorized", "schema": { - "$ref": "#/definitions/response.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/response.Response" - } - }, - "422": { - "description": "Unprocessable Entity", - "schema": { - "$ref": "#/definitions/response.Response" + "$ref": "#/definitions/response.UnauthorizedError" } }, "500": { "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/response.InternalServerError" + } + } + } + } + }, + "/ppid-data-files/{ppidDataId}": { + "post": { + "security": [ + { + "Bearer": [] + } + ], + "description": "API for create PpidDataFiles", + "produces": [ + "application/json" + ], + "tags": [ + "PPID Files" + ], + "summary": "Create PpidDataFiles", + "parameters": [ + { + "type": "file", + "description": "Upload file", + "name": "files", + "in": "formData", + "required": true + }, + { + "description": "Required payload", + "name": "payload", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/request.PpidDataFilesCreateRequest" + } + }, + { + "type": "integer", + "description": "Ppid Data ID", + "name": "ppidDataId", + "in": "path", + "required": true + } + ], + "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" + } } } } @@ -3405,9 +3724,91 @@ ], "description": "API for getting all PpidDatas", "tags": [ - "Task" + "PPID Data" ], "summary": "Get all PpidDatas", + "parameters": [ + { + "type": "integer", + "name": "categoryId", + "in": "query" + }, + { + "type": "integer", + "name": "createdById", + "in": "query" + }, + { + "type": "string", + "name": "description", + "in": "query" + }, + { + "type": "string", + "name": "group", + "in": "query" + }, + { + "type": "boolean", + "name": "isPublish", + "in": "query" + }, + { + "type": "integer", + "name": "levelGroupId", + "in": "query" + }, + { + "type": "integer", + "name": "statusId", + "in": "query" + }, + { + "type": "string", + "name": "title", + "in": "query" + }, + { + "type": "integer", + "name": "count", + "in": "query" + }, + { + "type": "integer", + "name": "limit", + "in": "query" + }, + { + "type": "integer", + "name": "nextPage", + "in": "query" + }, + { + "type": "integer", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "name": "previousPage", + "in": "query" + }, + { + "type": "string", + "name": "sort", + "in": "query" + }, + { + "type": "string", + "name": "sortBy", + "in": "query" + }, + { + "type": "integer", + "name": "totalPage", + "in": "query" + } + ], "responses": { "200": { "description": "OK", @@ -3415,28 +3816,22 @@ "$ref": "#/definitions/response.Response" } }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/response.BadRequestError" + } + }, "401": { "description": "Unauthorized", "schema": { - "$ref": "#/definitions/response.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/response.Response" - } - }, - "422": { - "description": "Unprocessable Entity", - "schema": { - "$ref": "#/definitions/response.Response" + "$ref": "#/definitions/response.UnauthorizedError" } }, "500": { "description": "Internal Server Error", "schema": { - "$ref": "#/definitions/response.Response" + "$ref": "#/definitions/response.InternalServerError" } } } @@ -3449,9 +3844,20 @@ ], "description": "API for create PpidDatas", "tags": [ - "Task" + "PPID Data" ], "summary": "Create PpidDatas", + "parameters": [ + { + "description": "Required payload", + "name": "payload", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/request.PpidDatasCreateRequest" + } + } + ], "responses": { "200": { "description": "OK", @@ -3459,28 +3865,22 @@ "$ref": "#/definitions/response.Response" } }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/response.BadRequestError" + } + }, "401": { "description": "Unauthorized", "schema": { - "$ref": "#/definitions/response.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/response.Response" - } - }, - "422": { - "description": "Unprocessable Entity", - "schema": { - "$ref": "#/definitions/response.Response" + "$ref": "#/definitions/response.UnauthorizedError" } }, "500": { "description": "Internal Server Error", "schema": { - "$ref": "#/definitions/response.Response" + "$ref": "#/definitions/response.InternalServerError" } } } @@ -3495,7 +3895,7 @@ ], "description": "API for getting one PpidDatas", "tags": [ - "Task" + "PPID Data" ], "summary": "Get one PpidDatas", "parameters": [ @@ -3514,28 +3914,22 @@ "$ref": "#/definitions/response.Response" } }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/response.BadRequestError" + } + }, "401": { "description": "Unauthorized", "schema": { - "$ref": "#/definitions/response.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/response.Response" - } - }, - "422": { - "description": "Unprocessable Entity", - "schema": { - "$ref": "#/definitions/response.Response" + "$ref": "#/definitions/response.UnauthorizedError" } }, "500": { "description": "Internal Server Error", "schema": { - "$ref": "#/definitions/response.Response" + "$ref": "#/definitions/response.InternalServerError" } } } @@ -3548,10 +3942,19 @@ ], "description": "API for update PpidDatas", "tags": [ - "Task" + "PPID Data" ], "summary": "update PpidDatas", "parameters": [ + { + "description": "Required payload", + "name": "payload", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/request.PpidDatasCreateRequest" + } + }, { "type": "integer", "description": "PpidDatas ID", @@ -3567,28 +3970,22 @@ "$ref": "#/definitions/response.Response" } }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/response.BadRequestError" + } + }, "401": { "description": "Unauthorized", "schema": { - "$ref": "#/definitions/response.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/response.Response" - } - }, - "422": { - "description": "Unprocessable Entity", - "schema": { - "$ref": "#/definitions/response.Response" + "$ref": "#/definitions/response.UnauthorizedError" } }, "500": { "description": "Internal Server Error", "schema": { - "$ref": "#/definitions/response.Response" + "$ref": "#/definitions/response.InternalServerError" } } } @@ -3601,7 +3998,7 @@ ], "description": "API for delete PpidDatas", "tags": [ - "Task" + "PPID Data" ], "summary": "delete PpidDatas", "parameters": [ @@ -3620,28 +4017,22 @@ "$ref": "#/definitions/response.Response" } }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/response.BadRequestError" + } + }, "401": { "description": "Unauthorized", "schema": { - "$ref": "#/definitions/response.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/response.Response" - } - }, - "422": { - "description": "Unprocessable Entity", - "schema": { - "$ref": "#/definitions/response.Response" + "$ref": "#/definitions/response.UnauthorizedError" } }, "500": { "description": "Internal Server Error", "schema": { - "$ref": "#/definitions/response.Response" + "$ref": "#/definitions/response.InternalServerError" } } } @@ -3930,6 +4321,46 @@ "type": "integer", "name": "provinceId", "in": "query" + }, + { + "type": "integer", + "name": "count", + "in": "query" + }, + { + "type": "integer", + "name": "limit", + "in": "query" + }, + { + "type": "integer", + "name": "nextPage", + "in": "query" + }, + { + "type": "integer", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "name": "previousPage", + "in": "query" + }, + { + "type": "string", + "name": "sort", + "in": "query" + }, + { + "type": "string", + "name": "sortBy", + "in": "query" + }, + { + "type": "integer", + "name": "totalPage", + "in": "query" } ], "responses": { @@ -4465,6 +4896,46 @@ "type": "integer", "name": "statusId", "in": "query" + }, + { + "type": "integer", + "name": "count", + "in": "query" + }, + { + "type": "integer", + "name": "limit", + "in": "query" + }, + { + "type": "integer", + "name": "nextPage", + "in": "query" + }, + { + "type": "integer", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "name": "previousPage", + "in": "query" + }, + { + "type": "string", + "name": "sort", + "in": "query" + }, + { + "type": "string", + "name": "sortBy", + "in": "query" + }, + { + "type": "integer", + "name": "totalPage", + "in": "query" } ], "responses": { @@ -4506,6 +4977,14 @@ ], "summary": "Create UserRoles", "parameters": [ + { + "type": "string", + "default": "Bearer \u003cAdd access token here\u003e", + "description": "Insert your access token", + "name": "Authorization", + "in": "header", + "required": true + }, { "description": "Required payload", "name": "payload", @@ -4743,6 +5222,46 @@ "type": "string", "name": "username", "in": "query" + }, + { + "type": "integer", + "name": "count", + "in": "query" + }, + { + "type": "integer", + "name": "limit", + "in": "query" + }, + { + "type": "integer", + "name": "nextPage", + "in": "query" + }, + { + "type": "integer", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "name": "previousPage", + "in": "query" + }, + { + "type": "string", + "name": "sort", + "in": "query" + }, + { + "type": "string", + "name": "sortBy", + "in": "query" + }, + { + "type": "integer", + "name": "totalPage", + "in": "query" } ], "responses": { @@ -4994,6 +5513,12 @@ "previousPage": { "type": "integer" }, + "sort": { + "type": "string" + }, + "sortBy": { + "type": "string" + }, "totalPage": { "type": "integer" } @@ -5235,6 +5760,169 @@ } } }, + "request.PpidDataCategoriesCreateRequest": { + "type": "object", + "required": [ + "description", + "slug", + "title" + ], + "properties": { + "description": { + "type": "string" + }, + "slug": { + "type": "string" + }, + "title": { + "type": "string" + } + } + }, + "request.PpidDataCategoriesUpdateRequest": { + "type": "object", + "required": [ + "description", + "id", + "slug", + "title" + ], + "properties": { + "description": { + "type": "string" + }, + "id": { + "type": "integer" + }, + "slug": { + "type": "string" + }, + "title": { + "type": "string" + } + } + }, + "request.PpidDataFilesCreateRequest": { + "type": "object", + "required": [ + "description", + "fileType", + "ppidDataId", + "title", + "unit" + ], + "properties": { + "createdById": { + "type": "integer" + }, + "description": { + "type": "string" + }, + "fileName": { + "type": "string" + }, + "filePath": { + "type": "string" + }, + "fileType": { + "type": "string" + }, + "ppidDataId": { + "type": "integer" + }, + "size": { + "type": "string" + }, + "statusId": { + "type": "integer" + }, + "title": { + "type": "string" + }, + "unit": { + "type": "string" + } + } + }, + "request.PpidDataFilesUpdateRequest": { + "type": "object", + "required": [ + "description", + "fileType", + "id", + "ppidDataId", + "title", + "unit" + ], + "properties": { + "createdById": { + "type": "integer" + }, + "description": { + "type": "string" + }, + "filePath": { + "type": "string" + }, + "fileType": { + "type": "string" + }, + "id": { + "type": "integer" + }, + "isPublish": { + "type": "boolean" + }, + "ppidDataId": { + "type": "integer" + }, + "publishedAt": { + "type": "string" + }, + "statusId": { + "type": "integer" + }, + "title": { + "type": "string" + }, + "unit": { + "type": "string" + } + } + }, + "request.PpidDatasCreateRequest": { + "type": "object", + "required": [ + "categoryId", + "createdById", + "description", + "statusId", + "title" + ], + "properties": { + "categoryId": { + "type": "integer" + }, + "createdById": { + "type": "integer" + }, + "description": { + "type": "string" + }, + "group": { + "type": "string" + }, + "levelGroupId": { + "type": "integer" + }, + "statusId": { + "type": "integer" + }, + "title": { + "type": "string" + } + } + }, "request.UserLevelsCreateRequest": { "type": "object", "required": [ @@ -5379,8 +6067,9 @@ "required": [ "code", "description", - "level_number", - "name" + "levelNumber", + "name", + "statusId" ], "properties": { "code": { @@ -5389,11 +6078,14 @@ "description": { "type": "string" }, - "level_number": { + "levelNumber": { "type": "integer" }, "name": { "type": "string" + }, + "statusId": { + "type": "integer" } } }, @@ -5403,7 +6095,8 @@ "code", "description", "level_number", - "name" + "name", + "status_id" ], "properties": { "code": { diff --git a/docs/swagger/swagger.yaml b/docs/swagger/swagger.yaml index 0687485..41e6409 100644 --- a/docs/swagger/swagger.yaml +++ b/docs/swagger/swagger.yaml @@ -11,6 +11,10 @@ definitions: type: integer previousPage: type: integer + sort: + type: string + sortBy: + type: string totalPage: type: integer type: object @@ -181,6 +185,119 @@ definitions: - id - prov_id type: object + request.PpidDataCategoriesCreateRequest: + properties: + description: + type: string + slug: + type: string + title: + type: string + required: + - description + - slug + - title + type: object + request.PpidDataCategoriesUpdateRequest: + properties: + description: + type: string + id: + type: integer + slug: + type: string + title: + type: string + required: + - description + - id + - slug + - title + type: object + request.PpidDataFilesCreateRequest: + properties: + createdById: + type: integer + description: + type: string + fileName: + type: string + filePath: + type: string + fileType: + type: string + ppidDataId: + type: integer + size: + type: string + statusId: + type: integer + title: + type: string + unit: + type: string + required: + - description + - fileType + - ppidDataId + - title + - unit + type: object + request.PpidDataFilesUpdateRequest: + properties: + createdById: + type: integer + description: + type: string + filePath: + type: string + fileType: + type: string + id: + type: integer + isPublish: + type: boolean + ppidDataId: + type: integer + publishedAt: + type: string + statusId: + type: integer + title: + type: string + unit: + type: string + required: + - description + - fileType + - id + - ppidDataId + - title + - unit + type: object + request.PpidDatasCreateRequest: + properties: + categoryId: + type: integer + createdById: + type: integer + description: + type: string + group: + type: string + levelGroupId: + type: integer + statusId: + type: integer + title: + type: string + required: + - categoryId + - createdById + - description + - statusId + - title + type: object request.UserLevelsCreateRequest: properties: aliasName: @@ -286,15 +403,18 @@ definitions: type: string description: type: string - level_number: + levelNumber: type: integer name: type: string + statusId: + type: integer required: - code - description - - level_number + - levelNumber - name + - statusId type: object request.UserRolesUpdateRequest: properties: @@ -313,6 +433,7 @@ definitions: - description - level_number - name + - status_id type: object request.UsersCreateRequest: properties: @@ -480,6 +601,30 @@ paths: - in: query name: title type: string + - in: query + name: count + type: integer + - in: query + name: limit + type: integer + - in: query + name: nextPage + type: integer + - in: query + name: page + type: integer + - in: query + name: previousPage + type: integer + - in: query + name: sort + type: string + - in: query + name: sortBy + type: string + - in: query + name: totalPage + type: integer responses: "200": description: OK @@ -793,6 +938,43 @@ paths: /article-files: get: description: API for getting all ArticleFiles + parameters: + - in: query + name: articleId + type: integer + - in: query + name: fileName + type: string + - in: query + name: isPublish + type: boolean + - in: query + name: statusId + type: integer + - in: query + name: count + type: integer + - in: query + name: limit + type: integer + - in: query + name: nextPage + type: integer + - in: query + name: page + type: integer + - in: query + name: previousPage + type: integer + - in: query + name: sort + type: string + - in: query + name: sortBy + type: string + - in: query + name: totalPage + type: integer responses: "200": description: OK @@ -1006,6 +1188,30 @@ paths: - in: query name: typeId type: integer + - in: query + name: count + type: integer + - in: query + name: limit + type: integer + - in: query + name: nextPage + type: integer + - in: query + name: page + type: integer + - in: query + name: previousPage + type: integer + - in: query + name: sort + type: string + - in: query + name: sortBy + type: string + - in: query + name: totalPage + type: integer responses: "200": description: OK @@ -2296,60 +2502,90 @@ paths: /ppid-data-categories: get: description: API for getting all PpidDataCategories + parameters: + - in: query + name: description + type: string + - in: query + name: title + type: string + - in: query + name: count + type: integer + - in: query + name: limit + type: integer + - in: query + name: nextPage + type: integer + - in: query + name: page + type: integer + - in: query + name: previousPage + type: integer + - in: query + name: sort + type: string + - in: query + name: sortBy + type: string + - in: query + name: totalPage + type: integer 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.Response' - "404": - description: Not Found - schema: - $ref: '#/definitions/response.Response' - "422": - description: Unprocessable Entity - schema: - $ref: '#/definitions/response.Response' + $ref: '#/definitions/response.UnauthorizedError' "500": description: Internal Server Error schema: - $ref: '#/definitions/response.Response' + $ref: '#/definitions/response.InternalServerError' security: - Bearer: [] summary: Get all PpidDataCategories tags: - - Task + - PPID Categories post: description: API for create PpidDataCategories + parameters: + - description: Required payload + in: body + name: payload + required: true + schema: + $ref: '#/definitions/request.PpidDataCategoriesCreateRequest' 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.Response' - "404": - description: Not Found - schema: - $ref: '#/definitions/response.Response' - "422": - description: Unprocessable Entity - schema: - $ref: '#/definitions/response.Response' + $ref: '#/definitions/response.UnauthorizedError' "500": description: Internal Server Error schema: - $ref: '#/definitions/response.Response' + $ref: '#/definitions/response.InternalServerError' security: - Bearer: [] summary: Create PpidDataCategories tags: - - Task + - PPID Categories /ppid-data-categories/{id}: delete: description: API for delete PpidDataCategories @@ -2364,27 +2600,23 @@ paths: description: OK schema: $ref: '#/definitions/response.Response' + "400": + description: Bad Request + schema: + $ref: '#/definitions/response.BadRequestError' "401": description: Unauthorized schema: - $ref: '#/definitions/response.Response' - "404": - description: Not Found - schema: - $ref: '#/definitions/response.Response' - "422": - description: Unprocessable Entity - schema: - $ref: '#/definitions/response.Response' + $ref: '#/definitions/response.UnauthorizedError' "500": description: Internal Server Error schema: - $ref: '#/definitions/response.Response' + $ref: '#/definitions/response.InternalServerError' security: - Bearer: [] summary: delete PpidDataCategories tags: - - Task + - PPID Categories get: description: API for getting one PpidDataCategories parameters: @@ -2398,30 +2630,32 @@ paths: description: OK schema: $ref: '#/definitions/response.Response' + "400": + description: Bad Request + schema: + $ref: '#/definitions/response.BadRequestError' "401": description: Unauthorized schema: - $ref: '#/definitions/response.Response' - "404": - description: Not Found - schema: - $ref: '#/definitions/response.Response' - "422": - description: Unprocessable Entity - schema: - $ref: '#/definitions/response.Response' + $ref: '#/definitions/response.UnauthorizedError' "500": description: Internal Server Error schema: - $ref: '#/definitions/response.Response' + $ref: '#/definitions/response.InternalServerError' security: - Bearer: [] summary: Get one PpidDataCategories tags: - - Task + - PPID Categories put: description: API for update PpidDataCategories parameters: + - description: Required payload + in: body + name: payload + required: true + schema: + $ref: '#/definitions/request.PpidDataCategoriesUpdateRequest' - description: PpidDataCategories ID in: path name: id @@ -2432,84 +2666,94 @@ paths: description: OK schema: $ref: '#/definitions/response.Response' + "400": + description: Bad Request + schema: + $ref: '#/definitions/response.BadRequestError' "401": description: Unauthorized schema: - $ref: '#/definitions/response.Response' - "404": - description: Not Found - schema: - $ref: '#/definitions/response.Response' - "422": - description: Unprocessable Entity - schema: - $ref: '#/definitions/response.Response' + $ref: '#/definitions/response.UnauthorizedError' "500": description: Internal Server Error schema: - $ref: '#/definitions/response.Response' + $ref: '#/definitions/response.InternalServerError' security: - Bearer: [] summary: update PpidDataCategories tags: - - Task + - PPID Categories /ppid-data-files: get: description: API for getting all PpidDataFiles + parameters: + - in: query + name: description + type: string + - in: query + name: fileType + type: string + - in: query + name: isPublish + type: boolean + - in: query + name: ppidDataId + type: integer + - in: query + name: statusId + type: integer + - in: query + name: title + type: string + - in: query + name: unit + type: string + - in: query + name: count + type: integer + - in: query + name: limit + type: integer + - in: query + name: nextPage + type: integer + - in: query + name: page + type: integer + - in: query + name: previousPage + type: integer + - in: query + name: sort + type: string + - in: query + name: sortBy + type: string + - in: query + name: totalPage + type: integer 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.Response' - "404": - description: Not Found - schema: - $ref: '#/definitions/response.Response' - "422": - description: Unprocessable Entity - schema: - $ref: '#/definitions/response.Response' + $ref: '#/definitions/response.UnauthorizedError' "500": description: Internal Server Error schema: - $ref: '#/definitions/response.Response' + $ref: '#/definitions/response.InternalServerError' security: - Bearer: [] summary: Get all PpidDataFiles tags: - - Task - post: - description: API for create PpidDataFiles - responses: - "200": - description: OK - schema: - $ref: '#/definitions/response.Response' - "401": - description: Unauthorized - schema: - $ref: '#/definitions/response.Response' - "404": - description: Not Found - schema: - $ref: '#/definitions/response.Response' - "422": - description: Unprocessable Entity - schema: - $ref: '#/definitions/response.Response' - "500": - description: Internal Server Error - schema: - $ref: '#/definitions/response.Response' - security: - - Bearer: [] - summary: Create PpidDataFiles - tags: - - Task + - PPID Files /ppid-data-files/{id}: delete: description: API for delete PpidDataFiles @@ -2524,27 +2768,23 @@ paths: description: OK schema: $ref: '#/definitions/response.Response' + "400": + description: Bad Request + schema: + $ref: '#/definitions/response.BadRequestError' "401": description: Unauthorized schema: - $ref: '#/definitions/response.Response' - "404": - description: Not Found - schema: - $ref: '#/definitions/response.Response' - "422": - description: Unprocessable Entity - schema: - $ref: '#/definitions/response.Response' + $ref: '#/definitions/response.UnauthorizedError' "500": description: Internal Server Error schema: - $ref: '#/definitions/response.Response' + $ref: '#/definitions/response.InternalServerError' security: - Bearer: [] summary: delete PpidDataFiles tags: - - Task + - PPID Files get: description: API for getting one PpidDataFiles parameters: @@ -2558,31 +2798,33 @@ paths: description: OK schema: $ref: '#/definitions/response.Response' + "400": + description: Bad Request + schema: + $ref: '#/definitions/response.BadRequestError' "401": description: Unauthorized schema: - $ref: '#/definitions/response.Response' - "404": - description: Not Found - schema: - $ref: '#/definitions/response.Response' - "422": - description: Unprocessable Entity - schema: - $ref: '#/definitions/response.Response' + $ref: '#/definitions/response.UnauthorizedError' "500": description: Internal Server Error schema: - $ref: '#/definitions/response.Response' + $ref: '#/definitions/response.InternalServerError' security: - Bearer: [] summary: Get one PpidDataFiles tags: - - Task + - PPID Files put: description: API for update PpidDataFiles parameters: - - description: PpidDataFiles ID + - description: Required payload + in: body + name: payload + required: true + schema: + $ref: '#/definitions/request.PpidDataFilesUpdateRequest' + - description: Ppid Data ID in: path name: id required: true @@ -2592,84 +2834,203 @@ paths: description: OK schema: $ref: '#/definitions/response.Response' + "400": + description: Bad Request + schema: + $ref: '#/definitions/response.BadRequestError' "401": description: Unauthorized schema: - $ref: '#/definitions/response.Response' - "404": - description: Not Found - schema: - $ref: '#/definitions/response.Response' - "422": - description: Unprocessable Entity - schema: - $ref: '#/definitions/response.Response' + $ref: '#/definitions/response.UnauthorizedError' "500": description: Internal Server Error schema: - $ref: '#/definitions/response.Response' + $ref: '#/definitions/response.InternalServerError' security: - Bearer: [] summary: update PpidDataFiles tags: - - Task - /ppid-datas: - get: - description: API for getting all PpidDatas + - PPID Files + /ppid-data-files/{ppidDataId}: + post: + description: API for create PpidDataFiles + parameters: + - description: Upload file + in: formData + name: files + required: true + type: file + - description: Required payload + in: body + name: payload + required: true + schema: + $ref: '#/definitions/request.PpidDataFilesCreateRequest' + - description: Ppid Data ID + in: path + name: ppidDataId + required: true + type: integer + produces: + - application/json 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.Response' - "404": - description: Not Found - schema: - $ref: '#/definitions/response.Response' - "422": - description: Unprocessable Entity - schema: - $ref: '#/definitions/response.Response' + $ref: '#/definitions/response.UnauthorizedError' "500": description: Internal Server Error + schema: + $ref: '#/definitions/response.InternalServerError' + security: + - Bearer: [] + summary: Create PpidDataFiles + tags: + - PPID Files + /ppid-data-files/viewer/{id}: + get: + description: API for create PpidDataFiles + parameters: + - description: Ppid Data ID + in: path + name: id + required: true + type: string + 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: Create PpidDataFiles + tags: + - PPID Files + /ppid-datas: + get: + description: API for getting all PpidDatas + parameters: + - in: query + name: categoryId + type: integer + - in: query + name: createdById + type: integer + - in: query + name: description + type: string + - in: query + name: group + type: string + - in: query + name: isPublish + type: boolean + - in: query + name: levelGroupId + type: integer + - in: query + name: statusId + type: integer + - in: query + name: title + type: string + - in: query + name: count + type: integer + - in: query + name: limit + type: integer + - in: query + name: nextPage + type: integer + - in: query + name: page + type: integer + - in: query + name: previousPage + type: integer + - in: query + name: sort + type: string + - in: query + name: sortBy + type: string + - in: query + name: totalPage + type: integer + 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: Get all PpidDatas tags: - - Task + - PPID Data post: description: API for create PpidDatas + parameters: + - description: Required payload + in: body + name: payload + required: true + schema: + $ref: '#/definitions/request.PpidDatasCreateRequest' 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.Response' - "404": - description: Not Found - schema: - $ref: '#/definitions/response.Response' - "422": - description: Unprocessable Entity - schema: - $ref: '#/definitions/response.Response' + $ref: '#/definitions/response.UnauthorizedError' "500": description: Internal Server Error schema: - $ref: '#/definitions/response.Response' + $ref: '#/definitions/response.InternalServerError' security: - Bearer: [] summary: Create PpidDatas tags: - - Task + - PPID Data /ppid-datas/{id}: delete: description: API for delete PpidDatas @@ -2684,27 +3045,23 @@ paths: description: OK schema: $ref: '#/definitions/response.Response' + "400": + description: Bad Request + schema: + $ref: '#/definitions/response.BadRequestError' "401": description: Unauthorized schema: - $ref: '#/definitions/response.Response' - "404": - description: Not Found - schema: - $ref: '#/definitions/response.Response' - "422": - description: Unprocessable Entity - schema: - $ref: '#/definitions/response.Response' + $ref: '#/definitions/response.UnauthorizedError' "500": description: Internal Server Error schema: - $ref: '#/definitions/response.Response' + $ref: '#/definitions/response.InternalServerError' security: - Bearer: [] summary: delete PpidDatas tags: - - Task + - PPID Data get: description: API for getting one PpidDatas parameters: @@ -2718,30 +3075,32 @@ paths: description: OK schema: $ref: '#/definitions/response.Response' + "400": + description: Bad Request + schema: + $ref: '#/definitions/response.BadRequestError' "401": description: Unauthorized schema: - $ref: '#/definitions/response.Response' - "404": - description: Not Found - schema: - $ref: '#/definitions/response.Response' - "422": - description: Unprocessable Entity - schema: - $ref: '#/definitions/response.Response' + $ref: '#/definitions/response.UnauthorizedError' "500": description: Internal Server Error schema: - $ref: '#/definitions/response.Response' + $ref: '#/definitions/response.InternalServerError' security: - Bearer: [] summary: Get one PpidDatas tags: - - Task + - PPID Data put: description: API for update PpidDatas parameters: + - description: Required payload + in: body + name: payload + required: true + schema: + $ref: '#/definitions/request.PpidDatasCreateRequest' - description: PpidDatas ID in: path name: id @@ -2752,27 +3111,23 @@ paths: description: OK schema: $ref: '#/definitions/response.Response' + "400": + description: Bad Request + schema: + $ref: '#/definitions/response.BadRequestError' "401": description: Unauthorized schema: - $ref: '#/definitions/response.Response' - "404": - description: Not Found - schema: - $ref: '#/definitions/response.Response' - "422": - description: Unprocessable Entity - schema: - $ref: '#/definitions/response.Response' + $ref: '#/definitions/response.UnauthorizedError' "500": description: Internal Server Error schema: - $ref: '#/definitions/response.Response' + $ref: '#/definitions/response.InternalServerError' security: - Bearer: [] summary: update PpidDatas tags: - - Task + - PPID Data /provinces: get: description: API for getting all Provinces @@ -2949,6 +3304,30 @@ paths: - in: query name: provinceId type: integer + - in: query + name: count + type: integer + - in: query + name: limit + type: integer + - in: query + name: nextPage + type: integer + - in: query + name: page + type: integer + - in: query + name: previousPage + type: integer + - in: query + name: sort + type: string + - in: query + name: sortBy + type: string + - in: query + name: totalPage + type: integer responses: "200": description: OK @@ -3288,6 +3667,30 @@ paths: - in: query name: statusId type: integer + - in: query + name: count + type: integer + - in: query + name: limit + type: integer + - in: query + name: nextPage + type: integer + - in: query + name: page + type: integer + - in: query + name: previousPage + type: integer + - in: query + name: sort + type: string + - in: query + name: sortBy + type: string + - in: query + name: totalPage + type: integer responses: "200": description: OK @@ -3313,6 +3716,12 @@ paths: post: description: API for create UserRoles parameters: + - default: Bearer + description: Insert your access token + in: header + name: Authorization + required: true + type: string - description: Required payload in: body name: payload @@ -3463,6 +3872,30 @@ paths: - in: query name: username type: string + - in: query + name: count + type: integer + - in: query + name: limit + type: integer + - in: query + name: nextPage + type: integer + - in: query + name: page + type: integer + - in: query + name: previousPage + type: integer + - in: query + name: sort + type: string + - in: query + name: sortBy + type: string + - in: query + name: totalPage + type: integer responses: "200": description: OK diff --git a/go.mod b/go.mod index eb397f9..ddb8955 100644 --- a/go.mod +++ b/go.mod @@ -9,6 +9,7 @@ require ( github.com/go-playground/universal-translator v0.18.1 github.com/go-playground/validator/v10 v10.17.0 github.com/gofiber/fiber/v2 v2.52.4 + github.com/golang-jwt/jwt/v5 v5.2.1 github.com/minio/minio-go/v7 v7.0.68 github.com/pelletier/go-toml/v2 v2.1.1 github.com/rs/zerolog v1.31.0 diff --git a/go.sum b/go.sum index 65d5020..b06f871 100644 --- a/go.sum +++ b/go.sum @@ -50,6 +50,8 @@ github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5x github.com/gofiber/fiber/v2 v2.31.0/go.mod h1:1Ega6O199a3Y7yDGuM9FyXDPYQfv+7/y48wl6WCwUF4= github.com/gofiber/fiber/v2 v2.52.4 h1:P+T+4iK7VaqUsq2PALYEfBBo6bJZ4q3FP8cZ84EggTM= github.com/gofiber/fiber/v2 v2.52.4/go.mod h1:KEOE+cXMhXG0zHc9d8+E38hoX+ZN7bhOtgeF2oT6jrQ= +github.com/golang-jwt/jwt/v5 v5.2.1 h1:OuVbFODueb089Lh128TAcimifWaLhJwVflnrgM17wHk= +github.com/golang-jwt/jwt/v5 v5.2.1/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= diff --git a/utils/paginator/index.paginator.go b/utils/paginator/index.paginator.go index 4f2b64b..9b7823a 100644 --- a/utils/paginator/index.paginator.go +++ b/utils/paginator/index.paginator.go @@ -8,17 +8,21 @@ import ( ) const ( - defaultLimit = 10 + defaultLimit = 10 + defaultSort = "desc" + defaultSortBy = "id" ) type Pagination struct { - Limit int `json:"limit,omitempty"` - Offset int `json:"-"` - Page int `json:"page,omitempty"` - NextPage int `json:"nextPage,omitempty"` - PreviousPage int `json:"previousPage,omitempty"` - Count int64 `json:"count,omitempty"` - TotalPage int `json:"totalPage,omitempty"` + Limit int `json:"limit,omitempty"` + Offset int `json:"-"` + Page int `json:"page,omitempty"` + NextPage int `json:"nextPage,omitempty"` + PreviousPage int `json:"previousPage,omitempty"` + Count int64 `json:"count,omitempty"` + TotalPage int `json:"totalPage,omitempty"` + Sort string `json:"sort,omitempty"` + SortBy string `json:"sortBy,omitempty"` } func Paging(p *Pagination) *Pagination { @@ -45,9 +49,19 @@ func Paginate(c *fiber.Ctx) (*Pagination, error) { if err != nil { page = 1 } + sort := c.Query("sort") + if sort == "" { + sort = defaultSort + } + sortBy := c.Query("sortBy") + if sortBy == "" { + sortBy = defaultSortBy + } p := &Pagination{ - Limit: limit, - Page: page, + Limit: limit, + Page: page, + Sort: sort, + SortBy: sortBy, } if p.Page == 0 { p.Page = 1 diff --git a/utils/service/user_utils.service.go b/utils/service/user_utils.service.go new file mode 100644 index 0000000..863d57d --- /dev/null +++ b/utils/service/user_utils.service.go @@ -0,0 +1,31 @@ +package service + +import ( + "github.com/golang-jwt/jwt/v5" + "github.com/rs/zerolog" + "go-humas-be/app/database/entity" + "go-humas-be/app/module/users/repository" + "strings" + "time" +) + +func GetUserInfo(log zerolog.Logger, repo repository.UsersRepository, bearerToken string) *entity.Users { + tokenString := strings.TrimPrefix(bearerToken, "Bearer ") + token, _, err := new(jwt.Parser).ParseUnverified(tokenString, jwt.MapClaims{}) + if err != nil { + return nil + } + claims := token.Claims.(jwt.MapClaims) + sub := claims["sub"].(string) + + user, err := repo.FindByKeycloakId(sub) + if err != nil { + return nil + } + + log.Info().Str("timestamp", time.Now(). + Format(time.RFC3339)).Str("Service:GetUserInfo", "UserInfo:GetUserInfo"). + Interface("payload", user).Msg("") + + return user +}