initial commit
This commit is contained in:
196
internal/repository/postgres/profile/mapper.go
Normal file
196
internal/repository/postgres/profile/mapper.go
Normal 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
|
||||
}
|
||||
Reference in New Issue
Block a user