Add Flags Assets and Update Configuration

- Introduced multiple SVG flag assets to the project, enhancing the visual representation of country flags.
- Updated the configuration file to include a new path for the flags assets, ensuring proper access and organization.
- Modified the main application to accommodate the new flags path, improving the overall asset management in the application.
This commit is contained in:
n.nakhostin
2025-09-09 14:48:02 +03:30
parent c06ea278c0
commit c873635f6f
281 changed files with 11567 additions and 23 deletions
+95
View File
@@ -0,0 +1,95 @@
package assets
import (
"context"
"fmt"
"strings"
"tm/pkg/logger"
)
// Service defines business logic for flag operations
type Service interface {
// Get flag as SVG content only
GetFlagSVG(ctx context.Context, countryCode string) string
}
// flagService implements the Service interface
type flagService struct {
logger logger.Logger
flagsPath string
}
// NewFlagService creates a new flag service
func NewFlagService(logger logger.Logger, flagsPath string) Service {
return &flagService{
logger: logger,
flagsPath: flagsPath,
}
}
// GetFlagSVG retrieves only the SVG content for a flag
func (s *flagService) GetFlagSVG(ctx context.Context, countryCode string) string {
s.logger.Info("Getting flag SVG for country", map[string]interface{}{
"country_code": countryCode,
})
// Normalize country code
countryCode = strings.ToUpper(countryCode)
defaultFlag, err := GetFlagAsset(s.flagsPath, "eu")
if err != nil {
s.logger.Error("Failed to get default flag SVG", map[string]interface{}{
"country_code": countryCode,
"error": err.Error(),
})
return s.getDefaultFlag()
}
// Get ISO code
isoCode := GetISOCode(countryCode)
// Get SVG data
svgData, err := s.getFlagSVG(isoCode)
if err != nil {
s.logger.Error("Failed to get flag SVG", map[string]interface{}{
"country_code": countryCode,
"iso_code": isoCode,
"error": err.Error(),
})
return string(defaultFlag)
}
s.logger.Info("Successfully retrieved flag SVG", map[string]interface{}{
"country_code": countryCode,
"iso_code": isoCode,
})
return svgData
}
// getFlagSVG retrieves the SVG content for a given ISO code
func (s *flagService) getFlagSVG(isoCode string) (string, error) {
// Try to get from filesystem
svgData, err := GetFlagAsset(s.flagsPath, isoCode)
if err == nil {
return string(svgData), nil
}
// If not found in filesystem, return error
s.logger.Warn("Flag not found in filesystem", map[string]interface{}{
"iso_code": isoCode,
"path": s.flagsPath,
})
return "", fmt.Errorf("failed to get flag SVG, %v from %v", isoCode, s.flagsPath)
}
// getDefaultFlag returns a default flag SVG when all fallbacks fail
func (s *flagService) getDefaultFlag() string {
// Return a simple default flag SVG
return `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 60 30">
<rect width="60" height="30" fill="#012169"/>
<text x="30" y="20" text-anchor="middle" fill="white" font-family="Arial" font-size="12">EU</text>
</svg>`
}