package model import ( "context" "github.com/jackc/pgx/v5" "github.com/jackc/pgx/v5/pgconn" ) type WidgetService interface { CreateWidget(ctx context.Context, streamerID StreamerID, templateId TemplateID) (WidgetID, error) DeleteWidget(ctx context.Context, widgetID WidgetID) error UpdateDuration(ctx context.Context, widgetID WidgetID, duration Duration) error GetWidgetInfo(ctx context.Context, widgetID WidgetID) (*DonatAndWidget, error) GetWidgetHTML(ctx context.Context, widgetID WidgetID) (WidgetHTML, error) } type WidgetRepo interface { CreateWidget(ctx context.Context, streamerID StreamerID, templateId TemplateID) (WidgetID, error) DeleteWidget(ctx context.Context, widgetID WidgetID) error UpdateDuration(ctx context.Context, widgetID WidgetID, duration Duration) error GetWidget(ctx context.Context, widgetID WidgetID) (*Widget, error) } type MediaService interface { SetMediaFile(ctx context.Context, mediaType MediaType, widgetID WidgetID, file UploadFile, filename string, size int64, collection string) error SetMediaUrl(ctx context.Context, mediaType MediaType, widgetID WidgetID, mediaURL MediaUrl) error UpdateMediaFile(ctx context.Context, widgetID WidgetID, mediaType MediaType, file UploadFile, filename string, size int64, collection string) error GetMediaFile(ctx context.Context, widgetID WidgetID, mediaType MediaType) (DownloadFile, error) } type MediaRepo interface { SetMediaFile(file UploadFile, filename string, size int64, collection string) (FileID, error) GetMediaFile(fileID FileID) (DownloadFile, error) GetMediaUrl(ctx context.Context, widgetID WidgetID, mediaType MediaType) (MediaUrl, error) SetMediaUrl(ctx context.Context, widgetID WidgetID, mediaUrl MediaUrl, mediaType MediaType) error UpdateMediaFile(ctx context.Context, widgetID WidgetID, file UploadFile, fileID FileID, filename string, size int64, collection string, mediaType MediaType) error } type DonatService interface { SetDonat(ctx context.Context, widgetID WidgetID, text string, amount DonatAmount, donatUser string) error DeleteDonat(ctx context.Context, DonatID DonatID) error } type DonatRepo interface { SetDonat(ctx context.Context, widgetID WidgetID, text string, amount DonatAmount, donatUser string) error GetDonat(ctx context.Context, widgetID WidgetID) ([]*Donat, error) DeleteDonat(ctx context.Context, donatID DonatID) error } type Error interface { Error() string } type Storage interface { Upload(file UploadFile, filename string, size int64, collection string) (FileData, error) Download(FileID FileID) (DownloadFile, error) Update(file UploadFile, fileID FileID, filename string, size int64, collection string) error } type Db interface { Exec(ctx context.Context, query string, args ...interface{}) (pgconn.CommandTag, error) Query(ctx context.Context, query string, args ...interface{}) (pgx.Rows, error) CreateTable(ctx context.Context, query string) error DropTable(ctx context.Context, query string) error }