using System.Linq.Expressions;
using MongoDB.Bson;
using MongoDB.Driver;
using MongoRepository;
namespace CommonService
{
///
///
///
///
public interface IMongoBaseService where TDocument : MongoBaseEntity
{
IQueryable AsQueryable();
IEnumerable FilterBy(
Expression> filterExpression);
IEnumerable FilterBy(
Expression> filterExpression,
Expression> projectionExpression);
TDocument FindOne(Expression> filterExpression);
Task FindOneAsync(Expression> filterExpression);
TDocument FindById(string id);
Task FindByIdAsync(string id);
(long count, List list) QueryPage(Expression> filterExpression, Expression> orderExpression, bool desc, int pageSize, int pageIndex);
Task<(long count, List list)> QueryPageAsync(Expression> filterExpression, Expression> orderExpression, bool desc, int pageSize, int pageIndex);
(bool ok, string message) InsertOne(TDocument document);
Task<(bool ok, string message)> InsertOneAsync(TDocument document);
(bool ok, string message) InsertMany(ICollection documents);
Task<(bool ok, string message)> InsertManyAsync(ICollection documents);
(bool ok, string message) UpdateById(string id, UpdateDefinition updateDefinition);
Task<(bool ok, string message)> UpdateByIdAsync(string id, UpdateDefinition updateDefinition);
(bool ok, string message) UpdateMany(Expression> filterExpression, UpdateDefinition updateDefinition);
Task<(bool ok, string message)> UpdateManyAsync(Expression> filterExpression, UpdateDefinition updateDefinition);
(bool ok, string message) ReplaceOne(TDocument document);
Task<(bool ok, string message)> ReplaceOneAsync(TDocument document);
(bool ok, string message) DeleteOne(Expression> filterExpression);
Task<(bool ok, string message)> DeleteOneAsync(Expression> filterExpression);
(bool ok, string message) DeleteById(string id);
Task<(bool ok, string message)> DeleteByIdAsync(string id);
(bool ok, string message) DeleteMany(Expression> filterExpression);
Task<(bool ok, string message)> DeleteManyAsync(Expression> filterExpression);
Task> Aggregate(FilterDefinition filterExpression, ProjectionDefinition group);
}
}