Skip to content

Berkay Döner Time Tracking

berkaydoner edited this page Jan 7, 2022 · 20 revisions
CMPE352 My weeks are separated according to the homework deadlines, not the actual dates.

Week 1

During the first week, we mostly spent our time learning Git and setting up Wiki pages.

Task: Git Study&Research

Duration: 2.5 hours
Type of Work: Study&Research
Details: This was the first task I started before our group meeting. I watched the Git For Ages 4 And Up video and read some articles online. Then, after the meeting, I was assigned to write the Wiki page about Git. To write a detailed page, I checked more articles and some manual pages.

Task: Writing the Git Wiki Page

Duration: 1.5 hours
Type of Work: Enhancement
Details: I assembled the articles and manual pages I have found. I also searched for some diagrams to include in the page. Even though I did not write a very long Wiki page, it still took me some time.

Task: GitHub Repository Research

Duration: 35 minutes
Type of Work: Research
Details: I decided one of the repositories easily because it was a repository I was using for a time. I just checked its Wiki page to prepare a good summary. I also searched and added one more repository.

Task: Writing the Personal Wiki Page

Duration: 10 minutes
Type of Work: Enhancement
Details: I wrote an about me section, listed my programming skills and provided my contact info.

Task: Editing the Main Page of our Github Repository

Duration: 15 minutes
Type of Work: Enhancement
Details: I wrote an introduction about our repository and included my team members name. I also added links to our personal Wiki pages and to our Wiki home page.

I also opened and closed some issues and modified the labels of the issues. However, I don't think it is necessary to include them as separately as they were very minor tasks. Since this is the first week and there is not much to do, I think we are in a good place as a group right now. However, we can totally improve our GitHub page in terms of design and content after the feedback of the teaching team. I spent a total of almost 5 hours this week.

Week 2

Task: Attending the Meeting

Duration: 2.5 Hours
Type of Work: Meeting
Details: I have attended both of the meetings we have organized this week.

Task: Preparing Questions to be Asked to Customers

Duration: 1 Hour Type of Work: Documentation
Details: I have prepared some questions about some confusing parts of the project description and also about some design choices.

Task: Formulating the Non-Functional Requirements

Duration: 2 Hours
Type of Work: Research&Documentation
Details: I made a research about some types of non-functional requirements and selected some of them. Then, I formulated the necessary requirements for these types according to our project description.

Task: Editing&Formatting Requirements

Duration: 1.5 Hours
Type of Work: Documentation
Details: I reviewed the requirements the other team members have written. I also made some modifications on the requirements I wrote earlier according to the feedback team members gave. I also changed the format of the requirements page, I added some nested collapsible headers to improve readability.

Week 3

Task: Attending the Team Meeting

Duration: 1 Hour
Type of Work: Meeting
Details: I have attended the team meeting we organized this week. It was relatively short as some team members had an exam next day.

Task: Attending the Customer Meeting

Duration: Around 1.5 Hours
Type of Work: Meeting
Details: I have attended the customer meeting we arranged during the weekend. I had also taken the notes of our previous meeting in the PS, I also took the notes of this meeting as well.

Task: Formulating a Scenario & Designing Mockups

Duration: 8 Hours
Type of Work: Documentation&Design
Details: I was responsible for creating a scenario where the user applies to events both as a player and a spectator. I created the persona, story, pre-conditions, accepted criteria and two separate mockups for Web and Android applications. This task took a lot of time since I only used the search results page as a template, I designed the event page, profile page, notification page for both Web and Android by scratch. I also had to revise my mockups several times as due to some minor errors.

Task: Writing Customer Notes

Duration: 40 Minutes
Type of Work: Documentation
Details: I wrote up the notes I had taken during customer meetings. I provided the answers in a Q&A format and also added some conclusions and actions.

Week 4

Task: Attending the Team Meeting

Duration: 4.5 Hours
Type of Work: Meeting
Details: I have attended all the team meetings we organized this week and the last week. During first two meetings, I helped constructing our class diagram. In the last meeting, we constructed the use case diagram together. I listed the main functionalities that can be used by different actors and helped with the overall structure of the diagram.

Task: Attending the Customer Meeting

Duration: 2 Hours Type of Work: Meeting
Details: I have attended the customer meeting we arranged during the weekend and also during the PS. I took notes of the meetings, asked questions and presented my work. The first meeting was mostly about our class diagram and the second meeting was about sequence diagrams.

Task: Writing Customer Notes

Duration: 40 Minutes
Type of Work: Documentation
Details: I wrote up the notes I had taken during customer meetings. I provided the meetings in our Github page.

Task: Constructing Class Diagram

Duration: 4 Hours
Type of Work: Documentation&Design
Details: I was responsible for creating the notification related classes. I prepared the Notification Handler, Notification and User/Event classes. Then, I helped with the overall structure of the diagram. I have fixed the arrow types, provided the cardinality requirements and contributed heavily on the UserProfile, Following/Blocking, Badge, Privacy Option classes. I reviewed all classes except the search related classes and added some fields/methods.

Task: Designing the Use Case Diagram

Duration: 1 Hour
Type of Work: Documentation&Design
Details: We created most of the Use Case Diagram together in the meetings. Apart from that, I fixed the syntax of the arrow labels and changed the overall structure of the diagram to make it more readable. I also added several cases that we did not add in the meeting.

Task: Sequence Diagrams

Duration: 2.5 Hours
Type of Work: Documentation&Design
Details: I firstly made research about the format of the sequence diagrams. I then created 5 sequence diagrams: User posts a comment on the discussion page, user answers a discussion comment, user gives a badge to another user, user follows a user and user blocks a user. Some of the diagrams were similar so it was not that hard. The part that took me the most time was the case when a new object is created in the diagram. I could not find many examples of that on the slides so I checked some websites.

Task: Editing Requirements

Duration: 1 Hours
Type of Work: Documentation
Details: At the beginning of the design stage, we noticed that some of our requirements were incomplete and some of them were incorrect. Therefore, I decided to update them. I went over the requirements, listed the requirements that should be modified/deleted/added. I added the listed requirements and shared the requirements that should be modified/deleted with my team members. They also went over the list and corrected their requirements.

Week 5

Task: Listing Future Work for the Project Plan

Duration: 2 Hours
Type of Work: Documentation
Details: I listed the possible implementation steps for the future which took me some time. I separated the work to backend&frontend&android parts. I also provided some predecessor&successor relationships. I also shared the resource allocation, which was the same as the RAM.

Task: Creating RAM

Duration: 4 Hours
Type of Work: Documentation
Details: I first listed all the work we have done thus far, then I listed the possible work steps I documented for the project plan. For the CMPE451 part, I did the assignments myself by considering the backend&frontend&android team formations. My teammates filled their parts for the CMPE352 part after I shared the table with them. I finally did an overall review of the table.

Task: Editing Mockups&Sequence Diagrams

Duration: 1 Hour
Type of Work: Enhancement
Details: Last week I got some feedback from our TA about my sequence diagrams. I modified my diagrams according to the feedback. I also modified some of my mockups, I added previous page buttons.

API Implementation - Week 1

Task: Attending the team meeeting

Duration: 2 Hours
Type of Work: Meeting
Details: I attended the team meeting where we distributed API methods to team members. I shared my ideas about possible API methods and was assigned event get method.

Task: Studying Flask&API

Duration: 4 Hours
Type of Work: Study
Details: I studied Flask by watching some Youtube videos and going over our instructor's example codes.

Task: Implementation of get method for events

Duration: 4 Hours
Type of Work: Implementation
Details: I implemented an initial version of event search method. In this version, there were limited number of filters and I was not using database queries to apply filters. Essential idea of the initial version was to get familiar with the Google Maps API. I also focused on getting nearby events functionality, for which I used a Python version of Haversine distance calculation.

API Implementation - Week 2

Task: Study Rest-API

Duration: 1 Hour
Type of Work: Study
Details: I noticed that I did not know some API concepts. I decided to read some resources, particularly this article helped me a lot.

Task: Attending the team meeting

Duration: 2 Hours
Type of Work: Meeting
Details: I shared my implementation with other team members and got their feedback. Also explained some core concepts I applied in my implementation.

Task: Setting up database structure

Duration: 3 Hours
Type of Work: Implementation
Details: After we decided that we are going to use PostgreSQL with the some of the database tables we defined in the class diagram, I installed and set up PostgreSQL in my local system. Then, I implemented the table initialization code for the post and eventpost tables, which uses SQLAlchemy to connect to PostgreSQL server.

Task: Improving my API method

Duration: 4 Hours
Type of Work: Implementation
Details: I implemented the more complex version of event search method. I defined several more filters and used SQLAlchemy to use database queries to apply filters. I also started to use Geolocation API in addition to Geocoding API of Google to provide address identification from IP address. Implementation of filters took me a lot of time since I was using complex column types in the eventpost table, which are hard to manipulate using SQLAlchemy, since SQLAlchemy is more useful for simple queries. For example, I had to convert my Haversine distance code to PostgreSQL function, otherwise I couldn't use SQLAlchemy to filter nearby events.

API Implementation - Week 3

Task: Attending the team meeting

Duration: 3 Hours
Type of Work: Meeting
Details: We organized a team meeting where we shared our progress with each other.

Task: Attending the TA meeting

Duration: 2 Hours
Type of Work: Meeting
Details: We shared our code with our TA, got some feedback and discussed about unit tests. Our TA also told us to focus on documentation as it is very important.

Task: Attending the Docker PS session

Duration: 2 Hours
Type of Work: Study
Details: I attended the Docker PS meeting organized for the week. This meeting was very helpful to get more familiar with Docker.

Task: API Documentation For Get Events

Duration: 30 Minutes
Type of Work: Documentation
Details: After we decided that we were going to provide API documentation in the Github Wiki, I wrote the documentation for the get events method I implemented. I also wanted us to write API documentation using Flasgger; however, some team members were behind the expected progress; therefore, we went with the Wiki documentation only.

Task: Implementing the post comment method

Duration: 1.5 Hour
Type of Work: Implementation
Details: I implemented the post method for comments. I used database queries from the start. Function itself was very basic compared to the get event search method I implemented earlier. However, post request was a little bit different than a get request, so it took me some time. I also opened up a pull request for the function after my implementation was done.

Task: Unit test study

Duration: 2 Hours
Type of Work: Study
Details: I did not understand unit tests in the lecture much. For very basic functionalities, they were very clear. However, I could not figure out how to develop unit tests for functionalities we developed that are linked to the database. I made a research about the topic, I have observed that there were some approaches to use Mock package of Python to mock databases. However, I did not use Mock in my unit tests after I talked to our instructor about the topic.

API Implementation - Week 4

Task: Attending team meetings

Duration: 4 Hours
Type of Work: Meeting
Details: We organized meetings for the implementation part of the assignment and the group report. In total, they took about 4 hours.

Task: Attending the DevOps PS session

Duration: 2 Hours
Type of Work: Study
Details: I attended the DevOps PS meeting organized for the week.

Task: Implementing the get comment by id method

Duration: 1 Hour
Type of Work: Implementation
Details: I implemented the get method for individual comments. Function was basic and I was familiar with get requests by the time. Therefore, it did not take me a lot of time.

Task: Unit test for event search

Duration: 2.5 Hours
Type of Work: Implementation
Details: After we decided that we were going to use a test database in out unit tests. I wrote some unit tests for the event search functionality. I wanted to test all the filters and the sorting option of the method. Therefore, I implemented a extensive unit test class that checks all the functionalities provided by the functions. Luckily, my method passed all the tests.

Task: Unit test for posting comments

Duration: 1 Hour
Type of Work: Implementation
Details: I wrote unit tests that work on the test database, similar to the previous unit tests. These tests were much simpler as the method was; therefore they did not took me as much time as the other tests.

Task: Unit test for getting comment by id

Duration: 1 Hour
Type of Work: Implementation
Details: I wrote unit tests that are similar to those for posting comments. This method had an additional check, so it was a little bit longer.

Task: Helping the frontend part

Duration: 2 Hours
Type of Work: Implementation
Details: I was not assigned to the frontend part of our project; however, since I was finished with my functions and unit tests I decided to help the frontend part, which was incomplete even few days prior to the deadline. I tried to implement the Create Event Post and Create Equipment Post pages; however, I was not familiar with React.js so I couldn't do much. I added necessary form fields and used Date and Time pickers of Material-ui for date and time inputs.

Task: API Documentation for post comment and get comment by id

Duration: 1 Hour
Type of Work: Documentation
Details: After the two methods were complete and were passing the unit tests, I wrote the API documentation for these methods.

Task: Contribute to M2 Group Report

Duration: 2 Hours
Type of Work: Documentation
Details: I helped copying the API documentation from our Github Wiki to the report and fixed some formatting issues. I also added Geolocation and Geocoding API parts, wrote my personal efforts and provided some explanation about the tools we used, Postman, PostgreSQL and Flask.

Task: M2 Individual Report

Duration: 7 Hours
Type of Work: Documentation
Details: I wrote my individual report over several days, which took me about 7 hours combined. I wrote a long report explaining all parts of my efforts in the assignment. I provided an executive summary, a learning progress, API codes and their explanations, sample requests, detailed list of my reviews and pull requests and issues.

CMPE451

Week-1

Task: Revising project requirements and mockup

Duration: 3 Hours
Type of Work: Documentation
Details: We had some incorrect and unnecessary requirements. We decided to fix these in the first week, also we decided to fix any errors in our mockups. I checked some of the requirements and the mockups I created in CMPE352. I discussed my additions and modifications at: Revising requirements, Revising requirements-2 and Revising Scenario#3

Week-2

Task: Revising project plan

Duration: 2 Hours
Type of Work: Documentation
Details: We decided to fix our previous project plan, especially the tasks and the dates. We fixed our project plan with Necip and Doğukan. This is discussed in Rework of the project plan

Task: Study React

Duration: 5 Hours
Type of Work: Study
Details: I will be a part of the frontend team, I am familiar with HTML, CSS and JS; however, I am not familiar with React. So, I decided to go over some tutorials. I followed this detailed tutorial.

Task: Activity Stream&Wikidata Research

Duration: 1 Hour
Type of Work: Research
Details: We are expected to learn and use Activity Stream and Wikidata in our project. I decided to learn about them, I went over some videos and their official documentation.

Week-3

Task: Study React

Duration: 5 Hours
Type of Work: Study
Details: I finished the tutorial and implemented the demo in the tutorial on my local system as an exercise.

Task: Revising Sequence Diagrams

Duration: 3 Hours
Type of Work: Documentation
Details: After the lecture about the sequence diagrams, I noticed that my sequence diagrams did not include any database actor even though there were connections with the database, therefore I decided to add database actor to the sequence diagrams I created in CMPE352:

I also changed the logic of some of these sequence diagrams.

Task: Study Tailwind CSS

Duration: 1 Hour
Type of Work: Study
Details: As a more experienced frontend developer, Doğukan suggested us Tailwind CSS for the designs of the frontend pages. I explored some basic components such as headers and search bars from the official documentation. I thought this library was advanced and Şefika and I would have difficulty with keeping up with Doğukan using such a complex library. After my comment, Doğukan decided to use Material UI library.

Week-4

Task: Study Material UI

Duration: 3 Hour
Type of Work: Study
Details: As we decided to use Material UI as the design library, I learned more about it by following it official documentation. I read about its components and installed it to my system.

Task: Designing&Implementing the home page of frontend

Duration: 3 Hours
Type of Work: Implementation
Details: I implemented a home page structure where sports can be seen in a grid. 12 events are fetched and users can move between these with backward and forward buttons. I made an API request to the Decathlon API to get the sport images, titles and descriptions. I made a research and decided that the Grid and Card components of Material UI could be used for the design. Doğukan also helped me during the implementation as he is more experienced. I discussed my progress in the home page in #143. I also opened the pull request #171

Task: Implementing the login page

Duration: 3 Hours
Type of Work: Implementation
Details: I designed a simple login page with username and password fields. I decided to use the Paper component of Material UI as the layout and TextFields as the text inputs. I also included the relevant links to navigate to the register and forgot password page. I reported my progress in #153. I also opened a pull request for the task in #183.

Week-5

Task: Reviewing pull requests

Duration: 1 Hour
Type of Work: Documentation
Details: I reviewed the pages Doğukan implemented and gave some feedback, discussed in #151, #157 and #194.

Task: Adding events to the home page

Duration: 1.5 Hours
Type of Work: Implementation
Details: I had designed to have a grid where events can be seen in Cards similar to the sports before but I had not implemented it. Therefore, I decided to include event cards with dummy data to the home page.

Task: Implementing the forgot password page

Duration: 4 Hours
Type of Work: Implementation
Details: I designed a dynamic form page where users first write their emails and then their new passwords if the token sent to their email is correctly given. This page was hard to implement because it had two stages and it displayed error messages for any errors. I discussed my progress in #179. I also opened a pull request for the task here #184.

Task: Implementing the create event page

Duration: 2.5 Hours
Type of Work: Implementation
Details: I designed a simple form page for creating events. I used different types of fields such as Date and Time pickers. I also included an autocomplete dropdown for sport type, where I fetched the available sports with Decathlon API. I discussed my progress in #181. Related pull request is in #170.

Task: Improving the design of the homepage and event card layouts

Duration: 1 Hour
Type of Work: Implementation
Details: Since the contents of the recently added event cards were not organized, I decided to fix the design of these cards. I opened a pull request for this task in #182.

Week-6

Task: Connection to the backend

Duration: 1 Hour
Type of Work: Implementation
Details: Since a working version of the backend was deployed very late, I had to connect my pages in a short time. I already had written some of the general structure of the controllers for the backend endpoints with API documentation, so I quickly made some small modifications and managed to connect them. I connected the login and forgot password pages to relevant endpoints. I could not connect the create event page and events in the frontend to the backend because their API documentation was not written and I could not read their implementations in such a short time.

Task: Contribution to the group milestone report

Duration: 4 Hours
Type of Work: Documentation
Details: I have contributed heavily to the milestone report, especially to the executive summary, evaluation of the status of deliverables and addressed requirements parts. I also wrote my personal contribution, put the frontend pages I worked on to the report and fixed the general structure of the report. #201, #199

Task: Writing the individual milestone report

Duration: 2 Hours
Type of Work: Documentation
Details: I wrote my personal milestone report where I explained my contributions in detail and explained my implementations together with images of the pages I implemented.

Week-7

Task: Deciding on the components to use for comments/answers

Duration: 1 Hour
Type of Work: Research
Details: Since we need to display the comments and answers in a nested format, I decided to search for suitable components. After some research, I decided to use the List component of Material UI for the task.

Task: Research about mapping libraries

Duration: 1.5 Hours
Type of Work: Research
Details: I made some research for a library that allows mapping functionalities we want for our application. I decided to use Leaflet and React-leaflet libraries as it is open source and easy to use.

Task: Contributing to API documentation for event search

Duration: 1 Hour
Type of Work: Documentation
Details: During the PS hours, we decided on the format of the event search functionality in the Activity Stream format. Doğukan wrote the documentation and I helped with the structure.

Week-8

Task: Contributing to API documentation for comments/answers

Duration: 1.5 Hours
Type of Work: Documentation
Details: During the PS hours, we decided on the format of the comments and answers in the Activity Stream format.

Task: Implementing the map with marker component for event creation page

Duration: 2.5 Hours
Type of Work: Implementation
Details: As I planned earlier, I used the leaflet library to initialize a map centered at İstanbul. I followed the Draggable Marker tutorial from the react-leaflet documentation to implement the marker to specify the location of the event. I also added a function on viewing the map that centers the map around the marker whenever the marker is moved. #214, PR: #233
Commits:

Task: Implementing the search bar for searching locations

Duration: 2.5 Hours
Type of Work: Implementation
Details: I decided to improve the user experience by adding a search bar for general locations such as countries, cities, streets… For this, I initialized a autocomplete search bar that sends a request whenever user types to Nominatim API and displays the locations that are fetched. Users can click on an option to navigate to the location and move the marker to the location. #214, PR: #233
Commits:

Task: Implementing the initial version of the comments/answers

Duration: 2.5 Hours
Type of Work: Implementation
Details: I used the List component of Material UI as I planned to display the comments and answers in a nested format. I displayed the avatars, username and the content of the message. I did not implement the posting mechanism initially.
Commits:

Week-9

Task: Improving the comments/answers functionality

Duration: 4 Hours
Type of Work: Implementation
Details: I improved the design of the comments, added reply buttons and text field to write comments. I added highlighting for answers and implemented the controller methods for connection to the backend. I also added a date formatter method to format the creation dates of comments to a more readable format. #215, PR: #230
Commits:

Task: Improving the create event page with the map for location

Duration: 3 Hours
Type of Work: Implementation
Details: I made some changes in the layout of this page. Before we had one date and two hour inputs, I changed this to two datetime inputs since an event can start before 00:00 and end the next day. I also added some checks over these datetime inputs and displayed alerts in case of wrong input, the user cannot create an event in the past and the starting time must be earlier than the finish time. I also added check over the number inputs such as player capacity, spectator capacity, minimum age and maximum age. These fields are number inputs and user cannot write text inputs here, I added a ifNumber() method for checking this. I also separated the skill input to two inputs representing the minimum skill level and maximum skill level.
Commits:

Task: Implementing the map with rectangular area selection

Duration: 4 Hours
Type of Work: Implementation
Details: I first decided to implement this task only with the leaflet and react-leaflet library, same as the create event location page. For this, I planned to use two draggable markers to represent the corners. However, I tried to also add a center marker to enhance user experience but I did not work as I intended. I made some research and found out that there is a library called leaflet-draw and its React version called, react-leaflet-draw for drawing shapes on leaflet maps with a simple UI. I decided to use these libraries and implemented a toolbar on the right side of the map with drawing, editing and deleting buttons. #224, PR: #227
Commits:

Task: Configuring the testing environment for frontend unit tests

Duration: 2 Hours
Type of Work: Research&Implementation
Details: As we need to write unit tests, I decided to check testing libraries and how to use them. I configured the testing environment of our application by installing the Jest library for testing purposes, initializing the directory for tests and adding the necessary commands to our configuration file.

Task: Implementing the unit tests for comments and answers

Duration: 2 Hours
Type of Work: Implementation
Details: For comments and answers, I wrote several unit tests to check if the controller methods format the backend response correctly. I used Jest to mock the actual response. For example, I checked if the comments can be accessed with id, I checked if all the comments and answers of a post can be fetched correctly. I also checked the implementation of the date formatter function I implemented, I tested it with various inputs and checked if the results are in DD YYYY, HH:mm format. #238, PR: #229
Commits:

Task: Implementing the unit tests for map functionalities

Duration: 1 Hour
Type of Work: Implementation
Details: Since I used the leaflet library for displaying maps and other map functionalities, I could not write unit tests as these are more focused on the view. I decided to test the controller of the search bar I developed. I mocked the response from the Nominatim API and checked if the controller method correctly formats the response to a list of location names, latitudes and longitudes. #239, PR: #245
Commits:

Task: Implementing the unit tests for create event page

Duration: 1 Hour
Type of Work: Implementation
Details: I had implemented two helper methods for input validation in the create event page. One method is to compare the two given date strings, it returns true if the first date is before the second date. I tested this method with various date pairs and checked the responses. I changed the years, months, days, hours and minutes one by one in each pair. I also had implemented a helper method to check if the given parameter is a number or is a string that represents a number such as “12” or “12.2”. I checked this method with various decimals, floats and decimal float strings. #240, PR: #243
Commits:

Week-10

Task: Implementing the user information fetching for user session

Duration: 1 Hour
Type of Work: Implementation
Details: We were storing the tokens of the user when they successfully login to the system. However, we did not have any information related to the user such as the username, user id and their avatar. Backend team returned such information in the profile page. I implemented a method to fetch the information of the user from the related API using their username and stored the necessary information. This information will be used when creating new objects. For example, I used the stored user id in the request sent to the backend when creating a new event.
Commits:

Task: Setting up GitHub Actions for frontend unit tests

Duration: 1 Hour
Type of Work: Implementation
Details: As I wrote some unit tests for the frontend application, I decided to automize the testing process. I followed some tutorials and set up the testing environment with npm on the tests directory. I realized that a test related to date formatting was failing even though it was working on my local system. I noticed that this is caused because of the difference between the time zone of my computer and the remote computer. I used a GitHub Action from the marketplace called the Set Timezone to change the time zone of the remote computer. #250
Commits:

Task: Contribution to the group milestone report

Duration: 2 Hours
Type of Work: Documentation
Details: I have contributed heavily to the milestone report, especially to the executive summary, requirements, core functionality for web app, user interfaces for web app and standards sections.

Task: Writing the individual milestone report

Duration: 3 Hours
Type of Work: Documentation
Details: I wrote my personal milestone report where I explained my contributions in detail and explained my implementations together with images of the pages I implemented, links to the related issues, pull requests and commits.

Week-11

Task: Implementing the badge related components

Duration: 4 Hours
Type of Work: Implementation
Details: I first met with Ege and together we decided on the details of the badge system as it was not clear. Following these details, we decided on the API documentation of badges. We decided to have an endpoint which returns the events for that user can grant badges to another user. I implemented a list where users can see the events they can give a badge. For each event, there is a button to give a badge, that directs user to the list of all badges. In the listing part, user can see all the badges and can select one of them by clicking. The selected badge is highlighted with green window.
#295, PR: #320
Commits:

Task: Implementing the event application related components

Duration: 2 Hours
Type of Work: Implementation
Details: I first started this task by implementing the display of list of players&spectators in the event page. I added a stacked avatars component that consists of the avatars of players/spectators. I made this component clickable, once clicked, a detailed page of list of users is displayed. In this page, avatars and usernames of users are displayed side by side. I finally implemented a page where event creators can accept/reject applications. In this page, a list of users is displayed similar to the players/spectators list. However, there are also check and cross buttons for each player for accepting and rejecting.
#300, PR: #321
Commits:
https://github.com/bounswe/2021SpringGroup2/pull/321/commits/cc35c121c0ef4108ca522feecb7490d5687efae3 https://github.com/bounswe/2021SpringGroup2/pull/321/commits/64020da8ae10c0b939aeef025abd29fbda464384 https://github.com/bounswe/2021SpringGroup2/pull/321/commits/2ec7fbbdafb975d26c9b50ab8d1f27772540ea08 https://github.com/bounswe/2021SpringGroup2/pull/321/commits/ee7fd63b434c8e7f5dc6bd5ec43377bcd8727103

Task: Improving the forgot password page

Duration: 2 Hours
Type of Work: Implementation
Details: I noticed that I did not implement an input validation on email and password inputs given in the forgot password page, I decided to improve this page by implementing validation methods for these fields. I decided to implement a basic regular expression check on the email field so that given string should contain a @ and it should have one or two segment separations after @. I also checked if the password got from the user is a valid password. I checked if the length of the string is at least 8 and it contains digits, lowercase characters and uppercase characters based on our requirements.
#367, PR: #304
Commits:

Task: Integrating badge components to profile page

Duration: 2.5 Hours
Type of Work: Implementation
Details: I also implemented the display of badges in the profile page. Given the list of the names of the badges of the profile owner, I send a request for each badge and receive the details such as description and icon. I also calculate the counts of each badge so that, if the user has more than one badge for a badge type, count is shown at the top.
#295, PR: #320
Commits:

Week-12

Task: Integrating event application components to event page

Duration: 1 Hour
Type of Work: Implementation
Details: For the applications, I implemented two buttons for player and spectator applications, and I connected them to the backend. I also implemented some checks over these buttons. I made these buttons to be enabled only when the viewer user is a logged in user and the user is not a player/spectator already and the user is not an applicant to be a player/spectator already and the capacity is not full, correspondingly for both buttons. I also added “View application” buttons to the side of players and spectators. These buttons are only visible to the event creator.
#300, PR: #327
Commits:

Task: Pull request review&bug reports

Duration: 1.5 Hours
Type of Work: Review
Details: During these two weeks, I noticed some bugs and reported them, I also participated in the review of a few pull requests.
Bugs:

Task: Integrating comments to event and equipment pages

Duration: 1 Hour
Type of Work: Implementation
Details: I started this task by changing the controller methods of comments&answers because the API documentation was changed when backend was implementing this functionality. After I changed the controller methods, I also changed the details of my unit tests since they were also checking the controller methods with mock response data. I finally integrated “Comments” buttons to event and equipment pages. For this, I found the details such as event id, equipment id and send it to comments component as a parameter. I also sent if the post is an event or equipment post. PR: #347
Commits:

Task: Implementing the create equipment page

Duration: 1.5 Hours
Type of Work: Implementation
Details: I developed the equipment creation page according to our requirements. I implemented this page by following the event page creation template since they are very similar. I just removed event specific fields and added equipment page specific fields such as equipment type and URL. To check if the given URL string is valid, I implemented a link format checker function using regular expressions. I just checked if the given has www. or http:// or https:// at the beginning and it has a domain segment separation with a dot like equipment.com. I used this function to check the URL string whenever user types in the URL field and I displayed an alert in case the string is not a valid URL.
#365, PR: #328
Commits:

Task: Implementing the unit tests for create equipment page

Duration: 1 Hour
Type of Work: Implementation
Details: I implemented a URL format check function in the create equipment page, I decided to write unit tests for checking this function. I tried many false strings without http://, www. or https:// at the beginning and without domain separation like .com .edu… and checked if the response from the function is false. I also tried valid URL’s and checked if they are identified as valid.
#365, PR: #350
Commits:

Task: Implementing the unit tests for forgot password page

Duration: 1 Hour
Type of Work: Implementation
Details: I implemented email and password check functions in this milestone, I decided to write unit tests for these functions. For email check function, I tried many valid and invalid email strings and checked if they are correctly identified as valid and invalid. For password check function, I similarly tried many false strings with insufficient length or lacking character and checked if they are identified as invalid. I also tried some valid password strings.
#367, PR: #304
Commits:

Task: Implementing the unit tests for badges

Duration: 2 Hours
Type of Work: Implementation
Details: For displaying the badges, I checked if the responses got from the backend are formatted correctly before used in components. For fetching the badges of a user, I checked the calls made to the individual badge detail fetch method since this method should be called for each badge of the user.
#369, PR: #352
Commits:

Task: Implementing the unit tests for event applications

Duration: 2 Hours
Type of Work: Implementation
Details: I checked if the controller method makes the correct number of calls to the user info fetching function. I also checked if the responses are formatted correctly. For the requests sent to the backend for applications and evaluating applications, I checked if the bodies are in the correct format given the parameters and if the method type is POST, as it is decided on the API documentation.
#370, PR: #355
Commits:

Week-13

Task: Writing the individual milestone report

Duration: 3 Hours
Type of Work: Documentation
Details: I wrote my personal milestone report where I explained my contributions in detail and explained my implementations together with images of the pages I implemented, links to the related issues, pull requests and commits.

Clone this wiki locally