65 lines
2.2 KiB
Go
65 lines
2.2 KiB
Go
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)
|
|
}
|