Skip to content

Commit 18d922a

Browse files
committed
feat: Enhance user service with comprehensive error handling and Google OAuth profile validation
- Implemented findOrCreateGoogleUser function with improved validation and error handling. - Added findUserById, updateUserProfile, and deactivateUser functions to manage user accounts. - Introduced custom error classes for better error management. - Updated user model to include lastLoginAt and profile image handling. - Enhanced API tests for authentication requirements. - Documented error handling and validation improvements in a new markdown file. - Created configuration management for environment variables with validation. - Added session cleanup middleware to prevent infinite redirect loops and validate user sessions. - Developed validation middleware for MongoDB ObjectId and note data. - Implemented health check routes for application status monitoring. - Established custom error handling utilities for consistent error responses. - Created Joi validation schemas for user and note data. - Developed session utilities for managing expired sessions and user session statistics.
1 parent c96513f commit 18d922a

28 files changed

Lines changed: 2873 additions & 436 deletions

ERROR_HANDLING_IMPROVEMENTS.md

Lines changed: 222 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,222 @@
1+
# Error Handling and Validation Improvements
2+
3+
This document outlines the comprehensive error handling and validation improvements made to the Notes App.
4+
5+
## Overview of Improvements
6+
7+
### 1. Custom Error Classes (`server/utils/errors.js`)
8+
- **AppError**: Base error class with status codes and operational flags
9+
- **ValidationError**: For input validation failures
10+
- **NotFoundError**: For resource not found scenarios
11+
- **AuthenticationError**: For authentication failures
12+
- **AuthorizationError**: For access denied scenarios
13+
- **DatabaseError**: For database operation failures
14+
- **ExternalAPIError**: For external service failures
15+
16+
### 2. Validation Utilities (`server/utils/validation.js`)
17+
- String validation with length constraints
18+
- MongoDB ObjectId validation
19+
- Search term sanitization
20+
- Email format validation
21+
- Note data validation
22+
- Pagination parameter validation
23+
- Google profile validation
24+
25+
### 3. Improved Middleware
26+
27+
#### Error Handler (`server/middleware/errorHandler.js`)
28+
- Centralized error handling
29+
- Proper logging with Winston
30+
- Different responses for API vs web requests
31+
- Development vs production error details
32+
- Graceful error page rendering
33+
34+
#### Authentication (`server/middleware/checkAuth.js`)
35+
- Enhanced authentication checks
36+
- Support for optional authentication
37+
- Better error messages
38+
- Proper redirects with return URLs
39+
40+
#### Validation (`server/middleware/validation.js`)
41+
- ObjectId parameter validation
42+
- Note data validation
43+
- Search term validation and sanitization
44+
- Summarization request validation
45+
- Rate limiting for sensitive operations
46+
47+
### 4. Enhanced Models
48+
49+
#### User Model (`server/models/User.js`)
50+
- Comprehensive field validation
51+
- Email format validation
52+
- Profile image URL validation
53+
- Automatic timestamp updates
54+
- Virtual fields for computed properties
55+
- Index optimization
56+
57+
#### Notes Model (`server/models/Notes.js`)
58+
- Field length validation
59+
- Required field validation
60+
- Automatic timestamp updates
61+
- Text search indexing
62+
- Virtual fields for excerpts and word counts
63+
- Archive functionality
64+
65+
### 5. Improved Services
66+
67+
#### User Service (`server/services/userService.js`)
68+
- Comprehensive error handling
69+
- Better Google OAuth profile processing
70+
- User profile update functionality
71+
- Account deactivation
72+
- Proper validation integration
73+
74+
#### Note Service (`server/services/noteService.js`)
75+
- Full CRUD operations with validation
76+
- Advanced search functionality
77+
- Statistics generation
78+
- Pagination support
79+
- Archive support
80+
81+
### 6. Enhanced Controllers
82+
83+
#### Dashboard Controller (`server/controllers/dashboardController.js`)
84+
- AsyncHandler wrapper for automatic error catching
85+
- Comprehensive input validation
86+
- Better external API error handling
87+
- Session message management
88+
- Proper HTTP status codes
89+
90+
#### Main Controller (`server/controllers/mainController.js`)
91+
- Error handling consistency
92+
- Message display system
93+
- Proper redirects
94+
95+
### 7. Route Improvements
96+
97+
All routes now include:
98+
- Input validation middleware
99+
- Proper error handling
100+
- Rate limiting where appropriate
101+
- Authentication checks
102+
103+
### 8. Configuration Management (`server/config/config.js`)
104+
105+
- Environment variable validation
106+
- Default value management
107+
- Security settings configuration
108+
- Application settings centralization
109+
110+
### 9. Database Connection (`server/config/db.js`)
111+
112+
- Connection retry logic
113+
- Graceful shutdown handling
114+
- Health check functionality
115+
- Better error reporting
116+
117+
## Key Features
118+
119+
### Error Handling Strategy
120+
121+
1. **Input Validation**: All user inputs are validated at multiple levels
122+
2. **Database Errors**: Mongoose errors are properly caught and transformed
123+
3. **External API Errors**: Proper handling of third-party service failures
124+
4. **Authentication Errors**: Clear error messages for auth issues
125+
5. **Resource Not Found**: Proper 404 handling with user-friendly pages
126+
127+
### Security Improvements
128+
129+
1. **Rate Limiting**: Protection against abuse
130+
2. **Input Sanitization**: Prevention of injection attacks
131+
3. **Session Security**: Secure session configuration
132+
4. **Error Information**: Limited error details in production
133+
134+
### User Experience
135+
136+
1. **Friendly Error Messages**: Clear, actionable error messages
137+
2. **Form Persistence**: Form data is preserved on validation errors
138+
3. **Success Feedback**: Confirmation messages for successful operations
139+
4. **Loading States**: Better handling of async operations
140+
141+
### Developer Experience
142+
143+
1. **Consistent Error Handling**: Standardized error patterns
144+
2. **Comprehensive Logging**: Detailed error logs for debugging
145+
3. **Type Safety**: Better validation reduces runtime errors
146+
4. **Testing Support**: Error classes support unit testing
147+
148+
## Usage Examples
149+
150+
### Using Custom Errors
151+
152+
```javascript
153+
const { ValidationError, NotFoundError } = require('../utils/errors');
154+
155+
// Validation error with multiple messages
156+
throw new ValidationError('Validation failed', ['Title is required', 'Content too long']);
157+
158+
// Simple not found error
159+
throw new NotFoundError('Note');
160+
```
161+
162+
### Using AsyncHandler
163+
164+
```javascript
165+
const { asyncHandler } = require('../utils/errors');
166+
167+
exports.createNote = asyncHandler(async (req, res) => {
168+
// Any errors thrown here will be automatically caught
169+
const note = await noteService.createNote(req.body, req.user.id);
170+
res.json(note);
171+
});
172+
```
173+
174+
### Using Validation Middleware
175+
176+
```javascript
177+
const { validateNote, validateObjectId } = require('../middleware/validation');
178+
179+
router.post('/notes', validateNote, createNote);
180+
router.get('/notes/:id', validateObjectId(), getNote);
181+
```
182+
183+
## Configuration
184+
185+
### Required Environment Variables
186+
187+
- `MONGODB_URI`: Database connection string
188+
- `GOOGLE_CLIENT_ID`: Google OAuth client ID
189+
- `GOOGLE_CLIENT_SECRET`: Google OAuth client secret
190+
- `GOOGLE_CALLBACK_URL`: Google OAuth callback URL
191+
192+
### Optional Environment Variables
193+
194+
- `SESSION_SECRET`: Session encryption key
195+
- `HUGGING_FACE_API`: API key for summarization
196+
- `REDIS_URL`: Redis connection for sessions
197+
198+
## Testing
199+
200+
The error handling system includes:
201+
- Unit tests for validation functions
202+
- Integration tests for error middleware
203+
- API endpoint error testing
204+
- Database error simulation
205+
206+
## Monitoring
207+
208+
- Winston logging with structured logs
209+
- Error categorization and severity levels
210+
- Performance metrics for error rates
211+
- External API failure tracking
212+
213+
## Future Improvements
214+
215+
1. **Metrics Dashboard**: Real-time error monitoring
216+
2. **Alert System**: Notification for critical errors
217+
3. **Error Recovery**: Automatic retry mechanisms
218+
4. **Performance Optimization**: Caching for frequently accessed data
219+
5. **Advanced Rate Limiting**: IP-based and user-based limits
220+
6. **Audit Logging**: User action tracking
221+
7. **Content Security Policy**: Enhanced security headers
222+
8. **API Versioning**: Better API evolution support

0 commit comments

Comments
 (0)