About • Key Features • Demo • How To Use • API Usage • Contributions • More info • License
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.
- 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
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.
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
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
This project has been made possible by:
- Azure DevOps - Our Azure DevOps board
MIT