1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
|
package database
import (
"imageboard/config"
"imageboard/models"
"imageboard/utils/format"
"imageboard/utils/transformers"
"time"
"gorm.io/gorm"
)
func GetTotalPostsCount() (int64, error) {
var count int64
err := DB.Model(&models.Image{}).Count(&count).Error
return count, err
}
func GetTodayPostsCount() (int64, error) {
var count int64
today := time.Now().Truncate(24 * time.Hour)
err := DB.Model(&models.Image{}).Where("created_at >= ?", today).Count(&count).Error
return count, err
}
func GetTotalStorageSize() (string, error) {
var imageSizes []models.ImageSize
if err := DB.Select("file_size").Find(&imageSizes).Error; err != nil {
return "0 B", err
}
var totalSize int64
for _, size := range imageSizes {
totalSize += size.FileSize
}
return format.FileSize(totalSize), nil
}
func CreateImageWithTx(tx *gorm.DB, fileName, contentType, md5Hash, sourceURL, rating string, uploaderID uint, requiresApproval bool) (*models.Image, error) {
ratingEnum, err := transformers.ConvertStringRatingToType(rating)
if err != nil {
return nil, err
}
contentTypeEnum, err := transformers.ConvertStringToContentType(contentType)
if err != nil {
return nil, err
}
image := models.Image{
FileName: fileName,
ContentType: contentTypeEnum,
MD5Hash: md5Hash,
SourceURL: sourceURL,
Rating: ratingEnum,
UploaderID: uploaderID,
IsApproved: !requiresApproval,
}
if err := tx.Create(&image).Error; err != nil {
return nil, err
}
return &image, nil
}
func CreateImageSizeWithTx(tx *gorm.DB, imageID uint, sizeType config.ImageSizeType, width, height int, fileSize int64) (*models.ImageSize, error) {
imageSize := models.ImageSize{
ImageID: imageID,
SizeType: sizeType,
Width: width,
Height: height,
FileSize: fileSize,
}
if err := tx.Create(&imageSize).Error; err != nil {
return nil, err
}
return &imageSize, nil
}
func UpdateImage(imageID uint, updates map[string]interface{}) error {
return DB.Model(&models.Image{}).Where("id = ?", imageID).Updates(updates).Error
}
|