diff --git a/lib/models/user.js b/lib/models/user.js index 63998d34..e3070c02 100644 --- a/lib/models/user.js +++ b/lib/models/user.js @@ -139,7 +139,7 @@ const User = class User extends Model { .field( "users.confirmed_at" ) .field( "users.confirmation_sent_at" ) .field( "users.time_zone" ) - .field( "email" ) + .field( "users.email" ) .field( "unconfirmed_email" ) .field( "locale" ) .field( "place_id" ) @@ -151,11 +151,13 @@ const User = class User extends Model { .field( "user_blocks.blocked_user_id" ) .field( "pf.project_id", "pf_project_id" ) .field( "pf.position", "pf_position" ) + .field( "es.suppression_type", "es_suppression_type" ) .from( "users" ) .left_join( "user_mutes", null, "users.id = user_mutes.user_id" ) .left_join( "user_blocks", null, "users.id = user_blocks.user_id" ) .left_join( "user_privileges", "up", "users.id = up.user_id" ) .left_join( "project_faves", "pf", "users.id = pf.user_id" ) + .left_join( "email_suppressions", "es", "users.id = es.user_id" ) .where( "login = ?", login ); const { rows } = await pgClient.replica.query( query.toString( ) ); const userObject = _.mapValues( rows[0], v => v || null ); @@ -200,6 +202,14 @@ const User = class User extends Model { ) ) ); + userObject.email_suppression_types = _.compact( + _.uniq( + _.map( + _.sortBy( rows, "es_suppression_type" ), + r => r.es_suppression_type + ) + ) + ); delete userObject.pf_project_id; delete userObject.pf_position; userObject.monthly_supporter = ( diff --git a/openapi/schema/request/users_update.js b/openapi/schema/request/users_update.js index cade47eb..3a72369f 100644 --- a/openapi/schema/request/users_update.js +++ b/openapi/schema/request/users_update.js @@ -9,6 +9,24 @@ module.exports = Joi.object( ).keys( { is to delete the account. ` ), description: Joi.string( ).valid( null ), + email_suppression_types: Joi + .array( ).items( + Joi.string( ).valid( + "account_emails", + "activity", + "blocks", + "bounces", + "donation_emails", + "feedback", + "invalid_emails", + "messages", + "news_from_inaturalist", + "spam_reports", + "transactional_emails", + "unsubscribes" + ) + ) + .description( "List of email suppression types" ), faved_project_ids: Joi.array( ).items( Joi.number( ) ) .description( ` Ordered list of IDs of projects the user has faved. Order of IDs in diff --git a/openapi/schema/response/private_user.js b/openapi/schema/response/private_user.js index 6b5494b4..7e5c360b 100644 --- a/openapi/schema/response/private_user.js +++ b/openapi/schema/response/private_user.js @@ -11,6 +11,7 @@ module.exports = user.append( { confirmation_sent_at: Joi.date( ).valid( null ), data_transfer_consent: Joi.boolean( ).valid( true, null ), email: Joi.string( ).valid( null ), + email_suppression_types: Joi.array( ).items( Joi.string( ) ).valid( null ), locale: Joi.string( ).valid( null ), login: Joi.string( ), muted_user_ids: Joi.array( ).items(