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.go75
-rw-r--r--config/config.json13
2 files changed, 73 insertions, 15 deletions
diff --git a/config/config.go b/config/config.go
index 63c1e0c..64d2e76 100644
--- a/config/config.go
+++ b/config/config.go
@@ -10,12 +10,67 @@ import (
)
type Config struct {
- LogLevel slog.Level `json:"LogLevel" validate:"required"`
+ 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"`
+}
+
+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 StorageConfig struct {
- Type string `json:"Type" validate:"required,oneof=b2"`
+ Type string `json:"Type" validate:"required,oneof=b2 s3"`
Config any `json:"Config" validate:"required"`
}
@@ -38,6 +93,12 @@ func (sc *StorageConfig) UnmarshalJSON(data []byte) error {
return fmt.Errorf("unmarshal B2Config: %w", err)
}
sc.Config = &b2Config
+ case "s3":
+ var s3Config S3Config
+ if err := json.Unmarshal(tmp.Config, &s3Config); err != nil {
+ return fmt.Errorf("unmarshal S3Config: %w", err)
+ }
+ sc.Config = &s3Config
default:
return fmt.Errorf("unsupported storage type: %s", tmp.Type)
}
@@ -53,6 +114,16 @@ type B2Config struct {
ApplicationKey string `json:"ApplicationKey"`
}
+type S3Config struct {
+ BucketName string `json:"BucketName" validate:"required,min=1"`
+ Region string `json:"Region" validate:"required,min=1"`
+ Prefix string `json:"Prefix"`
+ Endpoint string `json:"Endpoint"`
+ UsePathStyle bool `json:"UsePathStyle"`
+ AccessKeyID string `json:"AccessKeyID"`
+ SecretAccessKey string `json:"SecretAccessKey"`
+}
+
func LoadConfig(path string, config *Config) error {
fileBytes, err := os.ReadFile(path)
if err != nil {
diff --git a/config/config.json b/config/config.json
deleted file mode 100644
index 9a49b76..0000000
--- a/config/config.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- "LogLevel": "debug",
- "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