package mailstore import ( "context" "database/sql" "errors" "fmt" "galaxy/mail/internal/domain/common" deliverydomain "galaxy/mail/internal/domain/delivery" "galaxy/mail/internal/service/acceptauthdelivery" ) var _ acceptauthdelivery.Store = (*Store)(nil) // CreateAcceptance writes one auth-delivery acceptance write set inside one // BEGIN … COMMIT transaction. Idempotency races surface as // acceptauthdelivery.ErrConflict. func (store *Store) CreateAcceptance(ctx context.Context, input acceptauthdelivery.CreateAcceptanceInput) error { if store == nil { return errors.New("create auth acceptance: nil store") } if ctx == nil { return errors.New("create auth acceptance: nil context") } if err := input.Validate(); err != nil { return fmt.Errorf("create auth acceptance: %w", err) } return store.withTx(ctx, "create auth acceptance", func(ctx context.Context, tx *sql.Tx) error { if err := insertDelivery(ctx, tx, input.Delivery, input.Idempotency, input.Idempotency.ExpiresAt, input.FirstAttempt); err != nil { if isUniqueViolation(err) { return acceptauthdelivery.ErrConflict } return fmt.Errorf("create auth acceptance: insert delivery: %w", err) } if input.FirstAttempt != nil { if err := insertAttempt(ctx, tx, *input.FirstAttempt); err != nil { return fmt.Errorf("create auth acceptance: insert first attempt: %w", err) } } return nil }) } // GetDelivery loads one accepted delivery by its identifier. func (store *Store) GetDelivery(ctx context.Context, deliveryID common.DeliveryID) (deliverydomain.Delivery, bool, error) { if store == nil { return deliverydomain.Delivery{}, false, errors.New("get delivery: nil store") } operationCtx, cancel, err := store.operationContext(ctx, "get delivery") if err != nil { return deliverydomain.Delivery{}, false, err } defer cancel() record, ok, err := loadDeliveryByID(operationCtx, store.db, deliveryID) if err != nil { return deliverydomain.Delivery{}, false, fmt.Errorf("get delivery: %w", err) } return record, ok, nil }