Commit Graph

38 Commits

Author SHA1 Message Date
f73fc31a0e feat: implement appointment rescheduling and cancellation features with email notifications 2025-12-05 18:04:11 +00:00
4017ceac51 feat: update CORS and CSRF trusted origins for improved security 2025-12-05 12:52:52 +00:00
6311a737eb feat: update timezone handling in api_root to use current timezone dynamically 2025-12-05 10:43:20 +00:00
eb54d1784c feat: enhance appointment scheduling with user timezone support and email reminders 2025-12-05 10:34:19 +00:00
82af34c2e4 feat: add start and end meeting endpoints for scheduled appointments 2025-12-04 10:57:19 +00:00
99f9dac965 Refactor code structure for improved readability and maintainability 2025-12-02 19:32:51 +00:00
cd5ad1d753 feat: add contact form functionality with admin management
Add a complete contact form system with the following changes:
- Create ContactMessage model to store form submissions with tracking fields (is_read, is_responded)
- Implement ContactMessage admin interface with custom actions, filters, and bulk operations
- Add contact endpoint documentation to API root view
- Update email configuration to use admin@attunehearttherapy.com as sender address

This enables users to submit contact inquiries and allows administrators to track and manage these messages efficiently through the Django admin panel.
2025-11-28 15:52:06 +00:00
027d216fcb security: remove localhost origins from CORS allowed list
Remove local development URLs (localhost:3000 and 127.0.0.1:3000) from
CORS_ALLOWED_ORIGINS configuration. This restricts CORS to only allow
requests from the production domain (attunehearttherapy.com), improving
security by preventing unauthorized cross-origin requests from
development environments.
2025-11-28 10:50:43 +00:00
bc001074b1 style: add blank lines for improved code readability
Add extra blank lines in booking_system and meetings views to improve
code structure and visual separation between logical sections. This
enhances code readability without affecting functionality.

Changes:
- booking_system/views.py: added blank line after availability_system section
- meetings/views.py: added blank line after get_queryset method
2025-11-27 19:54:03 +00:00
774ac584b4 refactor: convert user appointment endpoints from POST to GET
Changes:
- Refactored UserAppointmentsView and UserAppointmentStatsView to use GET instead of POST
- Removed email parameter
2025-11-27 19:51:55 +00:00
98b9274e03 docs: update API documentation with example data and user appointments endpoint
- Replace generic placeholder data with specific examples in API root documentation
- Update example email from 'user@example.com' to 'saanii929@gmail'
- Update example names from 'John Doe' to 'Saani Iddi'
- Update example phone number to '+233552732025'
- Add POST method support to user_appointments endpoint
- Add request_fields and example_request to user_appointments documentation

Note: Consider using generic placeholder data instead of real personal information in API documentation examples.
2025-11-27 18:43:51 +00:00
a7d451702f docs(api): refactor appointments endpoint documentation structure
Enhanced the API root documentation for the appointments system with improved formatting and updated description to include "flexible availability" feature. Restructured the endpoint documentation for better readability and maintainability while preserving all endpoint information including Jitsi meeting integration details.
2025-11-26 19:30:26 +00:00
ce3b0b77f5 feat(api): change user appointment stats endpoint to POST method
Changed the user_appointment_stats endpoint from GET to POST method
and added email as a required field. This change allows for more
flexible querying of appointment statistics by requiring user email
in the request body rather than URL parameters.

BREAKING CHANGE: The /api/meetings/user/appointments/stats/ endpoint
now accepts POST requests instead of GET and requires an email field
in the request body.
2025-11-26 16:20:40 +00:00
4f07d854e1 config: add CSRF trusted origins for production domains
Add CSRF_TRUSTED_ORIGINS setting to whitelist the production domains
(attunehearttherapy.com and its api subdomain) for CSRF verification.
This ensures secure cross-origin POST requests from the frontend.

Also add documentation comment for CORS configuration section.
2025-11-25 18:27:57 +00:00
d0dcfccb7f feat(config): improve security and add WhiteNoise static file serving
**Security Improvements:**
- Fix DEBUG setting to properly parse boolean from environment variable
- Remove hardcoded SMTP password fallback, rely solely on env var
- Update Celery to use REDIS_URL environment variable instead of hardcoded localhost

**Static File Serving:**
- Add WhiteNoise middleware for production-grade static file serving
- Configure CompressedManifestStaticFilesStorage for optimized delivery

**Configuration Updates:**
- Enable CORS credentials support
- Remove duplicate CORS_ALLOWED_ORIGINS configuration
- Update API documentation title from "Blog API" to "Attune Heart Therapy API"
- Clean up code formatting and remove unnecessary comments

These changes make the application more secure by eliminating hardcoded
credentials and more deployment-ready by properly handling environment
variables and serving static files efficiently in production.
2025-11-25 18:14:40 +00:00
d1a8f4403a fix(settings): remove line break in CORS_ALLOWED_ORIGINS string
Consolidate CORS_ALLOWED_ORIGINS default value onto a single line
to fix formatting issue. Removes unnecessary line break and trailing
whitespace that was splitting the URL string across multiple lines.
2025-11-25 17:41:43 +00:00
7ee3663ffa config: add production domain to CORS allowed origins
Add attunehearttherapy.com to the CORS_ALLOWED_ORIGINS setting to enable cross-origin requests from the production domain. This allows the frontend application hosted at the production URL to communicate with the backend API.
2025-11-25 17:37:06 +00:00
16c4afdce5 config: make ALLOWED_HOSTS configurable via environment variable
Change ALLOWED_HOSTS from a hardcoded list to be read from environment
variable with comma-separated values support. Maintains '*' as default
fallback for backward compatibility. This allows more restrictive host
configuration in production environments while improving security posture.
2025-11-24 13:36:11 +00:00
1ffbfa5692 feat: add API documentation with drf-spectacular and refactor views
- Install and configure drf-spectacular for OpenAPI/Swagger documentation
- Add Swagger UI endpoints at /api/schema/ and /api/docs/
- Configure SPECTACULAR_SETTINGS with API metadata
- Refactor meetings views from function-based to class-based views
  (ScheduleAppointmentView, RejectAppointmentView, AvailableDatesView,
  UserAppointmentsView, AppointmentStatsView, UserAppointmentStatsView)
- Update URL patterns to use new class-based views
- Simplify ALLOWED_HOSTS configuration to accept all hosts

This improves API discoverability through interactive documentation
and modernizes the codebase by using class-based views for better
code organization and reusability.
2025-11-24 13:29:07 +00:00
9aef796fc7 feat: add user appointment stats endpoint to API root documentation
Add documentation for the new user-specific appointment statistics endpoint
to the API root view. This endpoint provides authenticated users with their
appointment analytics including total requests, pending reviews, scheduled,
rejected, and completed appointments along with completion rate.

The endpoint is available at /api/meetings/user/appointments/stats/ and
requires authentication via GET request.
2025-11-24 11:55:42 +00:00
b7a4e73d93 refactor(config): use dj-database-url for flexible database configuration
- Add dj-database-url package for parsing DATABASE_URL
- Replace hardcoded PostgreSQL config with DATABASE_URL environment variable
- Add connection pooling with conn_max_age and health checks
- Fallback to SQLite for local development when DATABASE_URL is not set
- Remove obsolete production config comments
- Update requirements.txt with new dependency

This change improves deployment flexibility by supporting standard DATABASE_URL format commonly used in cloud platforms (Heroku, Railway, etc.) while maintaining backward compatibility with local development using SQLite.
2025-11-24 00:01:30 +00:00
0a5a5fa800 chore: switch database backend from SQLite to PostgreSQL
Replace SQLite database configuration with PostgreSQL to improve
scalability and production readiness. PostgreSQL configuration uses
environment variables (POSTGRES_DB, POSTGRES_USER, POSTGRES_PASSWORD,
POSTGRES_HOST, POSTGRES_PORT) for flexible deployment across different
environments.
2025-11-23 23:47:53 +00:00
d736c1681c # Commit Message
```
refactor: update settings and Docker config for production

- Configure ALLOWED_HOSTS and CORS from environment variables for better security
- Switch default database from PostgreSQL to SQLite3 (PostgreSQL config commented)
- Simplify DEBUG environment variable handling
- Update Dockerfile to use Python 3.11 and gunicorn for production
- Add static file collection in Docker build process
- Add user appointment statistics endpoint (user_apointment_stats)
- Add .dockerignore to exclude unnecessary files from build

These changes improve production readiness by making critical settings
configurable via environment variables and using production-grade WSGI
server (gunicorn) instead of Django development server.
2025-11-23 23:06:17 +00:00
0a02f1db14 feat: migrate to UV package manager and enhance production config
- Replace pip with UV for faster dependency installation
- Switch base image from python:3.11-slim to debian:bookworm-slim
- Add SECURE_PROXY_SSL_HEADER for production SSL proxy support
- Optimize Docker layer caching by copying dependency files first
- Move database migration to build time for faster container startup
- Enhance Gunicorn logging with access and error log streams
- Update dependency management from requirements.txt to pyproject.toml

These changes improve build performance, production security, and
container startup time while modernizing the dependency management
workflow.
2025-11-23 18:36:23 +00:00
98962caafb chore: configure for local development environment
- Set ALLOWED_HOSTS to accept all hosts for easier local testing
- Update Docker port from 8080 to 8000 (Django default)
- Adjust Gunicorn binding to match new port configuration

This simplifies local development setup by using standard Django
conventions and removing host restrictions. The previous specific
host configuration can be restored for production deployment.
2025-11-23 18:26:44 +00:00
9a84e253f1 chore(config): update ALLOWED_HOSTS with new sslip.io domain
- Replace old sslip.io subdomain with new one (r0g84wkoc4cwoo0gckss88ow)
- Remove redundant IP address entries (72.61.138.80, 127.0.0.1)
- Keep localhost for local development

This updates the Django allowed hosts configuration to use the new
SSL.io subdomain while simplifying the host list by removing
redundant entries already covered by localhost.
2025-11-23 17:11:35 +00:00
265dd9b57a chore(database): switch from SQLite to PostgreSQL
Replace SQLite database configuration with PostgreSQL configuration
that uses environment variables for connection settings. This enables
production-ready database deployment with proper credentials management
through environment variables (POSTGRES_DB, POSTGRES_USER,
POSTGRES_PASSWORD, POSTGRES_HOST, POSTGRES_PORT).
2025-11-23 15:41:52 +00:00
22ecb9a611 config: switch to SQLite database and change application port to 8080
- Replace PostgreSQL with SQLite as default database backend
- Comment out PostgreSQL configuration for potential future use
- Update Docker exposed port from 8000 to 8080
- Update Gunicorn bind address to match new port

This simplifies the deployment setup by removing the PostgreSQL
dependency and aligns the application port with common alternatives
to port 8000.
2025-11-23 15:40:46 +00:00
4fdc7c35ee feat: add user management endpoints and update appointment model
Add comprehensive API documentation for user management endpoints including profile updates, user listing, and admin user management features. Update appointment model to include additional status options (completed, cancelled) and add max_length constraint to email field. Change appointment creation endpoint to require user authentication instead of being public.

Changes:
- Add API docs for update_profile, get_profile, all-users endpoints
- Add API docs for activate-deactivate-user and delete-user admin endpoints
- Update appointment creation to require authentication
- Add 'completed' and 'cancelled' status options to Appointment model
- Add max_length constraint to EncryptedEmailField
- Regenerate initial migration with updated model definitions
2025-11-23 13:55:04 +00:00
4acd78988e refactor(api): replace hardcoded URLs with dynamic URL generation
Replace hardcoded localhost URLs (http://127.0.0.1:8000) in API root
endpoint documentation with request.build_absolute_uri() calls. This
makes the API documentation URLs environment-agnostic and ensures they
reflect the actual domain/host being used to access the API, improving
portability across development, staging, and production environments.
2025-11-23 12:20:05 +00:00
a6ae78644d config: switch database backend from SQLite to PostgreSQL
Replace SQLite with PostgreSQL as the default database backend.
Database connection settings are now configured via environment
variables (POSTGRES_DB, POSTGRES_USER, POSTGRES_PASSWORD,
POSTGRES_HOST, POSTGRES_PORT) for better scalability and
production readiness.
2025-11-23 00:36:34 +00:00
1fc91d5949 feat: enable meetings app and simplify development configuration
- Enable meetings app in INSTALLED_APPS and add URL routing
- Switch from PostgreSQL to SQLite for default database configuration
- Remove meetings directory from .gitignore
- Move API root endpoint from users app to main URL configuration
- Remove HIPAA-specific email and compliance settings (EMAIL_ENCRYPTION_KEY, HIPAA_EMAIL_CONFIG, BAA_VERIFICATION)
- Add SITE_NAME and ENCRYPTION_KEY environment variables
- Regenerate initial user migrations

These changes simplify the development setup by using SQLite as the default database and removing complex compliance configurations while enabling the core meetings functionality.
2025-11-23 00:19:26 +00:00
6ea70ee669 $$# 2025-11-22 17:26:52 +00:00
7d22911646 #$$ 2025-11-22 16:44:53 +00:00
bc881c84f9 $ 2025-11-22 16:07:11 +00:00
f06b5120e9 feat: add HIPAA-compliant email and OTP authentication system
Add comprehensive HIPAA compliance features and OTP-based authentication:

- Configure HIPAA email settings with AES-256 encryption standard
- Add secure portal URL and BAA verification configuration
- Implement OTP verification for user registration and password reset
- Add user model fields for email verification and password reset OTPs
- Configure templates directory in Django settings
- Add authentication flow endpoints with detailed documentation
- Update dependencies to support new security features
- Reorganize .gitignore for better structure

These changes ensure HIPAA compliance for healthcare data handling
with 6-year audit retention, secure email communications, and
multi-factor authentication capabilities.
2025-11-22 02:19:44 +00:00
c2015d5ad0 Implement user model with custom user manager and update admin serializers 2025-11-13 00:52:34 +00:00
b966bfd190 Add initial Django project structure with user authentication and profile management 2025-11-12 11:51:27 +00:00