2545d4adde
Renamed accBuilder to Accumulator so that it can be used in type hints outside the query generator. The DbInit accumulator is now initialised in the caller rather than the callee.
50 lines
1.5 KiB
Go
50 lines
1.5 KiB
Go
package common
|
|
|
|
import (
|
|
"database/sql"
|
|
|
|
"../query_gen/lib"
|
|
)
|
|
|
|
var Prstore ProfileReplyStore
|
|
|
|
type ProfileReplyStore interface {
|
|
Get(id int) (*Reply, error)
|
|
Create(profileID int, content string, createdBy int, ipaddress string) (id int, err error)
|
|
}
|
|
|
|
// TODO: Refactor this to stop using the global stmt store
|
|
// TODO: Add more methods to this like Create()
|
|
type SQLProfileReplyStore struct {
|
|
get *sql.Stmt
|
|
create *sql.Stmt
|
|
}
|
|
|
|
func NewSQLProfileReplyStore() (*SQLProfileReplyStore, error) {
|
|
acc := qgen.Builder.Accumulator()
|
|
return &SQLProfileReplyStore{
|
|
get: acc.Select("users_replies").Columns("uid, content, createdBy, createdAt, lastEdit, lastEditBy, ipaddress").Where("rid = ?").Prepare(),
|
|
create: acc.Insert("users_replies").Columns("uid, content, parsed_content, createdAt, createdBy, ipaddress").Fields("?,?,?,UTC_TIMESTAMP(),?,?").Prepare(),
|
|
}, acc.FirstError()
|
|
}
|
|
|
|
func (store *SQLProfileReplyStore) Get(id int) (*Reply, error) {
|
|
reply := Reply{ID: id}
|
|
err := store.get.QueryRow(id).Scan(&reply.ParentID, &reply.Content, &reply.CreatedBy, &reply.CreatedAt, &reply.LastEdit, &reply.LastEditBy, &reply.IPAddress)
|
|
return &reply, err
|
|
}
|
|
|
|
func (store *SQLProfileReplyStore) Create(profileID int, content string, createdBy int, ipaddress string) (id int, err error) {
|
|
res, err := store.create.Exec(profileID, content, ParseMessage(content, 0, ""), createdBy, ipaddress)
|
|
if err != nil {
|
|
return 0, err
|
|
}
|
|
lastID, err := res.LastInsertId()
|
|
if err != nil {
|
|
return 0, err
|
|
}
|
|
|
|
// Should we reload the user?
|
|
return int(lastID), err
|
|
}
|