timezone
This commit is contained in:
parent
9debdd374e
commit
561ed63ac7
5 changed files with 18 additions and 3 deletions
|
|
@ -4,3 +4,4 @@ SESSION_KEY=dev-session-key-change-me
|
||||||
APP_ENV=development
|
APP_ENV=development
|
||||||
ADMIN_EMAIL=admin@superbanka.local
|
ADMIN_EMAIL=admin@superbanka.local
|
||||||
ADMIN_PASSWORD=admin123456
|
ADMIN_PASSWORD=admin123456
|
||||||
|
TIMEZONE=UTC
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,7 @@ The app listens on `http://localhost:8080` by default.
|
||||||
Postgres is exposed on `localhost:5433` to avoid conflicts with any existing local instance.
|
Postgres is exposed on `localhost:5433` to avoid conflicts with any existing local instance.
|
||||||
|
|
||||||
The app loads `.env` automatically on startup. Existing shell environment variables still take precedence over values in `.env`.
|
The app loads `.env` automatically on startup. Existing shell environment variables still take precedence over values in `.env`.
|
||||||
|
Set `TIMEZONE` to any IANA timezone name such as `UTC` or `Europe/Prague` to control how timestamps are rendered in the UI.
|
||||||
|
|
||||||
Default bootstrap admin credentials:
|
Default bootstrap admin credentials:
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -14,6 +14,7 @@ type Config struct {
|
||||||
AppEnv string
|
AppEnv string
|
||||||
AdminEmail string
|
AdminEmail string
|
||||||
AdminPass string
|
AdminPass string
|
||||||
|
Timezone string
|
||||||
}
|
}
|
||||||
|
|
||||||
func Load() Config {
|
func Load() Config {
|
||||||
|
|
@ -28,6 +29,7 @@ func Load() Config {
|
||||||
AppEnv: getenv("APP_ENV", "development"),
|
AppEnv: getenv("APP_ENV", "development"),
|
||||||
AdminEmail: getenv("ADMIN_EMAIL", "admin@superbanka.local"),
|
AdminEmail: getenv("ADMIN_EMAIL", "admin@superbanka.local"),
|
||||||
AdminPass: getenv("ADMIN_PASSWORD", "admin123456"),
|
AdminPass: getenv("ADMIN_PASSWORD", "admin123456"),
|
||||||
|
Timezone: getenv("TIMEZONE", "UTC"),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -97,8 +97,15 @@ func NewApp(cfg config.Config) (*App, error) {
|
||||||
return nil, fmt.Errorf("run migrations: %w", err)
|
return nil, fmt.Errorf("run migrations: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
location, err := time.LoadLocation(cfg.Timezone)
|
||||||
|
if err != nil {
|
||||||
|
dbPool.Close()
|
||||||
|
return nil, fmt.Errorf("load timezone %q: %w", cfg.Timezone, err)
|
||||||
|
}
|
||||||
|
time.Local = location
|
||||||
|
|
||||||
store := db.NewStore(dbPool)
|
store := db.NewStore(dbPool)
|
||||||
renderer, err := NewRenderer()
|
renderer, err := NewRenderer(location)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
dbPool.Close()
|
dbPool.Close()
|
||||||
return nil, err
|
return nil, err
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,11 @@ type Renderer struct {
|
||||||
templates *template.Template
|
templates *template.Template
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewRenderer() (*Renderer, error) {
|
func NewRenderer(location *time.Location) (*Renderer, error) {
|
||||||
|
if location == nil {
|
||||||
|
location = time.UTC
|
||||||
|
}
|
||||||
|
|
||||||
funcs := template.FuncMap{
|
funcs := template.FuncMap{
|
||||||
"money": platform.FormatCZK,
|
"money": platform.FormatCZK,
|
||||||
"dt": func(t time.Time) string {
|
"dt": func(t time.Time) string {
|
||||||
|
|
@ -33,7 +37,7 @@ func NewRenderer() (*Renderer, error) {
|
||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
|
|
||||||
return t.Format("02. 01. 2006 15:04")
|
return t.In(location).Format("02. 01. 2006 15:04")
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue