quarkusio / quarkus-super-heroes

Quarkus sample application - Super Heroes
Apache License 2.0
272 stars 155 forks source link

Allowing "fair" fights #250

Open edeandrea opened 1 year ago

edeandrea commented 1 year ago

While requesting random fights is great, what if we introduced a "fairness" setting in the UI. Sometimes we get fights that don't seem fair, where one fighter is a level 10 and the other is 10,000,000.

We could have a dropdown/radio button/whatever that, when selected in the UI, gave a choice to the user. Something like

We can certainly come up with better names/categories, but whatever we come up with we'd assign ranges of fighter levels to each term. The weakling would be anything <= some number and the Super-duper strong would be anything >= some number.

We'd pass that on the getRandomFighters call to rest-fights, which would in turn pass to the rest-heroes & rest-villains. rest-heroes & rest-villains would guarantee that only a fighter between those levels would be returned.

We could use this scenario to really showcase consumer-driven contract testing where making sure rules within the contract between consumers & producers stipulates the requirement in the contract.

So for example, in the rest-fights consumer contract you'd have something in the contract that said

When I (the rest-fights consumer requests a random hero/villain between a certain level, the level attribute in the response from the rest-heroes/rest-villains service should be between the values passed in the request.

Thats the kind of thing that can't be done using straight OpenAPI.

edeandrea commented 1 year ago

@cescoffier / @agoncal / @holly-cummins thoughts?

cescoffier commented 1 year ago

In my importer/exporter I filter out these giants. But yes, we could imagine adding a parameter.

Another thing I discussed with @agoncal 🐰 a long time ago is to introduce 'universe', and having dedicated hero and villain services. The goal is to illustrate Stork.

holly-cummins commented 1 year ago

+1 from me. :)

I see two options for how we control it in the UI:

I guess the implementation complexity is similar for each, apart from a bit of extra UI work for the user-control. The user-control may need less explanation when we show it, which would be a good thing - but if we're in a hurry, we could start with the ratchet.

(I like the universe idea, too, although in the short term it doesn't help my and Eric's demo. :) )