I'm using fiber and mongodb. Field "field" is needed to obtain certain data to unload the load on the database. If field "field" is empty, then needs to output all the data from the database to make work easier to frontend. I don't like this crutch. Is there a much better solution?
func GetUserById(c *fiber.Ctx) error {
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
var userId = c.Params("userId")
defer cancel()
objId, _ := primitive.ObjectIDFromHex(userId)
// Creates options for search.
opts, err := search.GetOneOptions(c, models.UserModel{})
if err != nil {
return responses.Response(c, http.StatusBadRequest, err.Error())
}
if c.Query("field") != "" {
var user models.UserModelOmitempty
err = usersCollection.FindOne(ctx, bson.M{"_id": objId}, opts).Decode(&user)
if err != nil {
return responses.Response(c, http.StatusBadRequest, "user not found")
}
return responses.ResponseWithData(c, http.StatusOK, "success", user)
} else {
var user models.UserModel
err = usersCollection.FindOne(ctx, bson.M{"_id": objId}, opts).Decode(&user)
if err != nil {
return responses.Response(c, http.StatusBadRequest, "user not found")
}
return responses.ResponseWithData(c, http.StatusOK, "success", user)
}
}
models.UserModel
type UserModel struct {
Id primitive.ObjectID `json:"id" bson:"_id" query:"string"`
Name string `json:"name" bson:"name" validate:"required" query:"string"`
Email string `json:"email" bson:"email" validate:"required" query:"string"`
Password string `json:"-" bson:"password" validate:"required"`
CreatedAt int64 `json:"createdAt" bson:"createdAt" query:"int"`
Rights string `json:"rights" bson:"rights" query:"string"`
PhotoUrl string `json:"photoUrl" bson:"photoUrl"`
Sex string `json:"sex" bson:"sex" query:"string"`
BirthDate int64 `json:"birthDate" bson:"birthDate" query:"int"`
Country string `json:"country" bson:"country" query:"string"`
EmailSubscribe bool `json:"emailSubscribe" bson:"emailSubscribe" query:"bool"`
AccountConfirmed bool `json:"accountConfirmed" bson:"accountConfirmed" query:"bool"`
}
models.UserModelOmitempty
type UserModelOmitempty struct {
Id primitive.ObjectID `json:"id" bson:"_id" query:"string"`
Name string `json:"name,omitempty" bson:"name" validate:"required" query:"string"`
Email string `json:"email,omitempty" bson:"email" validate:"required" query:"string"`
Password string `json:"-" bson:"password" validate:"required"`
CreatedAt int64 `json:"createdAt,omitempty" bson:"createdAt" query:"int"`
Rights string `json:"rights,omitempty" bson:"rights" query:"string"`
PhotoUrl string `json:"photoUrl,omitempty" bson:"photoUrl"`
Sex string `json:"sex,omitempty" bson:"sex" query:"string"`
BirthDate int64 `json:"birthDate,omitempty" bson:"birthDate" query:"int"`
Country string `json:"country,omitempty" bson:"country" query:"string"`
EmailSubscribe bool `json:"emailSubscribe,omitempty" bson:"emailSubscribe" query:"bool"`
AccountConfirmed bool `json:"accountConfirmed,omitempty" bson:"accountConfirmed" query:"bool"`
}

