2017-01-25 19:01:02 +00:00
|
|
|
package datastore
|
|
|
|
|
|
|
|
import (
|
2018-04-24 08:28:23 +00:00
|
|
|
"github.com/usefathom/fathom/pkg/models"
|
2017-01-25 19:01:02 +00:00
|
|
|
)
|
|
|
|
|
2018-04-25 12:29:32 +00:00
|
|
|
// SavePageview inserts a single pageview model into the connected database
|
2017-01-25 19:01:02 +00:00
|
|
|
func SavePageview(pv *models.Pageview) error {
|
2018-04-25 12:29:32 +00:00
|
|
|
query := dbx.Rebind(`INSERT INTO pageviews(page_id, visitor_id, referrer_url, referrer_keyword, timestamp) VALUES( ?, ?, ?, ?, ?)`)
|
|
|
|
result, err := dbx.Exec(query, pv.PageID, pv.VisitorID, pv.ReferrerUrl, pv.ReferrerKeyword, pv.Timestamp)
|
2017-01-25 19:01:02 +00:00
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
2018-04-25 12:29:32 +00:00
|
|
|
pv.ID, _ = result.LastInsertId()
|
|
|
|
return nil
|
|
|
|
}
|
2017-01-25 19:01:02 +00:00
|
|
|
|
2018-04-25 12:29:32 +00:00
|
|
|
// SavePageviews inserts multiple pageview models into the connected database using a transaction
|
|
|
|
func SavePageviews(pvs []*models.Pageview) error {
|
|
|
|
query := dbx.Rebind(`INSERT INTO pageviews(page_id, visitor_id, referrer_url, referrer_keyword, timestamp ) VALUES( ?, ?, ?, ?, ? )`)
|
|
|
|
tx, err := dbx.Begin()
|
2017-01-25 19:01:02 +00:00
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
2018-04-25 12:29:32 +00:00
|
|
|
stmt, err := tx.Prepare(query)
|
2017-01-25 21:48:24 +00:00
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
2018-04-25 12:29:32 +00:00
|
|
|
defer stmt.Close()
|
2017-01-25 21:48:24 +00:00
|
|
|
|
|
|
|
for _, pv := range pvs {
|
2018-04-25 12:29:32 +00:00
|
|
|
result, err := stmt.Exec(pv.PageID, pv.VisitorID, pv.ReferrerUrl, pv.ReferrerKeyword, pv.Timestamp)
|
2017-01-25 21:48:24 +00:00
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
|
|
|
pv.ID, err = result.LastInsertId()
|
|
|
|
}
|
|
|
|
|
|
|
|
err = tx.Commit()
|
|
|
|
return err
|
|
|
|
}
|
2018-04-26 18:40:00 +00:00
|
|
|
|
|
|
|
func PageviewCountPerPageAndDay(before string, after string) ([]*models.Total, error) {
|
|
|
|
query := dbx.Rebind(`SELECT
|
|
|
|
pv.page_id,
|
|
|
|
COUNT(*) AS count,
|
|
|
|
COUNT(DISTINCT(pv.visitor_id)) AS count_unique,
|
2018-04-30 14:11:47 +00:00
|
|
|
DATE_FORMAT(pv.timestamp, '%Y-%m-%d') AS date_group
|
2018-04-26 18:40:00 +00:00
|
|
|
FROM pageviews pv
|
|
|
|
WHERE pv.timestamp < ? AND pv.timestamp > ?
|
|
|
|
GROUP BY pv.page_id, date_group`)
|
|
|
|
var results []*models.Total
|
|
|
|
err := dbx.Select(&results, query, before, after)
|
|
|
|
return results, err
|
|
|
|
}
|