package repository import ( "context" "gateway/internal/model/permission/domain/entity" ) // RoleUpdate carries optional patches for RoleRepository.Update. Pointer // fields preserve "absent" semantics so the usecase can run a partial // update without overwriting unchanged fields. type RoleUpdate struct { DisplayName *string Status *string } // RoleRepository persists tenant-scoped Role definitions. type RoleRepository interface { Insert(ctx context.Context, role *entity.Role) error GetByID(ctx context.Context, tenantID, id string) (*entity.Role, error) GetByKey(ctx context.Context, tenantID, key string) (*entity.Role, error) ListByTenant(ctx context.Context, tenantID string) ([]*entity.Role, error) ListByTenantAndIDs(ctx context.Context, tenantID string, ids []string) ([]*entity.Role, error) Update(ctx context.Context, tenantID, id string, update *RoleUpdate) (*entity.Role, error) Delete(ctx context.Context, tenantID, id string) error }