Enhance Notification and User Models with New Fields and Update Swagger Documentation

- Added 'image' and 'link' fields to the NotificationRequest and NotificationResponse structures, improving the flexibility of notification content.
- Updated the 'created_at', 'updated_at', and 'schedule_at' fields to use integer types for Unix timestamps, ensuring consistency in time handling.
- Expanded the tender status enumeration to include 'closed', 'modified', 'suspended', and 'published', enhancing the representation of tender states.
- Reflected these changes in the Swagger documentation, ensuring accurate API specifications for clients.
This commit is contained in:
n.nakhostin
2025-10-16 16:47:36 +03:30
parent fe3ed00a24
commit 952986331a
9 changed files with 72 additions and 11 deletions
+16 -4
View File
@@ -7987,6 +7987,9 @@ const docTemplate = `{
"description": {
"type": "string"
},
"image": {
"type": "string"
},
"link": {
"type": "string"
},
@@ -8020,7 +8023,7 @@ const docTemplate = `{
"type": "object",
"properties": {
"created_at": {
"type": "string"
"type": "integer"
},
"event_type": {
"type": "string"
@@ -8053,6 +8056,7 @@ const docTemplate = `{
"priority": {
"type": "string"
},
"recipient": {},
"schedule_at": {
"type": "integer"
},
@@ -8075,7 +8079,7 @@ const docTemplate = `{
"type": "string"
},
"updated_at": {
"type": "string"
"type": "integer"
},
"user_id": {
"type": "string"
@@ -8355,14 +8359,22 @@ const docTemplate = `{
"expired",
"cancelled",
"awarded",
"draft"
"draft",
"closed",
"modified",
"suspended",
"published"
],
"x-enum-varnames": [
"TenderStatusActive",
"TenderStatusExpired",
"TenderStatusCancelled",
"TenderStatusAwarded",
"TenderStatusDraft"
"TenderStatusDraft",
"TenderStatusClosed",
"TenderStatusModified",
"TenderStatusSuspended",
"TenderStatusPublished"
]
},
"tender.UpdateTenderRequest": {
+16 -4
View File
@@ -7979,6 +7979,9 @@
"description": {
"type": "string"
},
"image": {
"type": "string"
},
"link": {
"type": "string"
},
@@ -8012,7 +8015,7 @@
"type": "object",
"properties": {
"created_at": {
"type": "string"
"type": "integer"
},
"event_type": {
"type": "string"
@@ -8045,6 +8048,7 @@
"priority": {
"type": "string"
},
"recipient": {},
"schedule_at": {
"type": "integer"
},
@@ -8067,7 +8071,7 @@
"type": "string"
},
"updated_at": {
"type": "string"
"type": "integer"
},
"user_id": {
"type": "string"
@@ -8347,14 +8351,22 @@
"expired",
"cancelled",
"awarded",
"draft"
"draft",
"closed",
"modified",
"suspended",
"published"
],
"x-enum-varnames": [
"TenderStatusActive",
"TenderStatusExpired",
"TenderStatusCancelled",
"TenderStatusAwarded",
"TenderStatusDraft"
"TenderStatusDraft",
"TenderStatusClosed",
"TenderStatusModified",
"TenderStatusSuspended",
"TenderStatusPublished"
]
},
"tender.UpdateTenderRequest": {
+13 -2
View File
@@ -719,6 +719,8 @@ definitions:
type: array
description:
type: string
image:
type: string
link:
type: string
priority:
@@ -741,7 +743,7 @@ definitions:
internal_notification.NotificationResponse:
properties:
created_at:
type: string
type: integer
event_type:
type: string
id:
@@ -763,6 +765,7 @@ definitions:
type: object
priority:
type: string
recipient: {}
schedule_at:
type: integer
scheduled_at:
@@ -778,7 +781,7 @@ definitions:
type:
type: string
updated_at:
type: string
type: integer
user_id:
type: string
type: object
@@ -974,6 +977,10 @@ definitions:
- cancelled
- awarded
- draft
- closed
- modified
- suspended
- published
type: string
x-enum-varnames:
- TenderStatusActive
@@ -981,6 +988,10 @@ definitions:
- TenderStatusCancelled
- TenderStatusAwarded
- TenderStatusDraft
- TenderStatusClosed
- TenderStatusModified
- TenderStatusSuspended
- TenderStatusPublished
tender.UpdateTenderRequest:
properties:
currency:
+1
View File
@@ -15,6 +15,7 @@ type NotificationRequest struct {
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"`
}
+1 -1
View File
@@ -50,7 +50,7 @@ func (h *NotificationHandler) Send(c echo.Context) error {
}
// Send notification
go h.service.Send(context.Background(), &req)
h.service.Send(context.Background(), &req)
return response.Created(c, nil, "Notification sent successfully")
}
+10
View File
@@ -54,6 +54,8 @@ func (s *notificationService) Send(ctx context.Context, req *NotificationRequest
"recipient": req.Recipient,
"type": req.Type,
"priority": req.Priority,
"link": req.Link,
"image": req.Image,
})
if req.Target == TargetAudienceAllUsers || req.Target == TargetAudienceSpecificUsers {
@@ -71,6 +73,8 @@ func (s *notificationService) Send(ctx context.Context, req *NotificationRequest
Type: string(req.Type),
Priority: string(req.Priority),
EventType: notification.EventTypePush,
Link: *req.Link,
Image: *req.Image,
Metadata: map[string]any{
"tender": strings.TrimSpace(req.Tender),
},
@@ -92,6 +96,8 @@ func (s *notificationService) Send(ctx context.Context, req *NotificationRequest
Type: string(req.Type),
Priority: string(req.Priority),
EventType: notification.EventTypeEmail,
Link: *req.Link,
Image: *req.Image,
Metadata: map[string]any{
"tender": strings.TrimSpace(req.Tender),
},
@@ -118,6 +124,8 @@ func (s *notificationService) Send(ctx context.Context, req *NotificationRequest
Type: string(req.Type),
Priority: string(req.Priority),
EventType: notification.EventTypePush,
Link: *req.Link,
Image: *req.Image,
Methods: notification.NotificationMethods{
Push: v,
},
@@ -138,6 +146,8 @@ func (s *notificationService) Send(ctx context.Context, req *NotificationRequest
Type: string(req.Type),
Priority: string(req.Priority),
EventType: notification.EventTypeEmail,
Link: *req.Link,
Image: *req.Image,
Methods: notification.NotificationMethods{
Email: recipient.Email,
},
+1
View File
@@ -132,6 +132,7 @@ func (u *User) ToResponse() *UserResponse {
Department: u.Department,
Position: u.Position,
Phone: u.Phone,
DeviceToken: u.DeviceToken,
ProfileImage: u.ProfileImage,
IsVerified: u.IsVerified,
LastLoginAt: u.LastLoginAt,
+2
View File
@@ -33,6 +33,8 @@ type NotificationRequest struct {
EventType EventType `json:"event_type"`
Priority string `json:"priority"`
ScheduledAt int64 `json:"scheduled_at"`
Link string `json:"link"`
Image string `json:"image"`
Metadata map[string]any `json:"metadata"`
Methods NotificationMethods `json:"methods"`
}
+12
View File
@@ -15,6 +15,8 @@ type Model struct {
Title string
Type string
Priority string
Link string
Image string
ScheduledAt int64
Recipient string
UserID string
@@ -41,6 +43,8 @@ func (s *Service) SendEmail(ctx context.Context, model Model) (*NotificationResp
Type: model.Type,
Priority: model.Priority,
ScheduledAt: model.ScheduledAt,
Link: model.Link,
Image: model.Image,
Methods: NotificationMethods{
Email: model.Recipient,
},
@@ -59,6 +63,8 @@ func (s *Service) SendSMS(ctx context.Context, model Model) (*NotificationRespon
Type: model.Type,
Priority: model.Priority,
ScheduledAt: model.ScheduledAt,
Link: model.Link,
Image: model.Image,
Methods: NotificationMethods{
SMS: model.Recipient,
},
@@ -77,6 +83,8 @@ func (s *Service) SendPush(ctx context.Context, model Model) (*NotificationRespo
Type: model.Type,
Priority: model.Priority,
ScheduledAt: model.ScheduledAt,
Link: model.Link,
Image: model.Image,
Methods: NotificationMethods{
Push: model.Recipient,
},
@@ -95,6 +103,8 @@ func (s *Service) SendOTP(ctx context.Context, model Model) (*NotificationRespon
Type: model.Type,
Priority: model.Priority,
ScheduledAt: model.ScheduledAt,
Link: model.Link,
Image: model.Image,
Methods: NotificationMethods{
OTP: model.Recipient,
},
@@ -134,6 +144,8 @@ func (s *Service) Health(ctx context.Context) error {
Type: "info",
Priority: "low",
ScheduledAt: 0,
Link: "",
Image: "",
Methods: NotificationMethods{
Email: "test@example.com",
},