75 lines
2.0 KiB
Go
75 lines
2.0 KiB
Go
package uploadhelper
|
|
|
|
import (
|
|
"fmt"
|
|
"path/filepath"
|
|
"strings"
|
|
|
|
ere "simrs-vx/internal/domain/references/encounter"
|
|
)
|
|
|
|
func getBucketForType(docType string) (string, error) {
|
|
switch strings.ToLower(docType) {
|
|
case "resident", "resident-number", "ktp":
|
|
return string(ere.DTCPRN), nil
|
|
case "driver-license", "sim", "license":
|
|
return string(ere.DTCPDL), nil
|
|
case "passport", "paspor":
|
|
return string(ere.DTCPP), nil
|
|
case "family-card", "kk", "family":
|
|
return string(ere.DTCPFC), nil
|
|
case "mcu", "medical", "mcu-result":
|
|
return string(ere.DTCMIR), nil
|
|
default:
|
|
return "", fmt.Errorf("unknown document type: %s", docType)
|
|
}
|
|
}
|
|
|
|
// getValidFileTypesForBucket returns allowed file types for each bucket
|
|
func getValidFileTypesForBucket(bucketName string) []string {
|
|
switch bucketName {
|
|
case string(ere.DTCPRN), string(ere.DTCPDL), string(ere.DTCPP), string(ere.DTCPFC):
|
|
return []string{".jpg", ".jpeg", ".png", ".pdf", ".gif"}
|
|
case string(ere.DTCMIR):
|
|
return []string{".jpg", ".jpeg", ".png", ".pdf", ".gif", ".doc", ".docx", ".xls", ".xlsx"}
|
|
default:
|
|
return []string{".jpg", ".jpeg", ".png", ".pdf"}
|
|
}
|
|
}
|
|
|
|
// isValidFileType checks if the uploaded file type is allowed for the specific bucket
|
|
func IsValidFileType(ext, bucketName string) bool {
|
|
allowedTypes := getValidFileTypesForBucket(bucketName)
|
|
|
|
for _, allowedExt := range allowedTypes {
|
|
if ext == allowedExt {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|
|
|
|
// getContentType determines the content type based on file extension
|
|
func getContentType(filename string) string {
|
|
switch strings.ToLower(filepath.Ext(filename)) {
|
|
case ".jpg", ".jpeg":
|
|
return "image/jpeg"
|
|
case ".png":
|
|
return "image/png"
|
|
case ".pdf":
|
|
return "application/pdf"
|
|
case ".gif":
|
|
return "image/gif"
|
|
case ".doc":
|
|
return "application/msword"
|
|
case ".docx":
|
|
return "application/vnd.openxmlformats-officedocument.wordprocessingml.document"
|
|
case ".xls":
|
|
return "application/vnd.ms-excel"
|
|
case ".xlsx":
|
|
return "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
|
|
default:
|
|
return "application/octet-stream"
|
|
}
|
|
}
|