narasiahli-be/app/module/chat/repository/chat_schedule_file.reposito...

87 lines
2.9 KiB
Go

package repository
import (
"narasi-ahli-be/app/database"
"narasi-ahli-be/app/database/entity"
"narasi-ahli-be/app/module/chat/request"
)
type chatScheduleFileRepository struct {
DB *database.Database
}
type ChatScheduleFileRepository interface {
// File CRUD operations
CreateChatScheduleFile(file *entity.ChatScheduleFiles) (result *entity.ChatScheduleFiles, err error)
GetChatScheduleFiles(req request.ChatScheduleFileQueryRequest) (files []*entity.ChatScheduleFiles, err error)
GetChatScheduleFileByID(id uint) (file *entity.ChatScheduleFiles, err error)
GetChatScheduleFileByFilename(filename string) (file *entity.ChatScheduleFiles, err error)
UpdateChatScheduleFile(id uint, file *entity.ChatScheduleFiles) (err error)
DeleteChatScheduleFile(id uint) (err error)
}
func NewChatScheduleFileRepository(db *database.Database) ChatScheduleFileRepository {
return &chatScheduleFileRepository{
DB: db,
}
}
// CreateChatScheduleFile - Create a new chat schedule file
func (_i *chatScheduleFileRepository) CreateChatScheduleFile(file *entity.ChatScheduleFiles) (result *entity.ChatScheduleFiles, err error) {
err = _i.DB.DB.Create(file).Error
if err != nil {
return nil, err
}
err = _i.DB.DB.First(&result, file.ID).Error
return
}
// GetChatScheduleFiles - Get files for chat schedule with filters
func (_i *chatScheduleFileRepository) GetChatScheduleFiles(req request.ChatScheduleFileQueryRequest) (files []*entity.ChatScheduleFiles, err error) {
query := _i.DB.DB.Model(&entity.ChatScheduleFiles{})
// Apply filters
if req.ChatScheduleID != nil {
query = query.Where("chat_schedule_id = ?", *req.ChatScheduleID)
}
if req.FileType != nil {
query = query.Where("file_type = ?", *req.FileType)
}
if req.IsRequired != nil {
query = query.Where("is_required = ?", *req.IsRequired)
}
// Order by created_at desc (newest first)
query = query.Order("created_at DESC")
err = query.Find(&files).Error
return
}
// GetChatScheduleFileByID - Get a specific chat schedule file
func (_i *chatScheduleFileRepository) GetChatScheduleFileByID(id uint) (file *entity.ChatScheduleFiles, err error) {
err = _i.DB.DB.First(&file, id).Error
return
}
// UpdateChatScheduleFile - Update a chat schedule file
func (_i *chatScheduleFileRepository) UpdateChatScheduleFile(id uint, file *entity.ChatScheduleFiles) (err error) {
err = _i.DB.DB.Model(&entity.ChatScheduleFiles{}).Where("id = ?", id).Updates(file).Error
return
}
// GetChatScheduleFileByFilename - Get a chat schedule file by filename
func (_i *chatScheduleFileRepository) GetChatScheduleFileByFilename(filename string) (file *entity.ChatScheduleFiles, err error) {
err = _i.DB.DB.Where("file_name = ?", filename).First(&file).Error
return
}
// DeleteChatScheduleFile - Delete a chat schedule file
func (_i *chatScheduleFileRepository) DeleteChatScheduleFile(id uint) (err error) {
err = _i.DB.DB.Delete(&entity.ChatScheduleFiles{}, id).Error
return
}