feat: implement course certificate generation system with organization-level toggles
This commit is contained in:
@@ -0,0 +1,28 @@
|
||||
-- Issued Certificates Table
|
||||
-- Stores certificates generated when students complete courses
|
||||
|
||||
CREATE TABLE IF NOT EXISTS issued_certificates (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
user_id UUID NOT NULL,
|
||||
course_id UUID NOT NULL,
|
||||
certificate_html TEXT NOT NULL,
|
||||
issued_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||||
certificate_hash TEXT NOT NULL, -- For dedup and verification
|
||||
verification_code TEXT NOT NULL UNIQUE, -- Public verification code
|
||||
metadata JSONB DEFAULT '{}'::jsonb -- Extra data: score, completion_date, etc.
|
||||
);
|
||||
|
||||
-- Indexes for performance
|
||||
CREATE INDEX idx_issued_certificates_user_id ON issued_certificates(user_id);
|
||||
CREATE INDEX idx_issued_certificates_course_id ON issued_certificates(course_id);
|
||||
CREATE INDEX idx_issued_certificates_verification_code ON issued_certificates(verification_code);
|
||||
|
||||
-- Unique constraint: one certificate per user per course
|
||||
CREATE UNIQUE INDEX idx_issued_certificates_user_course_unique
|
||||
ON issued_certificates(user_id, course_id);
|
||||
|
||||
-- Comments
|
||||
COMMENT ON TABLE issued_certificates IS 'Certificates issued to students upon course completion';
|
||||
COMMENT ON COLUMN issued_certificates.certificate_hash IS 'SHA256 hash of the certificate HTML for verification';
|
||||
COMMENT ON COLUMN issued_certificates.verification_code IS 'Public code for certificate verification (e.g., VER-ABC123)';
|
||||
COMMENT ON COLUMN issued_certificates.metadata IS 'Additional data: final_score, completion_date, instructor_signature, etc';
|
||||
@@ -0,0 +1,8 @@
|
||||
-- Add certificates_enabled flag to organizations table in LMS
|
||||
-- This is synced from CMS exercise_settings when organization data is ingested
|
||||
|
||||
ALTER TABLE organizations
|
||||
ADD COLUMN IF NOT EXISTS certificates_enabled BOOLEAN NOT NULL DEFAULT TRUE;
|
||||
|
||||
COMMENT ON COLUMN organizations.certificates_enabled
|
||||
IS 'Whether built-in certificate generation is enabled for this organization (synced from CMS).';
|
||||
Reference in New Issue
Block a user