Skip to content

Instantly share code, notes, and snippets.

@aasumitro
Last active February 23, 2023 02:39
Show Gist options
  • Save aasumitro/67e16bb1b1fc8bb7562028d2364e91fd to your computer and use it in GitHub Desktop.
Save aasumitro/67e16bb1b1fc8bb7562028d2364e91fd to your computer and use it in GitHub Desktop.
Geography
type GeographyDetailForm struct {
TenantID string `json:"-" form:"-"`
Name string `form:"name" json:"name"`
Type string `form:"type" json:"type" default:"region"`
Countries []struct {
ID string `form:"id" json:"id"`
Code string `form:"code" json:"code"`
Name string `form:"name" json:"name"`
Type string `form:"type" json:"type" default:"country"`
Currency struct {
ID string `form:"id" json:"id"`
Code string `form:"code" json:"code"`
Name string `form:"name" json:"name"`
} `form:"currency" json:"currency"`
Locations []struct {
Name string `form:"name" json:"name"`
Type string `form:"type" json:"type" default:"location"`
} `form:"locations" json:"locations"`
} `form:"countries" json:"countries"`
}
func (gdf *GeographyDetailForm) Validate() error {
if err := validation.ValidateStruct(gdf,
validation.Field(&gdf.Name, validation.Required),
validation.Field(&gdf.Type, validation.Required),
validation.Field(&gdf.Countries, validation.Required),
); err != nil {
return err
}
for i, country := range gdf.Countries {
if err := validation.ValidateStruct(&country,
validation.Field(&country.ID, validation.Required),
validation.Field(&country.Code, validation.Required),
validation.Field(&country.Name, validation.Required),
validation.Field(&country.Type, validation.Required),
validation.Field(&country.Currency, validation.Required),
validation.Field(&country.Locations, validation.Required),
); err != nil {
return wrapValidationError(fmt.Sprintf("country[%d]", i), err)
}
if err := validation.ValidateStruct(&country.Currency,
validation.Field(&country.Currency.ID, validation.Required),
validation.Field(&country.Currency.Name, validation.Required),
validation.Field(&country.Currency.Code, validation.Required),
); err != nil {
return wrapValidationError(fmt.Sprintf("country[%d].currency", i), err)
}
for j, location := range country.Locations {
if err := validation.ValidateStruct(&location,
validation.Field(&location.Name, validation.Required),
validation.Field(&location.Type, validation.Required),
); err != nil {
return wrapValidationError(fmt.Sprintf("country[%d].location[%d]", i, j), err)
}
}
}
return nil
}
@aasumitro
Copy link
Author

func (g *Geography) FromPrimitiveM(result bson.M) *Geography {
	geo := &Geography{}
	if id := result["_id"]; id != nil {
		geo.ID = id.(string)
	}
	if tenantID := result["tenant_id"]; tenantID != nil {
		geo.TenantID = tenantID.(string)
	}
	if name := result["name"]; name != nil {
		geo.TenantID = name.(string)
	}
	if gType := result["type"]; gType != nil {
		geo.TenantID = gType.(string)
	}
	geo.TotalCountries = 0
	if countries := result["countries"]; countries != nil {
		var newCountries []*Country
		if ca, ok := countries.(primitive.A); ok {
			for _, co := range ca {
				if co, ok := co.(bson.M); ok {

				}
			}
		}
	}
	return geo
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment