diff options
| author | Bobby <[email protected]> | 2026-03-08 05:43:04 +0530 |
|---|---|---|
| committer | Bobby <[email protected]> | 2026-03-08 05:43:04 +0530 |
| commit | 662dd2069dc8590e8b54823a33726464cf10c4e7 (patch) | |
| tree | 55a740e6114440d7e311afd3f5ba79a7101965f8 /controllers | |
| parent | d21ea918864a8b18fef94bbfaec8097444be1b17 (diff) | |
| download | dove-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.go | 54 | ||||
| -rw-r--r-- | controllers/mail/mail.go | 118 |
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))) +} |
