mirror of https://github.com/jlelse/GoBlog
116 lines
2.3 KiB
Go
116 lines
2.3 KiB
Go
package main
|
|
|
|
import (
|
|
"errors"
|
|
"github.com/araddon/dateparse"
|
|
"strings"
|
|
"time"
|
|
)
|
|
|
|
func (p *Post) checkPost() error {
|
|
if p == nil {
|
|
return errors.New("no post")
|
|
}
|
|
if p.Path == "" || !strings.HasPrefix(p.Path, "/") {
|
|
return errors.New("wrong path")
|
|
}
|
|
// Fix path
|
|
p.Path = strings.TrimSuffix(p.Path, "/")
|
|
// Fix content
|
|
p.Content = strings.TrimSuffix(strings.TrimPrefix(p.Content, "\n"), "\n")
|
|
// Fix date strings
|
|
if p.Published != "" {
|
|
d, err := dateparse.ParseIn(p.Published, time.Local)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
p.Published = d.String()
|
|
}
|
|
if p.Updated != "" {
|
|
d, err := dateparse.ParseIn(p.Updated, time.Local)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
p.Updated = d.String()
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (p *Post) createOrReplace() error {
|
|
err := p.checkPost()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
startWritingToDb()
|
|
tx, err := appDb.Begin()
|
|
if err != nil {
|
|
finishWritingToDb()
|
|
return err
|
|
}
|
|
_, err = tx.Exec("insert or replace into posts (path, content, published, updated) values (?, ?, ?, ?)", p.Path, p.Content, p.Published, p.Updated)
|
|
if err != nil {
|
|
_ = tx.Rollback()
|
|
finishWritingToDb()
|
|
return err
|
|
}
|
|
_, err = tx.Exec("delete from post_parameters where path=?", p.Path)
|
|
if err != nil {
|
|
_ = tx.Rollback()
|
|
finishWritingToDb()
|
|
return err
|
|
}
|
|
for param, value := range p.Parameters {
|
|
for _, value := range value {
|
|
if value != "" {
|
|
_, err = tx.Exec("insert into post_parameters (path, parameter, value) values (?, ?, ?)", p.Path, param, value)
|
|
if err != nil {
|
|
_ = tx.Rollback()
|
|
finishWritingToDb()
|
|
return err
|
|
}
|
|
}
|
|
}
|
|
}
|
|
err = tx.Commit()
|
|
if err != nil {
|
|
finishWritingToDb()
|
|
return err
|
|
}
|
|
finishWritingToDb()
|
|
go purgeCache(p.Path)
|
|
return reloadRouter()
|
|
}
|
|
|
|
func (p *Post) delete() error {
|
|
err := p.checkPost()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
startWritingToDb()
|
|
tx, err := appDb.Begin()
|
|
if err != nil {
|
|
finishWritingToDb()
|
|
return err
|
|
}
|
|
_, err = tx.Exec("delete from posts where path=?", p.Path)
|
|
if err != nil {
|
|
_ = tx.Rollback()
|
|
finishWritingToDb()
|
|
return err
|
|
}
|
|
_, err = tx.Exec("delete from post_parameters where path=?", p.Path)
|
|
if err != nil {
|
|
_ = tx.Rollback()
|
|
finishWritingToDb()
|
|
return err
|
|
}
|
|
err = tx.Commit()
|
|
if err != nil {
|
|
finishWritingToDb()
|
|
return err
|
|
}
|
|
finishWritingToDb()
|
|
go purgeCache(p.Path)
|
|
return reloadRouter()
|
|
}
|