Middle — Senior
Ako implementovať logiku automatického odmietnutia hovorov pri viac ako 10 hovoroch za 15 minút od používateľa?
sobes.tech AI
Odpoveď od AI
Na implementáciu logiky automatického odmietnutia hovorov, keď je viac ako 10 hovorov za 15 minút od jedného používateľa, možno použiť pohyblivé časové okno a čítač hovorov. Hlavná myšlienka je uložiť časové značky hovorov používateľa a pri novom hovore skontrolovať, koľko hovorov bolo za posledných 15 minút.
Príklad v Go:
package main
import (
"fmt"
"sync"
"time"
)
type CallTracker struct {
mu sync.Mutex
callsMap map[string][]time.Time // kľúč — ID používateľa, hodnota — reťazec časových značiek hovorov
}
func NewCallTracker() *CallTracker {
return &CallTracker{
callsMap: make(map[string][]time.Time),
}
}
func (ct *CallTracker) RegisterCall(userID string) bool {
ct.mu.Lock()
defer ct.mu.Unlock()
now := time.Now()
windowStart := now.Add(-15 * time.Minute)
calls := ct.callsMap[userID]
// Uchovávať iba hovory v okne 15 minút
var recentCalls []time.Time
for _, t := range calls {
if t.After(windowStart) {
recentCalls = append(recentCalls, t)
}
}
if len(recentCalls) >= 10 {
// Automatické odmietnutie
return false
}
// Pridať aktuálny hovor
recentCalls = append(recentCalls, now)
ct.callsMap[userID] = recentCalls
return true
}
func main() {
tracker := NewCallTracker()
userID := "user123"
for i := 0; i < 12; i++ {
allowed := tracker.RegisterCall(userID)
if allowed {
fmt.Println("Hovor prijatý")
} else {
fmt.Println("Hovor odmietnutý")
}
time.Sleep(1 * time.Minute)
}
}