diff options
Diffstat (limited to 'bug/op_create.go')
-rw-r--r-- | bug/op_create.go | 77 |
1 files changed, 9 insertions, 68 deletions
diff --git a/bug/op_create.go b/bug/op_create.go index 9c972195..ed2fd994 100644 --- a/bug/op_create.go +++ b/bug/op_create.go @@ -1,7 +1,6 @@ package bug import ( - "encoding/json" "fmt" "github.com/MichaelMure/git-bug/entity" @@ -17,53 +16,38 @@ var _ dag.OperationWithFiles = &CreateOperation{} // CreateOperation define the initial creation of a bug type CreateOperation struct { - OpBase + dag.OpBase Title string `json:"title"` Message string `json:"message"` Files []repository.Hash `json:"files"` } func (op *CreateOperation) Id() entity.Id { - return idOperation(op, &op.OpBase) -} - -// OVERRIDE -func (op *CreateOperation) SetMetadata(key string, value string) { - // sanity check: we make sure we are not in the following scenario: - // - the bug is created with a first operation - // - Id() is used - // - metadata are added, which will change the Id - // - Id() is used again - - if op.id != entity.UnsetId { - panic("usage of Id() after changing the first operation") - } - - op.OpBase.SetMetadata(key, value) + return dag.IdOperation(op, &op.OpBase) } func (op *CreateOperation) Apply(snapshot *Snapshot) { // sanity check: will fail when adding a second Create if snapshot.id != "" && snapshot.id != entity.UnsetId && snapshot.id != op.Id() { - panic("adding a second Create operation") + return } snapshot.id = op.Id() - snapshot.addActor(op.Author_) - snapshot.addParticipant(op.Author_) + snapshot.addActor(op.Author()) + snapshot.addParticipant(op.Author()) snapshot.Title = op.Title comment := Comment{ id: entity.CombineIds(snapshot.Id(), op.Id()), Message: op.Message, - Author: op.Author_, + Author: op.Author(), UnixTime: timestamp.Timestamp(op.UnixTime), } snapshot.Comments = []Comment{comment} - snapshot.Author = op.Author_ + snapshot.Author = op.Author() snapshot.CreateTime = op.Time() snapshot.Timeline = []TimelineItem{ @@ -82,13 +66,6 @@ func (op *CreateOperation) Validate() error { return err } - if len(op.Nonce) > 64 { - return fmt.Errorf("create nonce is too big") - } - if len(op.Nonce) < 20 { - return fmt.Errorf("create nonce is too small") - } - if text.Empty(op.Title) { return fmt.Errorf("title is empty") } @@ -103,45 +80,9 @@ func (op *CreateOperation) Validate() error { return nil } -// UnmarshalJSON is a two step JSON unmarshalling -// This workaround is necessary to avoid the inner OpBase.MarshalJSON -// overriding the outer op's MarshalJSON -func (op *CreateOperation) UnmarshalJSON(data []byte) error { - // Unmarshal OpBase and the op separately - - base := OpBase{} - err := json.Unmarshal(data, &base) - if err != nil { - return err - } - - aux := struct { - Nonce []byte `json:"nonce"` - Title string `json:"title"` - Message string `json:"message"` - Files []repository.Hash `json:"files"` - }{} - - err = json.Unmarshal(data, &aux) - if err != nil { - return err - } - - op.OpBase = base - op.Nonce = aux.Nonce - op.Title = aux.Title - op.Message = aux.Message - op.Files = aux.Files - - return nil -} - -// Sign post method for gqlgen -func (op *CreateOperation) IsAuthored() {} - func NewCreateOp(author identity.Interface, unixTime int64, title, message string, files []repository.Hash) *CreateOperation { return &CreateOperation{ - OpBase: newOpBase(CreateOp, author, unixTime), + OpBase: dag.NewOpBase(CreateOp, author, unixTime), Title: title, Message: message, Files: files, @@ -153,7 +94,7 @@ type CreateTimelineItem struct { CommentTimelineItem } -// Sign post method for gqlgen +// IsAuthored is a sign post method for gqlgen func (c *CreateTimelineItem) IsAuthored() {} // Convenience function to apply the operation |