fix: project by id loads project from view and from eventstore (#315)

This commit is contained in:
Silvan 2020-06-30 07:54:39 +02:00 committed by GitHub
parent 3937e76947
commit 3c56fe6a0f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 25 additions and 1 deletions

View File

@ -4,6 +4,7 @@ import (
"context"
"strings"
"github.com/caos/logging"
caos_errs "github.com/caos/zitadel/internal/errors"
es_int "github.com/caos/zitadel/internal/eventstore"
"github.com/caos/zitadel/internal/eventstore/models"
@ -36,9 +37,24 @@ type ProjectRepo struct {
func (repo *ProjectRepo) ProjectByID(ctx context.Context, id string) (*proj_model.ProjectView, error) {
project, err := repo.View.ProjectByID(id)
if err != nil {
if err != nil && !caos_errs.IsNotFound(err) {
return nil, err
}
events, err := repo.ProjectEvents.ProjectEventsByID(ctx, id, project.Sequence)
if err != nil {
logging.Log("EVENT-V9x1V").WithError(err).Debug("error retrieving new events")
return model.ProjectToModel(project), nil
}
viewProject := *project
for _, event := range events {
err := project.AppendEvent(event)
if err != nil {
return model.ProjectToModel(&viewProject), nil
}
}
return model.ProjectToModel(project), nil
}

View File

@ -71,6 +71,14 @@ func (es *ProjectEventstore) ProjectByID(ctx context.Context, id string) (*proj_
return model.ProjectToModel(project), nil
}
func (es *ProjectEventstore) ProjectEventsByID(ctx context.Context, id string, sequence uint64) ([]*es_models.Event, error) {
query, err := ProjectByIDQuery(id, sequence)
if err != nil {
return nil, err
}
return es.FilterEvents(ctx, query)
}
func (es *ProjectEventstore) CreateProject(ctx context.Context, project *proj_model.Project) (*proj_model.Project, error) {
if !project.IsValid() {
return nil, caos_errs.ThrowPreconditionFailed(nil, "EVENT-9dk45", "Errors.Project.Invalid")