diff --git a/apps/server/src/modules/monitor/errs.go b/apps/server/src/modules/monitor/errs.go new file mode 100644 index 00000000..c5d8df19 --- /dev/null +++ b/apps/server/src/modules/monitor/errs.go @@ -0,0 +1,11 @@ +package monitor + +import "errors" + +var ( + ErrNotFound = errors.New("not found") +) + +var ( + ErrMonitorNotFound = errors.New("monitor not found") +) diff --git a/apps/server/src/modules/monitor/monitor.controller.go b/apps/server/src/modules/monitor/monitor.controller.go index 43109a20..5e48f673 100644 --- a/apps/server/src/modules/monitor/monitor.controller.go +++ b/apps/server/src/modules/monitor/monitor.controller.go @@ -1,6 +1,7 @@ package monitor import ( + "errors" "fmt" "net/http" "peekaping/src/modules/monitor_notification" @@ -285,6 +286,10 @@ func (ic *MonitorController) UpdateFull(ctx *gin.Context) { updatedMonitor, err := ic.monitorService.UpdateFull(ctx, id, &monitor) if err != nil { ic.logger.Errorw("Failed to update monitor", "error", err) + if errors.Is(err, ErrMonitorNotFound) { + ctx.JSON(http.StatusNotFound, utils.NewFailResponse(err.Error())) + return + } ctx.JSON(http.StatusInternalServerError, utils.NewFailResponse("Internal server error")) return } diff --git a/apps/server/src/modules/monitor/monitor.mongo.repository.go b/apps/server/src/modules/monitor/monitor.mongo.repository.go index 92b7e0dd..e413ff65 100644 --- a/apps/server/src/modules/monitor/monitor.mongo.repository.go +++ b/apps/server/src/modules/monitor/monitor.mongo.repository.go @@ -3,6 +3,7 @@ package monitor import ( "context" "errors" + "fmt" "peekaping/src/config" "peekaping/src/modules/heartbeat" "time" @@ -385,6 +386,9 @@ func (r *MonitorRepositoryImpl) UpdateFull(ctx context.Context, id string, monit if err != nil { return err } + if existingMonitor == nil { + return fmt.Errorf("%w: monitor %s", ErrMonitorNotFound, id) + } filter := bson.M{"_id": objectID} update := bson.M{} diff --git a/apps/server/src/modules/monitor/monitor.sql.repository.go b/apps/server/src/modules/monitor/monitor.sql.repository.go index 5da19c24..ae70b892 100644 --- a/apps/server/src/modules/monitor/monitor.sql.repository.go +++ b/apps/server/src/modules/monitor/monitor.sql.repository.go @@ -2,6 +2,7 @@ package monitor import ( "context" + "fmt" "time" "peekaping/src/modules/shared" @@ -209,11 +210,25 @@ func (r *SQLRepositoryImpl) UpdateFull(ctx context.Context, id string, monitor * sm := toSQLModel(monitor) sm.UpdatedAt = time.Now() - _, err := r.db.NewUpdate(). + result, err := r.db.NewUpdate(). Model(sm). Where("id = ?", id). ExcludeColumn("id", "created_at"). Exec(ctx) + + if err != nil { + return err + } + + rowAffected, err := result.RowsAffected() + if err != nil { + return err + } + + if rowAffected == 0 { + return fmt.Errorf("%w: monitor %s", ErrMonitorNotFound, id) + } + return err }