package service import ( "context" "time" "github.com/Wei-Shaw/sub2api/internal/domain" "github.com/Wei-Shaw/sub2api/internal/pkg/pagination" ) const ( AnnouncementStatusDraft = domain.AnnouncementStatusDraft AnnouncementStatusActive = domain.AnnouncementStatusActive AnnouncementStatusArchived = domain.AnnouncementStatusArchived ) const ( AnnouncementConditionTypeSubscription = domain.AnnouncementConditionTypeSubscription AnnouncementConditionTypeBalance = domain.AnnouncementConditionTypeBalance ) const ( AnnouncementOperatorIn = domain.AnnouncementOperatorIn AnnouncementOperatorGT = domain.AnnouncementOperatorGT AnnouncementOperatorGTE = domain.AnnouncementOperatorGTE AnnouncementOperatorLT = domain.AnnouncementOperatorLT AnnouncementOperatorLTE = domain.AnnouncementOperatorLTE AnnouncementOperatorEQ = domain.AnnouncementOperatorEQ ) var ( ErrAnnouncementNotFound = domain.ErrAnnouncementNotFound ErrAnnouncementInvalidTarget = domain.ErrAnnouncementInvalidTarget ) type AnnouncementTargeting = domain.AnnouncementTargeting type AnnouncementConditionGroup = domain.AnnouncementConditionGroup type AnnouncementCondition = domain.AnnouncementCondition type Announcement = domain.Announcement type AnnouncementListFilters struct { Status string Search string } type AnnouncementRepository interface { Create(ctx context.Context, a *Announcement) error GetByID(ctx context.Context, id int64) (*Announcement, error) Update(ctx context.Context, a *Announcement) error Delete(ctx context.Context, id int64) error List(ctx context.Context, params pagination.PaginationParams, filters AnnouncementListFilters) ([]Announcement, *pagination.PaginationResult, error) ListActive(ctx context.Context, now time.Time) ([]Announcement, error) } type AnnouncementReadRepository interface { MarkRead(ctx context.Context, announcementID, userID int64, readAt time.Time) error GetReadMapByUser(ctx context.Context, userID int64, announcementIDs []int64) (map[int64]time.Time, error) GetReadMapByUsers(ctx context.Context, announcementID int64, userIDs []int64) (map[int64]time.Time, error) CountByAnnouncementID(ctx context.Context, announcementID int64) (int64, error) }