Milestone‐3 Report - bounswe/bounswe2024group10 GitHub Wiki

1. Executive Summary

1.1. Project Summary

The domain of our project, Animal Troove, is animals. In our app, people can create an account to share pictures of their pets, rare animals they encounter, or an animal that they saw and want to learn what it is, furthermore users can also engage in fun convsersations in the comments of the posts. When posting, users can add a location and the name of the animal to the post, which will be used to store the post semantically using Wikidata API.

By using Wikidata API and utilizing semantic search, we can fetch interesting data about the animals, such as their diel cycle, speed, conservation status etc or find animals in a specific family. Moreover, when searching an animal, the posts containing animals that are in the same family also show up, enriching the learning experience.

1.2. Project Status

After the 2nd milestone, we changed the structure of the subteams. Since there was no need for a database team, we only had web frontend, mobile frontend and a backend group.

Unfortunately we weren't able to deploy the application for the 2nd milestone, but our team worked hard on it and managed to deploy the application which runs on a computer we rented from DigitalOcean.

Since the milestone, we have made improvements on the search such as being able see other animals and the posts in the same family as the main animal that is searched, and being able to search families and getting animals in that family.

We have also added post creation to our application as well. Registered users can now create a post by adding an animal name, which will be used to store the post semantically, location and a caption. Moreover registered users can comment, like and dislike the post, and all users will be able to see the comments on a post and the amount of likes and dislikes. And all users can see these posts in their home page.

Login and register functionalities were working before the 2nd milestone but we have also improved login by enforcing a strong password and keeping the password in hashed form for better security.

Registered users can also see their home page, which displays their posts.

1.3. Code and Release Tag

You can find our final release tag here

You can find our code here

1.4. Instruction for Building and Deploying the App

Installing project

To install the project: go to the desired location in your machine and run ' git clone https://github.com/bounswe/bounswe2024group10.git'. Alternatively, one can download the code zip folder.

Project Structure

After going to the root level of the project, you can access the src folder there. src folder contains backend,frontend and mobile codes.

Running Frontend

Go to web/animaltrove folder. Run 'npm i' to install project dependencies. After installing dependencies, run 'npm start' in order to start development server. You can access the development server on your browser on localhost:3000

Running Mobile App

Go to mobile/animaltrove folder. Run 'npm i' to install project dependencies. After installing dependencies, run 'npm start' in order to start development server. Metro bundler will return a qr code for expo. Install expo on your mobile phone and scan the given qr code, then app will be started on your device.

Running Backend

Go to backend/animaltrove folder. run 'mvn spring-boot:run' Then you can access the backend api on localhost:8080

Environment Variables

You need to set up these necessary environment variables to run the application. Go to the root of your project and create .env file to keep environment variables. Fill the .env file with these variable.

Spring Boot Settings

spring.application.name=animaltrove
spring.jpa.hibernate.ddl-auto=update
spring.datasource.url=jdbc:mysql://localhost:3306/AnimalTrove?useSSL=false&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.jpa.show-sql=true

Frontend Environment Variables

baseUrl: http://localhost:8080

Mobile Environment Variables

baseUrl: http://10.0.2.2:8080

docker-compose usage

Docker compose file helps us to build and run the Spring Boot project, React project and the MySQL database through volume and image composition. To run the application, multiple images for the apps should be composed into the docker-compose and run there.

Building and running docker containers

docker-compose up --build

By default, started web application will be running on localhost:3000 and the spring application will be running of localhost:8080.

Running the application online

Use that url to access the application: 165.22.95.135:3000

1.5. App Functionalities

You can find app functionalities with screenshots here

1.6 Apk of the mobile Application

APK link of the mobile App

1.7. API Documentation

You can find our documented API here

1.8. Deliverables

Name Status Link
Final Status of the Requirements Delivered Link
RAM Delivered Link
Project Plan Delivered Link
User Tests Delivered Link
Integration Tests Delivered Link

1.9. Application Meetings

Name Link
Database-1 Link
Frontend-1 Link
Backend-1 Link
Database-2 Link
Database-Backend Link
Mobile-1 Link
Frontend-2 Link
Backend-2 Link
Mobile-2 Link

1.10. Evaluation of Tools

1.10.1. Communication

Our main communication channel was still Whatsapp as it was in the 2nd milestone, since everyone can immediately see the messages in urgent scenerios. We also used independent subgroup Whatsapp channels to communicate subgroup related things. Moreover, by listening to the feedback, we started using issues more actively, using them for discussion spaces helped us focus on topics clearly and follow the progress of each task. Issues helped us immensely to track down the tasks that were being forgotten.

1.10.2. Project Plan

For the project plan we used ProjectLibre. ProjectLibre makes adding tasks and interdependencies and seeing the order of tasks really easy. Moreover, being able to add tasks while seeing the chart itself makes it easier to follow the flow while creating it.

1.10.3. Backend Framework

We used Java Spring for our backend framework, decision was almost unanimous, because most members were more experienced in Java's class structure rather than Python's. Also the team members who are knowledgable in Java Spring were able to teach the other backend subgroup members' the ropes effectively.

1.10.4. Database

For the database MySQL was chosen unanimously over PostgreSQL thanks to its ease of use. Moreover, most members were more familiar with MySQL making operating with it better for the group.

1.10.5. Frontend

We used React for developing our web application's frontend. Our main reason for using React is its user-friendly developing environment .Moreover, React is supported by a large community, providing developers with extensive documentation, guides, and helpful resources. Additionally, numerous third-party libraries and tools further facilitate the development of React projects. Finally, React's JSX syntax offers an HTML-like structure, enhancing code readability and comprehensibility. This boosted our productivity and ensured consistent coding practices throughout the project.

Also, we used react-native for our mobile application. React Native is a powerful framework for building cross-platform mobile applications, supported by a vast community and major industry players, resulting in a dynamic ecosystem and regularly updated libraries. Its component-based architecture allows for the modular development of mobile apps, ensuring reusability of components for cleaner and more maintainable code. This feauters of react-native have helped us a lot during the coding part of our mobile application.

1.10.6. Cloud Computer

We used DigitalOcean for our cloud computer. Thanks to DigitalOcean's 200$ gift card, we were able to rent a relatively good computer for running our application.

1.11. Team Management

Almost as soon as our teams were assigned, we have created our Whatsapp group in order to provide a fast and efficient communiacation inside our group. At the first stages of our project, we started having online Discord meetings where everyone available in the team would come and discuss our tasks and progress. Then, at the start of implementation stage, we divided our group into 4 subgropus, which are dealing with web frontend, mobile frontend, backend and database; where people can take part in one or more groups as well. Also the groups were not entirely seperate, some people were working in two groups, some of them work in one but support others, or at least help providing necessary communication between groups in order to make our progress in a parallel and compatible manner. During the implementation stage, some people from our database team started to take part in other groups, as these groups require more humanpower and we had more than enough people assigned to the databse team. In parallel of these subgroup creations, we also created Whatsapp groups for these subgroups as well, for providing more domain-specific, fast and efficient communication. Some groups also were able to meet face to face during the implementation stage, thus the more knowledgable members were able to jump start the process easier, since the less knowledgable members were able to watch the coding process first-hand.

Apart from these ways of communication, we were also active inside our GitHub repository as well. From the start of our project, we created and assigned issues for each other and discussed topics such as the current situation, up-to-dateness, how well and clear does the issue look, etc. under issue comments; while also providing support for some tasks (like installations, bug fixes, etc.) and gave practical solutions to each other. At first, we were not so active on our GitHub but after the first milestone, we realized that utilzing GitHub as a communication tool as well provides better trackability of our tasks and progress, as well as obtaining task-specific information in a faster and more detailed manner.

1.12. Challenges

From the start of our project till the end, we had some challenges. One of our first chalenges was the meeting scheduling and participation. As some people are working at somewhere where others can also have various other tasks, it was a bit difficult to find some time where everyone is available for a meeting. Also, as many people in our group live far away from the university, face-to-face meeting was almost impossible. As a solution, we had Discord meetings and tried to choose times so that a lot of group members would be available at that time.

A second challenge which we have faced was learning how to do the implementation. Some of our group members were experienced in software-related tasks like frontend, backend, etc. while some others does know much about these topics. As a result, the initial steps were usually done by those experienced ones while others learned about their domains by available resources on the Internet and also codes which were written by others inside the group. During this process, these experienced people guide others to provide a better understanding of what they are doing, and it was indeed quite helpful for them.

One of the biggest problems during the implementation was the time management of our tasks. As many people are busy with their tasks and responsibilities both inside and outside the school, it was hard to motivate ourselves for starting the implementation stage. As a result, things went on to the last minute and accordingly we were not able to fulfill all of our aimed objectives and some of them were missing.

1.13. Lessons Learned

After the 1st milestone we started communicating on issues more and we realized that issues were really effective at documenting what each person and subgroup was doing. Since there were different Whatsapp groups for subgroups we couldn't follow what the other teams were up to, but with the help of issues we could manage to be in the loop for the main tasks of each group.

Coding face to face was also quite effective. Right before the deadline we met in the Computer Engineering Department's student lounge and coded there with most of the team members present. The less knowledgeble members were able to watch or ask questions and understand the implementation much better.

2. Member Contributions

2.9. Nazlıcan Aka

2.9.1. Efforts

Task Name Related issue
Gülşen Sabak and me updated the previous Project Plan via using Project Libre. We assign dates and durations. #149
Gülşen Sabakand me updated the previous RAM, we add new rows to cover all tasks. #150 , #196
I have updated the project plan part in the wiki page project plan
I have upload the code of project plan 352_3.pod
I have created the post page for the web of the application #142
I have created Milestone - 3 with the help of Gülşen Sabak #141
Opened pull request #164
Wrote my contributions to the Milestone 3 Report #194

Challenges Faced:

For the third milestone, I needed to create post page for the web frontend. I have created sign-up and login pages for the web frontend but post page is different and harder than login and sign up pages. Therefore, I got help from Hüseyin Karataş. He is very experienced about frontend. The other challenge is that project needs so many complicated features, and also; in a limited time we need to full fill the deliverables. Unfortunately, it is really hard to learn about all complicated stuffs, and apply them at the same time in the project. I am quite lucky that our team has knowledgeable and experienced people. But, I felt very upset when I could help my friends at some points. This was really challenging; and I have learned my lesson, I will study very before to gain experience about necessary stuffs to be more helpful during the coding time.

3 Most Important Issues

#142 #58 #52

3 Most Important PRs

#164 #99

Wiki Documentation

Nazlıcan Aka wiki

Honor Code Statements

Nazlıcan Aka

Related to the submission of all the project deliverables for the project of the CMPE 352 course, during the 2024 Spring semester, reported in this report, I, Nazlıcan Aka, declare that:

  • I am a student in the Computer Engineering program at Boğaziçi University and am registered for the CMPE 352 course during the 2024 Spring semester.

  • All the material that I am submitting related to my project (including but not limited to the project repository, the final project report, and supplementary documents) have been exclusively prepared by myself.

  • I have prepared this material individually without the assistance of anyone else with the exception of permitted peer assistance which I have explicitly disclosed in this report.

2.2. Melih Akpınar

2.2.1. Efforts

Task Related
Create communication channels for backend team.
Create Spring Boot project and initialize backend. #68
Make Spring Boot configurations. #68
Implement a mock Animal entity class as an example for issue #81 to show my teammates how it's done. #81
Split tasks and open issues for backend team #81, #82
Design backend structure.
Implement register / login API. #81, #82
Implement the very first version of the search API. #123
Fix login endpoint bug detected by @OguzTNCR. #102
Implement password encryption and authentication token.
Fix CORS policy bug.
Set up Digital Ocean droplet and add people's public SSH keys
Lead Backend Meeting 2 and take notes.
Distribute user-post interaction tasks between backend people and open issues #134, #135, #136, #137
Fix dockerization. #144
Implement endpoints related to in-app posts. #134, #159, #160
Implement feed API.
Implement endpoints related to post-user interactions. #162, #169, #182
Fixed and resolved conflicts between the codes written by backend team.
Deliver all the front-end team's requests before the project presentation. #176, #179, #180
Deployment to DigitalOcean

2.2.2. Challenges Faced

One challenge I encountered during the development process was related to the CORS policy of Spring, particularly when interfacing with the frontend. We Postman was getting responses successfully butbfrontend consistently encountered errors upon sending requests. This made harder to address the problem. Eventually, we identified that the CORS policy was restricting requests from the frontend, causing the errors. Adjusting the CORS configuration in Spring solved this problem.

At the start of the 3rd milestone, everyone was excited, but as time went on, some people became less active. This meant that important tasks were left undone or not done well, which could have made our project fall behind. As the leader of the backend team, I stepped in and take on extra work to keep the project moving forward. This included writing key parts of the code, fixing errors, and sorting out problems in our work. While this was tough and sometimes frustrating, it taught me important lessons.

I learned the importance of staying strong and flexible when facing problems. By taking charge and staying positive, I was able to keep the project on track. This experience also showed me how important good communication and leadership are. By talking regularly with my teammates, setting clear goals, and offering help, I was able to create a more cooperative and productive team.

In the end, overcoming these challenges helped me grow as a leader and ensured the project was completed successfully. It reminded me that hard work and teamwork are essential for success.

Honor Code Statements

Mesut Melih Akpınar

Related to the submission of all the project deliverables for the project of the CMPE 352 course, during the 2024 Spring semester, reported in this report, I, Mesut Melih Akpınar, declare that:

  • I am a student in the Computer Engineering program at Boğaziçi University and am registered for the CMPE 352 course during the 2024 Spring semester.

  • All the material that I am submitting related to my project (including but not limited to the project repository, the final project report, and supplementary documents) have been exclusively prepared by myself.

  • I have prepared this material individually without the assistance of anyone else with the exception of permitted peer assistance which I have explicitly disclosed in this report.

2.3. Yasin Atlı

2.3.1 Top 3 most important issues

  • #147 - CreatePostScreen created for the mobile app
  • #165 - Search page redesigned to improve search service
  • #167 - Service response created for the mobile-backend connection

2.3.2 Top pull requests

  • #168
  • #158-- I have reviewed and resolved important conflicts

2.3.3 Contributions

I was actively involved in creating the APK file for the app, ensuring it was properly configured for both development and production environments. also redesigned the Search Page, implementing the necessary logic to handle search queries and dynamically update results. For the Create Post Page, I designed the UI and integrated the backend API to allow users to create new posts, including uploading images as base64-encoded strings. Additionally, I played a key role in redesigning our Home Page to improve user experience and performance, making it more intuitive and responsive. Specifically, I integrated the feed service on the Home Page, allowing users to view their feed posts more smoothly and efficiently. These efforts collectively enhanced the overall functionality and user experience of our app, ensuring it met the desired specifications and performance standards.

2.3.4 Challenges faced

In developing our React Native mobile app, we encountered several challenges while integrating API requests, particularly with adapting the search service results and connecting the create post service to the appropriate endpoints. Firstly, handling the dynamic nature of search results required careful state management to ensure that the UI accurately reflected real-time data changes without causing performance issues. This involved optimizing our use of hooks and ensuring that asynchronous operations were efficiently managed. Additionally, configuring the create post service presented its own set of difficulties, such as ensuring secure and reliable data transmission to the server, handling potential network errors gracefully, and validating user input to prevent any faulty data from being sent. Moreover, integrating base64-encoded images into the create post service added an extra layer of complexity. We faced challenges in encoding images correctly, ensuring the resulting base64 string was efficiently handled, and managing the larger payload sizes that came with base64 data. Overall, these challenges necessitated a thorough understanding of both frontend and backend integration, as well as robust error handling and user feedback mechanisms to create a seamless and responsive user experience.

Wiki Documentation

Yasin ATLI

Honor Code Statements

Yasin ATLI

Related to the submission of all the project deliverables for the project of the CMPE 352 course, during the 2024 Spring semester, reported in this report, I, Yasin ATLI, declare that:

  • I am a student in the Computer Engineering program at Boğaziçi University and am registered for the CMPE 352 course during the 2024 Spring semester.

  • All the material that I am submitting related to my project (including but not limited to the project repository, the final project report, and supplementary documents) have been exclusively prepared by myself.

  • I have prepared this material individually without the assistance of anyone else with the exception of permitted peer assistance which I have explicitly disclosed in this report.

2.4. Yusuf Kağan Çiçekdağ

3 Most Important Issues

  • #125 - Solving the "Android Network Error"
  • #126 - Implementing Search Functionality on Mobile
  • #137 - Creating Bookmark Endpoint

3 Most Important PRs

  • #96 - Creating MyProfile and Post pages
  • #124 - Adding a new version of codes for mobile
  • #146 - Bookmark Endpoint Implementation

Wiki Documentation

Yusuf Kağan Çiçekdağ Wiki Page

Implemented API Functions

I have implemented the Bookmark API Endpoint, which has the functionalities below:

  • A user can send a request to bookmark/unbookmark a post.
  • The corresponding service would return a corresponsing response for the incoming request.
  • Depending on the returned response, a specific post post can either be bookmarked or unbookmarked.

2.4.1. Contributions After Milestone 2

After Milestone 2, I have joined some team meetings, which are Second Milestone Feedback Meeting, Second Mobile Meeting and Second Backend Meeting, and discussed many things depending on the purpose of the meeting. I also edited some features inside some Mobile pages, including MyProfile page, Triple Page, and Settings Page. Also, I have implemented the Bookmark endpoint at the backend and added my contribution by the corresponding pull request. However, there was an error in my code, and fortunately, Melih Akpınar was able to solve it and did the corrected contribution. Apart from these, I have helped creating the Milestone 3 Report by writing parts 1.11 and 1.12, while editing my parts on the report, edited my parts at RAM and my own WikiPage as well.

2.4.2. Challenges Faced

One of my biggest issues during the implementation was connecting the mobile frontend to the backend server, which the team has spend lots of time onto. In the web application, sending request directly to the localhost (127.0.0.1) was working well, but it surprisingly did not work when it came to the mobile application. Later I have learned that we should have used 10.0.2.2 rather than 127.0.0.1 and also after fixing an https request with an http one, it eventually worked.

Also one of the issues I have faced was re-running the backend server after implementing the Bookmark endpoint. WHen I wrote the necessary codes and tried to run the backend server, it gave some weird-looking errors. At first, I tried to solve them myself but unfortunately it did not work out as expected. Thankfully, Melih Akpınar was eventually able to fix my errors and added the Bookmark endpoint implementation to our backend server.

Honor Code Statements

Yusuf Kağan Çiçekdağ

Related to the submission of all the project deliverables for the project of the CMPE 352 course, during the 2024 Spring semester, reported in this report, I, Yusuf Kağan Çiçekdağ, declare that:

  • I am a student in the Computer Engineering program at Boğaziçi University and am registered for the CMPE 352 course during the 2024 Spring semester.

  • All the material that I am submitting related to my project (including but not limited to the project repository, the final project report, and supplementary documents) have been exclusively prepared by myself.

  • I have prepared this material individually without the assistance of anyone else with the exception of permitted peer assistance which I have explicitly disclosed in this report.

2.5. Ömer Faruk Erzurumluoğlu

2.5.1. Efforts

Task Name Link Related Issue
Prepairing Unit Tests(failed) None None
Writing Mock Data None #148
Writing Comment Endpoints The Branch #135
Writing The API Documentation API Documentation #194
Write the ER Diagram ER Diagram #69, #76
Write the code for initializing the database Branch #73
Write the classes #106 #81
Write classes for query portability #106 #81
Docker and Deploy None #98
Find and Changed Some Requirements None None

2.5.2. Challenges Faced

While writing the classes for database implementation, I realized we did our whole ER diagram and SQL wrong. Since the ER diagram is required for progress of the database and backend, I sit through and fixed the ER diagram, rewrite the SQL code and wrote all of the classes in nearly 24 hours. It was a though process but since I was able to done it in time, we were able to progress in backend. I nearly had no idea about how to write the dockerfile and docker-compose.yml. Someone in our group wrote the Spring part of the dockerfile but we needed to connect it to a database. I was sure that the answers were given by the ChatGPT was right but after a lot of hours and some hysterics, I realized it gave me wrong answers. I looked at some examples and were able correct it. After that I tried to deploy but I could not. Since I did not speak with the forend, I did not know about npm run and threw away many hours. Some of colleagues were able to fix the issues though.

After the second milestone I hurt my leg and it reduced my productivity a lot. Because of my pain, I was mostly at home while my other teammates were meeting face-to-face. This caused a lot of communication issues. I could not attend to the review, I made a mock up data which my team did not wanted, I wrote unit tests for the wrong classes and many more. After all this mess, I downloaded InteeliJ to help me and realized I would not have lost many hours coding if I downloaded it sooner.

2.5.2 Top 3 most important issues

  • #135 - Comment endpoints
  • #81 - Writing the model classes
  • #73 - Writing the SQL tables

2.6. Onur Kafkas

2.6.1 Top 3 most important issues

  • #136 - Like/dislike endpoints
  • #153 - Dislike adaptation
  • #172 - Post class constructor bug

2.6.2 Top 3 pull requests

  • #152 - Controller, request, response, service implementation for like.
  • #163 - Like/dislike fix
  • #175 - Fix post/username issue

2.6.3 Contributions

I implemented the like and dislike functions by myself for the backend. I coded all their required spring files (controller, service, request, response, repository). I also coded all the same files for their unlike and undislike versions. I fixed an issue related to post creation. I altered its parameters and general related functionality.

I also helped with a few postman tests related to post creation. I co-analyzed bugs that my teammates had found. We encountered an issue related to the post endpoint that made us reconsider the database. The team decided to change the endpoint code and keep the database as is.

2.6.4 Challenges faced

The number of files required only for a single (like) functionality is very high when using Spring-boot. The connection between all these files and configuring all function parameters to be compatible with each other when importing other files were not easy to keep track of. Although the request and response files were pretty straightforward, the controller and especially the service were a bit more complicated. The functions within them required more care as I received build errors several times during the process, at the end of which I finally got the errorless docker build.

2.7. Hüseyin Karataş

2.7.1. Efforts

Task Name Related Issue / PR
Reviewed some issues and renamed them properly. #28
Contributed to the login and signup logic in the mobile app. #76
Opened some pull requests #131
Created some issues #132, #53, #55
Initialized the react web application. #52
Created the profile page and profile settings page for the web application #61
Connected Login and Signup Screens in web app to the backend endpoints #103
Added instructions for running the applications into the readme.md file #127
Contributed to the searching logic in the mobile app. #123

2.7.2. Challenges Faced

Version Control and Collaboration: Managing code changes and collaborating with my team was challenging since I have not worked on such team in which every team member edits the same repository. Some Conflicts and unexpected git errors have occured during development process.

2.8. Ali Bartu Konca

Personal Page

2.8.1. Efforts

For this milestone I have implemented semantic value for the posts, which we find from the name of the animal (the family of the animal), to be able to find the related posts when searching for an animal you can see the pull request and the related issue.

I have also added more queries to the search to find animals more effectively, added a functionality to be able to find animals from a family, added a functionality to be able to see related animals and related posts to the searched animal, added the functionality to be able to search for users. You can see the related issue and the pull request

I have also written the summary and the status of the project for the report, tagged the final release of the project, tested and screenshotted the app functionalities, updated the final status of the requirements, researched and written the yaml file for the documented API functionalities of the app with the initial written documentation from Ömer Faruk Erzurumluoğlu.

I have also presented our application in the demo and coordinated the team in general.

Most of my work was for the search functionality of the app. At first it could only search species with one query and return info, which is fetched from Wikidata, on that species, now we can search a species, we send multiple alternative queries to find the animal, and get other species or posts which contain an animal in the family of the initially searched species. We can also search for families to get info on species in that family.

Searcing for species

Request:

{
  "searchTerm": "s@jaguar"
}

Response: (There are more results, I cut them off to be able to show them the main part on screen)

{
    "animalInfoSearch": [
        {
            "name": "Panthera onca",
            "cycle": null,
            "pregnancy": "99^^http://www.w3.org/2001/XMLSchema#decimal",
            "lifeExpectancy": null,
            "heartRate": null,
            "speed": null,
            "numberOfBirths": "2",
            "pic": "http://commons.wikimedia.org/wiki/Special:FilePath/Jaguar%20%28Panthera%20onca%20palustris%29%20female%20Piquiri%20River.JPG",
            "wingSpan": null,
            "conservationStatus": "Near Threatened",
            "mainLabel": "jaguar",
            "code": 0
        },
        {
            "name": "Panthera leo",
            "cycle": "crepuscular",
            "pregnancy": "108^^http://www.w3.org/2001/XMLSchema#decimal",
            "lifeExpectancy": null,
            "heartRate": null,
            "speed": null,
            "numberOfBirths": "2.5",
            "pic": "http://commons.wikimedia.org/wiki/Special:FilePath/Okonjima%20Lioness.jpg",
            "wingSpan": null,
            "conservationStatus": "Vulnerable",
            "mainLabel": "lion",
            "code": 140
        }
    ],
    "users": [],
    "posts": [
        {
            "postID": 1,
            "username": "bartu",
            "animalName": "lion",
            "media": "...",
            "caption": null,
            "photoDate": null,
            "postDate": "2024-05-17T17:27:00.022+00:00",
            "location": null
        }
    ],
    "userShouldClarify": false
}

Searching for family

Request:

{
    "searchTerm":"f@Picidae"
}

Response:

{
    "animalInfoSearch": [
        {
            "name": null,
            "cycle": null,
            "pregnancy": null,
            "lifeExpectancy": null,
            "heartRate": null,
            "speed": null,
            "numberOfBirths": null,
            "pic": "http://commons.wikimedia.org/wiki/Special:FilePath/Northern%20Flicker.jpg",
            "wingSpan": null,
            "conservationStatus": null,
            "mainLabel": "Northern Flicker",
            "code": 16819
        },
        {
            "name": null,
            "cycle": null,
            "pregnancy": null,
            "lifeExpectancy": null,
            "heartRate": null,
            "speed": null,
            "numberOfBirths": null,
            "pic": "http://commons.wikimedia.org/wiki/Special:FilePath/Jynx%20torquilla%20%2834536504885%29.jpg",
            "wingSpan": null,
            "conservationStatus": null,
            "mainLabel": "Eurasian Wryneck",
            "code": 25678
        }
    ],
    "users": [],
    "posts": [],
    "userShouldClarify": false
}

Searching for users

Request:

{
           "searchTerm":"u@bar"
}

Response:

{
    "animalInfoSearch": [],
    "users": [
        {
            "name": "name",
            "birthday": null,
            "userName": "bartu",
            "bio": null,
            "email": "[email protected]",
            "password": "$2a$10$BmFynVGeM.18Wj4RoNdRbexjXK8L5MLyAmbQ2m5iBQUQoGxmvPCxy",
            "profilePicture": null
        }
    ],
    "posts": [],
    "userShouldClarify": false
}

Unfortunately I wasn't able to run any automated unit tests.

2.8.2. Challenges Faced

The implementation stage has been the most difficult for me since I wasn't familiar with anything, however as I started working on more backend related tasks, I was able to follow the discussions more.

Creating the right queries in Wikidata was also difficult because of how animals are stored in Wikidata. Most of them are stored as taxonomical rankings, which is easy to find. But "well known" animals have their own instances and types which made it really difficult to find the correct entities. But I was (mostly) able to overcome this problem by sending multiple alternative queries.

Testing my code was also a problem at the start because I couldn't manage to downlad Maven to my computer so I couldn't run the application. I had to ask for help from Oğuzhan Tuncer for testing, which took longer than it should have because we were texting the results. However, I was finally able to install Maven to my computer and my teammates helped me a lot in understanding how running an application and testing the endpoints on Postman work.

When I started working on searching for users, I didn't fully understand how the rest of the backend worked, such as the repositories, but Melih Akpınar was able to implement the method to find users by name, which I examined to create the method for finding posts by families when a species is searched.

2.9. Gülşen Sabak

2.9.1. Efforts

Task Name Related issue
Nazlıcan Aka and me updated the previous Project Plan via using Project Libre. We assign dates and durations. #149
Nazlıcan Aka and me updated the previous RAM, we add new rows to cover all tasks. #150
I have created the user test template to fit user tests in a scale. #156
I have wrote all user tests. #151
I have created the integration test template to fit integration tests in a scale.. #177
I have wrote all integration tests. #170
I have created User Profile Screen for mobile. #157
Yasin Atlı and me have created service response constants for mobile. #167
I have helped Nazlıcan Aka for Milestone 3 updates #141
Opened pull request #158
Review pull request #168
Wrote my contributions to the Milestone 3 Report #194

Challenges Faced:

In that milestone, I have faced some little challenges. Actually, since I have practiced creating a Screen too much, I have not be challenged in that part. However, at the begining writing service response is a little bit confusing for me. After, I understand the specific logic behind it, I understand how to write them. In addition, writing integration tests is a little bit hard for me, since I was not sure about how to write them. I have searched it in the internet. Also, I have checked previous years integration tests. After these ones, I got how to write them, and I have created tests.

Github Links for issues, pull requests and wiki documentation:

  • I have created Screens in mobile part. I just pushed the code for Screens. I didn't create pull request for all of them. Also, at the begining of the milestones, I was working on database part. Because of that, I don't have too much pull requests. Also, in general, I have commited and pushed the changes to side branches not directly main. Because of that, my contribution may seem little, but in actual it is not. Also, I have reviewed some pull requests.

    • These are the link for my pull requests. #158 and #109
    • These are the link for pull requests that are reviewed by me. #168 and #90
  • I think the 3 most important issues are these ones:

    • I think, all type of tests are important for that milestone. I wrote all of th euser tests for milestone. #151
    • Tests are important for that milestone. I wrote all of the integration tests for milestone. #170
    • I think, writing service response constants are important. Without them we cannot implement the mobile correctly. #167
  • Wiki documentation: Gülşen Sabak

2.10. Oğuzhan Tuncer

2.10.1 Top 3 most important issues

  • #174 - Connection of posts/getFeed endpoint and rendering the postCard components accordingly in the home page.
  • #143 - Connection of the endpoints related to like, dislike and bookmark.
  • #132 - Web app deployment.

2.10.2 Top 3 pull requests

  • #166 - Post card actions
  • #185 - Feed, getUserPostInteractions actions
  • #187 - User authentication bug fix.

2.10.3 Contributions

I tested the posts/create endpoint and created a few posts to populate our app's feed. I realized that we couldn't store the base64 encoded media in our database, so I researched solutions and decided to use the @Lob annotation. Then tested and connected the posts/getFeed endpoint to get the feed and render it in the home page.

For the postCard actions i connected the users/like, users/unlike, users/dislike, users/undislike, users/bookmark, users/unbookmark endpoints to activate the related buttons. In the posts/getFeed some of the fields like likeCount and dislikeCount were missing. I've also connected the users/getLikeCount and users/getDislikeCount endpoints to display the counts, and the users/getUserPostInteractions endpoint to show whether the authenticated user has performed any of the actions.

I realized that the axios library ignores the request body for the get endpoints. Therefore i changed some of the endpoints' method from get to post.

In the users/getUserPostInteractions endpoint, there was a bug where the bookmarked and liked fields were interchanged. I found and corrected it with the help of Hüseyin Karataş.

I helped Mesut Melih Akpınar with the docker file of the web app and deployment to the digitalocean.

2.10.4 Challenges faced

I faced numerous unexpected errors in the endpoints such as methods of the endpoints, interchanged fields etc. Debugging them required attention even though they were very small bugs.

2.11. Hüseyin Karataş

2.11.1. Efforts

Task Related
Leaded the post creation page for the web app. Connected input form with backend. #197
Edited search page as to include different searching category buttons (family or semantic) #165
Created post detail modal which gets opened when clicking a post card. #181
Created commenting logic on post modal and connected to backend. #145
Updated the postcard design
Fetching user's post on profile page
Kept authToken on the local storage.

2.11.2. Challenges Faced

As project got complicated, team collaboration and branch management got also difficult to handle. With multiple team members working on different features simultaneously, merge conflicts became a frequent issue. Resolving these conflicts required significant time and effort, often delaying the development process. On the other hand, image handling on the post creation page was a challenge. First of all, since users can pick a photo from their device, we had to render the data of the selected image on the page, not having an external image URL. The other side of this challenge was about sending the image data to the backend as base64, which increased the payload size and required conversions before sending the data.

2.11.3 Contributions

As a key member of the web application development team, I led the development of the post creation page, ensuring seamless integration between the input form and the backend (#197). This involved rendering user-selected images on the page and efficiently handling base64 image data transmission. I also enhanced the search functionality by adding buttons for different search categories, such as family or semantic searches (#165).

Additionally, I created a detailed post modal that opens upon clicking a post card, providing users with an in-depth view of each post (#181). To facilitate user interaction, I developed the commenting logic within the post modal and connected it to the backend, enabling real-time comment posting and retrieval (#145).

I updated the design of the post cards to enhance visual appeal and usability, and implemented the feature for fetching a user’s posts on their profile page. Furthermore, I ensured secure user sessions by keeping the authToken in local storage, improving user authentication persistence.

2.11.4 Top 3 issues

  • #181 - Post Detail Modal
  • #145 - Comment actions for post detail
  • #197 - Showing semantically related posts on the search page.

2.11.5 Top 3 pull requests

  • #183 - Post detail modal
  • #186 - Post creation action.
  • #189 - User post's fetching on profile page.

3. Honour Code Statements

Hüseyin Karataş

Related to the submission of all the project deliverables for the project of the CMPE 352 course, during the 2024 Spring semester, reported in this report, I, Mesut Melih Akpınar, declare that:

  • I am a student in the Computer Engineering program at Boğaziçi University and am registered for the CMPE 352 course during the 2024 Spring semester.

  • All the material that I am submitting related to my project (including but not limited to the project repository, the final project report, and supplementary documents) have been exclusively prepared by myself.

  • I have prepared this material individually without the assistance of anyone else with the exception of permitted peer assistance which I have explicitly disclosed in this report.

Ali Bartu Konca

  • Related to the submission of all the project deliverables for the project of the CMPE 352 course, during the 2024 Spring semester, reported in this report, I, Ali Bartu Konca, declare that:

  • I am a student in the Computer Engineering program at Boğaziçi University and am registered for the CMPE 352 course during the 2024 Spring semester.

  • All the material that I am submitting related to my project (including but not limited to the project repository, the final project report, and supplementary documents) have been exclusively prepared by myself.

  • I have prepared this material individually without the assistance of anyone else with the exception of permitted peer assistance which I have explicitly disclosed in this report.

Gülşen Sabak

Related to the submission of all the project deliverables for the project of the CMPE 352 course, during the 2024 Spring semester, reported in this report, I, Gülşen Sabak, declare that:

  • I am a student in the Computer Engineering program at Boğaziçi University and am registered for the CMPE 352 course during the 2024 Spring semester.

  • All the material that I am submitting related to my project (including but not limited to the project repository, the final project report, and supplementary documents) have been exclusively prepared by myself.

  • I have prepared this material individually without the assistance of anyone else with the exception of permitted peer assistance which I have explicitly disclosed in this report.

Ömer Faruk Erzurumluoğlu

Related to the submission of all the project deliverables for the project of the CMPE 352 course, during the 2024 Spring semester, reported in this report, I, Ömer Faruk Erzurumluoğlu, declare that:

  • I am a student in the Computer Engineering program at Boğaziçi University and am registered for the CMPE 352 course during the 2024 Spring semester.

  • All the material that I am submitting related to my project (including but not limited to the project repository, the final project report, and supplementary documents) have been exclusively prepared by myself.

  • I have prepared this material individually without the assistance of anyone else with the exception of permitted peer assistance which I have explicitly disclosed in this report.

Oğuzhan Tuncer

Related to the submission of all the project deliverables for the project of the CMPE 352 course, during the 2024 Spring semester, reported in this report, I, Oğuzhan Tuncer, declare that:

  • I am a student in the Computer Engineering program at Boğaziçi University and am registered for the CMPE 352 course during the 2024 Spring semester.

  • All the material that I am submitting related to my project (including but not limited to the project repository, the final project report, and supplementary documents) have been exclusively prepared by myself.

  • I have prepared this material individually without the assistance of anyone else with the exception of permitted peer assistance which I have explicitly disclosed in this report.

Onur Kafkas

Related to the submission of all the project deliverables for the project of the CMPE 352 course, during the 2024 Spring semester, reported in this report, I, Onur Kafkas, declare that:

  • I am a student in the Computer Engineering program at Boğaziçi University and am registered for the CMPE 352 course during the 2024 Spring semester.

  • All the material that I am submitting related to my project (including but not limited to the project repository, the final project report, and supplementary documents) have been exclusively prepared by myself.

  • I have prepared this material individually without the assistance of anyone else with the exception of permitted peer assistance which I have explicitly disclosed in this report.