Controller Documentation
Controllers handle HTTP requests and coordinate between views and services. All controllers in Duit follow Spring MVC patterns.Controller Organization
Controllers are organized by functional area:Public Access Controllers
PublicController
Location:es.duit.app.controller.PublicController
Request Mapping: Root level (/)
Responsibilities:
- Landing page
- Login/logout pages
- User registration
- Static pages (terms, privacy, help)
- Redirects authenticated users from login page
- Handles registration form validation
- Preserves form data on validation errors
- Displays flash messages for success/error states
public/index- Landing pagepublic/login- Login formpublic/signup- Registration formpublic/terms- Terms and conditionspublic/privacy- Privacy policypublic/help- Help page
DashboardController
Location:es.duit.app.controller.DashboardController
Request Mapping: /home
Responsibilities:
- Main dashboard page for authenticated users
dashboard/home- Main dashboard
User Management Controllers
ProfileController
Location:es.duit.app.controller.ProfileController
Request Mapping: /profile
Responsibilities:
- User profile viewing and editing
- Professional profile management
- Account deletion (deactivation)
- Separate forms for user and professional profiles
- Validation groups for different profile types
- Secure account deletion with logout
profile/profileUser- User profile editprofile/profileProfessional- Professional profile edit
EditProfileDTO with validation groups
Service Request Controllers
RequestFormController
Location:es.duit.app.controller.RequestFormController
Request Mapping: /requests
Responsibilities:
- Display request creation/editing form
- Handle form submission
- Manage address selection (habitual vs new)
- Single form for both create and edit operations
- Edit mode detected via
editquery parameter - Address options: use habitual or specify new
- Deadline date handling
- Category selection
- Publish immediately or save as draft
jobs/request- Request form
- GET
/requests/request- Show empty form (create) - GET
/requests/request?edit={id}- Show form with data (edit) - POST
/requests/request- Process submission
MyRequestsController
Location:es.duit.app.controller.MyRequestsController
Request Mapping: /requests
Responsibilities:
- Display user’s service requests
- Manage request states (publish, unpublish, cancel, reactivate, delete)
- View applications for requests
- Accept/reject applications
- Manage jobs as client (complete, pause, cancel)
- Lists all user’s requests with their status
- Shows active jobs as client
- Application management
- Job state transitions
jobs/myrequest- List of user’s requestsjobs/applications- Applications for a specific request
- DRAFT → PUBLISHED → (COMPLETED | CANCELLED)
- Cancelled requests can be reactivated to DRAFT
Professional Controllers
ProfessionalController
Location:es.duit.app.controller.ProfessionalController
Request Mapping: /professional
Responsibilities:
- Search for available service requests
- Submit applications to requests
- View own applications
- Manage application states
- Advanced search with filters (text, category, postal code)
- Application submission with price and message
- Edit pending applications
- Withdraw pending applications
- View active jobs as professional
jobs/search- Search page with filtersjobs/myaplication- Professional’s applications and jobs
textoBusqueda- Search in title/descriptioncategoriaId- Filter by categorycodigoPostal- Filter by postal code
PostulacionesController
Location:es.duit.app.controller.PostulacionesController
Request Mapping: /jobs/applications
Responsibilities:
- View applications for a request (client view)
- Accept/reject applications
- Manage job lifecycle as professional
- Application acceptance creates a job
- Job state management (start, pause, resume, complete, cancel)
- Redirect parameter support for flexible navigation
- CREATED → IN_PROGRESS ↔ PAUSED → COMPLETED
- CANCELLED (can be set from any state)
jobs/applications- View applications
Rating Controllers
RatingsController
Location:es.duit.app.controller.RatingsController
Request Mapping: /ratings
Responsibilities:
- Submit ratings for completed jobs
- Score validation (1-5)
- Optional comment
- Automatic rating type detection (client rates professional or vice versa)
- Ratings are displayed in
shared/ratings - Submission redirects to ratings page
Shared Controllers
SharedController
Location:es.duit.app.controller.SharedController
Request Mapping: /shared
Responsibilities:
- Display job history
- Display ratings page (pending and completed)
- History shows jobs as both client and professional
- Ratings page shows pending ratings and completed ratings
- Professional profile includes rating statistics
shared/history- Job historyshared/ratings- Ratings overview
Administration Controllers
AdminController
Location:es.duit.app.controller.AdminController
Request Mapping: /admin
Responsibilities:
- User management page (view only, no CRUD)
- Statistics dashboard page
admin/users- User listadmin/stats- Statistics dashboard
CategoryController
Location:es.duit.app.controller.CategoryController
Request Mapping: /admin
Responsibilities:
- Complete CRUD operations for categories
- Toggle category active/inactive status
- List all categories
- Create new category
- Edit existing category
- Delete category
- Toggle active status
admin/categories- Category management
- GET
/admin/categories- List view - POST
/admin/categories- Create/update - GET
/admin/edit/{id}- Load for editing - GET
/admin/delete/{id}- Delete - GET
/admin/toggle/{id}- Toggle status
Error Handling
CustomErrorController
Location:es.duit.app.controller.CustomErrorController
Implements: Spring Boot’s ErrorController
Responsibilities:
- Handle HTTP errors (403, 404, 500)
- Display custom error pages
error/403- Forbiddenerror/404- Not Founderror/500- Server Error
Global Controller Advice
UserControllerAdvice
Location:es.duit.app.controller.UserControllerAdvice
Annotation: @ControllerAdvice
Responsibilities:
- Add authenticated user to all views automatically
usuario- Current authenticated user (or null if not authenticated)
Common Patterns
Flash Attributes
Controllers use flash attributes for temporary messages:Model Attributes
@ModelAttribute methods initialize form objects:
Validation
Validation uses@Valid with BindingResult:
Authentication
Authenticated user is obtained viaAuthentication parameter:
Security Configuration
Access control is configured in Spring Security:/admin/**- Requires ADMIN role/professional/**- Requires PROFESSIONAL role/user/**,/shared/**,/profile/**- Requires authentication/,/login,/signup,/error/**- Public access
Response Types
Controllers primarily return:- View names (
String) - For page rendering - Redirects (
redirect:/path) - After form submissions - Flash attributes - For temporary messages
