75 lines
2.2 KiB
Go
75 lines
2.2 KiB
Go
/* Work in progress. Check back later! */
|
|
package main
|
|
|
|
import "log"
|
|
import "errors"
|
|
import "database/sql"
|
|
import "./query_gen/lib"
|
|
|
|
var forums []Forum // The IDs for a forum tend to be low and sequential for the most part, so we can get more performance out of using a slice instead of a map AND it has better concurrency
|
|
var forum_perms map[int]map[int]ForumPerms // [gid][fid]Perms
|
|
var fstore ForumStore // :soon:
|
|
var forumCapCount int
|
|
var err_noforum = errors.New("This forum doesn't exist")
|
|
|
|
type ForumStore interface
|
|
{
|
|
Get(int) (*Forum, error)
|
|
CascadeGet(int) (*Forum, error)
|
|
BypassGet(int) (*Forum, error)
|
|
//Update(Forum) error
|
|
//CascadeUpdate(Forum) error
|
|
//Delete(int) error
|
|
//CascadeDelete(int) error
|
|
//QuickCreate(string, string, bool, string) (*Forum, error)
|
|
Exists(int) bool
|
|
}
|
|
|
|
type StaticForumStore struct
|
|
{
|
|
get *sql.Stmt
|
|
get_all *sql.Stmt
|
|
}
|
|
|
|
func NewStaticForumStore() *StaticForumStore {
|
|
get_stmt, err := qgen.Builder.SimpleSelect("forums","name, desc, active, preset, topicCount, lastTopic, lastTopicID, lastReplyer, lastReplyerID, lastTopicTime","fid = ?","","")
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
get_all_stmt, err := qgen.Builder.SimpleSelect("forums","fid, name, desc, active, preset, topicCount, lastTopic, lastTopicID, lastReplyer, lastReplyerID, lastTopicTime","","fid ASC","")
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
return &StaticForumStore{
|
|
get: get_stmt,
|
|
get_all: get_all_stmt,
|
|
}
|
|
}
|
|
|
|
func (sfs *StaticForumStore) Get(id int) (*Forum, error) {
|
|
if !((id <= forumCapCount) && (id >= 0) && forums[id].Name!="") {
|
|
return nil, err_noforum
|
|
}
|
|
return &forums[id], nil
|
|
}
|
|
|
|
func (sfs *StaticForumStore) CascadeGet(id int) (*Forum, error) {
|
|
if !((id <= forumCapCount) && (id >= 0) && forums[id].Name!="") {
|
|
return nil, err_noforum
|
|
}
|
|
return &forums[id], nil
|
|
}
|
|
|
|
func (sfs *StaticForumStore) BypassGet(id int) (*Forum, error) {
|
|
var forum Forum = Forum{ID:id}
|
|
err := sfs.get.QueryRow(id).Scan(&forum.Name, &forum.Desc, &forum.Active, &forum.Preset, &forum.TopicCount, &forum.LastTopic, &forum.LastTopicID, &forum.LastReplyer, &forum.LastReplyerID, &forum.LastTopicTime)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return &forum, nil
|
|
}
|
|
|
|
func (sfs *StaticForumStore) Exists(id int) bool {
|
|
return (id <= forumCapCount) && (id >= 0) && forums[id].Name != ""
|
|
}
|