From b45906c7ee614814403989ca1764f61605cf80da Mon Sep 17 00:00:00 2001 From: hanif salafi Date: Wed, 2 Oct 2024 00:12:11 +0700 Subject: [PATCH] feat: update ppid data categories and ppid data --- .../entity/ppid_data_categories.entity.go | 2 ++ .../ppid_data_categories.controller.go | 5 ++++- .../ppid_data_categories.repository.go | 3 +++ .../request/ppid_data_categories.request.go | 14 ++++++++++++++ .../service/ppid_data_categories.service.go | 19 +++++++++++++++++-- .../repository/user_levels.repository.go | 9 +++++++++ docs/swagger/docs.go | 17 +++++++++++++++++ docs/swagger/swagger.json | 17 +++++++++++++++++ docs/swagger/swagger.yaml | 11 +++++++++++ 9 files changed, 94 insertions(+), 3 deletions(-) diff --git a/app/database/entity/ppid_data_categories.entity.go b/app/database/entity/ppid_data_categories.entity.go index 4a04685..1c5a78a 100644 --- a/app/database/entity/ppid_data_categories.entity.go +++ b/app/database/entity/ppid_data_categories.entity.go @@ -8,6 +8,8 @@ type PpidDataCategories struct { Description string `json:"description" gorm:"type:varchar"` Slug string `json:"slug" gorm:"type:varchar"` ParentId *uint `json:"parent_id" gorm:"type:int4"` + CreatedById *uint `json:"created_by_id" gorm:"type:int4"` + LevelGroupId *uint `json:"level_group_id" gorm:"type:int4"` Position *int `json:"position" gorm:"type:int4"` ThumbnailPath *string `json:"thumbnail_path" gorm:"type:varchar"` ThumbnailUrl *string `json:"thumbnail_url" gorm:"type:varchar"` 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 241ff69..4db04dd 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 @@ -61,6 +61,7 @@ func (_i *ppidDataCategoriesController) All(c *fiber.Ctx) error { Description: c.Query("description"), ParentId: c.Query("parentId"), IsOnlyTop: c.Query("isOnlyTop"), + LevelGroup: c.Query("levelGroup"), IsPpidDataIncluded: c.Query("isPpidDataIncluded"), } req := reqContext.ToParamRequest() @@ -160,6 +161,7 @@ func (_i *ppidDataCategoriesController) ShowBySlug(c *fiber.Ctx) error { // @Description API for create PpidDataCategories // @Tags PPID Categories // @Security Bearer +// @Param Authorization header string true "Insert your access token" default (Bearer ) // @Param payload body request.PpidDataCategoriesCreateRequest true "Required payload" // @Success 200 {object} response.Response // @Failure 400 {object} response.BadRequestError @@ -172,7 +174,8 @@ func (_i *ppidDataCategoriesController) Save(c *fiber.Ctx) error { return err } - err := _i.ppidDataCategoriesService.Save(*req) + authToken := c.Get("Authorization") + err := _i.ppidDataCategoriesService.Save(*req, authToken) if err != nil { return err } 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 16f3e74..c82f4bf 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 @@ -58,6 +58,9 @@ func (_i *ppidDataCategoriesRepository) GetAll(req request.PpidDataCategoriesQue if req.ParentId != nil { query = query.Where("parent_id = ?", req.ParentId) } + if req.LevelGroupId != nil { + query = query.Where("level_group_id = ?", req.LevelGroupId) + } if req.IsOnlyTop != nil { if *req.IsOnlyTop == true { query = query.Where("parent_id IS NULL") 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 783610b..b4a054f 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 @@ -17,6 +17,8 @@ type PpidDataCategoriesQueryRequest struct { IsOnlyTop *bool `json:"isOnlyTop"` IsPpidDataIncluded *bool `json:"isPpidDataIncluded"` ParentId *uint `json:"parentId"` + LevelGroup *string `json:"levelGroup"` + LevelGroupId *uint `json:"levelGroupId"` Pagination *paginator.Pagination `json:"pagination"` } @@ -77,6 +79,8 @@ type PpidDataCategoriesQueryRequestContext struct { Description string `json:"description"` IsOnlyTop string `json:"isOnlyTop"` IsPpidDataIncluded string `json:"isPpidDataIncluded"` + LevelGroup string `json:"levelGroup"` + LevelGroupId string `json:"levelGroupId"` ParentId string `json:"parentId"` } @@ -102,6 +106,16 @@ func (req PpidDataCategoriesQueryRequestContext) ToParamRequest() PpidDataCatego request.IsOnlyTop = &isOnlyTop } } + if levelGroup := req.LevelGroup; levelGroup != "" { + request.LevelGroup = &levelGroup + } + if levelGroupIdStr := req.LevelGroupId; levelGroupIdStr != "" { + levelGroupId, err := strconv.ParseUint(levelGroupIdStr, 10, 0) + levelGroupIdUint := uint(levelGroupId) + if err == nil { + request.LevelGroupId = &levelGroupIdUint + } + } if isPpidDataIncludedStr := req.IsPpidDataIncluded; isPpidDataIncludedStr != "" { isPpidDataIncluded, err := strconv.ParseBool(isPpidDataIncludedStr) if err == nil { 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 5e9ff70..eeab158 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 @@ -12,9 +12,11 @@ import ( "go-humas-be/app/module/ppid_data_categories/response" ppidDataFilesRepository "go-humas-be/app/module/ppid_data_files/repository" ppidDatasRepository "go-humas-be/app/module/ppid_datas/repository" + userLevelsRepository "go-humas-be/app/module/user_levels/repository" usersRepository "go-humas-be/app/module/users/repository" config "go-humas-be/config/config" "go-humas-be/utils/paginator" + utilSvc "go-humas-be/utils/service" "io" "log" "math/rand" @@ -31,6 +33,7 @@ type ppidDataCategoriesService struct { PpidDatasRepo ppidDatasRepository.PpidDatasRepository PpidDataFilesRepo ppidDataFilesRepository.PpidDataFilesRepository UsersRepo usersRepository.UsersRepository + UserLevelsRepo userLevelsRepository.UserLevelsRepository MinioStorage *config.MinioStorage Log zerolog.Logger Cfg *config.Config @@ -42,7 +45,7 @@ type PpidDataCategoriesService interface { AllInPpidData(req request.PpidDataCategoriesQueryRequest) (ppidDataCategories []*response.PpidDataCategoriesWithPpidDataResponse, paging paginator.Pagination, err error) Show(id uint) (ppidDataCategories *response.PpidDataCategoriesResponse, err error) ShowBySlug(slug string) (ppidDataCategories *response.PpidDataCategoriesResponse, err error) - Save(req request.PpidDataCategoriesCreateRequest) (err error) + Save(req request.PpidDataCategoriesCreateRequest, authToken string) (err error) SaveThumbnail(c *fiber.Ctx) (err error) Update(id uint, req request.PpidDataCategoriesUpdateRequest) (err error) UpdatePosition(req []request.PpidDataCategoriesUpdatePositionRequest) (err error) @@ -56,6 +59,7 @@ func NewPpidDataCategoriesService( ppidDatasRepo ppidDatasRepository.PpidDatasRepository, ppidDataFilesRepo ppidDataFilesRepository.PpidDataFilesRepository, usersRepo usersRepository.UsersRepository, + userLevelsRepo userLevelsRepository.UserLevelsRepository, minioStorage *config.MinioStorage, log zerolog.Logger, cfg *config.Config, @@ -66,6 +70,7 @@ func NewPpidDataCategoriesService( PpidDatasRepo: ppidDatasRepo, PpidDataFilesRepo: ppidDataFilesRepo, UsersRepo: usersRepo, + UserLevelsRepo: userLevelsRepo, MinioStorage: minioStorage, Log: log, Cfg: cfg, @@ -91,6 +96,12 @@ func (_i *ppidDataCategoriesService) All(req request.PpidDataCategoriesQueryRequ } func (_i *ppidDataCategoriesService) AllInPpidData(req request.PpidDataCategoriesQueryRequest) (ppidDataCategories []*response.PpidDataCategoriesWithPpidDataResponse, paging paginator.Pagination, err error) { + findLevel, err := _i.UserLevelsRepo.FindOneByAlias(*req.LevelGroup) + if err != nil { + return + } + req.LevelGroupId = &findLevel.ID + results, paging, err := _i.Repo.GetAll(req) if err != nil { return @@ -142,7 +153,7 @@ func (_i *ppidDataCategoriesService) ShowBySlug(slug string) (ppidDataCategories return mapper.PpidDataCategoriesResponseMapper(result, subResult), nil } -func (_i *ppidDataCategoriesService) Save(req request.PpidDataCategoriesCreateRequest) (err error) { +func (_i *ppidDataCategoriesService) Save(req request.PpidDataCategoriesCreateRequest, authToken string) (err error) { _i.Log.Info().Interface("data", req).Msg("") lastPpidData, _ := _i.Repo.FindOneLastPosition() @@ -152,6 +163,10 @@ func (_i *ppidDataCategoriesService) Save(req request.PpidDataCategoriesCreateRe newReq := req.ToEntity() newReq.Position = lastPosition + createdBy := utilSvc.GetUserInfo(_i.Log, _i.UsersRepo, authToken) + newReq.CreatedById = &createdBy.ID + newReq.LevelGroupId = &createdBy.UserLevelId + return _i.Repo.Create(newReq) } diff --git a/app/module/user_levels/repository/user_levels.repository.go b/app/module/user_levels/repository/user_levels.repository.go index 1a80ccc..4712350 100644 --- a/app/module/user_levels/repository/user_levels.repository.go +++ b/app/module/user_levels/repository/user_levels.repository.go @@ -17,6 +17,7 @@ type userLevelsRepository struct { type UserLevelsRepository interface { GetAll(req request.UserLevelsQueryRequest) (userLevelss []*entity.UserLevels, paging paginator.Pagination, err error) FindOne(id uint) (userLevels *entity.UserLevels, err error) + FindOneByAlias(alias string) (userLevels *entity.UserLevels, err error) Create(userLevels *entity.UserLevels) (err error) Update(id uint, userLevels *entity.UserLevels) (err error) Delete(id uint) (err error) @@ -83,6 +84,14 @@ func (_i *userLevelsRepository) FindOne(id uint) (userLevels *entity.UserLevels, return userLevels, nil } +func (_i *userLevelsRepository) FindOneByAlias(alias string) (userLevels *entity.UserLevels, err error) { + if err := _i.DB.DB.Where("alias_name = ?", strings.ToUpper(alias)).First(&userLevels).Error; err != nil { + return nil, err + } + + return userLevels, nil +} + func (_i *userLevelsRepository) Create(userLevels *entity.UserLevels) (err error) { return _i.DB.DB.Create(userLevels).Error } diff --git a/docs/swagger/docs.go b/docs/swagger/docs.go index 3a94f3e..02016ae 100644 --- a/docs/swagger/docs.go +++ b/docs/swagger/docs.go @@ -3648,6 +3648,16 @@ const docTemplate = `{ "name": "isPpidDataIncluded", "in": "query" }, + { + "type": "string", + "name": "levelGroup", + "in": "query" + }, + { + "type": "integer", + "name": "levelGroupId", + "in": "query" + }, { "type": "integer", "name": "parentId", @@ -3738,6 +3748,13 @@ const docTemplate = `{ ], "summary": "Create PpidDataCategories", "parameters": [ + { + "type": "string", + "description": "Insert your access token", + "name": "Authorization", + "in": "header", + "required": true + }, { "description": "Required payload", "name": "payload", diff --git a/docs/swagger/swagger.json b/docs/swagger/swagger.json index 2a65cbb..0c3a495 100644 --- a/docs/swagger/swagger.json +++ b/docs/swagger/swagger.json @@ -3637,6 +3637,16 @@ "name": "isPpidDataIncluded", "in": "query" }, + { + "type": "string", + "name": "levelGroup", + "in": "query" + }, + { + "type": "integer", + "name": "levelGroupId", + "in": "query" + }, { "type": "integer", "name": "parentId", @@ -3727,6 +3737,13 @@ ], "summary": "Create PpidDataCategories", "parameters": [ + { + "type": "string", + "description": "Insert your access token", + "name": "Authorization", + "in": "header", + "required": true + }, { "description": "Required payload", "name": "payload", diff --git a/docs/swagger/swagger.yaml b/docs/swagger/swagger.yaml index 21fcdf9..018a528 100644 --- a/docs/swagger/swagger.yaml +++ b/docs/swagger/swagger.yaml @@ -3169,6 +3169,12 @@ paths: - in: query name: isPpidDataIncluded type: boolean + - in: query + name: levelGroup + type: string + - in: query + name: levelGroupId + type: integer - in: query name: parentId type: integer @@ -3224,6 +3230,11 @@ paths: post: description: API for create PpidDataCategories parameters: + - description: Insert your access token + in: header + name: Authorization + required: true + type: string - description: Required payload in: body name: payload