initial commit

This commit is contained in:
m.zare
2026-04-10 18:25:21 +03:30
commit 77ca6c34a3
263 changed files with 34470 additions and 0 deletions

View File

@@ -0,0 +1,196 @@
package profile
import (
"encoding/json"
"github.com/google/uuid"
domainProfile "base/internal/domain/profile"
)
func toProfileModel(profile *domainProfile.Profile) (*Model, error) {
pageSectionOrder, err := json.Marshal(profile.PageSectionOrder)
if err != nil {
return nil, err
}
var roleID *uuid.UUID
var roleName *string
roleLevel := ""
if profile.Hero.Role != nil {
roleLevel = profile.Hero.Role.Level
if profile.Hero.Role.ID != uuid.Nil {
roleID = &profile.Hero.Role.ID
roleName = &profile.Hero.Role.Title
}
}
return &Model{
ID: profile.ID,
UserID: profile.UserID,
Handle: profile.Handle,
RoleID: roleID,
RoleName: roleName,
RoleLevel: roleLevel,
FirstName: profile.Hero.FirstName,
LastName: profile.Hero.LastName,
Company: profile.Hero.Company,
ShortDescription: profile.Hero.ShortDescription,
ResumeLink: profile.Hero.ResumeLink,
CTAEnabled: profile.Hero.CTAEnabled,
Avatar: profile.Hero.Avatar,
ProfilePicture: profile.About.ProfilePicture,
About: profile.About.About,
Email: profile.Contact.Email,
Phone: profile.Contact.Phone,
VisibilityLevel: profile.PageSetting.VisibilityLevel,
PageSectionOrder: pageSectionOrder,
CreatedAt: profile.CreatedAt,
UpdatedAt: profile.UpdatedAt,
}, nil
}
func toProfileDomain(model *Model, skills []domainProfile.Skill, socialLinks []domainProfile.SocialLink, achievements []domainProfile.Achievement) (*domainProfile.Profile, error) {
var pageSectionOrder map[string]int
if len(model.PageSectionOrder) > 0 {
if err := json.Unmarshal(model.PageSectionOrder, &pageSectionOrder); err != nil {
return nil, err
}
}
var role *domainProfile.Role
if model.RoleID != nil && *model.RoleID != uuid.Nil {
title := ""
if model.Role != nil {
title = model.Role.Title
} else if model.RoleName != nil {
title = *model.RoleName
}
role = &domainProfile.Role{
ID: *model.RoleID,
Title: title,
Level: model.RoleLevel,
}
} else if model.RoleLevel != "" {
role = &domainProfile.Role{Level: model.RoleLevel}
}
hero := domainProfile.Hero{
Role: role,
FirstName: model.FirstName,
LastName: model.LastName,
Company: model.Company,
ShortDescription: model.ShortDescription,
ResumeLink: model.ResumeLink,
CTAEnabled: model.CTAEnabled,
Avatar: model.Avatar,
}
about := domainProfile.About{
ProfilePicture: model.ProfilePicture,
About: model.About,
Achievements: achievements,
}
contact := domainProfile.Contact{
Email: model.Email,
Phone: model.Phone,
SocialLinks: socialLinks,
}
pageSetting := domainProfile.PageSetting{
VisibilityLevel: model.VisibilityLevel,
}
return &domainProfile.Profile{
ID: model.ID,
UserID: model.UserID,
Handle: model.Handle,
PageSectionOrder: pageSectionOrder,
Hero: hero,
About: about,
Skills: skills,
Contact: contact,
PageSetting: pageSetting,
CreatedAt: model.CreatedAt,
UpdatedAt: model.UpdatedAt,
}, nil
}
func toSkillModels(profileID uuid.UUID, skills []domainProfile.Skill) []SkillModel {
models := make([]SkillModel, len(skills))
for i, skill := range skills {
models[i] = SkillModel{
ProfileID: profileID,
SkillName: skill.SkillName,
Level: skill.Level,
}
}
return models
}
func toSkillDomains(models []SkillModel) []domainProfile.Skill {
skills := make([]domainProfile.Skill, len(models))
for i, model := range models {
skills[i] = domainProfile.Skill{
SkillName: model.SkillName,
Level: model.Level,
}
}
return skills
}
func toSocialLinkModels(profileID uuid.UUID, socialLinks []domainProfile.SocialLink) []SocialLinkModel {
models := make([]SocialLinkModel, len(socialLinks))
for i, link := range socialLinks {
models[i] = SocialLinkModel{
ProfileID: profileID,
LinkType: link.LinkType,
Link: link.Link,
}
}
return models
}
func toSocialLinkDomains(models []SocialLinkModel) []domainProfile.SocialLink {
links := make([]domainProfile.SocialLink, len(models))
for i, model := range models {
links[i] = domainProfile.SocialLink{
LinkType: model.LinkType,
Link: model.Link,
}
}
return links
}
func toAchievementModels(profileID uuid.UUID, achievements []domainProfile.Achievement) []AchievementModel {
models := make([]AchievementModel, len(achievements))
for i, achievement := range achievements {
models[i] = AchievementModel{
ProfileID: profileID,
Title: achievement.Title,
Value: achievement.Value,
Enabled: achievement.Enabled,
}
}
return models
}
func toAchievementDomains(models []AchievementModel) []domainProfile.Achievement {
achievements := make([]domainProfile.Achievement, len(models))
for i, model := range models {
achievements[i] = domainProfile.Achievement{
Title: model.Title,
Value: model.Value,
Enabled: model.Enabled,
}
}
return achievements
}
func copyProfileFromModel(profile *domainProfile.Profile, model *Model) error {
profile.ID = model.ID
profile.Handle = model.Handle
return nil
}