Skip to content

Commit

Permalink
Remove db_controller
Browse files Browse the repository at this point in the history
  • Loading branch information
josh-keller committed May 11, 2022
2 parents 50ac9cd + 0f32b29 commit 69aea04
Show file tree
Hide file tree
Showing 17 changed files with 758 additions and 265 deletions.
183 changes: 183 additions & 0 deletions db.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,183 @@
package main

import (
"context"
"errors"
"fmt"
"log"
"math/rand"
"net/http"
"net/http/httputil"
"os"
"time"

"github.com/joho/godotenv"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/bson/primitive"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
)

type Database struct {
client *mongo.Client
options *options.ClientOptions
bins *mongo.Collection
dbName string
collName string
sliceSize int
}

func NewDatabase(dbName, collName string) *Database {
err := godotenv.Load()
checkAndFail(err)
var opts *options.ClientOptions
var sliceSize int

if os.Getenv("TEST_ENV") == "true" {
opts = options.Client().ApplyURI(os.Getenv("MONGODB_TEST_URI"))
sliceSize = 3
} else {
opts = options.Client().ApplyURI(os.Getenv("MONGODB_URI"))
sliceSize = 20
}

return &Database{
client: nil,
options: opts,
bins: nil,
dbName: dbName,
collName: collName,
sliceSize: sliceSize,
}
}

func (db *Database) Connect() {
client, err := mongo.Connect(context.TODO(), db.options)
checkAndFail(err)
err = client.Ping(context.TODO(), nil)
checkAndFail(err)

db.client = client
db.bins = client.Database(db.dbName).Collection(db.collName)

fmt.Println("MongoDB connected")
}

func (db *Database) Disconnect() {
if db.client == nil {
return
}

err := db.client.Disconnect(context.TODO())
checkAndFail(err)

fmt.Println("MongoDB disconnected")
}

var makeRandomId = func() func() string {
var letters = []rune("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")
var source = rand.NewSource(time.Now().UnixNano())
var gen = rand.New(source)

return func() string {
b := make([]rune, 8)

for i := range b {
b[i] = letters[gen.Intn(len(letters))]
}

return string(b)
}
}()

type Bin struct {
ObjectID primitive.ObjectID
Host string
BinId string
Rekwests []Rekwest
}

func (b Bin) Timestamp() time.Time {
return b.ObjectID.Timestamp()
}

type Rekwest struct {
RekwestId primitive.ObjectID
Method string
Host string
Path string
Params map[string][]string
// Headers map[string][]string
// Body string
Raw string
}

func (rekwest Rekwest) Timestamp() time.Time {
return rekwest.RekwestId.Timestamp()
}

func NewRekwest(r *http.Request) (Rekwest, error) {
dump, err := httputil.DumpRequest(r, true)
checkAndFail(err)
queryParams := r.URL.Query()

return Rekwest{
RekwestId: primitive.NewObjectIDFromTimestamp(time.Now()),
Method: r.Method,
Host: r.Host,
Path: r.URL.Path,
Raw: string(dump),
Params: queryParams,
}, nil
}

func checkAndFail(err error) {
if err != nil {
log.Fatal(err)
}
}

func (db *Database) NewBin() (Bin, string) {
newBin := Bin{
ObjectID: primitive.NewObjectIDFromTimestamp(time.Now()),
BinId: makeRandomId(),
Rekwests: make([]Rekwest, 0),
}
_, err := db.bins.InsertOne(context.TODO(), newBin)
checkAndFail(err)

return newBin, "ok"
}

func (db *Database) FindBin(binId string) (Bin, bool) {
filter := bson.D{{"binid", binId}}
var bin Bin
err := db.bins.FindOne(context.TODO(), filter).Decode(&bin)

if err != nil {
fmt.Println("error: ", err)
return Bin{}, false
}

return bin, true
}

func (db *Database) AddRekwest(binId string, r *http.Request) error {
rekwest, err := NewRekwest(r)

checkAndFail(err)

result, err := db.bins.UpdateOne(
context.TODO(),
bson.M{"binid": binId},
bson.M{"$push": bson.M{"rekwests": bson.M{"$each": []Rekwest{rekwest}, "$position": 0, "$slice": db.sliceSize}}},
)

checkAndFail(err)

if result.MatchedCount == 0 {
return errors.New("Bin not found")
}

return nil
}
166 changes: 0 additions & 166 deletions db_controller/db_controller.go

This file was deleted.

10 changes: 6 additions & 4 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -3,24 +3,26 @@ module github.com/wboard82/rekwest-bin
go 1.17

require (
github.com/googollee/go-socket.io v1.6.1
github.com/joho/godotenv v1.4.0
github.com/stretchr/testify v1.7.0
github.com/matryer/is v1.4.0
go.mongodb.org/mongo-driver v1.8.3
)

require (
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/go-stack/stack v1.8.0 // indirect
github.com/gofrs/uuid v4.0.0+incompatible // indirect
github.com/golang/snappy v0.0.1 // indirect
github.com/gomodule/redigo v1.8.4 // indirect
github.com/gorilla/websocket v1.4.2 // indirect
github.com/klauspost/compress v1.13.6 // indirect
github.com/pkg/errors v0.9.1 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
github.com/stretchr/testify v1.7.0 // indirect
github.com/xdg-go/pbkdf2 v1.0.0 // indirect
github.com/xdg-go/scram v1.0.2 // indirect
github.com/xdg-go/stringprep v1.0.2 // indirect
github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d // indirect
golang.org/x/crypto v0.0.0-20201216223049-8b5274cf687f // indirect
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e // indirect
golang.org/x/text v0.3.5 // indirect
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c // indirect
)
Loading

0 comments on commit 69aea04

Please sign in to comment.