Final Project Report - altanborali16/SWE574-Group2 GitHub Wiki
- NB : name for the .md file in the reports folder: <GROUP_NO>Final-Project-Report.md (
Submission date: December 22, 2024
Course name: Software Development as a Team, SWE 574.01
Project name: Community Web Application
Group 2 members:
ALİ ŞER GÖK
ALTAN BORALI
EFE GÖÇMEN
FERİDUN BERK AKYOL
İSMAİL ENES AKKAL
YANA KRASOVSKA
Git repository: https://github.com/altanborali16/SWE574-Group2
Git tag version: TO BE ADDED LATER
Deployment URL: http://3.82.136.134:3000
Honor code
Overview
Deliverables
References
Demo user information
Project Details
Individual Contributions
Related to the submission of all the project deliverables for the Swe574 2024 Autumn semester project contained in this report, we the undersigned, declare that:
- Each of the undersigned is a student in the Software Engineering MS program at Bogazici University and registered for Swe574 course during the Autumn 2024 semester.
- All the material that each of the undersigned is submitting related to this project (including but not limited to the project repository, the final project report, and supplementary documents) have been exclusively prepared by the undersigned.
- Each of the undersigned prepared this material individually, without the assistance of anyone else with the exception of permitted peer assistance which is to be explicitly disclosed in this report.
Signed by:
ALİ ŞER GÖK
ALTAN BORALI
EFE GÖÇMEN
FERİDUN BERK AKYOL
İSMAİL ENES AKKAL
YANA KRASOVSKA
The Community web application was created with a purpose to help people with similar interests find each other and communicate in a uniquely structured way. In this application, a community is defined as a user-created, thematic space centered around a specific topic or interest. The objective of this student project was to develop the web application in line with the requirements and following good development, team work, and management practices.
The Community Website is a progressive web application (PWA) that can be installed on a mobile client as a standalone application and provides the user an experience optimized for mobile devices.
The technology stack of the developed application:
- Backend: Java, Spring Boot framework, Docker
- Database Engine: PostgreSQL
- Frontend: ReactJS, CSS, HTML
The deliverables of this project include:
- Project Final Report
- Team Evaluation Reports (6 reports)
- GitHub repository and its contents
- Released software
- Deployed web application
- Java naming conventions used in the project: https://github.com/naming-convention/naming-convention-guides/tree/master/java
- Git branches naming conventions: https://medium.com/@abhay.pixolo/naming-conventions-for-git-branches-a-cheatsheet-8549feca2534
Please only upload images up to 5 Mb. A little patience is required while the pages load, please do not abuse the Refresh button.
This project provides a web-based and mobile-friendly community platform for creating and managing topic-focused communities in a uniquely structured way through customizable community post templates. Each community supports posts, comments, votes, and user interactions. The system supports a progressive web application model, ensuring seamless access via standard desktop and mobile browsers without additional installations.
User registration requires an email, name or nickname, and password. Users can create communities with special interest tags, set the appropriate level of privacy, and subscribe to communities. A recommendation system displays posts related to user interests and community tags. Owners and moderators can manage content, assign roles, and maintain standards. A reputation and badge system recognizes valuable contributions.
All posts must follow set templates, ensuring consistency. Users can perform both basic and advanced searches across public and private content. The platform supports text and multimedia content and allows archiving communities without deleting them. These features combine to create a space where users can find, join, and participate in communities aligned with their interests. The system encourages thoughtful use of its features by allowing users to create communities in desktop browser only.
The developed application meets the goals of the project the main goals of which were enabling structured communication of users; access from both desktop and mobile devices; gamified user experience; and a community/post recommendation system to break the information silos.
- Software Requirements Specification: available here
- Status of Requirements: completed (documented, tested, deployed), not completed
Requirement Number | Status |
---|---|
I.1. | completed |
II.1. | completed |
II.2. | completed |
III.1. | completed |
III.2. | not completed |
III.3. | completed |
IV.1. | completed |
IV.2. | not completed |
V.1. | completed |
V.2. | completed |
V.3. | completed |
V.4. | completed |
V.5. | completed |
V.6. | completed |
V.7. | completed |
VI.A.1. | completed |
VI.A.2. | not completed |
VI.B.1. | completed |
VI.B.2. | completed |
VI.B.3. | completed |
VI.B.4. | completed |
VI.C.1. | completed |
VI.C.2. | completed |
VI.C.3. | completed |
VI.C.4. | completed |
VII.1. | completed |
VII.2. | not completed |
VII.A.1. | completed |
VII.A.2. | completed |
VII.A.3. | completed |
VII.A.4. | completed |
VII.A.5. | completed |
VII.A.6. | completed |
VII.A.7. | completed |
VII.A.8. | completed |
VII.B.1. | not completed |
VII.C.1. | completed |
VII.C.2. | completed |
VII.C.3. | completed |
VII.C.4. | completed |
VII.C.5. | completed |
VII.C.6. | completed |
VII.D.1. | completed |
VII.E.1. | not completed |
VII.E.2. | not completed |
VII.E.3. | not completed |
VII.E.4. | not completed |
VII.E.5. | not completed |
VII.E.6. | not completed |
VII.F.1. | completed |
VII.F.2. | not completed |
VII.F.3. | completed |
VII.F.4. | completed |
VIII.A.1. | completed |
VIII.A.2. | completed |
VIII.A.3. | not completed |
VIII.A.4. | not completed |
VIII.B.1. | completed |
VIII.B.2. | completed |
VIII.B.3. | not completed |
VIII.C.1. | completed |
VIII.C.2. | not completed |
VIII.C.3. | not completed |
VIII.C.4. | completed |
VIII.C.5. | not completed |
VIII.C.6. | not completed |
IX.A.1. | not completed |
IX.A.2. | not completed |
IX.B.1. | completed |
IX.B.2. | completed |
IX.B.3. | completed |
IX.B.4. | completed |
IX.B.5. | completed |
IX.B.6. | completed |
X.1. | completed |
X.2. | completed |
X.3. | completed |
X.4. | completed |
-
Design:
use-case diagrams
activity diagrams and use case scenarios
event flow diagrams
recommendation service backend design
badge system backend design
UI mockup designs -
System manual:
In-browser access: the system can be accessed at http://3.82.136.134:3000/ in most modern desktop and mobile browsers.
Mobile client access: On both Android (using Chrome) and iOS (using Safari), users can add this PWA to their home screen. Once added, the PWA can be launched from an icon just like a native app, opening in a standalone window without the standard browser UI.
Running the system locally in Docker:
-
Install Docker Desktop
Firstly, if you are on Windows install/update WSL 2 by typing the following command in a terminal
C:\Users\YOURMACHINE> wsl --update -
Download the appropriate installation binary from https://docs.docker.com/desktop/ After the download is completed go on to install Docker Desktop. At the end of the installation, you will need to restart your system.
Make sure to check that Docker Engine is running by opening the Docker Desktop application.
3.Go to frontend/src/Helpers/HttpeClient.js
set the based url to your local host. baseURL: "http://localhost:3000", // Replace with your base URL if you have one .
-
Open a terminal in the source folder root, where docker-compose.yaml file resides. Run the following command in the terminal to start the database and the application:
C:\Users\YOURMACHINE> docker-compose up --build Wait for container images to be pulled from internet and the application to be built and started. This may take some time. -
Open http://localhost:3000/ in your browser to view the application.
-
To stop the application use Ctrl+C to stop containers in the terminal.
- User manual:
Register in the system
To start using the application, a user must first register and then log in, as most functions are available to registered users only. After providing name, username, and password the system checks that they are unique.
Logging in
To log in, the user must enter the email and password they used to register. If the combination is wrong, the system will prompt the user to try to log in again.
Create a community
After logging in, the user can create a community. To do so, the user clicks Create new community on the home page. After entering community name, description, and choosing visibility, it is possible to create a custom post template which will be used by all members of this community. Currently it is not possible to modify or delete the post template once it is created. To set post field types, the user should use the available values - the system currently offers Text, Signed and Unsigned Numbers, Geolocation, Image, Time, Date. Automatically, the user who creates the community becomes its member and admin.
Once a community with its respective template is created, the user is redirected to the community page.
Manage the created Community
Once the user created a community, he/she becomes the owner and gets administration rights. This means, the user can remove community members and assign administration rights to other community members. Administration rights allow users who become administrators to remove users, too. The owner of the community can assign multiple administrators but he/she cannot leave the community he/she created.
View communities in the system
By visiting Communities link in the upper section of the screen, the user can view communities in the system.
Join a community To be able to write to a community, the user must first subscribe to it by clicking the Subscribe button. Immediately after that a post form will become available based on the template(s) set for this community. The user can also see their username appear in the list of this community members by clicking the Subscribers link next to the community picture.
Interact with content inside a community
After subscribing to the community, the user can use the post form to contribute to the community, upvote other users' posts, and leave comments.
Search inside a community
Logged users can utilize the Search box at the top to search inside communities by keywords, numerical values or range of numerical values.
- Test results:
Manual test results
Prepared by: Group 2 Application under test URL: http://3.82.136.134:3000/ Date created: 15-Dec-24
TEST CASE ID | TEST CASE | TEST CASE DESCRIPTION | PRECONDITION | TEST DATA | TEST STEPS | EXPECTED RESULT | POSTCONDITION | ACTUAL RESULT | STATUS (pass/fail) | COMMENTS |
---|---|---|---|---|---|---|---|---|---|---|
TC_login_001 | Verify login | Enter valid email and valid password | User not logged in | : [email protected] : tester |
1. Goto: http://3.82.136.134:3000 2. Enter test data 3. Click Login button |
1. Redirected to http://3.82.136.134:3000/feed 2. User can see recommended posts and “Please subscribe communities so we can help you with your recommendations” message on the top of the page |
User logged in. Feed page is shown | as expected | pass | |
TC_login_002 | Verify login | Enter invalid email and valid password | User not logged in | : [email protected] : tester |
1. Goto: http://3.82.136.134:3000 2. Enter test data 3. Click Login button |
1. Page remains http://3.82.136.134:3000 2. “Wrong email or password. Please try again” message shown 3. User not logged in |
User not logged in. Login page is shown | as expected | pass | |
TC_login_003 | Verify login | Enter valid email and invalid password | User not logged in | : [email protected] : 123 |
1. Goto: http://3.82.136.134:3000 2. Enter test data 3. Click Login button |
1. Page remains http://3.82.136.134:3000 2. “Wrong email or password. Please try again” message shown 3. User not logged in |
User not logged in. Login page is shown | as expected | pass | |
TC_searchcom_001 | Search in community | Search in existing community | None | 1. Goto http://3.82.136.134:3000/community/13 2. Click “Search” → tick Posts → select “Template for Celestial Objects” → Select “AND” operator → enter -100 in Minimum value, enter 1000 in Maximum value |
1. Page shows 3 Posts as result: Visitor from Deep Space, Neighbouring Marvel, Pillars of Creation | None | as expected | pass | ||
TC_subscribe_001 | Subscribe to a community | Subscribe to a community user is not member of | 1. User logged in with : [email protected] : tester 2. User is not member of community “Cats are awesome” and cannot post to it |
none | 1. Goto community “Astronomy Enthusiasts” at http://3.82.136.134:3000/community/7 2. Click Follow button |
1. Follow button turns into UnFollow 2. Create post block appears next to UnFollow button |
1. User cannot subscribe to “Astronomy Enthusiasts” anymore 2. User can post to this community 3. User can see “Tester” in the list of subscribed members when clicking Subscribers link |
As expected | pass | Post condition 1: true Post condition 2: true Post condition 3: false |
TC_subscribe_002 | Subscribe to a community | Subscribe to a private community | 1. User logged in with : [email protected] : tester 2. User is not a member of community “Politics” |
none | 1. Goto community http://3.82.136.134:3000/community/14 2. Confirm community posts are blurred 3. Click Follow |
1. Community Politics is opened 2. Community posts are blurred 3. Upon clicking Follow, community posts are revealed |
User can see the posts and can post to community | as expected | pass | |
TC_recom_001 | Get recommendations | Get recommended communities | User logged in with : [email protected] : tester User is member of “PlayCat” community http://3.82.136.134:3000/community/16 |
(none specified) | 1. Goto http://3.82.136.134:3000/communities 2. Goto http://3.82.136.134:3000/feed |
1. Recommended communities: Dialupa, Aşk-ı Memnu Discussion 2. Recommended posts: “Dua Lipa yılbaşına özel beşiktaş jolly jokere geliyor!!!” and “Dua lupa is coming to Istanbul!!!” |
None | As expected | pass | |
TC_badge_001 | Reveal badges | Reveal community badges by performing sought actions | User logged in with : [email protected] : tester User is member of “Politics” and “PlayCat” community http://3.82.136.134:3000/community/16 and http://3.82.136.134:3000/community/14 |
: What is your party program? | 1. Goto http://3.82.136.134:3000/community/14 2. Leave a comment to post “New Party Ideas” |
Badge “First comment” revealed | Comment to the “New Party Ideas” visible | as expected | pass | First comment badge is system-wide |
- Frontend testing with selenium IDE :
- Short video of web and mobile interface: TO BE ADDED LATER
- Summary of work performed: (in terms of requirements, design, management, just list the above requirements)
- Requirement(s) worked on and brief description:
Requirement Number | Status | Brief Description |
---|---|---|
I.1. | completed | worked on front-end |
II.1. | completed | worked on front-end |
II.2. | completed | pair coding with Enes |
III.1. | completed | pair coding with Enes (mostly done by Enes) |
III.2. | not completed | changed the structure by following or created community tags |
III.3. | completed | worked on front-end |
IV.1. | completed | pair coding with Enes |
V.1. | completed | pair coding with Enes |
V.2. | completed | worked on front-end |
V.3. | completed | worked on front-end |
VI.B.1. | completed | implemented on front-end without backend |
VI.B.2. | completed | implemented on front-end without backend |
VI.B.3. | completed | implemented on front-end without backend |
VI.B.4. | completed | implemented on front-end without backend |
VI.C.1. | completed | worked on basics and after Enes handover the topic |
VI.C.2. | completed | worked on basics and after Enes handover the topic |
VI.C.3. | completed | worked on basics and after Enes handover the topic |
VI.C.4. | completed | worked on basics and after Enes handover the topic |
VII.A.1. | completed | worked on front-end |
VII.A.2. | completed | worked on front-end |
VII.A.3. | completed | worked on front-end |
VII.A.4. | completed | worked on front-end |
VII.A.5. | completed | worked on front-end |
VII.A.6. | completed | worked on front-end |
VII.A.7. | completed | worked on front-end |
VII.A.8. | completed | worked on front-end |
VII.C.1. | completed | worked on front-end |
VII.C.2. | completed | worked on front-end |
VII.C.3. | completed | worked on front-end |
VII.C.4. | completed | worked on front-end with Enes |
VII.C.5. | completed | worked on front-end with Enes |
VII.C.6. | completed | worked on front-end with Enes |
VIII.A.1. | completed | worked on front-end |
VIII.A.2. | completed | worked on front-end |
VIII.B.1. | completed | worked on front-end |
VIII.B.2. | completed | worked on front-end |
X.1. | completed | worked on front-end |
X.2. | completed | worked on front-end |
X.3. | completed | worked on front-end |
X.4. | completed | worked on front-end |
- Related issue/pull request/documentation URL:
- Explanation of code written: (with relevant URLs)
- Documentation: describe the documentation you personally wrote
- Screenshots: (demonstrating the most complex functionality you personally implemented)
- Challenges: I was working as head of the frontend team, I always need to think about my code that if it is easy for other members to add or change things on what I did. Also Sometimes I did the base functionalities and other group members should add new implementations to the codes, so it should be clean, understandable and easy to improve, so besides myself I need to think others.
- Code review:
Group member name whose code you reviewed: Mostly Enes, Alişer and Yana. Code reviewed (pull request, GitHub conversation): I created the table "Pull Requests Reviewed by me" Code review nature: (problems, status, how problems were addressed) : Mostly we did meetings and check the code and functionality together after that everything looks okay I accept the pull requests. Code review results: Most of the code review went fine and without any problems. For the frontend specific, to not have any merge conflicts we also try to separate issue distribution in that purpose. Some of the pull requests and code review failed because of me, it's either lack of time or lack of knowledge.
My Pull requests :
PR NUMBER | PR TITLE | STATUS | WORKING STATUS |
---|---|---|---|
#200 | selenium ide testing files | MERGED | Working |
#198 | Feature/aliser 197 implement advanced search fe | MERGED | Working |
#196 | recommendations (posts and communities) & file size fix | MERGED | Working |
#192 | number fields added on advanced search | MERGED | Working |
#188 | signed and unsigned values | MERGED | Working |
#185 | private community fix on fe | MERGED | Working |
#182 | Feature/altan 178 frontend unfollow | MERGED | Working |
#169 | issue 163 and 152 | MERGED | Working |
#150 | Fix/altan lazy frontend authorname | MERGED | Working |
#122 | Feature/altan 88 implement landing page base features | MERGED | Working |
Pull Requests Reviewed by me :
PR NUMBER | PR TITLE | MERGE STATUS | WORKING STATUS |
---|---|---|---|
#197 | Feature/aliser 197 implement advanced search fe | MERGED | Working |
#195 | Css improvement on post,community and search pages | MERGED | Working |
#193 | Removing Members from Community and Assign users as admin Functionalities Have Been Implemented | MERGED | Working |
#181 | upload/show image improvement, createCommunity, communityPage, | MERGED | Working |
179# | fix: add communityId as a getter of Post entity to return as part of | MERGED | Not Working |
#177 | Protecting private communities functionality has been implemented | MERGED | Working |
#174 | Feature/yana 165 add remove members to community | MERGED | Working |
#172 | fix the issue with recommended posts regarding missing communityId | MERGED | Not Working |
#159 | add signed vs unsigned number checks and add text validations to the | MERGED | Working |
#157 | Feature/yana 155 recommendations update | MERGED | Not Working |
Issues:
ISSUE NUMBER | ISSUE TITLE | STATUS |
---|---|---|
#199 | Create FE Testing on Selenium | CREATED & ASSIGNED |
#190 | Add & Remove members from communiy | CREATED |
#189 | Implement number field to advanced search | CREATED & ASSIGNED |
#187 | Implement NUMBER validation on frontend | CREATED & ASSIGNED |
#183 | Update frontend private community | CREATED & ASSIGNED |
#180 | Change Upvote Logic on Frontend | CREATED & ASSIGNED |
#178 | Update frontend for unfollow | CREATED & ASSIGNED |
#166 | Protect private communities for non subscribers | CREATED |
#165 | Add & Remove members to community | CREATED |
#164 | Implement Recommendations to frontend | CREATED & ASSIGNED |
#163 | Find solution for geolocation on frontend | CREATED & ASSIGNED |
#162 | Check frontend for app sizes and note them | CREATED |
#161 | View Communities with uploaded iamge | CREATED |
#160 | Create Community with Image | CREATED |
#156 | Populate badges and give info to user how to earn a new one | CREATED |
#154 | [BUG] Unfollow Community | CREATED |
#153 | [BUG] Community Create api isPrivate field is not working | CREATED |
#152 | [BUG] Create Post without selecting a Template | CREATED & ASSIGNED |
#151 | [BUG] Reply and comment difference on response | CREATED |
#146 | [BUG] Reselecting "Select a template" | CREATED & ASSIGNED |
#145 | Loading Screen implementation | CREATED & ASSIGNED |
#144 | [BUG] Community can created without tags | CREATED & ASSIGNED |
#127 | [BUG]: Unable to create community with long descriptions | ASSIGNED |
#100 | Implement create new post (subtask #56) | ASSIGNED |
#99 | Implement create template form (subtask #56) | CREATED & ASSIGNED |
#96 | Implement community page (subtask #56) | CREATED & ASSIGNED |
#95 | Implement cookies and local storage utilisation | CREATED & ASSIGNED |
#94 | Implement create new community action (subtask #56) | ASSIGNED |
#93 | Implement (list) communities page (subtask #56) | CREATED & ASSIGNED |
#92 | Implement "my communities" page (Subtask #56) | ASSIGNED |
#91 | Implement user profile page (subtask #56) | ASSIGNED |
#88 | Implement landing page base frontend features | ASSIGNED |
#56 | Finish previous term's must features (Frontend) | ASSIGNED |
- Summary of work performed: (in terms of requirements, design, management, just list the above requirements):
I was responsible for creating the mockups and revising them if necessary. I took a role in the documentation of the Wiki as far as the UI designs and Team Composition pages are concerned. Moreover, I was responsible for frontend development of the project along with Altan and Alişer.
-
UI Designs You can see the UI designs here.
-
Team Composition Page You can see the Team Composition Page here.
- Requirement(s) worked on and brief description:
Requirement Number | Status | Brief Description |
---|---|---|
II.1. | completed | worked on front-end |
II.2. | completed | pair coding with Altan |
III.1. | completed | pair coding with Altan (most of the parts done by me) |
IV.1. | completed | pair coding with Altan |
IV.2. | not completed | feature was implemented on frontend but it was not a priority requirement |
V.1. | completed | pair coding with Altan |
V.5. | completed | worked on front-end |
VI.C.1. | completed | Altan worked on basics and then the feature implementation was handed over to me |
VI.C.2. | completed | Altan worked on basics and then the feature implementation was handed over to me |
VI.C.3. | completed | Altan worked on basics and then the feature implementation was handed over to me |
VI.C.4. | completed | Altan worked on basics and then the feature implementation was handed over to me |
VII.1. | completed | worked on front-end |
VII.C.4. | completed | worked on front-end with Altan |
VII.C.5. | completed | worked on front-end with Altan |
VII.C.6. | completed | worked on front-end with Altan |
VII.F.1. | completed | worked on front-end |
VII.F.3. | completed | worked on front-end |
VII.F.4. | completed | worked on front-end |
VIII.C.1. | completed | worked on front-end |
VIII.C.3. | completed | worked on front-end |
VIII.C.4. | completed | worked on front-end |
-
Related issue/pull request/documentation URL:
-
Explanation of code written: (with relevant URLs)
ISSUE | URL (COMMIT NUMBER) | CODE EXPLANATION |
---|---|---|
#91 | 3836f8f | This feature allows users to update their profile information, including bio and avatar URL, through a modal form. When the "Edit Profile" button is clicked, the handleEdit function sets the showModal state to true, displaying the modal with editable fields. Users can modify their bio and avatar URL, and upon clicking "Save Changes", the handleSaveChanges function sends a PUT request to the server with the updated profile data. If the update is successful, the user state is updated with the new information, and React automatically re-renders the UI to reflect the changes without requiring a page refresh |
#129 | 97c709b | This feature implements a modal to display the list of subscribers (members) in a community.The handleShowSubscribers function is triggered when the subscriber count link is clicked. This function first calls fetchSubscribers to retrieve the list of members from the server using an HTTP GET request. The response data, which includes subscriber details such as usernames, is then stored in the subscribers state variable. |
#138 | 3b90c89 | This feature focuses on enabling users to upvote posts and dynamically updating the vote counts.Each post is stored in the localPosts state, which includes properties such as upvotes and voters. These properties track the number of votes and the users who have already voted. When a user clicks the upvote button, the handleUpvote function is triggered.The function first validates whether the post ID is valid and checks if the user has already voted by examining the voters list. If the user has previously voted, an alert is displayed, and the process is stopped to prevent duplicate voting.If the user is eligible to vote, an API request is sent to update the vote count on the server. Once the request is successful, the local state is updated by incrementing the upvotes counter and adding the user’s ID to the voters list. |
#151 #128 | 4acd5c0 ba6bd01 | This feature focuses on enabling users to add comments and replies to comments. Each post can have multiple comments, and each comment can include nested replies. The implementation uses state variables, such as comments and newComment, to manage the list of comments and track input values. When a user submits a comment, the handleAddComment function is triggered, which sends a POST request to the server with the comment content, timestamp, author details, and post ID. Once the server responds with the new comment data, the comments state is updated locally to display the comment immediately without requiring a page refresh. For replies, a similar approach is used. The handleAddReply function handles reply submissions, sending a POST request to the server with the reply content and its associated comment ID. Replies are managed as nested structures within the comments state. Once a reply is added, the interface updates dynamically to show the new reply under the associated comment. |
#156 | 1cd80bd e6d7099 | This feature was about earning a badge and give information to users on how to earn them. We have our badges defined as objects within array with properties such as; title,image,counter and so on. Both CommunityPage.jsx and ProfilePage.jsx pages have the endpoint for fetching comment and post counts. As our badges were counter based (e.g. To achieve X badge, you need to post 5 comments) there are variables to keep the count of comments and posts which are initialized to 0 at the beginning. Then the counter gets incrimented one by one as the user create posts or comments. Altan implemented the Endpoints for counters then I took over the feature implementation. |
#166 | 6d16c51 | This feature focuses on restricting access to posts in private communities by applying a blur effect for non-members. The implementation dynamically checks user membership and applies conditional rendering based on the user's access status. The PostsView component receives a prop called isPrivate, which specifies whether the community is private. It also maintains a state variable called isMember to track whether the user is a member of the community. Membership status is verified using an API call to fetch the list of subscribers, and the user's ID is checked against this list. If the community is private and the user is not a member, the posts are rendered with a blurred view using CSS. A specific CSS class, post--blurred, applies a blur filter and disables interactions, ensuring that non-members cannot view or interact with the content. |
#190 | bcb3555 | This feature focuses on allowing community owners to remove members from their community through a Kick Member option. The functionality is designed with role-based access control, ensuring that only users with the CREATOR role can access and execute this action. The owner status is determined during the fetchCommunity function, where the system checks the user's role and sets the isUserOwner state accordingly. The list of community members is displayed in a modal, showing each member's username along with their role. For members who are not creators, a Kick Member button is provided next to their name. This button is conditionally rendered based on the user's ownership status, ensuring only authorized users see it. When the Kick Member button is clicked, it triggers the handleKickMember function. This function sends an HTTP DELETE request to the server, specifying the community ID and the user ID of the member to be removed. |
- Documentation: I took a role in creating the "team composition" area in the wiki. Moreover, I also created the UI mockup designs sub-section under "Designs, diagrams, and use case scenarios" area.
Team Composition and Responsibilities This section provides an overview of the team composition and the distribution of responsibilities within Group 2. It outlines the roles assigned to each team member, highlighting their primary areas of contribution and involvement in the project. A responsibilities matrix was included to visually represent the allocation of tasks. It categorizes key responsibilities, including architecture design, development, testing, deployment, and documentation, and assigns them to individual team members. The table also identifies optional contributors who can provide additional support if needed.
UI Mockup Designs The UI Mockup Designs section presents visual representations of key user interfaces, providing a clear view of the design and functionality of the application. These mockups are intended to guide the development process by illustrating the layout, navigation of the platform.
- Screenshots: (demonstrating the most complex functionality you personally implemented)
- Comments and reply (comments to comments)
- Community and User Specific Badges
- Challenges: (in detail, explain the challenges you had when coding)
As far as the frontend development is concerned, I have faced some problems during the development phase. I will be talking about it briefly.
-
The first challenge was related to CSS class naming conventions. At the beginning of the project, we did not establish any rules regarding CSS class names. It didn’t seem like an important point at the time. However, as we progressed through the development phase, we encountered multiple CSS classes with the same names but different attributes. For example, if we had two modals on two different pages with the same class name, their attributes would conflict with each other. This ultimately required me to rename the classes to ensure proper CSS attributes for each page.
-
The second challenge was related to React's state management. Initially, I had a very limited understanding of how to use it effectively. For example, while working on the comment feature for our project, I had to refresh the page manually to see the comments I created under posts. This happened because I made some logical errors in the code and did not utilize React's state management properly. It took me a while to fully understand React's state management and implement it correctly.
-
The last challenge that I have faced was the usage of props in React. Similar with React's state management, I had a very limited understanding of how to use the props and I had some difficulties implementing features when I had to use props for pass a data from parent to child object.For example, when I was implementing a feature called "Protecting Private Communities" I had to hide the posts from users who is not subscribed to that private community so I had to do configure PostsView component to conditionally rendered.However, this affected our feed page as well because we were also using the same component in our feed page (where users can see multiple posts from different communities). Therefore, I had to use another prop called isPrivate to apply the correct logic.
- Code review:
I have not reviewed any code in this project.
- Pull requests (URLs to pull requests you created): The reason why I have a limited number of PR is that as we were the only team that start the project from the scratch, we decided to not use branches to speed up the development process of the project and the functionalities that we were working on different areas so there was very low possibility of conflict. After the second milestone, we decided to use the branches as we catched up with the other teams.
PR NUMBER | PR TITLE | STATUS |
---|---|---|
#195 | CSS improvement on post, community, and search pages | MERGED |
#193 | Removing Members from Community and Assign users as admin Functionalities Implemented | MERGED |
#177 | Protecting private communities functionality implemented | MERGED |
#173 | Badge Information has been added | MERGED |
#167 | Bug on comment and reply has been fixed | MERGED |
- Issues (URLs and titles of major issues you created or assigned to you, in tabular form): The team leaders (Efe and Altan) were responsible for creating and assigning tasks. They created the majority of the issues and allocated them to team members. Presented below is a summary of the issues that I created and those assigned to me.
ISSUE NUMBER | ISSUE TITLE | STATUS |
---|---|---|
#9 | Create Mockups | ASSIGNED |
#15 | Badge Design | ASSIGNED |
#16 | Recommendation system: frontend design | ASSIGNED |
#20 | Create login page on front end | ASSIGNED |
#24 | Create signup page on front end | ASSIGNED |
#60 | Badge mechanism UI/UX design | ASSIGNED |
#62 | Scenarios and mockups, creation and organisation of existing ones | ASSIGNED |
#91 | Implement user profile page | ASSIGNED |
#119 | Add mockups for: like, commenting, numerically filtered advanced search, comments, comments on comments | ASSIGNED |
#125 | Modify Advanced Search Mockup | ASSIGNED |
#127 | Unable to create community with long descriptions | CREATED |
#128 | Implement discussion under posts (aka comments to comments) | ASSIGNED |
#129 | Create a modal to show members list | ASSIGNED |
#138 | Upvotes Frontend | ASSIGNED |
#151 | [BUG] Reply and comment difference on response | ASSIGNED |
#156 | Populate badges and give info to user how to earn a new one | ASSIGNED |
#166 | Protect private communities for non-subscribers | ASSIGNED |
#190 | Add & Remove members from community | ASSIGNED |
#194 | CSS Improvement on Community and Posts Pages | CREATED & ASSIGNED |
- Summary of work performed: (in terms of requirements, design, management, just list the above requirements)
- Requirement(s) worked on and brief description:
Requirement Number | Status | Brief Description |
---|---|---|
IX.B.A.1 | completed | worked on front-end |
IX.B.A.3 | completed | worked on front-end |
IX.B.B.1 | completed | worked on front-end |
IX.B.B.2 | completed | worked on front-end |
IX.B.B.3 | completed | worked on front-end |
IX.B.B.4 | completed | worked on front-end |
- Related issue/pull request/documentation URL:
- Explanation of code written:
ISSUE | URL (COMMIT NUMBER) | CODE EXPLANATION |
---|---|---|
#124 | 1319019 | Basic search: Basic Search searches through all posts and user names in a community. It searches in post titles, field names, and within string fields, if present, in these fields. |
#124 | 1319019 | Post Fields Search: Search in post fields allows for searching individually through the default values that are assigned when each post is created. It enables searches based on the post's share date, share time, the username of the user who shared the post, the post title, and the post template. For fields such as time and date, there is an option to enter interval values. If only the template is selected and no filters are applied to the template field, it will filter posts written with that template (based solely on the template field). In addition, the inclusion of logical operators such as AND, OR, and NOT in the results shows how to integrate them into basic search, and it works successfully. |
#124 | 1319019 | Template Fields Search: Template search fields are highly dynamic. It displays the fields of the selected template and allows searching based on the value types of these fields (string, number, posNumber). For numerical fields, interval values can be entered, while for posNumber fields, only positive numbers can be entered. |
#124 | 749f1ef | Comment Search: The comment search function allows searching within the comments made on posts and the replies to those comments. It combines the results found with the basic search results. In other words, the comment search function only works if the user clicks on the comment search option while performing a basic search. |
#124 | 749f1ef | User Search: The user search function operates separately from the basic search and searches through all members within a community. |
#124 | ac9a344 | Search Engine: The search engine function is where the results from all search functions are combined, taking operators into account. For example, if the NOT operator is used, it will exclude the posts found through post search from the posts found through basic search. Alternatively, it will filter the posts found through post search using the results from template search. |
#124 | e006164 | Show Result Page: It is a page that lists the results. It displays the post results and the results from the user search separately. |
#161 | c76d4f3 | upload/show image on createCommunity, communityPage, communityListOld: It is coded to allow image uploading when creating a community, and the uploaded community profile image is displayed on other pages as well. |
- Documentation:
Use-case scenarios and activity diagrams View the diagrams
We worked with Yana on creating use-case scenarios and activity diagrams. The use-case scenarios document the user's role interacting with the system, the interaction they aim to perform, the preconditions for this interaction, the user's actions, the system's responses to these actions, and the acceptance criteria indicating that the user has achieved their goal. Additionally, the activity diagrams visually and sequentially present this interaction between the user and the system, transforming it into a very simple and easy-to-understand format.
Event Flow Diagrams View the diagrams
Event flow diagrams are diagrams that show the relationships between events and the responses resulting from these relationships. These diagrams help developers understand the system by visually representing the sequence of events, the relationships between events, the transition and direction between events, and the conditions required for these events to occur.
- Screenshots:
Basic Search:
Post Search:
Template Search:
Search Page:
-
Challenges: I focused on making the code as dynamic and modular as possible. I turned it into separate modules as much as I could, and while integrating them, many issues arose. For example, the useEffect inside the searchEngine was used as a hook on the community page (useSearchEngine), and this hook should have contained other methods as well. As a result, I encountered errors multiple times and had to change my approach many times while combining the search fields in Advanced Search. Another challenge could be my lack of knowledge in CSS. When creating a component, I had to experiment several times.
-
Code review: Group member name whose code you reviewed: Mostly altan and Enes Code review nature: I usually reviewed the code written by my teammates while adding another feature myself, and if I had any suggestions for changes, I would first share them with my teammates. Most of the time, I tested the application through different cases, and if I encountered an error, I would share it with my teammates, and we would discuss the appropriate solution Code review results: The solutions to the problems went smoothly. When a bug was found, it was either resolved at that moment, or an issue was created to address the bug and assigned to someone.
-
Pull requests:
PR NUMBER | PR TITLE | STATUS |
---|---|---|
#181 | upload/show image improvement, createCommunity, communityPage, communityListOld | MERGED |
- Issues: URLs and titles of major issues you created or assigned to you, in tabular form
ISSUE NUMBER | ISSUE TITLE | STATUS |
---|---|---|
#9 | Create Mockups | ASSIGNED |
#10 | Recommendation mechanism: backend design | ASSIGNED |
#12 | Badge system: backend design | ASSIGNED |
#15 | Badge system: frontend design | ASSIGNED |
#16 | Recommendation system: frontend design | ASSIGNED |
#25 | Create use case scenarios and diagrams | ASSIGNED |
#47 | Describe individual contribution | ASSIGNED |
#59 | Assist in frontend development | ASSIGNED |
#62 | Scenarios and mockups, creation and organisation of existing ones | ASSIGNED |
#63 | Event flows and user actions diagrams for badge and recommendation mechanisms | ASSIGNED |
#64 | Update existing diagrams | ASSIGNED |
#65 | Repository maintance | ASSIGNED |
#76 | Write a new milestone 1 report and present to customer | ASSIGNED |
#104 | Discussion | ASSIGNED |
#105 | Discussion | ASSIGNED |
#111 | [BUG]: posts are listed in the feed/home but not listed under community | ASSIGNED |
#113 | [BUG]: create template button goes out of screen and disappears as we add more fields | ASSIGNED |
#118 | Add action flows for: like, commenting, numerically filtered advanced search, comments, comments on comments | ASSIGNED |
#124 | Implement advanced search | ASSIGNED |
#135 | Functional tests of the advanced search | ASSIGNED |
#160 | Create Community with Image | ASSIGNED |
#161 | View Communities with uploaded iamge | ASSIGNED |
#189 | Implement number field to advanced search | ASSIGNED |
#197 | [BUG] There is a problem with the display of user search | CREATED & ASSIGNED |
I was responsible for the deployments and related tasks such as dockerization (creating Dockerfiles for the backend and frontend, creating a Docker Compose file for dockerizing the application), preparing the deployment environment, preparing the virtual machine (VM), and initializing the necessary containers on the virtual machine to ensure our application was deployed as smoothly as possible. My platform of choice for deployment was Amazon Web Services (AWS). I used EC2 instances and created security groups for secure connections.
I worked on secondary post features (e.g., comments and voting mechanisms). I created the Comment class and implemented the logic for creating comments under posts. Additionally, I implemented the ability to reply to comments in a nested structure.
This implementation presented technical challenges, such as resolving self-referencing problems in Spring Boot. I managed to solve these issues and successfully implemented the commenting feature. The commenting system in our application works as intended.
I also created a voting mechanism for posts and implemented the necessary endpoints in the backend for handling user badges. In addition, I contributed to bug-fixing processes in the backend, which can be seen in the GitHub issues.
I find it unnecessary to cite dozens of minor issues and bug fixes here since many were simple fixes or optimizations.
While implementing the comment functionality, one requirement was that users should be able to comment on posts and also reply to existing comments. For this, I designed the Comment
class so that every comment object could optionally have a parent comment attribute.
However, this led to circular reference issues due to how Spring Boot handles self-referencing attributes. The solution was to override the equals
method in the Comment
class. Instead of comparing the entire object graph, the method now only uses the id
field to determine equality. Since each comment has a unique ID, this solved the problem without altering the structure or attributes of the class.
I created the Comment
class to represent comments in the system. This class uses JPA annotations for database mapping (PostgreSQL in our case) and JSON annotations for serialization/deserialization.
- Examples of annotations:
-
@Entity
marks the class as a JPA entity. - Lombok annotations like
@NoArgsConstructor
and@AllArgsConstructor
automate the creation of constructors, getters, and setters.
-
Related Code: Comment.java
This class contains the logic for operations such as creating, replying to, and deleting comments. Since these operations involve other entities like Post
and User
, dependency injection is used to interact with the respective repositories.
Related Code: CommentService.java
The controller defines endpoints for comment-related actions, enabling the frontend team to interact with the backend. These endpoints also assist in testing JSON responses to ensure proper payload structure.
Related Code: CommentController.java
This repository provides JPA-based methods for querying the database. It extends the JpaRepository
interface, allowing predefined queries as well as custom queries.
Related Code: CommentRepository.java
The post class was initially implemented by another team member. I added attributes such as a vote counter and voters list to track who voted on a post. I also implemented logic for upvoting and downvoting posts in the PostService
class.
The toggle vote function allows users to remove their votes. For example, if a user upvotes a post and votes again, their vote is toggled back to neutral. Although this feature was not implemented in the frontend, it remains available in the backend.
Related Code:
I added counters to various classes, such as:
- User post count
- Community post count
- Post count under a community
These counters are used by the badge system to check if users or communities have met thresholds to earn badges.
I wrote Dockerfiles for both the backend and frontend. These files define the necessary dependencies and configurations for building Docker images of our application.
A Docker Compose file was also created to ensure the backend, frontend, and PostgreSQL database are correctly configured and can work together seamlessly. The Compose file also defines the network configurations, such as port mappings.
Related Code: docker-compose.yaml
The creation and assignment of tasks were handled by the team leaders. They created most of the issues and distributed them among team members. The issues I created were related to bugs I encountered during development. Below is a summary of issues I created and was assigned to.
ISSUE | URL |
---|---|
[BUG] Unfollow Community | Link |
[BUG] Community Create api isPrivate field not working | Link |
[BUG] Reply and comment difference on response | Link |
[BUG] Delete post service uses wrong input as parameter | Link |
Implement badge mechanism | Link |
Implement secondary content features (like count, commenting) | Link |
Study the backend and report to the team lead | Link |
[BUG] User profile is static and needs to be implemented | Link |
[BUG] Posts are listed in the feed/home but not listed under community | Link |
Implement advanced search | Link, Link |
Discussion: Give authority to @efestrikesback during reform period | Link |
Discussion: Reduce resources for two backend development | Link |
Implement create new post (subtask #56) | Link |
Implement community page (subtask #56) | Link |
Implement create new community action (subtask #56) | Link |
Write milestone 1 report and present to customer | Link |
Control & enforce pull request policy | Link |
Ensure the application is deployed and functioning properly | Link |
Configure Docker for React project | Link |
Configure Docker image for backend deployment | Link |
Combine and test backend and frontend projects | Link |
Finalize release on GitHub | Link |
Configure security group for EC2 | Link |
Test deployment on Amazon EC2 | Link |
Configure Amazon EC2 for project deployment | Link |
Create EC2 on Amazon | Link |
Build security configurations for backend project | Link |
Implement authentication system | Link |
Create backend for login page with Spring Security | Link |
Set up DEV & PROD branches for backend | Link |
Badge system: backend design | Link |
[BUG]: User profile is static needs to be implemented | Link |
[BUG]: Posts are listed in the feed/home but not listed under community | Link |
Implement advanced search | Link |
- Summary of work performed: (in terms of requirements, design, management, just list the above requirements)
Backend architecture, backend design for the new features, backend development, branch and pull request management, support cloud ops led by Feridun, support FE integration led by Altan.
Bug fixes, CICD management, task management, team management. Tag system, file upload feature, badge system w/ Feridun. Code reviews and bnackend support.
- Requirement(s) worked on and brief description:
Requirement Number | Status | Brief Description |
---|---|---|
III.1. | completed | implemented registeration @ backend |
III.2. | partially completed | implemented community tags @ backend |
III.3. | completed | implemented user profile @ backend |
IV.1. | completed | implemented auth @ backend |
V.1. | completed | implemented @ backend |
V.2. | completed | implemented @ backend |
V.3. | completed | implemented @ backend |
VI.B.1. | completed | worked on backend design |
VI.B.4. | completed | worked on backend design |
VI.C.1. | completed | designed and implemented @ backend with Feridun(pair) |
VI.C.2. | completed | designed and implemented @ backend with Feridun(pair) |
VI.C.3. | completed | designed and implemented @ backend with Feridun(pair) |
VI.C.4. | completed | designed and implemented @ backend with Feridun(pair) |
VII.A.1. | completed | implemented community creation @ backend |
VII.A.2. | completed | implemented community creation @ backend |
VII.A.3. | completed | implemented community roles @ backend |
VII.A.4. | completed | implemented @ backend |
VII.A.5. | completed | implemented @ backend |
VII.A.6. | completed | implemented @ backend |
VII.A.7. | completed | implemented templates @ backend |
VII.A.8. | completed | implemented @ backend |
VII.C.1. | completed | implemented @ backend |
VIII.A.1. | completed | implemented subscription @ backend |
VIII.A.2. | completed | implemented unsubscription @ backend |
VIII.B.1. | completed | implemented template system @ backend |
VIII.B.2. | completed | implemented posting @ backend |
VIII.B.2. | completed | implemented posting @ backend |
VIII.C.3. | completed | implemented multimedia support (images) @ backend |
IX.A. | completed | implemented tag system @ backend |
IX.A. | completed | small work on backend side |
X.2. | completed | implemented multimedia support (images) @ backend |
X.3. | completed | implemented user system @ backend |
X.4. | completed | implemented community system @ backend |
- Related issue/pull request/documentation URL:
- Explanation of code written: (with relevant URLs):
The relevant links and their respective requirements are given in the table above.
- Coded the backend from scratch on my own. (Security, authentication, user mamagement, community management, posts and content, templates and fields etc.)
- Implemented community tags with Feridun's support.
- Implemented multimedia system.
- Pair coded badge system w/ Feridun
- Supported Feridun @ commenting system
- Supported Feridun @ upvoting.
- Worked on lazy loading issue w/ Altan and Feridun.
- Documentation: describe the documentation you personally wrote
Decisions-&-Policies Elicitation-Notes Reforms
6. Screenshots: (demonstrating the most complex functionality you personally implemented)
I worked specifically on back-end stuff, code rewievs and pipeline management so can not provide screenshots.
7. Challenges:
Management-related Significant Issues: After first deadline we decided to reform the team and I was given full control over team management. I carefully created and assigned tasks to the members whom claimed that they were confident about the given taks. Even though confirmation, we faced problems about deadline management, especially the backend team struggled with meeting deadlines which in return affected frontend team that are waiting services. Another problem we had was lack of communication, some members decleared that they are struggling with taks at the very last second. We managed to overcome these issues with harsher measures. Directly questioning about the progress of the tasks helped greatly. Another enchament was Altan's step up when it comes to coordination of the front end team.
Pull Requests: We had multiple conflicts that took me hours to resolve. Especially after start of multiple people working on different features on backend at the same time. Even though the features were clearly distinct functionlaity wise they were overlapping at the entities and services used which led to conflicts. We also had couple of direct pushes to the main, revertring and creating a PR would be tideous so I carefully checked changeset, tested functionalities of the changes and then aproved the commit.
8. Code review:
Group member name whose code you reviewed: Yana and Feridun
Code reviewed (pull request, GitHub conversation): I created the table "Pull Requests Reviewed by me"
Code review nature: (problems, status, how problems were addressed) : I checked the code after that everything looks okay I accept the pull requests.
Code review results: Most of the code review went fine and without any problems. Refused PRs that override core functions (thus create new bugs), refused one line change PRs that has no real value.
My Pull requests :
PR NUMBER | PR TITLE | STATUS | WORKING STATUS |
---|---|---|---|
#141 | tags, community images | MERGED | Working |
#122 | Feature/altan 88 implement landing page base features | MERGED | Working |
#110 | feature/efe 96 implement community page | MERGED | Working |
#103 | Infra/efe 101 combine be and fe merged into dev-backend | MERGED | Working |
#90 | Feature/efe 87 implement content base features | MERGED | Working |
#86 | Feature/efe 82 implement community base features | MERGED | Working |
#80 | Feature/efe 78 implement user management | MERGED | Working |
#77 | update invidual contributions | MERGED | Working |
#46 | Dev backend deployment merge | MERGED | Working |
#36 | Feature/efe 33 build security configuration 2 | MERGED | Working |
#35 | Feature/efe 33 build security configuration 1 | CLOSED | Working |
#31 | #27 initialize backend | MERGED | Working |
#28 | Development frontend | MERGED | Working |
Pull Requests Reviewed by me :
PR NUMBER | PR TITLE | MERGE STATUS | WORKING STATUS |
---|---|---|---|
#201 | Development final #201 | MERGED | Working |
#192 | number fields added on advanced search | MERGED | Working |
#176 | #154 #153 fix community leave endpoint and add private archive functi… | MERGED | Working |
#175 | Feature/feridun 153 | MERGED | Working |
#150 | # Fix/altan lazy frontend authorname | MERGED | Not Working |
Issues I created and gave other members => (CREATED) Issues I worked on my own or I was given the task => (ASSIGNED)
ISSUE NUMBER | ISSUE TITLE | STATUS |
---|---|---|
#191 | [BUG] Community count based badges do not work bug Component : api Component : backend enhancement | CREATED & ASSIGNED |
#154 | [BUG] Unfollow Community bug Component : api | CREATED & ASSIGNED |
#153 | [BUG] Community Create api isPrivate field is not working bug Component : api | CREATED & ASSIGNED |
#140 | Community tags Component : api Component : backend | CREATED & ASSIGNED |
#139 | Community image endpoits, get, delete, upload Component : api Component : backend | CREATED & ASSIGNED |
#136 | [BUG]: Delete post service uses wrong input as parameter bug Component : api Component : backend | CREATED |
#131 | Implement badge mechanism Component : api Component : backend enhancement | CREATED & ASSIGNED |
#130 | Add a new data type for numeric search Component : backend | CREATED & ASSIGNED |
#127 | [BUG]: Unable to create community with long descriptions bug Component : backend | CREATED & ASSIGNED |
#126 | Add community picture/logo properties to the community class Component : api Component : backend enhancement | CREATED & ASSIGNED |
#123 | Resolve (Feature/altan 88 implement landing page base features to main) conflicts CI/CD Component : infra & cloud | CREATED & ASSIGNED |
#121 | Test and organize branches, resolve conflicts Component : infra & cloud | CREATED |
#117 | Implement secondary content features (on POST entity) : like count, commenting etc Component : api Component : backend Component : original backend | CREATED & ASSIGNED |
#116 | Add numeric filtering to advanced search Component : api Component : backend Component : original backend Improvement Status : needs review | CREATED |
#115 | Study the backend and report to the team lead management study & research | CREATED |
#114 | [BUG]: under community page, recently created post do not show up bug Component : frontend | CREATED |
#113 | [BUG]: create template button goes out of screen and disappears as we add more fields bug Component : frontend | CREATED |
#109 | Implement advanced search Component : api Component : original backend Status : in progress | CREATED & ASSIGNED |
#108 | Implement advanced search Component : api Component : backend Component : original backend enhancement REFORM | CREATED & ASSIGNED |
#107 | Create and implement "get post list by community id " endpoint Component : api enhancement | CREATED & ASSIGNED |
#106 | Create and implement "get member list by community id " endpoint Component : api Component : backend Component : original backend enhancement | CREATED & ASSIGNED |
#105 | Discussion: "We have decided to give absolute authority to @efestrikesback ... centralized leadership or more democratic ways?" | CREATED |
#104 | Discussion: "We are using too many resources developing two backends..." Component : backend Component : original backend discussion | CREATED |
#102 | Integrate and adapt endpoints Component : api Component : backend Component : frontend Component : original backend Priority : Critical REFORM | CREATED & ASSIGNED |
#101 | Combine BE & FE branches into single "dev" branch pre-presentation Component : api Component : backend Component : frontend Component : original backend | CREATED & ASSIGNED |
#100 | Implement create new post (subtask #56) Component : frontend enhancement REFORM | CREATED |
#97 | Check the progress and readiness for the presentation. REFORM | CREATED |
#96 | Implement community page (subtask #56) Component : api Component : frontend enhancement REFORM | CREATED |
#95 | Implement cookies and local storage utilisation Component : api Component : frontend enhancement | CREATED |
#94 | Implement create new community action (subtask #56) Component : api Component : frontend enhancement REFORM | CREATED & ASSIGNED |
#93 | Implement (list) communities page (subtask #56) Component : api Component : frontend enhancement REFORM | CREATED & ASSIGNED |
#92 | Implement "my communities" page (Subtask #56) Component : api Component : frontend enhancement REFORM | CREATED |
#91 | Implement user profile page (subtask #56) Component : api Component : frontend enhancement REFORM | CREATED & ASSIGNED |
#89 | Implement validation for post creation Component : api Component : backend Component : original backend enhancement Improvement | CLOSED (last month) |
#87 | Implement content base featues: custom templates, posts Component : api Component : backend Component : original backend enhancement | CREATED & ASSIGNED |
#85 | Implement content base features: custom post templates, posting, advanced search Component : api Component : backend Component : original backend | CREATED & ASSIGNED |
#84 | Remove unnecessary back references from get communities list endpoint bug Component : api Component : backend Component : original backend | CREATED & ASSIGNED |
#83 | Implement community roles Component : api Component : backend Component : original backend enhancement | CREATED & ASSIGNED |
#82 | Implement community base features, creation, membership, ownership Component : backend Component : original backend enhancement | CREATED & ASSIGNED |
#81 | Clean up branches, fix conflicts and upstream errors bug Component : infra & cloud | CREATED & ASSIGNED |
#79 | Implement basic role-based authorization Component : api Component : backend Component : original backend | CREATED |
#78 | Implement user management and user profile Component : api Component : backend Component : original backend enhancement | CREATED & ASSIGNED |
#76 | Write a new milestone 1 report and present to customer documentation | CREATED |
#70 | Migrate legacy code to repo Priority : High | CREATED & ASSIGNED |
#68 | Prepare for the presentation [will be divided into issues with asssignemnent & more tasks] management | CREATED |
#66 | Oversee the creation and updating of project documentation [will be assigned later] | CREATED |
#53 | Ensure every work has related issue discussion REFORM | CREATED & ASSIGNED |
#52 | Set up code review process discussion REFORM | CREATED & ASSIGNED |
#51 | Communicate new practices with team members documentation REFORM | CREATED & ASSIGNED |
#50 | Add new mandotory practices to wiki REFORM | CREATED & ASSIGNED |
#49 | Update commit naming guideline on wiki documentation REFORM | CREATED & ASSIGNED |
#48 | Update branch naming guidelines on wiki documentation Improvement REFORM | CREATED & ASSIGNED |
#47 | Describe individual contribution documentation Priority : Critical | CREATED |
#45 | Create first release package Component : api Component : backend Component : frontend enhancement | CREATED & ASSIGNED |
#44 | Configure docker for the react project configuration | CREATED & ASSIGNED |
#43 | Configure docker image for backend deployment Component : backend Component : frontend enhancement | CREATED & ASSIGNED |
#42 | Combine and test backend and frontend projects Component : api Component : backend Component : frontend enhancement Priority : Critical | CREATED & ASSIGNED |
#41 | Finalize release on Github configuration test | CREATED |
#39 | Test deployment on Amazon EC2 Component : api Component : backend Component : frontend enhancement | CREATED & ASSIGNED |
#33 | Build security configurations of the backend project Component : backend enhancement Priority : Critical | CREATED & ASSIGNED |
#32 | Upgrade backend JDK from 17 to 21 Component : backend enhancement Improvement | CREATED & ASSIGNED |
#29 | Create seperate branches for frontend and backend discussion enhancement Improvement refactor | CREATED & ASSIGNED |
#27 | Initialize backend project & update spring boot Component : backend enhancement Improvement Priority : Critical | CREATED & ASSIGNED |
#26 | Implement authentication system Component : api Component : backend enhancement Priority : Critical | CREATED & ASSIGNED |
#14 | Documenting meeting notes, October 1, 2024 discussion documentation help wanted Status : done | CREATED & ASSIGNED |
#12 | Badge system: backend design Component : backend discussion enhancement Priority : Critical | CREATED & ASSIGNED |
#11 | Create a wiki page for weekly elicitation notes documentation | CREATED |
#9 | Create mockups documentation Priority : High Status : done | CREATED |
#6 | Create a new diagram for CI/CD operation flow documentation | CREATED |
#5 | Establish workflows and team roles discussion Priority : High Status : done | CREATED |
#4 | Create a wiki page for decisions made documentation Priority : Critical Status : done | CREATED |
#3 | Set issue, commit, and branch naming standards Priority : High Status : done | CREATED & ASSIGNED |
#1 | Repo Review discussion Priority : High Status : done | CREATED |
1. Summary of work performed:
In terms of documentation, I organized the Requirements Specification, meeting meetings, and the general part of milestone reports, including this one.
In terms of design, I prepared activity diagrams and use-cases, together with Aliser; suggested a concept for a recommendation service backend design; and badge system backend design.
In terms of requirements coverage, I worked on recommendations; assigning community administration roles to community members; and several fixes.
2. Requirement(s) worked on and brief description:
VI.B. Content recommendation
Recommendations based on user post upvotes, community tags overlap, and recommendations based on recent activity in communities were introduced in the backend. In the system, the recommendations based on community tags overlap endpoint is used to recommend communities whose tags are similar to those communities that the user created and/or followed.
VII. Community Administration
The role of community Creator was given the opportunity to assign Admin role to community members. The Creator role received the same permission set as Admins who can remove subscribers from communities.
3. Related issue/pull request/documentation URL:
4. Documentation:
In terms of documentation, I organized the Requirements Specification, meeting minutes, , and the general part of milestone reports (1, 1.1 and 2), including this final report..
5. Code review:
I did not perform any code reviews in this project.
6. Pull requests:
PR Number | PR Title | PR Status |
---|---|---|
#18 | Feature/yana 17 login signup | Closed |
#142 | Feature/yana 133 recommendation | Merged |
#157 | Feature/yana 155 recommendations update | Merged |
#159 | add signed vs unsigned number checks and add text validations to template | Merged |
#172 | fix the issue with recommended posts regarding missing communityId | Merged |
#174 | Feature/yana 165 add remove members to community | Merged |
#179 | fix: add communityId as a getter of Post entity to return as part of Json | Merged |
#186 | introduce new enum type and new column for keeping JSON data | Closed |
7. Issues:
Issue | Issue Title | Status |
---|---|---|
#170 | [BUG] recommended posts are without communityId and not a correct json structure bug Component : api Priority : Critical | done, needs review (open) |
#155 | Recommendations update bug Component : api Component : backend enhancement help wanted | open (help wanted) |
#184 | introduce-custom-enum-field-type Component : backend enhancement | in progress, needs review (closed) |
#165 | Add & Remove members to community Component : api enhancement | done (closed) |
#158 | Implement NUMBER validation Component : backend Improvement | done (closed) |
#133 | Implement recommendation system Component : backend Component : frontend enhancement Priority : Critical | closed |
#120 | Documentation & wiki maintenance (till MVP) documentation | closed |
#25 | Create use case scenarios and diagrams documentation Status : in progress | in progress (closed) |
#12 | Badge system: backend design Component : backend discussion enhancement Priority : Critical | closed |
#7 | Supplement the requirements discussion documentation Priority : High Status : done | done (closed) |
#5 | Establish workflows and team roles discussion Priority : High Status : done | done (closed) |
8. Explanation of code written:
PR Number | Explanation |
---|---|
#142 | This includes 3 JPQL queries in CommunityRepository: 1. findRecommendedCommunitiesBasedOnLikes(User user) • Fetches public communities sharing tags with those liked by the user (based on posts the user voted on). • Excludes any community the user already belongs to. 2. findRecommendedCommunitiesBasedOnMembership(User user) • Selects public communities sharing tags with those the user already joined. • Excludes communities the user is a member of and private communities. 3. findPublicCommunitiesWhereNoMembershipExistsFor(User user) • Returns public communities not associated with the user. • Filters out private communities and those the user already belongs to. |
#157 | Includes 3 new methods in PostService.java: 1. getRecommendedPostsBasedOnLikes • Fetches a list of communities recommended to the user based on their likes and, if none are found, defaults to public communities. • Gathers the top 10 posts by votes and the newest 10 posts from those communities, combines them, and returns a distinct list. 2. getRecommendedPostsBasedOnMembership • Retrieves a list of recommended communities for the user based on their memberships and defaults to public communities if none are found. • Fetches the top 10 posts by votes and the newest 10 posts, merges them, and returns a unique set of posts. 3. get10PostsFromAllCommunities • Streams through all posts in the given communities, filtering out any posts the user has already voted on. • Sorts the remaining posts with the provided comparator and returns only the first 10. |
#159 | Updates FieldDatatype class to add validation methods on data types and corresponding exceptions using the Consumer interface and lambdas on enums. Also updates PostService class to add CheckFieldDataType method, which retrieves the data types in the template field and runs the appropriate validation methods. |
#174 | Introduces MemberRoleAssignmentDTO to assist with assigning admin roles to community members. Updates CommunityService and CommunityController where: assignMemberRole • Assigns a new role to an existing community member if the requester has CREATOR or ADMIN privileges. removeMember • Removes a member from the community if the requester has CREATOR or ADMIN privileges and the target user is not the community creator. The CommunityController exposes two endpoints to call these methods. |
9. Challenges:
The biggest challenge of this project for me was working with the code base that was not developed by me and making sense of it. I also did not have any previous experience with writing JPQL queries which i needed for the recommendation system; nesting the queries in the right order was also hard to figure out. Also, I could not implement the advanced search functionality properly using the Specification interface provided by Spring as using this pattern combined with the Predicate interface required more studying and time than I had. This functionality had to be implemented on the frontend by JavaScript means.
10. Screenshots:
Recommended posts (backend)
Community administration rights: remove members and assign as community administrator (backend)