refactor(usecase): accept configurable default zoom levels
- commit
- f163db7109425243548d84c0c83079bead680a1a
- author
- brice · · 2025-12-15 19:03 UTC
- committer
- brice · · 2025-12-15 20:48 UTC
- parent
- 9134c7b
- signature
- unsigned
2 files · +24 -6
M internal/application/usecase/manage_zoom.go +16 -5
| @@ -14,18 +14,29 @@ import ( | |||
| 14 | 14 | ||
| 15 | 15 | // ManageZoomUseCase handles per-domain zoom level operations. | |
| 16 | 16 | type ManageZoomUseCase struct { | |
| 17 | - | zoomRepo repository.ZoomRepository | |
| 17 | + | zoomRepo repository.ZoomRepository | |
| 18 | + | defaultZoom float64 | |
| 18 | 19 | } | |
| 19 | 20 | ||
| 20 | 21 | // NewManageZoomUseCase creates a new zoom management use case. | |
| 21 | - | func NewManageZoomUseCase(zoomRepo repository.ZoomRepository) *ManageZoomUseCase { | |
| 22 | + | // defaultZoom is the zoom level to use when resetting (typically from config). | |
| 23 | + | func NewManageZoomUseCase(zoomRepo repository.ZoomRepository, defaultZoom float64) *ManageZoomUseCase { | |
| 24 | + | if defaultZoom <= 0 { | |
| 25 | + | defaultZoom = entity.ZoomDefault | |
| 26 | + | } | |
| 22 | 27 | return &ManageZoomUseCase{ | |
| 23 | - | zoomRepo: zoomRepo, | |
| 28 | + | zoomRepo: zoomRepo, | |
| 29 | + | defaultZoom: defaultZoom, | |
| 24 | 30 | } | |
| 25 | 31 | } | |
| 26 | 32 | ||
| 33 | + | // DefaultZoom returns the configured default zoom level. | |
| 34 | + | func (uc *ManageZoomUseCase) DefaultZoom() float64 { | |
| 35 | + | return uc.defaultZoom | |
| 36 | + | } | |
| 37 | + | ||
| 27 | 38 | // GetZoom retrieves the zoom level for a domain. | |
| 28 | - | // Returns the default zoom level if none is set. | |
| 39 | + | // Returns the configured default zoom level if none is set. | |
| 29 | 40 | func (uc *ManageZoomUseCase) GetZoom(ctx context.Context, domain string) (*entity.ZoomLevel, error) { | |
| 30 | 41 | log := logging.FromContext(ctx) | |
| 31 | 42 | log.Debug().Str("domain", domain).Msg("getting zoom level") | |
| @@ -36,7 +47,7 @@ func (uc *ManageZoomUseCase) GetZoom(ctx context.Context, domain string) (*entit | |||
| 36 | 47 | } | |
| 37 | 48 | ||
| 38 | 49 | if zoom == nil { | |
| 39 | - | zoom = entity.NewZoomLevel(domain, entity.ZoomDefault) | |
| 50 | + | zoom = entity.NewZoomLevel(domain, uc.defaultZoom) | |
| 40 | 51 | log.Debug().Str("domain", domain).Float64("zoom", zoom.ZoomFactor).Msg("using default zoom") | |
| 41 | 52 | } | |
| 42 | 53 | ||
| @@ -14,18 +14,29 @@ import ( | |||||
| 14 | 14 | ||||
| 15 | // ManageZoomUseCase handles per-domain zoom level operations. | 15 | // ManageZoomUseCase handles per-domain zoom level operations. | ||
| 16 | type ManageZoomUseCase struct { | 16 | type ManageZoomUseCase struct { | ||
| 17 | - | zoomRepo repository.ZoomRepository | 17 | + | zoomRepo repository.ZoomRepository |
| 18 | + | defaultZoom float64 | |||
| 18 | } | 19 | } | ||
| 19 | 20 | ||||
| 20 | // NewManageZoomUseCase creates a new zoom management use case. | 21 | // NewManageZoomUseCase creates a new zoom management use case. | ||
| 21 | - | func NewManageZoomUseCase(zoomRepo repository.ZoomRepository) *ManageZoomUseCase { | 22 | + | // defaultZoom is the zoom level to use when resetting (typically from config). |
| 23 | + | func NewManageZoomUseCase(zoomRepo repository.ZoomRepository, defaultZoom float64) *ManageZoomUseCase { | |||
| 24 | + | if defaultZoom <= 0 { | |||
| 25 | + | defaultZoom = entity.ZoomDefault | |||
| 26 | + | } | |||
| 22 | return &ManageZoomUseCase{ | 27 | return &ManageZoomUseCase{ | ||
| 23 | - | zoomRepo: zoomRepo, | 28 | + | zoomRepo: zoomRepo, |
| 29 | + | defaultZoom: defaultZoom, | |||
| 24 | } | 30 | } | ||
| 25 | } | 31 | } | ||
| 26 | 32 | ||||
| 33 | + | // DefaultZoom returns the configured default zoom level. | |||
| 34 | + | func (uc *ManageZoomUseCase) DefaultZoom() float64 { | |||
| 35 | + | return uc.defaultZoom | |||
| 36 | + | } | |||
| 37 | + | ||||
| 27 | // GetZoom retrieves the zoom level for a domain. | 38 | // GetZoom retrieves the zoom level for a domain. | ||
| 28 | - | // Returns the default zoom level if none is set. | 39 | + | // Returns the configured default zoom level if none is set. |
| 29 | func (uc *ManageZoomUseCase) GetZoom(ctx context.Context, domain string) (*entity.ZoomLevel, error) { | 40 | func (uc *ManageZoomUseCase) GetZoom(ctx context.Context, domain string) (*entity.ZoomLevel, error) { | ||
| 30 | log := logging.FromContext(ctx) | 41 | log := logging.FromContext(ctx) | ||
| 31 | log.Debug().Str("domain", domain).Msg("getting zoom level") | 42 | log.Debug().Str("domain", domain).Msg("getting zoom level") | ||
| @@ -36,7 +47,7 @@ func (uc *ManageZoomUseCase) GetZoom(ctx context.Context, domain string) (*entit | |||||
| 36 | } | 47 | } | ||
| 37 | 48 | ||||
| 38 | if zoom == nil { | 49 | if zoom == nil { | ||
| 39 | - | zoom = entity.NewZoomLevel(domain, entity.ZoomDefault) | 50 | + | zoom = entity.NewZoomLevel(domain, uc.defaultZoom) |
| 40 | log.Debug().Str("domain", domain).Float64("zoom", zoom.ZoomFactor).Msg("using default zoom") | 51 | log.Debug().Str("domain", domain).Float64("zoom", zoom.ZoomFactor).Msg("using default zoom") | ||
| 41 | } | 52 | } | ||
| 42 | 53 | ||||
M internal/application/usecase/navigate.go +8 -1
| @@ -14,16 +14,23 @@ import ( | |||
| 14 | 14 | type NavigateUseCase struct { | |
| 15 | 15 | historyRepo repository.HistoryRepository | |
| 16 | 16 | zoomRepo repository.ZoomRepository | |
| 17 | + | defaultZoom float64 | |
| 17 | 18 | } | |
| 18 | 19 | ||
| 19 | 20 | // NewNavigateUseCase creates a new navigation use case. | |
| 21 | + | // defaultZoom is the zoom level to use when no per-domain zoom is saved (typically from config). | |
| 20 | 22 | func NewNavigateUseCase( | |
| 21 | 23 | historyRepo repository.HistoryRepository, | |
| 22 | 24 | zoomRepo repository.ZoomRepository, | |
| 25 | + | defaultZoom float64, | |
| 23 | 26 | ) *NavigateUseCase { | |
| 27 | + | if defaultZoom <= 0 { | |
| 28 | + | defaultZoom = entity.ZoomDefault | |
| 29 | + | } | |
| 24 | 30 | return &NavigateUseCase{ | |
| 25 | 31 | historyRepo: historyRepo, | |
| 26 | 32 | zoomRepo: zoomRepo, | |
| 33 | + | defaultZoom: defaultZoom, | |
| 27 | 34 | } | |
| 28 | 35 | } | |
| 29 | 36 | ||
| @@ -55,7 +62,7 @@ func (uc *NavigateUseCase) Execute(ctx context.Context, input NavigateInput) (*N | |||
| 55 | 62 | } | |
| 56 | 63 | ||
| 57 | 64 | // Load and apply zoom level before navigation (for DOM zoom mode) | |
| 58 | - | var zoomFactor float64 = entity.ZoomDefault | |
| 65 | + | zoomFactor := uc.defaultZoom | |
| 59 | 66 | if domain != "" { | |
| 60 | 67 | zoom, err := uc.zoomRepo.Get(ctx, domain) | |
| 61 | 68 | if err != nil { | |
| @@ -14,16 +14,23 @@ import ( | |||||
| 14 | type NavigateUseCase struct { | 14 | type NavigateUseCase struct { | ||
| 15 | historyRepo repository.HistoryRepository | 15 | historyRepo repository.HistoryRepository | ||
| 16 | zoomRepo repository.ZoomRepository | 16 | zoomRepo repository.ZoomRepository | ||
| 17 | + | defaultZoom float64 | |||
| 17 | } | 18 | } | ||
| 18 | 19 | ||||
| 19 | // NewNavigateUseCase creates a new navigation use case. | 20 | // NewNavigateUseCase creates a new navigation use case. | ||
| 21 | + | // defaultZoom is the zoom level to use when no per-domain zoom is saved (typically from config). | |||
| 20 | func NewNavigateUseCase( | 22 | func NewNavigateUseCase( | ||
| 21 | historyRepo repository.HistoryRepository, | 23 | historyRepo repository.HistoryRepository, | ||
| 22 | zoomRepo repository.ZoomRepository, | 24 | zoomRepo repository.ZoomRepository, | ||
| 25 | + | defaultZoom float64, | |||
| 23 | ) *NavigateUseCase { | 26 | ) *NavigateUseCase { | ||
| 27 | + | if defaultZoom <= 0 { | |||
| 28 | + | defaultZoom = entity.ZoomDefault | |||
| 29 | + | } | |||
| 24 | return &NavigateUseCase{ | 30 | return &NavigateUseCase{ | ||
| 25 | historyRepo: historyRepo, | 31 | historyRepo: historyRepo, | ||
| 26 | zoomRepo: zoomRepo, | 32 | zoomRepo: zoomRepo, | ||
| 33 | + | defaultZoom: defaultZoom, | |||
| 27 | } | 34 | } | ||
| 28 | } | 35 | } | ||
| 29 | 36 | ||||
| @@ -55,7 +62,7 @@ func (uc *NavigateUseCase) Execute(ctx context.Context, input NavigateInput) (*N | |||||
| 55 | } | 62 | } | ||
| 56 | 63 | ||||
| 57 | // Load and apply zoom level before navigation (for DOM zoom mode) | 64 | // Load and apply zoom level before navigation (for DOM zoom mode) | ||
| 58 | - | var zoomFactor float64 = entity.ZoomDefault | 65 | + | zoomFactor := uc.defaultZoom |
| 59 | if domain != "" { | 66 | if domain != "" { | ||
| 60 | zoom, err := uc.zoomRepo.Get(ctx, domain) | 67 | zoom, err := uc.zoomRepo.Get(ctx, domain) | ||
| 61 | if err != nil { | 68 | if err != nil { | ||