feat: update fixing publish scheduling

This commit is contained in:
hanif salafi 2025-10-17 01:04:53 +07:00
parent 5699c1b7fa
commit e5666ef452
5 changed files with 26 additions and 12 deletions

View File

@ -3,6 +3,7 @@ package repository
import ( import (
"fmt" "fmt"
"strings" "strings"
"time"
"web-medols-be/app/database" "web-medols-be/app/database"
"web-medols-be/app/database/entity" "web-medols-be/app/database/entity"
"web-medols-be/app/module/article_files/request" "web-medols-be/app/module/article_files/request"
@ -10,10 +11,12 @@ import (
utilSvc "web-medols-be/utils/service" utilSvc "web-medols-be/utils/service"
"github.com/google/uuid" "github.com/google/uuid"
"github.com/rs/zerolog"
) )
type articleFilesRepository struct { type articleFilesRepository struct {
DB *database.Database DB *database.Database
Log zerolog.Logger
} }
// ArticleFilesRepository define interface of IArticleFilesRepository // ArticleFilesRepository define interface of IArticleFilesRepository
@ -27,9 +30,10 @@ type ArticleFilesRepository interface {
Delete(clientId *uuid.UUID, id uint) (err error) Delete(clientId *uuid.UUID, id uint) (err error)
} }
func NewArticleFilesRepository(db *database.Database) ArticleFilesRepository { func NewArticleFilesRepository(db *database.Database, log zerolog.Logger) ArticleFilesRepository {
return &articleFilesRepository{ return &articleFilesRepository{
DB: db, DB: db,
Log: log,
} }
} }
@ -158,7 +162,7 @@ func (_i *articleFilesRepository) Update(clientId *uuid.UUID, id uint, articleFi
ClientId: articleFiles.ClientId, ClientId: articleFiles.ClientId,
IsActive: articleFiles.IsActive, IsActive: articleFiles.IsActive,
CreatedAt: articleFiles.CreatedAt, CreatedAt: articleFiles.CreatedAt,
UpdatedAt: articleFiles.UpdatedAt, UpdatedAt: time.Time{},
// Exclude Article relation field // Exclude Article relation field
} }
@ -166,6 +170,12 @@ func (_i *articleFilesRepository) Update(clientId *uuid.UUID, id uint, articleFi
if err != nil { if err != nil {
return err return err
} }
// Remove any relation fields that might have been included
delete(articleFilesMap, "article")
_i.Log.Info().Interface("articleFilesMap : ", articleFilesMap).Msg("")
return _i.DB.DB.Model(&entity.ArticleFiles{}). return _i.DB.DB.Model(&entity.ArticleFiles{}).
Where(&entity.ArticleFiles{ID: id}). Where(&entity.ArticleFiles{ID: id}).
Updates(articleFilesMap).Error Updates(articleFilesMap).Error

View File

@ -19,7 +19,6 @@ import (
"web-medols-be/app/module/article_files/request" "web-medols-be/app/module/article_files/request"
"web-medols-be/app/module/article_files/response" "web-medols-be/app/module/article_files/response"
config "web-medols-be/config/config" config "web-medols-be/config/config"
minioStorage "web-medols-be/config/config"
"web-medols-be/utils/paginator" "web-medols-be/utils/paginator"
"github.com/gofiber/fiber/v2" "github.com/gofiber/fiber/v2"
@ -33,7 +32,7 @@ type articleFilesService struct {
Repo repository.ArticleFilesRepository Repo repository.ArticleFilesRepository
Log zerolog.Logger Log zerolog.Logger
Cfg *config.Config Cfg *config.Config
MinioStorage *minioStorage.MinioStorage MinioStorage *config.MinioStorage
} }
// ArticleFilesService define interface of IArticleFilesService // ArticleFilesService define interface of IArticleFilesService
@ -49,7 +48,7 @@ type ArticleFilesService interface {
} }
// NewArticleFilesService init ArticleFilesService // NewArticleFilesService init ArticleFilesService
func NewArticleFilesService(repo repository.ArticleFilesRepository, log zerolog.Logger, cfg *config.Config, minioStorage *minioStorage.MinioStorage) ArticleFilesService { func NewArticleFilesService(repo repository.ArticleFilesRepository, log zerolog.Logger, cfg *config.Config, minioStorage *config.MinioStorage) ArticleFilesService {
return &articleFilesService{ return &articleFilesService{
Repo: repo, Repo: repo,

View File

@ -199,7 +199,7 @@ func (_i *articlesRepository) GetAll(clientId *uuid.UUID, userLevelId *uint, req
} }
func (_i *articlesRepository) GetAllPublishSchedule(clientId *uuid.UUID) (articles []*entity.Articles, err error) { func (_i *articlesRepository) GetAllPublishSchedule(clientId *uuid.UUID) (articles []*entity.Articles, err error) {
query := _i.DB.DB.Where("publish_schedule IS NOT NULL") query := _i.DB.DB.Where("publish_schedule IS NOT NULL and is_publish = false")
if clientId != nil { if clientId != nil {
query = query.Where("client_id = ?", clientId) query = query.Where("client_id = ?", clientId)
} }
@ -300,7 +300,7 @@ func (_i *articlesRepository) UpdateSkipNull(clientId *uuid.UUID, id uint, artic
// Clear fields that could cause foreign key constraint violations // Clear fields that could cause foreign key constraint violations
updateData.WorkflowId = nil updateData.WorkflowId = nil
updateData.ID = 0 updateData.ID = 0
updateData.CreatedAt = time.Time{} updateData.UpdatedAt = time.Time{}
return _i.DB.DB.Model(&entity.Articles{}). return _i.DB.DB.Model(&entity.Articles{}).
Where(&entity.Articles{ID: id}). Where(&entity.Articles{ID: id}).

View File

@ -723,8 +723,12 @@ func (_i *articlesService) ExecuteScheduling() error {
Interface("Article ID", article.ID).Msg("") Interface("Article ID", article.ID).Msg("")
continue continue
} }
// If parsed as date only, set time to start of day (00:00:00) // If parsed as date only, set time to start of day (00:00:00) in local timezone
scheduledTime = scheduledTime.Truncate(24 * time.Hour) scheduledTime = time.Date(scheduledTime.Year(), scheduledTime.Month(), scheduledTime.Day(), 0, 0, 0, 0, now.Location())
} else {
// For datetime format, parse in local timezone
scheduledTime = time.Date(scheduledTime.Year(), scheduledTime.Month(), scheduledTime.Day(),
scheduledTime.Hour(), scheduledTime.Minute(), scheduledTime.Second(), 0, now.Location())
} }
// Check if the scheduled time has passed (for datetime) or if it's today (for date only) // Check if the scheduled time has passed (for datetime) or if it's today (for date only)
@ -735,7 +739,8 @@ func (_i *articlesService) ExecuteScheduling() error {
} else { } else {
// For date-only format, check if it's today // For date-only format, check if it's today
today := now.Truncate(24 * time.Hour) today := now.Truncate(24 * time.Hour)
shouldPublish = scheduledTime.Equal(today) scheduledDate := scheduledTime.Truncate(24 * time.Hour)
shouldPublish = scheduledDate.Equal(today) || scheduledDate.Before(today)
} }
if shouldPublish { if shouldPublish {

Binary file not shown.