diff --git a/internal/cms/entity.go b/internal/cms/entity.go index c6706ff..1f4363a 100644 --- a/internal/cms/entity.go +++ b/internal/cms/entity.go @@ -13,6 +13,7 @@ type CMS struct { Language string `bson:"language"` CompanyName string `bson:"company_name"` Country string `bson:"country"` + Type CMSType `bson:"type"` Hero heroSection `bson:"hero"` Chart chartSection `bson:"chart"` Features cardSection `bson:"features"` @@ -22,6 +23,13 @@ type CMS struct { Footer footerSection `bson:"footer"` } +type CMSType string + +const ( + CMSTypeCompany CMSType = "company" + CMSTypeOrganization CMSType = "organization" +) + // SetID sets the CMS ID (implements IDSetter interface) func (c *CMS) SetID(id string) { c.ID, _ = bson.ObjectIDFromHex(id) diff --git a/internal/cms/form.go b/internal/cms/form.go index 122a12b..fa002f5 100644 --- a/internal/cms/form.go +++ b/internal/cms/form.go @@ -8,6 +8,7 @@ type CMSForm struct { 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(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"` @@ -86,17 +87,21 @@ type SearchCMSForm struct { // CMSResponse represents the CMS data sent in API responses type CMSResponse struct { - ID string `json:"id"` - Key string `json:"key"` - 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"` + 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 @@ -108,16 +113,20 @@ type CMSListResponse struct { // ToResponse converts CMS to CMSResponse func (c *CMS) ToResponse() *CMSResponse { return &CMSResponse{ - ID: c.GetID(), - Key: c.Key, - 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(), + 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(), } } diff --git a/internal/cms/service.go b/internal/cms/service.go index 352cdca..c6de0b1 100644 --- a/internal/cms/service.go +++ b/internal/cms/service.go @@ -236,15 +236,27 @@ func (s *cmsService) Search(ctx context.Context, form *SearchCMSForm, pagination // copyFormToEntity copies data from form to entity func (s *cmsService) copyFormToEntity(form *CMSForm, cms *CMS) { - if form.Language != "" { - cms.Language = form.Language + if form.Type != "" { + cms.Type = CMSType(form.Type) } - if form.CompanyName != "" { - cms.CompanyName = form.CompanyName - } - if form.Country != "" { - cms.Country = form.Country + + switch cms.Type { + case CMSTypeCompany: + if form.Language != "" { + cms.Language = form.Language + } + if form.CompanyName != "" { + cms.CompanyName = form.CompanyName + } + if form.Country != "" { + cms.Country = form.Country + } + case CMSTypeOrganization: + cms.Language = "" + cms.CompanyName = "" + cms.Country = "" } + // Hero section if form.Hero.Title != "" { cms.Hero.Title = form.Hero.Title