This commit is contained in:
@@ -169,6 +169,72 @@ func GetOpsCostSummaryHandler(service *billing.Service) http.Handler {
|
||||
})
|
||||
}
|
||||
|
||||
func GetFamilyUsageOverviewHandler(service *billing.Service) http.Handler {
|
||||
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
principal, ok := webPrincipal(w, r)
|
||||
if !ok {
|
||||
return
|
||||
}
|
||||
from, to, timezone, ok := usageOverviewQuery(w, r)
|
||||
if !ok {
|
||||
return
|
||||
}
|
||||
item, err := service.FamilyUsageOverview(
|
||||
r.Context(), principal, r.PathValue("id"), r.URL.Query().Get("device_id"), timezone, from, to,
|
||||
)
|
||||
if err != nil {
|
||||
writeBillingError(w, r, err)
|
||||
return
|
||||
}
|
||||
w.Header().Set("Cache-Control", "no-store")
|
||||
WriteJSON(w, r, http.StatusOK, item)
|
||||
})
|
||||
}
|
||||
|
||||
func GetOpsUsageOverviewHandler(service *billing.Service) http.Handler {
|
||||
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
principal, ok := webPrincipal(w, r)
|
||||
if !ok {
|
||||
return
|
||||
}
|
||||
tenantID, ok := opsTenantHeader(w, r)
|
||||
if !ok {
|
||||
return
|
||||
}
|
||||
from, to, timezone, ok := usageOverviewQuery(w, r)
|
||||
if !ok {
|
||||
return
|
||||
}
|
||||
item, err := service.OpsUsageOverview(
|
||||
r.Context(), principal, tenantID, r.URL.Query().Get("household_id"), r.URL.Query().Get("device_id"), timezone, from, to,
|
||||
)
|
||||
if err != nil {
|
||||
writeBillingError(w, r, err)
|
||||
return
|
||||
}
|
||||
w.Header().Set("Cache-Control", "no-store")
|
||||
WriteJSON(w, r, http.StatusOK, item)
|
||||
})
|
||||
}
|
||||
|
||||
func usageOverviewQuery(w http.ResponseWriter, r *http.Request) (time.Time, time.Time, string, bool) {
|
||||
from, fromErr := time.Parse(time.RFC3339, r.URL.Query().Get("from"))
|
||||
to, toErr := time.Parse(time.RFC3339, r.URL.Query().Get("to"))
|
||||
timezone := r.URL.Query().Get("timezone")
|
||||
if timezone == "" {
|
||||
timezone = "Asia/Shanghai"
|
||||
}
|
||||
if fromErr != nil || toErr != nil {
|
||||
writeValidation(w, r, "通话用量时间范围不正确", FieldError{Field: "from/to", Message: "必须是RFC3339时间且范围不超过366天"})
|
||||
return time.Time{}, time.Time{}, "", false
|
||||
}
|
||||
if _, err := time.LoadLocation(timezone); err != nil {
|
||||
writeValidation(w, r, "通话用量时区不正确", FieldError{Field: "timezone", Message: "必须是有效的IANA时区"})
|
||||
return time.Time{}, time.Time{}, "", false
|
||||
}
|
||||
return from, to, timezone, true
|
||||
}
|
||||
|
||||
func writeBillingError(w http.ResponseWriter, r *http.Request, err error) {
|
||||
switch {
|
||||
case errors.Is(err, billing.ErrInvalid):
|
||||
|
||||
Reference in New Issue
Block a user