You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
docuseal/docs/prd/technical-constraints-and-i...

129 lines
5.7 KiB

# Technical Constraints and Integration
## Existing Technology Stack
**Languages**: Ruby 3.4.2, JavaScript, Vue.js 3, HTML, CSS
**Frameworks**: Rails 7.x, Shakapacker, Vue 3.3.2, TailwindCSS 3.4.17, DaisyUI 3.9.4
**Database**: SQLite (development), PostgreSQL/MySQL (production)
**Infrastructure**: Docker, Sidekiq for background jobs, Puma web server
**External Dependencies**: AWS S3, Google Cloud Storage, Azure Cloud (optional), SMTP for emails
## Integration Approach
**Database Integration Strategy**:
- Create new tables: `cohorts`, `cohort_enrollments`, `institutions`, `sponsors`, `document_verifications`
- Use foreign keys to link to existing `users`, `submitters`, `submissions` tables
- Maintain existing document relationships through `cohort_enrollments``submissions` mapping
**API Integration Strategy**:
- Extend existing DocuSeal API with new endpoints under `/api/v1/cohorts/*`
- Reuse existing authentication (Devise tokens, JWT)
- Leverage existing submission and document APIs for core signing workflows
**Frontend Integration Strategy**:
- Add new Vue components for cohort management
- Extend existing navigation to support role-based portal switching
- Reuse existing DocuSeal form builder and signing form components
- Implement portal-specific dashboards using existing UI patterns
**Testing Integration Strategy**:
- Extend existing RSpec test suite with new model and integration tests
- Add feature tests for all three portal workflows
- Maintain existing test patterns and helpers
## Code Organization and Standards
**File Structure Approach**:
- `app/models/cohort.rb`, `app/models/cohort_enrollment.rb`, etc. (new models)
- `app/controllers/api/v1/cohorts_controller.rb` (API endpoints)
- `app/controllers/cohorts_controller.rb` (web controllers)
- `app/views/cohorts/*` (cohort management views)
- `app/views/cohorts/portal/admin/*` (admin portal views)
- `app/views/cohorts/portal/student/*` (student portal views)
- `app/views/cohorts/portal/sponsor/*` (sponsor portal views)
- `app/javascript/cohorts/*` (Vue components for all portals)
- `app/jobs/cohort_*_job.rb` (background jobs)
**Naming Conventions**:
- Models: `Cohort`, `CohortEnrollment`, `CohortDocumentVerification`
- Controllers: `CohortsController`, `Admin::CohortsController`, `Api::V1::CohortsController`
- Views: `cohorts/index.html.erb`, `cohorts/portal/admin/show.html.erb`
- Vue components: `CohortDashboard.vue`, `StudentPortal.vue`, `SponsorPortal.vue`
**Coding Standards**:
- Follow existing RuboCop configuration
- Follow existing ESLint configuration for Vue components
- Use Rails conventions (fat models, thin controllers)
- Use Vue 3 Composition API for new components
- Maintain existing test coverage patterns
**Documentation Standards**:
- Document all new models with annotations
- Add API endpoint documentation following existing patterns
- Create user guides for each portal
- Update README with new features
## Deployment and Operations
**Build Process Integration**:
- No changes required to existing build process
- New Vue components will be bundled with existing Shakapacker configuration
- New Ruby code will be processed by existing Rails asset pipeline
**Deployment Strategy**:
- Deploy as incremental feature addition to existing DocuSeal deployment
- Use database migrations for new schema
- No infrastructure changes required beyond existing Docker setup
**Monitoring and Logging**:
- Extend existing Rails logging with cohort-specific events
- Add cohort workflow metrics to existing monitoring
- Use existing Sidekiq monitoring for background jobs
**Configuration Management**:
- Use existing environment variable system
- Add new configuration for cohort-specific features (notification templates, etc.)
## Risk Assessment and Mitigation
**Technical Risks**:
- **Risk**: Performance degradation with large cohorts (100+ students)
- **Mitigation**: Implement pagination, lazy loading, and background processing
- **Impact**: Medium | **Likelihood**: Medium
- **Risk**: State management complexity leading to race conditions
- **Mitigation**: Use database transactions and optimistic locking
- **Impact**: High | **Likelihood**: Low
- **Risk**: Integration conflicts with existing DocuSeal features
- **Mitigation**: Thorough testing of existing workflows, maintain feature flags
- **Impact**: High | **Likelihood**: Medium
**Integration Risks**:
- **Risk**: Authentication conflicts between portals and existing DocuSeal
- **Mitigation**: **⚠️ REQUIRES ARCHITECT REVIEW** - See Winston for authentication strategy
- **Impact**: High | **Likelihood**: Medium
- **Risk**: Document storage capacity with multiple document types per student
- **Mitigation**: Monitor storage usage, implement retention policies
- **Impact**: Medium | **Likelihood**: Low
**Deployment Risks**:
- **Risk**: Database migration failures with large existing datasets
- **Mitigation**: Test migrations on production-like data, have rollback plan
- **Impact**: High | **Likelihood**: Low
- **Risk**: User adoption challenges with new portal interfaces
- **Mitigation**: Comprehensive user training, phased rollout, feedback collection
- **Impact**: Medium | **Likelihood**: Medium
**Mitigation Strategies**:
1. **Architect Review**: Winston must review authentication, multi-tenancy, and state machine design
2. **Phased Rollout**: Implement one portal at a time (Admin → Student → Sponsor)
3. **Feature Flags**: Allow rollback of individual features without full deployment
4. **Comprehensive Testing**: Unit, integration, and end-to-end tests for all workflows
5. **Performance Testing**: Load test with realistic cohort sizes (50-200 students)
6. **User Acceptance Testing**: Real training institutions testing with actual workflows
---