f16f9fb5a9
- Added `search` and `q` query parameters to the `SearchForm` for improved notification searching capabilities. - Implemented `ResolvedSearch` method to prioritize search term resolution from the new parameters. - Updated `GetByUserID` repository method to support searching notifications by title and message using regex. - Enhanced logging in the `GetNotifications` service method to include search parameters. - Updated Swagger documentation to reflect the new search parameters for the notification API. This update improves the user experience by allowing more flexible and efficient searching of notifications.
75 lines
2.9 KiB
Go
75 lines
2.9 KiB
Go
package notification
|
|
|
|
import (
|
|
"strings"
|
|
|
|
"tm/pkg/response"
|
|
)
|
|
|
|
// CreateRequest represents the request to create a notification
|
|
type NotificationRequest struct {
|
|
Recipient []string `json:"recipient"`
|
|
Tender string `json:"tender" valid:"optional,stringlength(1|100)"`
|
|
Channels []DeliveryChannel `json:"channels" valid:"required"`
|
|
Type NotificationType `json:"type" valid:"required"`
|
|
Priority NotificationPriority `json:"priority" valid:"required"`
|
|
Target TargetAudienceType `json:"target" valid:"required"`
|
|
Title string `json:"title" valid:"required"`
|
|
Description string `json:"description" valid:"required"`
|
|
Link *string `json:"link" valid:"optional,url"`
|
|
Image *string `json:"image" valid:"optional,url"`
|
|
ScheduleAt int64 `json:"schedule_at" valid:"optional"`
|
|
}
|
|
|
|
// SearchForm represents the form for searching notifications
|
|
type SearchForm struct {
|
|
Q *string `query:"q" valid:"optional"`
|
|
Search *string `query:"search" valid:"optional"`
|
|
Status string `query:"status" valid:"optional"`
|
|
Method string `query:"method" valid:"optional"`
|
|
EventType string `query:"event_type" valid:"optional"`
|
|
Type string `query:"type" valid:"optional"`
|
|
Recipient []string `query:"recipient" json:"recipient" valid:"optional"`
|
|
Seen *bool `query:"seen" valid:"optional"`
|
|
Priority string `query:"priority" valid:"optional"`
|
|
}
|
|
|
|
// ResolvedSearch returns the search term from either the search or q query parameter.
|
|
func (f *SearchForm) ResolvedSearch() string {
|
|
if f.Search != nil && strings.TrimSpace(*f.Search) != "" {
|
|
return strings.TrimSpace(*f.Search)
|
|
}
|
|
if f.Q != nil {
|
|
return strings.TrimSpace(*f.Q)
|
|
}
|
|
return ""
|
|
}
|
|
|
|
type NotificationListResponse struct {
|
|
Notifications []*NotificationResponse `json:"notifications"`
|
|
Meta *response.Meta `json:"meta"`
|
|
}
|
|
|
|
type NotificationResponse struct {
|
|
ID string `json:"id"`
|
|
UserID string `json:"user_id"`
|
|
Recipient any `json:"recipient"`
|
|
Title string `json:"title"`
|
|
Message string `json:"message"`
|
|
Link *string `json:"link"`
|
|
Image *string `json:"image"`
|
|
Priority string `json:"priority"`
|
|
Type string `json:"type"`
|
|
EventType string `json:"event_type"`
|
|
Status string `json:"status"`
|
|
Methods map[string]string `json:"methods"`
|
|
Metadata map[string]any `json:"metadata"`
|
|
ScheduleAt int64 `json:"schedule_at"`
|
|
CreatedAt int64 `json:"created_at"`
|
|
UpdatedAt int64 `json:"updated_at"`
|
|
Seen bool `json:"seen"`
|
|
SeenAt int64 `json:"seen_at"`
|
|
IsScheduled bool `json:"is_scheduled"`
|
|
ScheduledAt int64 `json:"scheduled_at"`
|
|
}
|