From 111a8845741e6ce3dc5ae2038548d914058ccfa4 Mon Sep 17 00:00:00 2001 From: AzenKain Date: Mon, 18 May 2026 22:05:51 +0700 Subject: [PATCH] feat: implement Goong service and controller for location functionality and update database schema diagram --- FinalProject.drawio | 4718 ++++++++++++----------- internal/controllers/goongController.go | 6 +- internal/services/goongService.go | 42 +- 3 files changed, 2548 insertions(+), 2218 deletions(-) diff --git a/FinalProject.drawio b/FinalProject.drawio index 235a4f2..31c1e73 100644 --- a/FinalProject.drawio +++ b/FinalProject.drawio @@ -1147,2159 +1147,2159 @@ - - + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - + - + - + - + - + @@ -3308,8 +3308,8 @@ - - + + @@ -3317,11 +3317,11 @@ - + - - + + @@ -3330,7 +3330,7 @@ - + @@ -3338,88 +3338,230 @@ - + - - - - - - - - - - - - - - - - - - - - - - + - - - + + + + - + - + - + - + - + - + - + + + + + + + + + + + - + - + - + + + + + + + + + + + - + - - + + + + + + + + + + + + + + + + + - + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -3428,529 +3570,529 @@ - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + @@ -3959,7 +4101,7 @@ - + @@ -3968,7 +4110,7 @@ - + @@ -3977,178 +4119,178 @@ - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + @@ -4157,307 +4299,381 @@ - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -4924,123 +5140,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -5096,7 +5195,7 @@ - + @@ -5157,6 +5256,9 @@ + + + @@ -7344,9 +7446,6 @@ - - - @@ -7396,15 +7495,21 @@ + + + + + + + + + - - - @@ -7457,15 +7562,21 @@ + + + + + + + + + - - - @@ -7528,15 +7639,21 @@ + + + + + + + + + - - - @@ -7552,9 +7669,6 @@ - - - @@ -7589,15 +7703,21 @@ + + + + + + + + + - - - @@ -7647,15 +7767,21 @@ + + + + + + + + + - - - @@ -7705,15 +7831,21 @@ + + + + + + + + + - - - @@ -7763,47 +7895,50 @@ + + + + + + + + + - + - - - - + - + - + - + - + - + - - - - + - + - + - + - + @@ -7812,57 +7947,72 @@ - + - - + + - - + + - - + + - - + + - - + + - - + + + + + + + + + + + + + + + + + + + + - - - @@ -7889,7 +8039,7 @@ - + @@ -7912,14 +8062,20 @@ + + + + + + + + + - - - - + @@ -7928,22 +8084,16 @@ - + - + - - - - - - - + @@ -7952,49 +8102,51 @@ - - + + - - + + - - + + - - + + - - + + - - - - - + + + + + + + + + + - + - - - - + @@ -8003,19 +8155,16 @@ - + - + - - - - + @@ -8024,25 +8173,25 @@ - + - - + + - - + + - - + + @@ -8052,14 +8201,23 @@ + + + + + + + + + + + + - + - - - - + @@ -8068,19 +8226,16 @@ - + - + - - - - + @@ -8089,25 +8244,25 @@ - + - - + + - - + + - - + + @@ -8117,15 +8272,24 @@ + + + + + + + + + + + + - - - @@ -8208,41 +8372,44 @@ + + + + + + + + + - + - - - - + - + - + - + - + - + - - - - + - + - + @@ -8251,49 +8418,61 @@ - + - - + + - - + + - - + + - - + + - - + + + + + + + + + + + + + + + + + - + - - - - + @@ -8302,22 +8481,16 @@ - + - + - - - - - - - + @@ -8326,50 +8499,52 @@ - + - - + + - - + + - - + + - - + + - - - - - + + + + + + + + + + - + - - - @@ -8377,7 +8552,7 @@ - + @@ -8386,13 +8561,7 @@ - - - - - - - + @@ -8401,7 +8570,7 @@ - + @@ -8411,31 +8580,36 @@ - - + + - - + + - - + + - - - - - + + + + + + + + + + @@ -8786,6 +8960,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/internal/controllers/goongController.go b/internal/controllers/goongController.go index 491e59e..47e1cd8 100644 --- a/internal/controllers/goongController.go +++ b/internal/controllers/goongController.go @@ -84,7 +84,11 @@ func (ctrl *goongController) Proxy(c fiber.Ctx) error { } if c.Method() == "GET" { - c.Set("Cache-Control", "public, max-age=86400") + if statusCode == fiber.StatusOK || statusCode == fiber.StatusNotModified { + c.Set("Cache-Control", "public, max-age=86400") + } else { + c.Set("Cache-Control", "no-store, no-cache, must-revalidate") + } } return c.Status(statusCode).Send(respBody) diff --git a/internal/services/goongService.go b/internal/services/goongService.go index 1590e5c..7abaf8a 100644 --- a/internal/services/goongService.go +++ b/internal/services/goongService.go @@ -25,12 +25,21 @@ type CacheEntry struct { } type goongService struct { - redis cache.Cache + redis cache.Cache + httpClient *http.Client } func NewGoongService(redis cache.Cache) GoongService { return &goongService{ redis: redis, + httpClient: &http.Client{ + Timeout: 15 * time.Second, + Transport: &http.Transport{ + MaxIdleConns: 100, + MaxIdleConnsPerHost: 100, + IdleConnTimeout: 90 * time.Second, + }, + }, } } @@ -79,14 +88,22 @@ func (s *goongService) ProxyRequest(ctx context.Context, method string, targetUR for k, v := range headers { lowerK := strings.ToLower(k) - if lowerK == "host" || lowerK == "connection" || lowerK == "accept-encoding" { + if lowerK == "host" || lowerK == "connection" || lowerK == "accept-encoding" || lowerK == "keep-alive" || lowerK == "te" || lowerK == "transfer-encoding" || lowerK == "upgrade" { + continue + } + if strings.HasPrefix(lowerK, "cf-") { + continue + } + if strings.HasPrefix(lowerK, "x-forwarded-") || lowerK == "x-real-ip" || lowerK == "true-client-ip" || lowerK == "cdn-loop" { + continue + } + if lowerK == "cookie" || lowerK == "authorization" || lowerK == "x-api-key" || lowerK == "x-csrf-token" { continue } req.Header.Set(k, v) } - client := &http.Client{Timeout: 15 * time.Second} - resp, err := client.Do(req) + resp, err := s.httpClient.Do(req) if err != nil { return 500, nil, nil, fmt.Errorf("failed to fetch from target: %w", err) } @@ -99,6 +116,23 @@ func (s *goongService) ProxyRequest(ctx context.Context, method string, targetUR respHeaders := make(map[string]string) for k, v := range resp.Header { + lowerK := strings.ToLower(k) + // Skip hop-by-hop/transport headers in response + if lowerK == "connection" || lowerK == "keep-alive" || lowerK == "transfer-encoding" || lowerK == "upgrade" { + continue + } + // Skip Cloudflare headers from Goong to prevent clashing with our own server + if strings.HasPrefix(lowerK, "cf-") || lowerK == "server" || lowerK == "date" || lowerK == "alt-svc" { + continue + } + // Skip CORS headers (handled by our own Fiber CORS middleware) + if strings.HasPrefix(lowerK, "access-control-") { + continue + } + // Skip content encoding/length (handled by Fiber / Go client automatically) + if lowerK == "content-encoding" || lowerK == "content-length" { + continue + } respHeaders[k] = v[0] }