Files
darkstorm-server/internal/cdr/backend.go
T
2024-10-24 00:00:08 -05:00

65 lines
1.6 KiB
Go

package cdr
import (
"context"
"log"
"net/http"
"time"
"github.com/CalebQ42/darkstorm-server/internal/backend"
"github.com/CalebQ42/darkstorm-server/internal/backend/db"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/mongo"
)
type CDRBackend struct {
back *backend.Backend
db *mongo.Database
}
func NewBackend(db *mongo.Database) *CDRBackend {
go func() {
for range time.Tick(time.Hour) {
log.Println("CDR: Deleting expired dice")
res, err := db.Collection("profiles").DeleteMany(context.Background(), bson.M{"expiration": bson.M{"$lt": time.Now().Unix()}})
if err == mongo.ErrNoDocuments {
continue
}
log.Println("CDR: Deleted", res.DeletedCount, "dice")
}
}()
return &CDRBackend{
db: db,
}
}
func (b CDRBackend) AppID() string {
return "cdr"
}
func (b CDRBackend) CountTable() backend.CountTable {
return db.NewMongoTable[backend.CountLog](b.db.Collection("logs"))
}
func (b CDRBackend) CrashTable() backend.CrashTable {
return db.NewMongoCrashTable(b.db.Collection("crashes"), b.db.Collection("crashArchive"))
}
func (b *CDRBackend) AddBackend(back *backend.Backend) {
b.back = back
}
func (s CDRBackend) ShouldAddCrash(ctx context.Context, cr backend.IndividualCrash) bool {
res := s.db.Collection("versions").FindOne(ctx, bson.M{"version": cr.Version})
return res.Err() == nil
}
func (b CDRBackend) Extension(mux *http.ServeMux) {
mux.HandleFunc("POST /cdr/die", b.UploadDie)
mux.HandleFunc("GET /cdr/die/{dieID}", b.GetDie)
//Legacy (TODO: remove this after a month or two after the applciation gets updated)
mux.HandleFunc("POST /upload", b.UploadDie)
mux.HandleFunc("GET /die/{dieID}", b.GetDie)
}