Reorganize project structure and fix SQLite usage
This commit is contained in:
parent
0e762841a3
commit
e2dda0ade7
20 changed files with 76 additions and 46 deletions
23
cmd/iroon/main.go
Normal file
23
cmd/iroon/main.go
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
package iroon
|
||||
|
||||
import (
|
||||
"log"
|
||||
"net/http"
|
||||
|
||||
"github.com/Bronku/iroon/internal/auth"
|
||||
"github.com/Bronku/iroon/internal/logging"
|
||||
"github.com/Bronku/iroon/internal/server"
|
||||
)
|
||||
|
||||
func Run() {
|
||||
h, err := server.New()
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
defer h.Close()
|
||||
|
||||
var handler http.Handler = h
|
||||
handler = logging.Middleware(handler)
|
||||
handler = auth.New().Middleware(handler)
|
||||
log.Fatal(http.ListenAndServe(":8080", handler))
|
||||
}
|
||||
|
|
@ -5,7 +5,7 @@ import (
|
|||
"strconv"
|
||||
"strings"
|
||||
|
||||
"github.com/Bronku/iroon/store"
|
||||
"github.com/Bronku/iroon/internal/store"
|
||||
)
|
||||
|
||||
func (h *Server) index(r *http.Request) (any, int, error) {
|
||||
|
|
@ -7,7 +7,7 @@ import (
|
|||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/Bronku/iroon/store"
|
||||
"github.com/Bronku/iroon/internal/store"
|
||||
)
|
||||
|
||||
func (h *Server) postOrder(r *http.Request) (any, int, error) {
|
||||
|
|
@ -4,7 +4,7 @@ import (
|
|||
"html/template"
|
||||
"net/http"
|
||||
|
||||
"github.com/Bronku/iroon/store"
|
||||
"github.com/Bronku/iroon/internal/store"
|
||||
)
|
||||
|
||||
type Server struct {
|
||||
|
|
@ -22,3 +22,5 @@ create table ordered_cake (
|
|||
amount integer not null,
|
||||
primary key (customer_order, cake)
|
||||
);
|
||||
|
||||
PRAGMA user_version = 1;
|
||||
|
|
@ -4,7 +4,6 @@ import (
|
|||
"database/sql"
|
||||
_ "embed"
|
||||
"errors"
|
||||
"os"
|
||||
"strconv"
|
||||
"time"
|
||||
|
||||
|
|
@ -21,11 +20,13 @@ type Store struct {
|
|||
func OpenStore(filename string) (*Store, error) {
|
||||
var out Store
|
||||
var err error
|
||||
_, err = os.Stat(filename)
|
||||
if errors.Is(err, os.ErrNotExist) {
|
||||
defer out.loadSchema()
|
||||
}
|
||||
|
||||
out.db, err = sql.Open("sqlite3", filename)
|
||||
if err != nil {
|
||||
return &out, err
|
||||
}
|
||||
|
||||
err = out.loadSchema()
|
||||
return &out, err
|
||||
}
|
||||
|
||||
|
|
@ -35,10 +36,27 @@ func (s *Store) Close() {
|
|||
}
|
||||
}
|
||||
|
||||
func (s *Store) version() int {
|
||||
out := -1
|
||||
row, err := s.db.Query("PRAGMA user_version;")
|
||||
if err != nil {
|
||||
return out
|
||||
}
|
||||
defer row.Close()
|
||||
row.Next()
|
||||
_ = row.Scan(&out)
|
||||
return out
|
||||
}
|
||||
|
||||
func (s *Store) loadSchema() error {
|
||||
if s.db == nil {
|
||||
return errors.New("database doesn't exist")
|
||||
}
|
||||
|
||||
if s.version() == 1 {
|
||||
return nil
|
||||
}
|
||||
|
||||
_, err := s.db.Exec(schema)
|
||||
return err
|
||||
}
|
||||
|
|
@ -83,11 +101,13 @@ func (s *Store) SaveCake(newCake Cake) (int, error) {
|
|||
|
||||
row, err := s.db.Query(query, newCake.Name, newCake.Price)
|
||||
if err != nil {
|
||||
return -1, err
|
||||
return 0, err
|
||||
}
|
||||
defer row.Close()
|
||||
|
||||
row.Next()
|
||||
if !row.Next() {
|
||||
return 0, errors.New("The database didn't respond with an id")
|
||||
}
|
||||
err = row.Scan(&newCake.ID)
|
||||
return newCake.ID, err
|
||||
}
|
||||
|
|
@ -95,10 +115,10 @@ func (s *Store) SaveCake(newCake Cake) (int, error) {
|
|||
func (s *Store) GetOrder(id int) (Order, error) {
|
||||
var out Order
|
||||
row, err := s.db.Query("select id, name, surname, phone, location, order_date, delivery_date, status, paid from customer_order where id = ?;", id)
|
||||
defer row.Close()
|
||||
if err != nil {
|
||||
return out, err
|
||||
}
|
||||
defer row.Close()
|
||||
|
||||
var order_date, delivery_date string
|
||||
row.Next()
|
||||
|
|
@ -187,22 +207,25 @@ func (s *Store) SaveOrder(newOrder Order) (int, error) {
|
|||
}
|
||||
tx, err := s.db.Begin()
|
||||
if err != nil {
|
||||
return -1, nil
|
||||
return 0, err
|
||||
}
|
||||
|
||||
accepted := newOrder.Accepted.Format("2006-01-02 15:04")
|
||||
date := newOrder.Date.Format("2006-01-02 15:04")
|
||||
row, err := tx.Query(query, newOrder.Name, newOrder.Surname, newOrder.Phone, newOrder.Location, accepted, date, newOrder.Status, newOrder.Paid)
|
||||
if err != nil {
|
||||
tx.Rollback()
|
||||
return -1, err
|
||||
_ = tx.Rollback()
|
||||
return 0, err
|
||||
}
|
||||
defer row.Close()
|
||||
|
||||
row.Next()
|
||||
if !row.Next() {
|
||||
_ = tx.Rollback()
|
||||
return 0, errors.New("The database didn't respond with an id")
|
||||
}
|
||||
err = row.Scan(&newOrder.ID)
|
||||
if err != nil {
|
||||
tx.Rollback()
|
||||
_ = tx.Rollback()
|
||||
return newOrder.ID, err
|
||||
}
|
||||
|
||||
|
|
@ -210,7 +233,7 @@ func (s *Store) SaveOrder(newOrder Order) (int, error) {
|
|||
query = "delete from ordered_cake where customer_order = ?;"
|
||||
_, err = tx.Exec(query, newOrder.ID)
|
||||
if err != nil {
|
||||
tx.Rollback()
|
||||
_ = tx.Rollback()
|
||||
return newOrder.ID, err
|
||||
}
|
||||
|
||||
|
|
@ -219,7 +242,7 @@ func (s *Store) SaveOrder(newOrder Order) (int, error) {
|
|||
for _, e := range newOrder.Cakes {
|
||||
_, err := tx.Exec(query, newOrder.ID, e.ID, e.Amount)
|
||||
if err != nil {
|
||||
tx.Rollback()
|
||||
_ = tx.Rollback()
|
||||
return newOrder.ID, err
|
||||
}
|
||||
}
|
||||
|
|
@ -29,7 +29,7 @@ func TestStore(t *testing.T) {
|
|||
}
|
||||
|
||||
// create new cake
|
||||
newCake := Cake{Name: "Chocolate Cake", ID: -1, Price: 2500, Amount: -1}
|
||||
newCake := Cake{Name: "Chocolate Cake", Price: 2500}
|
||||
newCake.ID, err = s.SaveCake(newCake)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to save new cake: %v", err)
|
||||
|
|
@ -39,7 +39,7 @@ func TestStore(t *testing.T) {
|
|||
}
|
||||
|
||||
// create another cake
|
||||
anotherCake := Cake{Name: "Another Cake", ID: -1, Price: 3000, Amount: -1}
|
||||
anotherCake := Cake{Name: "Another Cake", Price: 3000}
|
||||
anotherCake.ID, err = s.SaveCake(anotherCake)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to save new cake: %v", err)
|
||||
|
|
@ -112,7 +112,6 @@ func TestStore(t *testing.T) {
|
|||
// create new order
|
||||
now := time.Now()
|
||||
newOrder := Order{
|
||||
ID: -1,
|
||||
Name: "John",
|
||||
Surname: "Doe",
|
||||
Phone: "123-456-7890",
|
||||
|
|
@ -133,7 +132,6 @@ func TestStore(t *testing.T) {
|
|||
|
||||
// create another order
|
||||
anotherOrder := Order{
|
||||
ID: -1,
|
||||
Name: "Jane",
|
||||
Surname: "Doe",
|
||||
Phone: "123-456-7890",
|
||||
|
|
@ -198,8 +196,8 @@ func TestStore(t *testing.T) {
|
|||
newOrder.Phone != orders[newOrderPos].Phone ||
|
||||
newOrder.Status != orders[newOrderPos].Status ||
|
||||
newOrder.Location != orders[newOrderPos].Location ||
|
||||
newOrder.Accepted.Format("2006-01-02 15:04") != newOrder.Accepted.Format("2006-01-02 15:04") ||
|
||||
newOrder.Date.Format("2006-01-02 15:04") != newOrder.Date.Format("2006-01-02 15:04") {
|
||||
newOrder.Accepted.Format("2006-01-02 15:04") != orders[newOrderPos].Accepted.Format("2006-01-02 15:04") ||
|
||||
newOrder.Date.Format("2006-01-02 15:04") != orders[newOrderPos].Date.Format("2006-01-02 15:04") {
|
||||
t.Errorf("Want %v\nGot %v", newOrder, orders[newOrderPos])
|
||||
}
|
||||
if !areCakeSlicesEqual(newOrder.Cakes, orders[newOrderPos].Cakes) {
|
||||
|
|
@ -214,8 +212,8 @@ func TestStore(t *testing.T) {
|
|||
anotherOrder.Phone != orders[anotherOrderPos].Phone ||
|
||||
anotherOrder.Status != orders[anotherOrderPos].Status ||
|
||||
anotherOrder.Location != orders[anotherOrderPos].Location ||
|
||||
anotherOrder.Accepted.Format("2006-01-02 15:04") != anotherOrder.Accepted.Format("2006-01-02 15:04") ||
|
||||
anotherOrder.Date.Format("2006-01-02 15:04") != anotherOrder.Date.Format("2006-01-02 15:04") {
|
||||
anotherOrder.Accepted.Format("2006-01-02 15:04") != orders[anotherOrderPos].Accepted.Format("2006-01-02 15:04") ||
|
||||
anotherOrder.Date.Format("2006-01-02 15:04") != orders[anotherOrderPos].Date.Format("2006-01-02 15:04") {
|
||||
t.Errorf("Want %v\nGot %v", anotherOrder, orders[anotherOrderPos])
|
||||
}
|
||||
|
||||
|
|
@ -232,8 +230,8 @@ func TestStore(t *testing.T) {
|
|||
newOrder.Phone != selectedOrder.Phone ||
|
||||
newOrder.Status != selectedOrder.Status ||
|
||||
newOrder.Location != selectedOrder.Location ||
|
||||
newOrder.Accepted.Format("2006-01-02 15:04") != newOrder.Accepted.Format("2006-01-02 15:04") ||
|
||||
newOrder.Date.Format("2006-01-02 15:04") != newOrder.Date.Format("2006-01-02 15:04") {
|
||||
newOrder.Accepted.Format("2006-01-02 15:04") != selectedOrder.Accepted.Format("2006-01-02 15:04") ||
|
||||
newOrder.Date.Format("2006-01-02 15:04") != selectedOrder.Date.Format("2006-01-02 15:04") {
|
||||
t.Errorf("Want %v\nGot %v", newOrder, selectedOrder)
|
||||
}
|
||||
|
||||
20
main.go
20
main.go
|
|
@ -1,23 +1,7 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"log"
|
||||
"net/http"
|
||||
|
||||
"github.com/Bronku/iroon/auth"
|
||||
"github.com/Bronku/iroon/logging"
|
||||
"github.com/Bronku/iroon/server"
|
||||
)
|
||||
import "github.com/Bronku/iroon/cmd/iroon"
|
||||
|
||||
func main() {
|
||||
h, err := server.New()
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
defer h.Close()
|
||||
|
||||
var handler http.Handler = h
|
||||
handler = logging.Middleware(handler)
|
||||
handler = auth.New().Middleware(handler)
|
||||
log.Fatal(http.ListenAndServe(":8080", handler))
|
||||
iroon.Run()
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue