Compare commits
9 Commits
723d2d4772
...
1c424e1ec9
Author | SHA1 | Date |
---|---|---|
Alexander Andreev | 1c424e1ec9 | |
Alexander Andreev | b9963c9521 | |
Alexander Andreev | 9d7088f2cd | |
Alexander Andreev | f5631bf3d0 | |
Alexander Andreev | 2cc91b351c | |
Alexander Andreev | 9347a16fca | |
Alexander Andreev | bea8df31cb | |
Alexander Andreev | f602dddff3 | |
Alexander Andreev | 32c1fa6aa1 |
|
@ -100,7 +100,7 @@ type SQLiteDatabase struct {
|
||||||
db *sql.DB
|
db *sql.DB
|
||||||
}
|
}
|
||||||
|
|
||||||
func New(filePath string) (*SQLiteDatabase, error) {
|
func New(filePath string) (guestbook.Guestbook, error) {
|
||||||
db, err := sql.Open("sqlite3", dsn(filePath))
|
db, err := sql.Open("sqlite3", dsn(filePath))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
@ -205,8 +205,7 @@ func (d *SQLiteDatabase) NewEntry(entry *guestbook.Entry) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// UpdateEntry
|
func (d *SQLiteDatabase) EditEntry(entry *guestbook.Entry) error {
|
||||||
func (d *SQLiteDatabase) UpdateEntry(entry *guestbook.Entry) error {
|
|
||||||
tx, err := d.db.Begin()
|
tx, err := d.db.Begin()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -222,26 +221,20 @@ func (d *SQLiteDatabase) UpdateEntry(entry *guestbook.Entry) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *SQLiteDatabase) DeleteEntry(entryID int64) (int64, error) {
|
func (d *SQLiteDatabase) DeleteEntry(entryID int64) error {
|
||||||
tx, err := d.db.Begin()
|
tx, err := d.db.Begin()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return -1, err
|
return err
|
||||||
}
|
}
|
||||||
defer tx.Rollback()
|
defer tx.Rollback()
|
||||||
|
|
||||||
res, err := tx.Stmt(stmtDeleteEntry).Exec(entryID)
|
if _, err = tx.Stmt(stmtDeleteEntry).Exec(entryID); err != nil {
|
||||||
if err != nil {
|
return err
|
||||||
return -1, err
|
|
||||||
}
|
|
||||||
|
|
||||||
c, err := res.RowsAffected()
|
|
||||||
if err != nil {
|
|
||||||
return -1, err
|
|
||||||
}
|
}
|
||||||
|
|
||||||
tx.Commit()
|
tx.Commit()
|
||||||
|
|
||||||
return c, nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *SQLiteDatabase) NewReply(reply *guestbook.Reply) error {
|
func (d *SQLiteDatabase) NewReply(reply *guestbook.Reply) error {
|
||||||
|
@ -261,15 +254,14 @@ func (d *SQLiteDatabase) NewReply(reply *guestbook.Reply) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *SQLiteDatabase) UpdateReply(reply *guestbook.Reply) error {
|
func (d *SQLiteDatabase) EditReply(reply *guestbook.Reply) error {
|
||||||
tx, err := d.db.Begin()
|
tx, err := d.db.Begin()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
defer tx.Rollback()
|
defer tx.Rollback()
|
||||||
|
|
||||||
row := tx.Stmt(stmtUpdateReply).QueryRow(
|
row := tx.Stmt(stmtUpdateReply).QueryRow(reply.Message, reply.ID)
|
||||||
reply.Created.Format(guestbook.DateFormat), reply.Message, reply.ID)
|
|
||||||
if row.Err() != nil {
|
if row.Err() != nil {
|
||||||
return row.Err()
|
return row.Err()
|
||||||
}
|
}
|
||||||
|
@ -279,26 +271,20 @@ func (d *SQLiteDatabase) UpdateReply(reply *guestbook.Reply) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *SQLiteDatabase) DeleteReply(entryID int64) (int64, error) {
|
func (d *SQLiteDatabase) DeleteReply(entryID int64) error {
|
||||||
tx, err := d.db.Begin()
|
tx, err := d.db.Begin()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return -1, err
|
return err
|
||||||
}
|
}
|
||||||
defer tx.Rollback()
|
defer tx.Rollback()
|
||||||
|
|
||||||
res, err := tx.Stmt(stmtDeleteReply).Exec(entryID)
|
if _, err = tx.Stmt(stmtDeleteReply).Exec(entryID); err != nil {
|
||||||
if err != nil {
|
return err
|
||||||
return -1, err
|
|
||||||
}
|
|
||||||
|
|
||||||
ra, err := res.RowsAffected()
|
|
||||||
if err != nil {
|
|
||||||
return -1, err
|
|
||||||
}
|
}
|
||||||
|
|
||||||
tx.Commit()
|
tx.Commit()
|
||||||
|
|
||||||
return ra, nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *SQLiteDatabase) Close() error {
|
func (d *SQLiteDatabase) Close() error {
|
||||||
|
|
|
@ -13,7 +13,7 @@ const (
|
||||||
testRMsg = "lol"
|
testRMsg = "lol"
|
||||||
)
|
)
|
||||||
|
|
||||||
func genTestDB() (db *sqlite.SQLiteDatabase, err error) {
|
func genTestDB() (db guestbook.Guestbook, err error) {
|
||||||
db, err = sqlite.New(":memory:")
|
db, err = sqlite.New(":memory:")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errors.Wrap(err, "failed to init DB")
|
return nil, errors.Wrap(err, "failed to init DB")
|
||||||
|
@ -65,7 +65,7 @@ func TestSqliteInsertAndGetAll(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestSqliteUpdateEntry(t *testing.T) {
|
func TestSqliteEditEntry(t *testing.T) {
|
||||||
db, err := genTestDB()
|
db, err := genTestDB()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Error(err)
|
t.Error(err)
|
||||||
|
@ -86,13 +86,13 @@ func TestSqliteUpdateEntry(t *testing.T) {
|
||||||
me.ID = es0[0].ID
|
me.ID = es0[0].ID
|
||||||
me.Name = "NotSoAnonymous"
|
me.Name = "NotSoAnonymous"
|
||||||
|
|
||||||
err = db.UpdateEntry(me)
|
err = db.EditEntry(me)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Error(err)
|
t.Error(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestSqliteUpdateReply(t *testing.T) {
|
func TestSqliteEditReply(t *testing.T) {
|
||||||
db, err := genTestDB()
|
db, err := genTestDB()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Error(err)
|
t.Error(err)
|
||||||
|
@ -113,7 +113,7 @@ func TestSqliteUpdateReply(t *testing.T) {
|
||||||
mr.ID = es0[0].ID
|
mr.ID = es0[0].ID
|
||||||
mr.Message = "bur"
|
mr.Message = "bur"
|
||||||
|
|
||||||
err = db.UpdateReply(mr)
|
err = db.EditReply(mr)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Error(err)
|
t.Error(err)
|
||||||
}
|
}
|
||||||
|
@ -130,13 +130,8 @@ func TestSqliteDeleteEntry(t *testing.T) {
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
dc, err := db.DeleteEntry(1)
|
if err = db.DeleteEntry(1); err != nil {
|
||||||
if err != nil {
|
t.Error("cannot delete entry", err)
|
||||||
t.Error("cannot delete entry", err, dc)
|
|
||||||
}
|
|
||||||
|
|
||||||
if c, err := db.Count(); err != nil || c != 0 {
|
|
||||||
t.Error(c, err, dc)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,2 +1,3 @@
|
||||||
SELECT COUNT(`entry_id`) AS `total`
|
SELECT
|
||||||
|
COUNT(`entry_id`) AS `total`
|
||||||
FROM `entry`;
|
FROM `entry`;
|
|
@ -3,11 +3,11 @@ SELECT
|
||||||
`entry`.`created`,
|
`entry`.`created`,
|
||||||
`entry`.`name`,
|
`entry`.`name`,
|
||||||
`entry`.`message`,
|
`entry`.`message`,
|
||||||
(CASE
|
CASE
|
||||||
WHEN `entry`.`hide_website` IS FALSE
|
WHEN `entry`.`hide_website` IS FALSE
|
||||||
THEN `entry`.`website`
|
THEN `entry`.`website`
|
||||||
ELSE ''
|
ELSE ''
|
||||||
END) AS `website`,
|
END AS `website`,
|
||||||
`reply`.`created` AS `reply_created`,
|
`reply`.`created` AS `reply_created`,
|
||||||
`reply`.`message` AS `reply_message`
|
`reply`.`message` AS `reply_message`
|
||||||
FROM `entry`
|
FROM `entry`
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
UPDATE OR REPLACE `reply`
|
UPDATE OR REPLACE `reply`
|
||||||
SET
|
SET
|
||||||
`created` = ?,
|
|
||||||
`message` = ?
|
`message` = ?
|
||||||
WHERE `entry_id` = ?;
|
WHERE `entry_id` = ?;
|
|
@ -6,10 +6,10 @@ type Guestbook interface {
|
||||||
Entries(page, pageSize int64) ([]*Entry, error)
|
Entries(page, pageSize int64) ([]*Entry, error)
|
||||||
Count() (int64, error)
|
Count() (int64, error)
|
||||||
NewEntry(entry *Entry) error
|
NewEntry(entry *Entry) error
|
||||||
UpdateEntry(entry *Entry) error
|
EditEntry(entry *Entry) error
|
||||||
DeleteEntry(entryID int64) (int64, error)
|
DeleteEntry(entryID int64) error
|
||||||
NewReply(reply *Reply) error
|
NewReply(reply *Reply) error
|
||||||
UpdateReply(reply *Reply) error
|
EditReply(reply *Reply) error
|
||||||
DeleteReply(entryID int64) (int64, error)
|
DeleteReply(entryID int64) error
|
||||||
Close() error
|
Close() error
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,8 +10,8 @@ type Entry struct {
|
||||||
Created time.Time `json:"created"`
|
Created time.Time `json:"created"`
|
||||||
Name string `json:"name"`
|
Name string `json:"name"`
|
||||||
Website string `json:"website,omitempty"`
|
Website string `json:"website,omitempty"`
|
||||||
Message string `json:"message"`
|
|
||||||
HideWebsite bool `json:"hide_website,omitempty"`
|
HideWebsite bool `json:"hide_website,omitempty"`
|
||||||
|
Message string `json:"message"`
|
||||||
Reply *Reply `json:"reply,omitempty"`
|
Reply *Reply `json:"reply,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue