Split reply.go into reply.go, reply_store.go, and profile_reply_store.go

This commit is contained in:
Azareal 2017-11-06 07:44:08 +00:00
parent 6b64a2e28d
commit aab949cb2d
3 changed files with 95 additions and 88 deletions

35
profile_reply_store.go Normal file
View File

@ -0,0 +1,35 @@
package main
import (
"database/sql"
"./query_gen/lib"
)
var prstore ProfileReplyStore
type ProfileReplyStore interface {
Get(id int) (*Reply, 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
}
func NewSQLProfileReplyStore() (*SQLProfileReplyStore, error) {
getUserReplyStmt, err := qgen.Builder.SimpleSelect("users_replies", "uid, content, createdBy, createdAt, lastEdit, lastEditBy, ipaddress", "rid = ?", "", "")
if err != nil {
return nil, err
}
return &SQLProfileReplyStore{
get: getUserReplyStmt,
}, nil
}
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
}

View File

@ -7,17 +7,10 @@
package main package main
import ( import (
"database/sql"
"errors" "errors"
"time" "time"
"./query_gen/lib"
) )
// ? - Should we add a reply store to centralise all the reply logic? Would this cover profile replies too or would that be separate?
var rstore ReplyStore
var prstore ProfileReplyStore
type ReplyUser struct { type ReplyUser struct {
ID int ID int
ParentID int ParentID int
@ -102,84 +95,3 @@ func (reply *Reply) Delete() error {
func (reply *Reply) Copy() Reply { func (reply *Reply) Copy() Reply {
return *reply return *reply
} }
// TODO: Refactor this to stop hitting the global stmt store
type ReplyStore interface {
Get(id int) (*Reply, error)
Create(tid int, content string, ipaddress string, fid int, uid int) (id int, err error)
}
type SQLReplyStore struct {
get *sql.Stmt
create *sql.Stmt
}
func NewSQLReplyStore() (*SQLReplyStore, error) {
getReplyStmt, err := qgen.Builder.SimpleSelect("replies", "tid, content, createdBy, createdAt, lastEdit, lastEditBy, ipaddress, likeCount", "rid = ?", "", "")
if err != nil {
return nil, err
}
createReplyStmt, err := qgen.Builder.SimpleInsert("replies", "tid, content, parsed_content, createdAt, lastUpdated, ipaddress, words, createdBy", "?,?,?,UTC_TIMESTAMP(),UTC_TIMESTAMP(),?,?,?")
if err != nil {
return nil, err
}
return &SQLReplyStore{
get: getReplyStmt,
create: createReplyStmt,
}, nil
}
func (store *SQLReplyStore) 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, &reply.LikeCount)
return &reply, err
}
// TODO: Write a test for this
func (store *SQLReplyStore) Create(tid int, content string, ipaddress string, fid int, uid int) (id int, err error) {
wcount := wordCount(content)
res, err := store.create.Exec(tid, content, parseMessage(content, fid, "forums"), ipaddress, wcount, uid)
if err != nil {
return 0, err
}
lastID, err := res.LastInsertId()
if err != nil {
return 0, err
}
_, err = stmts.addRepliesToTopic.Exec(1, uid, tid)
if err != nil {
return int(lastID), err
}
tcache, ok := topics.(TopicCache)
if ok {
tcache.CacheRemove(tid)
}
return int(lastID), err
}
type ProfileReplyStore interface {
Get(id int) (*Reply, 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
}
func NewSQLProfileReplyStore() (*SQLProfileReplyStore, error) {
getUserReplyStmt, err := qgen.Builder.SimpleSelect("users_replies", "uid, content, createdBy, createdAt, lastEdit, lastEditBy, ipaddress", "rid = ?", "", "")
if err != nil {
return nil, err
}
return &SQLProfileReplyStore{
get: getUserReplyStmt,
}, nil
}
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
}

60
reply_store.go Normal file
View File

@ -0,0 +1,60 @@
package main
import "database/sql"
import "./query_gen/lib"
var rstore ReplyStore
type ReplyStore interface {
Get(id int) (*Reply, error)
Create(tid int, content string, ipaddress string, fid int, uid int) (id int, err error)
}
type SQLReplyStore struct {
get *sql.Stmt
create *sql.Stmt
}
func NewSQLReplyStore() (*SQLReplyStore, error) {
getReplyStmt, err := qgen.Builder.SimpleSelect("replies", "tid, content, createdBy, createdAt, lastEdit, lastEditBy, ipaddress, likeCount", "rid = ?", "", "")
if err != nil {
return nil, err
}
createReplyStmt, err := qgen.Builder.SimpleInsert("replies", "tid, content, parsed_content, createdAt, lastUpdated, ipaddress, words, createdBy", "?,?,?,UTC_TIMESTAMP(),UTC_TIMESTAMP(),?,?,?")
if err != nil {
return nil, err
}
return &SQLReplyStore{
get: getReplyStmt,
create: createReplyStmt,
}, nil
}
func (store *SQLReplyStore) 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, &reply.LikeCount)
return &reply, err
}
// TODO: Write a test for this
func (store *SQLReplyStore) Create(tid int, content string, ipaddress string, fid int, uid int) (id int, err error) {
wcount := wordCount(content)
res, err := store.create.Exec(tid, content, parseMessage(content, fid, "forums"), ipaddress, wcount, uid)
if err != nil {
return 0, err
}
lastID, err := res.LastInsertId()
if err != nil {
return 0, err
}
_, err = stmts.addRepliesToTopic.Exec(1, uid, tid)
if err != nil {
return int(lastID), err
}
tcache, ok := topics.(TopicCache)
if ok {
tcache.CacheRemove(tid)
}
return int(lastID), err
}