Skip to content

Commit

Permalink
docs(delete-user): Add docs for DeleteHandler cron job
Browse files Browse the repository at this point in the history
Add coumentation for the delete handler cron job based on what it does and why

Signed-off-by: Rodney Osodo <[email protected]>
  • Loading branch information
rodneyosodo committed Jun 27, 2024
1 parent e6102f4 commit d94f975
Showing 1 changed file with 40 additions and 42 deletions.
82 changes: 40 additions & 42 deletions users/delete_handler.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,12 @@
// Copyright (c) Abstract Machines
// SPDX-License-Identifier: Apache-2.0

// The DeleteHandler is a cron job that runs periodically to delete users that have been marked as deleted
// for a certain period of time together with the user's policies from the auth service.
// The handler runs in a separate goroutine and checks for users that have been marked as deleted for a certain period of time.
// If the user has been marked as deleted for more than the specified period,
// the handler deletes the user's policies from the auth service and deletes the user from the database.

package users

import (
Expand Down Expand Up @@ -43,60 +49,52 @@ func NewDeleteHandler(ctx context.Context, clients postgres.Repository, auth mag
case <-ctx.Done():
return
case <-ticker.C:
handler.routine(ctx)
handler.handle(ctx)
}
}
}()
}

func (h *handler) routine(ctx context.Context) {
func (h *handler) handle(ctx context.Context) {
pm := mgclients.Page{Limit: defLimit, Offset: 0, Status: mgclients.DeletedStatus}

dbUsers, err := h.clients.RetrieveAll(ctx, pm)
if err != nil {
h.logger.Error("failed to retrieve users", slog.Any("error", err))
return
}
for {
dbUsers, err := h.clients.RetrieveAll(ctx, pm)
if err != nil {
h.logger.Error("failed to retrieve users", slog.Any("error", err))
break
}
if dbUsers.Total == 0 {
break
}

if dbUsers.Total > defLimit {
for i := defLimit; i < dbUsers.Total; i += defLimit {
pm.Offset = i
du, err := h.clients.RetrieveAll(ctx, pm)
if err != nil {
h.logger.Error("failed to retrieve users", slog.Any("error", err), slog.Any("page", pm))
return
for _, u := range dbUsers.Clients {
if time.Since(u.UpdatedAt) < h.deleteAfter {
continue
}

dbUsers.Clients = append(dbUsers.Clients, du.Clients...)
}
}

for _, u := range dbUsers.Clients {
if time.Since(u.UpdatedAt) < h.deleteAfter {
continue
}
deleteRes, err := h.auth.DeleteEntityPolicies(ctx, &magistrala.DeleteEntityPoliciesReq{
Id: u.ID,
EntityType: auth.UserType,
})
if err != nil {
h.logger.Error("failed to delete user policies", slog.Any("error", err))
continue
}
if !deleteRes.Deleted {
h.logger.Error("failed to delete user policies", slog.Any("error", svcerr.ErrAuthorization))
continue
}

deleteRes, err := h.auth.DeleteEntityPolicies(ctx, &magistrala.DeleteEntityPoliciesReq{
Id: u.ID,
EntityType: auth.UserType,
})
if err != nil {
h.logger.Error("failed to delete user policies", slog.Any("error", err))
continue
}
if !deleteRes.Deleted {
h.logger.Error("failed to delete user policies", slog.Any("error", svcerr.ErrAuthorization))
continue
}
if err := h.clients.Delete(ctx, u.ID); err != nil {
h.logger.Error("failed to delete user", slog.Any("error", err))
continue
}

if err := h.clients.Delete(ctx, u.ID); err != nil {
h.logger.Error("failed to delete user", slog.Any("error", err))
continue
h.logger.Info("user deleted", slog.Group("user",
slog.String("id", u.ID),
slog.String("name", u.Name),
))
}

h.logger.Info("user deleted", slog.Group("user",
slog.String("id", u.ID),
slog.String("name", u.Name),
))
}
}

0 comments on commit d94f975

Please sign in to comment.