From 8cc150569b47ce3ff8f0cfc056a4b88a845adb31 Mon Sep 17 00:00:00 2001 From: Rawley Fowler Date: Mon, 9 May 2022 19:19:16 -0600 Subject: [PATCH] take one on music feature --- controllers/admin.go | 26 +++++++++++++++++++++ controllers/blog.go | 4 ---- controllers/music.go | 48 ++++++++++++++++++++++++++++++++++++++ repos/blog_repo.go | 3 +-- repos/music_repo.go | 35 ++++++++++++++++++++++++--- static/index.css | 19 +++++++++++++++ templates/create_post.tmpl | 5 ++++ templates/tunes.tmpl | 11 +++++++++ 8 files changed, 142 insertions(+), 9 deletions(-) create mode 100644 controllers/music.go create mode 100644 templates/tunes.tmpl diff --git a/controllers/admin.go b/controllers/admin.go index e982518..00e2ad0 100644 --- a/controllers/admin.go +++ b/controllers/admin.go @@ -54,6 +54,7 @@ func RegisterAdminGroup(r *gin.RouterGroup) { r.POST("/login", a.AdminLogin) r.GET("/post", a.AuthMiddleware, utils.ServePage("create_post.tmpl")) r.POST("/post", a.AuthMiddleware, a.CRUDPost) + r.POST("/music", a.AuthMiddleware, a.CreateMusic) r.POST("/user", a.CreateAdmin) } @@ -150,6 +151,31 @@ func (a *AdminController) CRUDPost(c *gin.Context) { c.HTML(http.StatusAccepted, "post_success.tmpl", true) } +func (a *AdminController) CreateMusic(c *gin.Context) { + err := c.Request.ParseForm() + if err != nil { + c.HTML(http.StatusNotAcceptable, "post_success.tmpl", false) + return + } + f := c.Request.Form + if f.Get("url") == "" || + f.Get("name") == "" { + c.HTML(http.StatusNotAcceptable, "post_success.tmpl", false) + return + } + tempMusicRepo := repos.NewMusicRepo("dsn") + tempMusic := &models.Music{ + Url: f.Get("url"), + Name: f.Get("name"), + } + err = tempMusicRepo.CreateMusic(tempMusic) + if err != nil { + c.HTML(http.StatusNotAcceptable, "post_success.tmpl", false) + return + } + c.HTML(http.StatusAccepted, "post_success.tmpl", true) +} + func (a *AdminController) CreateAdmin(c *gin.Context) { err := c.Request.ParseForm() if err != nil { diff --git a/controllers/blog.go b/controllers/blog.go index b4d8f64..7b034f7 100644 --- a/controllers/blog.go +++ b/controllers/blog.go @@ -25,10 +25,6 @@ import ( "github.com/rawleyfowler/rawleydotxyz/repos" ) -type CommentDto struct { - Url string -} - type BlogController struct { Repository *repos.BlogRepo } diff --git a/controllers/music.go b/controllers/music.go new file mode 100644 index 0000000..4248ae5 --- /dev/null +++ b/controllers/music.go @@ -0,0 +1,48 @@ +package controllers + +/* +Copyright (C) 2022 Rawley Fowler +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see .Rawley Fowler, 2022 +*/ + +import ( + "net/http" + + "github.com/gin-gonic/gin" + "github.com/rawleyfowler/rawleydotxyz/repos" +) + +type MusicController struct { + Repository *repos.MusicRepo +} + +func NewMusicController(r *repos.MusicRepo) *MusicController { + c := new(MusicController) + c.Repository = r + return c +} + +func RegisterMusicGroup(r *gin.RouterGroup) { + c := NewMusicController(repos.NewMusicRepo("dsn")) + r.GET("/", c.IndexMusicPage) +} + +func (mc *MusicController) IndexMusicPage(c *gin.Context) { + music, err := mc.Repository.GetAllSongs() + if err != nil { + c.HTML(http.StatusInternalServerError, "internal_server_error.tmpl", &gin.H{}) + return + } + c.HTML(http.StatusOK, "tunes.tmpl", music) +} diff --git a/repos/blog_repo.go b/repos/blog_repo.go index debb3d3..5fe76c3 100644 --- a/repos/blog_repo.go +++ b/repos/blog_repo.go @@ -26,8 +26,7 @@ import ( ) type BlogRepo struct { - DB *gorm.DB - initialized bool + DB *gorm.DB } func NewBlogRepo(dsnPath string) *BlogRepo { diff --git a/repos/music_repo.go b/repos/music_repo.go index b865a59..b6b000c 100644 --- a/repos/music_repo.go +++ b/repos/music_repo.go @@ -18,14 +18,43 @@ along with this program. If not, see .Rawley Fow */ import ( + "errors" + "gorm.io/gorm" + + "github.com/rawleyfowler/rawleydotxyz/models" + "github.com/rawleyfowler/rawleydotxyz/utils" ) type MusicRepo struct { DB *gorm.DB } -func (mr *MusicRepo) GetAllSongs() []Music { - songs := []Music{} - mr.DB.Select() +func NewMusicRepo(dsnPath string) *MusicRepo { + mr := new(MusicRepo) + var err error + mr.DB, err = utils.CreateDatabase(utils.LoadDSN(dsnPath)) + if err != nil { + panic(err) + } + return mr +} + +func (mr *MusicRepo) GetAllSongs() (*[]models.Music, error) { + songs := new([]models.Music) + err := mr.DB.Table("music").Order("name desc").Scan(songs).Error + if err != nil { + return nil, errors.New("Could not load music from database") + } + return songs, nil +} + +func (mr *MusicRepo) CreateMusic(m *models.Music) error { + if m.Name == "" || m.Url == "" { + return errors.New("Cannot add music with empty or partially filled values") + } + if err := mr.DB.Table("music").Save(m).Error; err != nil { + return err + } + return nil } diff --git a/static/index.css b/static/index.css index ff19841..00020a7 100644 --- a/static/index.css +++ b/static/index.css @@ -189,6 +189,25 @@ code { overflow: auto; } +/* For the music page */ +.music-container { + display: flex; + flex-direction: row; + flex-wrap: wrap; +} + +.music { + display: block; +} + +.music::before { + content: "`"; +} + +.music::after { + content: "`"; +} + @media (prefers-color-scheme: dark) { body { color: #f8f8f2; diff --git a/templates/create_post.tmpl b/templates/create_post.tmpl index f6c24e9..8c29953 100644 --- a/templates/create_post.tmpl +++ b/templates/create_post.tmpl @@ -22,5 +22,10 @@ +
+ + + +
diff --git a/templates/tunes.tmpl b/templates/tunes.tmpl new file mode 100644 index 0000000..9a597ea --- /dev/null +++ b/templates/tunes.tmpl @@ -0,0 +1,11 @@ + +{{ template "header.tmpl" . }} +

+This serves as a compilation of every band that I like. Genres may vary, however I mostly listen to Hardcore, various genres of Metal, and Ska. +

+
+{{ $val := range . }} +{{ $val.Name }} +{{ end }} +
+{{ template "footer_no_banners.tmpl" . }}