87 lines
2.9 KiB
Go
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
|
|
}
|