diff options
| author | Bobby <[email protected]> | 2026-03-08 02:27:15 +0530 |
|---|---|---|
| committer | Bobby <[email protected]> | 2026-03-08 02:27:15 +0530 |
| commit | cca905d35412f1549400fc3d1aca6dc704d8cae6 (patch) | |
| tree | 0c0231f5c2ebaeb7700e08a2c1f07373d3251658 /services/mail/mailboxes.go | |
| parent | 547384c41181c034a5eaf340c5e569d36eb013be (diff) | |
| download | dove-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.go | 64 |
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 +} |
