aboutsummaryrefslogtreecommitdiff
path: root/services/mail/mailboxes.go
diff options
context:
space:
mode:
authorBobby <[email protected]>2026-03-08 02:27:15 +0530
committerBobby <[email protected]>2026-03-08 02:27:15 +0530
commitcca905d35412f1549400fc3d1aca6dc704d8cae6 (patch)
tree0c0231f5c2ebaeb7700e08a2c1f07373d3251658 /services/mail/mailboxes.go
parent547384c41181c034a5eaf340c5e569d36eb013be (diff)
downloaddove-cca905d35412f1549400fc3d1aca6dc704d8cae6.tar.xz
dove-cca905d35412f1549400fc3d1aca6dc704d8cae6.zip
feat(domains): add new TLD creation page and update sidebar
- Introduced a new HTMX template for creating TLDs. - Created a new Django template for the new TLD page. - Updated the sidebar to include a link to the domains section. refactor(types): remove unused types and consolidate request handling - Deleted unused type definitions related to authentication, errors, mailboxes, overview, requests, responses, and users. - Introduced a new collections package for generic data structures. - Refactored request handling to use a more streamlined approach with RequestInfo and Param types. fix(meta): improve pagination and sorting functionality - Updated pagination logic to handle default values and edge cases. - Introduced a new Sorting type for better sorting management in queries. chore(urls): refactor URL handling and registry - Replaced enums with string constants for HTTP methods. - Consolidated route registration logic and improved type safety with RegisteredRoute. style(shortcuts): clean up error handling and rendering functions - Enhanced error handling functions for better readability and maintainability. - Removed deprecated functions and improved the structure of rendering logic.
Diffstat (limited to 'services/mail/mailboxes.go')
-rw-r--r--services/mail/mailboxes.go64
1 files changed, 64 insertions, 0 deletions
diff --git a/services/mail/mailboxes.go b/services/mail/mailboxes.go
new file mode 100644
index 0000000..b124dc9
--- /dev/null
+++ b/services/mail/mailboxes.go
@@ -0,0 +1,64 @@
+package mail
+
+import (
+ "strings"
+
+ "dove/models"
+ "dove/repositories"
+ "dove/utils/meta"
+ "dove/utils/shortcuts"
+)
+
+type CreateMailboxRequest struct {
+ Address string `form:"address"`
+ UserID uint `form:"user_id"`
+}
+
+type MailboxFormResponse struct {
+ Users []models.User `json:"users"`
+}
+
+type MailboxView struct {
+ Address string
+}
+
+func ListMailboxes(pagination meta.Pagination, sorting meta.Sorting, search string) meta.PaginatedResponse {
+ mailboxes, total := repositories.ListMailboxes(pagination, sorting, search)
+ return pagination.Response(mailboxes, total)
+}
+
+func MailboxFormData() MailboxFormResponse {
+ return MailboxFormResponse{
+ Users: repositories.AllUsers(),
+ }
+}
+
+func CreateMailbox(request CreateMailboxRequest) *shortcuts.Error {
+ address := strings.TrimSpace(request.Address)
+
+ switch {
+ case address == "":
+ return shortcuts.ServiceError(shortcuts.BadRequest, AddressRequired)
+ case request.UserID == 0:
+ return shortcuts.ServiceError(shortcuts.BadRequest, UserRequired)
+ }
+
+ if repositories.FindUserByID(request.UserID) == nil {
+ return shortcuts.ServiceError(shortcuts.Unprocessable, UserNotFound)
+ }
+
+ if repositories.FindMailboxByAddress(address) != nil {
+ return shortcuts.ServiceError(shortcuts.Unprocessable, AlreadyExists)
+ }
+
+ mailbox := &models.Mailbox{
+ Address: address,
+ UserID: request.UserID,
+ }
+
+ if createError := repositories.CreateMailbox(mailbox); createError != nil {
+ return shortcuts.ServiceError(shortcuts.Internal, CreationFailed)
+ }
+
+ return nil
+}