| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- const config = require('../../../db/data-generator/config.json')
- const tagger = require('./tagger')
-
- /**
- * Class to hold our retrieved profile information
- * in a convenient wrapper
- * !: This needs to match the responseSchema in profiles.js
- */
- class CompleteProfile {
- constructor(profile, type, includeResponses = false) {
- this.user_id = profile.user_id // int user_id
- this.profile_id = profile.profile_id // int profile_id
- this.user_name = profile.user.user_name // string user_name
- this.user_email = profile.user.user_email
- this.responses = []
- this.user_type = type
- this.tags = profile.tags.filter(t => t.category != 'reveal')
-
- // TODO: generalize this for multiple images, and languages
- this.profile_description = ''
- this.profile_media = []
- this.profile_languages = []
- this.profile_prefs = {}
-
- // TODO: Use reveal tags to add or remove information from profile!
- // TODO: ---
- // TODO: Use reveal tags to rebuild profile based on group/membership
- // TODO: and include for certain profiles
-
- this.reveal = profile.tags.filter(t => t.category == 'reveal')
- // TODO: filter these correctly
- if (profile?.responses?.length && includeResponses) {
- // [] of all "profile" responses
- this.responses = profile.responses
- // image, language, duration, presence, blurb, urgency, role, pronouns, distance
- const prefs = ['zipcode', 'duration', 'presence', 'urgency', 'role', 'pronouns', 'distance']
- const prefsKeys = config.prefKeys
- prefs.forEach((pref, i) => {
- this.profile_prefs[pref] = this.responses.filter(
- r => r.response_key_id === prefsKeys[i]
- )[0]
- })
- this.profile_description = this.responses.filter(r => r.response_key_id === config.blurbKey).map(r => r.val)[0]
- this.profile_media = this.responses.filter(r => r.response_key_id === config.mediaKey).map(r => r.val)
- this.profile_languages = this.responses.filter(r => r.response_key_id === config.langKey).map(r => r.val)
- }
- }
- }
-
- const makeCompleteProfiles = (profileIdArray, profilesEntries, type, includeResponses, tagLookup) => {
- const completeProfiles = []
- profileIdArray.forEach(pid => {
- profilesEntries.forEach(entry => {
- if (entry.profile_id == pid) {
- const complete = new CompleteProfile(entry, type, includeResponses)
- tagger.setProfileTags(entry, complete, tagLookup)
- completeProfiles.push(complete)
- }
- })
- })
- return completeProfiles
- }
- const makeCompleteProfilesFromProfile = (profilesEntries, type, tagLookup)=> {
- profilesEntries.forEach(profile => {
- tagger.setProfileTags(profile, profile, tagLookup)
- })
-
- //** Get responses asociated with each profile_id */
- return profilesEntries.map(profile => {
- return new CompleteProfile(profile, type)
- })
- }
-
- module.exports = {
- CompleteProfile,
- makeCompleteProfiles,
- makeCompleteProfilesFromProfile
- }
|