Add preconfirm_subscriptions to subscriber update. Closes #426.

This commit is contained in:
Kailash Nadh 2021-08-02 19:23:46 +05:30
parent fb48477aa7
commit e6566189ed
2 changed files with 16 additions and 6 deletions

View file

@ -44,9 +44,10 @@ type subsWrap struct {
type subUpdateReq struct { type subUpdateReq struct {
models.Subscriber models.Subscriber
RawAttribs json.RawMessage `json:"attribs"` RawAttribs json.RawMessage `json:"attribs"`
Lists pq.Int64Array `json:"lists"` Lists pq.Int64Array `json:"lists"`
ListUUIDs pq.StringArray `json:"list_uuids"` ListUUIDs pq.StringArray `json:"list_uuids"`
PreconfirmSubs bool `json:"preconfirm_subscriptions"`
} }
// subProfileData represents a subscriber's collated data in JSON // subProfileData represents a subscriber's collated data in JSON
@ -327,12 +328,18 @@ func handleUpdateSubscriber(c echo.Context) error {
} }
} }
subStatus := models.SubscriptionStatusUnconfirmed
if req.PreconfirmSubs {
subStatus = models.SubscriptionStatusConfirmed
}
_, err := app.queries.UpdateSubscriber.Exec(id, _, err := app.queries.UpdateSubscriber.Exec(id,
strings.ToLower(strings.TrimSpace(req.Email)), strings.ToLower(strings.TrimSpace(req.Email)),
strings.TrimSpace(req.Name), strings.TrimSpace(req.Name),
req.Status, req.Status,
req.RawAttribs, req.RawAttribs,
req.Lists) req.Lists,
subStatus)
if err != nil { if err != nil {
app.log.Printf("error updating subscriber: %v", err) app.log.Printf("error updating subscriber: %v", err)
return echo.NewHTTPError(http.StatusInternalServerError, return echo.NewHTTPError(http.StatusInternalServerError,
@ -345,7 +352,10 @@ func handleUpdateSubscriber(c echo.Context) error {
if err != nil { if err != nil {
return err return err
} }
_, _ = sendOptinConfirmation(sub, []int64(req.Lists), app)
if !req.PreconfirmSubs {
_, _ = sendOptinConfirmation(sub, []int64(req.Lists), app)
}
return c.JSON(http.StatusOK, okResp{sub}) return c.JSON(http.StatusOK, okResp{sub})
} }

View file

@ -132,7 +132,7 @@ INSERT INTO subscriber_lists (subscriber_id, list_id, status)
VALUES( VALUES(
(SELECT id FROM s), (SELECT id FROM s),
UNNEST($6), UNNEST($6),
(CASE WHEN $4='blocklisted' THEN 'unsubscribed'::subscription_status ELSE 'unconfirmed' END) (CASE WHEN $4='blocklisted' THEN 'unsubscribed'::subscription_status ELSE $7::subscription_status END)
) )
ON CONFLICT (subscriber_id, list_id) DO UPDATE ON CONFLICT (subscriber_id, list_id) DO UPDATE
SET status = (CASE WHEN $4='blocklisted' THEN 'unsubscribed'::subscription_status ELSE subscriber_lists.status END); SET status = (CASE WHEN $4='blocklisted' THEN 'unsubscribed'::subscription_status ELSE subscriber_lists.status END);