📋 What Was Accomplished Backend Changes: - ✅ Enhanced API Endpoint: Updated GET /api/v1/events to accept optional date query parameter - ✅ Input Validation: Added YYYY-MM-DD format validation to PaginationQueryDto - ✅ Database Filtering: Implemented timezone-aware date filtering in EventsService - ✅ Controller Integration: Updated EventsController to pass date parameter to service Frontend Changes: - ✅ Date Picker Component: Created reusable DatePicker component following project design system - ✅ Gallery UI Enhancement: Integrated date picker into gallery page with clear labeling - ✅ State Management: Implemented reactive date state with automatic re-fetching - ✅ Clear Filter Functionality: Added "Clear Filter" button for easy reset - ✅ Enhanced UX: Improved empty states for filtered vs unfiltered views 🔍 Technical Implementation API Design: GET /api/v1/events?date=2025-08-02&limit=20&cursor=xxx Key Files Modified: - meteor-web-backend/src/events/dto/pagination-query.dto.ts - meteor-web-backend/src/events/events.service.ts - meteor-web-backend/src/events/events.controller.ts - meteor-frontend/src/components/ui/date-picker.tsx (new) - meteor-frontend/src/app/gallery/page.tsx - meteor-frontend/src/hooks/use-events.ts - meteor-frontend/src/services/events.ts ✅ All Acceptance Criteria Met 1. ✅ Backend API Enhancement: Accepts optional date parameter 2. ✅ Date Filtering Logic: Returns events for specific calendar date 3. ✅ Date Picker UI: Clean, accessible interface component 4. ✅ Automatic Re-fetching: Immediate data updates on date selection 5. ✅ Filtered Display: Correctly shows only events for selected date 6. ✅ Clear Filter: One-click reset to view all events 🧪 Quality Assurance - ✅ Backend Build: Successful compilation with no errors - ✅ Frontend Build: Successful Next.js build with no warnings - ✅ Linting: All ESLint checks pass - ✅ Functionality: Feature working as specified 🎉 Epic 2 Complete! With Story 2.9 completion, Epic 2: Commercialization & Core User Experience is now DONE! Epic 2 Achievements: - 🔐 Full-stack device status monitoring - 💳 Robust payment and subscription system - 🛡️ Subscription-based access control - 📊 Enhanced data browsing with detail pages - 📅 Date-based event filtering
3.2 KiB
3.2 KiB
Meteor Web Backend
A NestJS-based backend service for the Meteor application with user authentication.
Features
- User registration with email/password
- Password hashing using bcrypt
- PostgreSQL database with TypeORM
- Database migrations
- Input validation
- Transaction support
- Comprehensive unit and integration tests
Setup
Prerequisites
- Node.js (v18 or higher)
- PostgreSQL database
- npm or yarn
Installation
npm install
Environment Variables
Create a .env file based on .env.example:
DATABASE_URL=postgresql://user:password@localhost:5432/meteor_dev
BCRYPT_SALT_ROUNDS=10
Database Setup
Run migrations to set up the database schema:
npm run migrate:up
API Endpoints
POST /api/v1/auth/register-email
Register a new user with email and password.
Request Body:
{
"email": "user@example.com",
"password": "Password123",
"displayName": "John Doe"
}
Response:
{
"message": "User registered successfully",
"userId": "uuid-string"
}
Validation Rules:
- Email must be a valid email format
- Password must be at least 8 characters long
- Password must contain at least one lowercase letter, one uppercase letter, and one number
- Display name is required
Error Responses:
400 Bad Request- Invalid input data409 Conflict- Email already registered500 Internal Server Error- Server error
Running the Application
Development
npm run start:dev
Production
npm run build
npm run start:prod
Testing
Unit Tests
npm test
Integration Tests
npm run test:e2e
Test Coverage
npm run test:cov
Database Migrations
Create New Migration
npm run migrate:create migration-name
Run Migrations
npm run migrate:up
Rollback Migrations
npm run migrate:down
Project Structure
src/
├── auth/ # Authentication module
│ ├── dto/ # Data transfer objects
│ ├── auth.controller.ts
│ ├── auth.service.ts
│ └── auth.module.ts
├── entities/ # TypeORM entities
│ ├── user-profile.entity.ts
│ └── user-identity.entity.ts
├── app.module.ts # Main application module
└── main.ts # Application entry point
migrations/ # Database migrations
test/ # Integration tests
Database Schema
user_profiles
id(UUID, Primary Key)display_name(VARCHAR, nullable)avatar_url(TEXT, nullable)created_at(TIMESTAMP)updated_at(TIMESTAMP)
user_identities
id(UUID, Primary Key)user_profile_id(UUID, Foreign Key)provider(VARCHAR) - e.g., 'email'provider_id(VARCHAR) - e.g., email addressemail(VARCHAR, nullable, unique for email provider)password_hash(VARCHAR, nullable)created_at(TIMESTAMP)updated_at(TIMESTAMP)
Security Features
- Passwords are hashed using bcrypt with configurable salt rounds
- Email uniqueness validation
- Input sanitization and validation
- Database transactions for data consistency
- No sensitive data exposed in API responses