Skip to content

Commit

Permalink
Replace users_sensitive with a new users table with teacher details
Browse files Browse the repository at this point in the history
  • Loading branch information
Jon Betts committed Apr 18, 2023
1 parent 4350212 commit fd55e02
Show file tree
Hide file tree
Showing 8 changed files with 77 additions and 39 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,4 @@ REFRESH MATERIALIZED VIEW report.raw_users;
ANALYSE report.raw_users;

-- A unique index is mandatory for concurrent updates used in the refresh
CREATE UNIQUE INDEX raw_users_id_idx ON report.raw_users (id);
CREATE UNIQUE INDEX raw_users_id_idx ON report.raw_users (id);

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
DROP MATERIALIZED VIEW IF EXISTS report.users CASCADE;

CREATE MATERIALIZED VIEW report.users AS (
WITH
user_details AS (
SELECT DISTINCT
user_map.user_id,

-- The order here should ensure empty strings and nulls are
-- sorted to the back, so the "first" value should be non-null
-- if possible
FIRST_VALUE(lms_user.display_name) OVER (
PARTITION BY user_map.user_id
ORDER BY lms_user.display_name
RANGE BETWEEN
UNBOUNDED PRECEDING AND
UNBOUNDED FOLLOWING
) AS display_name,

FIRST_VALUE(lms_user.email) OVER (
PARTITION BY user_map.user_id
ORDER BY lms_user.email
RANGE BETWEEN
UNBOUNDED PRECEDING AND
UNBOUNDED FOLLOWING
) AS email,

true AS is_teacher
FROM report.user_map
JOIN "user" AS lms_user ON
lms_user.id = user_map.lms_user_id
WHERE
-- Ensure we are only providing contact details for users who
-- are a teacher in at least one context
user_map.user_id IN (
SELECT DISTINCT(user_id)
FROM report.organization_roles
WHERE role = 'teacher'
)
)

SELECT
raw_users.id,
user_details.display_name,
user_details.email,
raw_users.username,
CASE
WHEN user_details.is_teacher IS true THEN true ELSE false
END AS is_teacher,
-- Add a column which indicates that a user is a teacher in at least
-- one context. This helps us notice / demonstrate we are only keeping
-- teacher contact info. Keeping student contact info out of region is
-- not permitted.
raw_users.registered_date
FROM report.raw_users
LEFT OUTER JOIN user_details ON
user_details.user_id = raw_users.id
) WITH NO DATA;
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
DROP INDEX IF EXISTS report.users_id_idx;

REFRESH MATERIALIZED VIEW report.users;

ANALYSE report.users;

-- A unique index is mandatory for concurrent updates used in the refresh
CREATE UNIQUE INDEX users_id_idx ON report.users (id);
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
DROP VIEW IF EXISTS report.users_sensitive CASCADE;

-- Create a plain view to act as a shim while we replace `users_sensitive`
CREATE VIEW report.users_sensitive AS (
SELECT
id, email, display_name
FROM report.users
);
2 changes: 2 additions & 0 deletions lms/data_tasks/report/refresh/04_entities_decorated.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
REFRESH MATERIALIZED VIEW CONCURRENTLY report.users;
ANALYSE report.users;

0 comments on commit fd55e02

Please sign in to comment.