API Gateway Development for GoNorth Tool

Job ID: 38427307

Budget: $30 – $250 USD

I need an API gateway created for GoNorth tool. GoNorth is a web application used for planning the story and world of RPGs or other open world games.
The tool is open source and available on GitHub (https://github.com/steffendx/GoNorth/tree/master). However, the tool does not provide a clean API. It has a swagger available, but it is just a proxy for the underlying MongoDB, and a lot of data is unreadable that way.

The API should be written in JavaScript and be deployable as a web app. It must only read the data, not modify anything.

I'm specifically interested in NPCs and dialogues. Dialogues also will be accessing NPC properties, quest values and items.

It can be simplified to one JSON endpoint that has everything:
list of npcs:
- name
- all custom fields
- dialogue

Dialogues are node-based. Each node links to one or more nodes (depending on conditions). Starting node could be a condition itself.


The job will require you to study the tool to some extent. For example, dialogue conditions and actions are written as numeric enums in the database, which does not satisfy me. The API should list them as text enums.

You can find basic condition types here:
https://github.com/steffendx/GoNorth/blob/84c60451babe76ca1ae0371e5110cc20821e60fe/Services/Export/Dialog/ConditionRendering/ConditionType.cs#L6

Note that each condition type has another set of operators, sometimes another field, and always the value field.
Example conditions:
Check NPC Value - it has list of predefined, configurable list of NPC associated fields (should be text in API), then a condition field (greated, lesser, equal, etc., should be enum in API) and the value itself. So a condition like NPC has at least 10 speed can be created.
Check Player Inventory - it has an operator (e.g. has at least, should be enum in API), numeric value and item. So a condition like NPC has 100 gold in their inventory can be created.

The swagger is available here: https://github.com/steffendx/GoNorth/issues/116#issuecomment-1458950128

But as I said, the task is not as simple as mapping it into an API.

As I'm running GoNorth from Docker, the swagger API is not available. Instead, you should fall back to direct MongoDB access.

I'd appreciate if you enhance your bid with statement about your passion for the RPG games to filter out bots.
Related categories: JavaScript Software Architecture Node.js API MongoDB