Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

harshadmanglani/polaris

Open more actions menu

Repository files navigation

An extremely light weight workflow orchestrator for Golang.

Installation | Documentation | Twitter | Inspiration

Quick overview

Polaris helps you create, store and run workflows. A workflow is a series of multiple steps, and can often be long running.

You don't need to worry about:

  • Sequence of steps (it will figure out which the sequence along with the ones that can run concurrently)
  • Explicitly pausing workflows (when it runs out of new data to move the workflow ahead, it pauses)

Payments and Fulfilment

Polaris is especially useful for payments, e-commerce and fulfilment use cases. Consider a payment gateway trying to process payments via cards and netbanking.

Often, a lot of the logic would overlap - such as invoicing, settlements, etc. Polaris can neatly structure your code, making it more maintainable than ever.

type CardPaymentWorkflow struct{}

func (w CPW) GetWorkflowMeta() WorkflowMeta {
    return WorkflowMeta{
        Builders: []IBuilder{
            InitiateReq{},
            EncryptCardInfo{},
            TokenizeCard{},
            ProcessPayment{},
            OTPVerification{},
            PaymentComplete{},
            GenerateInvoice{},
        },
        TargetData: PaymentCompletedData{},
    }
}
type NetbankingPaymentWorkflow struct{}

func (w NPW) GetWorkflowMeta() WorkflowMeta {
    return WorkflowMeta{
        Builders: []IBuilder{
            InitiateReq{},
            FetchBankRedirectURL{},
            RedirectAndCollect{},
            ProcessBankPayment{},
            OTPVerification{},
            PaymentComplete{},
            GenerateInvoice{},
        },
        TargetData: PaymentCompletedData{},
    }
}

Each builder (workflow's unit of work) would maintain and process some logic, which can be reused across multiple workflows.

For example,

type TokenizeCard struct {
    TokenService TokenService
    DB           TokenStore
}

func (b TokenizeCard) GetBuilderInfo() BuilderInfo {
    return BuilderInfo{
        Consumes: []IData{ EncryptedCardData{} },
        Produces: CardTokenData{},
    }
}

func (b TokenizeCard) Process(ctx BuilderContext) IData {
    enc := ctx.Get(EncryptedCardData{})
    token := b.TokenService.Generate(enc)
    b.DB.Save(token)
    return CardTokenData{ Token: token }
}

For more details, dive into the docs!

Packages

No packages published

Contributors 2

  •  
  •  

Languages

Morty Proxy This is a proxified and sanitized view of the page, visit original site.