dana-medical-site/internal/domain/content.go
2026-10-14 13:33:13 +00:00

158 lines
5.4 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package domain
import (
"encoding/json"
"time"
)
// Post — новость, статья или акция. Различаются полем Kind.
type Post struct {
ID int64 `json:"id"`
Kind string `json:"kind"` // news | article | promo
Slug string `json:"slug"`
Title string `json:"title"`
Lead string `json:"lead,omitempty"`
Blocks json.RawMessage `json:"blocks,omitempty"`
Image string `json:"image,omitempty"`
StartsAt *time.Time `json:"starts_at,omitempty"`
EndsAt *time.Time `json:"ends_at,omitempty"`
PublishedAt time.Time `json:"published_at"`
SEO SEO `json:"seo"`
// Только у акций: размер скидки, условия и чек-ап, на который она действует.
DiscountPercent *int `json:"discount_percent,omitempty"`
Terms string `json:"terms,omitempty"`
CheckupSlug string `json:"checkup_slug,omitempty"`
}
type Review struct {
ID int64 `json:"id"`
AuthorName string `json:"author_name"`
AuthorPhoto string `json:"author_photo,omitempty"`
Rating *int `json:"rating,omitempty"`
Text string `json:"text"`
VideoURL string `json:"video_url,omitempty"`
DoctorSlug string `json:"doctor_slug,omitempty"`
DoctorName string `json:"doctor_name,omitempty"`
Source string `json:"source"`
Reply string `json:"reply,omitempty"`
CreatedAt time.Time `json:"created_at"`
}
type FAQItem struct {
ID int64 `json:"id"`
Question string `json:"question"`
Answer string `json:"answer"`
ServiceID *int64 `json:"service_id,omitempty"`
}
type Document struct {
ID int64 `json:"id"`
Kind string `json:"kind"` // license | certificate | supervisor | other
Title string `json:"title"`
Body string `json:"body,omitempty"`
File string `json:"file,omitempty"`
Preview string `json:"preview,omitempty"`
IssuedAt *time.Time `json:"issued_at,omitempty"`
}
type Partner struct {
ID int64 `json:"id"`
Name string `json:"name"`
URL string `json:"url,omitempty"`
Logo string `json:"logo,omitempty"`
}
type Vacancy struct {
ID int64 `json:"id"`
Slug string `json:"slug"`
Title string `json:"title"`
Description string `json:"description,omitempty"`
Duties string `json:"duties,omitempty"`
Requirements string `json:"requirements,omitempty"`
Conditions string `json:"conditions,omitempty"`
Salary string `json:"salary,omitempty"`
BranchID *int64 `json:"branch_id,omitempty"`
}
type Branch struct {
ID int64 `json:"id"`
Slug string `json:"slug"`
Name string `json:"name"`
Address string `json:"address"`
Phones []string `json:"phones"`
WorkHours []string `json:"work_hours"`
Lat *float64 `json:"lat,omitempty"`
Lon *float64 `json:"lon,omitempty"`
}
type Checkup struct {
ID int64 `json:"id"`
Slug string `json:"slug"`
Audience string `json:"audience"` // adults | kids
Name string `json:"name"`
Lead string `json:"lead,omitempty"`
Blocks json.RawMessage `json:"blocks,omitempty"`
Price *float64 `json:"price,omitempty"`
OldPrice *float64 `json:"old_price,omitempty"`
Image string `json:"image,omitempty"`
Featured bool `json:"featured"`
Items []string `json:"items,omitempty"`
SEO SEO `json:"seo"`
}
type Page struct {
ID int64 `json:"id"`
Slug string `json:"slug"`
Title string `json:"title"`
Blocks json.RawMessage `json:"blocks,omitempty"`
SEO SEO `json:"seo"`
}
type GalleryAlbum struct {
ID int64 `json:"id"`
Slug string `json:"slug"`
Title string `json:"title"`
Photos []GalleryPhoto `json:"photos,omitempty"`
}
type GalleryPhoto struct {
ID int64 `json:"id"`
Path string `json:"path"`
Caption string `json:"caption,omitempty"`
}
// --- формы и заявки ---
type Form struct {
ID int64 `json:"id"`
Code string `json:"code"`
Title string `json:"title"`
SuccessText string `json:"success_text,omitempty"`
Fields []FormField `json:"fields"`
}
type FormField struct {
Code string `json:"code"`
Label string `json:"label"`
Type string `json:"type"`
Required bool `json:"required"`
Options json.RawMessage `json:"options,omitempty"`
}
// LeadInput — то, что приходит с сайта при отправке формы.
type LeadInput struct {
FormCode string `json:"form"`
Name string `json:"name"`
Phone string `json:"phone"`
Email string `json:"email"`
ServiceID *int64 `json:"service_id"`
DoctorID *int64 `json:"doctor_id"`
BranchID *int64 `json:"branch_id"`
Message string `json:"message"`
Extra map[string]any `json:"extra"`
PageURL string `json:"page_url"`
UTM map[string]string `json:"utm"`
Consent bool `json:"consent"`
}