package invitationdb import ( "context" "github.com/tech/sendico/pkg/merrors" "github.com/tech/sendico/pkg/model" "github.com/tech/sendico/pkg/mutil/mzap" "go.mongodb.org/mongo-driver/bson/primitive" "go.uber.org/zap" ) // SetArchived sets the archived status of an invitation // Invitation supports archiving through PermissionBound embedding ArchivableBase func (db *InvitationDB) SetArchived(ctx context.Context, accountRef, organizationRef, invitationRef primitive.ObjectID, archived, cascade bool) error { db.DBImp.Logger.Debug("Setting invitation archived status", mzap.ObjRef("invitation_ref", invitationRef), zap.Bool("archived", archived), zap.Bool("cascade", cascade)) res, err := db.Enforcer.Enforce(ctx, db.PermissionRef, accountRef, organizationRef, invitationRef, model.ActionUpdate) if err != nil { db.DBImp.Logger.Warn("Failed to enforce archivation permission", zap.Error(err), mzap.ObjRef("invitation_ref", invitationRef)) return err } if !res { db.DBImp.Logger.Debug("Permission denied for archivation", mzap.ObjRef("invitation_ref", invitationRef)) return merrors.AccessDenied(db.Collection, string(model.ActionUpdate), invitationRef) } // Get the invitation first var invitation model.Invitation if err := db.Get(ctx, accountRef, invitationRef, &invitation); err != nil { db.DBImp.Logger.Warn("Error retrieving invitation for archival", zap.Error(err), mzap.ObjRef("invitation_ref", invitationRef)) return err } // Update the invitation's archived status invitation.SetArchived(archived) if err := db.Update(ctx, accountRef, &invitation); err != nil { db.DBImp.Logger.Warn("Error updating invitation archived status", zap.Error(err), mzap.ObjRef("invitation_ref", invitationRef)) return err } // Note: Currently no cascade dependencies for invitations // If cascade is enabled, we could add logic here for any future dependencies if cascade { db.DBImp.Logger.Debug("Cascade archiving requested but no dependencies to archive for invitation", mzap.ObjRef("invitation_ref", invitationRef)) } db.DBImp.Logger.Debug("Successfully set invitation archived status", mzap.ObjRef("invitation_ref", invitationRef), zap.Bool("archived", archived)) return nil }