Skip to content

Commit f687814

Browse files
committed
feat: add error codes and optimize error handling
1 parent 2d80247 commit f687814

File tree

3 files changed

+33
-20
lines changed

3 files changed

+33
-20
lines changed

internal/errs/extension.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,6 @@ const (
55
ErrAuthenticationFailed = "codebase-indexer.authentication_failed"
66
ErrInternalServerError = "codebase-indexer.internal_server_error"
77
ErrFileEmbeddingFailed = "codebase-indexer.file_embedding_failed"
8+
ErrBadRequest = "codebase-indexer.bad_request"
9+
ErrWorkspaceNotRegistered = "codebase-indexer.workspace_not_registered"
810
)

internal/handler/extension.go

Lines changed: 28 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111

1212
"codebase-indexer/internal/config"
1313
"codebase-indexer/internal/dto"
14+
"codebase-indexer/internal/errs"
1415
"codebase-indexer/internal/service"
1516
"codebase-indexer/pkg/logger"
1617
)
@@ -186,7 +187,7 @@ func (h *ExtensionHandler) ShareAccessToken(c *gin.Context) {
186187
if err := c.ShouldBindJSON(&req); err != nil {
187188
h.logger.Error("invalid request format: %v", err)
188189
c.JSON(http.StatusBadRequest, dto.ShareAccessTokenResponse{
189-
Code: "400",
190+
Code: errs.ErrBadRequest,
190191
Success: false,
191192
Message: "invalid request format",
192193
})
@@ -200,7 +201,7 @@ func (h *ExtensionHandler) ShareAccessToken(c *gin.Context) {
200201
if err != nil {
201202
h.logger.Error("failed to update sync config: %v", err)
202203
c.JSON(http.StatusInternalServerError, dto.ShareAccessTokenResponse{
203-
Code: "500",
204+
Code: errs.ErrInternalServerError,
204205
Success: false,
205206
Message: "failed to update sync config",
206207
})
@@ -273,7 +274,7 @@ func (h *ExtensionHandler) CheckIgnoreFile(c *gin.Context) {
273274
if err := c.ShouldBindJSON(&req); err != nil {
274275
h.logger.Error("invalid request format: %v", err)
275276
c.JSON(http.StatusBadRequest, dto.CheckIgnoreFileResponse{
276-
Code: "400",
277+
Code: errs.ErrBadRequest,
277278
Success: false,
278279
Ignore: false,
279280
Message: "invalid request format",
@@ -288,7 +289,7 @@ func (h *ExtensionHandler) CheckIgnoreFile(c *gin.Context) {
288289
if req.WorkspacePath == "" || req.WorkspaceName == "" || len(req.FilePaths) == 0 {
289290
h.logger.Error("invalid check ignore file parameters")
290291
c.JSON(http.StatusBadRequest, dto.CheckIgnoreFileResponse{
291-
Code: "400",
292+
Code: errs.ErrBadRequest,
292293
Success: false,
293294
Ignore: false,
294295
Message: "invalid parameters",
@@ -305,7 +306,7 @@ func (h *ExtensionHandler) CheckIgnoreFile(c *gin.Context) {
305306
if err != nil {
306307
h.logger.Error("failed to check ignore files: %v", err)
307308
c.JSON(http.StatusInternalServerError, dto.CheckIgnoreFileResponse{
308-
Code: "500",
309+
Code: errs.ErrInternalServerError,
309310
Success: false,
310311
Ignore: false,
311312
Message: "internal server error",
@@ -349,7 +350,7 @@ func (h *ExtensionHandler) PublishEvents(c *gin.Context) {
349350
if err := c.ShouldBindJSON(&req); err != nil {
350351
h.logger.Error("invalid request format: %v", err)
351352
c.JSON(http.StatusBadRequest, dto.PublishEventsResponse{
352-
Code: "400",
353+
Code: errs.ErrBadRequest,
353354
Success: false,
354355
Message: "invalid request format",
355356
Data: 0,
@@ -365,7 +366,7 @@ func (h *ExtensionHandler) PublishEvents(c *gin.Context) {
365366
if err != nil {
366367
h.logger.Error("failed to publish events: %v", err)
367368
c.JSON(http.StatusInternalServerError, dto.PublishEventsResponse{
368-
Code: "500",
369+
Code: errs.ErrInternalServerError,
369370
Success: false,
370371
Message: "failed to publish events",
371372
Data: 0,
@@ -398,7 +399,7 @@ func (h *ExtensionHandler) TriggerIndex(c *gin.Context) {
398399
if err := c.ShouldBindJSON(&req); err != nil {
399400
h.logger.Error("invalid request format: %v", err)
400401
c.JSON(http.StatusBadRequest, dto.TriggerIndexResponse{
401-
Code: "400",
402+
Code: errs.ErrBadRequest,
402403
Success: false,
403404
Message: "invalid request format",
404405
Data: 0,
@@ -409,9 +410,9 @@ func (h *ExtensionHandler) TriggerIndex(c *gin.Context) {
409410
if req.Type != dto.IndexTypeAll && req.Type != dto.IndexTypeEmbedding && req.Type != dto.IndexTypeCodegraph {
410411
h.logger.Error("invalid index type: %s", req.Type)
411412
c.JSON(http.StatusBadRequest, dto.TriggerIndexResponse{
412-
Code: "400",
413+
Code: errs.ErrBadRequest,
413414
Success: false,
414-
Message: "invalid index type",
415+
Message: fmt.Sprintf("invalid index type: %s", req.Type),
415416
Data: 0,
416417
})
417418
return
@@ -421,9 +422,9 @@ func (h *ExtensionHandler) TriggerIndex(c *gin.Context) {
421422
if _, err := os.Stat(req.Workspace); os.IsNotExist(err) {
422423
h.logger.Error("workspace path does not exist: %s", req.Workspace)
423424
c.JSON(http.StatusBadRequest, dto.TriggerIndexResponse{
424-
Code: "400",
425+
Code: errs.ErrBadRequest,
425426
Success: false,
426-
Message: "workspace path does not exist",
427+
Message: fmt.Sprintf("workspace path does not exist: %s", req.Workspace),
427428
Data: 0,
428429
})
429430
return
@@ -437,7 +438,7 @@ func (h *ExtensionHandler) TriggerIndex(c *gin.Context) {
437438
if err != nil {
438439
h.logger.Error("failed to trigger index: %v", err)
439440
c.JSON(http.StatusInternalServerError, dto.TriggerIndexResponse{
440-
Code: "500",
441+
Code: errs.ErrInternalServerError,
441442
Success: false,
442443
Message: fmt.Sprintf("failed to trigger index: %v", err),
443444
Data: 0,
@@ -471,7 +472,7 @@ func (h *ExtensionHandler) GetIndexStatus(c *gin.Context) {
471472
if err := c.ShouldBindQuery(&query); err != nil {
472473
h.logger.Error("invalid query parameters: %v", err)
473474
c.JSON(http.StatusBadRequest, dto.IndexStatusResponse{
474-
Code: "400",
475+
Code: errs.ErrBadRequest,
475476
Message: "invalid query parameters",
476477
})
477478
return
@@ -483,8 +484,15 @@ func (h *ExtensionHandler) GetIndexStatus(c *gin.Context) {
483484
response, err := h.extensionService.GetIndexStatus(c.Request.Context(), query.Workspace)
484485
if err != nil {
485486
h.logger.Error("failed to get index status: %v", err)
487+
if strings.Contains(err.Error(), "workspace not found") {
488+
c.JSON(http.StatusBadRequest, dto.IndexStatusResponse{
489+
Code: errs.ErrWorkspaceNotRegistered,
490+
Message: fmt.Sprintf("workspace not registered: %s", query.Workspace),
491+
})
492+
return
493+
}
486494
c.JSON(http.StatusInternalServerError, dto.IndexStatusResponse{
487-
Code: "500",
495+
Code: errs.ErrInternalServerError,
488496
Message: "failed to get index status",
489497
})
490498
return
@@ -510,7 +518,7 @@ func (h *ExtensionHandler) SwitchIndex(c *gin.Context) {
510518
if err := c.ShouldBindQuery(&query); err != nil {
511519
h.logger.Error("invalid query parameters: %v", err)
512520
c.JSON(http.StatusBadRequest, dto.IndexSwitchResponse{
513-
Code: "400",
521+
Code: errs.ErrBadRequest,
514522
Success: false,
515523
Message: "invalid query parameters",
516524
Data: false,
@@ -521,7 +529,7 @@ func (h *ExtensionHandler) SwitchIndex(c *gin.Context) {
521529
if query.Workspace == "" || query.Switch == "" {
522530
h.logger.Error("invalid query parameters: %v", query)
523531
c.JSON(http.StatusBadRequest, dto.IndexSwitchResponse{
524-
Code: "400",
532+
Code: errs.ErrBadRequest,
525533
Success: false,
526534
Message: "invalid query parameters",
527535
Data: false,
@@ -532,9 +540,9 @@ func (h *ExtensionHandler) SwitchIndex(c *gin.Context) {
532540
if query.Switch != dto.SwitchOn && query.Switch != dto.SwitchOff {
533541
h.logger.Error("invalid switch status: %s", query.Switch)
534542
c.JSON(http.StatusBadRequest, dto.IndexSwitchResponse{
535-
Code: "400",
543+
Code: errs.ErrBadRequest,
536544
Success: false,
537-
Message: "invalid query parameters",
545+
Message: "invalid switch status",
538546
Data: false,
539547
})
540548
return
@@ -547,7 +555,7 @@ func (h *ExtensionHandler) SwitchIndex(c *gin.Context) {
547555
if err != nil {
548556
h.logger.Error("failed to switch index: %v", err)
549557
c.JSON(http.StatusInternalServerError, dto.IndexSwitchResponse{
550-
Code: "500",
558+
Code: errs.ErrInternalServerError,
551559
Success: false,
552560
Message: "failed to switch index",
553561
Data: false,

internal/service/extension.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -496,16 +496,19 @@ func (s *extensionService) processEvents(workspacePath, clientID string, events
496496
ignoreConfig := s.fileScanner.LoadIgnoreConfig(workspacePath)
497497
for _, event := range events {
498498
if !extensionEventTypeMap[event.EventType] {
499+
s.logger.Warn("invalid event type: %s", event.EventType)
499500
continue
500501
}
501502

502503
if event.EventType == model.EventTypeCloseWorkspace {
504+
s.logger.Info("close workspace event, workspace path: %s", workspacePath)
503505
s.handleCloseWorkspaceEvent(workspacePath)
504506
successCount++
505507
break
506508
}
507509

508510
if event.EventType == model.EventTypeOpenWorkspace {
511+
s.logger.Info("open workspace event, workspace path: %s", workspacePath)
509512
s.handleOpenWorkspaceEvent(workspacePath, clientID)
510513
event.SourcePath = ""
511514
event.TargetPath = ""

0 commit comments

Comments
 (0)