Added ability to edit user info
This commit is contained in:
@ -5,6 +5,17 @@ import (
|
||||
"time"
|
||||
)
|
||||
|
||||
type Article struct {
|
||||
Title string
|
||||
Created time.Time
|
||||
Description string
|
||||
Content string
|
||||
Published bool
|
||||
Rejected bool
|
||||
ID int64
|
||||
AuthorID int64
|
||||
}
|
||||
|
||||
func (db *DB) AddArticle(a *Article) (int64, error) {
|
||||
query := `
|
||||
INSERT INTO articles
|
||||
|
@ -17,6 +17,17 @@ type DB struct {
|
||||
*sql.DB
|
||||
}
|
||||
|
||||
type Tx struct {
|
||||
*sql.Tx
|
||||
}
|
||||
|
||||
type Attribute struct {
|
||||
Value interface{}
|
||||
Table string
|
||||
AttName string
|
||||
ID int64
|
||||
}
|
||||
|
||||
func getUsername() (string, error) {
|
||||
user := os.Getenv("DB_USER")
|
||||
if user == "" {
|
||||
@ -117,3 +128,46 @@ func (db *DB) CountEntries(table string) (int64, error) {
|
||||
|
||||
return count, nil
|
||||
}
|
||||
|
||||
func (db *DB) StartTransaction() (*Tx, error) {
|
||||
tx := &Tx{Tx: new(sql.Tx)}
|
||||
var err error
|
||||
|
||||
tx.Tx, err = db.Begin()
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("error starting transaction: %v", err)
|
||||
}
|
||||
|
||||
return tx, nil
|
||||
}
|
||||
|
||||
func (tx *Tx) CommitTransaction() error {
|
||||
if err := tx.Commit(); err != nil {
|
||||
return fmt.Errorf("error committing transaction: %v", err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (tx *Tx) RollbackTransaction() {
|
||||
if err := tx.Rollback(); err != nil {
|
||||
log.Fatalf("error rolling back transaction: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
func (tx *Tx) UpdateAttributes(a ...*Attribute) error {
|
||||
for _, attribute := range a {
|
||||
query := fmt.Sprintf(`
|
||||
UPDATE %s
|
||||
SET %s = ?
|
||||
WHERE id = ?
|
||||
`, attribute.Table, attribute.AttName)
|
||||
if _, err := tx.Exec(query, attribute.Value, attribute.ID); err != nil {
|
||||
if rollbackErr := tx.Rollback(); rollbackErr != nil {
|
||||
log.Fatalf("error: transaction error: %v, rollback error: %v", err, rollbackErr)
|
||||
}
|
||||
return fmt.Errorf("error updating article in DB: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
@ -1,42 +0,0 @@
|
||||
package model
|
||||
|
||||
import (
|
||||
"time"
|
||||
)
|
||||
|
||||
const (
|
||||
Admin = iota
|
||||
Editor
|
||||
Writer
|
||||
)
|
||||
|
||||
type User struct {
|
||||
UserName string
|
||||
FirstName string
|
||||
LastName string
|
||||
ID int64
|
||||
Role int
|
||||
}
|
||||
|
||||
type Tag struct {
|
||||
Name string
|
||||
ID int64
|
||||
}
|
||||
|
||||
type Article struct {
|
||||
Title string
|
||||
Created time.Time
|
||||
Description string
|
||||
Content string
|
||||
Published bool
|
||||
Rejected bool
|
||||
ID int64
|
||||
AuthorID int64
|
||||
}
|
||||
|
||||
type Attribute struct {
|
||||
Value interface{}
|
||||
Table string
|
||||
AttName string
|
||||
ID int64
|
||||
}
|
@ -2,6 +2,11 @@ package model
|
||||
|
||||
import "fmt"
|
||||
|
||||
type Tag struct {
|
||||
Name string
|
||||
ID int64
|
||||
}
|
||||
|
||||
func (db *DB) AddTag(tagName string) error {
|
||||
query := "INSERT INTO tags (name) VALUES (?)"
|
||||
if _, err := db.Exec(query, tagName); err != nil {
|
||||
|
@ -7,6 +7,20 @@ import (
|
||||
"golang.org/x/crypto/bcrypt"
|
||||
)
|
||||
|
||||
const (
|
||||
Admin = iota
|
||||
Editor
|
||||
Writer
|
||||
)
|
||||
|
||||
type User struct {
|
||||
UserName string
|
||||
FirstName string
|
||||
LastName string
|
||||
ID int64
|
||||
Role int
|
||||
}
|
||||
|
||||
func (db *DB) AddUser(user *User, pass string) error {
|
||||
hashedPass, err := bcrypt.GenerateFromPassword([]byte(pass), bcrypt.DefaultCost)
|
||||
if err != nil {
|
||||
@ -25,7 +39,7 @@ func (db *DB) AddUser(user *User, pass string) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (db *DB) GetID(userName string) (int64, error) {
|
||||
func (db *DB) GetID(userName string) (int64, bool) {
|
||||
var id int64
|
||||
|
||||
query := `
|
||||
@ -35,10 +49,10 @@ func (db *DB) GetID(userName string) (int64, error) {
|
||||
`
|
||||
row := db.QueryRow(query, userName)
|
||||
if err := row.Scan(&id); err != nil {
|
||||
return 0, fmt.Errorf("user not in DB: %v", err)
|
||||
return 0, false
|
||||
}
|
||||
|
||||
return id, nil
|
||||
return id, true
|
||||
}
|
||||
|
||||
func (db *DB) CheckPassword(id int64, pass string) error {
|
||||
@ -61,12 +75,7 @@ func (db *DB) CheckPassword(id int64, pass string) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (db *DB) ChangePassword(id int64, oldPass, newPass string) error {
|
||||
tx, err := db.Begin()
|
||||
if err != nil {
|
||||
return fmt.Errorf("error starting transaction: %v", err)
|
||||
}
|
||||
|
||||
func (tx *Tx) ChangePassword(id int64, oldPass, newPass string) error {
|
||||
var queriedPass string
|
||||
getQuery := `
|
||||
SELECT password
|
||||
@ -108,10 +117,6 @@ func (db *DB) ChangePassword(id int64, oldPass, newPass string) error {
|
||||
return fmt.Errorf("error updating password in DB: %v", err)
|
||||
}
|
||||
|
||||
if err = tx.Commit(); err != nil {
|
||||
return fmt.Errorf("error committing transaction: %v", err)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user