Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

grouping.service.js 2.6KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. import { db } from '../utils/db.js'
  2. import { Grouping, Profile } from '../entities/index.js'
  3. import { ref } from 'vue'
  4. /**
  5. * Get Memberships associated with a single Profile from the database and
  6. * create a class from the data and
  7. * validate the incoming against the schema
  8. * @param {number} profileId
  9. * @returns {array} instantiated Profile objects (see: /entites/profile)
  10. */
  11. const fetchMembershipsByProfileId = async profileId => {
  12. const validGroupingInstances = []
  13. let memberships
  14. try {
  15. memberships = await db.get(`/membership/${profileId}`)
  16. for (let membership of memberships) {
  17. const grouping = new Grouping(membership)
  18. // TODO: look here to see about current reveal issue -bh
  19. if (grouping.isValid()) {
  20. // Reformat incoming profile data into Profile entity
  21. grouping.profile = new Profile(grouping.profile)
  22. const targetTags = await db.get(
  23. `/profile/${grouping.profile.profile_id}/tags/${grouping.grouping_id}`,
  24. )
  25. const profileTags = await db.get(
  26. `/profile/${profileId}/tags/${grouping.grouping_id}`,
  27. )
  28. grouping.tags = [...targetTags, ...profileTags]
  29. grouping.revealedFromNotification = ref([])
  30. grouping._loading.value = false
  31. validGroupingInstances.push(grouping)
  32. }
  33. }
  34. } catch (error) {
  35. console.error(`[Grouping Service]: ${error}\ngroupings: ${memberships}`)
  36. }
  37. return validGroupingInstances
  38. }
  39. /**
  40. * Create memberships to a grouping between profileId and targetId
  41. * @param {number} profileId
  42. * @param {number} targetId
  43. * @param {string} groupingType
  44. * @returns {object} the created membership
  45. */
  46. const postMembershipByProfileId = async ({
  47. profileId,
  48. targetId,
  49. groupingType = 'match',
  50. }) => {
  51. const utcDateInSeconds = Date.now() / 1000
  52. const membership = {
  53. target_id: targetId,
  54. grouping_type: groupingType,
  55. grouping_name: `${utcDateInSeconds}_${profileId}_${targetId}`,
  56. }
  57. const membershipMatch = await db.post(
  58. `/membership/${profileId}/join`,
  59. membership,
  60. )
  61. return { membershipMatch, groupingName: membership.grouping_name }
  62. }
  63. const revealProfileInfo = async (membershipId, profileId, tagId) => {
  64. const revealed = await db.post(
  65. `/membership/${membershipId}/reveal?profile=${profileId}&tag=${tagId}`,
  66. )
  67. return revealed
  68. }
  69. export {
  70. fetchMembershipsByProfileId,
  71. postMembershipByProfileId,
  72. revealProfileInfo,
  73. }