package repository import ( "context" "gateway/internal/model/permission/domain/entity" "gateway/internal/model/permission/domain/enum" ) // UserRoleRepository persists user↔role assignments. // // ReplaceForSource is the building block used by SyncFromX flows: it // removes existing assignments of the given source for (tenant_id, uid) // and inserts the new set in one transaction-equivalent step. Manual // assignments are untouched. type UserRoleRepository interface { Insert(ctx context.Context, ur *entity.UserRole) error BulkInsert(ctx context.Context, urs []*entity.UserRole) error Delete(ctx context.Context, tenantID, uid, roleID string) error DeleteByRole(ctx context.Context, tenantID, roleID string) (int64, error) ReplaceForSource( ctx context.Context, tenantID, uid string, source enum.RoleSource, roleIDs []string, ) error ListByUser(ctx context.Context, tenantID, uid string) ([]*entity.UserRole, error) ListByRole(ctx context.Context, tenantID, roleID string) ([]*entity.UserRole, error) }