summaryrefslogtreecommitdiff
path: root/shrine/services
diff options
context:
space:
mode:
authorBobby <[email protected]>2026-03-13 18:25:44 +0530
committerBobby <[email protected]>2026-03-13 18:25:44 +0530
commit344d02a7feddefb5c08f88dbe5f3a3f7e7da385f (patch)
tree94deed23d82d7f868721cc00b5550f5c27e8b8f7 /shrine/services
parent9f808807a557fc10a38a44cb52be6bfcdfda68b2 (diff)
downloadpagoda-main.tar.xz
pagoda-main.zip
feat: add letters feature with detail view and listingHEADmain
- Introduced new routes for letters and their details. - Created pages for displaying letter details and listing letters. - Added new types for letters, including participants, messages, and attachments. - Implemented API calls for fetching letters and managing messages (reply, edit, delete). - Enhanced stats to include unread letters and pending districts for staff users. - Updated styles for letters and their components. - Added privacy settings for letters (public and friends). - Modified user model to include letter privacy settings. - Improved error handling and user feedback in the UI.
Diffstat (limited to 'shrine/services')
-rw-r--r--shrine/services/letter.go3
-rw-r--r--shrine/services/stats.go14
-rw-r--r--shrine/services/warning.go2
3 files changed, 17 insertions, 2 deletions
diff --git a/shrine/services/letter.go b/shrine/services/letter.go
index 20a4f93..c7ea741 100644
--- a/shrine/services/letter.go
+++ b/shrine/services/letter.go
@@ -75,6 +75,9 @@ func CreateLetter(userID uint, request letter.CreateRequest) (*common.MessageRes
if recipient.ID == userID {
continue
}
+ if recipient.LetterPrivacy == enums.LetterPrivacyFriends {
+ return nil, fail(enums.BadRequest, fmt.Sprintf(messages.RecipientNotAcceptingLetters, username))
+ }
recipientIDs = append(recipientIDs, recipient.ID)
}
diff --git a/shrine/services/stats.go b/shrine/services/stats.go
index 2e31c02..aa2eaab 100644
--- a/shrine/services/stats.go
+++ b/shrine/services/stats.go
@@ -1,15 +1,25 @@
package services
import (
+ "shrine/models"
"shrine/repositories"
"shrine/types/user"
)
-func GetStats() user.StatsResponse {
- return user.StatsResponse{
+func GetStats(citizen *models.User) user.StatsResponse {
+ response := user.StatsResponse{
Citizens: repositories.CountCitizens(),
Online: repositories.CountOnline(),
NewestCitizens: buildCitizenSummaries(repositories.NewestCitizens(5)),
OnlineCitizens: buildCitizenSummaries(repositories.OnlineCitizens(10)),
}
+
+ if citizen != nil {
+ response.UnreadLetters = repositories.CountUnreadLetters(citizen.ID)
+ if citizen.IsStaff() {
+ response.PendingDistricts = repositories.CountPendingDistrictSites()
+ }
+ }
+
+ return response
} \ No newline at end of file
diff --git a/shrine/services/warning.go b/shrine/services/warning.go
index 0b27591..553c7fb 100644
--- a/shrine/services/warning.go
+++ b/shrine/services/warning.go
@@ -10,6 +10,7 @@ import (
"shrine/types/hypertext"
"shrine/types/warning"
"shrine/utils/auth"
+ "shrine/utils/logger"
"shrine/utils/meta"
"shrine/utils/sanitize"
"strings"
@@ -32,6 +33,7 @@ func WarnUser(admin *models.User, target *models.User, request warning.WarnReque
record, err := repositories.CreateWarning(admin.ID, target.ID, title, sanitizedMessage)
if err != nil {
+ logger.Errorf("Warnings", messages.FailedCreateWarningDetailed, target.Username, err)
return nil, fail(enums.Internal, messages.FailedCreateWarning)
}