Browse Source

Refactor `get-campaign` to accept uuid + get body

Kailash Nadh 5 years ago
parent
commit
3a9a2ef4ec
3 changed files with 9 additions and 5 deletions
  1. 3 3
      campaigns.go
  2. 1 1
      manager_db.go
  3. 5 1
      queries.sql

+ 3 - 3
campaigns.go

@@ -274,7 +274,7 @@ func handleUpdateCampaign(c echo.Context) error {
 	}
 
 	var cm models.Campaign
-	if err := app.queries.GetCampaign.Get(&cm, id); err != nil {
+	if err := app.queries.GetCampaign.Get(&cm, id, nil); err != nil {
 		if err == sql.ErrNoRows {
 			return echo.NewHTTPError(http.StatusBadRequest, "Campaign not found.")
 		}
@@ -337,7 +337,7 @@ func handleUpdateCampaignStatus(c echo.Context) error {
 	}
 
 	var cm models.Campaign
-	if err := app.queries.GetCampaign.Get(&cm, id); err != nil {
+	if err := app.queries.GetCampaign.Get(&cm, id, nil); err != nil {
 		if err == sql.ErrNoRows {
 			return echo.NewHTTPError(http.StatusBadRequest, "Campaign not found.")
 		}
@@ -412,7 +412,7 @@ func handleDeleteCampaign(c echo.Context) error {
 	}
 
 	var cm models.Campaign
-	if err := app.queries.GetCampaign.Get(&cm, id); err != nil {
+	if err := app.queries.GetCampaign.Get(&cm, id, nil); err != nil {
 		if err == sql.ErrNoRows {
 			return echo.NewHTTPError(http.StatusBadRequest, "Campaign not found.")
 		}

+ 1 - 1
manager_db.go

@@ -38,7 +38,7 @@ func (r *runnerDB) NextSubscribers(campID, limit int) ([]models.Subscriber, erro
 // GetCampaign fetches a campaign from the database.
 func (r *runnerDB) GetCampaign(campID int) (*models.Campaign, error) {
 	var out = &models.Campaign{}
-	err := r.queries.GetCampaign.Get(out, campID)
+	err := r.queries.GetCampaign.Get(out, campID, nil)
 	return out, err
 }
 

+ 5 - 1
queries.sql

@@ -382,7 +382,11 @@ WHERE ($1 = 0 OR id = $1)
 ORDER BY created_at DESC OFFSET $4 LIMIT $5;
 
 -- name: get-campaign
-SELECT * FROM campaigns WHERE id = $1;
+SELECT campaigns.*,
+    COALESCE(templates.body, (SELECT body FROM templates WHERE is_default = true LIMIT 1)) AS template_body
+    FROM campaigns
+    LEFT JOIN templates ON (templates.id = campaigns.template_id)
+    WHERE CASE WHEN $1 > 0 THEN campaigns.id = $1 ELSE uuid = $2 END;
 
 -- name: get-campaign-stats
 -- This query is used to lazy load campaign stats (views, counts, list of lists) given a list of campaign IDs.