Documentation ¶
Index ¶
- Constants
- func JWTMiddleware(cfg *jwt.Config, checkOTP bool) wool.Middleware
- func NewChatCRUD(read repository.ReadRepository[*entity.Chat], ...) action.CRUD
- func NewJobCRUD(read repository.ReadRepository[*entity.Job], ...) action.CRUD
- func NewSiteCRUD(read repository.ReadRepository[*entity.Site], ...) action.CRUD
- type ArticleActions
- type AuthActions
- type AuthDTO
- type AuthService
- type CreateChatDTO
- type CreateJobDTO
- type CreateSiteDTO
- type DailyStats
- type FeedPayloadDTO
- type JobOptionDTO
- type MediaDTO
- type OtpDTO
- type QueueActions
- type QueueInfo
- type RefreshTokenDTO
- type SSE
- type SchedulerEntry
- type Session
- type SignInDTO
- type SitemapPayloadDTO
- type StatsResponse
- type Sys
- type UpdateArticleDTO
- type UpdateChatDTO
- type UpdateJobDTO
- type UpdateSiteDTO
- type UserClaims
Constants ¶
View Source
const QNameParam = "qname"
Variables ¶
This section is empty.
Functions ¶
func JWTMiddleware ¶
func JWTMiddleware(cfg *jwt.Config, checkOTP bool) wool.Middleware
func NewChatCRUD ¶
func NewChatCRUD(read repository.ReadRepository[*entity.Chat], write repository.WriteRepository[*entity.Chat]) action.CRUD
func NewJobCRUD ¶
func NewJobCRUD(read repository.ReadRepository[*entity.Job], write repository.WriteRepository[*entity.Job]) action.CRUD
func NewSiteCRUD ¶
func NewSiteCRUD(read repository.ReadRepository[*entity.Site], write repository.WriteRepository[*entity.Site]) action.CRUD
Types ¶
type ArticleActions ¶
type ArticleActions struct { *action.ListAction[*entity.Article, any] *action.TakeAction[*entity.Article, any] *action.UpdateAction[*UpdateArticleDTO, *entity.Article] *action.DeleteAction[*entity.Article] }
func NewArticleActions ¶
func NewArticleActions( read repository.ReadRepository[*entity.Article], write repository.WriteRepository[*entity.Article], ) *ArticleActions
type AuthActions ¶
type AuthActions struct { AuthService AuthService // contains filtered or unexported fields }
func NewAuthActions ¶
func NewAuthActions(authService AuthService, logger *slog.Logger) *AuthActions
type AuthDTO ¶
type AuthDTO struct {
ClientID string `json:"client_id,omitempty" validate:"required,uuid4"`
}
type AuthService ¶
type AuthService interface { SignInByCredentials(ctx context.Context, username, password string) (Session, error) SignInByOTP(ctx context.Context, username, password string) (Session, error) SignInByRefreshToken(ctx context.Context, refreshToken string) (Session, error) }
func NewAuthService ¶
func NewAuthService( userRepo repository.ReadRepository[*entity.SysUser], client redis.UniversalClient, signer jwt.Signer, cfgJWT *jwt.Config, ) AuthService
type CreateChatDTO ¶
type CreateChatDTO struct { TelegramID int64 `json:"telegram_id,omitempty" validate:"required"` Type entity.ChatType `json:"type,omitempty" validate:"required,oneof=private group supergroup channel"` Title string `json:"title,omitempty" validate:"omitempty,max=254"` Username string `json:"username,omitempty" validate:"omitempty,max=254"` FirstName string `json:"first_name,omitempty" validate:"omitempty,max=254"` LastName string `json:"last_name,omitempty" validate:"omitempty,max=254"` Broadcast []string `json:"broadcast,omitempty" validate:"omitempty,dive,uuid4"` Blocked bool `json:"blocked,omitempty"` Deleted bool `json:"deleted,omitempty"` }
type CreateJobDTO ¶
type CreateJobDTO struct { CronExpr string `json:"cron_expr,omitempty" validate:"required,min=9,max=254"` Name entity.JobName `json:"name,omitempty" validate:"required,max=254"` Payload any `json:"payload,omitempty" validate:"required,dive"` Options []JobOptionDTO `json:"options,omitempty" validate:"omitempty,dive"` Enabled bool `json:"enabled,omitempty"` }
func (*CreateJobDTO) UnmarshalJSON ¶
func (dto *CreateJobDTO) UnmarshalJSON(data []byte) error
type CreateSiteDTO ¶
type CreateSiteDTO struct { Domain string `json:"domain,omitempty" validate:"required,fqdn"` Favicon string `json:"favicon,omitempty" validate:"required,url"` Languages []string `json:"languages,omitempty" validate:"required,min=1,dive,bcp47_language_tag"` Title string `json:"title,omitempty" validate:"required,max=254"` Enabled bool `json:"enabled,omitempty"` }
type DailyStats ¶
type FeedPayloadDTO ¶
type JobOptionDTO ¶
type JobOptionDTO struct { Type entity.JobOptionType `json:"type,omitempty" validate:"required,max=50"` Value string `json:"value,omitempty" validate:"required"` }
type OtpDTO ¶
type OtpDTO struct {
Password string `json:"password,omitempty" validate:"required,numeric,len=6"`
}
type QueueActions ¶
type QueueActions struct {
// contains filtered or unexported fields
}
func NewQueueActions ¶
func NewQueueActions(redisConnOpt asynq.RedisConnOpt) *QueueActions
func (*QueueActions) Close ¶
func (a *QueueActions) Close() error
type QueueInfo ¶
type QueueInfo struct { // Name of the queue. Queue string `json:"queue"` // Total number of bytes the queue and its tasks require to be stored in redis. MemoryUsage int64 `json:"memory_usage_bytes"` // Total number of tasks in the queue. Size int `json:"size"` // Totoal number of groups in the queue. Groups int `json:"groups"` // Latency of the queue in milliseconds. LatencyMillisec int64 `json:"latency_msec"` // Latency duration string for display purpose. DisplayLatency string `json:"display_latency"` // Number of tasks in each state. Active int `json:"active"` Pending int `json:"pending"` Aggregating int `json:"aggregating"` Scheduled int `json:"scheduled"` Retry int `json:"retry"` Archived int `json:"archived"` Completed int `json:"completed"` // Total number of tasks processed during the given date. // The number includes both succeeded and failed tasks. Processed int `json:"processed"` // Breakdown of processed tasks. Succeeded int `json:"succeeded"` Failed int `json:"failed"` // Paused indicates whether the queue is paused. // If true, tasks in the queue will not be processed. Paused bool `json:"paused"` // Time when this snapshot was taken. Timestamp time.Time `json:"timestamp"` }
type RefreshTokenDTO ¶
type RefreshTokenDTO struct {
RefreshToken string `json:"refresh_token" validate:"required,uuid4"`
}
type SchedulerEntry ¶
type SchedulerEntry struct { ID string `json:"id"` Spec string `json:"spec"` JobName string `json:"job_name"` JobPayload json.RawMessage `json:"job_payload"` Opts []string `json:"options"` NextEnqueueAt time.Time `json:"next_enqueue_at"` // This field is omitted if there were no previous enqueue events. PrevEnqueueAt *time.Time `json:"prev_enqueue_at,omitempty"` }
type SitemapPayloadDTO ¶
type SitemapPayloadDTO struct { SiteID string `json:"site_id,omitempty" validate:"required,uuid4"` Link string `json:"link,omitempty" validate:"required,url"` Lang *string `json:"lang,omitempty" validate:"omitempty,bcp47_language_tag"` MatchLoc *string `json:"match_loc,omitempty" validate:"omitempty,max=500"` SearchLoc *string `json:"search_loc,omitempty" validate:"omitempty,max=500"` SearchLink *string `json:"search_link,omitempty" validate:"omitempty,max=500"` Index *bool `json:"index,omitempty"` StopOnDup *bool `json:"stop_on_dup,omitempty"` }
type StatsResponse ¶
type StatsResponse struct { Queues []*QueueInfo `json:"queues,omitempty"` DailyStats map[string][]*DailyStats `json:"daily_stats,omitempty"` SchedulerEntries []*SchedulerEntry `json:"scheduler_entries,omitempty"` }
type Sys ¶
type Sys struct { Logger *slog.Logger CfgJWT *jwt.Config SSE *SSE AuthActions *AuthActions QueueActions *QueueActions ArticleActions *ArticleActions SiteCRUD action.CRUD ChatCRUD action.CRUD JobCRUD action.CRUD DirUI string }
type UpdateArticleDTO ¶
type UpdateArticleDTO struct { Lang string `json:"lang,omitempty" validate:"omitempty,bcp47_language_tag"` Title string `json:"title,omitempty" validate:"omitempty,max=254"` Desc *string `json:"desc,omitempty" validate:"omitempty,max=500"` Media *[]MediaDTO `json:"media,omitempty" validate:"omitempty,dive"` }
type UpdateChatDTO ¶
type UpdateJobDTO ¶
type UpdateJobDTO struct { CronExpr string `json:"cron_expr,omitempty" validate:"omitempty,min=9,max=254"` Name entity.JobName `json:"name,omitempty" validate:"omitempty,max=254"` Payload any `json:"payload,omitempty" validate:"omitempty,dive"` Options *[]JobOptionDTO `json:"options,omitempty" validate:"omitempty,dive"` Enabled *bool `json:"enabled,omitempty"` }
func (*UpdateJobDTO) UnmarshalJSON ¶
func (dto *UpdateJobDTO) UnmarshalJSON(data []byte) error
type UpdateSiteDTO ¶
type UpdateSiteDTO struct { Domain string `json:"domain,omitempty" validate:"omitempty,fqdn"` Favicon string `json:"favicon,omitempty" validate:"required,url"` Languages []string `json:"languages,omitempty" validate:"omitempty,dive,bcp47_language_tag"` Title string `json:"title,omitempty" validate:"omitempty,max=254"` Enabled *bool `json:"enabled,omitempty"` }
type UserClaims ¶
type UserClaims struct {
jwt.UserClaims
}
func GetClaims ¶
func GetClaims(c wool.Ctx) UserClaims
func (UserClaims) Valid ¶
func (c UserClaims) Valid() error
Click to show internal directories.
Click to hide internal directories.