Files
tm_back/internal/cms/form.go
T
2026-05-31 02:17:46 +03:30

133 lines
6.0 KiB
Go

package cms
import "tm/pkg/response"
// CMSForm represents the form for creating/updating the CMS
type CMSForm struct {
Key string `json:"key" valid:"required,length(2|100)" example:"SW-001"`
Language string `json:"language" valid:"optional,length(2|100)" example:"en"`
CompanyName string `json:"company_name" valid:"optional,length(2|100)" example:"Opplens"`
Country string `json:"country" valid:"optional,length(2|3)" example:"SWE"`
Type CMSType `json:"type" valid:"optional,in(company|organization)" example:"company"`
Hero heroSectionForm `json:"hero" valid:"optional"`
Chart chartSectionForm `json:"chart" valid:"optional"`
Features cardSectionForm `json:"features" valid:"optional"`
Challenges cardSectionForm `json:"challenges" valid:"optional"`
Advantages cardSectionForm `json:"advantages" valid:"optional"`
Contact contactSectionForm `json:"contact" valid:"optional"`
Footer footerSectionForm `json:"footer" valid:"optional"`
}
// heroSectionForm represents the form for creating/updating the hero section
type heroSectionForm struct {
Title string `json:"title" valid:"optional,length(2|100)" example:"Hero Title"`
Description string `json:"description" valid:"optional,length(2|1000)" example:"Hero Description"`
ButtonText string `json:"button_text" valid:"optional,length(2|100)" example:"Button Text"`
ButtonLink string `json:"button_link" valid:"optional,url" example:"https://example.com"`
GifFile string `json:"gif_file" valid:"optional,mediaRef" example:"674abc123def456789012345"`
}
// chartSectionForm represents the form for creating/updating the chart section
type chartSectionForm struct {
Title string `json:"title" valid:"optional,length(2|100)" example:"Chart Title"`
MissedAmount string `json:"missed_amount" valid:"optional,length(2|100)" example:"Missed Amount"`
Data []chartPointForm `json:"data" valid:"optional"`
}
// chartPointForm represents the form for creating/updating a chart point
type chartPointForm struct {
Key string `json:"key" valid:"optional,length(2|100)" example:"Key"`
Value int `json:"value" valid:"optional,range(0|1000000)" example:"1000000"`
}
// cardSectionForm represents the form for creating/updating the card section
type cardSectionForm struct {
Title string `json:"title" valid:"optional,length(2|100)" example:"Card Title"`
Description string `json:"description" valid:"optional,length(2|1000)" example:"Card Description"`
Cards []cardForm `json:"cards" valid:"optional"`
}
// cardForm represents the form for creating/updating a card
type cardForm struct {
Icon string `json:"icon" valid:"optional,mediaRef" example:"674abc123def456789012345"`
Title string `json:"title" valid:"optional,length(2|100)" example:"Card Title"`
Description string `json:"description" valid:"optional,length(2|1000)" example:"Card Description"`
}
// contactSectionForm represents the form for creating/updating the contact section
type contactSectionForm struct {
Title string `json:"title" valid:"optional,length(2|100)" example:"Contact Title"`
Description string `json:"description" valid:"optional,length(2|1000)" example:"Contact Description"`
SubmitButtonText string `json:"submit_button_text" valid:"optional,length(2|100)" example:"Submit Button Text"`
Fields []formFieldForm `json:"fields" valid:"optional"`
}
// formFieldForm represents the form for creating/updating a form field
type formFieldForm struct {
Name string `json:"name" valid:"optional,length(2|100)" example:"Name"`
Label string `json:"label" valid:"optional,length(2|100)" example:"Label"`
Placeholder string `json:"placeholder" valid:"optional,length(2|100)" example:"Placeholder"`
Required bool `json:"required" valid:"optional" example:"true"`
}
// footerSectionForm represents the form for creating/updating the footer section
type footerSectionForm struct {
Email string `json:"email" valid:"optional,email" example:"info@example.com"`
Phone string `json:"phone" valid:"optional,length(0|30)" example:"+1234567890"`
Location string `json:"location" valid:"optional,length(2|100)" example:"Location"`
Tagline string `json:"tagline" valid:"optional,length(2|100)" example:"Tagline"`
Copyright string `json:"copyright" valid:"optional,length(2|100)" example:"Copyright"`
}
// SearchCMSForm represents the form for searching CMS entries
type SearchCMSForm struct {
Search *string `query:"q" valid:"optional"`
Key *string `query:"key" valid:"optional,length(2|100)"`
}
// CMSResponse represents the CMS data sent in API responses
type CMSResponse struct {
ID string `json:"id"`
Key string `json:"key"`
Language string `json:"language"`
CompanyName string `json:"company_name"`
Country string `json:"country"`
Type CMSType `json:"type"`
Hero heroSection `json:"hero"`
Chart chartSection `json:"chart"`
Features cardSection `json:"features"`
Challenges cardSection `json:"challenges"`
Advantages cardSection `json:"advantages"`
Contact contactSection `json:"contact"`
Footer footerSection `json:"footer"`
CreatedAt int64 `json:"created_at"`
UpdatedAt int64 `json:"updated_at"`
}
// CMSListResponse represents the response for listing CMS entries
type CMSListResponse struct {
CMS []*CMSResponse `json:"cms"`
Meta *response.Meta `json:"-"`
}
// ToResponse converts CMS to CMSResponse
func (c *CMS) ToResponse() *CMSResponse {
return &CMSResponse{
ID: c.GetID(),
Key: c.Key,
Language: c.Language,
CompanyName: c.CompanyName,
Country: c.Country,
Type: c.Type,
Hero: c.Hero,
Chart: c.Chart,
Features: c.Features,
Challenges: c.Challenges,
Advantages: c.Advantages,
Contact: c.Contact,
Footer: c.Footer,
CreatedAt: c.GetCreatedAt(),
UpdatedAt: c.GetUpdatedAt(),
}
}