@bash-app/bash-common 30.225.0 → 30.227.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/__tests__/agePolicy.test.d.ts +2 -0
- package/dist/__tests__/agePolicy.test.d.ts.map +1 -0
- package/dist/__tests__/agePolicy.test.js +203 -0
- package/dist/__tests__/agePolicy.test.js.map +1 -0
- package/dist/__tests__/getDisplayGender.test.d.ts +2 -0
- package/dist/__tests__/getDisplayGender.test.d.ts.map +1 -0
- package/dist/__tests__/getDisplayGender.test.js +34 -0
- package/dist/__tests__/getDisplayGender.test.js.map +1 -0
- package/dist/__tests__/statusEnums.test.d.ts +2 -0
- package/dist/__tests__/statusEnums.test.d.ts.map +1 -0
- package/dist/__tests__/statusEnums.test.js +24 -0
- package/dist/__tests__/statusEnums.test.js.map +1 -0
- package/dist/aiApproval.d.ts +89 -0
- package/dist/aiApproval.d.ts.map +1 -0
- package/dist/aiApproval.js +82 -0
- package/dist/aiApproval.js.map +1 -0
- package/dist/definitions.d.ts +44 -2
- package/dist/definitions.d.ts.map +1 -1
- package/dist/definitions.js +106 -2
- package/dist/definitions.js.map +1 -1
- package/dist/extendedSchemas.d.ts +280 -105
- package/dist/extendedSchemas.d.ts.map +1 -1
- package/dist/extendedSchemas.js +34 -2
- package/dist/extendedSchemas.js.map +1 -1
- package/dist/index.d.ts +5 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/legalTemplates.d.ts +1 -1
- package/dist/legalTemplates.js +1 -1
- package/dist/utils/__tests__/badgeUtils.test.d.ts +2 -0
- package/dist/utils/__tests__/badgeUtils.test.d.ts.map +1 -0
- package/dist/utils/__tests__/badgeUtils.test.js +157 -0
- package/dist/utils/__tests__/badgeUtils.test.js.map +1 -0
- package/dist/utils/__tests__/bashPointsPaymentUtils.test.d.ts +2 -0
- package/dist/utils/__tests__/bashPointsPaymentUtils.test.d.ts.map +1 -0
- package/dist/utils/__tests__/bashPointsPaymentUtils.test.js +114 -0
- package/dist/utils/__tests__/bashPointsPaymentUtils.test.js.map +1 -0
- package/dist/utils/__tests__/contentFilterUtils.test.d.ts +2 -0
- package/dist/utils/__tests__/contentFilterUtils.test.d.ts.map +1 -0
- package/dist/utils/__tests__/contentFilterUtils.test.js +443 -0
- package/dist/utils/__tests__/contentFilterUtils.test.js.map +1 -0
- package/dist/utils/__tests__/displayDateUtils.test.d.ts +2 -0
- package/dist/utils/__tests__/displayDateUtils.test.d.ts.map +1 -0
- package/dist/utils/__tests__/displayDateUtils.test.js +105 -0
- package/dist/utils/__tests__/displayDateUtils.test.js.map +1 -0
- package/dist/utils/__tests__/flyerUtils.test.d.ts +2 -0
- package/dist/utils/__tests__/flyerUtils.test.d.ts.map +1 -0
- package/dist/utils/__tests__/flyerUtils.test.js +49 -0
- package/dist/utils/__tests__/flyerUtils.test.js.map +1 -0
- package/dist/utils/__tests__/getBackendHost.test.d.ts +2 -0
- package/dist/utils/__tests__/getBackendHost.test.d.ts.map +1 -0
- package/dist/utils/__tests__/getBackendHost.test.js +104 -0
- package/dist/utils/__tests__/getBackendHost.test.js.map +1 -0
- package/dist/utils/__tests__/getFrontendHost.test.d.ts +2 -0
- package/dist/utils/__tests__/getFrontendHost.test.d.ts.map +1 -0
- package/dist/utils/__tests__/getFrontendHost.test.js +207 -0
- package/dist/utils/__tests__/getFrontendHost.test.js.map +1 -0
- package/dist/utils/__tests__/promoCodesUtils.test.d.ts +2 -0
- package/dist/utils/__tests__/promoCodesUtils.test.d.ts.map +1 -0
- package/dist/utils/__tests__/promoCodesUtils.test.js +183 -0
- package/dist/utils/__tests__/promoCodesUtils.test.js.map +1 -0
- package/dist/utils/__tests__/qrCodeUtils.test.d.ts +2 -0
- package/dist/utils/__tests__/qrCodeUtils.test.d.ts.map +1 -0
- package/dist/utils/__tests__/qrCodeUtils.test.js +99 -0
- package/dist/utils/__tests__/qrCodeUtils.test.js.map +1 -0
- package/dist/utils/__tests__/stripeAccountUtils.test.d.ts +2 -0
- package/dist/utils/__tests__/stripeAccountUtils.test.d.ts.map +1 -0
- package/dist/utils/__tests__/stripeAccountUtils.test.js +75 -0
- package/dist/utils/__tests__/stripeAccountUtils.test.js.map +1 -0
- package/dist/utils/blog/__tests__/getRelatedBlogPosts.test.d.ts +2 -0
- package/dist/utils/blog/__tests__/getRelatedBlogPosts.test.d.ts.map +1 -0
- package/dist/utils/blog/__tests__/getRelatedBlogPosts.test.js +233 -0
- package/dist/utils/blog/__tests__/getRelatedBlogPosts.test.js.map +1 -0
- package/dist/utils/blog/blogCommentDbUtils.d.ts +161 -0
- package/dist/utils/blog/blogCommentDbUtils.d.ts.map +1 -0
- package/dist/utils/blog/blogCommentDbUtils.js +111 -0
- package/dist/utils/blog/blogCommentDbUtils.js.map +1 -0
- package/dist/utils/blog/blogDbUtils.d.ts +10 -0
- package/dist/utils/blog/blogDbUtils.d.ts.map +1 -1
- package/dist/utils/blog/blogDbUtils.js +71 -0
- package/dist/utils/blog/blogDbUtils.js.map +1 -1
- package/dist/utils/flyerUtils.d.ts +42 -0
- package/dist/utils/flyerUtils.d.ts.map +1 -0
- package/dist/utils/flyerUtils.js +104 -0
- package/dist/utils/flyerUtils.js.map +1 -0
- package/dist/utils/urlUtils.d.ts +10 -0
- package/dist/utils/urlUtils.d.ts.map +1 -1
- package/dist/utils/urlUtils.js +24 -5
- package/dist/utils/urlUtils.js.map +1 -1
- package/dist/utils/userUtils.d.ts +32 -0
- package/dist/utils/userUtils.d.ts.map +1 -1
- package/dist/utils/userUtils.js +27 -0
- package/dist/utils/userUtils.js.map +1 -1
- package/package.json +1 -1
- package/prisma/schema.prisma +1196 -845
- package/src/__tests__/agePolicy.test.ts +257 -0
- package/src/__tests__/getDisplayGender.test.ts +50 -0
- package/src/__tests__/statusEnums.test.ts +36 -0
- package/src/aiApproval.ts +118 -0
- package/src/definitions.ts +138 -1
- package/src/extendedSchemas.ts +86 -3
- package/src/index.ts +15 -0
- package/src/legalTemplates.ts +1 -1
- package/src/utils/__tests__/badgeUtils.test.ts +191 -0
- package/src/utils/__tests__/bashPointsPaymentUtils.test.ts +153 -0
- package/src/utils/__tests__/contentFilterUtils.test.ts +547 -0
- package/src/utils/__tests__/displayDateUtils.test.ts +113 -0
- package/src/utils/__tests__/flyerUtils.test.ts +70 -0
- package/src/utils/__tests__/getBackendHost.test.ts +128 -0
- package/src/utils/__tests__/getFrontendHost.test.ts +232 -0
- package/src/utils/__tests__/promoCodesUtils.test.ts +237 -0
- package/src/utils/__tests__/qrCodeUtils.test.ts +143 -0
- package/src/utils/__tests__/stripeAccountUtils.test.ts +93 -0
- package/src/utils/blog/__tests__/getRelatedBlogPosts.test.ts +271 -0
- package/src/utils/blog/blogCommentDbUtils.ts +161 -0
- package/src/utils/blog/blogDbUtils.ts +95 -1
- package/src/utils/flyerUtils.ts +137 -0
- package/src/utils/urlUtils.ts +27 -5
- package/src/utils/userUtils.ts +40 -0
- package/dist/utils/__tests__/cancellationPolicyRefundResolver.test.d.ts +0 -6
- package/dist/utils/__tests__/cancellationPolicyRefundResolver.test.d.ts.map +0 -1
- package/dist/utils/__tests__/cancellationPolicyRefundResolver.test.js +0 -104
- package/dist/utils/__tests__/cancellationPolicyRefundResolver.test.js.map +0 -1
- package/dist/utils/service/serviceRateDBUtils.d.ts +0 -1
- package/dist/utils/service/serviceRateDBUtils.d.ts.map +0 -1
- package/dist/utils/service/serviceRateDBUtils.js +0 -159
- package/dist/utils/service/serviceRateDBUtils.js.map +0 -1
- package/prisma/migrations/add_bash_availability.sql +0 -53
- package/prisma/migrations/add_bashcash_pricing_to_ticket_tier.sql +0 -15
- package/prisma/migrations/add_bashpoints_purchase_tracking.sql +0 -33
- package/prisma/migrations/add_event_group_allow_auto_join.sql +0 -17
- package/prisma/migrations/add_group_member_status_not_going_maybe.sql +0 -5
- package/prisma/migrations/add_groups_and_momentum.sql +0 -135
- package/prisma/migrations/add_groups_momentum_phase0_4.sql +0 -200
- package/prisma/migrations/add_new_feature_tables.sql +0 -140
- package/prisma/migrations/add_pricing_type_enum.sql +0 -88
- package/prisma/migrations/add_tier_privacy_and_fee_handling.sql +0 -29
- package/prisma/migrations/diagnostic_bashcash_columns.sql +0 -157
- package/prisma/migrations/fix_bashcash_referral_code_schema_mismatch.sql +0 -81
- package/prisma/migrations/rename_bashcash_to_bashpoints.sql +0 -183
- package/prisma/migrations/rename_bashcredits_to_bashpoints.sql +0 -96
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getRelatedBlogPosts.test.js","sourceRoot":"","sources":["../../../../src/utils/blog/__tests__/getRelatedBlogPosts.test.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,2EAA2E;AAC3E,2EAA2E;AAC3E,2DAA2D;AAC3D,sCAAsC;AACtC,6BAA6B;AAC7B,mCAAmC;AACnC,EAAE;AACF,uBAAuB;AACvB,uCAAuC;AACvC,+EAA+E;AAC/E,gBAAgB;AAChB,2DAA2D;AAE3D,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAoBxD,SAAS,cAAc,CAAC,IAGvB;IACC,MAAM,UAAU,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC5D,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC9D,OAAO;QACL,QAAQ,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE;QAClC,YAAY,EAAE,UAAU;QACxB,UAAU,EAAE,QAAQ;KACrB,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,YAAqC,EAAE;IACxD,OAAO;QACL,EAAE,EAAE,WAAW;QACf,IAAI,EAAE,WAAW;QACjB,KAAK,EAAE,mBAAmB;QAC1B,OAAO,EAAE,SAAS;QAClB,UAAU,EAAE,IAAI;QAChB,QAAQ,EAAE,CAAC;QACX,WAAW,EAAE,IAAI,IAAI,CAAC,sBAAsB,CAAC;QAC7C,UAAU,EAAE,IAAI;QAChB,IAAI,EAAE,EAAE;QACR,GAAG,SAAS;KACb,CAAC;AACJ,CAAC;AAED,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACnC,EAAE,CAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;QAC9D,MAAM,MAAM,GAAG,cAAc,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;QAChE,MAAM,GAAG,GAAG,MAAM,mBAAmB,CAAC,MAAa,EAAE,YAAY,CAAC,CAAC;QACnE,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACxB,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;QACjE,MAAM,MAAM,GAAgB;YAC1B,EAAE,EAAE,KAAK;YACT,UAAU,EAAE,IAAI;YAChB,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;SACjD,CAAC;QACF,MAAM,UAAU,GAAqB;YACnC,SAAS,CAAC;gBACR,EAAE,EAAE,KAAK;gBACT,KAAK,EAAE,mBAAmB;gBAC1B,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;gBACpB,WAAW,EAAE,IAAI,IAAI,CAAC,YAAY,CAAC;aACpC,CAAC;YACF,SAAS,CAAC;gBACR,EAAE,EAAE,MAAM;gBACV,KAAK,EAAE,sBAAsB;gBAC7B,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;gBAChD,WAAW,EAAE,IAAI,IAAI,CAAC,YAAY,CAAC;aACpC,CAAC;YACF,SAAS,CAAC;gBACR,EAAE,EAAE,KAAK;gBACT,KAAK,EAAE,oBAAoB;gBAC3B,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;gBAClC,WAAW,EAAE,IAAI,IAAI,CAAC,YAAY,CAAC;aACpC,CAAC;SACH,CAAC;QACF,MAAM,MAAM,GAAG,cAAc,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;QACtD,MAAM,GAAG,GAAG,MAAM,mBAAmB,CAAC,MAAa,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;QAC/D,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4DAA4D,EAAE,KAAK,IAAI,EAAE;QAC1E,MAAM,MAAM,GAAgB;YAC1B,EAAE,EAAE,KAAK;YACT,UAAU,EAAE,OAAO;YACnB,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;SACrB,CAAC;QACF,MAAM,UAAU,GAAqB;YACnC,SAAS,CAAC;gBACR,EAAE,EAAE,kBAAkB;gBACtB,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;gBACpB,UAAU,EAAE,WAAW;gBACvB,WAAW,EAAE,IAAI,IAAI,CAAC,YAAY,CAAC;aACpC,CAAC;YACF,SAAS,CAAC;gBACR,EAAE,EAAE,eAAe;gBACnB,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;gBACpB,UAAU,EAAE,OAAO;gBACnB,WAAW,EAAE,IAAI,IAAI,CAAC,YAAY,CAAC;aACpC,CAAC;SACH,CAAC;QACF,MAAM,MAAM,GAAG,cAAc,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;QACtD,MAAM,GAAG,GAAG,MAAM,mBAAmB,CAAC,MAAa,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;QAC/D,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,eAAe,EAAE,kBAAkB,CAAC,CAAC,CAAC;IAC9E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4DAA4D,EAAE,KAAK,IAAI,EAAE;QAC1E,MAAM,MAAM,GAAgB;YAC1B,EAAE,EAAE,KAAK;YACT,UAAU,EAAE,OAAO;YACnB,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;SACrB,CAAC;QACF,MAAM,UAAU,GAAqB;YACnC,SAAS,CAAC;gBACR,EAAE,EAAE,OAAO;gBACX,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;gBACpB,UAAU,EAAE,OAAO;gBACnB,WAAW,EAAE,IAAI,IAAI,CAAC,YAAY,CAAC;aACpC,CAAC;YACF,SAAS,CAAC;gBACR,EAAE,EAAE,OAAO;gBACX,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;gBACpB,UAAU,EAAE,OAAO;gBACnB,WAAW,EAAE,IAAI,IAAI,CAAC,YAAY,CAAC;aACpC,CAAC;SACH,CAAC;QACF,MAAM,MAAM,GAAG,cAAc,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;QACtD,MAAM,GAAG,GAAG,MAAM,mBAAmB,CAAC,MAAa,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;QAC/D,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0DAA0D,EAAE,KAAK,IAAI,EAAE;QACxE,MAAM,MAAM,GAAgB;YAC1B,EAAE,EAAE,KAAK;YACT,UAAU,EAAE,IAAI;YAChB,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;SACrB,CAAC;QACF,MAAM,UAAU,GAAqB;YACnC,SAAS,CAAC;gBACR,EAAE,EAAE,SAAS;gBACb,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;gBACpB,WAAW,EAAE,IAAI;aAClB,CAAC;YACF,SAAS,CAAC;gBACR,EAAE,EAAE,OAAO;gBACX,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;gBACpB,WAAW,EAAE,IAAI,IAAI,CAAC,YAAY,CAAC;aACpC,CAAC;SACH,CAAC;QACF,MAAM,MAAM,GAAG,cAAc,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;QACtD,MAAM,GAAG,GAAG,MAAM,mBAAmB,CAAC,MAAa,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;QAC/D,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8BAA8B,EAAE,KAAK,IAAI,EAAE;QAC5C,MAAM,MAAM,GAAgB;YAC1B,EAAE,EAAE,KAAK;YACT,UAAU,EAAE,IAAI;YAChB,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;SACrB,CAAC;QACF,MAAM,UAAU,GAAqB,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACtE,SAAS,CAAC;YACR,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,KAAK,EAAE,aAAa,CAAC,EAAE;YACvB,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;YACpB,WAAW,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;SACtC,CAAC,CACH,CAAC;QACF,MAAM,MAAM,GAAG,cAAc,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;QACtD,MAAM,GAAG,GAAG,MAAM,mBAAmB,CAAC,MAAa,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;QAC/D,MAAM,CAAC,GAAG,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;QACzD,MAAM,MAAM,GAAgB;YAC1B,EAAE,EAAE,KAAK;YACT,UAAU,EAAE,IAAI;YAChB,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;SACrB,CAAC;QACF,MAAM,UAAU,GAAqB,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACvE,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CACjD,CAAC;QACF,MAAM,MAAM,GAAG,cAAc,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;QACtD,MAAM,GAAG,GAAG,MAAM,mBAAmB,CAAC,MAAa,EAAE,KAAK,CAAC,CAAC;QAC5D,MAAM,CAAC,GAAG,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iEAAiE,EAAE,KAAK,IAAI,EAAE;QAC/E,MAAM,MAAM,GAAgB;YAC1B,EAAE,EAAE,KAAK;YACT,UAAU,EAAE,OAAO;YACnB,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;SACnC,CAAC;QACF,MAAM,MAAM,GAAG,cAAc,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;QAC1D,MAAM,mBAAmB,CAAC,MAAa,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;QAEnD,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QACvD,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;QACzC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QAChD,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;QACjD,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC;YACvB,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE;YAChD,EAAE,UAAU,EAAE,OAAO,EAAE;SACxB,CAAC,CAAC;QACH,+DAA+D;QAC/D,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sEAAsE,EAAE,KAAK,IAAI,EAAE;QACpF,MAAM,MAAM,GAAgB,EAAE,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;QACtE,MAAM,MAAM,GAAG,cAAc,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;QAC1D,MAAM,mBAAmB,CAAC,MAAa,EAAE,KAAK,CAAC,CAAC;QAChD,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QACvD,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,aAAa,EAAE,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wEAAwE,EAAE,KAAK,IAAI,EAAE;QACtF,MAAM,MAAM,GAAgB;YAC1B,EAAE,EAAE,KAAK;YACT,UAAU,EAAE,IAAI;YAChB,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;SACrB,CAAC;QACF,MAAM,UAAU,GAAqB;YACnC,SAAS,CAAC;gBACR,EAAE,EAAE,IAAI;gBACR,IAAI,EAAE,SAAS;gBACf,KAAK,EAAE,IAAI;gBACX,OAAO,EAAE,IAAI;gBACb,UAAU,EAAE,SAAS;gBACrB,QAAQ,EAAE,CAAC;gBACX,WAAW,EAAE,IAAI,IAAI,CAAC,YAAY,CAAC;gBACnC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;gBACpB,UAAU,EAAE,OAAO;aACpB,CAAC;SACH,CAAC;QACF,MAAM,MAAM,GAAG,cAAc,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;QACtD,MAAM,GAAG,GAAG,MAAM,mBAAmB,CAAC,MAAa,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;QAC/D,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;YACrB,EAAE,EAAE,IAAI;YACR,IAAI,EAAE,SAAS;YACf,KAAK,EAAE,IAAI;YACX,OAAO,EAAE,IAAI;YACb,UAAU,EAAE,SAAS;YACrB,QAAQ,EAAE,CAAC;YACX,WAAW,EAAE,IAAI,IAAI,CAAC,YAAY,CAAC;SACpC,CAAC,CAAC;QACH,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;QACxD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
import { PrismaClient, BlogComment, CommentStatus } from '@prisma/client';
|
|
2
|
+
import { PublicUser } from '../../extendedSchemas.js';
|
|
3
|
+
export declare const BLOG_COMMENT_INCLUDE: {
|
|
4
|
+
author: {
|
|
5
|
+
select: {
|
|
6
|
+
id: true;
|
|
7
|
+
username: true;
|
|
8
|
+
email: true;
|
|
9
|
+
givenName: true;
|
|
10
|
+
familyName: true;
|
|
11
|
+
image: true;
|
|
12
|
+
imageUpdatedAt: true;
|
|
13
|
+
uploadedImage: true;
|
|
14
|
+
uploadedImageUpdatedAt: true;
|
|
15
|
+
isSuperUser: true;
|
|
16
|
+
socialMediaProfiles: true;
|
|
17
|
+
city: true;
|
|
18
|
+
state: true;
|
|
19
|
+
createdOn: true;
|
|
20
|
+
dob: true;
|
|
21
|
+
showAgeOnProfile: true;
|
|
22
|
+
showGenderOnProfile: true;
|
|
23
|
+
showVerifiedBadgesOnProfile: true;
|
|
24
|
+
schoolName: true;
|
|
25
|
+
documentIDId: true;
|
|
26
|
+
idVerified: true;
|
|
27
|
+
paymentVerified: true;
|
|
28
|
+
reviews: true;
|
|
29
|
+
contacts: true;
|
|
30
|
+
accepted: true;
|
|
31
|
+
boughtTicket: true;
|
|
32
|
+
noPay: true;
|
|
33
|
+
supportedEvent: true;
|
|
34
|
+
aboutMe: true;
|
|
35
|
+
levelBadge: true;
|
|
36
|
+
temporaryBadges: true;
|
|
37
|
+
artistsToSee: true;
|
|
38
|
+
membershipTier: true;
|
|
39
|
+
isAmbashador: true;
|
|
40
|
+
isBashInsider: true;
|
|
41
|
+
scoutTier: true;
|
|
42
|
+
isFirstInCity: true;
|
|
43
|
+
paymentHandle: true;
|
|
44
|
+
bashPointsBalance: true;
|
|
45
|
+
bashPointsEarnedLifetime: true;
|
|
46
|
+
hostRating: true;
|
|
47
|
+
totalRatings: true;
|
|
48
|
+
totalEventsHosted: true;
|
|
49
|
+
isSuspended: true;
|
|
50
|
+
userSubscription: {
|
|
51
|
+
select: {
|
|
52
|
+
type: true;
|
|
53
|
+
status: true;
|
|
54
|
+
ownerId: true;
|
|
55
|
+
subscriptionCount: true;
|
|
56
|
+
listedCount: true;
|
|
57
|
+
};
|
|
58
|
+
};
|
|
59
|
+
};
|
|
60
|
+
};
|
|
61
|
+
replies: {
|
|
62
|
+
where: {
|
|
63
|
+
status: "Published";
|
|
64
|
+
};
|
|
65
|
+
orderBy: {
|
|
66
|
+
createdAt: "asc";
|
|
67
|
+
};
|
|
68
|
+
include: {
|
|
69
|
+
author: {
|
|
70
|
+
select: {
|
|
71
|
+
id: true;
|
|
72
|
+
username: true;
|
|
73
|
+
email: true;
|
|
74
|
+
givenName: true;
|
|
75
|
+
familyName: true;
|
|
76
|
+
image: true;
|
|
77
|
+
imageUpdatedAt: true;
|
|
78
|
+
uploadedImage: true;
|
|
79
|
+
uploadedImageUpdatedAt: true;
|
|
80
|
+
isSuperUser: true;
|
|
81
|
+
socialMediaProfiles: true;
|
|
82
|
+
city: true;
|
|
83
|
+
state: true;
|
|
84
|
+
createdOn: true;
|
|
85
|
+
dob: true;
|
|
86
|
+
showAgeOnProfile: true;
|
|
87
|
+
showGenderOnProfile: true;
|
|
88
|
+
showVerifiedBadgesOnProfile: true;
|
|
89
|
+
schoolName: true;
|
|
90
|
+
documentIDId: true;
|
|
91
|
+
idVerified: true;
|
|
92
|
+
paymentVerified: true;
|
|
93
|
+
reviews: true;
|
|
94
|
+
contacts: true;
|
|
95
|
+
accepted: true;
|
|
96
|
+
boughtTicket: true;
|
|
97
|
+
noPay: true;
|
|
98
|
+
supportedEvent: true;
|
|
99
|
+
aboutMe: true;
|
|
100
|
+
levelBadge: true;
|
|
101
|
+
temporaryBadges: true;
|
|
102
|
+
artistsToSee: true;
|
|
103
|
+
membershipTier: true;
|
|
104
|
+
isAmbashador: true;
|
|
105
|
+
isBashInsider: true;
|
|
106
|
+
scoutTier: true;
|
|
107
|
+
isFirstInCity: true;
|
|
108
|
+
paymentHandle: true;
|
|
109
|
+
bashPointsBalance: true;
|
|
110
|
+
bashPointsEarnedLifetime: true;
|
|
111
|
+
hostRating: true;
|
|
112
|
+
totalRatings: true;
|
|
113
|
+
totalEventsHosted: true;
|
|
114
|
+
isSuspended: true;
|
|
115
|
+
userSubscription: {
|
|
116
|
+
select: {
|
|
117
|
+
type: true;
|
|
118
|
+
status: true;
|
|
119
|
+
ownerId: true;
|
|
120
|
+
subscriptionCount: true;
|
|
121
|
+
listedCount: true;
|
|
122
|
+
};
|
|
123
|
+
};
|
|
124
|
+
};
|
|
125
|
+
};
|
|
126
|
+
};
|
|
127
|
+
};
|
|
128
|
+
};
|
|
129
|
+
export interface BlogCommentWithAuthor extends BlogComment {
|
|
130
|
+
author: PublicUser;
|
|
131
|
+
replies?: (BlogComment & {
|
|
132
|
+
author: PublicUser;
|
|
133
|
+
})[];
|
|
134
|
+
}
|
|
135
|
+
export declare function validateCommentContent(content: string): {
|
|
136
|
+
ok: true;
|
|
137
|
+
} | {
|
|
138
|
+
ok: false;
|
|
139
|
+
reason: string;
|
|
140
|
+
};
|
|
141
|
+
export declare function getBlogCommentsForPost(prisma: PrismaClient, postId: string): Promise<BlogCommentWithAuthor[]>;
|
|
142
|
+
export declare function getBlogCommentsByStatus(prisma: PrismaClient, status: CommentStatus | CommentStatus[], options?: {
|
|
143
|
+
limit?: number;
|
|
144
|
+
offset?: number;
|
|
145
|
+
}): Promise<BlogCommentWithAuthor[]>;
|
|
146
|
+
export declare function getBlogCommentById(prisma: PrismaClient, id: string): Promise<BlogCommentWithAuthor | null>;
|
|
147
|
+
export declare function createBlogComment(prisma: PrismaClient, data: {
|
|
148
|
+
postId: string;
|
|
149
|
+
authorId: string;
|
|
150
|
+
parentId?: string | null;
|
|
151
|
+
content: string;
|
|
152
|
+
status: CommentStatus;
|
|
153
|
+
}): Promise<BlogCommentWithAuthor>;
|
|
154
|
+
export declare function updateBlogCommentContent(prisma: PrismaClient, id: string, data: {
|
|
155
|
+
content: string;
|
|
156
|
+
status?: CommentStatus;
|
|
157
|
+
}): Promise<BlogCommentWithAuthor>;
|
|
158
|
+
export declare function setBlogCommentStatus(prisma: PrismaClient, id: string, status: CommentStatus): Promise<BlogCommentWithAuthor>;
|
|
159
|
+
export declare function softDeleteBlogComment(prisma: PrismaClient, id: string): Promise<BlogCommentWithAuthor>;
|
|
160
|
+
export declare function countRecentCommentsByAuthor(prisma: PrismaClient, authorId: string, windowMs: number): Promise<number>;
|
|
161
|
+
//# sourceMappingURL=blogCommentDbUtils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blogCommentDbUtils.d.ts","sourceRoot":"","sources":["../../../src/utils/blog/blogCommentDbUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,aAAa,EAAU,MAAM,gBAAgB,CAAC;AAClF,OAAO,EAAiC,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAIrF,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAaI,CAAC;AAEtC,MAAM,WAAW,qBAAsB,SAAQ,WAAW;IACxD,MAAM,EAAE,UAAU,CAAC;IACnB,OAAO,CAAC,EAAE,CAAC,WAAW,GAAG;QAAE,MAAM,EAAE,UAAU,CAAA;KAAE,CAAC,EAAE,CAAC;CACpD;AAKD,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CASpG;AAGD,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,YAAY,EACpB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAWlC;AAGD,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,YAAY,EACpB,MAAM,EAAE,aAAa,GAAG,aAAa,EAAE,EACvC,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAO,GAChD,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAWlC;AAED,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,YAAY,EACpB,EAAE,EAAE,MAAM,GACT,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC,CAKvC;AAMD,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,YAAY,EACpB,IAAI,EAAE;IACJ,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,aAAa,CAAC;CACvB,GACA,OAAO,CAAC,qBAAqB,CAAC,CAWhC;AAED,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE,YAAY,EACpB,EAAE,EAAE,MAAM,EACV,IAAI,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,aAAa,CAAA;CAAE,GAChD,OAAO,CAAC,qBAAqB,CAAC,CAShC;AAED,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,YAAY,EACpB,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,qBAAqB,CAAC,CAMhC;AAKD,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,YAAY,EACpB,EAAE,EAAE,MAAM,GACT,OAAO,CAAC,qBAAqB,CAAC,CAEhC;AAED,wBAAsB,2BAA2B,CAC/C,MAAM,EAAE,YAAY,EACpB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,CAAC,CAQjB"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { CommentStatus } from '@prisma/client';
|
|
2
|
+
import { FRONT_END_USER_DATA_TO_SELECT } from '../../extendedSchemas.js';
|
|
3
|
+
// Shape returned by every helper below. Mirrors INVITATION_DATA_TO_INCLUDE
|
|
4
|
+
// pattern so consumers never have to `as`-cast.
|
|
5
|
+
export const BLOG_COMMENT_INCLUDE = {
|
|
6
|
+
author: {
|
|
7
|
+
select: FRONT_END_USER_DATA_TO_SELECT,
|
|
8
|
+
},
|
|
9
|
+
replies: {
|
|
10
|
+
where: { status: CommentStatus.Published },
|
|
11
|
+
orderBy: { createdAt: 'asc' },
|
|
12
|
+
include: {
|
|
13
|
+
author: {
|
|
14
|
+
select: FRONT_END_USER_DATA_TO_SELECT,
|
|
15
|
+
},
|
|
16
|
+
},
|
|
17
|
+
},
|
|
18
|
+
};
|
|
19
|
+
const MAX_COMMENT_LENGTH = 4000;
|
|
20
|
+
const MIN_COMMENT_LENGTH = 1;
|
|
21
|
+
export function validateCommentContent(content) {
|
|
22
|
+
const trimmed = content.trim();
|
|
23
|
+
if (trimmed.length < MIN_COMMENT_LENGTH) {
|
|
24
|
+
return { ok: false, reason: 'Comment cannot be empty.' };
|
|
25
|
+
}
|
|
26
|
+
if (trimmed.length > MAX_COMMENT_LENGTH) {
|
|
27
|
+
return { ok: false, reason: `Comment is too long (max ${MAX_COMMENT_LENGTH} characters).` };
|
|
28
|
+
}
|
|
29
|
+
return { ok: true };
|
|
30
|
+
}
|
|
31
|
+
// Public list: only Published comments + their Published replies.
|
|
32
|
+
export async function getBlogCommentsForPost(prisma, postId) {
|
|
33
|
+
const comments = await prisma.blogComment.findMany({
|
|
34
|
+
where: {
|
|
35
|
+
postId,
|
|
36
|
+
parentId: null,
|
|
37
|
+
status: CommentStatus.Published,
|
|
38
|
+
},
|
|
39
|
+
include: BLOG_COMMENT_INCLUDE,
|
|
40
|
+
orderBy: { createdAt: 'desc' },
|
|
41
|
+
});
|
|
42
|
+
return comments;
|
|
43
|
+
}
|
|
44
|
+
// Admin list: any status, used by the moderation queue.
|
|
45
|
+
export async function getBlogCommentsByStatus(prisma, status, options = {}) {
|
|
46
|
+
const { limit = 50, offset = 0 } = options;
|
|
47
|
+
const statusFilter = Array.isArray(status) ? { in: status } : status;
|
|
48
|
+
const comments = await prisma.blogComment.findMany({
|
|
49
|
+
where: { status: statusFilter },
|
|
50
|
+
include: BLOG_COMMENT_INCLUDE,
|
|
51
|
+
orderBy: { createdAt: 'desc' },
|
|
52
|
+
skip: offset,
|
|
53
|
+
take: limit,
|
|
54
|
+
});
|
|
55
|
+
return comments;
|
|
56
|
+
}
|
|
57
|
+
export async function getBlogCommentById(prisma, id) {
|
|
58
|
+
return prisma.blogComment.findUnique({
|
|
59
|
+
where: { id },
|
|
60
|
+
include: BLOG_COMMENT_INCLUDE,
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
// Caller (the API endpoint) is responsible for running AI moderation BEFORE
|
|
64
|
+
// calling this and choosing the resulting `status` (Published vs Pending).
|
|
65
|
+
// Keeping moderation in the API layer avoids dragging the OpenAI dependency
|
|
66
|
+
// into bash-common.
|
|
67
|
+
export async function createBlogComment(prisma, data) {
|
|
68
|
+
return prisma.blogComment.create({
|
|
69
|
+
data: {
|
|
70
|
+
postId: data.postId,
|
|
71
|
+
authorId: data.authorId,
|
|
72
|
+
parentId: data.parentId ?? null,
|
|
73
|
+
content: data.content.trim(),
|
|
74
|
+
status: data.status,
|
|
75
|
+
},
|
|
76
|
+
include: BLOG_COMMENT_INCLUDE,
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
export async function updateBlogCommentContent(prisma, id, data) {
|
|
80
|
+
return prisma.blogComment.update({
|
|
81
|
+
where: { id },
|
|
82
|
+
data: {
|
|
83
|
+
content: data.content.trim(),
|
|
84
|
+
...(data.status ? { status: data.status } : {}),
|
|
85
|
+
},
|
|
86
|
+
include: BLOG_COMMENT_INCLUDE,
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
export async function setBlogCommentStatus(prisma, id, status) {
|
|
90
|
+
return prisma.blogComment.update({
|
|
91
|
+
where: { id },
|
|
92
|
+
data: { status },
|
|
93
|
+
include: BLOG_COMMENT_INCLUDE,
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
// Soft delete: preserves the row (and any child replies) so threading stays
|
|
97
|
+
// intact, but hides it from public reads. Use `setBlogCommentStatus` with
|
|
98
|
+
// `Trash` rather than a hard delete unless an admin explicitly removes it.
|
|
99
|
+
export async function softDeleteBlogComment(prisma, id) {
|
|
100
|
+
return setBlogCommentStatus(prisma, id, CommentStatus.Trash);
|
|
101
|
+
}
|
|
102
|
+
export async function countRecentCommentsByAuthor(prisma, authorId, windowMs) {
|
|
103
|
+
const since = new Date(Date.now() - windowMs);
|
|
104
|
+
return prisma.blogComment.count({
|
|
105
|
+
where: {
|
|
106
|
+
authorId,
|
|
107
|
+
createdAt: { gte: since },
|
|
108
|
+
},
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=blogCommentDbUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blogCommentDbUtils.js","sourceRoot":"","sources":["../../../src/utils/blog/blogCommentDbUtils.ts"],"names":[],"mappings":"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"}
|
|
@@ -45,4 +45,14 @@ export declare function connectOrCreateTags(prisma: PrismaClient, tagNames: stri
|
|
|
45
45
|
}[]>;
|
|
46
46
|
export declare function getPopularBlogPosts(prisma: PrismaClient, limit?: number): Promise<BlogPostExt[]>;
|
|
47
47
|
export declare function getRecentBlogPosts(prisma: PrismaClient, limit?: number): Promise<BlogPostExt[]>;
|
|
48
|
+
export interface RelatedBlogPost {
|
|
49
|
+
id: string;
|
|
50
|
+
slug: string | null;
|
|
51
|
+
title: string;
|
|
52
|
+
excerpt: string | null;
|
|
53
|
+
coverImage: string | null;
|
|
54
|
+
readTime: number | null;
|
|
55
|
+
publishedAt: Date | null;
|
|
56
|
+
}
|
|
57
|
+
export declare function getRelatedBlogPosts(prisma: PrismaClient, postId: string, limit?: number): Promise<RelatedBlogPost[]>;
|
|
48
58
|
//# sourceMappingURL=blogDbUtils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blogDbUtils.d.ts","sourceRoot":"","sources":["../../../src/utils/blog/blogDbUtils.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"blogDbUtils.d.ts","sourceRoot":"","sources":["../../../src/utils/blog/blogDbUtils.ts"],"names":[],"mappings":"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"}
|
|
@@ -219,4 +219,75 @@ export async function getRecentBlogPosts(prisma, limit = 5) {
|
|
|
219
219
|
});
|
|
220
220
|
return posts;
|
|
221
221
|
}
|
|
222
|
+
// Score candidate posts by (1) tag overlap with the source post, (2) shared
|
|
223
|
+
// category, then (3) recency. Drives the "Related posts" module that internal-
|
|
224
|
+
// links blog detail pages -- a major SEO lever per the backlink/SEO plan.
|
|
225
|
+
// Falls back to recent same-category posts when the source has no tags.
|
|
226
|
+
export async function getRelatedBlogPosts(prisma, postId, limit = 4) {
|
|
227
|
+
const source = await prisma.blogPost.findUnique({
|
|
228
|
+
where: { id: postId },
|
|
229
|
+
select: {
|
|
230
|
+
id: true,
|
|
231
|
+
categoryId: true,
|
|
232
|
+
tags: { select: { id: true } },
|
|
233
|
+
},
|
|
234
|
+
});
|
|
235
|
+
if (!source) {
|
|
236
|
+
return [];
|
|
237
|
+
}
|
|
238
|
+
const tagIds = source.tags.map((t) => t.id);
|
|
239
|
+
const orClauses = [];
|
|
240
|
+
if (tagIds.length > 0) {
|
|
241
|
+
orClauses.push({ tags: { some: { id: { in: tagIds } } } });
|
|
242
|
+
}
|
|
243
|
+
if (source.categoryId) {
|
|
244
|
+
orClauses.push({ categoryId: source.categoryId });
|
|
245
|
+
}
|
|
246
|
+
const where = {
|
|
247
|
+
id: { not: postId },
|
|
248
|
+
status: BlogStatus.Published,
|
|
249
|
+
publishedAt: { not: null },
|
|
250
|
+
...(orClauses.length > 0 ? { OR: orClauses } : {}),
|
|
251
|
+
};
|
|
252
|
+
const candidates = await prisma.blogPost.findMany({
|
|
253
|
+
where,
|
|
254
|
+
select: {
|
|
255
|
+
id: true,
|
|
256
|
+
slug: true,
|
|
257
|
+
title: true,
|
|
258
|
+
excerpt: true,
|
|
259
|
+
coverImage: true,
|
|
260
|
+
readTime: true,
|
|
261
|
+
publishedAt: true,
|
|
262
|
+
categoryId: true,
|
|
263
|
+
tags: { select: { id: true } },
|
|
264
|
+
},
|
|
265
|
+
orderBy: { publishedAt: 'desc' },
|
|
266
|
+
take: limit * 4,
|
|
267
|
+
});
|
|
268
|
+
const scored = candidates.map((c) => {
|
|
269
|
+
const sharedTagCount = c.tags.filter((t) => tagIds.includes(t.id)).length;
|
|
270
|
+
const sharedCategory = source.categoryId && c.categoryId === source.categoryId ? 1 : 0;
|
|
271
|
+
const recency = c.publishedAt ? c.publishedAt.getTime() : 0;
|
|
272
|
+
return { c, sharedTagCount, sharedCategory, recency };
|
|
273
|
+
});
|
|
274
|
+
scored.sort((a, b) => {
|
|
275
|
+
if (b.sharedTagCount !== a.sharedTagCount) {
|
|
276
|
+
return b.sharedTagCount - a.sharedTagCount;
|
|
277
|
+
}
|
|
278
|
+
if (b.sharedCategory !== a.sharedCategory) {
|
|
279
|
+
return b.sharedCategory - a.sharedCategory;
|
|
280
|
+
}
|
|
281
|
+
return b.recency - a.recency;
|
|
282
|
+
});
|
|
283
|
+
return scored.slice(0, limit).map(({ c }) => ({
|
|
284
|
+
id: c.id,
|
|
285
|
+
slug: c.slug,
|
|
286
|
+
title: c.title,
|
|
287
|
+
excerpt: c.excerpt,
|
|
288
|
+
coverImage: c.coverImage,
|
|
289
|
+
readTime: c.readTime,
|
|
290
|
+
publishedAt: c.publishedAt,
|
|
291
|
+
}));
|
|
292
|
+
}
|
|
222
293
|
//# sourceMappingURL=blogDbUtils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blogDbUtils.js","sourceRoot":"","sources":["../../../src/utils/blog/blogDbUtils.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"blogDbUtils.js","sourceRoot":"","sources":["../../../src/utils/blog/blogDbUtils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* USPS EDDM flat minimum: 6.125" × 11" (one dimension must be at least 11").
|
|
3
|
+
* Product standard used by Flyer Blast: 6.25" × 11" portrait.
|
|
4
|
+
*/
|
|
5
|
+
export declare const FLYER_EDDM_WIDTH_IN = 6.25;
|
|
6
|
+
export declare const FLYER_EDDM_HEIGHT_IN = 11;
|
|
7
|
+
export declare const FLYER_EDDM_MIN_WIDTH_IN = 6.125;
|
|
8
|
+
export declare const FLYER_EDDM_MIN_HEIGHT_IN = 11;
|
|
9
|
+
/** USPS EDDM Retail per-piece postage (2026 — verify periodically). */
|
|
10
|
+
export declare const USPS_EDDM_RETAIL_PER_PIECE_CENTS = 24.7;
|
|
11
|
+
/**
|
|
12
|
+
* USPS EDDM Retail minimum mailpieces per mailing (saturation).
|
|
13
|
+
* Aligns with starter tier lower bound in `FLYER_PRICING_TIERS`.
|
|
14
|
+
*/
|
|
15
|
+
export declare const USPS_EDDM_RETAIL_MIN_MAILPIECES = 200;
|
|
16
|
+
export type FlyerPricingTierId = "starter" | "neighborhood" | "district" | "metro";
|
|
17
|
+
export interface FlyerTierQuote {
|
|
18
|
+
tierId: FlyerPricingTierId;
|
|
19
|
+
label: string;
|
|
20
|
+
minHouseholds: number;
|
|
21
|
+
maxHouseholds: number;
|
|
22
|
+
hostPriceCents: number;
|
|
23
|
+
}
|
|
24
|
+
export declare const FLYER_PRICING_TIERS: FlyerTierQuote[];
|
|
25
|
+
/** Default sponsor slot list prices (Utah / intermountain — cents). */
|
|
26
|
+
export declare const FLYER_SPONSOR_DEFAULT_FEATURED_CENTS = 10000;
|
|
27
|
+
export declare const FLYER_SPONSOR_DEFAULT_SUPPORTING_CENTS = 5000;
|
|
28
|
+
export declare function isEddmFlatSizeCompliant(widthIn: number, heightIn: number): boolean;
|
|
29
|
+
/**
|
|
30
|
+
* Map total selected households to a pricing tier. Returns null if below minimum (200 for EDDM Retail).
|
|
31
|
+
*/
|
|
32
|
+
export declare function quoteFlyerTierForHouseholds(totalHouseholds: number): FlyerTierQuote | null;
|
|
33
|
+
export declare function computeHostTotalAfterSponsors(printPostageCostCents: number, sponsorRevenueCents: number): number;
|
|
34
|
+
/** Haversine distance in miles between two WGS84 points. */
|
|
35
|
+
export declare function distanceMiles(lat1: number, lng1: number, lat2: number, lng2: number): number;
|
|
36
|
+
/** URL path for the public QR scan endpoint (prepend API origin in clients). */
|
|
37
|
+
export declare function flyerQrScanPath(campaignQrSlug: string): string;
|
|
38
|
+
/**
|
|
39
|
+
* Short slug for campaign QR (avoid ambiguous chars); unique enforced in DB.
|
|
40
|
+
*/
|
|
41
|
+
export declare function generateFlyerCampaignSlug(): string;
|
|
42
|
+
//# sourceMappingURL=flyerUtils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flyerUtils.d.ts","sourceRoot":"","sources":["../../src/utils/flyerUtils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,mBAAmB,OAAO,CAAC;AACxC,eAAO,MAAM,oBAAoB,KAAK,CAAC;AACvC,eAAO,MAAM,uBAAuB,QAAQ,CAAC;AAC7C,eAAO,MAAM,wBAAwB,KAAK,CAAC;AAE3C,uEAAuE;AACvE,eAAO,MAAM,gCAAgC,OAAO,CAAC;AAErD;;;GAGG;AACH,eAAO,MAAM,+BAA+B,MAAM,CAAC;AAEnD,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,cAAc,GAAG,UAAU,GAAG,OAAO,CAAC;AAEnF,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,kBAAkB,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,eAAO,MAAM,mBAAmB,EAAE,cAAc,EA6B/C,CAAC;AAEF,uEAAuE;AACvE,eAAO,MAAM,oCAAoC,QAAQ,CAAC;AAC1D,eAAO,MAAM,sCAAsC,OAAO,CAAC;AAE3D,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAIlF;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CACzC,eAAe,EAAE,MAAM,GACtB,cAAc,GAAG,IAAI,CAkBvB;AAED,wBAAgB,6BAA6B,CAC3C,qBAAqB,EAAE,MAAM,EAC7B,mBAAmB,EAAE,MAAM,GAC1B,MAAM,CAER;AAID,4DAA4D;AAC5D,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,GACX,MAAM,CAUR;AAED,gFAAgF;AAChF,wBAAgB,eAAe,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,CAE9D;AAED;;GAEG;AACH,wBAAgB,yBAAyB,IAAI,MAAM,CAOlD"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* USPS EDDM flat minimum: 6.125" × 11" (one dimension must be at least 11").
|
|
3
|
+
* Product standard used by Flyer Blast: 6.25" × 11" portrait.
|
|
4
|
+
*/
|
|
5
|
+
export const FLYER_EDDM_WIDTH_IN = 6.25;
|
|
6
|
+
export const FLYER_EDDM_HEIGHT_IN = 11;
|
|
7
|
+
export const FLYER_EDDM_MIN_WIDTH_IN = 6.125;
|
|
8
|
+
export const FLYER_EDDM_MIN_HEIGHT_IN = 11;
|
|
9
|
+
/** USPS EDDM Retail per-piece postage (2026 — verify periodically). */
|
|
10
|
+
export const USPS_EDDM_RETAIL_PER_PIECE_CENTS = 24.7;
|
|
11
|
+
/**
|
|
12
|
+
* USPS EDDM Retail minimum mailpieces per mailing (saturation).
|
|
13
|
+
* Aligns with starter tier lower bound in `FLYER_PRICING_TIERS`.
|
|
14
|
+
*/
|
|
15
|
+
export const USPS_EDDM_RETAIL_MIN_MAILPIECES = 200;
|
|
16
|
+
export const FLYER_PRICING_TIERS = [
|
|
17
|
+
{
|
|
18
|
+
tierId: "starter",
|
|
19
|
+
label: "Starter",
|
|
20
|
+
minHouseholds: 200,
|
|
21
|
+
maxHouseholds: 499,
|
|
22
|
+
hostPriceCents: 14900,
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
tierId: "neighborhood",
|
|
26
|
+
label: "Neighborhood",
|
|
27
|
+
minHouseholds: 500,
|
|
28
|
+
maxHouseholds: 1499,
|
|
29
|
+
hostPriceCents: 32900,
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
tierId: "district",
|
|
33
|
+
label: "District",
|
|
34
|
+
minHouseholds: 1500,
|
|
35
|
+
maxHouseholds: 3999,
|
|
36
|
+
hostPriceCents: 69900,
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
tierId: "metro",
|
|
40
|
+
label: "Metro",
|
|
41
|
+
minHouseholds: 4000,
|
|
42
|
+
maxHouseholds: 9999,
|
|
43
|
+
hostPriceCents: 139900,
|
|
44
|
+
},
|
|
45
|
+
];
|
|
46
|
+
/** Default sponsor slot list prices (Utah / intermountain — cents). */
|
|
47
|
+
export const FLYER_SPONSOR_DEFAULT_FEATURED_CENTS = 10000;
|
|
48
|
+
export const FLYER_SPONSOR_DEFAULT_SUPPORTING_CENTS = 5000;
|
|
49
|
+
export function isEddmFlatSizeCompliant(widthIn, heightIn) {
|
|
50
|
+
const long = Math.max(widthIn, heightIn);
|
|
51
|
+
const short = Math.min(widthIn, heightIn);
|
|
52
|
+
return long >= FLYER_EDDM_MIN_HEIGHT_IN && short >= FLYER_EDDM_MIN_WIDTH_IN;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Map total selected households to a pricing tier. Returns null if below minimum (200 for EDDM Retail).
|
|
56
|
+
*/
|
|
57
|
+
export function quoteFlyerTierForHouseholds(totalHouseholds) {
|
|
58
|
+
if (totalHouseholds < FLYER_PRICING_TIERS[0].minHouseholds) {
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
for (const tier of FLYER_PRICING_TIERS) {
|
|
62
|
+
if (totalHouseholds >= tier.minHouseholds &&
|
|
63
|
+
totalHouseholds <= tier.maxHouseholds) {
|
|
64
|
+
return tier;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
// Above metro max — use metro as ceiling for MVP
|
|
68
|
+
const last = FLYER_PRICING_TIERS[FLYER_PRICING_TIERS.length - 1];
|
|
69
|
+
if (totalHouseholds > last.maxHouseholds) {
|
|
70
|
+
return last;
|
|
71
|
+
}
|
|
72
|
+
return null;
|
|
73
|
+
}
|
|
74
|
+
export function computeHostTotalAfterSponsors(printPostageCostCents, sponsorRevenueCents) {
|
|
75
|
+
return Math.max(0, printPostageCostCents - sponsorRevenueCents);
|
|
76
|
+
}
|
|
77
|
+
const EARTH_RADIUS_MI = 3958.8;
|
|
78
|
+
/** Haversine distance in miles between two WGS84 points. */
|
|
79
|
+
export function distanceMiles(lat1, lng1, lat2, lng2) {
|
|
80
|
+
const rlat1 = (lat1 * Math.PI) / 180;
|
|
81
|
+
const rlat2 = (lat2 * Math.PI) / 180;
|
|
82
|
+
const dLat = rlat2 - rlat1;
|
|
83
|
+
const dLng = ((lng2 - lng1) * Math.PI) / 180;
|
|
84
|
+
const a = Math.sin(dLat / 2) * Math.sin(dLat / 2) +
|
|
85
|
+
Math.cos(rlat1) * Math.cos(rlat2) * Math.sin(dLng / 2) * Math.sin(dLng / 2);
|
|
86
|
+
const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
|
|
87
|
+
return EARTH_RADIUS_MI * c;
|
|
88
|
+
}
|
|
89
|
+
/** URL path for the public QR scan endpoint (prepend API origin in clients). */
|
|
90
|
+
export function flyerQrScanPath(campaignQrSlug) {
|
|
91
|
+
return `/api/flyer/qr-scan?c=${encodeURIComponent(campaignQrSlug)}`;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Short slug for campaign QR (avoid ambiguous chars); unique enforced in DB.
|
|
95
|
+
*/
|
|
96
|
+
export function generateFlyerCampaignSlug() {
|
|
97
|
+
const alphabet = "23456789abcdefghjkmnpqrstuvwxyz";
|
|
98
|
+
let out = "fb";
|
|
99
|
+
for (let i = 0; i < 12; i++) {
|
|
100
|
+
out += alphabet[Math.floor(Math.random() * alphabet.length)];
|
|
101
|
+
}
|
|
102
|
+
return out;
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=flyerUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flyerUtils.js","sourceRoot":"","sources":["../../src/utils/flyerUtils.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/urlUtils.d.ts
CHANGED
|
@@ -1,3 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Canonical frontend origin for share links, embeds, QR codes, etc.
|
|
3
|
+
*
|
|
4
|
+
* Browser-hostname-driven (NOT env-var driven) so the answer is correct in any
|
|
5
|
+
* deployed environment — including ones where `process.env.ENVIRONMENT` /
|
|
6
|
+
* `BASH_ENV` aren't inlined into the bundle (Vite only inlines REACT_APP_* /
|
|
7
|
+
* VITE_* / NODE_ENV / PUBLIC_URL). Previously this depended on `isProduction()`
|
|
8
|
+
* and produced URLs like `https://bash.community:3000/bash/...` in production,
|
|
9
|
+
* which broke Facebook/iMessage previews because `:3000` isn't publicly reachable.
|
|
10
|
+
*/
|
|
1
11
|
export declare function getFrontendHost(): string;
|
|
2
12
|
export declare function getBackendHost(): string;
|
|
3
13
|
export declare function getSsrBashDetailUrl(bashEventId: string | undefined): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"urlUtils.d.ts","sourceRoot":"","sources":["../../src/utils/urlUtils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"urlUtils.d.ts","sourceRoot":"","sources":["../../src/utils/urlUtils.ts"],"names":[],"mappings":"AA2BA;;;;;;;;;GASG;AACH,wBAAgB,eAAe,IAAI,MAAM,CASxC;AAED,wBAAgB,cAAc,IAAI,MAAM,CAgBvC;AAED,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAO3E;AAED,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,CA0B7E;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,CA0BvE;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,sBAAsB,CACpC,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,MAAM,GACd,MAAM,CAIR;AAED;;;;;;;;;GASG;AACH,wBAAsB,kBAAkB,CAAC,CAAC,EACxC,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAC3B,SAAS,GAAE,MAAmC,EAC9C,SAAS,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,EACxD,UAAU,GAAE,MAAU,GACrB,OAAO,CAAC,CAAC,CAAC,CA2BZ;AAED;;;;;;GAMG;AACH,wBAAgB,2BAA2B,CACzC,WAAW,EAAE,MAAM,EACnB,SAAS,GAAE,MAAmC,EAC9C,SAAS,CAAC,EAAE,MAAM,IAAI,GACrB,IAAI,CA8BN;AAED;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,MAAM,CAiCzE"}
|