The aim of this project is to develop an API project solution in C# by implementing object-oriented principles with well designed, extendable, readable and well tested code. Our Superhero Combat API integrates with a free public API https://superheroapi.com/ and gets statistics for comic book heroes so that they face each other in combat!
The machine running the application should have .NET 6.0 (or above) installed, with the following technologies & Dependencies:
- ASP.NET Core MVC 6 (Web API Project)
- Moq
- Postman or Swagger
- Entity Framework Mirgrations
- NuGet
- NUnit testing framework
- Visual Studio 2022
To run the application:
- Clone the repository to your computer
- Run the application, for example on Visual Studio
- After swagger loads with the API, feel free to enter two superhero names and your chosen battlefield.
- If you're unsure if the superhero exists, or are just curious how powerful the superhero is, use the GetSuperheroes endpoint to get your facts!
- Execute to let the battle begin!
There are two GET endpoints:
- This enables the user to check if a superhero exists. If yes, they can view the superhero's powerstats, eg:
{
"name": "Plastic Man",
"realName": "Patrick O'Brian",
"combat": 56,
"durability": 100,
"intelligence": 50,
"power": 100,
"speed": 23,
"strength": 63
}
- In the case of duplicates, the user can then see the different 'realName' of the superheroes and specify the intended one in the Combat end point.
- Example of a duplicate:
{
"name": "Batman",
"realName": "Terry McGinnis",
"combat": 90,
"durability": 55,
"intelligence": 81,
"power": 63,
"speed": 29,
"strength": 40
},
{
"name": "Batman",
"realName": "Bruce Wayne",
"combat": 100,
"durability": 50,
"intelligence": 100,
"power": 47,
"speed": 27,
"strength": 26
}
- Valid battlefields are:
Volcano, Area51, HighGPlanet, Multiverse, BankVault, OpenField
- In the case where there are multiple superheroes of the same name returned, you will then have to input your chosen [more specific] superhero by putting the Real Name, for example:
- The win margin is:
CloseCall, SolidWin, NoChance, Tie
There are 3 layers: The Controller, The Service and The Repository
This routes two HTTP GET requests to the appropriate service.
Two main functions are
- to return a list of superheroes
- to handle the combat. Where there is a combat, the service also checks the validity of the battlefield and handles the battle.
- This layer communicates with an external API (as mentioned in the introduction) to retrieve superhero data and filters the data returned.
- It also handles exceptions, for example duplication of superheroes and errors/NULL values returned by the external API.
- Data is returned in JSON format and this is converted to useable data classes.
This is the Combat Flow diagram:
It would be interesting to be able to make teams of more than one superhero, and have them fight against each other.
Collect and analyse who is the most popular requested superhero, or which superhero wins the most/least.
Have an eye-catching, easy to use front-end that enables the user to see what powerstats a chosen superhero has, or in the case of duplicates, an easy option to choose which one they mean.