Alperen Akyol - bounswe/bounswe2025group2 GitHub Wiki

Note: You can reach my weekly efforts at the bottom of this page.

Note 2: You can reach my description about the external api that i have used at the bottom of this page.

Regarding Me...

Hey, I am Alperen (a.k.a. AipAkyol), a junior CmpE undergrad in Bogazici University.

My main interest areas are Game Development and Algorithms.

My favorite programming language is Java:

class Main {
    public static void main(String[] args) {
        System.out.println("Everyone loves Java!");
    }
}

My summary in CS:

Programming Languages:

  • Java
  • Python
  • C
  • Svelte
  • RISC-V and GNU Assembly

I have created many projects inside and outside of the class. You can check their repos from my Github Profile.

You can also check my first web project that can be used for concurently checking the local time of the cities around the world.

My hobbies 😄 :

  • Gaming and Game Industry since my main goal is becoming a game developer one day :)
  • Reading fiction books 📖
  • Watching Movies and TV Series, my favorite one is a German series called Dark
  • Playing football ⚽

You can contact me from...

📖 Quote API Documentation

Overview

The Quotes API provides motivational quotes functionality for the GenFit application fetching motivational quotes from the ZenQuotes API, offering both random and daily quotes to authenticated users. The implementation consists of a Django model and corresponding API views.

File Structure

  • Model Definition: /backend/genfit_django/api/models.py
  • API Views: /backend/genfit_django/api/separate_views/quote_views.py

Model Structure

class Quote(models.Model):
    text = models.TextField()
    author = models.CharField(max_length=100)
    fetched_at = models.DateTimeField(default=timezone.now)
    
    class Meta:
        ordering = ['-fetched_at']
    
    def __str__(self):
        return f'"{self.text}" - {self.author}'

The Quote model includes:

  • text : The content of the quote (TextField)
  • author : The name of the quote's author (CharField, max 100 characters)
  • fetched_at : Timestamp of when the quote was fetched (DateTimeField)
  • Automatic ordering by most recent quotes first
  • String representation combining quote text and author

API Endpoints

1. Random Quote Endpoint

@api_view(['GET'])
@permission_classes([IsAuthenticated])
def get_random_quote(request):
    quote = fetch_and_cache_quote()
    if quote:
        return Response({
            'text': quote.text,
            'author': quote.author
        })
  • URL : /api/quotes/random/
  • Method : GET
  • Authentication : Required
  • Caching : 15-second cache to prevent excessive API calls

2. Daily Quote Endpoint

@api_view(['GET'])
@permission_classes([IsAuthenticated])
def get_daily_quote(request):
    quote = fetch_daily_quote()
    if quote:
        return Response({
            'text': quote.text,
            'author': quote.author
        })
  • URL : /api/quotes/daily/
  • Method : GET
  • Authentication : Required
  • Caching : Cached for the entire day

Helper Functions

1. Random Quote Fetching

def fetch_and_cache_quote():
    try:
        recent_quote = Quote.objects.filter(
            fetched_at__gte=timezone.now() - timedelta(seconds=15)
        ).first()
        
        if recent_quote:
            return recent_quote
        
        response = requests.get(f"{ZENQUOTES_API_URL}/random")
  • Checks for quotes fetched in the last 15 seconds
  • If none found, fetches new quote from ZenQuotes API
  • Stores quote in database for caching
  • Falls back to most recent quote if API call fails

2. Daily Quote Fetching

def fetch_daily_quote():
    try:
        today_start = timezone.now().replace(hour=0, minute=0, second=0, microsecond=0)
        daily_quote = Quote.objects.filter(fetched_at__gte=today_start).first()
  • Checks for quotes fetched today
  • If none found, fetches new daily quote from ZenQuotes API
  • Stores quote in database for daily caching
  • Falls back to most recent quote if API call fails

Error Handling

  • Returns 503 Service Unavailable if quote fetching fails
  • Implements fallback mechanism to use cached quotes
  • Gracefully handles API timeouts and connection issues

Integration

The quotes API is integrated with the GenFit application to provide motivational content throughout the user experience, such as daily motivation on the main page.

Weekly Efforts

Week 1 (13/02/25 - 20/02/25)
Task Description Duration Type of Work Issues
Wiki Personal Page Created a wiki page to introduce myself, the goal was to have familiarity with markdown. 1 hours Task #6
Create the GitHub Introduction page on the wiki Created a wiki page to cover Introduction to Github info. 3 hours Task #18
Meeting 1 Moderation Conducted and moderated the first meeting. We have decided that Güney will moderate the meetings until the first milestone since he has experience 1 hours Task Meeting 1
Meeting 2 Notetaking Tooks notes while the meeting conducts, then created the meeting 2 wiki page. 90 minutes Task Meeting 2
Issue Review: Create Labels Reviewed the created labels for issues and gave feedback. 10 minutes Review #1
Issue Review: Building a personal profile page on wiki Reviewed Berkay's personal page and gave feedback. 10 minutes Review #8
Issue Review: Constructing the Research part of the wiki and adding the documentation about 'Git' Reviewed Berkay's research about Git and gave recommendations regarding improvements. 30 minutes Review #16
Issue Review: Prepare a wiki page for "Fun Fact About Git/GitHub" Reviewed Ahmets's research about fun facts regarding Git and Github. 30 minutes Review #22

Attended meetings

Week 2 (20/02/25 - 27/02/25)
Task Description Duration Type of Work Issues
Forum Requirements I had decided and wrote a introductory forum requirements for the project chosen (12) by the team. 3 hours Task #35
Write Elicitation Questions Regarding Forum I examined and wrote the elicitation questions regarding forum after writing requirements. 20 minutes Task Questions
Issue Review: Login & Registration Requirements Reviewed Ahmet's requitements regarding login and registration, gave feedback. 20 minutes Review #38
Issue Review: Profile & Account Requirements Reviewed Doran's requitements regarding profile and account, gave feedback. 10 minutes Review #30
Issue Review: Constructing the Research part of the wiki and adding the documentation about 'Git' Reviewed Berkay's research about Git and gave recommendations regarding improvements. 30 minutes Review #16
Issue Review: Enhancing Wiki Main Page Reviewed Ayhan's enchantements about wiki main page. 10 minutes Review #41

Attended meetings

Week 3 (27/02/25 - 06/03/25)
Task Description Duration Type of Work Issues
Glossary Update (Forum Requirements) I updated the glossary with the terms that are used in forum requirements 30 minutes Task #42
Refinement of the Forum Requirements I refined the Forum Requirements in the light of the Customary Meeting 1 hour Task #44
Adding the Notifications Tab to the Requirements I added a new notifications tab to the requirements since the neediness of the seperate tab because of the increased wants on the notifications. 3 hours Feature #46

Attended meetings

Week 4 (06/03/25 - 13/03/25)
Task Description Duration Type of Work Issues
Adding Acceptance Criteria Header to the Issue Template I added an acceptance criteria header to the issue template since we have decided (in the meeting) having it will make our issues more defined. 10 minutes Task #52
Preparing Use Case Diagram about Goals I will prepared a use case diagram about a user interacting with goal mechanism. 4 hours Feature #55
Pull Request Created: Add user-goal-use-case-diagram.png After creating the use case diagrams that are in png's, i have created a pull request to add these png's to the main branch. 30 minutes Pull Request #57
Pull Request Reviewed: Added sequence diagrams about Goals I reviewed and gave feedback about this PR regarding adding some png's that will be used on sequence diagrams. 30 minutes PR Review #58
Issue Review: Preparing a Sequence Diagram for the Goal Mechanism Reviewed Berkay's sequence diagram featuring the goal mechanism, gave feedback 2 hours Review #54

Attended meetings

Week 5 (13/03/25 - 20/03/25)
Task Description Duration Type of Work Issues
Ensure name conventions for wiki titles are met I ensured that all the names in the wiki follows a convention. 30 minutes Task #67
Add the weekly efforts of previous weeks I added the weekly efforts of previous weeks to my personal page. 1 hour Feature #66
Meeting 8 Notetaking Tooks notes while the meeting conducts, then created the meeting 2 wiki page. 2 hours Task Meeting 8
Issue Review: Creating the Main Wiki Page Reviewed Berkay's recreation of the wiki main page, gave feedback 20 minutes Review #68

Attended meetings

Week 6 (20/03/25 - 27/03/25)
Task Description Duration Type of Work Issues
Add Software Requirement Specification I added Software Requirement Specification page to make requirements page more defined and structured. 3 hours Feature #80

Attended meetings

Week 7 (27/03/25 - 03/04/25)
Task Description Duration Type of Work Issues
Research Django I researched Django for back-end development. 2 hours Task #99

Attended meetings

Week 8 (03/04/25 - 10/04/25)

Ramadan Break --- No job done

We have decided to conduct our weekly meetings on saturdays from now on, so the weeks will start and end on saturdays as well for my weekly effort table.

Week 9 (10/04/25 - 19/04/25)
Task Description Duration Type of Work Issues
Research Django I continued my initial research on Django for back-end development. 4 hours Task #99
Set Up Notifications API I set up the api regarding the notifications in the light of notifications requirements. 6 hours Feature #110
Pull Request Created: Back-end Notification system After implementing the API for the notification system, i have created a pull request to merge it's branch to its parent branch. 1 hour Pull Request #112
Issue Review: Add the Meeting 11 Notes Reviewed Berkay's notes about the meeting, gave feedback 20 minutes Review #98

Attended meetings

Week 10 (19/04/25 - 26/04/25)
Task Description Duration Type of Work Issues
Add a pr template I added a pr template as requested in the meeting 45 minutes Feature #151
Set Up Profile API I set up the api regarding the profile in the light of profile requirements. 7 hours Task #147
Pull Request Created: Create PULL_REQUEST_TEMPLATE.md I have created a pull request for the pr template 15 minutes Pull Request #152
Pull Request Created: Backend profile impl After implementing the API for the profile, i have created a pull request to merge it's branch to its parent branch. 1 hour Pull Request #153
Pull Request Reviewed: Goal endpoints added to the API I reviewed and gave feedback about this PR regarding adding the goal mechanism api. 1 hour PR Review #149
Issue Review: Backend meeting 2 notes Reviewed Yusuf's notes about the meeting, gave feedback 20 minutes Review #131
Issue Review: Create ER diagram Reviewed Doran's er diagram and sql code regarding the class diagram, gave feedback 30 minutes Review #111

Attended meetings

Week 11 (26/04/25 - 03/05/25)
Task Description Duration Type of Work Issues
Backend Vote Implementation I implemented the voting mechanism that will be used inside the forum as decided in the main issue of the forum implementation. 7 hours Task #166
Backend Forum Implementation We implemented the forum features with Doran and Yusuf alltogether, by first implementing the seperate features alone, then merging all of them and testing together. 5 hours Feature #165
Pull Request Created: Back end vote implementation for forum I have created a pull request for the vote implementation for the forum that is merged with other forum features 1 hour Pull Request #170
Pull Request Created: Backend Forum Implementation I have created a pull request for merging the the forum features that we have implemented with Doran and Yusuf into main . 3 hours Pull Request #168
Pull Request Reviewed: Backend Forum&Thread implementation for forum I reviewed and gave feedback about this PR regarding adding the forum and thread implementation of Doran. 1 hour PR Review #171
Issue Review: Forum and thread model implementation for forum I reviewed and gave feedback about this issue regarding adding the forum and thread implementation of Doran. 1 hour Review #167

Attended meetings

Week 12 (03/05/25 - 10/05/25)
Task Description Duration Type of Work Issues
Meeting Notes for Back end meeting 4 I summarized the back end meeting 4 in the wiki page. 45 minutes Task #193
Learn and write an examplary unit test I implemented a unit test about profile since we all required to implement one. 3 hours Feature #194
Containerize and research deployment options Me and Berkay researched deployment options and containerization since the project is required to be deployed in cloud. 12 hours Feature #195
Pull Request Created: profile overhaul and testing added I have created a pull request for profile unit test, test automation, and some profile changes 2 hours Pull Request #216
Pull Request Created: Containerization deployment I have created a pull request for containerization that will be used to deploy the project in the cloud using docker compose and digitalocean 3 hours Pull Request #210
Issue Review: Add Meeting 14 Notes Reviewed Berkays's notes about the meeting, gave feedback 20 minutes Review #190

Attended meetings

Week 13 (10/05/25 - 17/05/25)
Task Description Duration Type of Work Issues
Meeting 16 Moderation and Notetaking Conducted, note-taked, and moderated the last meeting. We have talked about the last day of the implementation and splitted works to everyone 2 hours Meeting Meeting 16
External API for motivational quotes I used an external api called zenquotes that is used on getting motivational quotes and write endpoints for it. Also wrote front end for it 4 hours Feature #220
docker compose improvement I added a documentation on how to run the docker compose, and also change the population file to have real names, and change its prints to not to show while docker composing. 2 hours Task #228
Notifications connections As back end team we made sure that the notifications are working correctly in the models we have implemented. 3 hours Task #229
notifications for votes I inserted the notif system to the votes using signals, also changed the populate-db since now notifs are automatic. 3 hours Task #239
Fix forums are missing in some occations I fixed the missing forums bug by inserting a location hook. 4 hours Bug #262
Fix old comments stay on threads I fixed the old comments staying on new threads by modifying the query key. 1 hour Bug #270
Vote status 404 on Forum I investigated this bug and fixed the back end problems and identifed non-bug 404's. 3 hours Bug #250
Requirements Overhaul Yusuf and I changed the req's to make them parallel with current implementation. 3 hours Task #274
Document the external zenquotes api on my main page I documented my external api on my personal wiki page. 1 hour Task #275
Emphasize communication plan on wiki main page I reworked on the comm plan on the wiki main page. 30 minutes Task #271
Add delete to forum Ahmet and I added delete vote functionality to the forum. 1 hour Feature #278
Pull Request Created: Ext api zenquotes I have created a pull request for the external api that i have used. 1 hour Pull Request #223
Pull Request Created: Dockercomp doc population fixes I have created a pull request for the fixes regarding docker compose. 2 hours Pull Request #237
Pull Request Created: Added notification for votes, deleted manula notif creation in db pop... I have created a pull request for the notifications integration in votes and db populate overhaul. 2 hours Pull Request #241
Pull Request Reviewed: Unit tests for login added I reviewed and gave feedback about this PR that adds unit tests for login. 1 hour PR Review #212
Pull Request Reviewed: Ai tutor is added using external groq api I reviewed and gave feedback about this PR that adds an well done ai chatbot to the chats page. 2 hours PR Review #215
Pull Request Reviewed: added local hour fetching & some cleanups to web fronend I reviewed and gave feedback about this PR that adds local hour component using an external ai. 3 hours PR Review #240
Pull Request Reviewed: Downvote fix I reviewed and gave feedback about this PR that fixes downvote interactivity in the forum. 1 hour PR Review #266
Pull Request Reviewed: added delete calls to api I reviewed and gave feedback about this PR that add delete vote functionality to the forum. 2 hours PR Review #276
Pull Request Reviewed: Home page fix Reviewed this pull request regarding fixing home page such as adding non-static goals tab etc. 1 hour Review #283
Issue Review: fix reg error on server Reviewed this issue regarding fixing some bug that is in the server while registration 2 hours Review #218
Issue Review: Notifications connections Reviewed this issue regarding making sure that notifs are working correctly for all the aspets of the app 1 hour Review #229
Issue Review: Fix ongoing problems in the goals page Reviewed this issue regarding fixing goal issues such as adding progress 30 minutes Review #230
Issue Review: Fix downvote not turning blue Reviewed this issue regarding fixing downvote not turning blue when downvoting comments first time 2 hours Review #264

Attended meetings

“Here’s the thing kid, we don’t get to choose how we start in this life. Real greatness is what you do with the hand your dealt”

⚠️ **GitHub.com Fallback** ⚠️