103 lines
2.1 KiB
Go
103 lines
2.1 KiB
Go
package models
|
|
|
|
import (
|
|
"apskel-pos-be/internal/constants"
|
|
"time"
|
|
|
|
"github.com/google/uuid"
|
|
)
|
|
|
|
type File struct {
|
|
ID uuid.UUID
|
|
OrganizationID uuid.UUID
|
|
UserID uuid.UUID
|
|
FileName string
|
|
OriginalName string
|
|
FileURL string
|
|
FileSize int64
|
|
MimeType string
|
|
FileType string
|
|
UploadPath string
|
|
IsPublic bool
|
|
Metadata map[string]interface{}
|
|
CreatedAt time.Time
|
|
UpdatedAt time.Time
|
|
}
|
|
|
|
// Request DTOs
|
|
type UploadFileRequest struct {
|
|
FileType constants.FileType `validate:"required"`
|
|
IsPublic *bool `validate:"omitempty"`
|
|
Metadata map[string]interface{}
|
|
}
|
|
|
|
type UpdateFileRequest struct {
|
|
IsPublic *bool `validate:"omitempty"`
|
|
Metadata map[string]interface{}
|
|
}
|
|
|
|
type ListFilesRequest struct {
|
|
OrganizationID *uuid.UUID
|
|
UserID *uuid.UUID
|
|
FileType *constants.FileType
|
|
IsPublic *bool
|
|
DateFrom *time.Time
|
|
DateTo *time.Time
|
|
Search string
|
|
Page int `validate:"required,min=1"`
|
|
Limit int `validate:"required,min=1,max=100"`
|
|
}
|
|
|
|
// Response DTOs
|
|
type FileResponse struct {
|
|
ID uuid.UUID
|
|
OrganizationID uuid.UUID
|
|
UserID uuid.UUID
|
|
FileName string
|
|
OriginalName string
|
|
FileURL string
|
|
FileSize int64
|
|
MimeType string
|
|
FileType string
|
|
UploadPath string
|
|
IsPublic bool
|
|
Metadata map[string]interface{}
|
|
CreatedAt time.Time
|
|
UpdatedAt time.Time
|
|
}
|
|
|
|
type ListFilesResponse struct {
|
|
Files []*FileResponse
|
|
TotalCount int
|
|
Page int
|
|
Limit int
|
|
TotalPages int
|
|
}
|
|
|
|
type UploadFileResponse struct {
|
|
File FileResponse
|
|
}
|
|
|
|
// Helper methods
|
|
func (f *File) IsImage() bool {
|
|
return f.FileType == string(constants.FileTypeImage)
|
|
}
|
|
|
|
func (f *File) IsDocument() bool {
|
|
return f.FileType == string(constants.FileTypeDocument)
|
|
}
|
|
|
|
func (f *File) IsVideo() bool {
|
|
return f.FileType == string(constants.FileTypeVideo)
|
|
}
|
|
|
|
func (f *File) GetFileExtension() string {
|
|
// Extract extension from original name
|
|
for i := len(f.OriginalName) - 1; i >= 0; i-- {
|
|
if f.OriginalName[i] == '.' {
|
|
return f.OriginalName[i:]
|
|
}
|
|
}
|
|
return ""
|
|
}
|