summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRené 'Necoro' Neumann <necoro@necoro.eu>2024-10-11 22:47:16 +0200
committerRené 'Necoro' Neumann <necoro@necoro.eu>2024-10-11 22:47:39 +0200
commitb46012f212a4302b4d1325d8fdf9634e7083e76a (patch)
tree095d00491c385c33674f5a0a11128a543a48c485
parente79d3d7163657f7a540530dddb319f984885e864 (diff)
downloadgosten-b46012f212a4302b4d1325d8fdf9634e7083e76a.tar.gz
gosten-b46012f212a4302b4d1325d8fdf9634e7083e76a.tar.bz2
gosten-b46012f212a4302b4d1325d8fdf9634e7083e76a.zip
First draft of recurrent costs and categories
-rw-r--r--main.go18
-rw-r--r--model/categories.sql.go46
-rw-r--r--model/models.go2
-rw-r--r--model/rexps.sql.go59
-rw-r--r--sql/categories.sql4
-rw-r--r--sql/ddl/pgsql.sql4
-rw-r--r--sql/rexps.sql4
-rw-r--r--templ/categories.tpl9
-rw-r--r--templ/navlinks.tpl2
-rw-r--r--templ/recur.tpl9
10 files changed, 153 insertions, 4 deletions
diff --git a/main.go b/main.go
index 84dcd6e..29c85da 100644
--- a/main.go
+++ b/main.go
@@ -64,6 +64,8 @@ func main() {
// handlers that required authentification
authMux.Handle("GET /{$}", indexPage())
+ authMux.Handle("GET /recur/{$}", recurPage())
+ authMux.Handle("GET /categories/{$}", categoriesPage())
authMux.Handle("GET /", notfound())
log.Fatal(http.ListenAndServe(os.Getenv("GOSTEN_ADDRESS"), handler))
@@ -83,6 +85,22 @@ func indexPage() http.HandlerFunc {
}
}
+func recurPage() http.HandlerFunc {
+ return func(w http.ResponseWriter, r *http.Request) {
+ uid := userId(r)
+ exps, _ := Q.GetRecurExpenses(r.Context(), uid)
+ showTemplate(w, "recur", exps)
+ }
+}
+
+func categoriesPage() http.HandlerFunc {
+ return func(w http.ResponseWriter, r *http.Request) {
+ uid := userId(r)
+ cats, _ := Q.GetCategories(r.Context(), uid)
+ showTemplate(w, "categories", cats)
+ }
+}
+
func notfound() http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
showTemplate(w, "404", r.RequestURI)
diff --git a/model/categories.sql.go b/model/categories.sql.go
new file mode 100644
index 0000000..74eb8a9
--- /dev/null
+++ b/model/categories.sql.go
@@ -0,0 +1,46 @@
+// Code generated by sqlc. DO NOT EDIT.
+// versions:
+// sqlc v1.25.0
+// source: categories.sql
+
+package model
+
+import (
+ "context"
+)
+
+const getCategories = `-- name: GetCategories :many
+SELECT id, name
+ FROM categories
+ WHERE user_id = $1
+`
+
+type GetCategoriesRow struct {
+ ID int32
+ Name string
+}
+
+// GetCategories
+//
+// SELECT id, name
+// FROM categories
+// WHERE user_id = $1
+func (q *Queries) GetCategories(ctx context.Context, userID int32) ([]GetCategoriesRow, error) {
+ rows, err := q.db.Query(ctx, getCategories, userID)
+ if err != nil {
+ return nil, err
+ }
+ defer rows.Close()
+ var items []GetCategoriesRow
+ for rows.Next() {
+ var i GetCategoriesRow
+ if err := rows.Scan(&i.ID, &i.Name); err != nil {
+ return nil, err
+ }
+ items = append(items, i)
+ }
+ if err := rows.Err(); err != nil {
+ return nil, err
+ }
+ return items, nil
+}
diff --git a/model/models.go b/model/models.go
index 2ac5a4b..b2a47dc 100644
--- a/model/models.go
+++ b/model/models.go
@@ -15,7 +15,7 @@ type Category struct {
UserID int32
}
-type ConstExpense struct {
+type RecurExpense struct {
ID int32
Description pgtype.Text
Expense pgtype.Numeric
diff --git a/model/rexps.sql.go b/model/rexps.sql.go
new file mode 100644
index 0000000..9b32c5b
--- /dev/null
+++ b/model/rexps.sql.go
@@ -0,0 +1,59 @@
+// Code generated by sqlc. DO NOT EDIT.
+// versions:
+// sqlc v1.25.0
+// source: rexps.sql
+
+package model
+
+import (
+ "context"
+
+ "github.com/jackc/pgx/v5/pgtype"
+)
+
+const getRecurExpenses = `-- name: GetRecurExpenses :many
+SELECT id, description, expense, duration, start, "end"
+ FROM recur_expenses
+ WHERE user_id = $1
+`
+
+type GetRecurExpensesRow struct {
+ ID int32
+ Description pgtype.Text
+ Expense pgtype.Numeric
+ Duration pgtype.Interval
+ Start pgtype.Date
+ End pgtype.Date
+}
+
+// GetRecurExpenses
+//
+// SELECT id, description, expense, duration, start, "end"
+// FROM recur_expenses
+// WHERE user_id = $1
+func (q *Queries) GetRecurExpenses(ctx context.Context, userID int32) ([]GetRecurExpensesRow, error) {
+ rows, err := q.db.Query(ctx, getRecurExpenses, userID)
+ if err != nil {
+ return nil, err
+ }
+ defer rows.Close()
+ var items []GetRecurExpensesRow
+ for rows.Next() {
+ var i GetRecurExpensesRow
+ if err := rows.Scan(
+ &i.ID,
+ &i.Description,
+ &i.Expense,
+ &i.Duration,
+ &i.Start,
+ &i.End,
+ ); err != nil {
+ return nil, err
+ }
+ items = append(items, i)
+ }
+ if err := rows.Err(); err != nil {
+ return nil, err
+ }
+ return items, nil
+}
diff --git a/sql/categories.sql b/sql/categories.sql
new file mode 100644
index 0000000..2c8e5c7
--- /dev/null
+++ b/sql/categories.sql
@@ -0,0 +1,4 @@
+-- name: GetCategories :many
+SELECT id, name
+ FROM categories
+ WHERE user_id = $1; \ No newline at end of file
diff --git a/sql/ddl/pgsql.sql b/sql/ddl/pgsql.sql
index 09c7133..18dc388 100644
--- a/sql/ddl/pgsql.sql
+++ b/sql/ddl/pgsql.sql
@@ -19,14 +19,14 @@ CREATE INDEX user_id
ON categories (user_id);
-CREATE TABLE const_expenses (
+CREATE TABLE recur_expenses (
id SERIAL PRIMARY KEY,
description TEXT,
expense NUMERIC(10, 2) NOT NULL,
duration INTERVAL NOT NULL,
start DATE NOT NULL,
"end" DATE NOT NULL,
- prev_id INTEGER REFERENCES const_expenses,
+ prev_id INTEGER REFERENCES recur_expenses,
category_id INTEGER NOT NULL REFERENCES categories,
user_id INTEGER NOT NULL REFERENCES users
);
diff --git a/sql/rexps.sql b/sql/rexps.sql
new file mode 100644
index 0000000..87dc23f
--- /dev/null
+++ b/sql/rexps.sql
@@ -0,0 +1,4 @@
+-- name: GetRecurExpenses :many
+SELECT id, description, expense, duration, start, "end"
+ FROM recur_expenses
+ WHERE user_id = $1; \ No newline at end of file
diff --git a/templ/categories.tpl b/templ/categories.tpl
new file mode 100644
index 0000000..662e1e1
--- /dev/null
+++ b/templ/categories.tpl
@@ -0,0 +1,9 @@
+{{define "main"}}
+<ul class="list-group">
+ {{range .}}
+ <li class="list-group-item">
+ {{.Name}}
+ </li>
+ {{end}}
+</ul>
+{{end}} \ No newline at end of file
diff --git a/templ/navlinks.tpl b/templ/navlinks.tpl
index 0d71d7e..cdd54d7 100644
--- a/templ/navlinks.tpl
+++ b/templ/navlinks.tpl
@@ -3,6 +3,6 @@
<a class="nav-link" href="/categories">Kategorien</a>
</li>
<li class="nav-item">
- <a class="nav-link" href="/constant">Konstante Kosten</a>
+ <a class="nav-link" href="/recur">Regelmäßig</a>
</li>
{{end}} \ No newline at end of file
diff --git a/templ/recur.tpl b/templ/recur.tpl
new file mode 100644
index 0000000..316b768
--- /dev/null
+++ b/templ/recur.tpl
@@ -0,0 +1,9 @@
+{{define "main"}}
+<ul class="list-group">
+ {{range .}}
+ <li class="list-group-item">
+ {{.Description.String}}
+ </li>
+ {{end}}
+</ul>
+{{end}} \ No newline at end of file