You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

54 lines
1.2 KiB

package mongodb
import (
"context"
"errors"
"gitea.russia9.dev/Russia9/chatwars-spy/pkg/domain"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/mongo"
"time"
)
func NewUserRepo(database *mongo.Database) domain.UserRepo {
return &userRepo{Collection: database.Collection("users")}
}
type userRepo struct {
Collection *mongo.Collection
}
func (r *userRepo) Store(ctx context.Context, object *domain.User) error {
cursor := r.Collection.FindOne(ctx, bson.M{"_id": object.ID})
if errors.Is(cursor.Err(), mongo.ErrNoDocuments) {
object.FirstSeen = time.Now()
object.LastSeen = time.Now()
_, err := r.Collection.InsertOne(ctx, object)
return err
} else if cursor.Err() != nil {
return cursor.Err()
}
// Get old user
var old domain.User
err := cursor.Decode(&old)
if err != nil {
return err
}
// Get old guild if empty
if object.Guild == "" {
object.Guild = old.Guild
object.Level = old.Level
}
// Set old values
object.FirstSeen = old.FirstSeen
object.Source = old.Source
// Set LastSeen date
object.LastSeen = time.Now()
// Update object in DB
_, err = r.Collection.ReplaceOne(ctx, bson.M{"_id": object.ID}, object)
return err
}