kontenhumas-be/docs/MODULE_UPDATE_TEMPLATE.md

4.3 KiB

Template untuk mengupdate Service Interface dan Implementation

1. Service Interface Update

Before:

type ModuleService interface {
    All(clientId *uuid.UUID, authToken string, req request.ModuleQueryRequest) (data []*response.ModuleResponse, paging paginator.Pagination, err error)
    Show(clientId *uuid.UUID, id uint) (data *response.ModuleResponse, err error)
    Save(clientId *uuid.UUID, req request.ModuleCreateRequest, authToken string) (data *entity.Module, err error)
    Update(clientId *uuid.UUID, id uint, req request.ModuleUpdateRequest) (err error)
    Delete(clientId *uuid.UUID, id uint) error
}

After:

type ModuleService interface {
    All(authToken string, req request.ModuleQueryRequest) (data []*response.ModuleResponse, paging paginator.Pagination, err error)
    Show(authToken string, id uint) (data *response.ModuleResponse, err error)
    Save(authToken string, req request.ModuleCreateRequest) (data *entity.Module, err error)
    Update(authToken string, id uint, req request.ModuleUpdateRequest) (err error)
    Delete(authToken string, id uint) error
}

2. Service Implementation Update

Before:

func (_i *moduleService) All(clientId *uuid.UUID, authToken string, req request.ModuleQueryRequest) (data []*response.ModuleResponse, paging paginator.Pagination, err error) {
    // Extract userLevelId from authToken
    var userLevelId *uint
    if authToken != "" {
        user := utilSvc.GetUserInfo(_i.Log, _i.UsersRepo, authToken)
        if user != nil {
            userLevelId = &user.UserLevelId
        }
    }

    results, paging, err := _i.Repo.GetAll(clientId, userLevelId, req)
    // ... rest of implementation
}

After:

func (_i *moduleService) All(authToken string, req request.ModuleQueryRequest) (data []*response.ModuleResponse, paging paginator.Pagination, err error) {
    // Extract clientId and userLevelId from authToken
    var clientId *uuid.UUID
    var userLevelId *uint
    
    if authToken != "" {
        user := utilSvc.GetUserInfo(_i.Log, _i.UsersRepo, authToken)
        if user != nil {
            clientId = user.ClientId
            userLevelId = &user.UserLevelId
            _i.Log.Info().Interface("clientId", clientId).Msg("Extracted clientId from auth token")
        }
    }

    results, paging, err := _i.Repo.GetAll(clientId, userLevelId, req)
    // ... rest of implementation
}

3. Controller Update

Before:

func (_i *moduleController) All(c *fiber.Ctx) error {
    // ... pagination setup ...
    
    // Get ClientId from context
    clientId := middleware.GetClientID(c)
    
    // Get Authorization token from header
    authToken := c.Get("Authorization")
    
    data, paging, err := _i.moduleService.All(clientId, authToken, req)
    // ... rest of implementation
}

After:

func (_i *moduleController) All(c *fiber.Ctx) error {
    // ... pagination setup ...
    
    // Get Authorization token from header
    authToken := c.Get("Authorization")
    _i.Log.Info().Str("authToken", authToken).Msg("")
    
    data, paging, err := _i.moduleService.All(authToken, req)
    // ... rest of implementation
}

4. Swagger Documentation Update

Before:

// @Param        X-Client-Key header string true "Insert the X-Client-Key"
// @Param        Authorization header string false "Insert your access token" default(Bearer <Add access token here>)

After:

// @Param        Authorization header string false "Insert your access token" default(Bearer <Add access token here>)

5. Import Cleanup

Remove unused middleware import:

// Remove this line if no longer needed:
"netidhub-saas-be/app/middleware"

6. Key Changes Summary

  1. Remove X-Client-Key header from all Swagger documentation
  2. Remove GetClientID() calls from controllers
  3. Update service interfaces to use authToken instead of clientId parameter
  4. Update service implementations to extract clientId from authToken using GetUserInfo()
  5. Remove middleware import if no longer needed
  6. Update all method calls to match new signatures

7. Benefits

  • Simpler API: No need for X-Client-Key header
  • Auth-based: clientId comes from authenticated user
  • Consistent: Same pattern across all modules
  • Secure: Tied to user authentication
  • Maintainable: Less parameters to manage