aditya.siregar 4f5950543e init
2025-07-18 20:10:29 +07:00

99 lines
2.4 KiB
Go

package mappers
import (
"apskel-pos-be/internal/constants"
"apskel-pos-be/internal/entities"
"apskel-pos-be/internal/models"
"strings"
"fmt"
"github.com/google/uuid"
)
func FileEntityToResponse(file *entities.File) *models.FileResponse {
if file == nil {
return nil
}
return &models.FileResponse{
ID: file.ID,
OrganizationID: file.OrganizationID,
UserID: file.UserID,
FileName: file.FileName,
OriginalName: file.OriginalName,
FileURL: file.FileURL,
FileSize: file.FileSize,
MimeType: file.MimeType,
FileType: file.FileType,
UploadPath: file.UploadPath,
IsPublic: file.IsPublic,
Metadata: map[string]interface{}(file.Metadata),
CreatedAt: file.CreatedAt,
UpdatedAt: file.UpdatedAt,
}
}
func UploadFileRequestToEntity(req *models.UploadFileRequest, organizationID, userID uuid.UUID, fileName, originalName, fileURL, mimeType, uploadPath string, fileSize int64) *entities.File {
if req == nil {
return nil
}
isPublic := true
if req.IsPublic != nil {
isPublic = *req.IsPublic
}
return &entities.File{
OrganizationID: organizationID,
UserID: userID,
FileName: fileName,
OriginalName: originalName,
FileURL: fileURL,
FileSize: fileSize,
MimeType: mimeType,
FileType: string(req.FileType),
UploadPath: uploadPath,
IsPublic: isPublic,
Metadata: entities.Metadata(req.Metadata),
}
}
// Update request to entity updates
func UpdateFileRequestToEntityUpdates(req *models.UpdateFileRequest) map[string]interface{} {
updates := make(map[string]interface{})
if req.IsPublic != nil {
updates["is_public"] = *req.IsPublic
}
if req.Metadata != nil {
updates["metadata"] = entities.Metadata(req.Metadata)
}
return updates
}
func FileEntitiesToResponses(files []*entities.File) []*models.FileResponse {
if files == nil {
return nil
}
responses := make([]*models.FileResponse, len(files))
for i, file := range files {
response := FileEntityToResponse(file)
if response != nil {
responses[i] = response
}
}
return responses
}
func GenerateFileName(originalName string, organizationID, userID uuid.UUID) string {
cleanedName := strings.ReplaceAll(originalName, " ", "")
return fmt.Sprintf("/public/%s_%s", organizationID.String(), cleanedName)
}
func GetFileTypeFromMimeType(mimeType string) constants.FileType {
return constants.GetFileTypeFromMimeType(mimeType)
}