2021-02-04 15:08:04 +00:00
|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
|
|
|
"context"
|
|
|
|
|
|
|
|
"go.mongodb.org/mongo-driver/bson/primitive"
|
|
|
|
)
|
|
|
|
|
|
|
|
// UserModel is a model of user that is stored in the database
|
|
|
|
type UserModel struct {
|
|
|
|
ID primitive.ObjectID `bson:"_id,omitempty" json:"id"`
|
|
|
|
Username string `bson:"username" json:"username"`
|
|
|
|
DisplayName string `bson:"display_name" json:"displayName"`
|
|
|
|
City string `bson:"city" json:"city"`
|
|
|
|
}
|
|
|
|
|
|
|
|
//go:generate repogen -src=user.go -dest=user_repo.go -model=UserModel -repo=UserRepository
|
|
|
|
|
|
|
|
// UserRepository is an interface that describes the specification of querying user data in the database
|
|
|
|
type UserRepository interface {
|
|
|
|
// InsertOne stores userModel into the database and returns inserted ID if insertion succeeds
|
|
|
|
// and returns error if insertion fails.
|
|
|
|
InsertOne(ctx context.Context, userModel *UserModel) (interface{}, error)
|
|
|
|
|
|
|
|
// FindByUsername queries user by username. If a user with specified username exists, the user will be
|
|
|
|
// returned. If no user exists or error occurs while querying, error will be returned.
|
|
|
|
FindByUsername(ctx context.Context, username string) (*UserModel, error)
|
|
|
|
|
|
|
|
// UpdateDisplayNameByID updates a user with the specified ID with a new display name. If there is a user
|
|
|
|
// matches the query, it will return true. Error will be returned only when error occurs while accessing
|
|
|
|
// the database. This is a ONE mode because the first return type is a boolean.
|
|
|
|
UpdateDisplayNameByID(ctx context.Context, displayName string, id primitive.ObjectID) (bool, error)
|
|
|
|
|
|
|
|
// DeleteByCity deletes users that have `city` value match the parameter and returns the match count.
|
|
|
|
// The error will be returned only when error occurs while accessing the database. This is a MANY mode
|
|
|
|
// because the first return type is an integer.
|
|
|
|
DeleteByCity(ctx context.Context, city string) (int, error)
|
2021-02-06 11:05:47 +00:00
|
|
|
|
|
|
|
// CountByCity returns the number of rows that match the given city parameter. If an error occurs while
|
|
|
|
// accessing the database, error value will be returned.
|
|
|
|
CountByCity(ctx context.Context, city string) (int, error)
|
2021-02-04 15:08:04 +00:00
|
|
|
}
|