fedefailla18 / file-importer

0 stars 0 forks source link

Add Portfolio to Transactions #14

Open fedefailla18 opened 1 month ago

fedefailla18 commented 1 month ago

For the sake of users we need to be able to first save the transaction information (done in /transaction/information). Then, we need to identify transactions to its portfolio. Finally, this portfolio can be shown in a FE view.

Right now we support portoflio view only to holdings. This holdings are manually and static added by a user, we need to leverage this and the amount calculated for the transactions we need to add it here. This will allow us to use an already built platform and save up valuable time.

fedefailla18 commented 1 month ago

Project Plan: Visualizing Crypto Portfolio Information

Objective: Enable users to visualize their crypto portfolio, incorporating both manually added holdings and dynamically calculated transactions.

Overview

  1. Save Transaction Information: Ensure transaction details are correctly stored.
  2. Identify Transactions to Portfolio: Link transactions to the appropriate portfolio.
  3. Integrate Transactions into Holdings: Combine manually added holdings with transaction data.
  4. Front-End Visualization: Develop a user-friendly interface for portfolio visualization.

Tasks Breakdown

1. Save Transaction Information

2. Identify Transactions to Portfolio

3. Integrate Transactions into Holdings

Steps:

  1. Update Holdings Model:
    • Include fields for dynamic updates based on transactions.
  2. Calculate Current Holdings:
    • Implement logic to update holdings with transaction amounts (BUY/SELL).
  3. Aggregate Data:
    • Combine manually added holdings with dynamically calculated ones.
  4. Testing:
    • Validate the integration with various portfolios and transactions.

4. Front-End Visualization

Steps:

  1. Design UI/UX:
    • Create wireframes and mockups for the portfolio view.
    • Ensure the design is user-friendly and informative.
  2. Develop Front-End Components:
    • Use a front-end framework (e.g., React, Angular, Vue.js).
    • Implement components to display portfolio, holdings, and transaction history.
  3. Integrate Back-End Data:
    • Develop APIs to fetch holdings and transaction data.
    • Ensure real-time updates or periodic refresh of data.
  4. Testing:
    • Perform usability testing with actual users.
    • Ensure cross-browser compatibility and responsiveness.

Detailed Implementation Plan

Database Schema Design

Linking Logic

Aggregate Holdings

UI/UX Design

Front-End Development

Testing Plan

Timeline

  1. Week 1-2: Database schema design and backend service implementation.
  2. Week 3-4: Develop linking logic and integrate transaction data into holdings.
  3. Week 5-6: Front-end design and initial development.
  4. Week 7-8: Integration, testing, and final adjustments.

Team Roles

Next Steps

  1. Review Plan: Discuss and refine the plan with the team.
  2. Assign Tasks: Allocate tasks to team members based on their expertise.
  3. Kickoff Meeting: Officially start the project and ensure everyone is aligned.

This plan outlines a clear path to visualize the crypto portfolio, integrating both static holdings and dynamic transaction data.

fedefailla18 commented 1 month ago

Finish associating Transactions to holdings for Binance transactions. Now we need to store the rest of the fields calculated in CoinInformationFacade.

fedefailla18 commented 1 month ago

Linking Transaction with Holdings and Portfolio. https://github.com/fedefailla18/file-importer/pull/19

fedefailla18 commented 2 weeks ago

Finally here https://github.com/fedefailla18/file-importer/pull/23 we have the whole integration in the BE. Now when uploading a file the endpoint receives a path variable containing the portfolio name. From here if it does not exist, it's created and linked to the transactions. The endpoint is POST /transaction/upload/{{portfolio}}. Then to calculate holdings we can do it by portfolio or by symbol:

There are still some improvements to do in the scope of this ticket so I will keep it open for the next iteration.