summaryrefslogtreecommitdiff
path: root/repository/emails.go
blob: e39684c80692cc9df5b6eddcd2f6616b70a5efdb (plain)
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
package repository

import (
	"fmt"
	"lain/database"
	"lain/models"
)

func GetEmailsByFolder(userEmail string, folderID uint, limit int, offset int) ([]models.Email, error) {
	var messages []models.Email
	err := database.DB.Where("user_email = ? AND folder_id = ?", userEmail, folderID).
		Order("date DESC").
		Limit(limit).
		Offset(offset).
		Find(&messages).Error

	if err != nil {
		return nil, fmt.Errorf("failed to fetch emails: %w", err)
	}

	return messages, nil
}

func GetEmailByID(userEmail string, emailID uint) (*models.Email, error) {
	var message models.Email
	err := database.DB.Preload("Folder").Where("user_email = ? AND id = ?", userEmail, emailID).First(&message).Error
	if err != nil {
		return nil, fmt.Errorf("email not found: %w", err)
	}

	return &message, nil
}

func EmailExists(userEmail string, folderID uint, uid uint32) (bool, error) {
	var count int64
	err := database.DB.Model(&models.Email{}).
		Where("user_email = ? AND folder_id = ? AND uid = ?", userEmail, folderID, uid).
		Count(&count).Error

	if err != nil {
		return false, err
	}

	return count > 0, nil
}

func CreateEmail(message *models.Email) (*models.Email, error) {
	if err := database.DB.Create(message).Error; err != nil {
		return nil, fmt.Errorf("failed to create email: %w", err)
	}
	return message, nil
}

func UpdateEmail(message *models.Email) error {
	if err := database.DB.Save(message).Error; err != nil {
		return fmt.Errorf("failed to update email: %w", err)
	}
	return nil
}

func GetAttachmentsByEmailID(emailID uint) ([]models.Attachment, error) {
	var attachments []models.Attachment
	err := database.DB.Where("email_id = ?", emailID).Find(&attachments).Error
	if err != nil {
		return nil, fmt.Errorf("failed to fetch attachments: %w", err)
	}

	return attachments, nil
}

func CreateAttachment(attachment *models.Attachment) error {
	if err := database.DB.Create(attachment).Error; err != nil {
		return fmt.Errorf("failed to create attachment: %w", err)
	}
	return nil
}

func CountEmailsInFolder(userEmail string, folderID uint) (int64, error) {
	var count int64
	err := database.DB.Model(&models.Email{}).
		Where("user_email = ? AND folder_id = ?", userEmail, folderID).
		Count(&count).Error

	return count, err
}