Skip to content

Customer Milestone 3 Report

Süleyman Emir Taşan edited this page May 17, 2024 · 53 revisions

Introduction

This is the thirt milestone report for our group project, group bounswe2024group5. We are a group of enthusiastic students of the CmpE352 Introduction to Software Engineering course, committed to building a semantic information browser on the domain of Music that features posting about music, discovering others' contents, and interacting with other music enthusiasts. Our team members who have contributed to the project:


Table of Contents

1. Executive Summary

1.1 Project Summary

Our project is a music-specific semantic information browser. Our platform, Melodify, allows users to share their posts related to music and semantically search for others' content. We utilize the Wikidata API to support our semantic browsing.

The objective is to utilize semantic search to provide a more enhanced search experience to the users in the domain of music. Such an approach not only improves the well-known social media experience but also provides a music-specific platform for music enthusiasts to enjoy without getting exposed to any unrelated/unwanted content.

Users can register to Melodify, set up a profile, and post using one of the various post templates given. Users can choose to post about a concert they attended, a musical instrument they are playing, or their favorite song. Through the usage of custom tags, users can enrich their posts and also look for similar content under a tag they like. The users can search for content related to music, see posts and wiki information through semantic search.

To sum up, we build a music-specific semantic information browser, on both the web and mobile, for music enthusiasts to socialize and share their music taste. Currently, the registration, login, create post, search, interact with post, profile and profile settings are implemented. This signifies that the fully functional application is complete. You can read more on the status of the project in the next section.

1.2 Project Status

Since the submission of the previous milestone, we made progress on our project on several different points. We mostly worked on finishing our web/mobile/back-end application. The teams that we created for these separate tasks have remained the same since we got more experienced in our tasks and became much more efficient.

Currently, the login, registration, semantic search, post creation, post interaction, profile page and profile settings functionalities of our platform are ready for use. We deployed the second version of our app, about which we further elaborated in the next section. The users were able to login and register in the previous release. The users can now create posts using a text body, optional custom tags and optional image uploads. The other users can see those posts by the search tool or their feed pages. A user can change some properties of their profile like their profile picture or their display name. The semantic search functionality allows the users to see results that are connected in meaning to their search.

In terms of organization, we fill a responsibility assignment matrix for individual contributions. Also, we utilize the Roadmap view of Github to visually keep track of our progress. Moreover, we continued to use several tools such as Discord, Whatsapp, and Github to ensure constant communication among us. We held weekly meetings, distributed the tasks among us, and took detailed meeting notes for good quality documentation. Especially,we held several meetings to discuss the implementation details in both our respective groups and between the groups. Sometimes, we did pair programming during these meetings to maximize our productivity. Jump here for more on our team management process.

1.3 Links

1.4 Instructions for Building and Deploying Docker Application

URL: http://34.118.44.165/

Our application is running on port 80, it does not support HTTPS yet.

To build and deploy the application, run the following command in the main directory of the GitHub repository:

docker-compose up --build

To run the mobile app:

  • follow the instructions in our repo.
  • make sure to downgrade to the proper node version 20.5.1 if you encounter the DeprecationWarning.

1.5 Challenges We Addressed

Network Error for Mobile

... to do

Expo Go version updates - Node version compatibility challenges

... to do

Docker MySQL Error for Back-end (Süleyman)

  • After the task distributions were made, I ran Docker to perform my tasks, but I received the "mysql.plugin doesn't exist" error. To solve this, I first reset all containers, volumes and images in docker. When the problem persisted, I deleted mysql from my computer and tried again, but the problem still persisted. Then I tried it on Ubuntu 22.04.4 (using VM) but the same error persisted. Then, I installed the second operating system on my computer as Windows 10. However, this did not solve my problem. Then I upgraded the operating system to 11 and tried again but the result was the same. Throughout this process, I tried all the solutions on the internet, but none of the solutions worked. Then I contacted my friends, connected to the remote database and started my work from there. Unfortunately, this was a very challenging process and on the 5th day, remote db came to my mind with the suggestion of my teammates. During this period, I could not contribute to my team and fell behind the team, but I tried to make the most of the remaining time. Later I found out that the problem was that a new version of mysql was released and that was why I was getting this error. Unfortunately, it was a very painful experience. You can access all error pictures

1.6 Lessons We Learned

Throughout the process of implementing our new version of the project, we learned:

  • How to make requests to backend endpoints from Mobile, and to always provide the necessary authentication token.
  • How to pass a parameter between mobile pages, and utilize this (kind of global variable) across pages of the platform.
  • How to parse the responses we get from backend to use the results in mobile.
  • To utilize postman to ensure the connections between backend and frontend, and to test our code.

2. Individual Contributions

2.1 RAMAZAN ONUR ACAR

2.2 HALİL UTKU ÇELİK

Since the second milestone, I have contributed to several key tasks. I built a service to parse wiki data entities and created a database table for this data. I wrote SPARQL queries to fetch related entities from wiki data. To improve search functionality, I integrated Elasticsearch into the project. I also developed a service to search for wiki data using the wiki data API #205.

I implemented the feed endpoint which returns posts ordered by creation time and learned pagination in the database repository with Spring Boot #198. I worked on deploying our application to Google Cloud and fixed several backend bugs, including a CORS issue.

My most import contributions are in those pull requests: #219, #199, #151

I faced challenges connecting to the Elasticsearch repository from the backend due to misconfigurations, which I resolved by writing custom configurations. Importing ~700k wiki data entities initially took 4 hours; using JpaRepository.saveAll surprisingly decreased to 5 minutes. We encountered issues with MySQL when the latest version changed, which could not recognize an environment variable. We temporarily used the remote database in development and eventually switched to MySQL 8.3.0.

Throughout this milestone, I learned to implement keyword-based search and data indexing using Elasticsearch, work with SPARQL queries, manage wiki data integrations, and handle pagination in Spring Boot. These contributions significantly enhanced our project's functionality and performance.

2.3 ARINÇ DEMİR

My main contribution for this milestone is to write the bulk of this milestone report file. issue Other than that, I tried the apk file on my virtual android device and confirmed that it works. issue

My main contribution to this milestone has been the implementation of the components that we use to display posts, create posts, make search, and view search results. For the post component(#172) I designed and implemented a reusable component content of which is populate with the data we get from our feed enpoint. For creating a post I implemented a dialog component (#234). For search I implemented a search bar. And to view results, I made a component for viewing wikidata items. And also I implemented tabs so we can switch between feed and search results. (#235). Other than that I connected those components to our backend endpoints and spent quite a bit of time troubleshooting api endpoint errors.

Please see this pull request to inspect my most important contributions.

The most challenging part of this milestone for me was errors that I encountered during implementation phase. For example I kept getting CORS error and then I realized it was about the server configuration so I reported the issue to backend team and they solved it. Also there was an error where database container was abrubtly exiting. For this I had to connect to our remote database because I couldn't get local database to work. But same error occured in our server as well. Upon detailed inspection we realized the latest version of mysql had introduced breaking changes. So we solved the problem by downgrading.

2.5 ABDULLAH UMUT HAMZAOĞULLARI

2.6 ASUDE EBRAR KIZILOĞLU

For this last milestone, I focused on our mobile application.

3 most important issues: 3 most importans PRs: wiki docs: requests to backend endpoints:

Challenges faced: version incompatibilities, network issues,

2.7 SÜLEYMAN EMİR TAŞAN

  • Pull Requests
    • #212 file upload using google cloud services
    • #222 follow/unfollow
  • Issues
  • Implemented API Functions
    HTTP Method API Endpoint Description
    POST api/file/upload upload a file to application
    POST api/users/follow/{username} follow a username
    DELETE api/users/follow/{username} unfollow a username

During the challenge I mentioned above, I gave feedback to the PRs opened by my teammates and tried to support them by giving feedback or insight about the API. I tried to make the best use of the limited time I had left immediately after the temporary solution. Unfortunately, I couldn't do 3 PRs during this time. I explained to you the most difficult part for me in this milestone in the "Docker MySQL Error for Backend (Süleyman)" section in 1.5. This challenge affected the entire process of this milestone, but it was a very valuable experience for me. It enabled me to implement endpoint in a short time and carefully.

2.8 SEMİH YILMAZ

  • Pull Requests
    • #196 implemented post endpoints. (create, update, delete, get by params etc.)
    • #226 implemented user profile endpoints. (get, update, get followers etc.)
    • #230 implemented post like and unlike endpoints.
  • Issues
    • #168 revised swagger API documentation.
    • #193 implemented post related classes.
    • #195 implemented tag class.
  • Wiki Documentation: Personal Wiki Page
  • Implemented API Functions
    HTTP Method API Endpoint Description
    POST api/posts Create a new post
    GET api/posts?author={author_username}&tag={your_tag} Get posts optionally by author and tag
    GET api/posts/{postId} Get a specific post by ID
    PUT api/posts/{postId} Update a specific post by ID
    DELETE api/posts/{postId} Delete a specific post by ID
    POST api/posts/{postId}/like Like a specific post by ID
    DELETE api/posts/{postId}/like Unlike a specific post by ID
    GET api/users/{username} Get user profile
    PUT api/users/{username} Edit user profile
    GET api/users/{username}/followers Get user follows
    GET api/users/{username}/following Get users followed by a user
    • Sample API Call Transcripts
      1. Update Post
        • Request
        PUT /api/posts/12345 HTTP/1.1
        Content-Type: application/json
        
        {
            "text": "edited content"
        }
        • Response
        HTTP/1.1 200 OK
        Content-Type: application/json
        
        {
            "id": "12345",
            "author": "john_doe",
            "text": "edited content",
            "media_url": null,
            "created_at": "2024-05-11 22:43:27.0",
            "edited_at": "2024-05-11 23:44:45.0",
            "tags": ["a tag","rock"],
            "likes": 10
        }
      2. Get Users Followed by a user
        • Request
        GET /api/users/john_doe/following HTTP/1.1
        • Response
        HTTP/1.1 200 OK
        Content-Type: application/json
        
        [
            { "username": "jane_smith"    },
            { "username": "michael_gates" },
            { "username": "mike_jones"    }
        ]
  • Unit Tests
  • Other Significant Work I reviewed pull requests and gave feedback. I gave technical assistence to front end and mobile teams especially for the usage of docker and API endpoints.
  • Challenges and Solutions
    Challenge Solution
    Circular Dependency Among Classes Directly referencing repository class instead of service class from one of the circularly dependent class
    Not Having up to date app behaviour calling docker-compose with --build flag

2.9 GÜNEY YÜKSEL


Main Authors

Ebrar, Arınç, Süleyman

🏠 Home

🗃️ All Project Files

💻 Lab Reports

📝 Meeting Notes

Lab Meeting Notes
Team Meeting Notes
🧑🏻‍💻 About Us
🗂️ Templates
CmpE 352

🚀 Important Project Files

🗃️ All Project Files
📝 352 Meeting Notes
📜 Research & Resources
Clone this wiki locally