Initial commit
This commit is contained in:
29
pkg/repo/guestbook.go
Normal file
29
pkg/repo/guestbook.go
Normal file
@@ -0,0 +1,29 @@
|
||||
package repo
|
||||
|
||||
import (
|
||||
_ "github.com/go-sql-driver/mysql"
|
||||
)
|
||||
|
||||
type Guestbook struct {
|
||||
PageviewId int64 `json:"pageviewId"`
|
||||
FirstName string `json:"firstName" validate:"required"`
|
||||
LastName string `json:"lastName" validate:"required"`
|
||||
EmailAddress string `json:"emailAddress" validate:"required"`
|
||||
Message string `json:"message"`
|
||||
}
|
||||
|
||||
func AddGuestbook(entry Guestbook) (int64, error) {
|
||||
db := getDB()
|
||||
|
||||
result, err := db.Exec("INSERT INTO guestbook (first_name, last_name, email_address, message, pageview_id) VALUES (?, ?, ?, ?, ?)", entry.FirstName, entry.LastName, entry.EmailAddress, entry.Message, entry.PageviewId)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
|
||||
id, err := result.LastInsertId()
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
|
||||
return id, nil
|
||||
}
|
||||
30
pkg/repo/pageview.go
Normal file
30
pkg/repo/pageview.go
Normal file
@@ -0,0 +1,30 @@
|
||||
package repo
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
_ "github.com/go-sql-driver/mysql"
|
||||
)
|
||||
|
||||
type Pageview struct {
|
||||
Id int64
|
||||
IPAddress string
|
||||
UserAgent string
|
||||
Timestamp time.Time
|
||||
}
|
||||
|
||||
func AddPageview(pageview Pageview) (int64, error) {
|
||||
db := getDB()
|
||||
|
||||
result, err := db.Exec("INSERT INTO pageview (ip_address, user_agent) VALUES (?, ?)", pageview.IPAddress, pageview.UserAgent)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
|
||||
id, err := result.LastInsertId()
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
|
||||
return id, nil
|
||||
}
|
||||
35
pkg/repo/repo.go
Normal file
35
pkg/repo/repo.go
Normal file
@@ -0,0 +1,35 @@
|
||||
package repo
|
||||
|
||||
import (
|
||||
"addrss/pkg/config"
|
||||
"database/sql"
|
||||
"fmt"
|
||||
|
||||
_ "github.com/go-sql-driver/mysql"
|
||||
)
|
||||
|
||||
func getDB() *sql.DB {
|
||||
dsn, err := config.GetString("dsn")
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
db, err := sql.Open("mysql", dsn)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
return db
|
||||
}
|
||||
|
||||
func dbQueryError(err error) error {
|
||||
return fmt.Errorf("could not execute query: %w", err)
|
||||
}
|
||||
|
||||
func dbScanError(err error) error {
|
||||
return fmt.Errorf("could not scan into struct: %w", err)
|
||||
}
|
||||
|
||||
func dbRowsError(err error) error {
|
||||
return fmt.Errorf("could not iterate over rows: %w", err)
|
||||
}
|
||||
127
pkg/repo/user.go
Normal file
127
pkg/repo/user.go
Normal file
@@ -0,0 +1,127 @@
|
||||
package repo
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
_ "github.com/go-sql-driver/mysql"
|
||||
)
|
||||
|
||||
type User struct {
|
||||
Id int64 `json:"id"`
|
||||
FirstName string `json:"firstName"`
|
||||
LastName string `json:"lastName"`
|
||||
EmailAddress string `json:"emailAddress"`
|
||||
PhoneNumber string `json:"phoneNumber"`
|
||||
Password string `json:"-"`
|
||||
CreatedAt time.Time `json:"createdAt"`
|
||||
}
|
||||
|
||||
func AddUser(user User) (int64, error) {
|
||||
//TODO: Creating the password needs to be split out so that the temporary password can be emailed to the user as part of their validation email
|
||||
// password, err := // auth.GetTempPassword(8)
|
||||
// if err != nil {
|
||||
// return 0, err
|
||||
// }
|
||||
|
||||
password := "abc123"
|
||||
|
||||
db := getDB()
|
||||
|
||||
result, err := db.Exec("INSERT INTO `user` (first_name, last_name, email_address, phone_number, password) VALUES (?, ?, ?, ?, ?)", user.FirstName, user.LastName, user.EmailAddress, user.PhoneNumber, password)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
|
||||
return result.LastInsertId()
|
||||
}
|
||||
|
||||
func GetUserByEmail(email string) (User, error) {
|
||||
db := getDB()
|
||||
row := db.QueryRow("SELECT `id`, `first_name`, `last_name`, `email_address`, `phone_number`, `password`, `created_at`, `image_id` FROM `user` WHERE email_address = ?", email)
|
||||
u := User{}
|
||||
|
||||
if err := row.Scan(&u.Id, &u.FirstName, &u.LastName, &u.EmailAddress, &u.PhoneNumber, &u.Password, &u.CreatedAt); err != nil {
|
||||
return User{}, err
|
||||
}
|
||||
|
||||
return u, nil
|
||||
}
|
||||
|
||||
func GetUserById(id int64) (User, error) {
|
||||
db := getDB()
|
||||
row := db.QueryRow("SELECT `id`, `first_name`, `last_name`, `email_address`, `phone_number`, `password`, `created_at`, `image_id` FROM `user` WHERE `id` = ?", id)
|
||||
u := User{}
|
||||
|
||||
if err := row.Scan(&u.Id, &u.FirstName, &u.LastName, &u.EmailAddress, &u.PhoneNumber, &u.Password, &u.CreatedAt); err != nil {
|
||||
return User{}, err
|
||||
}
|
||||
|
||||
return u, nil
|
||||
}
|
||||
|
||||
func UpdateUser(u User) error {
|
||||
db := getDB()
|
||||
|
||||
_, err := db.Exec("UPDATE `user` SET `first_name` = ?, `last_name` = ?, `email_address` = ?, `phone_number` = ? where `id` = ?", u.FirstName, u.LastName, u.EmailAddress, u.PhoneNumber, u.Id)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func UpdateUserPassword(u User) error {
|
||||
db := getDB()
|
||||
|
||||
_, err := db.Exec("UPDATE `user` SET `password` = ? where `id` = ?", u.Password, u.Id)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
type UserSession struct {
|
||||
UserId int64
|
||||
TokenId string
|
||||
Expiration time.Time
|
||||
}
|
||||
|
||||
func GetUserSessionById(userId int64) (UserSession, error) {
|
||||
db := getDB()
|
||||
row := db.QueryRow("SELECT user_id, token_id, expiration FROM `user_session` WHERE user_id = ?", userId)
|
||||
|
||||
us := UserSession{}
|
||||
if err := row.Scan(&us.UserId, &us.TokenId, &us.Expiration); err != nil {
|
||||
return UserSession{}, err
|
||||
}
|
||||
|
||||
return us, nil
|
||||
}
|
||||
|
||||
func AddUserSession(session UserSession) error {
|
||||
err := DeleteUserSession(session.UserId)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
db := getDB()
|
||||
|
||||
_, err = db.Exec("INSERT INTO `user_session` VALUES (?, ?, ?)", session.UserId, session.TokenId, session.Expiration)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func DeleteUserSession(userId int64) error {
|
||||
db := getDB()
|
||||
|
||||
_, err := db.Exec("DELETE FROM `user_session` WHERE user_id = ?", userId)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user