52 lines
1.7 KiB
Go
52 lines
1.7 KiB
Go
package processor
|
|
|
|
import (
|
|
"context"
|
|
"time"
|
|
|
|
"eslogad-be/internal/entities"
|
|
"eslogad-be/internal/repository"
|
|
|
|
"github.com/google/uuid"
|
|
)
|
|
|
|
type LetterActivityProcessor interface {
|
|
LogActivity(ctx context.Context, letterID uuid.UUID, action string, userID uuid.UUID, details map[string]interface{}) error
|
|
LogStatusChange(ctx context.Context, letterID uuid.UUID, fromStatus, toStatus string, userID uuid.UUID) error
|
|
GetActivitiesByLetterID(ctx context.Context, letterID uuid.UUID) ([]entities.LetterOutgoingActivityLog, error)
|
|
}
|
|
|
|
type LetterActivityProcessorImpl struct {
|
|
activityLogRepo *repository.LetterOutgoingActivityLogRepository
|
|
}
|
|
|
|
func NewLetterActivityProcessor(activityLogRepo *repository.LetterOutgoingActivityLogRepository) *LetterActivityProcessorImpl {
|
|
return &LetterActivityProcessorImpl{
|
|
activityLogRepo: activityLogRepo,
|
|
}
|
|
}
|
|
|
|
func (p *LetterActivityProcessorImpl) LogActivity(ctx context.Context, letterID uuid.UUID, action string, userID uuid.UUID, details map[string]interface{}) error {
|
|
log := &entities.LetterOutgoingActivityLog{
|
|
LetterID: letterID,
|
|
ActionType: action,
|
|
ActorUserID: &userID,
|
|
Context: details,
|
|
OccurredAt: time.Now(),
|
|
}
|
|
|
|
return p.activityLogRepo.Create(ctx, log)
|
|
}
|
|
|
|
func (p *LetterActivityProcessorImpl) LogStatusChange(ctx context.Context, letterID uuid.UUID, fromStatus, toStatus string, userID uuid.UUID) error {
|
|
details := map[string]interface{}{
|
|
"from_status": fromStatus,
|
|
"to_status": toStatus,
|
|
}
|
|
|
|
return p.LogActivity(ctx, letterID, "status_changed", userID, details)
|
|
}
|
|
|
|
func (p *LetterActivityProcessorImpl) GetActivitiesByLetterID(ctx context.Context, letterID uuid.UUID) ([]entities.LetterOutgoingActivityLog, error) {
|
|
return p.activityLogRepo.ListByLetter(ctx, letterID)
|
|
} |