Files
fission-console/examples/big-suite/code/go-report/handler.go
T
Naeel 01df1498d6 feat: big-suite terraform example + provider nodejs zip fix
- 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
2026-04-20 11:38:45 +03:00

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)
}