4.3 KiB
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
- Remove X-Client-Key header from all Swagger documentation
- Remove GetClientID() calls from controllers
- Update service interfaces to use authToken instead of clientId parameter
- Update service implementations to extract clientId from authToken using GetUserInfo()
- Remove middleware import if no longer needed
- 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