Skip to content

Latest commit

 

History

History
1091 lines (914 loc) · 80.1 KB

M3-CMPE451.md

File metadata and controls

1091 lines (914 loc) · 80.1 KB

Table of Contents

Project Assesment

Teamwork

This one year long journey was particularly a teaching and enjoyable experience for us.
Starting in CMPE352, most of the group members did not know each other, yet the group got to know each other very quickly and adapted to working as a team.
Throughout the project, everyone had busy periods in their schedules, but the team managed to fill in for that person, and that person also compensated for that period at a later time.
Moreover, at the beginning of CMPE451, there were people leaving and joining, but the team handled the transition very smoothly.
To sum up, Group 2 as a team managed to start from zero and became an actual embodiment of teamwork.

Technical Skills

At the beginning of CMPE352, few of us had web development experience, let alone specialization in a topic.
There were a few of us who had the knowledge of backend, mobile, and frontend, and from time to time we had tutorial sessions in the team.
At the end of CMPE451, all of the group contributed to the application, some of us learning the frameworks from knowing nothing and being able to come up with the desired product.
The least of all, every group member became better at some aspect of web development.

Customer Interaction

One of the things the Group 2 did the best is probably interacting with the customer.
We, as a team, know that we could enhance different aspects of the final product further, but knowing that we have a limited budget in terms of time and workforce,
we managed the customer expectation and delivered almost all of the requirements just in time.
We were careful enough to look out for the borders that were drawn by the customers, in terms of time, product, deliverables and further.
One of the things the process thought us is: It is very important to deliver what is being asked for: Nothing more is required, nothing less is acceptable.

Final Product

At the end of the day, the experience we had and learnings along the journey led to our investment platform, TrAiders.
In terms of specialty, we have learned new things in economics and the investment world. The final product has all the functionalities being asked for in the requirements.
Users can make investments, track their investments, track the economic state in the parities, can read comments and articles, can follow events and interact with other users through different media.
The system also has <text, image> to <text,image> annotations, which is using the W3C protocol, and that system running on a different server as well.

Final Comments

One of the very important lessons that the process thought us is attention to detail.
Simply just by paying attention to customer's words or what is written on the paper can lead to great satisfaction.
One can find these details in any part of the TrAiders product: The avatars, the ease of use for the users, the annotation system being run exactly by the customer's description.
We, as Group 2 are very happy with the final product that we have, but most importantly the teamwork and friendship we have built throughout the journey, and everyone having value added to their lives.

Deliverables

Deliverable: Status: Update Frequency Description
1- GitHub Wiki Complete Weekly Accessible github wiki pages, up-to-date information related to project can be found.
2- GitHub Issues & Pull Requests Complete As improvement needed Issue labels, templates, workflow.
3- Meeting Notes Complete Weekly Publishing meeting notes in GitHub Wiki.
4- Requirements Complete As improvement needed Sharing the requirements analysis related to the project. Updating as needed.
5- Mockups Complete As improvement needed To stay on the same page with the customer.
6- Design Diagrams Complete Per feedback for now Posting design diagrams to wiki page
7- Project Plan Complete - Preparing the project plan
8- API Complete Weekly Backend of the project. Related endpoints, management of DB etc.
9- API Documentation Complete As improvement needed API Documentation for the users of endpoints.
10- Deployment and Security Complete As improvement needed Deployment of the project and accessibility
11- Web Project, Frontend Complete Weekly Frontend project and accessibility
12- Mobile App Complete Weekly Mobile application and accessibility
13- Weekly Milestones Complete Weekly To increase efficiency and throughput in delivery
14- System Manual Complete As needed Describes system requirements and deployment process
15- User Manaul Complete As needed Instructs how users can start using & utilize the system
16- Annotation Model Complete As update needed Demonstrate the implemented data annotation Model

1- GitHub Wiki: We are updating our wiki page as needed, pushing meeting notes and keeping everything from requirements to group members updated on there.

2- GitHub Issues & PRs: We still use our previous convention. All can be traced in the repo. Everyone creates their own issue, people should not be closing their issue without the review of at least 2 other people, preferably from the same team. Issue Templates and PR templates are used during the creation. As a new thing, we left using Travis as our continuous integration tool and we started to use GitHub Actions.

3- Meeting Notes: Meeting notes are still accessible through the wiki page. We are always utilizing those to refer to action items, remember our agenda and goals.

4- Requirements: We have rarely updated our requirements so far, but we always keep reviewing them during the implementation phase.

5- Mockups: You can visit the mockups section to see all the mockups we've done so far.

6- Design Diagrams: We finalized the implementation, but there will still be updates as needed. Final version of the class diagrams can be found at this page page.

7- Project Plan: Project plan can also be found below. As mentioned previously, we have decided to take a requirement oriented approach. Thus in the project plan, the tabs refer to our requirements. Each week we plan to implement a couple of those.

8- API: Traiders API can be accessed at api.traiders.tk.

9- API Documentation: Traiders API documentations can be accessed at api.traiders.tk/docs api.traiders.tk/redocs

10- Deployment and Security: We frequently deployed our application's latest version throughout the development process so that it would always be up to date. In addition to that we deployed an annotation server to bring annotation support to our application. Annotation server is independent from Traiders servers and can be accessed at https://annotation.traiders.tk/.

11- Web Project, Frontend: Our web application is up and running at traiders.tk. Users can register, sign in, choose an avatar, list & view & like & comment (on) articles, list & tracks events, list & follow users, list & view & comment (on) equipment, list & see details with charts for several parities in different category, add assets, make investments, create & follow portfolios, making text or image annotations for articles, sign-up or sign-in with Google, make semantic search. get recommendations, see notifications,

12- Mobile App: The latest version of our mobile application will always be downloadable at traiders.tk/mobile. Users can register, sign in, choose an avatar, list & view & like & comment (on) articles, list & track events, list & follow users, list & view & comment (on) equipment, list & see details for several parities in different category, sign-up or sign-in with Google, create & delete alarms, create & list portfolios, make semantic search, get recommendations, see notifications, make text to text annotations for articles.

13- Weekly Milestones: We continued to utilize milestone concept. As stated previously we tried to set weekly or biweekly custom milestones to increase efficiency in delivery and ease the management of the project per domain like backend, frontend, etc.

14- System Manual: A system manual has been prepared to show how to deploy the application as both backend and frontend and it lists the requirements needed to be satisfied.

15- User Manual: A user manual has been prepared to instruct users how they can start using the application. It explains the important functionalities of the application and tells how a user can use these functionalities in a step by step manner.

16- Annotation Model: An document has been prepared to demonstrate how we foollowed the Web Annotation Data Model during the implmentation of annotation functionality.

Work Done by Each Member

Group Members

  • Alperen Kürşat Özkan
  • Fatih İver
  • Harun Eren
  • Mert Yüksekgönül
  • Muhammet Furkan Gök
  • Özgür Solak
  • Rukiye Dilruba Köse
  • Yunus Emre İnci(Communicator)

Customers

  • Suzan Uskudarli
  • Alper Ahmetoğlu
Team Member Work done
Backend Yunus Emre Inci • Implemented user related API endpoints. (register, update, delete, retrieve)
• Implemented authentication and permission mechanisms. (token creation)
• Added location information for users.
• Handled DevOps related stuff. Deployment, server and database configurations etc.
• Updated class diagram due to changes in design.
• Implemented functionality for fetching live and historic parity data from AlphaVantage.
• Added OpenIBAN support for IBAN validation.
• Configured Github actions for CI.
• Implemented API endpoints for login and register by Google.
• Implemented the annotation server which complies to W3C standards.
• Fixed various errors and reported bugs.
• Added unit tests for implemented API endpoints.
• Reviewed other team members' work.
Backend Harun Eren • Implemented Article endpoint (create, delete, retrieve, list, update)
• Implemented Like endpoints (create, delete, retrieve)
• Implemented unit-tests for Article and Like endpoints
• Updated project plan according to requirements
• Implemented Equipment-Pair model for Portfolio
• Implemented Portfolio API and unit-tests
• Notification (for Event, Article, BuyOrder, StopLossOrder) API and Tests
• Alert API, Notification(for Parity Alert) and Tests
• Code review and maintenance (bug fixes, updates endpoints for new endpoints, update documentation etc)
Backend Mert Yuksekgonul • Implemented Prediction endpoint.
• Implemented Events Endpoint.
• Implemented success rate endpoints.
• Implemented evaluation of the prediction results after the closure of the day.
• Implemented manual investments endpoints.
• Implemented online investments.
• Implemented assets of a user.
• Implemented signals for asset updates after an online investment.
• Implemented orders(buy order, stop/loss order).
• Implemented realization of orders after the related parity updated.
• Implemented profit/loss endpoints.
• Implemented comment likes and event following.
• Implemented tests for orders and investments, comment likes, parity/latest endpoint.
Code review and maintenance(bugfixes, updates for endpoint) for backend.
Frontend Dilruba Köse • Implement footer component
• Implement user profile page
• Implement UserHeader component
• Implement OtherUser component for controlling following functionality
• Update profile page, for both current and other users and configure routing
• Implement UserSuccess component for prediction success table
• Implement ParityChart Component
• Implement Parity Page and configure routing
• Implement Equipment Page and configure routing
• Fix bugs in user pages and implement prediction in parity page.
• Implement Recommendation Page and configure routing
• Implement Notifications in user page and in navbar component.
• Made reviews for web-front-end team commits.
• Attended front-end team code sessions.
Frontend Muhammet Furkan Gök • Initialized frontend proeject.(Bootstrapped a react project by npm)
• Added Airbnb JavaScript styleguide to the project
• Attended front-end team code sessions.
• Made reviews for web-front-end team commits.
• Added react-redux and router the project.
• Implemented Home page and Currency Bar components
• Prepared base connection between server and the web-site.
• Implemented article page with edit-delete-create functionalities
• Implemented custom table for displaying parities and equipments on different pages
• Implemented orders component
• Implemented investments component
• Implemented assets component
• Implemented socials page displaying articles and events on two different tabs respectively
• Implemented a component showing initial details about an article to be used in home page and socials page
• Attended front-end team coding sessions
• Made reviews on the pull requests of other front end team members
• Implemented text and image annotation for article page
• Some bug fixes (details are included in commit messages)
Frontend Alperen Kürşat Özkan • Bugfix on investment and route handling of notifications
• Implement Event Follow Functionality
•Bugfix on Investment Page
• Implementing total profit on investment page
• Made reviews for web-front-end team commits. •Adding Follow functionality on Event Page
• Bugfix rendering issue on article comments when article is liked
•Add Portfolio screen to user's profile readjust and bugfix on functionality of buttons
• Bugfix on re-rendering upon Adding new portfolio / portfolio item on My portfolios and Followed Portfolios
• Frontend Google Sign in button and Backend Connections.
•Implementation of owned Portfolios page on Frontend
• Implementation of followed portfolios page and follow-delete-add functionality handling.
•Comment like functionality backend connections has completed.
•Bugfix setting notification request timer to avoid 10000 notifications in minutes.
• Implemented CommentContainer component
• Implemented Geolocation for Map Component
• Attended front-end team code sessions.
•Implemented Map Component.
• Implemented autolocation search functionality.
• Implement Comment component on article
• Update on map component and location style issues
• Attended front-end team code sessions.
•Implementing Create Comment Component - Add Edit- Delete comment functionalities
• Add logo to home page and configure home routing. • Add iban - password validations on register page
• Add is Trader functionality on register page , bug fix on registration
• Add Like Article Functionality
• Frontend comment avatar logo addition
• Frontend/bugfix on Delete comment equipment and re-rendering issues on comment both on article and comment on delete.
• Frontend/bugfix on Delete comment equipment and re-rendering issues on comment both on article and comment on delete.
• Frontend/bugfix related to follow / like buttons - Comment Add
• Implement Frontend/portfolio page basics.
Mobile Fatih İver • Implement portfolio add, delete, edit & list
• Implement asset add & delete
• Implement article annotation
• Implement search
• Implement recommendations
• Implement notifications
• Implement alarm add, delete, edit & list
Mobile Ozgur Solak • Implement Stock Fragment
• Implement Comment component on article
• Create Milestone Personna for Mobile Scenario
• Implement Crypto Fragment
• Implement write article functionality
• Add write article button to access from home page
• Implement Currency Fragment basics
• Implement Metal Fragment Basics
• Implement Index Fragment basics
• Implement Google Sign-in
• Implement displaying Success Rate on user profile
• Implement changing profile mode

Annotation Implementation

TrAiders Web Annotation Server partially implements W3C Web Annotation Data Model and Web Annotation Protocol. It supports text and image annotation bodies for both text and image targets with fragment selectors. This document gives examples on how a client can retrieve and create annotations.

Annotation Retrieval

TrAiders Web Annotation Server provides a single annotation container available at https://annotation.traiders.tk/annotations/. GET requests to this endpoint returns the list of existing annotations.

Example

Request

GET https://annotation.traiders.tk/annotations/

Response

[
    {
      "@context": "http://www.w3.org/ns/anno.jsonld",
      "id": "https://annotation.traiders.tk/annotations/80/",
      "type": "Annotation",
      "created": "2019-12-24T14:11:35.995189Z",
      "body": {
        "type": "TextualBody",
        "value": "The IOTA Tangle is a stream of interlinked and individual transactions. These transactions are distributed and stored across a decentralised network of participants."
      },
      "target": {
        "source": "https://api.traiders.tk/articles/132/",
        "selector": {
          "type": "FragmentSelector",
          "value": "char=158,176"
        }
      },
      "creator": "https://api.traiders.tk/users/545/"
    },
    {
      "@context": "http://www.w3.org/ns/anno.jsonld",
      "id": "https://annotation.traiders.tk/annotations/85/",
      "type": "Annotation",
      "created": "2019-12-24T16:09:26.328396Z",
      "body": {
        "type": "TextualBody",
        "value": "I like this!"
      },
      "target": {
        "source": "https://media.traiders.tk/img2.jpg",
        "selector": {
          "type": "FragmentSelector",
          "value": "xywh=39.53,38.96,31.88,26.04"
        }
      },
      "creator": "https://api.traiders.tk/users/546/"
    }
]

Two examples of textual annotations bodies that were targeted to article image and texts are listed above.

Annotation Creation

Annotation are created by sending a POST request to the annotation server. If the creation succeeds, the server returns the newly created annotation.

Example

Creation of an example annotation with a text target and image body:

Request

POST https://annotation.traiders.tk/annotations/

{
    "body": {
        "type": "Image",
        "id": "http://example.org/image.png"
    },
    "target": {
        "source": "https://traiders.tk/articles/5",
        "selector": {
            "value": "char=10,20"
        }
    }
}

Response

{
  "@context": "http://www.w3.org/ns/anno.jsonld",
  "id": "https://annotation.traiders.tk/annotations/23/",
  "type": "Annotation",
  "created": "2019-12-25T16:09:26.328396Z",
  "body": {
    "type": "Image",
    "id": "http://example.org/image.png"
  },
  "target": {
    "source": "https://traiders.tk/articles/5",
      "selector": {
      "value": "char=10,20"
    }
  }
}

Fragment Selection

TrAiders Web Annotation Server supports fragment selectors for both image and text targets.

Text Fragment Selection

W3C convention for selecting text fragments can be used. For example, a fragment selector with the value of char=50,100 would mean the substring of the text starting from 50th character to 100th was targeted for annotation.

Image Fragment Selection

Image fragment selection works similarly. A fragment selector with the value of xywh=10,15,30,35 will target the rectangle of size 30x35 with its top left corner on the pixel (10, 15).

Limitations

TrAiders Web Annotation Server only implements annotations with image and text bodies targeted to image and text bodies. It does not support other multimedia types such as video and audio. Annotations are limited to only a single body and target. Multiple targets or bodies are not supported.

Requirements

Table of Contents - Requirements

Glossary

Note: Aliases for terms are given in parentheses.

  • Admin User: An administrative user who can ban users and manage contents such as parities, articles, comments and economic events.
  • Annotation: A note or comment typically used to convey information about a resource or associations between resources. For example a comment or a tag on a single web page or image.
  • Article: A piece of writing of users about trading and investment. Articles have a title and meant to be somewhat longer.
  • Asset: Assets describe investments of trading users which are physically held in the platform.
  • Basic User: A basic user is a user who can use all the functionality of the system other than making real investments.
  • Comment: Comments can be written below articles and trading equipments by users to share their ideas.
  • Economic Event (Event): Economic events are important incidents that may effect the economy, such as a publication of a statistic. An event's importance level designated with an integer from 1 to 3.
  • Guest: A user who is using the platform but has not signed up yet.
  • Investment: Two types of investments exists in the platform. One is the type of investments that are manually entered by users, and other is the assets that are physically held in the platform.
  • Parity: A pair of trading equipments. Parities describe a valid conversion from one equipment type to another.
  • Password: A string of characters that allows access to the system. Passwords are at least 8 characters long, can include letters, digits and special characters.
  • Portfolio: A collection of parities the user selects to follow them together.
  • Sign up: Registering to the system by providing an e-mail address, name, surname, location and choosing a password.
  • Trading equipment (Equipment): Any valuable in which users can invest, such as: indices, stocks, ETFs, commodities, currencies, funds, bonds and cryptocurrencies. A trading equipment does not have a price by itself, price of equipments are only existent within a parity.
  • Trading User (Trader): In addition to basic users' functionalities, trading users are able to buy and sell trading equipment on the platform.

1. Functional Requirements

1.1. User Requirements

Before getting into user requirements it is necessary to define different user types of the system. The system has 4 types of users: Guest, Basic User, Trading User (Trader) and Admin. The roles of these user types are briefly explained in the glossary and will be defined explicitly throughout the following requirements.

In this section, the word "user" will refer to any user of types Basic User, Trader or Admin. The words "guest", "trader" or "admin" will be used when a requirement is specific to only one type of user.

The reader is highly encouraged to read the glossary before reading the requirements as the meanings of terms used in this document might differ from the common knowledge. The reader may also visit [[User Types]] to see a summary of "who can do what".

1.1.1. Sign Up

  • 1.1.1.1. Guests shall be able to sign up by providing their e-mail address, name, surname, location and choosing a password. If the guests wants to register as a trading user, they shall also provide IBAN of their bank account. Location information shall be given using Google Maps.

  • 1.1.1.2. Guests should be able to sign up with their Google account.

1.1.2. Sign In

  • 1.1.2.1. Users shall be able to sign in with their e-mail and password.
  • 1.1.2.2. Users should be able to sign in with their Google account.

1.1.3. Profile

  • 1.1.3.1. Each user shall have a profile page.
  • 1.1.3.2. Users' prediction success rate for each parity shall be visible on their profile page. There should be a lower limit to the number of predictions for the success rate to be visible on the profile page.
  • 1.1.3.3. Users' portfolios shall be shown on their profile page.
  • 1.1.3.4. Users shall be able to set their profile to be public or private.
  • 1.1.3.5. Public profiles shall be visible to all users and guests.
  • 1.1.3.6. If a user profile is private, then the content produced by that user shall only be visible to its followers.
  • 1.1.3.7. Prediction success rate shall be visible to all users and guests even if a user's profile is private.

1.1.4. Social Interactions and Communication

  • 1.1.4.1. Users shall be able to follow each other. To follow a user who set his profile to be private, a follow request shall be sent first.
  • 1.1.4.2. Users shall be able to deny the following requests came from other users.
  • 1.1.4.3. Users shall be able to share their ideas as an article.
  • 1.1.4.4. Users shall be able to write comments below the articles of other users.
  • 1.1.4.5. Users shall be able to rate articles of other users by clicking the "like" button.
  • 1.1.4.6. Users shall be able to write comments about trading equipment.

1.1.5. Economic Events

  • 1.1.5.1. Users and guests shall have an “Events” section. In this section, users and guests shall be able to view economic events as a table with columns: 'time', 'importance level', 'country base', 'actual', 'previous' and 'forecast'. See example.
  • 1.1.5.2. Users and guests should be able to filter economic events by their importance level and country base.
  • 1.1.5.3. Users and guests should be able to search for economic events.
  • 1.1.5.4. Users shall be able to follow economic events. A user who is following an event should be notified after the event happened.

1.1.6. Portfolios

  • 1.1.6.1. Users shall have one or more portfolios. Empty portfolios may exist.
  • 1.1.6.2. Users shall be able to rename their portfolios.
  • 1.1.6.3. Users shall be able to add or remove parities from their portfolios.
  • 1.1.6.4. Users shall be able to follow each other's portfolios. Followed portfolios shall be shown in user's portfolios section.

1.1.7. Trading Equipment and Parities

  • 1.1.7.1. Users and guests shall be able to view conversion ratio, previous close, percentage and amount change according to the previous close, day's range and moving averages for a parity.
  • 1.1.7.2. Users and guests shall be able to read user comments about trading equipment.
  • 1.1.7.3. Users shall be able to make predictions about the parities for the day. A prediction shall be either "will increase" or "will decrease". The result of the prediction is determined by comparing the last close and today's close of the ratio.
  • 1.1.7.4. Users shall be able to set alerts for certain ratios of parities. Users shall be notified when the target ratio is met.

1.1.8. Investments

  • 1.1.8.1. Users shall have a "My Investments" section which contains information about their assets that are physically held in the platform and also manual investments which they made outside of the platform.
  • 1.1.8.2. Users shall be able to enter manual investments.
  • 1.1.8.3. Traders and basic users shall have to verify their e-mail address before making an investment.
  • 1.1.8.4. Traders shall be able to buy trading equipment by selling another equipment from their assets if a conversion exists between those equipments. For example, a trader could sell Turkish liras (TRY) to buy United States dollars (USD) whereas he couldn't directly convert his golds to Apple stocks because such a conversion does not exist.
  • 1.1.8.5. Traders shall also have an option of paying with a credit card instead of selling their assets when making an investment.
  • 1.1.8.6. Traders shall be able to give buy orders for a desired ratio. When the current price goes below the desired ratio, the system shall make the buy automatically.
  • 1.1.8.7. Traders shall be able to give stop/loss orders by specifying a maximum loss. The system shall automatically reverse the investment when the amount of lost goes above the maximum loss.

1.1.9. Profit/Loss

  • 1.1.9.1. Users shall have a profit/loss section. They shall be able to see their profit/loss amount in the currency of their choice. Users' manual investments and assets shall be both accounted when calculating their profit/loss.
  • 1.1.9.2. Users and guests shall not be able to see the profit/loss of other users.

1.1.10. Search

  • 1.1.10.1. Users and guests shall be able to search for trading equipment, parities and other users. The search algorithm shall consider all information available in user profiles (such as portfolios) and shall retrieve semantically similar results to the query.
  • 1.1.10.2. Users and guests shall be able to filter users around a location when searching.

1.1.11. Recommendations

  • 1.1.11.1. Users shall receive article and trading equipment recommendations based on their investments, users and events they follow.

1.1.12. Admin Panel

  • 1.1.12.1. Admins shall have an admin panel to administrate the platform.
  • 1.1.12.2. Admins shall be able to add new trading equipment and parities.
  • 1.1.12.3. Admins shall be able to ban or delete users. Banned users shall not be able to sign in.
  • 1.1.12.4. Admins shall be able to delete articles and comments.
  • 1.1.12.5. Admins shall be able to add or delete events.

1.2. System Requirements

1.2.1. Interactions

  • 1.2.1.1. The system shall support sharing ideas as an article.
  • 1.2.1.2. The system shall support commenting and rating ideas of other users.
  • 1.2.1.3. The system shall support commenting about trading equipment.
  • 1.2.1.4. The system shall let users follow other users and trading equipment.
  • 1.2.1.5. The system shall provide an alert mechanism which lets traders to get notified about certain levels of trading equipment.
  • 1.2.1.6. The system shall provide an alert mechanism which lets users to get notified about other users activities, when they follow another user.

1.2.2. Recommendation

  • 1.2.2.1. The system shall provide a recommendation mechanism recommending articles, portfolio or trading equipment to the users based on their histories.
  • 1.2.2.2. The system shall let users to make predictions about trading equipment.

1.2.3. Searching

  • 1.2.3.1. The system shall contain a searching mechanism that lets users to search users, trading equipment and economic events.
  • 1.2.3.2. The searching mechanism shall consider all the information available in user profiles and trading equipment.
  • 1.2.3.3. The system shall allow the semantic search which enables users to make a search by using user defined tags in order to make more specific search.
  • 1.2.3.4. The system shall support location-based search.

1.2.4. Trading Equipments and Parities

The system shall support following equipments and possible conversions between them:

  • 1.2.4.1. Trade indices such as S&P 500, Dow 30, DAX...
  • 1.2.4.2. Stocks such as Apple, Alibaba, IBM...
  • 1.2.4.3. ETFs such as SPDR S&P 500, SPDR DJIA, iShares Russel 2000...
  • 1.2.4.4. Commodities such as Gold, Natural Gas, Silver...
  • 1.2.4.5. The application should support chief monetary units in the world. Currencies such as Euro, American Dollar, Turkish Lira...
  • 1.2.4.6. Funds such as Pimko Total Return, Vanguard Total Stock Market Index Fund, American Funds Growth Fund of America...
  • 1.2.4.7. Bonds such as Euro Bund, UK Gild, Japan Government Bond...
  • 1.2.4.8. Cryptocurrencies such as Bitcoin, Ethereum, XRP...

2. Non-Functional Requirements

2.1. Security

  • 2.1.1. The website and the mobile application shall use secure HTTP (HTTPS) for all transfers.
  • 2.1.2. The website shall be secure against SQL injection, cross-site scripting, and cross-site request forgery attacks.
  • 2.1.3. User passwords shall be stored in the database using a secure hashing algorithm.
  • 2.1.4. The system should backup weekly.

2.2. Performance

  • 2.2.1. The system shall be able to handle 1000 HTTP requests per second.
  • 2.2.2. The system shall be capable of serving 1000 users at the same time.
  • 2.2.3. The system shall respond to search queries in less than 3 seconds.

2.3. Availability and Accessibility

  • 2.3.1. The website and the mobile application shall be available in English.
  • 2.3.2. The project should work on Safari 10 and above, Chrome 70 and above, Opera 60 and above, Firefox 60 and above.
  • 2.3.3. The application shall work on Android 4.4 and later.
  • 2.3.4. The project shall be provided for both mobile and web platforms.
  • 2.3.5. The system should work 7/24 with no more than 1% downtime.
  • 2.3.6. The project should contain auxiliary features for disabled people.
  • 2.3.7. The system shall use UTF-8 character encoding for all texts.

2.4. Annotations

User Scenarios

Scenario 1 (Mobile)

John Wick

John Wick

Persona

  • 58 years old
  • Closer to retirement.
  • Worked at a bank.
  • Very ambitious and curious about Bitcoin

Story

  • He signed in to our mobile app and noticed that he chose the wrong avatar.
  • He changes the avatar to be an old man.
  • He set an alert for Bitcoin. He goes to the Alerts tab to set another alert for Bitcoin because he does not want to miss any critical level updates. He sets another alert.
  • Then goes to the notification tab to see is there any other notification for him.
  • He goes to the search tab to search for Bitcoin, and by doing that he wants to see the latest updates about it.
  • He sees an article in the search results. He clicks to that article to view its full version. He reads the article, learns that IOTA value is decreasing.
  • He sees a few annotations made by other users. He click them to read what is written.
  • He also wants to add his own annotation because halving is coming and everybody should know about it, commenting wouldn’t be enough.
  • He annotates by selecting the Bitcoin word. He then leaves the article.
  • He goes to the portfolio tab to make some changes. He removes IOTA from his crypto portfolio. He also deletes his stock portfolio because they are kind of boring, compared to crypto market.

Preconditions

  1. Uses a our mobile app.
  2. Already has an account.
  3. Already has a verified e-mail.
  4. Already set an alert
  5. Already tracked several events.

Acceptance Criteria

  1. 1.1.2.1
  2. 1.1.3.1
  3. 1.1.4.3 1.1.4.5
  4. 1.2.1.1, 1.2.1.2
  5. 1.2.1.5 1.2.4.5
  6. 1.1.10.1 1.1.10.2
  7. 2.4.1

Scenario 2 (Web)

Can Özcan

Can Özcan

Persona

  • 33 years old.
  • He is turkish and albenian.
  • Currently working as a senior software developer.
  • Looking for the best website possible for his future investsments
  • Views economic events and justify the impact of events to the economy.
  • He is already a member of Traiders.

Story

  • Can logs in to Traiders and sees a new notification icon on his profile page button.
  • Enters his profile page to see current notifications on his profile page.
  • He sees an event he followed before has occured on his notifications.
  • He likes the new notification feature added to the website.
  • He directs himself to events page and checks his followed event's actual value.
  • He sees another event that may affect the euro parity follows it.
  • He decides to invest on Traiders some on Euro(?) currrency so he goes to investment page.
  • When he tries to make an online investment an alert pops up which tells him to verify his email.
  • He buys some Euro asset with credit card payment.
  • middle east
  • After the investment he made, he wants to surf around a little bit more and clicks the search bar and writes turke(which means turkish in albenian) on search bar.
  • He sees an article related to baklava clicks it , after reading the article sees comments with delicious images, likes the article , comment and follows the article.
  • He checks for bitcoin's he types lite to search bar and sees other cryptos as well.
  • He wonders what if he writes middle east instead. After seeing all middle east countries' currencies he simply amazed.

Preconditions

  • Already has an account.
  • Does not have a verified email.
  • Already tracked several events.

Acceptance Criteria

  1. 1.1.2.1
  2. 1.1.3.1
  3. 1.1.5.1
  4. 1.1.5.4
  5. 1.1.8.1
  6. 1.1.8.3
  7. 1.1.8.5
  8. 1.1.10.1
  9. 1.1.4.5

Scenario 3 (Web)

Enes Yılmaz

Enes Yılmaz

Persona

  • 29 years old
  • Recently married
  • Works at a production facility
  • Very easily influenced by opinions
  • Looking for news, expert opinions

Story

  • Enes recently married and wants to make profitable investment for his and her wife's future.
  • He comes to our website and logs in with google.
  • He reads the articles and likes Ozgur's article.
  • He visits Ozgur's profile and he thinks that this could be a nice person to follow.
  • He sees the success rate of the user and is very much impressed.
  • He starts to follow his portfolio.
  • According to this following event, web site recommends him related portfolios.
  • Then he moves to his profile.
  • He wants that content produced by him is visible only to its followers.
  • Because of that, he makes his profile private.

Preconditions

  1. Uses a web browser to visit our website
  2. Already has verified google account

Acceptance Criteria

  1. 1.1.2.2
  2. 1.1.3.1, 1.1.3.2, 1.1.3.3, 1.1.3.6, 1.1.3.7
  3. 1.1.4.3, 1.1.4.6
  4. 1.1.6.1
  5. 1.1.11.1

Project Plan

FinalProjectPlan-1 FinalProjectPlanGant-1

Evaluation of tools and managing the project

Backend

  • Amazon Web Services: We use an AWS EC2 instance to deploy the backend side of our application.
  • Django and Django Rest Framework: We use Django Rest Framework on top of Django. As opposed to the practice application that we developed in CMPE352, we use DRF's viewsets and serializers more often. Together they enable automatic schema generation which helps to readily produce an extensive API documentation as we develop.
  • Docker and Docker Compose: All of our application services (nginx, database, WSGI server for backend, Node.js server for frontend) are containerized and configurable in the source code by using Dockerfiles. This helps us to define the environments in which our services run in the source code and also automate the deployment process.
  • Gunicorn: Gunicorn is a WSGI server for production. We use it to be able to serve as many clients as possible at the same time by configuring it to use multiple workers.
  • Let's Encrypt: We got our SSL certificate from Let's Encrypt. We use HTTPs for all web communications.
  • Nginx: We use nginx as a router to direct coming requests to either the backend or the frontend application depending on the subdomain. Nginx also serves the static and media content such as CSS files or images.
  • Pycharm: Pycharm is great for both coding and version control. Some features we use often are: automatic code reformatting, navigate to declaration/usage, debugging and GUI support for testing.
  • Redoc & Swagger: We provide two different UI options for API documentation. Redoc and Swagger take the OpenAPI schema generated by DRF and turn it into an human-readable interface.
  • Travis: We use Travis CI for style checking and testing. It helps us maintain a clean and working codebase.
  • PostgresSQL: We think a relational database work better for our project as we will implement many components that tightly relate to each other.

Frontend

  • Amazon Web Services: We use an AWS EC2 instance to deploy the frontend side of our application.
  • React Javascript Framework: The main framework to implement the Frontend side of the project.
  • Eslint-stylelint Eslint a tool which applies the rule for AIRBNB code style. It helps to achieve readability for the team.
  • Docker and Docker Compose: Docker is a platform to build, share, and run applications with containers which helps in therms of flexibility, security, portability, scalability.
  • Travis: Travis is used to test the commit in terms of styling, compatibility and checks whether the code commited is working properly or not.
  • Prettier: Automatically formats the code which helps developers saving time and energy.
  • Redux: Redux is a module which helps the data storing in React. In other words; it helps to fetch data from the api or post data to api in a more secure, consistent way.
  • Visual Studio Code: The IDE used to coding in React.js environment.

Mobile

  • Android Studio: We use an Android Studio as our integrated development environment.
  • Java: We implement our requirements via Java programming language.
  • Android Emulator: Android emulator simulates Android devices on our computer so that we can test our application on a variety of devices and Android API levels without needing to have each physical device.
  • Gradle: Gradle is an open-source build-automation system that builds upon the concepts of Apache Ant and Apache Maven and introduces a Groovy-based domain-specific language (DSL) instead of the XML form used by Apache Maven for declaring the project configuration.
  • Material.io: This website provides a design system that helps developers build high-quality digital experience. We try to follow the standards on this website. In addition to this, the icons we use in our application are taken from this website - all for free.

Design Documents

Mockups

Scenario 1: Searching in articles and Looking for a parity


  • User: Emre Tur
  • Platform: Web
  • User Type: Guest

1- Our guest user Emre is on another watch in the hospital. He got so much leisure time during the night. He is interested in economic news. While he is surfing on the internet, he encounters our platform and visits it. He looks economic events.


2- Emre clicks on the ARTICLES button then. Realizes the website is full of economy experts' articles. But he is not interested any article on the first-page.


3- Emre realizes the SEARCH bar. Decides to use it to filter articles. He is using "Trump" as a keyword. After entering the word, there are related articles based on his keyword.


4- But there is a problem. Emre's English skills are inadequate to read an article:( He is also curious about the current USD/TRY parity for a year to invest in. Then he clicks the USD/TRY on the portfolio bar, goes to the USD/TRY page.


5- He looks to the daily details of the parity. He sees other (signed in) users are making 'clever' comments about the parity. He realizes he has to sign in to make comments about the parity. He also finds a daily expectation tool and clicks to the increase button as he guessed.


6- After clicking the increase button, he gets an alert that invites him to sign in. Emre gets a feeling that this platform serves so many tools and information about the economy and trading equipment. He decided to sign in but he couldn't do it because his advisor doctor suddenly came into the room and said: "I'VE BEEN LOOKING FOR YOU FOR AN HOUR!!".


Scenario 2: Looking at profiles of other users


  • User: Özge Bozkurt
  • Platform: Web
  • User Type: Basic User

1- Özge opens the homepage of TrAiders as usual after her favorite TV show ends. She clicks the Sign In button since she wants to stalk the great users she is following and sees if they posted any articles.

2- Sign In Screen shows up, Özge signs in with Google because she doesn't want to enter her email and password manually. She thinks this site is great because it provides such an easy sign-in option.

3- Özge's email is filled automatically by her browser, she simply clicks the next button and she gets logged in.

4- Özge is redirected to the homepage, where she lands on the event stream. She casually looks at the events that took place today. She sees nothing extraordinary happened, so she clicks the articles to see if any of the great users she follows posted anything interesting.

5- She clicks on the article about Trump. She invested in oil so she got concerned of the latest news.

6- She reads the article and thinks her investments are at risk.

7- She gets furious at Trump and she wants to share her anger by commenting. She then clicks the post button.

8- She sees the comment of Marshall Hiepler, it seems like a clever comment. She thinks she should check his page to see if he is worthy of stalking.

9- She looks at Marshall's prediction success rate in USD/TL and becomes amazed. His articles look really clever. She sees that he shared his portfolio recently, so she clicks on the portfolio.

10- She likes the portfolio of Marshall, she thinks oil is not safe to invest in anymore and since she loves social media platforms this Tech Stocks portfolio is perfect for her. She believes Facebook will rule the world one day. She decides to follow the portfolio, she clicks the follow button.

11- She closes the portfolio.

12- She follows Marshall, from now on she will stalk him regularly on her homepage.

Scenario 3: Making an investment & Setting an alarm


  • User: Muazzes Çolak
  • Platform: Mobile
  • User Type: Trader

1- Muazzes launches the application.


2- Muazzez wants to invest her turkish liras to dollars and clik usd/try to see the fluctuations in detail.



3-She believes there will be increase in USD/TRY parity so she decides to vote up.



4-She confirms her prediction since predictions cannot be changed after a certain hour.



5-After analyzing the fluctuations, she decides to buy US dollar and click buy button .



6-She puts a limit order to buy some amount of dollars.



7-After she gets notified, she goes to the investment tab to see her new investment.

Annotation Mock-ups for Mobile

Mobile Annotation Mockup

Diagrams

Use Case Diagrams

Class Diagram

Sequence Diagrams

Sign In

Follow a User

Sharing an Article

Post Comment to Article

Make Manual Investment

Creating a Portfolio

Buy Order

Sign Up

Track Event

Predict Equipment

System Manual

This document describes how to build, configure and deploy TrAiders's web services.

Requirements

Configuration

TrAider's services are configured by using an environment file. Create an empty file under your home directory with the name traiders_prod_env.

Parameters

  • SECRET_KEY: A sequence of characters that is used for securing sensitive information. Make sure it is at least 50 characters long and kept secret.
  • ALPHA_VANTAGE_KEYS: A comma separated list of AlphaVantage API keys. If you add more than one keys, the system automatically scales up to support more parities.
  • EMAIL_PASSWORD: SendGrid API key.
  • GOOGLE_OAUTH_ID: Google OAuth ID.
  • GOOGLE_OAUTH_SECRET: Google OAuth Secret.

Google OAuth ID and Secret should be created on http://console.developers.google.com.

An example environment file should look like this:

SECRET_KEY=sdK1iONjl3WYtdpriLniqVkoIMz6fFo1E7S1yh2UfjlKcuNkiwYPZf7nhTpQUIV4
ALPHA_VANTAGE_KEYS=VDVRICLYITWLZAJI
EMAIL_PASSWORD=XZWQy0DDJDquRqNn.l7fhnhwLmoI1lldsbnvhLfLRM628MZKUau1CduwJF3.xu8nD4Ojl
GOOGLE_OAUTH_ID=885569868037-6irtdcclm633kocml09yck0yzp77boxt.apps.googleusercontent.com
GOOGLE_OAUTH_SECRET=AhloDHEOJ7gABXt_00BGCRjq

How to Build & Deploy

1. Clone the repository and navigate to the sources root.

git clone https://github.com/bounswe/bounswe2019group2
cd bounswe2019group2/traiders

2. Build & run

docker-compose up -d --build

3. Restore content from database dumps

docker exec traiders_db_1 psql -U postgres -d postgres < db-dumps/traiders_db.sql
docker exec traiders_annotation_db_1 psql -U postgres -d postgres < db-dumps/traiders_annotation_db.sql

User Manual

This manual is designed for the end-users who wish to use our Traiders application in web or mobile platform.

Register

A Basic User, who registered the system without stating his/her IBAN, can benefit all features except most of Investment operations.

A Trader User, who registered the system giving his/her IBAN, can make use of all functions of our application.

A Guest User, who have not registered, can only view Articles, Events, Trading Equipment and Parities.

One who wants to use our application as Trader or Basic User should register to the application. In registration form, username, password, password confirmation, e-mail address, full name of the user should be typed and the location should be given via Google maps or text. If one wants to register as Trader User, he or she is supposed to mark the related box and then type a valid IBAN.

Login

One should login the application by Google account or by typing username and password in login form. The box Remember me should be marked to save the credentials to the Web browser. Forgot Password should be clicked in case a user wants to learn or update his or her password.

Profile

A Guest User do not have a Profile page. She or he can only view another user's Profile page if it is public account. In profile page one can see her/his information(username, follower and following numbers, etc.), portfolios, success rate and notifications. To edit user profile edit button should be used. A Basic User can be Trader User using edit, he or she should give a valid IBAN and verify by e-mail. A button is used to switch the profile between public and private mode.

If the profile is private, then profile is not visible by one who is not follower of the account. To follow a private profile, one should send a request and pending requests are listed in private profile mode.

Trading Equipment and Parities

In home page, many parities are presented.

Each Trading Equipment and each Parity has their own page.

In a Trading Equipment's page, one can see related parities, comments and make comment about the equipment.

In a Parity's page, one can see the graphics with daily, monthly, yearly, MA50, MA100, MA200 labels.

First three graphics are conversion ratio changes depending close values in corresponding time scales and the last three graphics are Moving Averages for last 50, 100 and 200 days for this parity. One can make prediction about the parity conversion ratio increase or decrease for the day.

Portfolio: How to follow Equipment and Parities

A Portfolio is used to follow a set of parities. One might need to follow different sets of parities for different financial strategies. For this purpose, a Basic or Trader User can create his/her own portfolio with a given name, add-drop parities, follow another user's portfolio.

In Portfolio tab, "My Portfolios" and "Followed Portfolios" are presented. One can also simply use Profile page to edit his or her own portfolios.

Social Interactions with Other Users

Our Traders application is convenient for users to interact with each other, share their ideas and economic strategies.

One can share an Article which is a text with or without picture. He or she can also edit or delete it. The Articles written by users are listed in homepage and in Articles section of Social tab. A User can like or make comment with or without photo on an Article and other people see and like these comments.

One can see the author of an Article and can follow the author directly without going to his/her Profile page. One might not simply follow someone if the other user's profile is private, then application creates a Following Request and the current user should wait until the other user accepts this request.

One can annotate a part of the text or part of the image in Article with a text or image. To annotate an image, one should click and drag, then he or she can submit an image or text. To annotate a text, one should select the text desired to be annotated, then he/she can submit an image or text. Annotations are colourfully shown and one can simply read annotation, learn who annotated and view even nested annotations.

An example use of text annotation can be "The previous value is %1.2" annotated to a part of text telling "FED will make announcement on inflation rate."

Economic Events

An Event can be simplified to an announcement of a value by authorities in a country. Economic events can be seen by a User in Events section of Social tab. An event table is presented to a User. Events have properties such as name, actual value, previous value, country etc. When an event occurs, it means the actual value has just been announced. A User can follow an Event to be notified when this Event occurs.

Financial Investments

There are 2 types of investments in TrAiders: Manual investments and online investments. To be able to make investments a user should first become a Trader and verify their e-mail address.

A user can add manual investments that they made outside of the TrAiders platform to see the profit or the loss of their investment. Users should provide the buy and sell amount together with the date of transaction for TrAiders to calculate the profit/loss value by considering the up-to-date prices.

Users can also buy and sell investment equipment directly on the platform. While investing, users have the option of paying with a credit card or spending directly from their assets. To invest using a credit card, a user should provide the equipment to be sold, the equipment to be bought and the amount they want to buy. After the payment, the desired amount is added to their assets. If the user selects to spend from their assets, the same thing happens but this time the price gets subtracted from their assets.

Users can also give buy and stop-loss orders to automatically buy or sell equipment. Giving a buy order is basically the same as making an online investment but the user also provides the ratio they desire. If the current ratio of the parity drops below the desired amount, the investment happens. Stop-loss orders can be given to reverse an investment to avoid losses.

Notifications

Notifications can only be seen when one logged in. Users can see number of unseen notifications on user button in navbar. Notifications are shown in user profile page in detail. One can click to a notification to see the related thing that triggered the notification. If a notification is not clicked before, the background color is blue, otherwise gray.

Four different reasons can trigger a notification for a User:

A user who is followed by the current user shares an article.

An economic event which the current user followed occurs.

Stop-Loss Order or Buy Order given by the current user has been implemented.

Change in a Parity value meets the condition of the alert set by the current.

Recommendations

In Recommendation tab, a User-specific table is presented to a User. In this table, a User can view the recommended Articles, Equipments, Parities, Events and Users. Also, the reason behind each Recommendation is presented to the User on the object recommended.

Search

A User should type in Search tab what he or she wish to find and then a table (Articles, Equipments, Parities, Events and Users) is presented to the User. She or he can check by object type to find the thing she/he is looking for.

Search property can also be used to find something which is not exactly known since it implements Semantic Search algorithms and come up with a relevant results which are not exactly specified beforehand.

API Documentation

ReDoc-001 ReDoc-002 ReDoc-003 ReDoc-004 ReDoc-005 ReDoc-006 ReDoc-007 ReDoc-008 ReDoc-009 ReDoc-010 ReDoc-011 ReDoc-012 ReDoc-013 ReDoc-014 ReDoc-015 ReDoc-016 ReDoc-017 ReDoc-018 ReDoc-019 ReDoc-020 ReDoc-021 ReDoc-022 ReDoc-023 ReDoc-024 ReDoc-025 ReDoc-026 ReDoc-027 ReDoc-028 ReDoc-029 ReDoc-030 ReDoc-031 ReDoc-032 ReDoc-033 ReDoc-034 ReDoc-035 ReDoc-036 ReDoc-037 ReDoc-038 ReDoc-039 ReDoc-040 ReDoc-041 ReDoc-042 ReDoc-043 ReDoc-044 ReDoc-045 ReDoc-046 ReDoc-047 ReDoc-048 ReDoc-049 ReDoc-050 ReDoc-051 ReDoc-052 ReDoc-053 ReDoc-054 ReDoc-055 ReDoc-056 ReDoc-057 ReDoc-058 ReDoc-059 ReDoc-060 ReDoc-061 ReDoc-062 ReDoc-063 ReDoc-064 ReDoc-065 ReDoc-066 ReDoc-067 ReDoc-068 ReDoc-069 ReDoc-070 ReDoc-071 ReDoc-072 ReDoc-073 ReDoc-074 ReDoc-075 ReDoc-076 ReDoc-077 ReDoc-078 ReDoc-079 ReDoc-080 ReDoc-081 ReDoc-082 ReDoc-083 ReDoc-084 ReDoc-085 ReDoc-086 ReDoc-087 ReDoc-088 ReDoc-089 ReDoc-090 ReDoc-091 ReDoc-092 ReDoc-093 ReDoc-094 ReDoc-095 ReDoc-096 ReDoc-097 ReDoc-098 ReDoc-099 ReDoc-100 ReDoc-101 ReDoc-102 ReDoc-103 ReDoc-104 ReDoc-105 ReDoc-106 ReDoc-107 ReDoc-108 ReDoc-109 ReDoc-110 ReDoc-111 ReDoc-112 ReDoc-113 ReDoc-114 ReDoc-115 ReDoc-116 ReDoc-117 ReDoc-118 ReDoc-119 ReDoc-120 ReDoc-121 ReDoc-122 ReDoc-123 ReDoc-124 ReDoc-125 ReDoc-126

Annotation API Documentation

ReDoc-Annotation-1 ReDoc-Annotation-2 ReDoc-Annotation-3 ReDoc-Annotation-4 ReDoc-Annotation-5 ReDoc-Annotation-6