- examples/big-suite: E-Commerce 10 functions, 6 layers, real depends_on - provider: nodejs packages now wrapped in ESM zip (buildJSDeployZip) - provider: loadPackageLiteral reads raw file, nodejs zip via source_dir - all 10 functions verified working: python/node/ruby/go runtimes
69 lines
1.8 KiB
Go
69 lines
1.8 KiB
Go
package main
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"net/http"
|
|
"time"
|
|
)
|
|
|
|
// Симулирует агрегацию данных за день (в реальности — запрос к БД)
|
|
|
|
type DailyStat struct {
|
|
Date string `json:"date"`
|
|
Orders int `json:"orders"`
|
|
Revenue float64 `json:"revenue"`
|
|
AvgOrder float64 `json:"avg_order_value"`
|
|
NewUsers int `json:"new_users"`
|
|
TopCategory string `json:"top_category"`
|
|
}
|
|
|
|
func generateDailyStats(days int) []DailyStat {
|
|
stats := make([]DailyStat, days)
|
|
base := time.Now().UTC()
|
|
revenues := []float64{4821.50, 3920.00, 6100.75, 5200.10, 7330.40, 4100.00, 8950.30}
|
|
orders := []int{38, 31, 49, 42, 58, 33, 72}
|
|
categories := []string{"electronics", "furniture", "electronics", "stationery", "electronics", "furniture", "electronics"}
|
|
|
|
for i := 0; i < days; i++ {
|
|
day := base.AddDate(0, 0, -(days - 1 - i))
|
|
rev := revenues[i%len(revenues)]
|
|
ord := orders[i%len(orders)]
|
|
stats[i] = DailyStat{
|
|
Date: day.Format("2006-01-02"),
|
|
Orders: ord,
|
|
Revenue: rev,
|
|
AvgOrder: float64(int(rev/float64(ord)*100)) / 100,
|
|
NewUsers: 5 + i*2,
|
|
TopCategory: categories[i%len(categories)],
|
|
}
|
|
}
|
|
return stats
|
|
}
|
|
|
|
func Handler(w http.ResponseWriter, r *http.Request) {
|
|
w.Header().Set("Content-Type", "application/json")
|
|
|
|
days := 7
|
|
stats := generateDailyStats(days)
|
|
|
|
totalRevenue := 0.0
|
|
totalOrders := 0
|
|
for _, s := range stats {
|
|
totalRevenue += s.Revenue
|
|
totalOrders += s.Orders
|
|
}
|
|
|
|
report := map[string]interface{}{
|
|
"status": "ok",
|
|
"generated_at": time.Now().UTC().Format(time.RFC3339),
|
|
"period_days": days,
|
|
"total_revenue": fmt.Sprintf("%.2f", totalRevenue),
|
|
"total_orders": totalOrders,
|
|
"avg_daily_rev": fmt.Sprintf("%.2f", totalRevenue/float64(days)),
|
|
"daily_breakdown": stats,
|
|
}
|
|
|
|
json.NewEncoder(w).Encode(report)
|
|
}
|