50 lines
2.2 KiB
Go
50 lines
2.2 KiB
Go
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
|
|
}
|