feat: establish v0.70 platform milestone
ci / verify (push) Canceled after 0s

This commit is contained in:
Codex Local
2026-08-29 21:56:51 +08:00
parent d97bbf7cf5
commit e652516147
133 changed files with 12907 additions and 801 deletions
+66
View File
@@ -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):