Skip to content
This repository was archived by the owner on Mar 4, 2025. It is now read-only.

Commit f9cd962

Browse files
author
vikasrohit
committed
Merge pull request #816 from appirio-tech/feature/mailchimp-api-preference-api
Feature/mailchimp api preference api
2 parents a8d5005 + 645a6a4 commit f9cd962

File tree

5 files changed

+65
-60
lines changed

5 files changed

+65
-60
lines changed

app/services/api.service.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ import _ from 'lodash'
7474
case 'SUBMISSIONS':
7575
case 'USER':
7676
return _getRestangularV3(CONSTANTS.AUTH_API_URL)
77-
case 'MAILCHIMP':
77+
case 'PREFERENCES':
7878
return _getRestangularV3(CONSTANTS.INTERNAL_API_URL)
7979
default:
8080
return _getRestangularV3()

app/services/mailchimp.service.js renamed to app/services/userPreferences.service.js

Lines changed: 18 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -3,24 +3,24 @@ import angular from 'angular'
33
(function() {
44
'use strict'
55

6-
angular.module('tc.services').factory('MailchimpService', MailchimpService)
6+
angular.module('tc.services').factory('UserPreferencesService', UserPreferencesService)
77

8-
MailchimpService.$inject = ['$http', 'logger', 'Restangular', 'CONSTANTS', 'ApiService', '$q']
8+
UserPreferencesService.$inject = ['$http', 'logger', 'Restangular', 'CONSTANTS', 'ApiService', '$q']
99

10-
function MailchimpService($http, logger, Restangular, CONSTANTS, ApiService, $q) {
11-
var mailchimpApi = ApiService.getApiServiceProvider('MAILCHIMP')
10+
function UserPreferencesService($http, logger, Restangular, CONSTANTS, ApiService, $q) {
11+
var mailchimpApi = ApiService.getApiServiceProvider('PREFERENCES')
1212
var service = {
13-
getMemberSubscription: getMemberSubscription,
14-
addSubscription: addSubscription
13+
getEmailPreferences: getEmailPreferences,
14+
saveEmailPreferences: saveEmailPreferences
1515
}
1616
return service
1717

18-
function getMemberSubscription(user) {
18+
function getEmailPreferences(user) {
1919
return $q(function(resolve, reject) {
20-
mailchimpApi.one('mailchimp/lists', CONSTANTS.MAILCHIMP_LIST_ID)
21-
.one('members', user.userId).get()
20+
mailchimpApi.one('users', user.userId)
21+
.one('preferences', 'email').get()
2222
.then(function(resp) {
23-
resolve(resp)
23+
resolve(resp.subscriptions)
2424
})
2525
.catch(function(err) {
2626
if (err.status === 404) {
@@ -40,23 +40,22 @@ import angular from 'angular'
4040
}
4141

4242

43-
function addSubscription(user, preferences) {
44-
var subscription = {
45-
userId: user.userId,
43+
function saveEmailPreferences(user, preferences) {
44+
var settings = {
4645
firstName: user.firstName,
4746
lastName: user.lastName,
48-
interests: {}
47+
subscriptions: {}
4948
}
5049
if (!preferences) {
51-
subscription.interests[CONSTANTS.MAILCHIMP_NL_GEN] = true
50+
settings.subscriptions['TOPCODER_NL_GEN'] = true
5251
} else {
53-
subscription.interests = preferences
52+
settings.subscriptions = preferences
5453
}
5554
return $q(function(resolve, reject) {
56-
mailchimpApi.one('mailchimp/lists', CONSTANTS.MAILCHIMP_LIST_ID)
57-
.customPUT(subscription, 'members')
55+
mailchimpApi.one('users', user.userId)
56+
.customPUT({ param: settings }, 'preferences/email')
5857
.then(function(resp) {
59-
resolve(resp)
58+
resolve(resp.subscriptions)
6059
})
6160
.catch(function(err) {
6261
logger.error('Error adding member to subscription list', err)

app/settings/email/email.controller.js

Lines changed: 24 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@ import angular from 'angular'
55

66
angular.module('tc.settings').controller('EmailSettingsController', EmailSettingsController)
77

8-
EmailSettingsController.$inject = ['$rootScope', 'userData', 'ProfileService', 'MailchimpService', 'logger', 'CONSTANTS', 'toaster', '$q', '$scope']
8+
EmailSettingsController.$inject = ['$rootScope', 'userData', 'ProfileService', 'UserPreferencesService', 'logger', 'CONSTANTS', 'toaster', '$q', '$scope']
99

10-
function EmailSettingsController($rootScope, userData, ProfileService, MailchimpService, logger, CONSTANTS, toaster, $q, $scope) {
10+
function EmailSettingsController($rootScope, userData, ProfileService, UserPreferencesService, logger, CONSTANTS, toaster, $q, $scope) {
1111
var vm = this
1212
vm.loading = false
1313
vm.saving = false
@@ -19,42 +19,42 @@ import angular from 'angular'
1919
function activate() {
2020
vm.newsletters = [
2121
{
22-
id: CONSTANTS.MAILCHIMP_NL_GEN,
22+
id: 'TOPCODER_NL_GEN',
2323
name: 'General Newsletter',
2424
desc: 'News summary from all tracks and programs',
2525
enabled: false,
2626
dirty: false
2727
},
2828
{
29-
id: CONSTANTS.MAILCHIMP_NL_DESIGN,
29+
id: 'TOPCODER_NL_DESIGN',
3030
name: 'Design Newsletter',
3131
desc: 'Website, mobile, and product design; UI and UX',
3232
enabled: false,
3333
dirty: false
3434
},
3535
{
36-
id: CONSTANTS.MAILCHIMP_NL_DEV,
36+
id: 'TOPCODER_NL_DEV',
3737
name: 'Development Newsletter',
3838
desc: 'Software architecture, component assembly, application development, and bug hunting',
3939
enabled: false,
4040
dirty: false
4141
},
4242
{
43-
id: CONSTANTS.MAILCHIMP_NL_DATA,
43+
id: 'TOPCODER_NL_DATA',
4444
name: 'Data Science Newsletter',
4545
desc: 'Algorithm and data structures, statistical analysis',
4646
enabled: false,
4747
dirty: false
4848
},
4949
{
50-
id: CONSTANTS.MAILCHIMP_NL_IOS,
50+
id: 'TOPCODER_NL_IOS',
5151
name: 'iOS Community Newsletter',
5252
desc: 'Mobile app design and development for iOS, with Swift emphasis',
5353
enabled: false,
5454
dirty: false
5555
},
5656
{
57-
id: CONSTANTS.MAILCHIMP_NL_TCO,
57+
id: 'TOPCODER_NL_TCO',
5858
name: 'TCO Newsletter',
5959
desc: 'Our annual online and onsite tournament to celebrate and reward the community',
6060
enabled: false,
@@ -63,29 +63,35 @@ import angular from 'angular'
6363
]
6464

6565
vm.loading = true
66-
return MailchimpService.getMemberSubscription(userData).then(function(subscription) {
66+
return UserPreferencesService.getEmailPreferences(userData).then(function(subscription) {
6767
vm.loading = false
6868
if (!subscription) {
6969
// add member to the list with default preferences
70-
MailchimpService.addSubscription(userData).then(function(resp) {
71-
logger.debug(resp)
70+
UserPreferencesService.saveEmailPreferences(userData).then(function(resp) {
71+
logger.debug(JSON.stringify(resp))
72+
validateState(resp)
73+
7274
}).catch(function(err) {
7375
// no error to user
7476
//TODO some error alert to community admin
7577
logger.debug('error in adding user to member list')
7678
})
7779
} else {
78-
if (subscription.interests) {
79-
vm.newsletters.forEach(function(newsletter) {
80-
if (subscription.interests[newsletter.id]) {
81-
newsletter.enabled = true
82-
}
83-
})
80+
if (subscription) {
81+
validateState(subscription)
8482
}
8583
}
8684
})
8785
}
8886

87+
function validateState(subscription) {
88+
vm.newsletters.forEach(function(newsletter) {
89+
if (subscription[newsletter.id]) {
90+
newsletter.enabled = true
91+
}
92+
})
93+
}
94+
8995
function isDirty() {
9096
var dirty = false
9197
vm.newsletters.forEach(function(newsletter) {
@@ -102,7 +108,7 @@ import angular from 'angular'
102108
vm.newsletters.forEach(function(newsletter) {
103109
preferences[newsletter.id] = newsletter.enabled
104110
})
105-
MailchimpService.addSubscription(userData, preferences).then(function(resp) {
111+
UserPreferencesService.saveEmailPreferences(userData, preferences).then(function(resp) {
106112
vm.loading = false
107113
vm.saving = false
108114
// reset dirty state for all newsletter options

app/skill-picker/skill-picker.controller.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@ import _ from 'lodash'
66

77
angular.module('tc.skill-picker').controller('SkillPickerController', SkillPickerController)
88

9-
SkillPickerController.$inject = ['$scope', 'CONSTANTS', 'ProfileService', '$state', 'userProfile', 'featuredSkills', 'logger', 'toaster', 'MemberCertService', '$q', 'MailchimpService']
9+
SkillPickerController.$inject = ['$scope', 'CONSTANTS', 'ProfileService', '$state', 'userProfile', 'featuredSkills', 'logger', 'toaster', 'MemberCertService', '$q', 'UserPreferencesService']
1010

11-
function SkillPickerController($scope, CONSTANTS, ProfileService, $state, userProfile, featuredSkills, logger, toaster, MemberCertService, $q, MailchimpService) {
11+
function SkillPickerController($scope, CONSTANTS, ProfileService, $state, userProfile, featuredSkills, logger, toaster, MemberCertService, $q, UserPreferencesService) {
1212
var vm = this
1313
vm.ASSET_PREFIX = CONSTANTS.ASSET_PREFIX
1414
vm.IOS_PROGRAM_ID = CONSTANTS.SWIFT_PROGRAM_ID
@@ -139,10 +139,10 @@ import _ from 'lodash'
139139
}
140140

141141
function addToMailingList() {
142-
return MailchimpService.getMemberSubscription(userProfile).then(function(subscription) {
142+
return UserPreferencesService.getEmailPreferences(userProfile).then(function(subscription) {
143143
logger.debug(subscription)
144144
if (!subscription) {
145-
return MailchimpService.addSubscription(userProfile).then(function(resp) {
145+
return UserPreferencesService.saveEmailPreferences(userProfile).then(function(resp) {
146146
logger.debug(resp)
147147
}).catch(function(err) {
148148
// no error to user

app/skill-picker/skill-picker.spec.js

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,12 @@ const mockData = require('../../tests/test-helpers/mock-data')
33

44
describe('Skill Picker Controller', function() {
55
var vm
6-
var toasterSvc, memberCertService, profileService, mailchimpService, state
6+
var toasterSvc, memberCertService, profileService, userPrefSvc, state
77
var mockProfile = mockData.getMockProfile()
88

99
beforeEach(function() {
1010
bard.appModule('tc.skill-picker')
11-
bard.inject(this, '$controller', '$rootScope', '$q', 'MemberCertService', 'ProfileService', 'MailchimpService', 'toaster', 'CONSTANTS')
11+
bard.inject(this, '$controller', '$rootScope', '$q', 'MemberCertService', 'ProfileService', 'UserPreferencesService', 'toaster', 'CONSTANTS')
1212

1313
memberCertService = MemberCertService
1414
profileService = ProfileService
@@ -52,8 +52,8 @@ describe('Skill Picker Controller', function() {
5252
return deferred.promise
5353
})
5454

55-
mailchimpService = MailchimpService
56-
sinon.stub(mailchimpService, 'getMemberSubscription', function(user) {
55+
userPrefSvc = UserPreferencesService
56+
sinon.stub(userPrefSvc, 'getEmailPreferences', function(user) {
5757
var deferred = $q.defer()
5858
if (user.userId === 10336829) {
5959
deferred.resolve()
@@ -65,7 +65,7 @@ describe('Skill Picker Controller', function() {
6565
}
6666
return deferred.promise
6767
})
68-
sinon.stub(mailchimpService, 'addSubscription', function(user) {
68+
sinon.stub(userPrefSvc, 'saveEmailPreferences', function(user) {
6969
var deferred = $q.defer()
7070
if (user.userId === 10336829) {
7171
deferred.resolve()
@@ -140,17 +140,17 @@ describe('Skill Picker Controller', function() {
140140

141141
it('should call mailchimp service to add subscription', function() {
142142
expect(vm).to.exist
143-
// getMemberSubscription should always be called
144-
expect(mailchimpService.getMemberSubscription).to.be.calledOnce
145-
// addSubscription should be called once if not subscribed
146-
// getMemberSubscription service mock returns null for mockProfile.userId
147-
expect(mailchimpService.addSubscription).to.be.calledOnce
143+
// getEmailPreferences should always be called
144+
expect(userPrefSvc.getEmailPreferences).to.be.calledOnce
145+
// saveEmailPreferences should be called once if not subscribed
146+
// getEmailPreferences service mock returns null for mockProfile.userId
147+
expect(userPrefSvc.saveEmailPreferences).to.be.calledOnce
148148
})
149149

150150
it('should not call mailchimp service to add subscription', function() {
151-
// reset getMemberSubscription, addSubscription spy's called count
152-
mailchimpService.getMemberSubscription.reset()
153-
mailchimpService.addSubscription.reset()
151+
// reset getEmailPreferences, saveEmailPreferences spy's called count
152+
userPrefSvc.getEmailPreferences.reset()
153+
userPrefSvc.saveEmailPreferences.reset()
154154
var scope = $rootScope.$new()
155155

156156
var profile = angular.copy(mockProfile)
@@ -164,11 +164,11 @@ describe('Skill Picker Controller', function() {
164164
})
165165
$rootScope.$digest()
166166
expect(vm).to.exist
167-
// getMemberSubscription should always be called
168-
expect(mailchimpService.getMemberSubscription).to.be.calledOnce
169-
// addSubscription should not be called if already subscribed
170-
// getMemberSubscription service mock returns valid object for userId 12345
171-
expect(mailchimpService.addSubscription).not.to.be.called
167+
// getEmailPreferences should always be called
168+
expect(userPrefSvc.getEmailPreferences).to.be.calledOnce
169+
// saveEmailPreferences should not be called if already subscribed
170+
// getEmailPreferences service mock returns valid object for userId 12345
171+
expect(userPrefSvc.saveEmailPreferences).not.to.be.called
172172
})
173173

174174
it('should add skill ', function() {

0 commit comments

Comments
 (0)