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