/cloud-applications-20-21-citygo

A city game app with API and admin panel

Primary LanguageTypeScript

CityGo

A city game app with API and admin panel

Panel Build License

AboutKey FeaturesDemoHow To UseAPI UsageContributionsMore infoLicense

About

CityGo is a project created by 5 IT students from Antwerp. With the CityGo app you can play a city game in Antwerp. The app has a map on which various monuments or sights are indicated which you can visit. Every sight has a challenge you need to complete. When completing a challenge you get rewarded with an item which has something to do with the city Antwerp. In addition to this, there are also various items scattered around the map which you can collect. The goal is to collect as many items and complete as many challenges as you can while exploring the city. Besides that you can also see other active players in the city on the map, so you can team up or compete with others and make friends inside the app.

This project consists of 3 parts. The app itself with an API in the backend and a panel to manage the game. The app is developed in react native, the API is an ASP.NET Core API, and the admin panel is developed with Angular and the ngx-admin library.

Key Features

  • Learn about the city trough a game
  • Map with realtime userlocation
  • See other players's location on a map
  • Ability to catch items
  • Compete with other players
  • Play certain challanges depending on the users location
  • Ability to register a user profile
  • Profile page
  • Ability to send and accept a friend requests
  • Geofencing
  • Login using Auth0
  • Admin panel to control the game and user settings
  • API with clean code architecture

Demo

Admin panel
You can find a demo of the panel here. It's hosted on Firebase hosting.
Username: panel@citygo.xyz
Password: admin

API
You can find a demo of the API here. The API is hosted on an Azure Web Service with an SQL Database. For more info on how you should use the API, navigate to API Usage.

How To Use

To clone and run this application, you'll need Git and Node.js (which comes with npm) installed on your computer.

Run the app on your device
You will also need Expo to be able to run the app on your device. Start with downloading the Expo client app from the Andriod Play Store or form the iOS App Store. Expo client allows you to open up apps that are being served through Expo CLI.

# Clone the repository (if you havn't done this yet)
$ git clone https://github.com/AP-Elektronica-ICT/ap-valley-20-21-apv12/

# Move into the app folder
$ cd ap-valley-20-21-apv12/CityGoApp

# Install the expo-cli globally
$ npm install --global expo-cli

# Start expo
$ expo start

# Scan the QR code with the expo-client app or emulate the app

Setup the admin panel
The admin panel acts as an interface between you and the API. This allows you to manage sights, challenges, items and users without having to run a single request.

# Clone the repository (if you havn't done this yet)
$ git clone https://github.com/AP-Elektronica-ICT/ap-valley-20-21-apv12/

# Move into the panel folder
$ cd ap-valley-20-21-apv12/AdminPanel

# Install dependencies
$ npm install

# Run the app on your browser
$ npm start

Setup the API
You will need Visual Studio 2019 and .NET Core 3.1 to run the API.

# Clone the repository (if you havn't done this yet)
$ git clone https://github.com/AP-Elektronica-ICT/ap-valley-20-21-apv12/

# Open the CityGoASPBackEnd folder with Visual Studio

API Usage

The API is made with ASP.NET CORE 3.1 written in the clean code architecture.
Here you can find all possible requests which get handled by the API:

Challenges requests

Get all challenges without relations

GET /Challenges

Get a challenge by id without relations

GET /Challenges/{cid}

Get a challenge by id with the relation of items

GET /Challenges/{cid}/Items

Get a challenge by id with the relation of sights

GET /Challenges/{cid}/Sights

Create a challenge

POST /Challenges

Update a challenge

PUT /Challenges

Create a relation with an item to a challenge

PUT /Challenges/{cid}/Items/{iid}

Create a relation with a sight to a challenge

PUT /Challenges/{cid}/Sights/{sid}

Delete a challenge by id

DELETE /Challenges/{cid}

cid = challengeId, sid = sightId, uid = userId, iid = itemId

Items requests

Get all items without relations

GET /Items

Get an item by id without relations

GET /Items/{iid}

Create an item

POST /Items

Update an item

PUT /Items

Delete an item by id

DELETE /Items/{iid}

iid = itemId

Sights requests

Get all sights without relations

GET /Sights

Get all sights with all relations

GET /Sights/All

Get a sight by id without relations

GET /Sights/{sid}

Get a sight by id with the relation of challenges

GET /Sights/{sid}/Challenges

Create a challenge

POST /Sights

Update a sight

PUT /Sights

Delete a sight by id

DELETE /Sights/{sid}

sid = sightId

Users requests

Get all users without relations

GET /Users

Get all users with all relations

GET /Users/All

Get all users with all their friends

GET /Users/Friends

Get a user by id without relations

GET /Users/{uid}

Get a user by id with the relation of items

GET /Users/{uid}/Items

Get a user by id with the relation of challenges

GET /Users/{uid}/Challenges

Get a user by id with the relation of friends

GET /Users/{uid}/Friends

Get a user by id with the relation of friend requests

GET /Users/{uid}/FriendRequests

Create a user

POST /Users

Update a user

PUT /Users

Create a relation with an item to a user

PUT /Users/{uid}/Items/{iid}

Create a relation with a challenge to a user

PUT /Users/{uid}/Challenges/{cid}

Create a relation with a friend to a user

PUT /Users/{uid}/Friends/{fid}

Create a relation with a friend request to a user

PUT /Users/{uid}/FriendRequests/{fid}

Delete a user by id

DELETE /Users/{uid}

Get a user by email

GET /Users/{email}/Email

Change profile picture of a user

PUT /Users/ProfilePicture

cid = challengeId, sid = sightId, uid = userId, iid = itemId, fid = friendId

Contributions

This project has been made possible by:

More info

License

MIT


GitHub @cloud-applications-20-21-citygo