@@ -26,35 +26,10 @@ exports.post = function*() {
2626
2727 var self = this ;
2828
29- var slugs = ( function readSlugs ( request ) {
30- var slugs = request . body . slug || [ ] ;
31-
32- if ( ! Array . isArray ( slugs ) ) {
33- slugs = [ slugs ] ;
34- }
35- slugs = slugs . map ( String ) ;
36- return slugs ;
37- } ) ( this . request ) ;
38-
39- const newsletters = yield Newsletter . find ( {
40- slug : {
41- $in : slugs
42- }
43- } ) . exec ( ) ;
44-
45- const newsletterIds = _ . pluck ( newsletters , '_id' ) ;
46-
47- if ( ! newsletters . length ) {
48- this . throw ( 404 , "Нет такой рассылки" ) ;
49- }
50-
51- // important:
52- // remove has priority, because may come with (default) replace
53- var action = this . request . body . remove ? ACTION_REMOVE :
54- this . request . body . replace ? ACTION_REPLACE : ACTION_ADD ;
55-
5629 var subscription ;
5730
31+ // read subscription first
32+ // if no subscription, error must come first before any other errors
5833 if ( this . request . body . accessKey ) {
5934 subscription = yield Subscription . findOne ( {
6035 accessKey : this . request . body . accessKey
@@ -73,6 +48,16 @@ exports.post = function*() {
7348
7449 var email = subscription ? subscription . email : this . request . body . email ;
7550
51+
52+ // may be empty (e.g. for remove request)
53+ var newsletterIds = yield readNewsletterIds . call ( this ) ;
54+
55+ // important:
56+ // remove has priority, because may come with (default) replace
57+ var action = this . request . body . remove ? ACTION_REMOVE :
58+ this . request . body . replace ? ACTION_REPLACE : ACTION_ADD ;
59+
60+
7661 // full access if user for himself OR accessKey is given
7762 var isFullAccess = this . user && this . user . email == this . request . body . email ||
7863 subscription && subscription . accessKey == this . request . body . accessKey ;
@@ -113,10 +98,11 @@ exports.post = function*() {
11398 newsletters : newsletterIds
11499 } ) ;
115100
116- yield * subscriptionAction . apply ( ) ;
101+ subscription = yield * subscriptionAction . apply ( ) ;
117102
118103 if ( action == ACTION_REMOVE ) {
119- return respond ( `Адрес ${ email } удалён из базы подписок` ) ;
104+ respond ( `Адрес ${ email } удалён из базы подписок.` ) ;
105+ return ;
120106 }
121107
122108 if ( subscription ) {
@@ -138,7 +124,7 @@ exports.post = function*() {
138124 } ) ;
139125 yield notify ( subscriptionAction ) ;
140126 }
141- respond ( `На адрес ${ email } направлен запрос подтверждения.` ) ;
127+ respond ( `На адрес ${ email } , если он был подписан, направлен запрос подтверждения.` ) ;
142128 return ;
143129 }
144130
@@ -156,3 +142,25 @@ exports.post = function*() {
156142
157143} ;
158144
145+
146+ function * readNewsletterIds ( ) {
147+ var slugs = ( function readSlugs ( request ) {
148+ var slugs = request . body . slug || [ ] ;
149+
150+ if ( ! Array . isArray ( slugs ) ) {
151+ slugs = [ slugs ] ;
152+ }
153+ slugs = slugs . map ( String ) ;
154+ return slugs ;
155+ } ) ( this . request ) ;
156+
157+ const newsletters = yield Newsletter . find ( {
158+ slug : {
159+ $in : slugs
160+ }
161+ } ) . exec ( ) ;
162+
163+ const newsletterIds = _ . pluck ( newsletters , '_id' ) ;
164+
165+ return newsletterIds ;
166+ }
0 commit comments