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 @@
+