From 931c493928d6fb7b0036981bc1559af9e7ac269b Mon Sep 17 00:00:00 2001 From: "Zed A. Shaw" Date: Thu, 18 Sep 2025 14:57:52 -0400 Subject: [PATCH] Games now have a page and everything works on multiple size screens, but I need to do a serious refactoring to normalize all data to be Go style. --- admin/db.go | 3 +- common/api.go | 4 +- data/models.go | 4 ++ migrations/20250918184107_game_page_info.sql | 15 +++++ static/images/game_mini_header.png | Bin 0 -> 7268 bytes static/input_style.css | 2 +- static/style.css | 57 ++++++++++++++++- views/game.html | 62 ++++++++++++------- views/layouts/main.html | 2 +- 9 files changed, 123 insertions(+), 26 deletions(-) create mode 100644 migrations/20250918184107_game_page_info.sql create mode 100644 static/images/game_mini_header.png diff --git a/admin/db.go b/admin/db.go index 89b7735..af662c7 100644 --- a/admin/db.go +++ b/admin/db.go @@ -127,13 +127,14 @@ func Update(table string, value reflect.Value) error { // skip update of id to avoid replacing it if tag == "id" { continue } + fmt.Println(">>>>>>>>>>>>>>>>> field", tag, "=", field.Interface()) builder = builder.Set(tag, field.Interface()) } builder = builder.Where(sq.Eq{"id": value.FieldByName("Id").Interface()}) sql_query, args, err := builder.ToSql() - fmt.Println("UPDATE QUERY", sql_query, args) + fmt.Println("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!UPDATE QUERY", sql_query, args) if err != nil { return err} _, err = data.DB.Exec(sql_query, args...) diff --git a/common/api.go b/common/api.go index 9d3f70b..6028589 100644 --- a/common/api.go +++ b/common/api.go @@ -56,7 +56,9 @@ func ReflectOnPost(typeOf reflect.Type, c *fiber.Ctx) (reflect.Value, error) { var validate *validator.Validate validate = validator.New(validator.WithRequiredStructEnabled()) - if err := validate.Struct(result); err != nil { + err := validate.Struct(result) + + if err != nil { validationErrors := err.(validator.ValidationErrors) log.Println(validationErrors) return result_val, err diff --git a/data/models.go b/data/models.go index 3021b26..7cfbeb9 100644 --- a/data/models.go +++ b/data/models.go @@ -36,6 +36,10 @@ type Game struct { Url string `db:"url" json:"url"` Tags string `db:"tags" json:"tags"` Video string `db:"video" json:"video"` + CurrentStatus string `db:"current_status" json:"current_status" form:"current_status"` + PlannedWork string `db:"planned_work" json:"planned_work" form:"planned_work"` + CodeUrl string `db:"code_url" json:"code_url" form:"code_url"` + HeaderImage string `db:"header_image" json:"header_image" form:"header_image"` } func Models() map[string]reflect.Type { diff --git a/migrations/20250918184107_game_page_info.sql b/migrations/20250918184107_game_page_info.sql new file mode 100644 index 0000000..e8c3559 --- /dev/null +++ b/migrations/20250918184107_game_page_info.sql @@ -0,0 +1,15 @@ +-- +goose Up +-- +goose StatementBegin +ALTER TABLE game ADD COLUMN current_status TEXT DEFAULT ""; +ALTER TABLE game ADD COLUMN planned_work TEXT DEFAULT ""; +ALTER TABLE game ADD COLUMN code_url TEXT DEFAULT ""; +ALTER TABLE game ADD COLUMN header_image TEXT DEFAULT ""; +-- +goose StatementEnd + +-- +goose Down +-- +goose StatementBegin +ALTER TABLE game DROP COLUMN current_status; +ALTER TABLE game DROP COLUMN planned_work; +ALTER TABLE game DROP COLUMN code_url; +ALTER TABLE game DROP COLUMN header_image; +-- +goose StatementEnd diff --git a/static/images/game_mini_header.png b/static/images/game_mini_header.png new file mode 100644 index 0000000000000000000000000000000000000000..600c910d8f95f563d92b77c1682497af4189a3e9 GIT binary patch literal 7268 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 *) { + padding: calc(var(--spacing) * 0) !important; + } + } .\*\:text-xl { :is(& > *) { font-size: var(--text-xl); @@ -1045,9 +1097,12 @@ block.center-vertical { } bar { display: flex; - flex-direction: row; + flex-direction: column; gap: calc(var(--spacing) * 4); padding: calc(var(--spacing) * 4); + @media (width >= 40rem) { + flex-direction: row; + } } bar.center-horizontal { justify-content: center; diff --git a/views/game.html b/views/game.html index 6d4deda..b86739f 100644 --- a/views/game.html +++ b/views/game.html @@ -6,35 +6,55 @@
- small header -

+ + +

+ + + + + + +
RECENT REVIEWS:Insanely Optimistic
ENGLISH REVIEWS:Probably Racist
RELEASE DATE:A Total Fantasy
DEVELOPER:Zed A. Shaw
PUBLISHER:My Fucking Self
+
+
+
+
-
- + -

Polaroid retro pork belly yes plz bitters, viral chicharrones typewriter chartreuse vice Brooklyn. Adaptogen pour-over vibecession viral. Tote bag tonx DIY microdosing. Pickled selvage bespoke small batch, blue bottle twee tacos jean shorts before they sold out chicharrones solarpunk. Hoodie taiyaki poutine jianbing chambray.

-
+ + +
- -

Current Status

-

Polaroid retro pork belly yes plz bitters, viral chicharrones typewriter chartreuse vice Brooklyn. Adaptogen pour-over vibecession viral. Tote bag tonx DIY microdosing. Pickled selvage bespoke small batch, blue bottle twee tacos jean shorts before they sold out chicharrones solarpunk. Hoodie taiyaki poutine jianbing chambray.

+ +

Current Status

+

+
-

Planned Work

-

Polaroid retro pork belly yes plz bitters, viral chicharrones typewriter chartreuse vice Brooklyn. Adaptogen pour-over vibecession viral. Tote bag tonx DIY microdosing. Pickled selvage bespoke small batch, blue bottle twee tacos jean shorts before they sold out chicharrones solarpunk. Hoodie taiyaki poutine jianbing chambray.

-
+ +

Planned Work

+

+
- -

Read The Code

-

Polaroid retro pork belly yes plz bitters, viral chicharrones typewriter chartreuse vice Brooklyn. Adaptogen pour-over vibecession viral. Tote bag tonx DIY microdosing. Pickled selvage bespoke small batch, blue bottle twee tacos jean shorts before they sold out chicharrones solarpunk. Hoodie taiyaki poutine jianbing chambray.

- + +

Read The Code

+

All of the code for this project is online in my personal git repository. It's not open source, but you can read the code, run the game, and learn from it. Think of it like the programmer's version of a thirst trap on Instagram. You can look but you own nothing.

+ +
-
+ diff --git a/views/layouts/main.html b/views/layouts/main.html index c002486..c1ab9f5 100644 --- a/views/layouts/main.html +++ b/views/layouts/main.html @@ -3,7 +3,7 @@ - +