club.go (4541B)
1 package handlers 2 3 import ( 4 "dkforest/pkg/database" 5 "dkforest/pkg/utils" 6 "github.com/asaskevich/govalidator" 7 "github.com/labstack/echo" 8 "net/http" 9 ) 10 11 func ClubHandler(c echo.Context) error { 12 authUser := c.Get("authUser").(*database.User) 13 db := c.Get("database").(*database.DkfDB) 14 var data clubData 15 data.ActiveTab = "home" 16 data.ForumThreads, _ = db.GetClubForumThreads(authUser.ID) 17 return c.Render(http.StatusOK, "club.home", data) 18 } 19 20 func ClubNewThreadHandler(c echo.Context) error { 21 authUser := c.Get("authUser").(*database.User) 22 db := c.Get("database").(*database.DkfDB) 23 var data clubNewThreadData 24 data.ActiveTab = "home" 25 26 if c.Request().Method == http.MethodPost { 27 data.ThreadName = c.Request().PostFormValue("thread_name") 28 data.Message = c.Request().PostFormValue("message") 29 if !govalidator.RuneLength(data.ThreadName, "3", "255") { 30 data.ErrorThreadName = "Thread name must have 3-255 characters" 31 return c.Render(http.StatusOK, "club.new-thread", data) 32 } 33 if !govalidator.RuneLength(data.Message, "3", "10000") { 34 data.ErrorMessage = "Thread name must have at least 3 characters" 35 return c.Render(http.StatusOK, "club.new-thread", data) 36 } 37 thread := database.MakeForumThread(data.ThreadName, authUser.ID, 0) 38 db.DB().Create(&thread) 39 message := database.MakeForumMessage(data.Message, authUser.ID, thread.ID) 40 db.DB().Create(&message) 41 return c.Redirect(http.StatusFound, "/club/threads/"+utils.FormatInt64(int64(thread.ID))) 42 } 43 44 return c.Render(http.StatusOK, "club.new-thread", data) 45 } 46 47 func ClubThreadReplyHandler(c echo.Context) error { 48 authUser := c.Get("authUser").(*database.User) 49 db := c.Get("database").(*database.DkfDB) 50 threadID := database.ForumThreadID(utils.DoParseInt64(c.Param("threadID"))) 51 thread, err := db.GetForumThread(threadID) 52 if err != nil { 53 return c.Redirect(http.StatusFound, "/") 54 } 55 var data clubNewThreadReplyData 56 data.ActiveTab = "home" 57 data.Thread = thread 58 59 if c.Request().Method == http.MethodPost { 60 data.Message = c.Request().PostFormValue("message") 61 if !govalidator.RuneLength(data.Message, "3", "10000") { 62 data.ErrorMessage = "Message must have at least 3 characters" 63 return c.Render(http.StatusOK, "club.new-thread", data) 64 } 65 message := database.MakeForumMessage(data.Message, authUser.ID, thread.ID) 66 db.DB().Create(&message) 67 return c.Redirect(http.StatusFound, "/club/threads/"+utils.FormatInt64(int64(thread.ID))) 68 } 69 70 return c.Render(http.StatusOK, "club.thread-reply", data) 71 } 72 73 func ClubThreadEditMessageHandler(c echo.Context) error { 74 authUser := c.Get("authUser").(*database.User) 75 db := c.Get("database").(*database.DkfDB) 76 threadID := database.ForumThreadID(utils.DoParseInt64(c.Param("threadID"))) 77 messageID := database.ForumMessageID(utils.DoParseInt64(c.Param("messageID"))) 78 thread, err := db.GetForumThread(threadID) 79 if err != nil { 80 return c.Redirect(http.StatusFound, "/") 81 } 82 msg, err := db.GetForumMessage(messageID) 83 if err != nil { 84 return c.Redirect(http.StatusFound, "/") 85 } 86 if msg.UserID != authUser.ID && !authUser.IsAdmin { 87 return c.Redirect(http.StatusFound, "/") 88 } 89 var data clubNewThreadReplyData 90 data.ActiveTab = "home" 91 data.IsEdit = true 92 data.Thread = thread 93 data.Message = msg.Message 94 95 if c.Request().Method == http.MethodPost { 96 data.Message = c.Request().PostFormValue("message") 97 if !govalidator.RuneLength(data.Message, "3", "10000") { 98 data.ErrorMessage = "Message must have at least 3 characters" 99 return c.Render(http.StatusOK, "club.new-thread", data) 100 } 101 msg.Message = data.Message 102 msg.DoSave(db) 103 return c.Redirect(http.StatusFound, "/club/threads/"+utils.FormatInt64(int64(thread.ID))) 104 } 105 106 return c.Render(http.StatusOK, "club.thread-reply", data) 107 } 108 109 func ClubMembersHandler(c echo.Context) error { 110 db := c.Get("database").(*database.DkfDB) 111 var data clubMembersData 112 data.ActiveTab = "members" 113 data.Members, _ = db.GetClubMembers() 114 return c.Render(http.StatusOK, "club.members", data) 115 } 116 117 func ClubThreadHandler(c echo.Context) error { 118 authUser := c.Get("authUser").(*database.User) 119 db := c.Get("database").(*database.DkfDB) 120 threadID := database.ForumThreadID(utils.DoParseInt64(c.Param("threadID"))) 121 thread, err := db.GetForumThread(threadID) 122 if err != nil { 123 return c.Redirect(http.StatusFound, "/") 124 } 125 var data clubThreadData 126 data.ActiveTab = "home" 127 data.Thread = thread 128 data.Messages, _ = db.GetThreadMessages(threadID) 129 130 // Update read record 131 db.UpdateForumReadRecord(authUser.ID, threadID) 132 133 return c.Render(http.StatusOK, "club.thread", data) 134 }