MCPcopy Create free account
hub / github.com/google/go-cloud / createOrFindOrder

Function createOrFindOrder

samples/order/processor.go:130–160  ·  view source on GitHub ↗

createOrFindOrder either creates a new order from req (the usual case), or returns an existing unfinished order. It returns a nil *Order if the order exists and is finished, that is, this request message is a duplicate. createOrFindOrder returns a non-nil error only for database problems.

(ctx context.Context, coll *docstore.Collection, req *OrderRequest)

Source from the content-addressed store, hash-verified

128// finished, that is, this request message is a duplicate.
129// createOrFindOrder returns a non-nil error only for database problems.
130func createOrFindOrder(ctx context.Context, coll *docstore.Collection, req *OrderRequest) (*Order, error) {
131 // See if there is already a document for this order.
132 order := &Order{ID: req.ID}
133 err := coll.Get(ctx, order)
134 if err != nil {
135 if gcerrors.Code(err) != gcerrors.NotFound {
136 return nil, err
137 }
138 // Normal case: the order wasn't found, because it hasn't been created
139 // yet. Create it.
140 order = &Order{
141 ID: req.ID,
142 Email: req.Email,
143 InImage: req.InImage,
144 CreateTime: req.CreateTime,
145 }
146 if err := coll.Create(ctx, order); err != nil {
147 return nil, err
148 }
149 return order, nil
150 }
151 if order.FinishTime.IsZero() {
152 // The order exists, but was not finished. Either it was abandoned by the processor that
153 // was working on it (probably because the processor died), or it is in progress. Assume
154 // that it was abandoned, and process it.
155 return order, nil
156 }
157 // The order exists and was finished. This is most likely the result of a pubsub redelivery.
158 // We simply ignore it.
159 return nil, nil
160}
161
162// processOrder processes the order request.
163func (p *processor) processOrder(ctx context.Context, order *Order) error {

Callers 1

handleRequestMethod · 0.85

Calls 3

CodeFunction · 0.92
GetMethod · 0.45
CreateMethod · 0.45

Tested by

no test coverage detected