From 23392cc5c18f7782058cd3b1f78ad8817dd71f0b Mon Sep 17 00:00:00 2001 From: kalipso Date: Tue, 4 Mar 2025 11:30:26 +0100 Subject: [PATCH] cartItem one2one relation to shopitem --- controllers/cartItemController.go | 18 +- models/cart.go | 6 +- repositories/cartItemRepository.go | 9 +- static/output.css | 519 +++++++++++++++++++---------- views/cart.html | 139 +++++++- views/shopitem.html | 6 +- 6 files changed, 494 insertions(+), 203 deletions(-) diff --git a/controllers/cartItemController.go b/controllers/cartItemController.go index 5d2ce55..e74c584 100644 --- a/controllers/cartItemController.go +++ b/controllers/cartItemController.go @@ -3,7 +3,6 @@ package controllers import ( "fmt" "net/http" - "strconv" "crypto/rand" "encoding/hex" @@ -49,29 +48,22 @@ func GetSessionId(ctx *gin.Context) string { } func (rc *cartItemController) NewCartItemFromForm(ctx *gin.Context) (models.CartItem, error) { - fmt.Println("NEWITEM") sessionId := GetSessionId(ctx) + shopItemId := ctx.PostForm("ShopItemId") + quantity := 1 - shopItemId, err := strconv.Atoi(ctx.PostForm("ShopItemId")) + shopItem, err := repositories.ShopItems.GetById(shopItemId) if err != nil { return models.CartItem{}, err } - quantity := 1 - //quantity, err := strconv.Atoi(ctx.PostForm("quantity")) - - //if err != nil { - // return models.CartItem{}, err - //} - cartItem := models.CartItem{ SessionId: sessionId, - ShopItemId: shopItemId, + ShopItem: shopItem, Quantity: quantity, } - fmt.Println("NEWITEM") return cartItem, nil } @@ -133,6 +125,8 @@ func (rc *cartItemController) CartItemView(c *gin.Context) { c.HTML(http.StatusBadRequest, "cart.html", gin.H{ "data": gin.H{ "error": err } }) } + fmt.Printf("CARTITEMS: %v\n", cartItems) + data := CreateSessionData(c, gin.H{ "cartItems": cartItems, }) diff --git a/models/cart.go b/models/cart.go index db07da1..7ada1c9 100644 --- a/models/cart.go +++ b/models/cart.go @@ -6,7 +6,7 @@ import ( type CartItem struct { gorm.Model - SessionId string `gorm:"index"` - ShopItemId int `gorm:"index"` - Quantity int + SessionId string `json:"sessionid" binding:"required" gorm:"not null"` + ShopItem ShopItem `json:"shopitem" gorm:"foreignKey:ID"` //gorm one2one + Quantity int `json:"quantity" binding:"required"` } diff --git a/repositories/cartItemRepository.go b/repositories/cartItemRepository.go index 79a481f..0f85a85 100644 --- a/repositories/cartItemRepository.go +++ b/repositories/cartItemRepository.go @@ -34,20 +34,25 @@ func (r *GORMCartItemRepository) Create(cartItem models.CartItem) (models.CartIt func (r *GORMCartItemRepository) GetAll() ([]models.CartItem, error) { var cartItems []models.CartItem - result := r.DB.Find(&cartItems) + result := r.DB.Preload("ShopItem").Find(&cartItems) return cartItems, result.Error } func (r *GORMCartItemRepository) GetAllBySession(sessionId string) ([]models.CartItem, error) { var cartItems []models.CartItem - result := r.DB.Where("session_id = ?", sessionId).Find(&cartItems) + result := r.DB.Preload("ShopItem").Where("session_id = ?", sessionId).Find(&cartItems) return cartItems, result.Error } func (r *GORMCartItemRepository) Update(cartItem models.CartItem) (models.CartItem, error) { + err := r.DB.Model(&cartItem).Association("Tags").Replace(cartItem.ShopItem) + if err != nil { + return models.CartItem{}, err + } + result := r.DB.Save(&cartItem) if result.Error != nil { return models.CartItem{}, result.Error diff --git a/static/output.css b/static/output.css index e1c3a4b..ca8ab7c 100644 --- a/static/output.css +++ b/static/output.css @@ -587,6 +587,10 @@ video { right: 0px; } +.col-span-12 { + grid-column: span 12 / span 12; +} + .m-2 { margin: 0.5rem; } @@ -595,11 +599,6 @@ video { margin: 1rem; } -.mx-auto { - margin-left: auto; - margin-right: auto; -} - .-mx-2 { margin-left: -0.5rem; margin-right: -0.5rem; @@ -610,9 +609,13 @@ video { margin-right: -1rem; } -.-mx-3 { - margin-left: -0.75rem; - margin-right: -0.75rem; +.mx-auto { + margin-left: auto; + margin-right: auto; +} + +.mb-2 { + margin-bottom: 0.5rem; } .mb-4 { @@ -623,6 +626,18 @@ video { margin-left: 0.5rem; } +.ml-4 { + margin-left: 1rem; +} + +.mr-2 { + margin-right: 0.5rem; +} + +.mr-4 { + margin-right: 1rem; +} + .mt-1 { margin-top: 0.25rem; } @@ -643,24 +658,16 @@ video { margin-top: 1.5rem; } -.mb-2 { - margin-bottom: 0.5rem; +.mb-5 { + margin-bottom: 1.25rem; } -.mr-2 { - margin-right: 0.5rem; +.mb-6 { + margin-bottom: 1.5rem; } -.mr-4 { - margin-right: 1rem; -} - -.mt-12 { - margin-top: 3rem; -} - -.ml-4 { - margin-left: 1rem; +.mb-8 { + margin-bottom: 2rem; } .block { @@ -699,18 +706,10 @@ video { height: 1rem; } -.h-48 { - height: 12rem; -} - .h-8 { height: 2rem; } -.h-6 { - height: 1.5rem; -} - .h-\[460px\] { height: 460px; } @@ -723,6 +722,10 @@ video { min-height: 100%; } +.w-1\/3 { + width: 33.333333%; +} + .w-12 { width: 3rem; } @@ -739,20 +742,8 @@ video { width: 100%; } -.w-1\/2 { - width: 50%; -} - -.w-6 { - width: 1.5rem; -} - -.w-1\/3 { - width: 33.333333%; -} - -.max-w-7xl { - max-width: 80rem; +.w-10 { + width: 2.5rem; } .max-w-2xl { @@ -763,6 +754,10 @@ video { max-width: 72rem; } +.max-w-7xl { + max-width: 80rem; +} + .max-w-md { max-width: 28rem; } @@ -787,8 +782,8 @@ video { grid-template-columns: repeat(1, minmax(0, 1fr)); } -.grid-cols-2 { - grid-template-columns: repeat(2, minmax(0, 1fr)); +.grid-cols-12 { + grid-template-columns: repeat(12, minmax(0, 1fr)); } .flex-col { @@ -807,6 +802,14 @@ video { justify-content: space-between; } +.gap-4 { + gap: 1rem; +} + +.gap-5 { + gap: 1.25rem; +} + .gap-x-6 { -moz-column-gap: 1.5rem; column-gap: 1.5rem; @@ -816,6 +819,10 @@ video { row-gap: 2.5rem; } +.gap-y-4 { + row-gap: 1rem; +} + .space-x-4 > :not([hidden]) ~ :not([hidden]) { --tw-space-x-reverse: 0; margin-right: calc(1rem * var(--tw-space-x-reverse)); @@ -840,10 +847,18 @@ video { margin-bottom: calc(1.5rem * var(--tw-space-y-reverse)); } +.whitespace-nowrap { + white-space: nowrap; +} + .rounded { border-radius: 0.25rem; } +.rounded-full { + border-radius: 9999px; +} + .rounded-lg { border-radius: 0.5rem; } @@ -852,8 +867,12 @@ video { border-radius: 0.375rem; } -.rounded-full { - border-radius: 9999px; +.rounded-3xl { + border-radius: 1.5rem; +} + +.rounded-\[50px\] { + border-radius: 50px; } .rounded-l-md { @@ -861,11 +880,6 @@ video { border-bottom-left-radius: 0.375rem; } -.rounded-r-md { - border-top-right-radius: 0.375rem; - border-bottom-right-radius: 0.375rem; -} - .border { border-width: 1px; } @@ -874,6 +888,10 @@ video { border-width: 2px; } +.border-b { + border-bottom-width: 1px; +} + .border-dashed { border-style: dashed; } @@ -883,11 +901,36 @@ video { border-color: rgb(209 213 219 / var(--tw-border-opacity, 1)); } +.border-gray-200 { + --tw-border-opacity: 1; + border-color: rgb(229 231 235 / var(--tw-border-opacity, 1)); +} + +.bg-blue-600 { + --tw-bg-opacity: 1; + background-color: rgb(37 99 235 / var(--tw-bg-opacity, 1)); +} + +.bg-blue-900 { + --tw-bg-opacity: 1; + background-color: rgb(30 58 138 / var(--tw-bg-opacity, 1)); +} + +.bg-gray-100 { + --tw-bg-opacity: 1; + background-color: rgb(243 244 246 / var(--tw-bg-opacity, 1)); +} + .bg-gray-200 { --tw-bg-opacity: 1; background-color: rgb(229 231 235 / var(--tw-bg-opacity, 1)); } +.bg-gray-300 { + --tw-bg-opacity: 1; + background-color: rgb(209 213 219 / var(--tw-bg-opacity, 1)); +} + .bg-gray-800 { --tw-bg-opacity: 1; background-color: rgb(31 41 55 / var(--tw-bg-opacity, 1)); @@ -898,74 +941,46 @@ video { background-color: rgb(17 24 39 / var(--tw-bg-opacity, 1)); } +.bg-green-600 { + --tw-bg-opacity: 1; + background-color: rgb(22 163 74 / var(--tw-bg-opacity, 1)); +} + .bg-indigo-600 { --tw-bg-opacity: 1; background-color: rgb(79 70 229 / var(--tw-bg-opacity, 1)); } -.bg-white { - --tw-bg-opacity: 1; - background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1)); -} - -.bg-blue-500 { - --tw-bg-opacity: 1; - background-color: rgb(59 130 246 / var(--tw-bg-opacity, 1)); -} - -.bg-gray-100 { - --tw-bg-opacity: 1; - background-color: rgb(243 244 246 / var(--tw-bg-opacity, 1)); -} - -.bg-gray-300 { - --tw-bg-opacity: 1; - background-color: rgb(209 213 219 / var(--tw-bg-opacity, 1)); -} - -.bg-red-500 { - --tw-bg-opacity: 1; - background-color: rgb(239 68 68 / var(--tw-bg-opacity, 1)); -} - -.bg-yellow-500 { - --tw-bg-opacity: 1; - background-color: rgb(234 179 8 / var(--tw-bg-opacity, 1)); -} - -.bg-red-900 { - --tw-bg-opacity: 1; - background-color: rgb(127 29 29 / var(--tw-bg-opacity, 1)); -} - -.bg-blue-900 { - --tw-bg-opacity: 1; - background-color: rgb(30 58 138 / var(--tw-bg-opacity, 1)); -} - -.bg-blue-600 { - --tw-bg-opacity: 1; - background-color: rgb(37 99 235 / var(--tw-bg-opacity, 1)); -} - -.bg-red-600 { - --tw-bg-opacity: 1; - background-color: rgb(220 38 38 / var(--tw-bg-opacity, 1)); -} - -.bg-red-300 { - --tw-bg-opacity: 1; - background-color: rgb(252 165 165 / var(--tw-bg-opacity, 1)); -} - .bg-red-800 { --tw-bg-opacity: 1; background-color: rgb(153 27 27 / var(--tw-bg-opacity, 1)); } -.bg-green-600 { +.bg-red-900 { --tw-bg-opacity: 1; - background-color: rgb(22 163 74 / var(--tw-bg-opacity, 1)); + background-color: rgb(127 29 29 / var(--tw-bg-opacity, 1)); +} + +.bg-white { + --tw-bg-opacity: 1; + background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1)); +} + +.bg-indigo-50 { + --tw-bg-opacity: 1; + background-color: rgb(238 242 255 / var(--tw-bg-opacity, 1)); +} + +.fill-red-50 { + fill: #fef2f2; +} + +.stroke-gray-900 { + stroke: #111827; +} + +.stroke-red-500 { + stroke: #ef4444; } .object-cover { @@ -981,6 +996,10 @@ video { padding: 1rem; } +.p-2\.5 { + padding: 0.625rem; +} + .px-2 { padding-left: 0.5rem; padding-right: 0.5rem; @@ -1011,21 +1030,36 @@ video { padding-bottom: 3rem; } -.py-2 { - padding-top: 0.5rem; - padding-bottom: 0.5rem; -} - .py-16 { padding-top: 4rem; padding-bottom: 4rem; } +.py-2 { + padding-top: 0.5rem; + padding-bottom: 0.5rem; +} + .py-8 { padding-top: 2rem; padding-bottom: 2rem; } +.py-2\.5 { + padding-top: 0.625rem; + padding-bottom: 0.625rem; +} + +.py-24 { + padding-top: 6rem; + padding-bottom: 6rem; +} + +.py-4 { + padding-top: 1rem; + padding-bottom: 1rem; +} + .pb-3 { padding-bottom: 0.75rem; } @@ -1054,6 +1088,15 @@ video { text-align: center; } +.text-right { + text-align: right; +} + +.text-2xl { + font-size: 1.5rem; + line-height: 2rem; +} + .text-2xl\/9 { font-size: 1.5rem; line-height: 2.25rem; @@ -1084,9 +1127,14 @@ video { line-height: 1rem; } -.text-2xl { - font-size: 1.5rem; - line-height: 2rem; +.text-3xl { + font-size: 1.875rem; + line-height: 2.25rem; +} + +.text-4xl { + font-size: 2.25rem; + line-height: 2.5rem; } .font-bold { @@ -1101,6 +1149,22 @@ video { font-weight: 600; } +.font-normal { + font-weight: 400; +} + +.leading-10 { + line-height: 2.5rem; +} + +.leading-7 { + line-height: 1.75rem; +} + +.leading-9 { + line-height: 2.25rem; +} + .tracking-tight { letter-spacing: -0.025em; } @@ -1125,6 +1189,11 @@ video { color: rgb(55 65 81 / var(--tw-text-opacity, 1)); } +.text-gray-800 { + --tw-text-opacity: 1; + color: rgb(31 41 55 / var(--tw-text-opacity, 1)); +} + .text-gray-900 { --tw-text-opacity: 1; color: rgb(17 24 39 / var(--tw-text-opacity, 1)); @@ -1155,9 +1224,9 @@ video { color: rgb(255 255 255 / var(--tw-text-opacity, 1)); } -.text-gray-800 { +.text-black { --tw-text-opacity: 1; - color: rgb(31 41 55 / var(--tw-text-opacity, 1)); + color: rgb(0 0 0 / var(--tw-text-opacity, 1)); } .shadow-sm { @@ -1166,6 +1235,16 @@ video { box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); } +.shadow-transparent { + --tw-shadow-color: transparent; + --tw-shadow: var(--tw-shadow-colored); +} + +.outline-none { + outline: 2px solid transparent; + outline-offset: 2px; +} + .outline { outline-style: solid; } @@ -1182,6 +1261,16 @@ video { outline-color: #d1d5db; } +.transition-all { + transition-property: all; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 150ms; +} + +.duration-500 { + transition-duration: 500ms; +} + .placeholder\:text-gray-400::-moz-placeholder { --tw-text-opacity: 1; color: rgb(156 163 175 / var(--tw-text-opacity, 1)); @@ -1197,6 +1286,14 @@ video { outline-offset: 2px; } +.focus-within\:outline-gray-300:focus-within { + outline-color: #d1d5db; +} + +.focus-within\:outline-red-500:focus-within { + outline-color: #ef4444; +} + .focus-within\:ring-2:focus-within { --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color); @@ -1212,29 +1309,9 @@ video { --tw-ring-offset-width: 2px; } -.hover\:bg-gray-700:hover { - --tw-bg-opacity: 1; - background-color: rgb(55 65 81 / var(--tw-bg-opacity, 1)); -} - -.hover\:bg-indigo-500:hover { - --tw-bg-opacity: 1; - background-color: rgb(99 102 241 / var(--tw-bg-opacity, 1)); -} - -.hover\:bg-gray-400:hover { - --tw-bg-opacity: 1; - background-color: rgb(156 163 175 / var(--tw-bg-opacity, 1)); -} - -.hover\:bg-gray-300:hover { - --tw-bg-opacity: 1; - background-color: rgb(209 213 219 / var(--tw-bg-opacity, 1)); -} - -.hover\:bg-gray-800:hover { - --tw-bg-opacity: 1; - background-color: rgb(31 41 55 / var(--tw-bg-opacity, 1)); +.hover\:border-gray-300:hover { + --tw-border-opacity: 1; + border-color: rgb(209 213 219 / var(--tw-border-opacity, 1)); } .hover\:bg-blue-700:hover { @@ -1242,9 +1319,29 @@ video { background-color: rgb(29 78 216 / var(--tw-bg-opacity, 1)); } -.hover\:bg-red-700:hover { +.hover\:bg-gray-400:hover { --tw-bg-opacity: 1; - background-color: rgb(185 28 28 / var(--tw-bg-opacity, 1)); + background-color: rgb(156 163 175 / var(--tw-bg-opacity, 1)); +} + +.hover\:bg-gray-700:hover { + --tw-bg-opacity: 1; + background-color: rgb(55 65 81 / var(--tw-bg-opacity, 1)); +} + +.hover\:bg-gray-800:hover { + --tw-bg-opacity: 1; + background-color: rgb(31 41 55 / var(--tw-bg-opacity, 1)); +} + +.hover\:bg-green-700:hover { + --tw-bg-opacity: 1; + background-color: rgb(21 128 61 / var(--tw-bg-opacity, 1)); +} + +.hover\:bg-indigo-500:hover { + --tw-bg-opacity: 1; + background-color: rgb(99 102 241 / var(--tw-bg-opacity, 1)); } .hover\:bg-red-900:hover { @@ -1252,9 +1349,19 @@ video { background-color: rgb(127 29 29 / var(--tw-bg-opacity, 1)); } -.hover\:bg-green-700:hover { +.hover\:bg-gray-50:hover { --tw-bg-opacity: 1; - background-color: rgb(21 128 61 / var(--tw-bg-opacity, 1)); + background-color: rgb(249 250 251 / var(--tw-bg-opacity, 1)); +} + +.hover\:bg-indigo-100:hover { + --tw-bg-opacity: 1; + background-color: rgb(224 231 255 / var(--tw-bg-opacity, 1)); +} + +.hover\:bg-indigo-700:hover { + --tw-bg-opacity: 1; + background-color: rgb(67 56 202 / var(--tw-bg-opacity, 1)); } .hover\:text-indigo-500:hover { @@ -1267,6 +1374,11 @@ video { color: rgb(255 255 255 / var(--tw-text-opacity, 1)); } +.hover\:shadow-gray-200:hover { + --tw-shadow-color: #e5e7eb; + --tw-shadow: var(--tw-shadow-colored); +} + .focus\:border-blue-500:focus { --tw-border-opacity: 1; border-color: rgb(59 130 246 / var(--tw-border-opacity, 1)); @@ -1320,10 +1432,47 @@ video { outline-color: #4f46e5; } +.group:hover .group-hover\:fill-red-400 { + fill: #f87171; +} + +.group:hover .group-hover\:stroke-black { + stroke: #000; +} + +.group:hover .group-hover\:stroke-white { + stroke: #fff; +} + .group:hover .group-hover\:opacity-75 { opacity: 0.75; } +@media not all and (min-width: 1024px) { + .max-lg\:mx-auto { + margin-left: auto; + margin-right: auto; + } + + .max-lg\:w-full { + width: 100%; + } + + .max-lg\:max-w-lg { + max-width: 32rem; + } +} + +@media not all and (min-width: 768px) { + .max-md\:mb-4 { + margin-bottom: 1rem; + } + + .max-md\:text-center { + text-align: center; + } +} + @media (min-width: 640px) { .sm\:static { position: static; @@ -1362,16 +1511,16 @@ video { grid-template-columns: repeat(2, minmax(0, 1fr)); } - .sm\:px-8 { - padding-left: 2rem; - padding-right: 2rem; - } - .sm\:px-6 { padding-left: 1.5rem; padding-right: 1.5rem; } + .sm\:px-8 { + padding-left: 2rem; + padding-right: 2rem; + } + .sm\:py-24 { padding-top: 6rem; padding-bottom: 6rem; @@ -1388,14 +1537,6 @@ video { } @media (min-width: 768px) { - .md\:h-full { - height: 100%; - } - - .md\:w-48 { - width: 12rem; - } - .md\:flex-1 { flex: 1 1 0%; } @@ -1407,9 +1548,26 @@ video { .md\:flex-row { flex-direction: row; } + + .md\:items-center { + align-items: center; + } + + .md\:px-5 { + padding-left: 1.25rem; + padding-right: 1.25rem; + } } @media (min-width: 1024px) { + .lg\:col-span-10 { + grid-column: span 10 / span 10; + } + + .lg\:col-span-2 { + grid-column: span 2 / span 2; + } + .lg\:aspect-auto { aspect-ratio: auto; } @@ -1418,6 +1576,10 @@ video { height: 20rem; } + .lg\:w-\[180px\] { + width: 180px; + } + .lg\:max-w-7xl { max-width: 80rem; } @@ -1430,10 +1592,23 @@ video { grid-template-columns: repeat(4, minmax(0, 1fr)); } + .lg\:p-8 { + padding: 2rem; + } + .lg\:px-8 { padding-left: 2rem; padding-right: 2rem; } + + .lg\:px-6 { + padding-left: 1.5rem; + padding-right: 1.5rem; + } + + .lg\:pl-3 { + padding-left: 0.75rem; + } } @media (min-width: 1280px) { @@ -1453,21 +1628,6 @@ video { border-color: rgb(75 85 99 / var(--tw-border-opacity, 1)); } - .dark\:bg-gray-800 { - --tw-bg-opacity: 1; - background-color: rgb(31 41 55 / var(--tw-bg-opacity, 1)); - } - - .dark\:bg-blue-700 { - --tw-bg-opacity: 1; - background-color: rgb(29 78 216 / var(--tw-bg-opacity, 1)); - } - - .dark\:bg-gray-200 { - --tw-bg-opacity: 1; - background-color: rgb(229 231 235 / var(--tw-bg-opacity, 1)); - } - .dark\:bg-gray-600 { --tw-bg-opacity: 1; background-color: rgb(75 85 99 / var(--tw-bg-opacity, 1)); @@ -1478,14 +1638,9 @@ video { background-color: rgb(55 65 81 / var(--tw-bg-opacity, 1)); } - .dark\:bg-red-700 { + .dark\:bg-gray-800 { --tw-bg-opacity: 1; - background-color: rgb(185 28 28 / var(--tw-bg-opacity, 1)); - } - - .dark\:bg-yellow-700 { - --tw-bg-opacity: 1; - background-color: rgb(161 98 7 / var(--tw-bg-opacity, 1)); + background-color: rgb(31 41 55 / var(--tw-bg-opacity, 1)); } .dark\:bg-red-600 { diff --git a/views/cart.html b/views/cart.html index 45379bd..83893b5 100644 --- a/views/cart.html +++ b/views/cart.html @@ -1,4 +1,138 @@ {{ template "header.html" . }} + +
+
+ +

Shopping Cart +

+
+
+ speaker image +
+
+
+
Round white portable + speaker
+ +
+

+ Introducing our sleek round white portable speaker, the epitome of style and sound! Elevate your auditory experience with this compact yet powerful device that delivers crystal-clear audio wherever you go. More.... +

+
+
+ + + +
+
$220
+
+
+
+
+
+ speaker image +
+
+
+
Gray round portable + speaker
+ +
+

+ Introducing our sleek round white portable speaker, the epitome of style and sound! Elevate your auditory experience with this compact yet powerful device that delivers crystal-clear audio wherever you go. More.... +

+
+
+ + + +
+
$220
+
+
+
+
+
Subtotal
+ +
+ +
$440
+
+
+
+

Shipping taxes, and discounts + calculated + at checkout

+ + +
+ + +
+ + +
+ + {{ range .data.cartItems }} @@ -6,8 +140,11 @@

- {{ .ShopItemId }} + {{ .SessionId }}

+ {{ .ShopItem.Name }} + {{ .ShopItem.Abstract }} + {{ .ShopItem.Price }}

{{ .Quantity }} pieces

diff --git a/views/shopitem.html b/views/shopitem.html index 231852d..b85b124 100644 --- a/views/shopitem.html +++ b/views/shopitem.html @@ -7,13 +7,12 @@
Product Image
-
- +
+
- {{ if .loggedIn }}
@@ -25,6 +24,7 @@
{{ end }}
+

{{ .data.shopItem.Name }}