• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

hicommonwealth / commonwealth / 12769251877

14 Jan 2025 02:02PM UTC coverage: 48.438% (+0.01%) from 48.424%
12769251877

push

github

web-flow
Merge pull request #10195 from hicommonwealth/kaleemNeslit.10139.recap_email

improve the recape email design

1310 of 3019 branches covered (43.39%)

Branch coverage included in aggregate %.

19 of 25 new or added lines in 5 files covered. (76.0%)

2582 of 5016 relevant lines covered (51.48%)

34.89 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

84.0
/libs/model/src/utils/handleSubscriptionPreferencesUpdate.ts
1
import { InvalidState } from '@hicommonwealth/core';
2
import * as schemas from '@hicommonwealth/schemas';
3
import { SubscriptionPreference } from '@hicommonwealth/schemas';
4
import { z } from 'zod';
5
import { models } from '../database';
6
import { mustExist } from '../middleware/guards';
7
import { emitEvent } from './utils';
8

9
function getDifferences(
10
  fullObject: Record<string, unknown>,
11
  subsetObject: Record<string, unknown>,
12
): Partial<z.infer<typeof SubscriptionPreference>> {
13
  const differences: Record<string, unknown> = {};
7✔
14
  for (const key in subsetObject) {
7✔
15
    if (
18✔
16
      key !== 'id' &&
40✔
17
      key in subsetObject &&
18
      subsetObject[key] !== fullObject[key]
19
    ) {
20
      differences[key] = subsetObject[key];
11✔
21
    }
22
  }
23
  return differences;
7✔
24
}
25

26
export async function handleSubscriptionPreferencesUpdate({
27
  userIdentifier,
28
  payload,
29
}: {
30
  userIdentifier: number;
31
  payload: Partial<z.infer<typeof SubscriptionPreference>>;
32
}) {
33
  const existingPreferences: z.infer<typeof SubscriptionPreference> | null =
34
    await models.SubscriptionPreference.findOne({
7✔
35
      where: {
36
        user_id: userIdentifier,
37
      },
38
      raw: true,
39
    });
40

41
  mustExist('existingPreferences', existingPreferences);
7✔
42

43
  const preferenceUpdates = getDifferences(existingPreferences, payload);
7✔
44
  if (!Object.keys(preferenceUpdates).length) {
7!
NEW
45
    return existingPreferences;
×
46
  }
47
  let result;
48
  await models.sequelize.transaction(async (transaction) => {
7✔
49
    result = await models.SubscriptionPreference.update(payload, {
7✔
50
      where: { user_id: userIdentifier },
51
      returning: true,
52
      transaction,
53
    });
54
    if (result[1].length !== 1) {
7!
NEW
55
      throw new InvalidState('Failed to update subscription preferences');
×
56
    }
57

58
    await emitEvent(
7✔
59
      models.Outbox,
60
      [
61
        {
62
          event_name: schemas.EventNames.SubscriptionPreferencesUpdated,
63
          event_payload: {
64
            user_id: existingPreferences.user_id,
65
            ...preferenceUpdates,
66
          },
67
        },
68
      ],
69
      transaction,
70
    );
71
  });
72

73
  return result![1][0].get({ plain: true });
7✔
74
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc