Files
tm_back/internal/contact/form.go
T
2025-12-05 18:10:05 +03:30

81 lines
3.0 KiB
Go

package contact
import "tm/pkg/response"
// CreateContactForm represents the form for creating a new contact message
type CreateContactForm struct {
FullName string `json:"full_name" valid:"required,length(2|100)" example:"John Doe"`
Email string `json:"email" valid:"required,email" example:"john.doe@example.com"`
Phone string `json:"phone" valid:"required,length(10|20)" example:"+1234567890"`
Message string `json:"message" valid:"required,length(10|1000)" example:"I have a question about your services"`
HCaptchaToken string `json:"hcaptcha_token" valid:"required" example:"P0_eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9..."`
}
// UpdateContactStatusForm represents the form for updating contact status (admin only)
type UpdateContactStatusForm struct {
Status string `json:"status" valid:"required,in(pending|in_progress|resolved|closed)" example:"in_progress"`
AdminNotes *string `json:"admin_notes,omitempty" valid:"optional,length(0|500)" example:"Customer inquiry handled"`
}
// SearchContactsForm represents the form for searching contacts with filters
type SearchContactsForm struct {
Search *string `query:"q" valid:"optional"`
Status *string `query:"status" valid:"optional,in(pending|in_progress|resolved|closed)"`
DateFrom *int64 `query:"date_from" valid:"optional"`
DateTo *int64 `query:"date_to" valid:"optional"`
}
// ContactResponse represents the contact data sent in API responses
type ContactResponse struct {
ID string `json:"id"`
FullName string `json:"full_name"`
Email string `json:"email"`
Phone string `json:"phone"`
Message string `json:"message"`
Status string `json:"status"`
AdminNotes *string `json:"admin_notes,omitempty"`
ResolvedAt *int64 `json:"resolved_at,omitempty"`
ResolvedBy *string `json:"resolved_by,omitempty"`
CreatedAt int64 `json:"created_at"`
UpdatedAt int64 `json:"updated_at"`
}
// PublicContactResponse represents the contact data sent in public API responses (limited fields)
type PublicContactResponse struct {
ID string `json:"id"`
Status string `json:"status"`
CreatedAt int64 `json:"created_at"`
}
// ToResponse converts Contact to ContactResponse
func (c *Contact) ToResponse() *ContactResponse {
return &ContactResponse{
ID: c.ID.Hex(),
FullName: c.FullName,
Email: c.Email,
Phone: c.Phone,
Message: c.Message,
Status: string(c.Status),
AdminNotes: c.AdminNotes,
ResolvedAt: c.ResolvedAt,
ResolvedBy: c.ResolvedBy,
CreatedAt: c.CreatedAt,
UpdatedAt: c.UpdatedAt,
}
}
// ToPublicResponse converts Contact to PublicContactResponse (limited fields for public API)
func (c *Contact) ToPublicResponse() *PublicContactResponse {
return &PublicContactResponse{
ID: c.ID.Hex(),
Status: string(c.Status),
CreatedAt: c.CreatedAt,
}
}
// ContactListResponse represents the response for listing contacts
type ContactListResponse struct {
Contacts []*ContactResponse `json:"contacts"`
Meta *response.Meta `json:"-"`
}