-
Notifications
You must be signed in to change notification settings - Fork 42
feat: Mentee Application Workflow #473
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
dricazenck
merged 28 commits into
Women-Coding-Community:main
from
dricazenck:registration_step7
Jan 19, 2026
Merged
feat: Mentee Application Workflow #473
dricazenck
merged 28 commits into
Women-Coding-Community:main
from
dricazenck:registration_step7
Jan 19, 2026
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
1. V17 - Year Tracking ✅
- Added cycle_year column to mentee_mentorship_types and mentor_mentorship_types
- Updated primary keys to include year: (mentee_id, mentorship_type, cycle_year)
- Migrated data from mentee_previous_mentorship_types table
- Dropped redundant mentee_previous_mentorship_types table
- Added indexes for performance
2. V18 - Mentorship Cycles ✅
- Created mentorship_cycles table with cycle management
- Added cycle_status enum (draft, open, closed, in_progress, completed, cancelled)
- Seeded 2026 cycles (1 LONG_TERM, 7 AD_HOC)
- Includes triggers for updated_at timestamp
3. V19 - Mentee Applications ✅
- Created mentee_applications table for workflow tracking
- Added application_status enum with 8 states
- Priority ranking system (1-5)
- Unique constraints and indexes
- Auto-logging triggers for status changes
4. V20 - Mentorship Matches ✅
- Created mentorship_matches table for confirmed pairings
- Added match_status enum (active, completed, cancelled, on_hold)
- Mentor capacity enforcement trigger
- Session tracking fields
5. V21 - Application History ✅
- Created application_status_history audit trail table
- Auto-logging trigger for status changes
- Helper functions and views for timeline queries
1. CycleStatus.java ✅
- Enum with 6 states: DRAFT, OPEN, CLOSED, IN_PROGRESS, COMPLETED, CANCELLED
- fromValue() method for database conversion
- Matches cycle_status enum in database
2. MentorshipCycleEntity.java ✅
- Complete domain entity for mentorship cycles
- Helper methods: isRegistrationOpen(), isActive()
- Backward compatibility: toMentorshipCycle() conversion
- Fields: cycleId, cycleYear, mentorshipType, dates, status, maxMenteesPerMentor
3. ApplicationStatus.java ✅
- Enum with 8 workflow states:
- PENDING → MENTOR_REVIEWING → MENTOR_ACCEPTED → MATCHED
- Alternative paths: MENTOR_DECLINED, DROPPED, REJECTED, EXPIRED
- Helper methods: isTerminal(), isPendingMentorAction(), isMentorAccepted()
- Matches application_status enum in database
4. MenteeApplication.java ✅
- Complete domain entity for mentee applications
- Priority ranking support (1-5)
- Validation: @min(1), @max(5) on priorityOrder
- Helper methods: isReviewed(), isMatched(), getDaysSinceApplied(), shouldExpire()
- Fields: applicationId, menteeId, mentorId, cycleId, priorityOrder, status, messages, timestamps
5. MatchStatus.java ✅
- Enum with 4 states: ACTIVE, COMPLETED, CANCELLED, ON_HOLD
- Helper methods: isTerminal(), isOngoing()
- Matches match_status enum in database
6. MentorshipMatch.java ✅
- Complete domain entity for confirmed matches
- Session tracking: totalSessions, incrementSessionCount()
- Lifecycle management: cancel(), complete() methods
- Helper methods: getDurationInDays(), isPastExpectedEndDate(), getDaysRemaining()
- Fields: matchId, mentorId, menteeId, cycleId, applicationId, dates, status, session info
Features Implemented
Enums with Database Mapping:
- All enums have fromValue() for database string conversion
- All enums override toString() to return database value
Validation:
- Jakarta Bean Validation annotations (@NotNull, @min, @max)
- Business logic validation in helper methods
Helper Methods:
- Status checking methods (isActive, isMatched, isTerminal)
- Date calculations (getDaysSinceApplied, getDaysRemaining, getDurationInDays)
- Lifecycle management (cancel, complete, incrementSessionCount)
Database Integration: - Spring JdbcTemplate for all queries - Prepared statements (SQL injection safe) - ResultSet mapping with proper type conversion - Timezone-aware timestamp conversion Query Optimization: - Indexed column usage (matches database indexes) - Efficient WHERE clauses - ORDER BY for sorted results - LIMIT for single result queries Enum Handling: - PostgreSQL enum casting (e.g., ?::application_status) - fromValue() methods for database → Java conversion - Type-safe enum usage throughout Null Safety: - Optional return types for single results - Null checks for nullable columns - Proper handling of NULL timestamps/dates Compilation & Testing Status ✅ All repository code compiles successfully ✅ All 526 unit tests passing ✅ No compilation warnings or errors ✅ Ready for integration with service layer
All service layer components implemented and tested
1. Created MenteeApplicationService (src/main/java/com/wcc/platform/service/MenteeApplicationService.java)
- submitApplications() - Submit applications to multiple mentors with priority ranking (1-5)
- acceptApplication() - Mentor accepts application with capacity validation
- declineApplication() - Mentor declines and auto-notifies next priority mentor
- withdrawApplication() - Mentee withdraws application
- Query methods for retrieving applications by mentee, mentor, or status
- Helper methods for validation (max 5 mentors, no duplicates, capacity checking)
2. Created MentorshipMatchingService (src/main/java/com/wcc/platform/service/MentorshipMatchingService.java)
- confirmMatch() - Confirm match from accepted application (admin/team approval)
- completeMatch() - Mark match as completed
- cancelMatch() - Cancel match with reason tracking
- incrementSessionCount() - Track session participation
- Query methods for active matches
- Auto-rejection of other pending applications when match is confirmed
3. Updated MenteeService to integrate with cycles
- Added create(Mentee, Integer cycleYear) method
- Updated validateMentorshipCycle() to use MentorshipCycleRepository
- Added validateNotAlreadyRegisteredForCycle() validation
- Maintained backward compatibility with deprecated create(Mentee) method
4. Updated MenteeRepository interface and implementation
- Added create(Mentee, Integer cycleYear) method
- Added existsByMenteeYearType() method for duplicate checking
- PostgresMenteeRepository implements both methods with JDBC
5. Created Custom Exceptions
- MentorCapacityExceededException - Thrown when mentor reaches max capacity
- ApplicationNotFoundException - Thrown when application ID not found
- DuplicateApplicationException - Thrown when mentee tries to apply twice to same mentor
6. Code Quality
- All unit tests passing (526 tests)
- Compilation successful
- PMD violations reduced from 18 to 13 (all remaining are stylistic: LongVariable, TooManyMethods, TooManyFields)
- Fixed critical PMD issues:
- Added @OverRide annotations
- Removed unused imports
- Extracted magic number (5) to constant MAX_MENTOR_APPLICATIONS
- Made loop variables final in enum classes
Updated Endpoint:
- POST /api/platform/v1/mentees?cycleYear={year} - Create mentee with optional cycle year parameter
Mentee Application Endpoints (3 new):
- POST /api/platform/v1/mentees/{menteeId}/applications - Submit applications to up to 5 mentors with priority
- GET /api/platform/v1/mentees/{menteeId}/applications?cycleId={id} - Get mentee's applications for a cycle
- PATCH /api/platform/v1/mentees/applications/{appId}/withdraw - Mentee withdraws application
Mentor Application Management Endpoints (3 new):
- GET /api/platform/v1/mentors/{mentorId}/applications?status={status} - Get applications received by mentor
- PATCH /api/platform/v1/mentors/applications/{appId}/accept - Mentor accepts application
- PATCH /api/platform/v1/mentors/applications/{appId}/decline - Mentor declines application
Admin/Reporting Endpoint (1 new):
- GET /api/platform/v1/applications?status={status} - Get all applications by status
3. Created AdminMentorshipController (new file) with 10 admin endpoints:
Match Management (5 endpoints):
- POST /api/platform/v1/admin/mentorship/matches/confirm/{appId} - Admin confirms match from accepted application
- GET /api/platform/v1/admin/mentorship/matches?cycleId={id} - Get all matches for a cycle
- PATCH /api/platform/v1/admin/mentorship/matches/{matchId}/complete - Complete a match
- PATCH /api/platform/v1/admin/mentorship/matches/{matchId}/cancel - Cancel a match with reason
- PATCH /api/platform/v1/admin/mentorship/matches/{matchId}/increment-session - Track session participation
Cycle Management (5 endpoints):
- GET /api/platform/v1/admin/mentorship/cycles/current - Get currently open cycle
- GET /api/platform/v1/admin/mentorship/cycles?status={status} - Get cycles by status
- GET /api/platform/v1/admin/mentorship/cycles/{cycleId} - Get specific cycle by ID
- GET /api/platform/v1/admin/mentorship/cycles/all - Get all cycles
- Fix PMD Checks - Adjust package structure - Add integration test
Create registration to the list of mentors selected by the mentee
create and update mentee application for a cycle integration test and update/create cycle
…ate operations - Introduced bean validation for `Mentee` and `Mentor` in `PostgresMenteeRepository` and `PostgresMentorRepository` - Removed redundant validation annotations from domain objects - Ensured consistency and integrity through `Validator` in `create` and `update` methods
…n, and streamlined application creation - Added logic to filter duplicate mentor applications for a mentee within a cycle. - Introduced constant `MAX_MENTORS` to centralize mentorship limits. - Updated `MenteeRegistration` to include a method for managing filtered applications. - Replaced `@Max` and `@Min` validation annotations with `@Size` for application list validation. - Improved validation flow for mentorship application limits. - Refactored application creation for clarity and consistency.
…gistrationLimitException - Updated exception class name for conciseness and clarity. - Adjusted all references in service, tests, and configurations accordingly.
…endpoint
- Deleted unused `submitApplications` method and supporting private helpers from `MenteeWorkflowService`.
- Removed `/mentees/{menteeId}/applications` POST API from `MentorshipApplicationController`.
- Cleaned up related imports and comments for clarity.
…use consistent column names and cycle_status casting
- Introduced comprehensive integration tests for `PostgresMenteeApplicationRepository` and `PostgresMenteeRepository`. - Validated create, update, find, and count methods for mentee and application entities. - Ensured proper cleanup and data isolation with setup/teardown logic for tests. - Added validation test cases for invalid mentee and application scenarios.
…tibility issues - Marked `MentorshipServiceDb2IntegrationTest`, `PostgresDb2PageRepositoryIntegrationTest`, and `PostgresDb2MentorRepositoryIntegrationTest` as disabled. - Added reasons for temporary disablement to annotations for clarity.
- Introduced comprehensive integration tests for `PostgresMenteeApplicationRepository` and `PostgresMenteeRepository`. - Validated create, update, find, and count methods for mentee and application entities. - Ensured proper cleanup and data isolation with setup/teardown logic for tests. - Added validation test cases for invalid mentee and application scenarios.
- Renamed `MentorshipMatchRepositoryIntegrationTest` to `PostgresMentorshipMatchRepositoryIntegrationTest`. - Adjusted package structure and imports for alignment with PostgreSQL-specific repository tests.
…s object - Updated `mentee` JSON payload to include a nested structure for better clarity. - Added `applications` object with mentor priority orders and cycle year attributes. - Improved consistency in payload for long-term mentorship scenarios.
…rvice logic - Introduced `withMentee(Mentee mentee)` method in `MenteeRegistration` to facilitate updates during persistence. - Enhanced `saveRegistration` logic in `MenteeService` to handle filtered registrations and streamline mentee/application creation. - Updated integration tests to align with refined registration workflows and member type assignments.
…GlobalExceptionHandler - Switched from `IllegalStateException` to `ApplicationMenteeWorkflowException` for better error specificity. - Added `ApplicationMenteeWorkflowException` handling in `GlobalExceptionHandler`. - Updated mentorship cycle year in script and removed unused code in tests.
- introduce custom exceptions in MentorshipMatchingService - Added support for `create`, `update`, and `deleteById` methods in `PostgresMentorshipMatchRepository` to enable CRUD operations on mentorship matches. - Integrated `MentorshipCycleClosedException` into `MentorshipMatchingService` for handling closed cycles during match confirmation. - Refactored SQL queries with proper status casting and placeholders for maintainability.
… email - Updated `PostgresMenteeRepository` and `PostgresMentorRepository` to check for existing members by email before creating new entries and to reuse their IDs. - Enhanced `MenteeService` and `MentorshipService` with logic for handling existing members during mentee/mentor creation. - Added integration and unit tests to validate scenarios for reusing members with matching emails. - Introduced security configuration in the application Docker setup.
- Replaced PostgreSQL ENUM `cycle_status` with a `cycle_statuses` reference table for enhanced flexibility and consistency. - Refactored SQL scripts and queries to support the new structure. - Updated `CycleStatus` enum to map to integer IDs instead of string values. - Adjusted repository and entity logic to accommodate the new mapping. - Verified backward compatibility by renaming the new column and recreating relevant indexes.
…into registration_step7 # Conflicts: # src/main/java/com/wcc/platform/controller/MemberController.java # src/main/java/com/wcc/platform/domain/platform/mentorship/Mentee.java # src/main/java/com/wcc/platform/domain/platform/mentorship/Mentor.java
womencodingcommunity
approved these changes
Jan 19, 2026
Contributor
womencodingcommunity
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
![]()
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Description
ValidatorincreateandupdatemethodsRelated Issue
Closes #76 #77
Change Type
Screenshots
Pull request checklist
Please check if your PR fulfills the following requirements: