GithubHelp home page GithubHelp logo

jonathanrlouie / katam-randomizer Goto Github PK

View Code? Open in Web Editor NEW
0.0 2.0 0.0 261 KB

But for realsies this time tho????

License: MIT License

Rust 81.41% Shell 0.35% HTML 0.68% Dhall 9.86% PureScript 4.99% Nix 2.72%

katam-randomizer's People

Contributors

jonathanrlouie avatar

Watchers

James Cloos avatar  avatar

katam-randomizer's Issues

Implement Graph

Acceptance Criteria:

  • Implement Graph trait using petgraph
  • Add tests for graph methods (edge swapping, adding nodes, removing nodes, checking if seed is beatable)

Spike: Logging

Description: Currently the randomizer doesn't do any logging. I need to investigate what solutions exist in Rust for logging and choose a solution that I think fits best.

Acceptance Criteria:

  • Investigate logging libraries/facades
  • Choose a library

Create better solution for error handling with Rocket and Anyhow

Description: Currently the randomizer throws away any errors returned because Rocket requires the Responder trait to be implemented when returning a result, but anyhow::Error can't have the Responder trait implemented for it, since it breaks coherence rules. We need to return an error that actually provides the proper error information, whether that uses anyhow or not.

Acceptance Criteria:

  • Return error with proper error information
  • Add integration test for this

Spike: Investigate Fetch replacement

Description: Most examples I've seen online for having a front-end React app talk to a back-end server involve using fetch so that the React app can act as an HTTP client to the back-end. I imagine Halogen is no different, so there's likely going to be some way to use something like fetch in purescript/Halogen.

Acceptance Criteria:

  • figure out if there's a way to use fetch/there is a replacement for fetch
  • add it into prototype for Halogen routing

Implement RNG trait

Description:
The RNG trait needs to be implemented.

Acceptance Criteria:

  • implement the RNG trait by using rand

Implement GameDataLoader

Description:
The GameDataLoader trait should be responsible for loading the game graph from a file at runtime. It should be loaded exactly once.

Acceptance Criteria:

  • Implement trait
  • Test implementation

Spike: PureScript for Frontend

Description:
It appears that PureScript has React bindings and frameworks for designing and implementing web app front ends. It may be worth looking into how this is done to see if it's viable for this project.

Acceptance Criteria:

  • Small prototype Rocket application using halogen

Design UI layout for web app

Description:
Currently, there is no design for the UI layout for our web app. Ideally, it should look professional and fairly thematic (Kirby related). The UI also shouldn't be annoying to use.

Acceptance Criteria:

  • Good UX
  • Accessible
  • Kirby themed
  • Professional looking (similar to existing randomizers)

Implement Config

Acceptance Criteria:

  • Implement Config trait
  • Test configuration loading

Spike: React integration

Acceptance Criteria:

  • Investigate how React can be integrated into Rocket app
  • See if React can/should be used for displaying download link when responding to post request

Implement Business Logic

Description:
There is currently no business logic implemented yet for the application. We need to add it.

Acceptance Criteria:

  • Business logic implemented using stubbed out trait implementations
  • Add tests if necessary

Setup GitHub Actions for CI

Description:
Currently, we have no CI pipeline for automated testing. It would be nice to have this set up to run on each PR and daily.

Acceptance Criteria:

  • Set up GHA
  • Add workflow to run tests when a PR is submitted (ensure that all checks pass before PR is allowed)
  • Add workflow to run tests every day/night

Implement ROM Writer

Acceptance Criteria:

  • Implement the ROM writer trait
  • Add tests for writing ROMs

Spike: Investigate purescript-routing

Description: To talk to the Rocket server, we have to do a bit of routing first to determine what requests to send from the Halogen side. Ideally, I'd like to be able to know how the purescript-routing library works before I start using it.

Acceptance Criteria:

  • Learn how to use purescript-routing library
  • Create small prototype with it, if it seems like the right choice

Write up Documentation - What is the randomizer + How to use the randomizer

Description:
Currently, there is no documentation on how to use the randomizer. We need to add a README to the repo, as well as instructions on the web app for using the randomizer.

Acceptance Criteria:

  • Add README explaining what this project is and how to use it
  • Add documentation to web app explaining what it is and how it's used

Architecture and Design diagram

Acceptance criteria:

  • Create diagram detailing abstraction boundaries of application
  • Diagram should show all major components of the randomizer (randomizer, presentation layer, JSON/config parsing layer)

Dockerize Randomizer

Description: We need to Dockerize our Randomizer so that we can easily run integration tests against it. It may also help with deployment later.

Acceptance Criteria:

  • Create Docker compose file to spin up containers for both the frontend server and backend server

Add appropriate badges to the repo

Description: Our repo has no badges right now. It would be nice to have a code coverage badge and maybe some other badges, like a badge for whether or not the build is failing.

Acceptance Criteria:

  • Add code coverage badge
  • Add build status badge

Add LICENSE file

Description:
Currently, the repo has no license file. This needs to be decided on and added.

Acceptance Criteria:

  • Add appropriate open source license

Spike: Figure out how to use fetch to send form data in request to backend

Description:
Now that we know we can use the Milkis library to call fetch to send requests to our backend, we need to figure out how to send form data, since that is how we will be passing the configuration options to the randomizer.

Acceptance Criteria:

  • Create prototype that sends request with some form data to the backend

Write up Documentation - Contributing guide

Description:
There is no contributing guide yet, so nobody has any guidelines on how to contribute to the project. This needs to be written and added to the project.

Acceptance Criteria:

  • Add CONTRIBUTING.md file to repo explaining how to contribute to the project

Prototype

Acceptance criteria:

  • create small Rocket application that allows uploading files, processing the files, and then downloading the files

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.