Files
tm_back/internal/notification/form.go
T
Mazyar f16f9fb5a9 Enhance notification search functionality and update API documentation
- 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.
2026-06-11 01:33:47 +03:30

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"`
}