summaryrefslogtreecommitdiff
path: root/config
diff refs
from: back
to: back
| flip
diff options
context:
space:
mode:
Diffstat (limited to 'config')
-rw-r--r--config/config.go64
-rw-r--r--config/config.json20
2 files changed, 29 insertions, 55 deletions
diff --git a/config/config.go b/config/config.go
index 64d2e76..543413f 100644
--- a/config/config.go
+++ b/config/config.go
@@ -10,63 +10,17 @@ import (
)
type Config struct {
- LogLevel slog.Level `json:"LogLevel" validate:"required"`
- MaxConcurrentJobs int `json:"MaxConcurrentJobs" validate:"required,min=1"`
- DraftDir string `json:"DraftDir" validate:"required"`
- DraftSuffix string `json:"DraftSuffix" validate:"required"`
- Transcoders []TranscoderConfig `json:"Transcoders" validate:"required,min=1,dive"`
+ LogLevel slog.Level `json:"LogLevel" validate:"required"`
+ MaxConcurrentJobs int `json:"MaxConcurrentJobs" validate:"required,min=1"`
+ DraftMode DraftModeConfig `json:"DraftMode"`
+ Storage StorageConfig `json:"Storage" validate:"required"`
}
-type TranscoderConfig struct {
- Type string `json:"Type" validate:"required,oneof=sayauz telegram"`
- Config any `json:"Config" validate:"required"`
-}
-
-func (tc *TranscoderConfig) UnmarshalJSON(data []byte) error {
- var tmp struct {
- Type string `json:"Type"`
- Config json.RawMessage `json:"Config"`
- }
-
- if err := json.Unmarshal(data, &tmp); err != nil {
- return err
- }
-
- tc.Type = tmp.Type
-
- switch tmp.Type {
- case "sayauz":
- var sayauzConfig SayauzConfig
- if err := json.Unmarshal(tmp.Config, &sayauzConfig); err != nil {
- return fmt.Errorf("unmarshal SayauzConfig: %w", err)
- }
- tc.Config = &sayauzConfig
- case "telegram":
- var telegramConfig TelegramConfig
- if err := json.Unmarshal(tmp.Config, &telegramConfig); err != nil {
- return fmt.Errorf("unmarshal TelegramConfig: %w", err)
- }
- tc.Config = &telegramConfig
- default:
- return fmt.Errorf("unsupported transcoder type: %s", tmp.Type)
- }
-
- return nil
-}
-
-type SayauzConfig struct {
- Category string `json:"Category" validate:"required,min=1"`
- Storage StorageConfig `json:"Storage" validate:"required"`
-}
-
-type TelegramConfig struct {
- BotToken string `json:"BotToken" validate:"required,min=1"`
- ChannelID int `json:"ChannelID" validate:"required,ne=0"`
- GroupID int `json:"GroupID"`
- ImageBaseURL string `json:"ImageBaseURL" validate:"required,min=1"`
- PreviewBaseURL string `json:"PreviewBaseURL"`
- PreviewExtension string `json:"PreviewExtension"`
- StateDir string `json:"StateDir" validate:"required,min=1"`
+type DraftModeConfig struct {
+ Enabled bool `json:"Enabled" validate:"required"`
+ DraftSuffix string `json:"DraftSuffix" validate:"required_if=Enabled true"`
+ ProdSuffix string `json:"ProdSuffix" validate:"required_if=Enabled true"`
+ UpdateAlways bool `json:"UpdateAlways"`
}
type StorageConfig struct {
diff --git a/config/config.json b/config/config.json
new file mode 100644
index 0000000..985dd55
--- /dev/null
+++ b/config/config.json
@@ -0,0 +1,20 @@
+{
+ "LogLevel": "debug",
+ "MaxConcurrentJobs": 10,
+ "DraftMode": {
+ "Enabled": true,
+ "DraftSuffix": ".draft.md",
+ "ProdSuffix": ".md",
+ "UpdateAlways": false
+ },
+ "Storage": {
+ "Type": "b2",
+ "Config": {
+ "BucketName": "sayana-pages",
+ "Region": "eu-central-003",
+ "Prefix": "",
+ "KeyID": "${B2_KEY_ID}",
+ "ApplicationKey": "${B2_APPLICATION_KEY}"
+ }
+ }
+} \ No newline at end of file