aboutsummaryrefslogtreecommitdiff
path: root/controllers
diff options
context:
space:
mode:
authorBobby <[email protected]>2026-03-08 05:43:04 +0530
committerBobby <[email protected]>2026-03-08 05:43:04 +0530
commit662dd2069dc8590e8b54823a33726464cf10c4e7 (patch)
tree55a740e6114440d7e311afd3f5ba79a7101965f8 /controllers
parentd21ea918864a8b18fef94bbfaec8097444be1b17 (diff)
downloaddove-662dd2069dc8590e8b54823a33726464cf10c4e7.tar.xz
dove-662dd2069dc8590e8b54823a33726464cf10c4e7.zip
feat(domains): enhance TLD and domain management with edit and delete functionality
- Added edit and delete buttons for TLDs in the TLD management interface. - Implemented a modal confirmation for delete actions across TLDs, mailboxes, users, and aliases. - Created separate edit pages for domains and TLDs with forms for updating their details. - Improved user experience by adding alerts for error messages and success notifications. feat(mail): streamline mailbox management with alias support - Introduced alias creation and deletion functionality for mailboxes. - Enhanced mailbox edit interface to include alias management. - Added dropdowns for selecting users and domains when creating aliases. fix(alerts): implement alert system for error messages - Developed a reusable alert component to display error messages. - Integrated alert dismiss functionality with automatic timeout for user notifications. refactor: general code improvements and organization - Updated error handling in the backend to support HTMX requests. - Refactored redirect functions to handle HTMX redirects appropriately.
Diffstat (limited to 'controllers')
-rw-r--r--controllers/domain/domain.go54
-rw-r--r--controllers/mail/mail.go118
2 files changed, 171 insertions, 1 deletions
diff --git a/controllers/domain/domain.go b/controllers/domain/domain.go
index 5613ade..ac61c94 100644
--- a/controllers/domain/domain.go
+++ b/controllers/domain/domain.go
@@ -1,6 +1,8 @@
package domain
import (
+ "strconv"
+
domainService "dove/services/domain"
"dove/utils/meta"
"dove/utils/shortcuts"
@@ -22,6 +24,39 @@ func CreateDomain(context *fiber.Ctx) error {
return shortcuts.Redirect(context, "domains.manage")
}
+func UpdateDomain(context *fiber.Ctx) error {
+ domainID, parseError := strconv.ParseUint(meta.Request(context).Param("id"), 10, 64)
+ if parseError != nil {
+ return shortcuts.BadRequestError(context, parseError)
+ }
+
+ body, bodyError := meta.Body[domainService.UpdateDomainRequest](context)
+ if bodyError != nil {
+ return shortcuts.BadRequestError(context, bodyError)
+ }
+
+ serviceError := domainService.UpdateDomain(uint(domainID), body)
+ if serviceError != nil {
+ return shortcuts.HandleError(context, serviceError)
+ }
+
+ return shortcuts.Redirect(context, "domains.manage")
+}
+
+func DeleteDomain(context *fiber.Ctx) error {
+ domainID, parseError := strconv.ParseUint(meta.Request(context).Param("id"), 10, 64)
+ if parseError != nil {
+ return shortcuts.BadRequestError(context, parseError)
+ }
+
+ serviceError := domainService.DeleteDomain(uint(domainID))
+ if serviceError != nil {
+ return shortcuts.HandleError(context, serviceError)
+ }
+
+ return shortcuts.Redirect(context, "domains.manage")
+}
+
func CreateTLD(context *fiber.Ctx) error {
body, parseError := meta.Body[domainService.CreateTLDRequest](context)
if parseError != nil {
@@ -36,6 +71,25 @@ func CreateTLD(context *fiber.Ctx) error {
return shortcuts.Redirect(context, "domains.tlds")
}
+func UpdateTLD(context *fiber.Ctx) error {
+ tldID, parseError := strconv.ParseUint(meta.Request(context).Param("id"), 10, 64)
+ if parseError != nil {
+ return shortcuts.BadRequestError(context, parseError)
+ }
+
+ body, bodyError := meta.Body[domainService.UpdateTLDRequest](context)
+ if bodyError != nil {
+ return shortcuts.BadRequestError(context, bodyError)
+ }
+
+ serviceError := domainService.UpdateTLD(uint(tldID), body)
+ if serviceError != nil {
+ return shortcuts.HandleError(context, serviceError)
+ }
+
+ return shortcuts.Redirect(context, "domains.tlds")
+}
+
func DeleteTLD(context *fiber.Ctx) error {
serviceError := domainService.DeleteTLD(meta.Request(context).Param("name"))
if serviceError != nil {
diff --git a/controllers/mail/mail.go b/controllers/mail/mail.go
index 544a51b..58df08d 100644
--- a/controllers/mail/mail.go
+++ b/controllers/mail/mail.go
@@ -1,9 +1,14 @@
package mail
import (
+ "fmt"
+ "strconv"
+ "strings"
+
mailService "dove/services/mail"
"dove/utils/meta"
"dove/utils/shortcuts"
+ "dove/utils/urls"
"github.com/gofiber/fiber/v2"
)
@@ -22,6 +27,39 @@ func CreateUser(context *fiber.Ctx) error {
return shortcuts.Redirect(context, "mail.users")
}
+func UpdateUser(context *fiber.Ctx) error {
+ userID, parseError := strconv.ParseUint(meta.Request(context).Param("id"), 10, 64)
+ if parseError != nil {
+ return shortcuts.BadRequestError(context, parseError)
+ }
+
+ body, bodyError := meta.Body[mailService.UpdateUserRequest](context)
+ if bodyError != nil {
+ return shortcuts.BadRequestError(context, bodyError)
+ }
+
+ serviceError := mailService.UpdateUser(uint(userID), body)
+ if serviceError != nil {
+ return shortcuts.HandleError(context, serviceError)
+ }
+
+ return shortcuts.Redirect(context, "mail.users")
+}
+
+func DeleteUser(context *fiber.Ctx) error {
+ userID, parseError := strconv.ParseUint(meta.Request(context).Param("id"), 10, 64)
+ if parseError != nil {
+ return shortcuts.BadRequestError(context, parseError)
+ }
+
+ serviceError := mailService.DeleteUser(uint(userID))
+ if serviceError != nil {
+ return shortcuts.HandleError(context, serviceError)
+ }
+
+ return shortcuts.Redirect(context, "mail.users")
+}
+
func CreateMailbox(context *fiber.Ctx) error {
body, parseError := meta.Body[mailService.CreateMailboxRequest](context)
if parseError != nil {
@@ -34,4 +72,82 @@ func CreateMailbox(context *fiber.Ctx) error {
}
return shortcuts.Redirect(context, "mail.mailboxes")
-} \ No newline at end of file
+}
+
+func UpdateMailbox(context *fiber.Ctx) error {
+ mailboxID, parseError := strconv.ParseUint(meta.Request(context).Param("id"), 10, 64)
+ if parseError != nil {
+ return shortcuts.BadRequestError(context, parseError)
+ }
+
+ body, bodyError := meta.Body[mailService.UpdateMailboxRequest](context)
+ if bodyError != nil {
+ return shortcuts.BadRequestError(context, bodyError)
+ }
+
+ serviceError := mailService.UpdateMailbox(uint(mailboxID), body)
+ if serviceError != nil {
+ return shortcuts.HandleError(context, serviceError)
+ }
+
+ return shortcuts.Redirect(context, "mail.mailboxes")
+}
+
+func DeleteMailbox(context *fiber.Ctx) error {
+ mailboxID, parseError := strconv.ParseUint(meta.Request(context).Param("id"), 10, 64)
+ if parseError != nil {
+ return shortcuts.BadRequestError(context, parseError)
+ }
+
+ serviceError := mailService.DeleteMailbox(uint(mailboxID))
+ if serviceError != nil {
+ return shortcuts.HandleError(context, serviceError)
+ }
+
+ return shortcuts.Redirect(context, "mail.mailboxes")
+}
+
+func mailboxEditPath(mailboxID uint) string {
+ editPath, _ := urls.GetFullPath("mail.mailboxes.edit")
+ return strings.Replace(editPath, ":id", fmt.Sprintf("%d", mailboxID), 1)
+}
+
+func CreateAlias(context *fiber.Ctx) error {
+ mailboxID, parseError := strconv.ParseUint(meta.Request(context).Param("id"), 10, 64)
+ if parseError != nil {
+ return shortcuts.BadRequestError(context, parseError)
+ }
+
+ body, bodyError := meta.Body[mailService.CreateAliasRequest](context)
+ if bodyError != nil {
+ return shortcuts.BadRequestError(context, bodyError)
+ }
+
+ body.MailboxID = uint(mailboxID)
+
+ serviceError := mailService.CreateAlias(body)
+ if serviceError != nil {
+ return shortcuts.HandleError(context, serviceError)
+ }
+
+ return shortcuts.RedirectToPath(context, mailboxEditPath(uint(mailboxID)))
+}
+
+func DeleteAlias(context *fiber.Ctx) error {
+ aliasID, parseError := strconv.ParseUint(meta.Request(context).Param("alias_id"), 10, 64)
+ if parseError != nil {
+ return shortcuts.BadRequestError(context, parseError)
+ }
+
+ mailboxID, mailboxParseError := strconv.ParseUint(meta.Request(context).Param("id"), 10, 64)
+ if mailboxParseError != nil {
+ return shortcuts.BadRequestError(context, mailboxParseError)
+ }
+
+ serviceError := mailService.DeleteAlias(uint(aliasID))
+ if serviceError != nil {
+ return shortcuts.HandleError(context, serviceError)
+ }
+
+ return shortcuts.RedirectToPath(context, mailboxEditPath(uint(mailboxID)))
+}