* Upsert a Slack user from sync
(user: {
slack_user_id: string;
slack_email: string | null;
slack_display_name: string | null;
slack_real_name: string | null;
slack_is_bot: boolean;
slack_is_deleted: boolean;
slack_tz_offset?: number | null;
})
| 23 | * Upsert a Slack user from sync |
| 24 | */ |
| 25 | async upsertSlackUser(user: { |
| 26 | slack_user_id: string; |
| 27 | slack_email: string | null; |
| 28 | slack_display_name: string | null; |
| 29 | slack_real_name: string | null; |
| 30 | slack_is_bot: boolean; |
| 31 | slack_is_deleted: boolean; |
| 32 | slack_tz_offset?: number | null; |
| 33 | }): Promise<SlackUserMapping> { |
| 34 | const result = await query<SlackUserMapping>( |
| 35 | `INSERT INTO slack_user_mappings ( |
| 36 | slack_user_id, slack_email, slack_display_name, slack_real_name, |
| 37 | slack_is_bot, slack_is_deleted, slack_tz_offset, last_slack_sync_at |
| 38 | ) VALUES ($1, $2, $3, $4, $5, $6, $7, NOW()) |
| 39 | ON CONFLICT (slack_user_id) |
| 40 | DO UPDATE SET |
| 41 | slack_email = EXCLUDED.slack_email, |
| 42 | slack_display_name = EXCLUDED.slack_display_name, |
| 43 | slack_real_name = EXCLUDED.slack_real_name, |
| 44 | slack_is_bot = EXCLUDED.slack_is_bot, |
| 45 | slack_is_deleted = EXCLUDED.slack_is_deleted, |
| 46 | slack_tz_offset = EXCLUDED.slack_tz_offset, |
| 47 | last_slack_sync_at = NOW(), |
| 48 | updated_at = NOW() |
| 49 | RETURNING *`, |
| 50 | [ |
| 51 | user.slack_user_id, |
| 52 | user.slack_email, |
| 53 | user.slack_display_name, |
| 54 | user.slack_real_name, |
| 55 | user.slack_is_bot, |
| 56 | user.slack_is_deleted, |
| 57 | user.slack_tz_offset ?? null, |
| 58 | ] |
| 59 | ); |
| 60 | |
| 61 | return result.rows[0]; |
| 62 | } |
| 63 | |
| 64 | /** |
| 65 | * Mark a Slack user as deleted (e.g. when the Slack API returns user_not_found) |
no outgoing calls
no test coverage detected