Initial commit

This commit is contained in:
2026-05-12 15:40:22 -06:00
parent 5b279865a1
commit 1eac72b3cd
31 changed files with 1192 additions and 45 deletions
+62
View File
@@ -0,0 +1,62 @@
package db
import (
"context"
"time"
"go.mongodb.org/mongo-driver/v2/bson"
"go.mongodb.org/mongo-driver/v2/mongo"
"go.mongodb.org/mongo-driver/v2/mongo/options"
)
// EnsureIndexes creates all required indexes. Safe to call on every startup
// (mongo ignores duplicate index creation).
func (c *Client) EnsureIndexes(ctx context.Context) error {
if err := c.ensureUserIndexes(ctx); err != nil {
return err
}
if err := c.ensureSessionIndexes(ctx); err != nil {
return err
}
return c.ensureLaneIndexes(ctx)
}
func (c *Client) ensureLaneIndexes(ctx context.Context) error {
_, err := c.Lanes().Indexes().CreateOne(ctx, mongo.IndexModel{
Keys: bson.D{{Key: "created_by", Value: 1}},
})
return err
}
func (c *Client) ensureUserIndexes(ctx context.Context) error {
_, err := c.Users().Indexes().CreateOne(ctx, mongo.IndexModel{
Keys: bson.D{{Key: "username", Value: 1}},
Options: options.Index().SetUnique(true),
})
return err
}
func (c *Client) ensureSessionIndexes(ctx context.Context) error {
// Unique lookup index on the session token.
if _, err := c.Sessions().Indexes().CreateOne(ctx, mongo.IndexModel{
Keys: bson.D{{Key: "token", Value: 1}},
Options: options.Index().SetUnique(true),
}); err != nil {
return err
}
// TTL index: MongoDB automatically deletes session documents after
// expires_at has passed (checked roughly every 60 s by the reaper).
expireAfter := int32(0)
if _, err := c.Sessions().Indexes().CreateOne(ctx, mongo.IndexModel{
Keys: bson.D{{Key: "expires_at", Value: 1}},
Options: options.Index().SetExpireAfterSeconds(expireAfter),
}); err != nil {
return err
}
return nil
}
// SessionTTL is how long a session stays valid.
const SessionTTL = 24 * time.Hour