MVP Milestone Individual Contribution: Mehmet Akif Yıldırım - bounswe/bounswe2026group11 GitHub Wiki

Mehmet Akif Yıldırım (Backend)

Responsibilities

  • Implemented core backend features including event lifecycle management, profile endpoints, join/cancel flows, and background jobs.
  • Contributed to web frontend by implementing favorites, token refresh, profile image upload, and discover page improvements.
  • Wrote and maintained OpenAPI documentation for backend endpoints.
  • Participated in requirements refinement, class diagrams, use case diagrams, sequence diagrams, and scenario work.
  • Contributed to lab reports, test plan documentation, and project planning artifacts.
  • Took part in code reviews and team discussions throughout the MVP process.

Main Contributions

  • Implemented request authentication and logging middleware for the backend, establishing the foundation for all authenticated API flows.
  • Implemented the create-event backend endpoint and aligned the event schema with the requested payload.
  • Implemented join-event and join-request endpoints supporting both public and protected event flows.
  • Added cancel-event endpoint and fixed related issues with canceled event visibility in participant profiles.
  • Implemented manual event completion endpoint (PATCH /events/:id/complete) for hosts to close open-ended events.
  • Implemented background jobs: auto-expiring ACTIVE events after end_time and auto-completing stale/max-duration events.
  • Implemented public event discovery and details endpoint, enabling unauthenticated browsing.
  • Implemented GET /me and PATCH /me profile endpoints, including gender, birth date, and image support.
  • Added host_score, participant_score, final_score, and privacy_level to profile and event summary responses.
  • Added name column to the favorite location table.
  • Added public GET /categories endpoint.
  • Implemented silent token refresh on the web frontend using refresh tokens.
  • Implemented favorites page on web frontend.
  • Added active tab to My Events page and removed deprecated Invitations navigation item.
  • Replaced profile image URL input with a direct file upload flow on the frontend.
  • Fixed authenticated user redirect from the landing page to the discover page.
  • Contributed to requirements refinement, use case diagrams, class diagrams, sequence diagrams, and lab reports.
  • Contributed to test plan and coverage documentation.

Significant Issues (Top 3 per category)

Code-Related

Issue #145: feat(backend): implement create-event API

Implemented the core event creation API, enabling users to create events with all required attributes. This feature serves as a fundamental component of the MVP. Related merged work: PR #316.

Issue #199: feat(backend): implement cancel-event endpoint

Implemented the cancel-event endpoint, allowing hosts to cancel events and ensuring proper handling of event lifecycle transitions. Related merged work: PR #272.

Issue #322: feat(backend): enable public event discovery and details access

Implemented public event discovery so unauthenticated users could browse events, an essential MVP requirement. Related merged work: PR #330.

Non-Code-Related

Issue #103: docs: create implementation plan (MVP + final milestone)

Contributed to creating the implementation plan covering both MVP and final milestone phases.

Issue #160: docs: define test plan and test coverage

Contributed to defining the test plan and coverage strategy for the project.

Issue #381: docs: prepare project plan for MVP deliverable D4

Contributed to creating the project plan documentation as part of the MVP milestone deliverables.

Pull Requests

  • PR #97: fix(stub-app): rename button label to Location Search — minor label fix in the stub app.
  • PR #136: feat(backend): implement request auth and logging middleware — established authenticated request handling and logging for all backend routes.
  • PR #154: feat(backend): add create-event endpoint — implemented the event creation API and aligned the schema with frontend requirements.
  • PR #206: feat(backend): add join-event and join-request endpoints — enabled users to join public events and send requests for protected ones.
  • PR #212: feat(backend): add public GET /categories endpoint — exposed categories to unauthenticated clients.
  • PR #218: feat(backend): add name column to favorite_location — extended the favorite location schema with a display name field.
  • PR #227: feat(backend): include gender and birth_date in UserSummary responses — enriched user summary data returned in auth responses.
  • PR #231: feat(backend): add GET /me and PATCH /me profile endpoints — implemented self-profile read and update, including image upload.
  • PR #240: fix(docs): correct profile API path and version — corrected a path mismatch in the OpenAPI spec.
  • PR #272: fix(backend): expire ACTIVE events after end_time via background job — implemented a scheduled job to transition events from ACTIVE to COMPLETED after their end time.
  • PR #273: feat(backend): add cancel-event endpoint — allowed hosts to cancel their events, with proper state validation.
  • PR #289: fix(backend): my-events endpoints, canceled event visibility, and mutation freeze — fixed multiple bugs in the my-events flow including canceled event visibility for participants.
  • PR #316: feat(backend): add PATCH /events/:id/complete for host to close events — added the manual completion endpoint for open-ended events.
  • PR #324: feat(backend): auto-complete stale and max-duration events in background job — extended the background job to handle events that are stale or have exceeded their maximum allowed duration.
  • PR #330: feat(backend): public event discovery — implemented unauthenticated discovery of public events.
  • PR #333: feat(backend): add host_score, participant_score, final_score to GET me and privacy_level to event summaries — enriched profile and event summary response shapes.
  • PR #335: docs: update profile OpenAPI spec to match current API shape — corrected the OpenAPI spec to reflect the actual profile API structure.
  • PR #340: feat(frontend): implement silent token refresh using refresh token — implemented automatic token renewal on the web frontend to improve session continuity.
  • PR #342: feat(frontend): redirect authenticated users from landing page to discover — improved UX by redirecting already-logged-in users away from the marketing landing page.
  • PR #350: feat(frontend): add active tab to My Events and remove Invitations from nav — improved the My Events tab structure and cleaned up unused navigation items.
  • PR #351: feat(frontend): implement favorites page — built the favorites page on the web frontend, integrating with the backend favorites API.
  • PR #358: feat(frontend): replace profile image URL input with file upload — improved the profile editing experience by switching from a URL text field to a direct file picker.
  • PR #359: fix(frontend): remove tags filter from discover page — removed a filter option that was not backed by the current API.

Note: PR #303 and PR #238 were opened but subsequently closed in favor of revised approaches in later PRs.


Tests

Wrote 105 unique backend test functions across unit and integration test files, added through the backend feature PRs.

Middleware Unit Tests (backend/internal/adapter/out/httpapi/middleware_test.go) — added in PR #136, 5 tests:

  • TestRequireAuthMissingHeader, TestRequireAuthMalformedHeader, TestRequireAuthInvalidToken, TestRequireAuthValidToken, TestRequestLoggerPassesThrough

Event Service + Handler + Integration Tests — added across PR #154, PR #206, PR #272, PR #273, PR #289, PR #316, PR #324, PR #330, PR #333, covering:

  • Event creation success paths, open-ended events, duplicate title rejection
  • Full input validation suite (empty title, invalid privacy level, invalid location type, missing/invalid start time, end time before start, too many/empty/long tags, invalid gender, negative/zero capacity, invalid age constraint, missing constraint type)
  • Event detail retrieval, not-found handling, host context summary authorization
  • Participant listing with cursor-based pagination
  • Discover events: query param parsing, invalid lat/long/sort → 400, host score field, privacy level filter, distance sorting, search by title/description/tags, favorite state, cursor pagination stability
  • Join/leave/approve/reject flows with quota checks, invalid ID handling
  • Cancel event: success path, forbidden for non-host, conflict for non-active event, visibility in host and participant profiles
  • Complete event: host success (open-ended and in-progress), forbidden for non-host, conflict for already-terminal events

Join Request + Participation Service Unit Tests — added in PR #206, 8 tests:

  • TestCreatePendingJoinRequestDelegatesToRepo, TestCreatePendingJoinRequestPropagatesRepoError
  • TestApproveJoinRequestDelegatesToRepo, TestRejectJoinRequestDelegatesToRepo
  • TestCreateApprovedParticipationDelegatesToRepo, TestCreateApprovedParticipationPropagatesRepoError
  • TestLeaveParticipationDelegatesToRepo, TestCancelEventParticipationsDelegatesToRepo

Additional Information