feat: SAM integration, deployment scripts, and audio response enhancements

- Add SAM (Sistema de Administración Académica) integration with sync endpoints
- Add deployment automation (deploy.sh, remote-setup.sh, setup-nginx-ssl.sh)
- Add nginx proxy configuration for SSL with Let's Encrypt
- Add audio response support for student lessons (migrations, handlers)
- Add audio evaluations admin page
- Update CORS to support wildcard subdomains for norteamericano.cl
- Add comprehensive deployment documentation (DESPLIEGUE.md, ManualDeConfiguracion.md)
- Update docker-compose.yml with nginx-proxy and acme-companion services
- Remove outdated documentation files

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
This commit is contained in:
2026-03-27 09:20:23 -03:00
parent 995065df4f
commit e4866c6dee
50 changed files with 4866 additions and 5371 deletions
@@ -1,7 +1,29 @@
-- AI Usage Logs: Update log_ai_usage function to include prompt and response
-- Note: prompt and response columns already exist from previous migration
-- AI Usage Logs: Add prompt and response columns
-- First, add columns if they don't exist
-- Update log_ai_usage function to accept prompt and response
-- Add prompt column
DO $$
BEGIN
IF NOT EXISTS (
SELECT 1 FROM information_schema.columns
WHERE table_name = 'ai_usage_logs' AND column_name = 'prompt'
) THEN
ALTER TABLE ai_usage_logs ADD COLUMN prompt TEXT;
END IF;
END $$;
-- Add response column
DO $$
BEGIN
IF NOT EXISTS (
SELECT 1 FROM information_schema.columns
WHERE table_name = 'ai_usage_logs' AND column_name = 'response'
) THEN
ALTER TABLE ai_usage_logs ADD COLUMN response TEXT;
END IF;
END $$;
-- Update log_ai_usage function to include prompt and response
CREATE OR REPLACE FUNCTION log_ai_usage(
p_user_id UUID,
p_org_id UUID,
@@ -0,0 +1,49 @@
-- Add SAM integration fields to users table
-- This allows tracking students imported from the SAM system
-- Add SAM student ID column (nullable for non-SAM users)
ALTER TABLE users
ADD COLUMN sam_student_id VARCHAR(50),
ADD COLUMN is_sam_student BOOLEAN DEFAULT FALSE,
ADD COLUMN sam_verified_at TIMESTAMPTZ;
-- Create index for faster SAM lookups
CREATE INDEX IF NOT EXISTS idx_users_sam_student_id ON users(sam_student_id);
CREATE INDEX IF NOT EXISTS idx_users_is_sam_student ON users(is_sam_student);
-- Create table to track SAM course assignments (cached from sige_sam_v3.detalle_contrato)
CREATE TABLE IF NOT EXISTS sam_course_assignments (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
sam_student_id VARCHAR(50) NOT NULL,
sam_contrato_id VARCHAR(50),
course_id UUID NOT NULL REFERENCES courses(id) ON DELETE CASCADE,
is_active BOOLEAN DEFAULT TRUE,
synced_at TIMESTAMPTZ DEFAULT NOW(),
created_at TIMESTAMPTZ DEFAULT NOW(),
updated_at TIMESTAMPTZ DEFAULT NOW(),
UNIQUE(sam_student_id, course_id)
);
-- Indexes for fast lookups
CREATE INDEX IF NOT EXISTS idx_sam_assignments_student ON sam_course_assignments(sam_student_id);
CREATE INDEX IF NOT EXISTS idx_sam_assignments_course ON sam_course_assignments(course_id);
CREATE INDEX IF NOT EXISTS idx_sam_assignments_active ON sam_course_assignments(is_active);
-- Trigger to update updated_at
CREATE OR REPLACE FUNCTION update_sam_assignment_updated_at()
RETURNS TRIGGER AS $$
BEGIN
NEW.updated_at = NOW();
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
CREATE TRIGGER trg_sam_assignment_updated_at
BEFORE UPDATE ON sam_course_assignments
FOR EACH ROW
EXECUTE FUNCTION update_sam_assignment_updated_at();
-- Comment describing the integration
COMMENT ON TABLE sam_course_assignments IS 'Cache of course assignments from sige_sam_v3.detalle_contrato. Links SAM students to OpenCCB courses.';
COMMENT ON COLUMN users.sam_student_id IS 'Student ID from sige_sam_v3.alumnos (nombre column)';
COMMENT ON COLUMN users.is_sam_student IS 'True if this user was imported/managed by SAM system';