164 lines
5.4 KiB
Go
164 lines
5.4 KiB
Go
package services
|
|
|
|
import (
|
|
"fmt"
|
|
"rijig/dto"
|
|
"rijig/internal/repositories"
|
|
"rijig/model"
|
|
"rijig/utils"
|
|
)
|
|
|
|
type CompanyProfileService interface {
|
|
CreateCompanyProfile(userID string, request *dto.RequestCompanyProfileDTO) (*dto.ResponseCompanyProfileDTO, error)
|
|
GetCompanyProfileByID(id string) (*dto.ResponseCompanyProfileDTO, error)
|
|
GetCompanyProfilesByUserID(userID string) ([]dto.ResponseCompanyProfileDTO, error)
|
|
UpdateCompanyProfile(id string, request *dto.RequestCompanyProfileDTO) (*dto.ResponseCompanyProfileDTO, error)
|
|
DeleteCompanyProfile(id string) error
|
|
}
|
|
|
|
type companyProfileService struct {
|
|
companyProfileRepo repositories.CompanyProfileRepository
|
|
}
|
|
|
|
func NewCompanyProfileService(companyProfileRepo repositories.CompanyProfileRepository) CompanyProfileService {
|
|
return &companyProfileService{
|
|
companyProfileRepo: companyProfileRepo,
|
|
}
|
|
}
|
|
|
|
func FormatResponseCompanyProfile(companyProfile *model.CompanyProfile) (*dto.ResponseCompanyProfileDTO, error) {
|
|
|
|
createdAt, _ := utils.FormatDateToIndonesianFormat(companyProfile.CreatedAt)
|
|
updatedAt, _ := utils.FormatDateToIndonesianFormat(companyProfile.UpdatedAt)
|
|
|
|
responseDTO := &dto.ResponseCompanyProfileDTO{
|
|
ID: companyProfile.ID,
|
|
UserID: companyProfile.UserID,
|
|
CompanyName: companyProfile.CompanyName,
|
|
CompanyAddress: companyProfile.CompanyAddress,
|
|
CompanyPhone: companyProfile.CompanyPhone,
|
|
CompanyEmail: companyProfile.CompanyEmail,
|
|
CompanyLogo: companyProfile.CompanyLogo,
|
|
CompanyWebsite: companyProfile.CompanyWebsite,
|
|
TaxID: companyProfile.TaxID,
|
|
FoundedDate: companyProfile.FoundedDate,
|
|
CompanyType: companyProfile.CompanyType,
|
|
CompanyDescription: companyProfile.CompanyDescription,
|
|
CreatedAt: createdAt,
|
|
UpdatedAt: updatedAt,
|
|
}
|
|
|
|
return responseDTO, nil
|
|
}
|
|
|
|
func (s *companyProfileService) CreateCompanyProfile(userID string, request *dto.RequestCompanyProfileDTO) (*dto.ResponseCompanyProfileDTO, error) {
|
|
|
|
errors, valid := request.ValidateCompanyProfileInput()
|
|
if !valid {
|
|
return nil, fmt.Errorf("validation failed: %v", errors)
|
|
}
|
|
|
|
companyProfile := &model.CompanyProfile{
|
|
UserID: userID,
|
|
CompanyName: request.CompanyName,
|
|
CompanyAddress: request.CompanyAddress,
|
|
CompanyPhone: request.CompanyPhone,
|
|
CompanyEmail: request.CompanyEmail,
|
|
CompanyLogo: request.CompanyLogo,
|
|
CompanyWebsite: request.CompanyWebsite,
|
|
TaxID: request.TaxID,
|
|
FoundedDate: request.FoundedDate,
|
|
CompanyType: request.CompanyType,
|
|
CompanyDescription: request.CompanyDescription,
|
|
}
|
|
|
|
createdCompanyProfile, err := s.companyProfileRepo.CreateCompanyProfile(companyProfile)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("failed to create company profile: %v", err)
|
|
}
|
|
|
|
responseDTO, err := FormatResponseCompanyProfile(createdCompanyProfile)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("failed to format company profile response: %v", err)
|
|
}
|
|
|
|
return responseDTO, nil
|
|
}
|
|
|
|
func (s *companyProfileService) GetCompanyProfileByID(id string) (*dto.ResponseCompanyProfileDTO, error) {
|
|
|
|
companyProfile, err := s.companyProfileRepo.GetCompanyProfileByID(id)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("error retrieving company profile by ID: %v", err)
|
|
}
|
|
|
|
responseDTO, err := FormatResponseCompanyProfile(companyProfile)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("error formatting company profile response: %v", err)
|
|
}
|
|
|
|
return responseDTO, nil
|
|
}
|
|
|
|
func (s *companyProfileService) GetCompanyProfilesByUserID(userID string) ([]dto.ResponseCompanyProfileDTO, error) {
|
|
|
|
companyProfiles, err := s.companyProfileRepo.GetCompanyProfilesByUserID(userID)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("error retrieving company profiles by userID: %v", err)
|
|
}
|
|
|
|
var responseDTOs []dto.ResponseCompanyProfileDTO
|
|
for _, companyProfile := range companyProfiles {
|
|
responseDTO, err := FormatResponseCompanyProfile(&companyProfile)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("error formatting company profile response: %v", err)
|
|
}
|
|
responseDTOs = append(responseDTOs, *responseDTO)
|
|
}
|
|
|
|
return responseDTOs, nil
|
|
}
|
|
|
|
func (s *companyProfileService) UpdateCompanyProfile(id string, request *dto.RequestCompanyProfileDTO) (*dto.ResponseCompanyProfileDTO, error) {
|
|
|
|
errors, valid := request.ValidateCompanyProfileInput()
|
|
if !valid {
|
|
return nil, fmt.Errorf("validation failed: %v", errors)
|
|
}
|
|
|
|
companyProfile := &model.CompanyProfile{
|
|
CompanyName: request.CompanyName,
|
|
CompanyAddress: request.CompanyAddress,
|
|
CompanyPhone: request.CompanyPhone,
|
|
CompanyEmail: request.CompanyEmail,
|
|
CompanyLogo: request.CompanyLogo,
|
|
CompanyWebsite: request.CompanyWebsite,
|
|
TaxID: request.TaxID,
|
|
FoundedDate: request.FoundedDate,
|
|
CompanyType: request.CompanyType,
|
|
CompanyDescription: request.CompanyDescription,
|
|
}
|
|
|
|
updatedCompanyProfile, err := s.companyProfileRepo.UpdateCompanyProfile(id, companyProfile)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("failed to update company profile: %v", err)
|
|
}
|
|
|
|
responseDTO, err := FormatResponseCompanyProfile(updatedCompanyProfile)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("failed to format company profile response: %v", err)
|
|
}
|
|
|
|
return responseDTO, nil
|
|
}
|
|
|
|
func (s *companyProfileService) DeleteCompanyProfile(id string) error {
|
|
|
|
err := s.companyProfileRepo.DeleteCompanyProfile(id)
|
|
if err != nil {
|
|
return fmt.Errorf("failed to delete company profile: %v", err)
|
|
}
|
|
|
|
return nil
|
|
}
|