197 lines
5.2 KiB
Go
197 lines
5.2 KiB
Go
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
|
|
}
|