feat: update user, user_role, user_level, article, article_categories, article_files, etc

This commit is contained in:
hanif salafi 2024-04-16 09:08:00 +07:00
parent 107aafecea
commit f62cf6d76a
39 changed files with 2370 additions and 2282 deletions

View File

@ -3,18 +3,18 @@ package entity
import "time" import "time"
type ArticleCategories struct { type ArticleCategories struct {
ID uint `json:"id" gorm:"primaryKey;type:int4;autoIncrement"` ID uint `json:"id" gorm:"primaryKey;type:int4;autoIncrement"`
Title string `json:"title" gorm:"type:varchar"` Title string `json:"title" gorm:"type:varchar"`
Description string `json:"description" gorm:"type:varchar"` Description string `json:"description" gorm:"type:varchar"`
ThumbnailPath string `json:"thumbnail_path" gorm:"type:varchar"` ThumbnailPath *string `json:"thumbnail_path" gorm:"type:varchar"`
ThumbnailUrl string `json:"thumbnail_url" gorm:"type:varchar"` ThumbnailUrl *string `json:"thumbnail_url" gorm:"type:varchar"`
ParentId int `json:"parent_id" gorm:"type:int4"` ParentId int `json:"parent_id" gorm:"type:int4"`
CreatedById int `json:"created_by_id" gorm:"type:int4"` CreatedById *int `json:"created_by_id" gorm:"type:int4"`
StatusId int `json:"status_id" gorm:"type:int4"` StatusId *int `json:"status_id" gorm:"type:int4;default:1"`
IsPublish bool `json:"is_publish" gorm:"type:bool"` IsPublish *bool `json:"is_publish" gorm:"type:bool;default:false"`
PublishedAt time.Time `json:"published_at" gorm:"type:timestamp"` PublishedAt *time.Time `json:"published_at" gorm:"type:timestamp"`
IsEnabled bool `json:"is_enabled" gorm:"type:bool"` IsEnabled *bool `json:"is_enabled" gorm:"type:bool;default:false"`
IsActive bool `json:"is_active" gorm:"type:bool"` IsActive *bool `json:"is_active" gorm:"type:bool;default:true"`
CreatedAt time.Time `json:"created_at" gorm:"default:now()"` CreatedAt time.Time `json:"created_at" gorm:"default:now()"`
UpdatedAt time.Time `json:"updated_at" gorm:"default:now()"` UpdatedAt time.Time `json:"updated_at" gorm:"default:now()"`
} }

View File

@ -16,9 +16,9 @@ type ArticleFiles struct {
DownloadCount int `json:"download_count" gorm:"type:int4"` DownloadCount int `json:"download_count" gorm:"type:int4"`
CreatedById int `json:"created_by_id" gorm:"type:int4"` CreatedById int `json:"created_by_id" gorm:"type:int4"`
StatusId int `json:"status_id" gorm:"type:int4"` StatusId int `json:"status_id" gorm:"type:int4"`
IsPublish bool `json:"is_publish" gorm:"type:bool"` IsPublish bool `json:"is_publish" gorm:"type:bool;default:false"`
PublishedAt time.Time `json:"published_at" gorm:"type:timestamp"` PublishedAt time.Time `json:"published_at" gorm:"type:timestamp"`
IsActive bool `json:"is_active" gorm:"type:bool"` IsActive bool `json:"is_active" gorm:"type:bool;default:true"`
CreatedAt time.Time `json:"created_at" gorm:"default:now()"` CreatedAt time.Time `json:"created_at" gorm:"default:now()"`
UpdatedAt time.Time `json:"updated_at" gorm:"default:now()"` UpdatedAt time.Time `json:"updated_at" gorm:"default:now()"`
} }

View File

@ -18,9 +18,9 @@ type Articles struct {
ViewCount *int `json:"view_count" gorm:"type:int4"` ViewCount *int `json:"view_count" gorm:"type:int4"`
DownloadCount *int `json:"download_count" gorm:"type:int4"` DownloadCount *int `json:"download_count" gorm:"type:int4"`
StatusId *int `json:"status_id" gorm:"type:int4"` StatusId *int `json:"status_id" gorm:"type:int4"`
IsPublish *bool `json:"is_publish" gorm:"type:bool"` IsPublish *bool `json:"is_publish" gorm:"type:bool;default:false"`
PublishedAt *time.Time `json:"published_at" gorm:"type:timestamp"` PublishedAt *time.Time `json:"published_at" gorm:"type:timestamp"`
IsActive *bool `json:"is_active" gorm:"type:bool"` IsActive *bool `json:"is_active" gorm:"type:bool;default:true"`
CreatedAt time.Time `json:"created_at" gorm:"default:now()"` CreatedAt time.Time `json:"created_at" gorm:"default:now()"`
UpdatedAt time.Time `json:"updated_at" gorm:"default:now()"` UpdatedAt time.Time `json:"updated_at" gorm:"default:now()"`
} }

View File

@ -3,15 +3,15 @@ package entity
import "time" import "time"
type PpidDatas struct { type PpidDatas struct {
ID uint `json:"id" gorm:"primaryKey;type:int4;autoIncrement"` ID uint `json:"id" gorm:"primaryKey;type:int4;autoIncrement"`
Title string `json:"title" gorm:"type:varchar"` Title string `json:"title" gorm:"type:varchar"`
Description string `json:"description" gorm:"type:varchar"` Description string `json:"description" gorm:"type:varchar"`
CategoryId int `json:"category_id" gorm:"type:int4"` CategoryId int `json:"category_id" gorm:"type:int4"`
CreatedById int `json:"created_by_id" gorm:"type:int4"` CreatedById int `json:"created_by_id" gorm:"type:int4"`
StatusId int `json:"status_id" gorm:"type:int4"` StatusId int `json:"status_id" gorm:"type:int4"`
IsPublish bool `json:"is_publish" gorm:"type:bool"` IsPublish *bool `json:"is_publish" gorm:"type:bool;default:false"`
PublishedAt time.Time `json:"published_at" gorm:"type:timestamp"` PublishedAt *time.Time `json:"published_at" gorm:"type:timestamp"`
IsActive bool `json:"is_active" gorm:"type:bool"` IsActive *bool `json:"is_active" gorm:"type:bool;default:true"`
CreatedAt time.Time `json:"created_at" gorm:"default:now()"` CreatedAt time.Time `json:"created_at" gorm:"default:now()"`
UpdatedAt time.Time `json:"updated_at" gorm:"default:now()"` UpdatedAt time.Time `json:"updated_at" gorm:"default:now()"`
} }

View File

@ -12,7 +12,7 @@ type UserRoleAccesses struct {
IsDeleteEnabled bool `json:"is_delete_enabled" gorm:"type:bool"` IsDeleteEnabled bool `json:"is_delete_enabled" gorm:"type:bool"`
IsApprovalEnabled bool `json:"is_approval_enabled" gorm:"type:bool"` IsApprovalEnabled bool `json:"is_approval_enabled" gorm:"type:bool"`
IsAdminEnabled bool `json:"is_admin_enabled" gorm:"type:bool"` IsAdminEnabled bool `json:"is_admin_enabled" gorm:"type:bool"`
IsActive bool `json:"is_active" gorm:"type:bool"` IsActive *bool `json:"is_active" gorm:"type:bool;default:true"`
CreatedAt time.Time `json:"created_at" gorm:"default:now()"` CreatedAt time.Time `json:"created_at" gorm:"default:now()"`
UpdatedAt time.Time `json:"updated_at" gorm:"default:now()"` UpdatedAt time.Time `json:"updated_at" gorm:"default:now()"`
} }

View File

@ -8,9 +8,9 @@ type UserRoles struct {
Description string `json:"description" gorm:"type:varchar"` Description string `json:"description" gorm:"type:varchar"`
Code string `json:"code" gorm:"type:varchar"` Code string `json:"code" gorm:"type:varchar"`
LevelNumber int `json:"level_number" gorm:"type:int4"` LevelNumber int `json:"level_number" gorm:"type:int4"`
StatusId *int `json:"status_id" gorm:"type:int4"` StatusId *int `json:"status_id" gorm:"type:int4;default:1"`
CreatedById *int `json:"created_by_id" gorm:"type:int4"` CreatedById *int `json:"created_by_id" gorm:"type:int4"`
IsActive *bool `json:"is_active" gorm:"type:bool"` IsActive *bool `json:"is_active" gorm:"type:bool;default:true"`
CreatedAt time.Time `json:"created_at" gorm:"default:now()"` CreatedAt time.Time `json:"created_at" gorm:"default:now()"`
UpdatedAt time.Time `json:"updated_at" gorm:"default:now()"` UpdatedAt time.Time `json:"updated_at" gorm:"default:now()"`
} }

View File

@ -18,10 +18,10 @@ type Users struct {
UserRoleId int `json:"user_role_id" gorm:"type:int4"` UserRoleId int `json:"user_role_id" gorm:"type:int4"`
UserLevelsId int `json:"user_levels_id" gorm:"type:int4"` UserLevelsId int `json:"user_levels_id" gorm:"type:int4"`
KeycloakId *string `json:"keycloak_id" gorm:"type:varchar"` KeycloakId *string `json:"keycloak_id" gorm:"type:varchar"`
StatusId *int `json:"status_id" gorm:"type:int4"` StatusId *int `json:"status_id" gorm:"type:int4;default:1"`
CreatedById *int `json:"created_by_id" gorm:"type:int4"` CreatedById *int `json:"created_by_id" gorm:"type:int4"`
ProfilePicturePath *string `json:"profile_picture_path" gorm:"type:varchar"` ProfilePicturePath *string `json:"profile_picture_path" gorm:"type:varchar"`
IsActive *bool `json:"is_active" gorm:"type:bool"` IsActive *bool `json:"is_active" gorm:"type:bool;default:true"`
CreatedAt time.Time `json:"created_at" gorm:"default:now()"` CreatedAt time.Time `json:"created_at" gorm:"default:now()"`
UpdatedAt time.Time `json:"updated_at" gorm:"default:now()"` UpdatedAt time.Time `json:"updated_at" gorm:"default:now()"`
} }

View File

@ -29,16 +29,16 @@ func NewArticleCategoriesController(articleCategoriesService service.ArticleCate
} }
} }
// All get all ArticleCategories // All ArticleCategories
// @Summary Get all ArticleCategories // @Summary Get all ArticleCategories
// @Description API for getting all ArticleCategories // @Description API for getting all ArticleCategories
// @Tags Task // @Tags ArticleCategories
// @Security Bearer // @Security Bearer
// @Param req query request.ArticleCategoriesQueryRequest false "query parameters"
// @Success 200 {object} response.Response // @Success 200 {object} response.Response
// @Failure 401 {object} response.Response // @Failure 400 {object} response.BadRequestError
// @Failure 404 {object} response.Response // @Failure 401 {object} response.UnauthorizedError
// @Failure 422 {object} response.Response // @Failure 500 {object} response.InternalServerError
// @Failure 500 {object} response.Response
// @Router /article-categories [get] // @Router /article-categories [get]
func (_i *articleCategoriesController) All(c *fiber.Ctx) error { func (_i *articleCategoriesController) All(c *fiber.Ctx) error {
paginate, err := paginator.Paginate(c) paginate, err := paginator.Paginate(c)
@ -46,7 +46,15 @@ func (_i *articleCategoriesController) All(c *fiber.Ctx) error {
return err return err
} }
var req request.ArticleCategoriesQueryRequest reqContext := request.ArticleCategoriesQueryRequestContext{
Title: c.Query("title"),
Description: c.Query("description"),
ParentId: c.Query("parentId"),
IsEnabled: c.Query("isEnabled"),
IsPublish: c.Query("isPublish"),
StatusId: c.Query("statusId"),
}
req := reqContext.ToParamRequest()
req.Pagination = paginate req.Pagination = paginate
articleCategoriesData, paging, err := _i.articleCategoriesService.All(req) articleCategoriesData, paging, err := _i.articleCategoriesService.All(req)
@ -55,23 +63,23 @@ func (_i *articleCategoriesController) All(c *fiber.Ctx) error {
} }
return utilRes.Resp(c, utilRes.Response{ return utilRes.Resp(c, utilRes.Response{
Success: true,
Messages: utilRes.Messages{"ArticleCategories list successfully retrieved"}, Messages: utilRes.Messages{"ArticleCategories list successfully retrieved"},
Data: articleCategoriesData, Data: articleCategoriesData,
Meta: paging, Meta: paging,
}) })
} }
// Show get one ArticleCategories // Show ArticleCategories
// @Summary Get one ArticleCategories // @Summary Get one ArticleCategories
// @Description API for getting one ArticleCategories // @Description API for getting one ArticleCategories
// @Tags Task // @Tags ArticleCategories
// @Security Bearer // @Security Bearer
// @Param id path int true "ArticleCategories ID" // @Param id path int true "ArticleCategories ID"
// @Success 200 {object} response.Response // @Success 200 {object} response.Response
// @Failure 401 {object} response.Response // @Failure 400 {object} response.BadRequestError
// @Failure 404 {object} response.Response // @Failure 401 {object} response.UnauthorizedError
// @Failure 422 {object} response.Response // @Failure 500 {object} response.InternalServerError
// @Failure 500 {object} response.Response
// @Router /article-categories/{id} [get] // @Router /article-categories/{id} [get]
func (_i *articleCategoriesController) Show(c *fiber.Ctx) error { func (_i *articleCategoriesController) Show(c *fiber.Ctx) error {
id, err := strconv.ParseUint(c.Params("id"), 10, 0) id, err := strconv.ParseUint(c.Params("id"), 10, 0)
@ -85,22 +93,22 @@ func (_i *articleCategoriesController) Show(c *fiber.Ctx) error {
} }
return utilRes.Resp(c, utilRes.Response{ return utilRes.Resp(c, utilRes.Response{
Success: true,
Messages: utilRes.Messages{"ArticleCategories successfully retrieved"}, Messages: utilRes.Messages{"ArticleCategories successfully retrieved"},
Data: articleCategoriesData, Data: articleCategoriesData,
}) })
} }
// Save create ArticleCategories // Save ArticleCategories
// @Summary Create ArticleCategories // @Summary Create ArticleCategories
// @Description API for create ArticleCategories // @Description API for create ArticleCategories
// @Tags Task // @Tags ArticleCategories
// @Security Bearer // @Security Bearer
// @Param payload body request.ArticleCategoriesCreateRequest true "Required payload" // @Param payload body request.ArticleCategoriesCreateRequest true "Required payload"
// @Success 200 {object} response.Response // @Success 200 {object} response.Response
// @Failure 401 {object} response.Response // @Failure 400 {object} response.BadRequestError
// @Failure 404 {object} response.Response // @Failure 401 {object} response.UnauthorizedError
// @Failure 422 {object} response.Response // @Failure 500 {object} response.InternalServerError
// @Failure 500 {object} response.Response
// @Router /article-categories [post] // @Router /article-categories [post]
func (_i *articleCategoriesController) Save(c *fiber.Ctx) error { func (_i *articleCategoriesController) Save(c *fiber.Ctx) error {
req := new(request.ArticleCategoriesCreateRequest) req := new(request.ArticleCategoriesCreateRequest)
@ -114,22 +122,22 @@ func (_i *articleCategoriesController) Save(c *fiber.Ctx) error {
} }
return utilRes.Resp(c, utilRes.Response{ return utilRes.Resp(c, utilRes.Response{
Success: true,
Messages: utilRes.Messages{"ArticleCategories successfully created"}, Messages: utilRes.Messages{"ArticleCategories successfully created"},
}) })
} }
// Update update ArticleCategories // Update ArticleCategories
// @Summary update ArticleCategories // @Summary update ArticleCategories
// @Description API for update ArticleCategories // @Description API for update ArticleCategories
// @Tags Task // @Tags ArticleCategories
// @Security Bearer // @Security Bearer
// @Param payload body request.ArticleCategoriesCreateRequest true "Required payload" // @Param payload body request.ArticleCategoriesUpdateRequest true "Required payload"
// @Param id path int true "ArticleCategories ID" // @Param id path int true "ArticleCategories ID"
// @Success 200 {object} response.Response // @Success 200 {object} response.Response
// @Failure 401 {object} response.Response // @Failure 400 {object} response.BadRequestError
// @Failure 404 {object} response.Response // @Failure 401 {object} response.UnauthorizedError
// @Failure 422 {object} response.Response // @Failure 500 {object} response.InternalServerError
// @Failure 500 {object} response.Response
// @Router /article-categories/{id} [put] // @Router /article-categories/{id} [put]
func (_i *articleCategoriesController) Update(c *fiber.Ctx) error { func (_i *articleCategoriesController) Update(c *fiber.Ctx) error {
id, err := strconv.ParseUint(c.Params("id"), 10, 0) id, err := strconv.ParseUint(c.Params("id"), 10, 0)
@ -148,21 +156,21 @@ func (_i *articleCategoriesController) Update(c *fiber.Ctx) error {
} }
return utilRes.Resp(c, utilRes.Response{ return utilRes.Resp(c, utilRes.Response{
Success: true,
Messages: utilRes.Messages{"ArticleCategories successfully updated"}, Messages: utilRes.Messages{"ArticleCategories successfully updated"},
}) })
} }
// Delete delete ArticleCategories // Delete ArticleCategories
// @Summary delete ArticleCategories // @Summary delete ArticleCategories
// @Description API for delete ArticleCategories // @Description API for delete ArticleCategories
// @Tags Task // @Tags ArticleCategories
// @Security Bearer // @Security Bearer
// @Param id path int true "ArticleCategories ID" // @Param id path int true "ArticleCategories ID"
// @Success 200 {object} response.Response // @Success 200 {object} response.Response
// @Failure 401 {object} response.Response // @Failure 400 {object} response.BadRequestError
// @Failure 404 {object} response.Response // @Failure 401 {object} response.UnauthorizedError
// @Failure 422 {object} response.Response // @Failure 500 {object} response.InternalServerError
// @Failure 500 {object} response.Response
// @Router /article-categories/{id} [delete] // @Router /article-categories/{id} [delete]
func (_i *articleCategoriesController) Delete(c *fiber.Ctx) error { func (_i *articleCategoriesController) Delete(c *fiber.Ctx) error {
id, err := strconv.ParseUint(c.Params("id"), 10, 0) id, err := strconv.ParseUint(c.Params("id"), 10, 0)
@ -176,6 +184,7 @@ func (_i *articleCategoriesController) Delete(c *fiber.Ctx) error {
} }
return utilRes.Resp(c, utilRes.Response{ return utilRes.Resp(c, utilRes.Response{
Success: true,
Messages: utilRes.Messages{"ArticleCategories successfully deleted"}, Messages: utilRes.Messages{"ArticleCategories successfully deleted"},
}) })
} }

View File

@ -5,6 +5,7 @@ import (
"go-humas-be/app/database/entity" "go-humas-be/app/database/entity"
"go-humas-be/app/module/article_categories/request" "go-humas-be/app/module/article_categories/request"
"go-humas-be/utils/paginator" "go-humas-be/utils/paginator"
"strings"
) )
type articleCategoriesRepository struct { type articleCategoriesRepository struct {
@ -31,6 +32,31 @@ func (_i *articleCategoriesRepository) GetAll(req request.ArticleCategoriesQuery
var count int64 var count int64
query := _i.DB.DB.Model(&entity.ArticleCategories{}) query := _i.DB.DB.Model(&entity.ArticleCategories{})
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.ParentId != nil {
query = query.Where("parent_id = ?", req.ParentId)
}
if req.CreatedById != nil {
query = query.Where("created_by_id = ?", req.CreatedById)
}
if req.IsEnabled != nil {
query = query.Where("is_enabled = ?", req.IsEnabled)
}
if req.IsPublish != nil {
query = query.Where("is_publish = ?", req.IsPublish)
}
if req.StatusId != nil {
query = query.Where("status_id = ?", req.StatusId)
}
query.Count(&count) query.Count(&count)
req.Pagination.Count = count req.Pagination.Count = count

View File

@ -3,6 +3,7 @@ package request
import ( import (
"go-humas-be/app/database/entity" "go-humas-be/app/database/entity"
"go-humas-be/utils/paginator" "go-humas-be/utils/paginator"
"strconv"
"time" "time"
) )
@ -11,81 +12,108 @@ type ArticleCategoriesGeneric interface {
} }
type ArticleCategoriesQueryRequest struct { type ArticleCategoriesQueryRequest struct {
Title string `json:"title" validate:"required"` Title *string `json:"title"`
Description string `json:"description" validate:"required"` Description *string `json:"description"`
ThumbnailPath string `json:"thumbnail_path" validate:"required"` ParentId *int `json:"parentId"`
ThumbnailUrl string `json:"thumbnail_url" validate:"required"` StatusId *int `json:"statusId"`
ParentId int `json:"parent_id" validate:"required"` IsPublish *bool `json:"isPublish"`
StatusId int `json:"status_id" validate:"required"` CreatedById *int `json:"createdById"`
IsPublish bool `json:"is_publish" validate:"required"` IsEnabled *bool `json:"isEnabled"`
PublishedAt time.Time `json:"published_at" validate:"required"` Pagination *paginator.Pagination `json:"pagination"`
IsEnabled bool `json:"is_enabled" validate:"required"`
IsActive bool `json:"is_active" validate:"required"`
Pagination *paginator.Pagination `json:"pagination"`
} }
type ArticleCategoriesCreateRequest struct { type ArticleCategoriesCreateRequest struct {
Title string `json:"title" validate:"required"` Title string `json:"title" validate:"required"`
Description string `json:"description" validate:"required"` Description string `json:"description" validate:"required"`
ThumbnailPath string `json:"thumbnail_path" validate:"required"` ParentId int `json:"parentId" validate:"required"`
ThumbnailUrl string `json:"thumbnail_url" validate:"required"` StatusId int `json:"statusId" validate:"required"`
ParentId int `json:"parent_id" validate:"required"` IsEnabled bool `json:"isEnabled" 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"`
IsEnabled bool `json:"is_enabled" validate:"required"`
IsActive bool `json:"is_active" validate:"required"`
} }
func (req ArticleCategoriesCreateRequest) ToEntity() *entity.ArticleCategories { func (req ArticleCategoriesCreateRequest) ToEntity() *entity.ArticleCategories {
return &entity.ArticleCategories{ return &entity.ArticleCategories{
Title: req.Title, Title: req.Title,
Description: req.Description, Description: req.Description,
ThumbnailPath: req.ThumbnailPath, ParentId: req.ParentId,
ThumbnailUrl: req.ThumbnailUrl,
ParentId: req.ParentId,
CreatedById: req.CreatedById,
StatusId: req.StatusId,
IsPublish: req.IsPublish,
PublishedAt: req.PublishedAt,
IsEnabled: req.IsEnabled,
IsActive: req.IsActive,
} }
} }
type ArticleCategoriesUpdateRequest struct { type ArticleCategoriesUpdateRequest struct {
ID uint `json:"id" validate:"required"` ID uint `json:"id" validate:"required"`
Title string `json:"title" validate:"required"` Title string `json:"title" validate:"required"`
Description string `json:"description" validate:"required"` Description string `json:"description" validate:"required"`
ThumbnailPath string `json:"thumbnail_path" validate:"required"` ThumbnailPath string `json:"thumbnailPath" validate:"required"`
ThumbnailUrl string `json:"thumbnail_url" validate:"required"` ThumbnailUrl string `json:"thumbnailUrl" validate:"required"`
ParentId int `json:"parent_id" validate:"required"` ParentId int `json:"parentId" validate:"required"`
CreatedById int `json:"created_by_id" validate:"required"` StatusId *int `json:"statusId"`
StatusId int `json:"status_id" validate:"required"` IsPublish *bool `json:"isPublish"`
IsPublish bool `json:"is_publish" validate:"required"` PublishedAt *time.Time `json:"publishedAt"`
PublishedAt time.Time `json:"published_at" validate:"required"` IsEnabled *bool `json:"isEnabled"`
IsEnabled bool `json:"is_enabled" validate:"required"`
IsActive bool `json:"is_active" validate:"required"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
} }
func (req ArticleCategoriesUpdateRequest) ToEntity() *entity.ArticleCategories { func (req ArticleCategoriesUpdateRequest) ToEntity() *entity.ArticleCategories {
return &entity.ArticleCategories{ return &entity.ArticleCategories{
ID: req.ID, ID: req.ID,
Title: req.Title, Title: req.Title,
Description: req.Description, Description: req.Description,
ThumbnailPath: req.ThumbnailPath, ParentId: req.ParentId,
ThumbnailUrl: req.ThumbnailUrl, StatusId: req.StatusId,
ParentId: req.ParentId, IsPublish: req.IsPublish,
CreatedById: req.CreatedById, PublishedAt: req.PublishedAt,
StatusId: req.StatusId, IsEnabled: req.IsEnabled,
IsPublish: req.IsPublish, UpdatedAt: time.Now(),
PublishedAt: req.PublishedAt,
IsEnabled: req.IsEnabled,
IsActive: req.IsActive,
CreatedAt: req.CreatedAt,
UpdatedAt: req.UpdatedAt,
} }
} }
type ArticleCategoriesQueryRequestContext struct {
Title string `json:"title"`
Description string `json:"description"`
ParentId string `json:"parentId"`
StatusId string `json:"statusId"`
CreatedById string `json:"created_by_id"`
IsPublish string `json:"isPublish"`
IsEnabled string `json:"isEnabled"`
}
func (req ArticleCategoriesQueryRequestContext) ToParamRequest() ArticleCategoriesQueryRequest {
var request ArticleCategoriesQueryRequest
if title := req.Title; title != "" {
request.Title = &title
}
if description := req.Description; description != "" {
request.Description = &description
}
if parentIdStr := req.ParentId; parentIdStr != "" {
parentId, err := strconv.Atoi(parentIdStr)
if err == nil {
request.ParentId = &parentId
}
}
if isEnabledStr := req.IsEnabled; isEnabledStr != "" {
isEnabled, err := strconv.ParseBool(isEnabledStr)
if err == nil {
request.IsEnabled = &isEnabled
}
}
if isPublishStr := req.IsPublish; isPublishStr != "" {
isPublish, err := strconv.ParseBool(isPublishStr)
if err == nil {
request.IsPublish = &isPublish
}
}
if createdByIdStr := req.CreatedById; createdByIdStr != "" {
createdById, err := strconv.Atoi(createdByIdStr)
if err == nil {
request.CreatedById = &createdById
}
}
if statusIdStr := req.StatusId; statusIdStr != "" {
statusId, err := strconv.Atoi(statusIdStr)
if err == nil {
request.StatusId = &statusId
}
}
return request
}

View File

@ -3,18 +3,18 @@ package response
import "time" import "time"
type ArticleCategoriesResponse struct { type ArticleCategoriesResponse struct {
ID uint `json:"id"` ID uint `json:"id"`
Title string `json:"title"` Title string `json:"title"`
Description string `json:"description"` Description string `json:"description"`
ThumbnailPath string `json:"thumbnail_path"` ThumbnailPath *string `json:"thumbnail_path"`
ThumbnailUrl string `json:"thumbnail_url"` ThumbnailUrl *string `json:"thumbnail_url"`
ParentId int `json:"parent_id"` ParentId int `json:"parent_id"`
CreatedById int `json:"created_by_id"` CreatedById *int `json:"created_by_id"`
StatusId int `json:"status_id"` StatusId *int `json:"status_id"`
IsPublish bool `json:"is_publish"` IsPublish *bool `json:"is_publish"`
PublishedAt time.Time `json:"published_at"` PublishedAt *time.Time `json:"published_at"`
IsEnabled bool `json:"is_enabled"` IsEnabled *bool `json:"is_enabled"`
IsActive bool `json:"is_active"` IsActive *bool `json:"is_active"`
CreatedAt time.Time `json:"created_at"` CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"` UpdatedAt time.Time `json:"updated_at"`
} }

View File

@ -68,5 +68,12 @@ func (_i *articleCategoriesService) Update(id uint, req request.ArticleCategorie
} }
func (_i *articleCategoriesService) Delete(id uint) error { func (_i *articleCategoriesService) 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)
} }

View File

@ -29,16 +29,15 @@ func NewArticleFilesController(articleFilesService service.ArticleFilesService)
} }
} }
// All get all ArticleFiles // All ArticleFiles
// @Summary Get all ArticleFiles // @Summary Get all ArticleFiles
// @Description API for getting all ArticleFiles // @Description API for getting all ArticleFiles
// @Tags ArticleFiles // @Tags ArticleFiles
// @Security Bearer // @Security Bearer
// @Success 200 {object} response.Response // @Success 200 {object} response.Response
// @Failure 401 {object} response.Response // @Failure 400 {object} response.BadRequestError
// @Failure 404 {object} response.Response // @Failure 401 {object} response.UnauthorizedError
// @Failure 422 {object} response.Response // @Failure 500 {object} response.InternalServerError
// @Failure 500 {object} response.Response
// @Router /article-files [get] // @Router /article-files [get]
func (_i *articleFilesController) All(c *fiber.Ctx) error { func (_i *articleFilesController) All(c *fiber.Ctx) error {
paginate, err := paginator.Paginate(c) paginate, err := paginator.Paginate(c)
@ -46,7 +45,13 @@ func (_i *articleFilesController) All(c *fiber.Ctx) error {
return err return err
} }
var req request.ArticleFilesQueryRequest reqContext := request.ArticleFilesQueryRequestContext{
ArticleId: c.Query("articleId"),
FileName: c.Query("fileName"),
StatusId: c.Query("statusId"),
IsPublish: c.Query("isPublish"),
}
req := reqContext.ToParamRequest()
req.Pagination = paginate req.Pagination = paginate
articleFilesData, paging, err := _i.articleFilesService.All(req) articleFilesData, paging, err := _i.articleFilesService.All(req)
@ -62,17 +67,16 @@ func (_i *articleFilesController) All(c *fiber.Ctx) error {
}) })
} }
// Show get one ArticleFiles // Show ArticleFiles
// @Summary Get one ArticleFiles // @Summary Get one ArticleFiles
// @Description API for getting one ArticleFiles // @Description API for getting one ArticleFiles
// @Tags ArticleFiles // @Tags ArticleFiles
// @Security Bearer // @Security Bearer
// @Param id path int true "ArticleFiles ID" // @Param id path int true "ArticleFiles ID"
// @Success 200 {object} response.Response // @Success 200 {object} response.Response
// @Failure 401 {object} response.Response // @Failure 400 {object} response.BadRequestError
// @Failure 404 {object} response.Response // @Failure 401 {object} response.UnauthorizedError
// @Failure 422 {object} response.Response // @Failure 500 {object} response.InternalServerError
// @Failure 500 {object} response.Response
// @Router /article-files/{id} [get] // @Router /article-files/{id} [get]
func (_i *articleFilesController) Show(c *fiber.Ctx) error { func (_i *articleFilesController) Show(c *fiber.Ctx) error {
id, err := strconv.ParseUint(c.Params("id"), 10, 0) id, err := strconv.ParseUint(c.Params("id"), 10, 0)
@ -101,10 +105,9 @@ func (_i *articleFilesController) Show(c *fiber.Ctx) error {
// @Param files formData file true "Upload file" // @Param files formData file true "Upload file"
// @Param articleId path int true "Article ID" // @Param articleId path int true "Article ID"
// @Success 200 {object} response.Response // @Success 200 {object} response.Response
// @Failure 401 {object} response.Response // @Failure 400 {object} response.BadRequestError
// @Failure 404 {object} response.Response // @Failure 401 {object} response.UnauthorizedError
// @Failure 422 {object} response.Response // @Failure 500 {object} response.InternalServerError
// @Failure 500 {object} response.Response
// @Router /article-files/{articleId} [post] // @Router /article-files/{articleId} [post]
func (_i *articleFilesController) Save(c *fiber.Ctx) error { func (_i *articleFilesController) Save(c *fiber.Ctx) error {
id, err := strconv.ParseUint(c.Params("articleId"), 10, 0) id, err := strconv.ParseUint(c.Params("articleId"), 10, 0)
@ -131,10 +134,9 @@ func (_i *articleFilesController) Save(c *fiber.Ctx) error {
// @Param payload body request.ArticleFilesUpdateRequest true "Required payload" // @Param payload body request.ArticleFilesUpdateRequest true "Required payload"
// @Param id path int true "ArticleFiles ID" // @Param id path int true "ArticleFiles ID"
// @Success 200 {object} response.Response // @Success 200 {object} response.Response
// @Failure 401 {object} response.Response // @Failure 400 {object} response.BadRequestError
// @Failure 404 {object} response.Response // @Failure 401 {object} response.UnauthorizedError
// @Failure 422 {object} response.Response // @Failure 500 {object} response.InternalServerError
// @Failure 500 {object} response.Response
// @Router /article-files/{id} [put] // @Router /article-files/{id} [put]
func (_i *articleFilesController) Update(c *fiber.Ctx) error { func (_i *articleFilesController) Update(c *fiber.Ctx) error {
id, err := strconv.ParseUint(c.Params("id"), 10, 0) id, err := strconv.ParseUint(c.Params("id"), 10, 0)
@ -165,10 +167,9 @@ func (_i *articleFilesController) Update(c *fiber.Ctx) error {
// @Security Bearer // @Security Bearer
// @Param id path int true "ArticleFiles ID" // @Param id path int true "ArticleFiles ID"
// @Success 200 {object} response.Response // @Success 200 {object} response.Response
// @Failure 401 {object} response.Response // @Failure 400 {object} response.BadRequestError
// @Failure 404 {object} response.Response // @Failure 401 {object} response.UnauthorizedError
// @Failure 422 {object} response.Response // @Failure 500 {object} response.InternalServerError
// @Failure 500 {object} response.Response
// @Router /article-files/{id} [delete] // @Router /article-files/{id} [delete]
func (_i *articleFilesController) Delete(c *fiber.Ctx) error { func (_i *articleFilesController) Delete(c *fiber.Ctx) error {
id, err := strconv.ParseUint(c.Params("id"), 10, 0) id, err := strconv.ParseUint(c.Params("id"), 10, 0)
@ -194,10 +195,9 @@ func (_i *articleFilesController) Delete(c *fiber.Ctx) error {
// @Security Bearer // @Security Bearer
// @Param id path string true "Article File ID" // @Param id path string true "Article File ID"
// @Success 200 {object} response.Response // @Success 200 {object} response.Response
// @Failure 401 {object} response.Response // @Failure 400 {object} response.BadRequestError
// @Failure 404 {object} response.Response // @Failure 401 {object} response.UnauthorizedError
// @Failure 422 {object} response.Response // @Failure 500 {object} response.InternalServerError
// @Failure 500 {object} response.Response
// @Router /article-files/viewer/{id} [get] // @Router /article-files/viewer/{id} [get]
func (_i *articleFilesController) Viewer(c *fiber.Ctx) error { func (_i *articleFilesController) Viewer(c *fiber.Ctx) error {
id, err := strconv.ParseUint(c.Params("id"), 10, 0) id, err := strconv.ParseUint(c.Params("id"), 10, 0)

View File

@ -5,6 +5,7 @@ import (
"go-humas-be/app/database/entity" "go-humas-be/app/database/entity"
"go-humas-be/app/module/article_files/request" "go-humas-be/app/module/article_files/request"
"go-humas-be/utils/paginator" "go-humas-be/utils/paginator"
"strings"
) )
type articleFilesRepository struct { type articleFilesRepository struct {
@ -31,6 +32,21 @@ func (_i *articleFilesRepository) GetAll(req request.ArticleFilesQueryRequest) (
var count int64 var count int64
query := _i.DB.DB.Model(&entity.ArticleFiles{}) query := _i.DB.DB.Model(&entity.ArticleFiles{})
query = query.Where("is_active = ?", true)
if req.ArticleId != nil {
query = query.Where("article_id = ?", req.ArticleId)
}
if req.FileName != nil && *req.FileName != "" {
fileName := strings.ToLower(*req.FileName)
query = query.Where("LOWER(file_name) LIKE ?", "%"+strings.ToLower(fileName)+"%")
}
if req.IsPublish != nil {
query = query.Where("is_publish = ?", req.IsPublish)
}
if req.StatusId != nil {
query = query.Where("status_id = ?", req.StatusId)
}
query.Count(&count) query.Count(&count)
req.Pagination.Count = count req.Pagination.Count = count
@ -66,4 +82,4 @@ func (_i *articleFilesRepository) Update(id uint, articleFiles *entity.ArticleFi
func (_i *articleFilesRepository) Delete(id uint) error { func (_i *articleFilesRepository) Delete(id uint) error {
return _i.DB.DB.Delete(&entity.ArticleFiles{}, id).Error return _i.DB.DB.Delete(&entity.ArticleFiles{}, id).Error
} }

View File

@ -3,6 +3,7 @@ package request
import ( import (
"go-humas-be/app/database/entity" "go-humas-be/app/database/entity"
"go-humas-be/utils/paginator" "go-humas-be/utils/paginator"
"strconv"
"time" "time"
) )
@ -11,40 +12,25 @@ type ArticleFilesGeneric interface {
} }
type ArticleFilesQueryRequest struct { type ArticleFilesQueryRequest struct {
ArticleId int `json:"article_id" validate:"required"` ArticleId *int `json:"articleId"`
FilePath string `json:"file_path" validate:"required"` FileName *string `json:"fileName"`
FileUrl string `json:"file_url" validate:"required"` StatusId *int `json:"statusId"`
FileName string `json:"file_name" validate:"required"` IsPublish *bool `json:"isPublish"`
FileThumbnail string `json:"file_thumbnail" validate:"required"` Pagination *paginator.Pagination `json:"pagination"`
FileAlt string `json:"file_alt" validate:"required"`
WidthPixel string `json:"width_pixel" validate:"required"`
HeightPixel string `json:"height_pixel" validate:"required"`
Size string `json:"size" 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"`
} }
type ArticleFilesCreateRequest struct { type ArticleFilesCreateRequest struct {
ArticleId uint `json:"article_id" validate:"required"` ArticleId uint `json:"articleId" validate:"required"`
FilePath string `json:"file_path" validate:"required"` FilePath string `json:"filePath" validate:"required"`
FileUrl string `json:"file_url" validate:"required"` FileUrl string `json:"fileUrl" validate:"required"`
FileName string `json:"file_name" validate:"required"` FileName string `json:"fileName" validate:"required"`
FileThumbnail string `json:"file_thumbnail" validate:"required"` FileThumbnail string `json:"fileThumbnail" validate:"required"`
FileAlt string `json:"file_alt" validate:"required"` FileAlt string `json:"fileAlt" validate:"required"`
WidthPixel string `json:"width_pixel" validate:"required"` WidthPixel string `json:"widthPixel" validate:"required"`
HeightPixel string `json:"height_pixel" validate:"required"` HeightPixel string `json:"heightPixel" validate:"required"`
Size string `json:"size" validate:"required"` Size string `json:"size" validate:"required"`
DownloadCount int `json:"download_count" validate:"required"` DownloadCount int `json:"downloadCount" validate:"required"`
CreatedById int `json:"created_by_id" validate:"required"` StatusId int `json:"statusId" 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"`
} }
func (req ArticleFilesCreateRequest) ToEntity() *entity.ArticleFiles { func (req ArticleFilesCreateRequest) ToEntity() *entity.ArticleFiles {
@ -59,33 +45,27 @@ func (req ArticleFilesCreateRequest) ToEntity() *entity.ArticleFiles {
HeightPixel: req.HeightPixel, HeightPixel: req.HeightPixel,
Size: req.Size, Size: req.Size,
DownloadCount: req.DownloadCount, DownloadCount: req.DownloadCount,
CreatedById: req.CreatedById,
StatusId: req.StatusId, StatusId: req.StatusId,
IsPublish: req.IsPublish, IsPublish: false,
PublishedAt: req.PublishedAt,
IsActive: req.IsActive,
} }
} }
type ArticleFilesUpdateRequest struct { type ArticleFilesUpdateRequest struct {
ID uint `json:"id" validate:"required"` ID uint `json:"id" validate:"required"`
ArticleId uint `json:"article_id" validate:"required"` ArticleId uint `json:"articleId" validate:"required"`
FilePath string `json:"file_path" validate:"required"` FilePath string `json:"filePath" validate:"required"`
FileUrl string `json:"file_url" validate:"required"` FileUrl string `json:"fileUrl" validate:"required"`
FileName string `json:"file_name" validate:"required"` FileName string `json:"fileName" validate:"required"`
FileThumbnail string `json:"file_thumbnail" validate:"required"` FileThumbnail string `json:"fileThumbnail" validate:"required"`
FileAlt string `json:"file_alt" validate:"required"` FileAlt string `json:"fileAlt" validate:"required"`
WidthPixel string `json:"width_pixel" validate:"required"` WidthPixel string `json:"widthPixel" validate:"required"`
HeightPixel string `json:"height_pixel" validate:"required"` HeightPixel string `json:"heightPixel" validate:"required"`
Size string `json:"size" validate:"required"` Size string `json:"size" validate:"required"`
DownloadCount int `json:"download_count" validate:"required"` DownloadCount int `json:"downloadCount" validate:"required"`
CreatedById int `json:"created_by_id" validate:"required"` CreatedById int `json:"createdById" validate:"required"`
StatusId int `json:"status_id" validate:"required"` StatusId int `json:"statusId" validate:"required"`
IsPublish bool `json:"is_publish" validate:"required"` IsPublish bool `json:"isPublish" validate:"required"`
PublishedAt time.Time `json:"published_at" validate:"required"` PublishedAt time.Time `json:"publishedAt" validate:"required"`
IsActive bool `json:"is_active" validate:"required"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
} }
func (req ArticleFilesUpdateRequest) ToEntity() *entity.ArticleFiles { func (req ArticleFilesUpdateRequest) ToEntity() *entity.ArticleFiles {
@ -105,8 +85,41 @@ func (req ArticleFilesUpdateRequest) ToEntity() *entity.ArticleFiles {
StatusId: req.StatusId, StatusId: req.StatusId,
IsPublish: req.IsPublish, IsPublish: req.IsPublish,
PublishedAt: req.PublishedAt, PublishedAt: req.PublishedAt,
IsActive: req.IsActive, UpdatedAt: time.Now(),
CreatedAt: req.CreatedAt,
UpdatedAt: req.UpdatedAt,
} }
} }
type ArticleFilesQueryRequestContext struct {
ArticleId string `json:"articleId"`
FileName string `json:"fileName"`
StatusId string `json:"statusId"`
IsPublish string `json:"isPublish"`
}
func (req ArticleFilesQueryRequestContext) ToParamRequest() ArticleFilesQueryRequest {
var request ArticleFilesQueryRequest
if articleIdStr := req.ArticleId; articleIdStr != "" {
articleId, err := strconv.Atoi(articleIdStr)
if err == nil {
request.ArticleId = &articleId
}
}
if fileName := req.FileName; fileName != "" {
request.FileName = &fileName
}
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
}

View File

@ -138,7 +138,13 @@ func (_i *articleFilesService) Update(id uint, req request.ArticleFilesUpdateReq
} }
func (_i *articleFilesService) Delete(id uint) error { func (_i *articleFilesService) Delete(id uint) error {
return _i.Repo.Delete(id) result, err := _i.Repo.FindOne(id)
if err != nil {
return err
}
result.IsActive = false
return _i.Repo.Update(id, result)
} }
func (_i *articleFilesService) Viewer(c *fiber.Ctx, id uint) (err error) { func (_i *articleFilesService) Viewer(c *fiber.Ctx, id uint) (err error) {

View File

@ -36,10 +36,9 @@ func NewArticlesController(articlesService service.ArticlesService) ArticlesCont
// @Security Bearer // @Security Bearer
// @Param req query request.ArticlesQueryRequest false "query parameters" // @Param req query request.ArticlesQueryRequest false "query parameters"
// @Success 200 {object} response.Response // @Success 200 {object} response.Response
// @Failure 401 {object} response.Response // @Failure 400 {object} response.BadRequestError
// @Failure 404 {object} response.Response // @Failure 401 {object} response.UnauthorizedError
// @Failure 422 {object} response.Response // @Failure 500 {object} response.InternalServerError
// @Failure 500 {object} response.Response
// @Router /articles [get] // @Router /articles [get]
func (_i *articlesController) All(c *fiber.Ctx) error { func (_i *articlesController) All(c *fiber.Ctx) error {
paginate, err := paginator.Paginate(c) paginate, err := paginator.Paginate(c)
@ -47,7 +46,15 @@ func (_i *articlesController) All(c *fiber.Ctx) error {
return err return err
} }
var req request.ArticlesQueryRequest reqContext := request.ArticlesQueryRequestContext{
Title: c.Query("title"),
Description: c.Query("description"),
Tags: c.Query("tags"),
TypeId: c.Query("typeId"),
StatusId: c.Query("statusId"),
IsPublish: c.Query("isPublish"),
}
req := reqContext.ToParamRequest()
req.Pagination = paginate req.Pagination = paginate
articlesData, paging, err := _i.articlesService.All(req) articlesData, paging, err := _i.articlesService.All(req)
@ -70,10 +77,9 @@ func (_i *articlesController) All(c *fiber.Ctx) error {
// @Security Bearer // @Security Bearer
// @Param id path int true "Articles ID" // @Param id path int true "Articles ID"
// @Success 200 {object} response.Response // @Success 200 {object} response.Response
// @Failure 401 {object} response.Response // @Failure 400 {object} response.BadRequestError
// @Failure 404 {object} response.Response // @Failure 401 {object} response.UnauthorizedError
// @Failure 422 {object} response.Response // @Failure 500 {object} response.InternalServerError
// @Failure 500 {object} response.Response
// @Router /articles/{id} [get] // @Router /articles/{id} [get]
func (_i *articlesController) Show(c *fiber.Ctx) error { func (_i *articlesController) Show(c *fiber.Ctx) error {
id, err := strconv.ParseUint(c.Params("id"), 10, 0) id, err := strconv.ParseUint(c.Params("id"), 10, 0)
@ -100,10 +106,9 @@ func (_i *articlesController) Show(c *fiber.Ctx) error {
// @Security Bearer // @Security Bearer
// @Param payload body request.ArticlesCreateRequest true "Required payload" // @Param payload body request.ArticlesCreateRequest true "Required payload"
// @Success 200 {object} response.Response // @Success 200 {object} response.Response
// @Failure 401 {object} response.Response // @Failure 400 {object} response.BadRequestError
// @Failure 404 {object} response.Response // @Failure 401 {object} response.UnauthorizedError
// @Failure 422 {object} response.Response // @Failure 500 {object} response.InternalServerError
// @Failure 500 {object} response.Response
// @Router /articles [post] // @Router /articles [post]
func (_i *articlesController) Save(c *fiber.Ctx) error { func (_i *articlesController) Save(c *fiber.Ctx) error {
req := new(request.ArticlesCreateRequest) req := new(request.ArticlesCreateRequest)
@ -130,10 +135,9 @@ func (_i *articlesController) Save(c *fiber.Ctx) error {
// @Param payload body request.ArticlesUpdateRequest true "Required payload" // @Param payload body request.ArticlesUpdateRequest true "Required payload"
// @Param id path int true "Articles ID" // @Param id path int true "Articles ID"
// @Success 200 {object} response.Response // @Success 200 {object} response.Response
// @Failure 401 {object} response.Response // @Failure 400 {object} response.BadRequestError
// @Failure 404 {object} response.Response // @Failure 401 {object} response.UnauthorizedError
// @Failure 422 {object} response.Response // @Failure 500 {object} response.InternalServerError
// @Failure 500 {object} response.Response
// @Router /articles/{id} [put] // @Router /articles/{id} [put]
func (_i *articlesController) Update(c *fiber.Ctx) error { func (_i *articlesController) Update(c *fiber.Ctx) error {
id, err := strconv.ParseUint(c.Params("id"), 10, 0) id, err := strconv.ParseUint(c.Params("id"), 10, 0)
@ -164,10 +168,9 @@ func (_i *articlesController) Update(c *fiber.Ctx) error {
// @Security Bearer // @Security Bearer
// @Param id path int true "Articles ID" // @Param id path int true "Articles ID"
// @Success 200 {object} response.Response // @Success 200 {object} response.Response
// @Failure 401 {object} response.Response // @Failure 400 {object} response.BadRequestError
// @Failure 404 {object} response.Response // @Failure 401 {object} response.UnauthorizedError
// @Failure 422 {object} response.Response // @Failure 500 {object} response.InternalServerError
// @Failure 500 {object} response.Response
// @Router /articles/{id} [delete] // @Router /articles/{id} [delete]
func (_i *articlesController) Delete(c *fiber.Ctx) error { func (_i *articlesController) Delete(c *fiber.Ctx) error {
id, err := strconv.ParseUint(c.Params("id"), 10, 0) id, err := strconv.ParseUint(c.Params("id"), 10, 0)

View File

@ -45,9 +45,6 @@ func (_i *articlesRepository) GetAll(req request.ArticlesQueryRequest) (articles
description := strings.ToLower(*req.Description) description := strings.ToLower(*req.Description)
query = query.Where("LOWER(description) LIKE ?", "%"+strings.ToLower(description)+"%") query = query.Where("LOWER(description) LIKE ?", "%"+strings.ToLower(description)+"%")
} }
if req.TypeId != nil {
query = query.Where("type_id = ?", req.TypeId)
}
if req.Tags != nil && *req.Tags != "" { if req.Tags != nil && *req.Tags != "" {
tags := strings.ToLower(*req.Tags) tags := strings.ToLower(*req.Tags)
query = query.Where("LOWER(tags) LIKE ?", "%"+strings.ToLower(tags)+"%") query = query.Where("LOWER(tags) LIKE ?", "%"+strings.ToLower(tags)+"%")
@ -61,6 +58,9 @@ func (_i *articlesRepository) GetAll(req request.ArticlesQueryRequest) (articles
if req.StatusId != nil { if req.StatusId != nil {
query = query.Where("status_id = ?", req.StatusId) query = query.Where("status_id = ?", req.StatusId)
} }
if req.CreatedById != nil {
query = query.Where("created_by_id = ?", req.CreatedById)
}
query.Count(&count) query.Count(&count)
req.Pagination.Count = count req.Pagination.Count = count

View File

@ -16,26 +16,19 @@ type ArticlesQueryRequest struct {
Description *string `json:"description"` Description *string `json:"description"`
TypeId *int `json:"typeId"` TypeId *int `json:"typeId"`
Tags *string `json:"tags"` Tags *string `json:"tags"`
CreatedById *int `json:"createdById"`
StatusId *int `json:"statusId"` StatusId *int `json:"statusId"`
IsPublish *bool `json:"isPublish"` IsPublish *bool `json:"isPublish"`
Pagination *paginator.Pagination `json:"pagination"` Pagination *paginator.Pagination `json:"pagination"`
} }
type ArticlesCreateRequest struct { type ArticlesCreateRequest struct {
Title string `json:"title" validate:"required"` Title string `json:"title" validate:"required"`
Slug string `json:"slug" validate:"required"` Slug string `json:"slug" validate:"required"`
Description string `json:"description" validate:"required"` Description string `json:"description" validate:"required"`
HtmlDescription string `json:"htmlDescription" validate:"required"` HtmlDescription string `json:"htmlDescription" validate:"required"`
TypeId int `json:"typeId" validate:"required"` TypeId int `json:"typeId" validate:"required"`
Tags string `json:"tags" validate:"required"` Tags string `json:"tags" validate:"required"`
ThumbnailPath *string `json:"thumbnailPath"`
ThumbnailUrl *string `json:"thumbnailUrl"`
PageUrl *string `json:"pageUrl"`
CreatedById *int `json:"createdById"`
StatusId *int `json:"status_id"`
IsPublish *bool `json:"is_publish"`
PublishedAt *time.Time `json:"published_at"`
IsActive *bool `json:"is_active"`
} }
func (req ArticlesCreateRequest) ToEntity() *entity.Articles { func (req ArticlesCreateRequest) ToEntity() *entity.Articles {
@ -46,14 +39,6 @@ func (req ArticlesCreateRequest) ToEntity() *entity.Articles {
HtmlDescription: req.HtmlDescription, HtmlDescription: req.HtmlDescription,
TypeId: req.TypeId, TypeId: req.TypeId,
Tags: req.Tags, Tags: req.Tags,
ThumbnailPath: req.ThumbnailPath,
ThumbnailUrl: req.ThumbnailUrl,
PageUrl: req.PageUrl,
CreatedById: req.CreatedById,
StatusId: req.StatusId,
IsPublish: req.IsPublish,
PublishedAt: req.PublishedAt,
IsActive: req.IsActive,
} }
} }
@ -85,6 +70,7 @@ type ArticlesQueryRequestContext struct {
Description string `json:"description"` Description string `json:"description"`
TypeId string `json:"typeId"` TypeId string `json:"typeId"`
Tags string `json:"tags"` Tags string `json:"tags"`
CreatedById string `json:"createdById"`
IsPublish string `json:"isPublish"` IsPublish string `json:"isPublish"`
StatusId string `json:"statusId"` StatusId string `json:"statusId"`
} }
@ -119,6 +105,12 @@ func (req ArticlesQueryRequestContext) ToParamRequest() ArticlesQueryRequest {
request.StatusId = &statusId request.StatusId = &statusId
} }
} }
if createdByIdStr := req.CreatedById; createdByIdStr != "" {
createdById, err := strconv.Atoi(createdByIdStr)
if err == nil {
request.CreatedById = &createdById
}
}
return request return request
} }

View File

@ -29,16 +29,16 @@ func NewPpidDatasController(ppidDatasService service.PpidDatasService) PpidDatas
} }
} }
// All get all PpidDatas // All PpidDatas
// @Summary Get all PpidDatas // @Summary Get all PpidDatas
// @Description API for getting all PpidDatas // @Description API for getting all PpidDatas
// @Tags Task // @Tags Task
// @Security Bearer // @Security Bearer
// @Param req query request.PpidDatasQueryRequestContext false "query parameters"
// @Success 200 {object} response.Response // @Success 200 {object} response.Response
// @Failure 401 {object} response.Response // @Failure 400 {object} response.BadRequestError
// @Failure 404 {object} response.Response // @Failure 401 {object} response.UnauthorizedError
// @Failure 422 {object} response.Response // @Failure 500 {object} response.InternalServerError
// @Failure 500 {object} response.Response
// @Router /ppid-datas [get] // @Router /ppid-datas [get]
func (_i *ppidDatasController) All(c *fiber.Ctx) error { func (_i *ppidDatasController) All(c *fiber.Ctx) error {
paginate, err := paginator.Paginate(c) paginate, err := paginator.Paginate(c)
@ -46,7 +46,16 @@ func (_i *ppidDatasController) All(c *fiber.Ctx) error {
return err return err
} }
var req request.PpidDatasQueryRequest reqContext := request.PpidDatasQueryRequestContext{
Title: c.Query("title"),
Description: c.Query("description"),
CategoryId: c.Query("categoryId"),
CreatedById: c.Query("createdById"),
StatusId: c.Query("statusId"),
IsPublish: c.Query("isPublish"),
}
req := reqContext.ToParamRequest()
req.Pagination = paginate req.Pagination = paginate
ppidDatasData, paging, err := _i.ppidDatasService.All(req) ppidDatasData, paging, err := _i.ppidDatasService.All(req)
@ -55,23 +64,23 @@ func (_i *ppidDatasController) All(c *fiber.Ctx) error {
} }
return utilRes.Resp(c, utilRes.Response{ return utilRes.Resp(c, utilRes.Response{
Success: true,
Messages: utilRes.Messages{"PpidDatas list successfully retrieved"}, Messages: utilRes.Messages{"PpidDatas list successfully retrieved"},
Data: ppidDatasData, Data: ppidDatasData,
Meta: paging, Meta: paging,
}) })
} }
// Show get one PpidDatas // Show PpidDatas
// @Summary Get one PpidDatas // @Summary Get one PpidDatas
// @Description API for getting one PpidDatas // @Description API for getting one PpidDatas
// @Tags Task // @Tags Task
// @Security Bearer // @Security Bearer
// @Param id path int true "PpidDatas ID" // @Param id path int true "PpidDatas ID"
// @Success 200 {object} response.Response // @Success 200 {object} response.Response
// @Failure 401 {object} response.Response // @Failure 400 {object} response.BadRequestError
// @Failure 404 {object} response.Response // @Failure 401 {object} response.UnauthorizedError
// @Failure 422 {object} response.Response // @Failure 500 {object} response.InternalServerError
// @Failure 500 {object} response.Response
// @Router /ppid-datas/{id} [get] // @Router /ppid-datas/{id} [get]
func (_i *ppidDatasController) Show(c *fiber.Ctx) error { func (_i *ppidDatasController) Show(c *fiber.Ctx) error {
id, err := strconv.ParseUint(c.Params("id"), 10, 0) id, err := strconv.ParseUint(c.Params("id"), 10, 0)
@ -85,22 +94,22 @@ func (_i *ppidDatasController) Show(c *fiber.Ctx) error {
} }
return utilRes.Resp(c, utilRes.Response{ return utilRes.Resp(c, utilRes.Response{
Success: true,
Messages: utilRes.Messages{"PpidDatas successfully retrieved"}, Messages: utilRes.Messages{"PpidDatas successfully retrieved"},
Data: ppidDatasData, Data: ppidDatasData,
}) })
} }
// Save create PpidDatas // Save PpidDatas
// @Summary Create PpidDatas // @Summary Create PpidDatas
// @Description API for create PpidDatas // @Description API for create PpidDatas
// @Tags Task // @Tags Task
// @Security Bearer // @Security Bearer
// @Body request.PpidDatasCreateRequest // @Param payload body request.PpidDatasCreateRequest true "Required payload"
// @Success 200 {object} response.Response // @Success 200 {object} response.Response
// @Failure 401 {object} response.Response // @Failure 400 {object} response.BadRequestError
// @Failure 404 {object} response.Response // @Failure 401 {object} response.UnauthorizedError
// @Failure 422 {object} response.Response // @Failure 500 {object} response.InternalServerError
// @Failure 500 {object} response.Response
// @Router /ppid-datas [post] // @Router /ppid-datas [post]
func (_i *ppidDatasController) Save(c *fiber.Ctx) error { func (_i *ppidDatasController) Save(c *fiber.Ctx) error {
req := new(request.PpidDatasCreateRequest) req := new(request.PpidDatasCreateRequest)
@ -114,22 +123,22 @@ func (_i *ppidDatasController) Save(c *fiber.Ctx) error {
} }
return utilRes.Resp(c, utilRes.Response{ return utilRes.Resp(c, utilRes.Response{
Success: true,
Messages: utilRes.Messages{"PpidDatas successfully created"}, Messages: utilRes.Messages{"PpidDatas successfully created"},
}) })
} }
// Update update PpidDatas // Update PpidDatas
// @Summary update PpidDatas // @Summary update PpidDatas
// @Description API for update PpidDatas // @Description API for update PpidDatas
// @Tags Task // @Tags Task
// @Security Bearer // @Security Bearer
// @Body request.PpidDatasUpdateRequest // @Param payload body request.PpidDatasCreateRequest true "Required payload"
// @Param id path int true "PpidDatas ID" // @Param id path int true "PpidDatas ID"
// @Success 200 {object} response.Response // @Success 200 {object} response.Response
// @Failure 401 {object} response.Response // @Failure 400 {object} response.BadRequestError
// @Failure 404 {object} response.Response // @Failure 401 {object} response.UnauthorizedError
// @Failure 422 {object} response.Response // @Failure 500 {object} response.InternalServerError
// @Failure 500 {object} response.Response
// @Router /ppid-datas/{id} [put] // @Router /ppid-datas/{id} [put]
func (_i *ppidDatasController) Update(c *fiber.Ctx) error { func (_i *ppidDatasController) Update(c *fiber.Ctx) error {
id, err := strconv.ParseUint(c.Params("id"), 10, 0) id, err := strconv.ParseUint(c.Params("id"), 10, 0)
@ -148,21 +157,21 @@ func (_i *ppidDatasController) Update(c *fiber.Ctx) error {
} }
return utilRes.Resp(c, utilRes.Response{ return utilRes.Resp(c, utilRes.Response{
Success: true,
Messages: utilRes.Messages{"PpidDatas successfully updated"}, Messages: utilRes.Messages{"PpidDatas successfully updated"},
}) })
} }
// Delete delete PpidDatas // Delete PpidDatas
// @Summary delete PpidDatas // @Summary delete PpidDatas
// @Description API for delete PpidDatas // @Description API for delete PpidDatas
// @Tags Task // @Tags Task
// @Security Bearer // @Security Bearer
// @Param id path int true "PpidDatas ID" // @Param id path int true "PpidDatas ID"
// @Success 200 {object} response.Response // @Success 200 {object} response.Response
// @Failure 401 {object} response.Response // @Failure 400 {object} response.BadRequestError
// @Failure 404 {object} response.Response // @Failure 401 {object} response.UnauthorizedError
// @Failure 422 {object} response.Response // @Failure 500 {object} response.InternalServerError
// @Failure 500 {object} response.Response
// @Router /ppid-datas/{id} [delete] // @Router /ppid-datas/{id} [delete]
func (_i *ppidDatasController) Delete(c *fiber.Ctx) error { func (_i *ppidDatasController) Delete(c *fiber.Ctx) error {
id, err := strconv.ParseUint(c.Params("id"), 10, 0) id, err := strconv.ParseUint(c.Params("id"), 10, 0)
@ -176,6 +185,7 @@ func (_i *ppidDatasController) Delete(c *fiber.Ctx) error {
} }
return utilRes.Resp(c, utilRes.Response{ return utilRes.Resp(c, utilRes.Response{
Success: true,
Messages: utilRes.Messages{"PpidDatas successfully deleted"}, Messages: utilRes.Messages{"PpidDatas successfully deleted"},
}) })
} }

View File

@ -3,6 +3,7 @@ package request
import ( import (
"go-humas-be/app/database/entity" "go-humas-be/app/database/entity"
"go-humas-be/utils/paginator" "go-humas-be/utils/paginator"
"strconv"
"time" "time"
) )
@ -11,26 +12,21 @@ type PpidDatasGeneric interface {
} }
type PpidDatasQueryRequest struct { type PpidDatasQueryRequest struct {
Title string `json:"title" validate:"required"` Title *string `json:"title"`
Description string `json:"description" validate:"required"` Description *string `json:"description"`
CategoryId int `json:"category_id" validate:"required"` CategoryId *int `json:"categoryId"`
CreatedById int `json:"created_by_id" validate:"required"` CreatedById *int `json:"createdById"`
StatusId int `json:"status_id" validate:"required"` StatusId *int `json:"statusId"`
IsPublish bool `json:"is_publish" validate:"required"` IsPublish *bool `json:"isPublish"`
PublishedAt time.Time `json:"published_at" validate:"required"`
IsActive bool `json:"is_active" validate:"required"`
Pagination *paginator.Pagination `json:"pagination"` Pagination *paginator.Pagination `json:"pagination"`
} }
type PpidDatasCreateRequest struct { type PpidDatasCreateRequest struct {
Title string `json:"title" validate:"required"` Title string `json:"title" validate:"required"`
Description string `json:"description" validate:"required"` Description string `json:"description" validate:"required"`
CategoryId int `json:"category_id" validate:"required"` CategoryId int `json:"categoryId" validate:"required"`
CreatedById int `json:"created_by_id" validate:"required"` CreatedById int `json:"createdById" validate:"required"`
StatusId int `json:"status_id" validate:"required"` StatusId int `json:"statusId" validate:"required"`
IsPublish bool `json:"is_publish" validate:"required"`
PublishedAt time.Time `json:"published_at" validate:"required"`
IsActive bool `json:"is_active" validate:"required"`
} }
func (req PpidDatasCreateRequest) ToEntity() *entity.PpidDatas { func (req PpidDatasCreateRequest) ToEntity() *entity.PpidDatas {
@ -40,24 +36,18 @@ func (req PpidDatasCreateRequest) ToEntity() *entity.PpidDatas {
CategoryId: req.CategoryId, CategoryId: req.CategoryId,
CreatedById: req.CreatedById, CreatedById: req.CreatedById,
StatusId: req.StatusId, StatusId: req.StatusId,
IsPublish: req.IsPublish,
PublishedAt: req.PublishedAt,
IsActive: req.IsActive,
} }
} }
type PpidDatasUpdateRequest struct { type PpidDatasUpdateRequest struct {
ID uint `json:"id" validate:"required"` ID uint `json:"id" validate:"required"`
Title string `json:"title" validate:"required"` Title string `json:"title" validate:"required"`
Description string `json:"description" validate:"required"` Description string `json:"description" validate:"required"`
CategoryId int `json:"category_id" validate:"required"` CategoryId int `json:"category_id" validate:"required"`
CreatedById int `json:"created_by_id" validate:"required"` CreatedById int `json:"created_by_id" validate:"required"`
StatusId int `json:"status_id" validate:"required"` StatusId int `json:"status_id" validate:"required"`
IsPublish bool `json:"is_publish" validate:"required"` IsPublish *bool `json:"is_publish" validate:"required"`
PublishedAt time.Time `json:"published_at" 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"`
} }
func (req PpidDatasUpdateRequest) ToEntity() *entity.PpidDatas { func (req PpidDatasUpdateRequest) ToEntity() *entity.PpidDatas {
@ -70,8 +60,52 @@ func (req PpidDatasUpdateRequest) ToEntity() *entity.PpidDatas {
StatusId: req.StatusId, StatusId: req.StatusId,
IsPublish: req.IsPublish, IsPublish: req.IsPublish,
PublishedAt: req.PublishedAt, PublishedAt: req.PublishedAt,
IsActive: req.IsActive, UpdatedAt: time.Now(),
CreatedAt: req.CreatedAt,
UpdatedAt: req.UpdatedAt,
} }
} }
type PpidDatasQueryRequestContext struct {
Title string `json:"title"`
Description string `json:"description"`
CategoryId string `json:"categoryId"`
CreatedById string `json:"createdById"`
StatusId string `json:"statusId"`
IsPublish string `json:"isPublish"`
}
func (req PpidDatasQueryRequestContext) ToParamRequest() PpidDatasQueryRequest {
var request PpidDatasQueryRequest
if title := req.Title; title != "" {
request.Title = &title
}
if description := req.Description; description != "" {
request.Description = &description
}
if categoryIdStr := req.CategoryId; categoryIdStr != "" {
categoryId, err := strconv.Atoi(categoryIdStr)
if err == nil {
request.CategoryId = &categoryId
}
}
if isPublishStr := req.IsPublish; isPublishStr != "" {
isPublish, err := strconv.ParseBool(isPublishStr)
if err == nil {
request.IsPublish = &isPublish
}
}
if statusIdStr := req.StatusId; statusIdStr != "" {
statusId, err := strconv.Atoi(statusIdStr)
if err == nil {
request.StatusId = &statusId
}
}
if createdByIdStr := req.CreatedById; createdByIdStr != "" {
createdById, err := strconv.Atoi(createdByIdStr)
if err == nil {
request.CreatedById = &createdById
}
}
return request
}

View File

@ -36,10 +36,9 @@ func NewUserLevelsController(userLevelsService service.UserLevelsService) UserLe
// @Security Bearer // @Security Bearer
// @Param req query request.UserLevelsQueryRequest false "query parameters" // @Param req query request.UserLevelsQueryRequest false "query parameters"
// @Success 200 {object} response.Response // @Success 200 {object} response.Response
// @Failure 401 {object} response.Response // @Failure 400 {object} response.BadRequestError
// @Failure 404 {object} response.Response // @Failure 401 {object} response.UnauthorizedError
// @Failure 422 {object} response.Response // @Failure 500 {object} response.InternalServerError
// @Failure 500 {object} response.Response
// @Router /user-levels [get] // @Router /user-levels [get]
func (_i *userLevelsController) All(c *fiber.Ctx) error { func (_i *userLevelsController) All(c *fiber.Ctx) error {
paginate, err := paginator.Paginate(c) paginate, err := paginator.Paginate(c)
@ -76,10 +75,9 @@ func (_i *userLevelsController) All(c *fiber.Ctx) error {
// @Security Bearer // @Security Bearer
// @Param id path int true "UserLevels ID" // @Param id path int true "UserLevels ID"
// @Success 200 {object} response.Response // @Success 200 {object} response.Response
// @Failure 401 {object} response.Response // @Failure 400 {object} response.BadRequestError
// @Failure 404 {object} response.Response // @Failure 401 {object} response.UnauthorizedError
// @Failure 422 {object} response.Response // @Failure 500 {object} response.InternalServerError
// @Failure 500 {object} response.Response
// @Router /user-levels/{id} [get] // @Router /user-levels/{id} [get]
func (_i *userLevelsController) Show(c *fiber.Ctx) error { func (_i *userLevelsController) Show(c *fiber.Ctx) error {
id, err := strconv.ParseUint(c.Params("id"), 10, 0) id, err := strconv.ParseUint(c.Params("id"), 10, 0)
@ -105,10 +103,9 @@ func (_i *userLevelsController) Show(c *fiber.Ctx) error {
// @Security Bearer // @Security Bearer
// @Param payload body request.UserLevelsCreateRequest true "Required payload" // @Param payload body request.UserLevelsCreateRequest true "Required payload"
// @Success 200 {object} response.Response // @Success 200 {object} response.Response
// @Failure 401 {object} response.Response // @Failure 400 {object} response.BadRequestError
// @Failure 404 {object} response.Response // @Failure 401 {object} response.UnauthorizedError
// @Failure 422 {object} response.Response // @Failure 500 {object} response.InternalServerError
// @Failure 500 {object} response.Response
// @Router /user-levels [post] // @Router /user-levels [post]
func (_i *userLevelsController) Save(c *fiber.Ctx) error { func (_i *userLevelsController) Save(c *fiber.Ctx) error {
req := new(request.UserLevelsCreateRequest) req := new(request.UserLevelsCreateRequest)
@ -135,10 +132,9 @@ func (_i *userLevelsController) Save(c *fiber.Ctx) error {
// @Param payload body request.UserLevelsUpdateRequest true "Required payload" // @Param payload body request.UserLevelsUpdateRequest true "Required payload"
// @Param id path int true "UserLevels ID" // @Param id path int true "UserLevels ID"
// @Success 200 {object} response.Response // @Success 200 {object} response.Response
// @Failure 401 {object} response.Response // @Failure 400 {object} response.BadRequestError
// @Failure 404 {object} response.Response // @Failure 401 {object} response.UnauthorizedError
// @Failure 422 {object} response.Response // @Failure 500 {object} response.InternalServerError
// @Failure 500 {object} response.Response
// @Router /user-levels/{id} [put] // @Router /user-levels/{id} [put]
func (_i *userLevelsController) Update(c *fiber.Ctx) error { func (_i *userLevelsController) Update(c *fiber.Ctx) error {
id, err := strconv.ParseUint(c.Params("id"), 10, 0) id, err := strconv.ParseUint(c.Params("id"), 10, 0)

View File

@ -25,7 +25,7 @@ type UserLevelsCreateRequest struct {
LevelNumber int `json:"levelNumber" validate:"required"` LevelNumber int `json:"levelNumber" validate:"required"`
ParentLevelId int `json:"parentLevelId" validate:"required"` ParentLevelId int `json:"parentLevelId" validate:"required"`
ProvinceId int `json:"provinceId" validate:"required"` ProvinceId int `json:"provinceId" validate:"required"`
IsActive *bool `json:"is_active"` IsActive *bool `json:"isActive"`
} }
func (req UserLevelsCreateRequest) ToEntity() *entity.UserLevels { func (req UserLevelsCreateRequest) ToEntity() *entity.UserLevels {

View File

@ -29,16 +29,16 @@ func NewUserRoleAccessesController(userRoleAccessesService service.UserRoleAcces
} }
} }
// All get all UserRoleAccesses // All UserRoleAccesses
// @Summary Get all UserRoleAccesses // @Summary Get all UserRoleAccesses
// @Description API for getting all UserRoleAccesses // @Description API for getting all UserRoleAccesses
// @Tags Task // @Tags UserRoleAccesses
// @Security Bearer // @Security Bearer
// @Param req query request.UserRoleAccessesQueryRequest false "query parameters"
// @Success 200 {object} response.Response // @Success 200 {object} response.Response
// @Failure 401 {object} response.Response // @Failure 400 {object} response.BadRequestError
// @Failure 404 {object} response.Response // @Failure 401 {object} response.UnauthorizedError
// @Failure 422 {object} response.Response // @Failure 500 {object} response.InternalServerError
// @Failure 500 {object} response.Response
// @Router /user-role-accesses [get] // @Router /user-role-accesses [get]
func (_i *userRoleAccessesController) All(c *fiber.Ctx) error { func (_i *userRoleAccessesController) All(c *fiber.Ctx) error {
paginate, err := paginator.Paginate(c) paginate, err := paginator.Paginate(c)
@ -46,7 +46,11 @@ func (_i *userRoleAccessesController) All(c *fiber.Ctx) error {
return err return err
} }
var req request.UserRoleAccessesQueryRequest reqContext := request.UserRoleAccessesQueryRequestContext{
MenuId: c.Query("menuId"),
UserRoleId: c.Query("userRoleId"),
}
req := reqContext.ToParamRequest()
req.Pagination = paginate req.Pagination = paginate
userRoleAccessesData, paging, err := _i.userRoleAccessesService.All(req) userRoleAccessesData, paging, err := _i.userRoleAccessesService.All(req)
@ -55,23 +59,23 @@ func (_i *userRoleAccessesController) All(c *fiber.Ctx) error {
} }
return utilRes.Resp(c, utilRes.Response{ return utilRes.Resp(c, utilRes.Response{
Success: true,
Messages: utilRes.Messages{"UserRoleAccesses list successfully retrieved"}, Messages: utilRes.Messages{"UserRoleAccesses list successfully retrieved"},
Data: userRoleAccessesData, Data: userRoleAccessesData,
Meta: paging, Meta: paging,
}) })
} }
// Show get one UserRoleAccesses // Show UserRoleAccesses
// @Summary Get one UserRoleAccesses // @Summary Get one UserRoleAccesses
// @Description API for getting one UserRoleAccesses // @Description API for getting one UserRoleAccesses
// @Tags Task // @Tags UserRoleAccesses
// @Security Bearer // @Security Bearer
// @Param id path int true "UserRoleAccesses ID" // @Param id path int true "UserRoleAccesses ID"
// @Success 200 {object} response.Response // @Success 200 {object} response.Response
// @Failure 401 {object} response.Response // @Failure 400 {object} response.BadRequestError
// @Failure 404 {object} response.Response // @Failure 401 {object} response.UnauthorizedError
// @Failure 422 {object} response.Response // @Failure 500 {object} response.InternalServerError
// @Failure 500 {object} response.Response
// @Router /user-role-accesses/{id} [get] // @Router /user-role-accesses/{id} [get]
func (_i *userRoleAccessesController) Show(c *fiber.Ctx) error { func (_i *userRoleAccessesController) Show(c *fiber.Ctx) error {
id, err := strconv.ParseUint(c.Params("id"), 10, 0) id, err := strconv.ParseUint(c.Params("id"), 10, 0)
@ -85,22 +89,22 @@ func (_i *userRoleAccessesController) Show(c *fiber.Ctx) error {
} }
return utilRes.Resp(c, utilRes.Response{ return utilRes.Resp(c, utilRes.Response{
Success: true,
Messages: utilRes.Messages{"UserRoleAccesses successfully retrieved"}, Messages: utilRes.Messages{"UserRoleAccesses successfully retrieved"},
Data: userRoleAccessesData, Data: userRoleAccessesData,
}) })
} }
// Save create UserRoleAccesses // Save UserRoleAccesses
// @Summary Create UserRoleAccesses // @Summary Create UserRoleAccesses
// @Description API for create UserRoleAccesses // @Description API for create UserRoleAccesses
// @Tags Task // @Tags UserRoleAccesses
// @Security Bearer // @Security Bearer
// @Body request.UserRoleAccessesCreateRequest // @Param payload body request.UserRoleAccessesCreateRequest true "Required payload"
// @Success 200 {object} response.Response // @Success 200 {object} response.Response
// @Failure 401 {object} response.Response // @Failure 400 {object} response.BadRequestError
// @Failure 404 {object} response.Response // @Failure 401 {object} response.UnauthorizedError
// @Failure 422 {object} response.Response // @Failure 500 {object} response.InternalServerError
// @Failure 500 {object} response.Response
// @Router /user-role-accesses [post] // @Router /user-role-accesses [post]
func (_i *userRoleAccessesController) Save(c *fiber.Ctx) error { func (_i *userRoleAccessesController) Save(c *fiber.Ctx) error {
req := new(request.UserRoleAccessesCreateRequest) req := new(request.UserRoleAccessesCreateRequest)
@ -114,22 +118,23 @@ func (_i *userRoleAccessesController) Save(c *fiber.Ctx) error {
} }
return utilRes.Resp(c, utilRes.Response{ return utilRes.Resp(c, utilRes.Response{
Success: true,
Messages: utilRes.Messages{"UserRoleAccesses successfully created"}, Messages: utilRes.Messages{"UserRoleAccesses successfully created"},
}) })
} }
// Update update UserRoleAccesses // Update UserRoleAccesses
// @Summary update UserRoleAccesses // @Summary update UserRoleAccesses
// @Description API for update UserRoleAccesses // @Description API for update UserRoleAccesses
// @Tags Task // @Tags UserRoleAccesses
// @Security Bearer // @Security Bearer
// @Body request.UserRoleAccessesUpdateRequest // @Param payload body request.UserRoleAccessesUpdateRequest true "Required payload"
// @Param id path int true "UserRoleAccesses ID" // @Param id path int true "UserRoleAccesses ID"
// @Success 200 {object} response.Response // @Success 200 {object} response.Response
// @Failure 401 {object} response.Response // @Success 200 {object} response.Response
// @Failure 404 {object} response.Response // @Failure 400 {object} response.BadRequestError
// @Failure 422 {object} response.Response // @Failure 401 {object} response.UnauthorizedError
// @Failure 500 {object} response.Response // @Failure 500 {object} response.InternalServerError
// @Router /user-role-accesses/{id} [put] // @Router /user-role-accesses/{id} [put]
func (_i *userRoleAccessesController) Update(c *fiber.Ctx) error { func (_i *userRoleAccessesController) Update(c *fiber.Ctx) error {
id, err := strconv.ParseUint(c.Params("id"), 10, 0) id, err := strconv.ParseUint(c.Params("id"), 10, 0)
@ -148,21 +153,21 @@ func (_i *userRoleAccessesController) Update(c *fiber.Ctx) error {
} }
return utilRes.Resp(c, utilRes.Response{ return utilRes.Resp(c, utilRes.Response{
Success: true,
Messages: utilRes.Messages{"UserRoleAccesses successfully updated"}, Messages: utilRes.Messages{"UserRoleAccesses successfully updated"},
}) })
} }
// Delete delete UserRoleAccesses // Delete UserRoleAccesses
// @Summary delete UserRoleAccesses // @Summary delete UserRoleAccesses
// @Description API for delete UserRoleAccesses // @Description API for delete UserRoleAccesses
// @Tags Task // @Tags UserRoleAccesses
// @Security Bearer // @Security Bearer
// @Param id path int true "UserRoleAccesses ID" // @Param id path int true "UserRoleAccesses ID"
// @Success 200 {object} response.Response // @Success 200 {object} response.Response
// @Failure 401 {object} response.Response // @Failure 400 {object} response.BadRequestError
// @Failure 404 {object} response.Response // @Failure 401 {object} response.UnauthorizedError
// @Failure 422 {object} response.Response // @Failure 500 {object} response.InternalServerError
// @Failure 500 {object} response.Response
// @Router /user-role-accesses/{id} [delete] // @Router /user-role-accesses/{id} [delete]
func (_i *userRoleAccessesController) Delete(c *fiber.Ctx) error { func (_i *userRoleAccessesController) Delete(c *fiber.Ctx) error {
id, err := strconv.ParseUint(c.Params("id"), 10, 0) id, err := strconv.ParseUint(c.Params("id"), 10, 0)
@ -176,6 +181,7 @@ func (_i *userRoleAccessesController) Delete(c *fiber.Ctx) error {
} }
return utilRes.Resp(c, utilRes.Response{ return utilRes.Resp(c, utilRes.Response{
Success: true,
Messages: utilRes.Messages{"UserRoleAccesses successfully deleted"}, Messages: utilRes.Messages{"UserRoleAccesses successfully deleted"},
}) })
} }

View File

@ -8,19 +8,19 @@ import (
func UserRoleAccessesResponseMapper(userRoleAccessesReq *entity.UserRoleAccesses) (userRoleAccessesRes *res.UserRoleAccessesResponse) { func UserRoleAccessesResponseMapper(userRoleAccessesReq *entity.UserRoleAccesses) (userRoleAccessesRes *res.UserRoleAccessesResponse) {
if userRoleAccessesReq != nil { if userRoleAccessesReq != nil {
userRoleAccessesRes = &res.UserRoleAccessesResponse{ userRoleAccessesRes = &res.UserRoleAccessesResponse{
ID: userRoleAccessesReq.ID, ID: userRoleAccessesReq.ID,
UserRoleId: userRoleAccessesReq.UserRoleId, UserRoleId: userRoleAccessesReq.UserRoleId,
MenuId: userRoleAccessesReq.MenuId, MenuId: userRoleAccessesReq.MenuId,
IsViewEnabled: userRoleAccessesReq.IsViewEnabled, IsViewEnabled: userRoleAccessesReq.IsViewEnabled,
IsInsertEnabled: userRoleAccessesReq.IsInsertEnabled, IsInsertEnabled: userRoleAccessesReq.IsInsertEnabled,
IsUpdateEnabled: userRoleAccessesReq.IsUpdateEnabled, IsUpdateEnabled: userRoleAccessesReq.IsUpdateEnabled,
IsDeleteEnabled: userRoleAccessesReq.IsDeleteEnabled, IsDeleteEnabled: userRoleAccessesReq.IsDeleteEnabled,
IsApprovalEnabled: userRoleAccessesReq.IsApprovalEnabled, IsApprovalEnabled: userRoleAccessesReq.IsApprovalEnabled,
IsAdminEnabled: userRoleAccessesReq.IsAdminEnabled, IsAdminEnabled: userRoleAccessesReq.IsAdminEnabled,
IsActive: userRoleAccessesReq.IsActive, IsActive: userRoleAccessesReq.IsActive,
CreatedAt: userRoleAccessesReq.CreatedAt, CreatedAt: userRoleAccessesReq.CreatedAt,
UpdatedAt: userRoleAccessesReq.UpdatedAt, UpdatedAt: userRoleAccessesReq.UpdatedAt,
} }
} }
return userRoleAccessesRes return userRoleAccessesRes
} }

View File

@ -31,6 +31,14 @@ func (_i *userRoleAccessesRepository) GetAll(req request.UserRoleAccessesQueryRe
var count int64 var count int64
query := _i.DB.DB.Model(&entity.UserRoleAccesses{}) query := _i.DB.DB.Model(&entity.UserRoleAccesses{})
query = query.Where("is_active = ?", true)
if req.UserRoleId != nil {
query = query.Where("user_role_id = ?", req.UserRoleId)
}
if req.MenuId != nil {
query = query.Where("menu_id = ?", req.MenuId)
}
query.Count(&count) query.Count(&count)
req.Pagination.Count = count req.Pagination.Count = count
@ -66,4 +74,4 @@ func (_i *userRoleAccessesRepository) Update(id uint, userRoleAccesses *entity.U
func (_i *userRoleAccessesRepository) Delete(id uint) error { func (_i *userRoleAccessesRepository) Delete(id uint) error {
return _i.DB.DB.Delete(&entity.UserRoleAccesses{}, id).Error return _i.DB.DB.Delete(&entity.UserRoleAccesses{}, id).Error
} }

View File

@ -3,6 +3,7 @@ package request
import ( import (
"go-humas-be/app/database/entity" "go-humas-be/app/database/entity"
"go-humas-be/utils/paginator" "go-humas-be/utils/paginator"
"strconv"
"time" "time"
) )
@ -11,73 +12,84 @@ type UserRoleAccessesGeneric interface {
} }
type UserRoleAccessesQueryRequest struct { type UserRoleAccessesQueryRequest struct {
UserRoleId int `json:"user_role_id" validate:"required"` UserRoleId *int `json:"userRoleId" validate:"required"`
MenuId int `json:"menu_id" validate:"required"` MenuId *int `json:"menuId" validate:"required"`
IsViewEnabled bool `json:"is_view_enabled" validate:"required"` IsActive *bool `json:"isActive" validate:"required"`
IsInsertEnabled bool `json:"is_insert_enabled" validate:"required"` Pagination *paginator.Pagination `json:"pagination"`
IsUpdateEnabled bool `json:"is_update_enabled" validate:"required"`
IsDeleteEnabled bool `json:"is_delete_enabled" validate:"required"`
IsApprovalEnabled bool `json:"is_approval_enabled" validate:"required"`
IsAdminEnabled bool `json:"is_admin_enabled" validate:"required"`
IsActive bool `json:"is_active" validate:"required"`
Pagination *paginator.Pagination `json:"pagination"`
} }
type UserRoleAccessesCreateRequest struct { type UserRoleAccessesCreateRequest struct {
UserRoleId int `json:"user_role_id" validate:"required"` UserRoleId int `json:"userRoleId" validate:"required"`
MenuId int `json:"menu_id" validate:"required"` MenuId int `json:"menuId" validate:"required"`
IsViewEnabled bool `json:"is_view_enabled" validate:"required"` IsViewEnabled bool `json:"isViewEnabled" validate:"required"`
IsInsertEnabled bool `json:"is_insert_enabled" validate:"required"` IsInsertEnabled bool `json:"isInsertEnabled" validate:"required"`
IsUpdateEnabled bool `json:"is_update_enabled" validate:"required"` IsUpdateEnabled bool `json:"isUpdateEnabled" validate:"required"`
IsDeleteEnabled bool `json:"is_delete_enabled" validate:"required"` IsDeleteEnabled bool `json:"isDeleteEnabled" validate:"required"`
IsApprovalEnabled bool `json:"is_approval_enabled" validate:"required"` IsApprovalEnabled bool `json:"isApprovalEnabled" validate:"required"`
IsAdminEnabled bool `json:"is_admin_enabled" validate:"required"` IsAdminEnabled bool `json:"isAdminEnabled" validate:"required"`
IsActive bool `json:"is_active" validate:"required"`
} }
func (req UserRoleAccessesCreateRequest) ToEntity() *entity.UserRoleAccesses { func (req UserRoleAccessesCreateRequest) ToEntity() *entity.UserRoleAccesses {
return &entity.UserRoleAccesses{ return &entity.UserRoleAccesses{
UserRoleId: req.UserRoleId, UserRoleId: req.UserRoleId,
MenuId: req.MenuId, MenuId: req.MenuId,
IsViewEnabled: req.IsViewEnabled, IsViewEnabled: req.IsViewEnabled,
IsInsertEnabled: req.IsInsertEnabled, IsInsertEnabled: req.IsInsertEnabled,
IsUpdateEnabled: req.IsUpdateEnabled, IsUpdateEnabled: req.IsUpdateEnabled,
IsDeleteEnabled: req.IsDeleteEnabled, IsDeleteEnabled: req.IsDeleteEnabled,
IsApprovalEnabled: req.IsApprovalEnabled, IsApprovalEnabled: req.IsApprovalEnabled,
IsAdminEnabled: req.IsAdminEnabled, IsAdminEnabled: req.IsAdminEnabled,
IsActive: req.IsActive,
} }
} }
type UserRoleAccessesUpdateRequest struct { type UserRoleAccessesUpdateRequest struct {
ID uint `json:"id" validate:"required"` ID uint `json:"id" validate:"required"`
UserRoleId int `json:"user_role_id" validate:"required"` UserRoleId int `json:"user_role_id" validate:"required"`
MenuId int `json:"menu_id" validate:"required"` MenuId int `json:"menu_id" validate:"required"`
IsViewEnabled bool `json:"is_view_enabled" validate:"required"` IsViewEnabled bool `json:"is_view_enabled" validate:"required"`
IsInsertEnabled bool `json:"is_insert_enabled" validate:"required"` IsInsertEnabled bool `json:"is_insert_enabled" validate:"required"`
IsUpdateEnabled bool `json:"is_update_enabled" validate:"required"` IsUpdateEnabled bool `json:"is_update_enabled" validate:"required"`
IsDeleteEnabled bool `json:"is_delete_enabled" validate:"required"` IsDeleteEnabled bool `json:"is_delete_enabled" validate:"required"`
IsApprovalEnabled bool `json:"is_approval_enabled" validate:"required"` IsApprovalEnabled bool `json:"is_approval_enabled" validate:"required"`
IsAdminEnabled bool `json:"is_admin_enabled" validate:"required"` IsAdminEnabled bool `json:"is_admin_enabled" validate:"required"`
IsActive bool `json:"is_active" validate:"required"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
} }
func (req UserRoleAccessesUpdateRequest) ToEntity() *entity.UserRoleAccesses { func (req UserRoleAccessesUpdateRequest) ToEntity() *entity.UserRoleAccesses {
return &entity.UserRoleAccesses{ return &entity.UserRoleAccesses{
ID: req.ID, ID: req.ID,
UserRoleId: req.UserRoleId, UserRoleId: req.UserRoleId,
MenuId: req.MenuId, MenuId: req.MenuId,
IsViewEnabled: req.IsViewEnabled, IsViewEnabled: req.IsViewEnabled,
IsInsertEnabled: req.IsInsertEnabled, IsInsertEnabled: req.IsInsertEnabled,
IsUpdateEnabled: req.IsUpdateEnabled, IsUpdateEnabled: req.IsUpdateEnabled,
IsDeleteEnabled: req.IsDeleteEnabled, IsDeleteEnabled: req.IsDeleteEnabled,
IsApprovalEnabled: req.IsApprovalEnabled, IsApprovalEnabled: req.IsApprovalEnabled,
IsAdminEnabled: req.IsAdminEnabled, IsAdminEnabled: req.IsAdminEnabled,
IsActive: req.IsActive, UpdatedAt: time.Now(),
CreatedAt: req.CreatedAt,
UpdatedAt: req.UpdatedAt,
} }
} }
type UserRoleAccessesQueryRequestContext struct {
UserRoleId string `json:"userRoleId"`
MenuId string `json:"menuId"`
}
func (req UserRoleAccessesQueryRequestContext) ToParamRequest() UserRoleAccessesQueryRequest {
var request UserRoleAccessesQueryRequest
if userRoleIdStr := req.UserRoleId; userRoleIdStr != "" {
userRoleId, err := strconv.Atoi(userRoleIdStr)
if err == nil {
request.UserRoleId = &userRoleId
}
}
if menuIdStr := req.MenuId; menuIdStr != "" {
menuId, err := strconv.Atoi(menuIdStr)
if err == nil {
request.MenuId = &menuId
}
}
return request
}

View File

@ -3,16 +3,16 @@ package response
import "time" import "time"
type UserRoleAccessesResponse struct { type UserRoleAccessesResponse struct {
ID uint `json:"id"` ID uint `json:"id"`
UserRoleId int `json:"user_role_id"` UserRoleId int `json:"user_role_id"`
MenuId int `json:"menu_id"` MenuId int `json:"menu_id"`
IsViewEnabled bool `json:"is_view_enabled"` IsViewEnabled bool `json:"is_view_enabled"`
IsInsertEnabled bool `json:"is_insert_enabled"` IsInsertEnabled bool `json:"is_insert_enabled"`
IsUpdateEnabled bool `json:"is_update_enabled"` IsUpdateEnabled bool `json:"is_update_enabled"`
IsDeleteEnabled bool `json:"is_delete_enabled"` IsDeleteEnabled bool `json:"is_delete_enabled"`
IsApprovalEnabled bool `json:"is_approval_enabled"` IsApprovalEnabled bool `json:"is_approval_enabled"`
IsAdminEnabled bool `json:"is_admin_enabled"` IsAdminEnabled bool `json:"is_admin_enabled"`
IsActive bool `json:"is_active"` IsActive *bool `json:"is_active"`
CreatedAt time.Time `json:"created_at"` CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"` UpdatedAt time.Time `json:"updated_at"`
} }

View File

@ -68,5 +68,12 @@ func (_i *userRoleAccessesService) Update(id uint, req request.UserRoleAccessesU
} }
func (_i *userRoleAccessesService) Delete(id uint) error { func (_i *userRoleAccessesService) 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)
} }

View File

@ -38,10 +38,9 @@ func NewUserRolesController(userRolesService service.UserRolesService, log zerol
// @Security Bearer // @Security Bearer
// @Param req query request.UserRolesQueryRequest false "query parameters" // @Param req query request.UserRolesQueryRequest false "query parameters"
// @Success 200 {object} response.Response // @Success 200 {object} response.Response
// @Failure 401 {object} response.Response // @Failure 400 {object} response.BadRequestError
// @Failure 404 {object} response.Response // @Failure 401 {object} response.UnauthorizedError
// @Failure 422 {object} response.Response // @Failure 500 {object} response.InternalServerError
// @Failure 500 {object} response.Response
// @Router /user-roles [get] // @Router /user-roles [get]
func (_i *userRolesController) All(c *fiber.Ctx) error { func (_i *userRolesController) All(c *fiber.Ctx) error {
paginate, err := paginator.Paginate(c) paginate, err := paginator.Paginate(c)
@ -79,10 +78,9 @@ func (_i *userRolesController) All(c *fiber.Ctx) error {
// @Security Bearer // @Security Bearer
// @Param id path int true "UserRoles ID" // @Param id path int true "UserRoles ID"
// @Success 200 {object} response.Response // @Success 200 {object} response.Response
// @Failure 401 {object} response.Response // @Failure 400 {object} response.BadRequestError
// @Failure 404 {object} response.Response // @Failure 401 {object} response.UnauthorizedError
// @Failure 422 {object} response.Response // @Failure 500 {object} response.InternalServerError
// @Failure 500 {object} response.Response
// @Router /user-roles/{id} [get] // @Router /user-roles/{id} [get]
func (_i *userRolesController) Show(c *fiber.Ctx) error { func (_i *userRolesController) Show(c *fiber.Ctx) error {
id, err := strconv.ParseUint(c.Params("id"), 10, 0) id, err := strconv.ParseUint(c.Params("id"), 10, 0)
@ -109,10 +107,9 @@ func (_i *userRolesController) Show(c *fiber.Ctx) error {
// @Security Bearer // @Security Bearer
// @Param payload body request.UserRolesCreateRequest true "Required payload" // @Param payload body request.UserRolesCreateRequest true "Required payload"
// @Success 200 {object} response.Response // @Success 200 {object} response.Response
// @Failure 401 {object} response.Response // @Failure 400 {object} response.BadRequestError
// @Failure 404 {object} response.Response // @Failure 401 {object} response.UnauthorizedError
// @Failure 422 {object} response.Response // @Failure 500 {object} response.InternalServerError
// @Failure 500 {object} response.Response
// @Router /user-roles [post] // @Router /user-roles [post]
func (_i *userRolesController) Save(c *fiber.Ctx) error { func (_i *userRolesController) Save(c *fiber.Ctx) error {
req := new(request.UserRolesCreateRequest) req := new(request.UserRolesCreateRequest)
@ -139,10 +136,9 @@ func (_i *userRolesController) Save(c *fiber.Ctx) error {
// @Param payload body request.UserRolesUpdateRequest true "Required payload" // @Param payload body request.UserRolesUpdateRequest true "Required payload"
// @Param id path int true "UserRoles ID" // @Param id path int true "UserRoles ID"
// @Success 200 {object} response.Response // @Success 200 {object} response.Response
// @Failure 401 {object} response.Response // @Failure 400 {object} response.BadRequestError
// @Failure 404 {object} response.Response // @Failure 401 {object} response.UnauthorizedError
// @Failure 422 {object} response.Response // @Failure 500 {object} response.InternalServerError
// @Failure 500 {object} response.Response
// @Router /user-roles/{id} [put] // @Router /user-roles/{id} [put]
func (_i *userRolesController) Update(c *fiber.Ctx) error { func (_i *userRolesController) Update(c *fiber.Ctx) error {
id, err := strconv.ParseUint(c.Params("id"), 10, 0) id, err := strconv.ParseUint(c.Params("id"), 10, 0)
@ -173,10 +169,9 @@ func (_i *userRolesController) Update(c *fiber.Ctx) error {
// @Security Bearer // @Security Bearer
// @Param id path int true "UserRoles ID" // @Param id path int true "UserRoles ID"
// @Success 200 {object} response.Response // @Success 200 {object} response.Response
// @Failure 401 {object} response.Response // @Failure 400 {object} response.BadRequestError
// @Failure 404 {object} response.Response // @Failure 401 {object} response.UnauthorizedError
// @Failure 422 {object} response.Response // @Failure 500 {object} response.InternalServerError
// @Failure 500 {object} response.Response
// @Router /user-roles/{id} [delete] // @Router /user-roles/{id} [delete]
func (_i *userRolesController) Delete(c *fiber.Ctx) error { func (_i *userRolesController) Delete(c *fiber.Ctx) error {
id, err := strconv.ParseUint(c.Params("id"), 10, 0) id, err := strconv.ParseUint(c.Params("id"), 10, 0)

View File

@ -25,9 +25,6 @@ type UserRolesCreateRequest struct {
Description string `json:"description" validate:"required"` Description string `json:"description" validate:"required"`
Code string `json:"code" validate:"required"` Code string `json:"code" validate:"required"`
LevelNumber int `json:"level_number" validate:"required"` LevelNumber int `json:"level_number" validate:"required"`
StatusId *int `json:"status_id"`
CreatedById *int `json:"created_by_id"`
IsActive *bool `json:"is_active"`
} }
func (req UserRolesCreateRequest) ToEntity() *entity.UserRoles { func (req UserRolesCreateRequest) ToEntity() *entity.UserRoles {
@ -36,9 +33,6 @@ func (req UserRolesCreateRequest) ToEntity() *entity.UserRoles {
Description: req.Description, Description: req.Description,
Code: req.Code, Code: req.Code,
LevelNumber: req.LevelNumber, LevelNumber: req.LevelNumber,
StatusId: req.StatusId,
CreatedById: req.CreatedById,
IsActive: req.IsActive,
} }
} }

View File

@ -59,8 +59,12 @@ func (_i *userRolesService) Show(id uint) (userRoles *response.UserRolesResponse
func (_i *userRolesService) Save(req request.UserRolesCreateRequest) (err error) { func (_i *userRolesService) Save(req request.UserRolesCreateRequest) (err error) {
_i.Log.Info().Interface("data", req).Msg("") _i.Log.Info().Interface("data", req).Msg("")
newReq := req.ToEntity()
return _i.Repo.Create(req.ToEntity()) statusId := 1
newReq.StatusId = &statusId
return _i.Repo.Create(newReq)
} }
func (_i *userRolesService) Update(id uint, req request.UserRolesUpdateRequest) (err error) { func (_i *userRolesService) Update(id uint, req request.UserRolesUpdateRequest) (err error) {

View File

@ -36,10 +36,9 @@ func NewUsersController(usersService service.UsersService) UsersController {
// @Security Bearer // @Security Bearer
// @Param req query request.UsersQueryRequest false "query parameters" // @Param req query request.UsersQueryRequest false "query parameters"
// @Success 200 {object} response.Response // @Success 200 {object} response.Response
// @Failure 401 {object} response.Response // @Failure 400 {object} response.BadRequestError
// @Failure 404 {object} response.Response // @Failure 401 {object} response.UnauthorizedError
// @Failure 422 {object} response.Response // @Failure 500 {object} response.InternalServerError
// @Failure 500 {object} response.Response
// @Router /users [get] // @Router /users [get]
func (_i *usersController) All(c *fiber.Ctx) error { func (_i *usersController) All(c *fiber.Ctx) error {
paginate, err := paginator.Paginate(c) paginate, err := paginator.Paginate(c)
@ -80,10 +79,9 @@ func (_i *usersController) All(c *fiber.Ctx) error {
// @Security Bearer // @Security Bearer
// @Param id path int true "Users ID" // @Param id path int true "Users ID"
// @Success 200 {object} response.Response // @Success 200 {object} response.Response
// @Failure 401 {object} response.Response // @Failure 400 {object} response.BadRequestError
// @Failure 404 {object} response.Response // @Failure 401 {object} response.UnauthorizedError
// @Failure 422 {object} response.Response // @Failure 500 {object} response.InternalServerError
// @Failure 500 {object} response.Response
// @Router /users/{id} [get] // @Router /users/{id} [get]
func (_i *usersController) Show(c *fiber.Ctx) error { func (_i *usersController) Show(c *fiber.Ctx) error {
id, err := strconv.ParseUint(c.Params("id"), 10, 0) id, err := strconv.ParseUint(c.Params("id"), 10, 0)
@ -110,10 +108,9 @@ func (_i *usersController) Show(c *fiber.Ctx) error {
// @Security Bearer // @Security Bearer
// @Param payload body request.UsersCreateRequest true "Required payload" // @Param payload body request.UsersCreateRequest true "Required payload"
// @Success 200 {object} response.Response // @Success 200 {object} response.Response
// @Failure 401 {object} response.Response // @Failure 400 {object} response.BadRequestError
// @Failure 404 {object} response.Response // @Failure 401 {object} response.UnauthorizedError
// @Failure 422 {object} response.Response // @Failure 500 {object} response.InternalServerError
// @Failure 500 {object} response.Response
// @Router /users [post] // @Router /users [post]
func (_i *usersController) Save(c *fiber.Ctx) error { func (_i *usersController) Save(c *fiber.Ctx) error {
req := new(request.UsersCreateRequest) req := new(request.UsersCreateRequest)
@ -140,10 +137,9 @@ func (_i *usersController) Save(c *fiber.Ctx) error {
// @Param payload body request.UsersUpdateRequest true "Required payload" // @Param payload body request.UsersUpdateRequest true "Required payload"
// @Param id path int true "Users ID" // @Param id path int true "Users ID"
// @Success 200 {object} response.Response // @Success 200 {object} response.Response
// @Failure 401 {object} response.Response // @Failure 400 {object} response.BadRequestError
// @Failure 404 {object} response.Response // @Failure 401 {object} response.UnauthorizedError
// @Failure 422 {object} response.Response // @Failure 500 {object} response.InternalServerError
// @Failure 500 {object} response.Response
// @Router /users/{id} [put] // @Router /users/{id} [put]
func (_i *usersController) Update(c *fiber.Ctx) error { func (_i *usersController) Update(c *fiber.Ctx) error {
id, err := strconv.ParseUint(c.Params("id"), 10, 0) id, err := strconv.ParseUint(c.Params("id"), 10, 0)
@ -174,10 +170,9 @@ func (_i *usersController) Update(c *fiber.Ctx) error {
// @Security Bearer // @Security Bearer
// @Param id path int true "Users ID" // @Param id path int true "Users ID"
// @Success 200 {object} response.Response // @Success 200 {object} response.Response
// @Failure 401 {object} response.Response // @Failure 400 {object} response.BadRequestError
// @Failure 404 {object} response.Response // @Failure 401 {object} response.UnauthorizedError
// @Failure 422 {object} response.Response // @Failure 500 {object} response.InternalServerError
// @Failure 500 {object} response.Response
// @Router /users/{id} [delete] // @Router /users/{id} [delete]
func (_i *usersController) Delete(c *fiber.Ctx) error { func (_i *usersController) Delete(c *fiber.Ctx) error {
id, err := strconv.ParseUint(c.Params("id"), 10, 0) id, err := strconv.ParseUint(c.Params("id"), 10, 0)

View File

@ -23,85 +23,73 @@ type UsersQueryRequest struct {
} }
type UsersCreateRequest struct { type UsersCreateRequest struct {
Username string `json:"username" validate:"required,lowercase"` Username string `json:"username" validate:"required,lowercase"`
Email string `json:"email" validate:"required,email"` Email string `json:"email" validate:"required,email"`
Fullname string `json:"fullname" validate:"required"` Fullname string `json:"fullname" validate:"required"`
Address string `json:"address" validate:"required"` Address string `json:"address" validate:"required"`
PhoneNumber string `json:"phoneNumber" validate:"required"` PhoneNumber string `json:"phoneNumber" validate:"required"`
WorkType string `json:"workType" validate:"required"` WorkType string `json:"workType" validate:"required"`
GenderType string `json:"genderType" validate:"required"` GenderType string `json:"genderType" validate:"required"`
IdentityType string `json:"identityType" validate:"required"` IdentityType string `json:"identityType" validate:"required"`
IdentityNumber string `json:"identityNumber" validate:"required"` IdentityNumber string `json:"identityNumber" validate:"required"`
DateOfBirth string `json:"dateOfBirth" validate:"required"` DateOfBirth string `json:"dateOfBirth" validate:"required"`
LastEducation string `json:"lastEducation" validate:"required"` LastEducation string `json:"lastEducation" validate:"required"`
UserRoleId int `json:"userRoleId" validate:"required"` UserRoleId int `json:"userRoleId" validate:"required"`
UserLevelsId int `json:"userLevelsId" validate:"required"` UserLevelsId int `json:"userLevelsId" validate:"required"`
KeycloakId *string `json:"keycloakId"`
StatusId *int `json:"statusId"`
CreatedById *int `json:"createdById"`
ProfilePicturePath *string `json:"profilePicturePath"`
IsActive *bool `json:"isActive"`
} }
func (req UsersCreateRequest) ToEntity() *entity.Users { func (req UsersCreateRequest) ToEntity() *entity.Users {
return &entity.Users{ return &entity.Users{
Username: req.Username, Username: req.Username,
Email: req.Email, Email: req.Email,
Fullname: req.Fullname, Fullname: req.Fullname,
Address: req.Address, Address: req.Address,
PhoneNumber: req.PhoneNumber, PhoneNumber: req.PhoneNumber,
WorkType: req.WorkType, WorkType: req.WorkType,
GenderType: req.GenderType, GenderType: req.GenderType,
IdentityType: req.IdentityType, IdentityType: req.IdentityType,
IdentityNumber: req.IdentityNumber, IdentityNumber: req.IdentityNumber,
DateOfBirth: req.DateOfBirth, DateOfBirth: req.DateOfBirth,
LastEducation: req.LastEducation, LastEducation: req.LastEducation,
KeycloakId: req.KeycloakId, UserRoleId: req.UserRoleId,
UserRoleId: req.UserRoleId, UserLevelsId: req.UserLevelsId,
StatusId: req.StatusId,
UserLevelsId: req.UserLevelsId,
CreatedById: req.CreatedById,
ProfilePicturePath: req.ProfilePicturePath,
IsActive: req.IsActive,
} }
} }
type UsersUpdateRequest struct { type UsersUpdateRequest struct {
Username string `json:"username" validate:"required,lowercase"` Username string `json:"username" validate:"required,lowercase"`
Email string `json:"email" validate:"required,email"` Email string `json:"email" validate:"required,email"`
Fullname string `json:"fullname" validate:"required"` Fullname string `json:"fullname" validate:"required"`
Address string `json:"address" validate:"required"` Address string `json:"address" validate:"required"`
PhoneNumber string `json:"phoneNumber" validate:"required"` PhoneNumber string `json:"phoneNumber" validate:"required"`
WorkType string `json:"workType" validate:"required"` WorkType string `json:"workType" validate:"required"`
GenderType string `json:"genderType" validate:"required"` GenderType string `json:"genderType" validate:"required"`
IdentityType string `json:"identityType" validate:"required"` IdentityType string `json:"identityType" validate:"required"`
IdentityNumber string `json:"identityNumber" validate:"required"` IdentityNumber string `json:"identityNumber" validate:"required"`
DateOfBirth string `json:"dateOfBirth" validate:"required"` DateOfBirth string `json:"dateOfBirth" validate:"required"`
LastEducation string `json:"lastEducation" validate:"required"` LastEducation string `json:"lastEducation" validate:"required"`
UserRoleId int `json:"userRoleId" validate:"required"` UserRoleId int `json:"userRoleId" validate:"required"`
UserLevelsId int `json:"userLevelsId" validate:"required"` UserLevelsId int `json:"userLevelsId" validate:"required"`
ProfilePicturePath *string `json:"profile_picture_path"` StatusId *int `json:"status_id"`
StatusId *int `json:"status_id"`
} }
func (req UsersUpdateRequest) ToEntity() *entity.Users { func (req UsersUpdateRequest) ToEntity() *entity.Users {
return &entity.Users{ return &entity.Users{
Username: req.Username, Username: req.Username,
Email: req.Email, Email: req.Email,
Fullname: req.Fullname, Fullname: req.Fullname,
Address: req.Address, Address: req.Address,
PhoneNumber: req.PhoneNumber, PhoneNumber: req.PhoneNumber,
WorkType: req.WorkType, WorkType: req.WorkType,
GenderType: req.GenderType, GenderType: req.GenderType,
IdentityType: req.IdentityType, IdentityType: req.IdentityType,
IdentityNumber: req.IdentityNumber, IdentityNumber: req.IdentityNumber,
DateOfBirth: req.DateOfBirth, DateOfBirth: req.DateOfBirth,
LastEducation: req.LastEducation, LastEducation: req.LastEducation,
UserRoleId: req.UserRoleId, UserRoleId: req.UserRoleId,
StatusId: req.StatusId, StatusId: req.StatusId,
UserLevelsId: req.UserLevelsId, UserLevelsId: req.UserLevelsId,
ProfilePicturePath: req.ProfilePicturePath, UpdatedAt: time.Now(),
UpdatedAt: time.Now(),
} }
} }

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,19 @@
package response
type BadRequestError struct {
Success bool `json:"success" example:"false"`
Code int `json:"code" example:"400"`
Message string `json:"message" example:"bad request"`
}
type UnauthorizedError struct {
Success bool `json:"success" example:"false"`
Code int `json:"code" example:"401"`
Message string `json:"message" example:"unauthorized access"`
}
type InternalServerError struct {
Success bool `json:"success" example:"false"`
Code int `json:"code" example:"500"`
Message string `json:"message" example:"internal server error"`
}

View File

@ -25,8 +25,8 @@ func (e *Error) Error() string {
// A struct to return normal response // A struct to return normal response
type Response struct { type Response struct {
Success bool `json:"success"` Success bool `json:"success" example:"true"`
Code int `json:"code"` Code int `json:"code" example:"200"`
Messages Messages `json:"messages"` Messages Messages `json:"messages"`
Data any `json:"data,omitempty"` Data any `json:"data,omitempty"`
Meta any `json:"meta,omitempty"` Meta any `json:"meta,omitempty"`
@ -89,3 +89,14 @@ func removeTopStruct(fields map[string]string) map[string]string {
return res return res
} }
func Unauthorized() *Response {
return &Response{
Success: false,
Code: 401,
Data: nil,
Messages: Messages{
"Unauthorized",
},
}
}