Added actual captcha testing
This commit is contained in:
61
db/db.go
61
db/db.go
@ -22,6 +22,9 @@ type DB struct {
|
||||
Client *mongo.Client
|
||||
}
|
||||
|
||||
type EmptyStruct struct {
|
||||
}
|
||||
|
||||
var database DB = DB{}
|
||||
|
||||
func Init(URI string) (DB, error) {
|
||||
@ -70,61 +73,3 @@ func (d *DB) Stop() {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
||||
func (d *DB) NewEntry(ctx context.Context, collectionName string, entry interface{}) error {
|
||||
collection := d.Database.Collection(collectionName)
|
||||
res, err := collection.InsertOne(ctx, entry)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
log.Printf("New entry: %v\nDB ID: %v\n", entry, res.InsertedID)
|
||||
return nil
|
||||
}
|
||||
|
||||
func (d *DB) EntryExists(ctx context.Context, collectionName string, filter interface{}) bool {
|
||||
collection := d.Database.Collection(collectionName)
|
||||
var result bson.D
|
||||
err := collection.FindOne(ctx, filter).Decode(&result)
|
||||
if err != nil {
|
||||
log.Printf("EntryExists error: %v", err)
|
||||
}
|
||||
return err != mongo.ErrNoDocuments
|
||||
}
|
||||
|
||||
func (d *DB) ChatExists(ctx context.Context, chat Chat) bool {
|
||||
filter := bson.D{primitive.E{Key: "id", Value: chat.Id}}
|
||||
return d.EntryExists(ctx, "chats", filter)
|
||||
}
|
||||
|
||||
func (d *DB) UserExists(ctx context.Context, user User) bool {
|
||||
filter := bson.D{
|
||||
primitive.E{Key: "id", Value: user.Id},
|
||||
primitive.E{Key: "chat_id", Value: user.ChatId},
|
||||
}
|
||||
return d.EntryExists(ctx, "users", filter)
|
||||
}
|
||||
|
||||
func (d *DB) NewChat(ctx context.Context, chat Chat) error {
|
||||
if d.ChatExists(ctx, chat) {
|
||||
return errors.New("chat entry already exists")
|
||||
}
|
||||
err := d.NewEntry(ctx, "chats", chat)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
return err
|
||||
}
|
||||
log.Printf("New chat added: %s (%d)\n", chat.Title, chat.Id)
|
||||
return nil
|
||||
}
|
||||
|
||||
func (d *DB) NewUser(ctx context.Context, user User) error {
|
||||
if d.UserExists(ctx, user) {
|
||||
return errors.New("user entry already exists")
|
||||
}
|
||||
err := d.NewEntry(ctx, "users", user)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
log.Printf("New user: %v\n", user)
|
||||
return nil
|
||||
}
|
||||
|
37
db/entry.go
Normal file
37
db/entry.go
Normal file
@ -0,0 +1,37 @@
|
||||
package db
|
||||
|
||||
import (
|
||||
"context"
|
||||
"log"
|
||||
|
||||
"go.mongodb.org/mongo-driver/bson"
|
||||
"go.mongodb.org/mongo-driver/mongo"
|
||||
)
|
||||
|
||||
func (d *DB) GetEntry(ctx context.Context, collectionName string, filter interface{}) (interface{}, error) {
|
||||
collection := d.Database.Collection(collectionName)
|
||||
var result bson.D
|
||||
err := collection.FindOne(ctx, filter).Decode(&result)
|
||||
if err != nil {
|
||||
return EmptyStruct{}, err
|
||||
}
|
||||
return result, nil
|
||||
}
|
||||
|
||||
func (d *DB) NewEntry(ctx context.Context, collectionName string, entry interface{}) error {
|
||||
collection := d.Database.Collection(collectionName)
|
||||
res, err := collection.InsertOne(ctx, entry)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
log.Printf("New entry: %v\nDB ID: %v\n", entry, res.InsertedID)
|
||||
return nil
|
||||
}
|
||||
|
||||
func (d *DB) EntryExists(ctx context.Context, collectionName string, filter interface{}) bool {
|
||||
_, err := d.GetEntry(ctx, collectionName, filter)
|
||||
if err != nil {
|
||||
log.Printf("EntryExists error: %v", err)
|
||||
}
|
||||
return err != mongo.ErrNoDocuments
|
||||
}
|
28
db/methods.go
Normal file
28
db/methods.go
Normal file
@ -0,0 +1,28 @@
|
||||
package db
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"log"
|
||||
|
||||
"go.mongodb.org/mongo-driver/bson"
|
||||
"go.mongodb.org/mongo-driver/bson/primitive"
|
||||
)
|
||||
|
||||
func (d *DB) ChatExists(ctx context.Context, chat Chat) bool {
|
||||
filter := bson.D{primitive.E{Key: "id", Value: chat.Id}}
|
||||
return d.EntryExists(ctx, "chats", filter)
|
||||
}
|
||||
|
||||
func (d *DB) NewChat(ctx context.Context, chat Chat) error {
|
||||
if d.ChatExists(ctx, chat) {
|
||||
return errors.New("chat entry already exists")
|
||||
}
|
||||
err := d.NewEntry(ctx, "chats", chat)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
return err
|
||||
}
|
||||
log.Printf("New chat added: %s (%d)\n", chat.Title, chat.Id)
|
||||
return nil
|
||||
}
|
@ -14,4 +14,5 @@ type User struct {
|
||||
CorrectAnswer int8 `bson:"correct_answer"`
|
||||
CaptchaMessage int `bson:"captcha_message"`
|
||||
IsBanned bool `bson:"is_banned"`
|
||||
DateJoined int64 `bson:"date_joined"`
|
||||
}
|
||||
|
50
db/user.go
Normal file
50
db/user.go
Normal file
@ -0,0 +1,50 @@
|
||||
package db
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"log"
|
||||
|
||||
"go.mongodb.org/mongo-driver/bson"
|
||||
"go.mongodb.org/mongo-driver/bson/primitive"
|
||||
)
|
||||
|
||||
func makeIDFilter(user User) bson.D {
|
||||
return bson.D{
|
||||
primitive.E{Key: "id", Value: user.Id},
|
||||
primitive.E{Key: "chat_id", Value: user.ChatId},
|
||||
}
|
||||
}
|
||||
|
||||
func (d *DB) UserExists(ctx context.Context, user User) bool {
|
||||
filter := makeIDFilter(user)
|
||||
return d.EntryExists(ctx, "users", filter)
|
||||
}
|
||||
|
||||
func (d *DB) NewUser(ctx context.Context, user User) error {
|
||||
if d.UserExists(ctx, user) {
|
||||
return errors.New("user entry already exists")
|
||||
}
|
||||
err := d.NewEntry(ctx, "users", user)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
log.Printf("New user: %v\n", user)
|
||||
return nil
|
||||
}
|
||||
|
||||
func (d *DB) GetUser(ctx context.Context, user User) (User, error) {
|
||||
filter := makeIDFilter(user)
|
||||
var result User
|
||||
err := d.Database.Collection("users").FindOne(ctx, filter).Decode(&result)
|
||||
if err != nil {
|
||||
return User{}, err
|
||||
}
|
||||
return result, nil
|
||||
}
|
||||
|
||||
func (d *DB) RemoveUser(ctx context.Context, user User) error {
|
||||
filter := makeIDFilter(user)
|
||||
_, err := d.Database.Collection("users").DeleteOne(ctx, filter)
|
||||
return err
|
||||
}
|
Reference in New Issue
Block a user