using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Text; using System.Text.Json; using System.Threading.Tasks; using MongoDB.Bson; using MongoDB.Driver; namespace MongoRepository { public interface IMongoBaseRepository where TDocument : MongoBaseEntity { IQueryable AsQueryable(); IEnumerable FilterBy(Expression> filterExpression); Task> FilterByAsync( Expression> filterExpression); Task> FilterByAsync( FilterDefinition filterExpression); IEnumerable FilterBy(FilterDefinition filterExpression); Task CountAsync( Expression> filterExpression); long Count( Expression> filterExpression); Task CountAsync( FilterDefinition filterExpression); long Count(FilterDefinition filterExpression); IEnumerable FilterBy( Expression> filterExpression, Expression> projectionExpression); TDocument FindOne(Expression> filterExpression); Task FindOneAsync(Expression> filterExpression); TDocument FindOne(FilterDefinition filterExpression); Task FindOneAsync(FilterDefinition filterExpression); TDocument FindOne(FilterDefinition filterExpression, Expression> orderExpression); Task FindOneAsync(FilterDefinition filterExpression, Expression> orderExpression); TDocument FindOne(Expression> filterExpression, Expression> orderExpression); Task FindOneAsync(Expression> filterExpression, Expression> orderExpression); 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, int pageSize, int pageIndex); Task<(long count, List list)> QueryPageAsync(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, int skipIndex); Task<(long count, List list)> QueryPageAsync(FilterDefinition filterExpression, SortDefinition orderExpression, bool desc, int pageSize, int pageIndex); Task<(long count, List list)> QueryPageAsync(FilterDefinition filterExpression, SortDefinition orderExpression, bool desc, int pageSize, int pageIndex, int skipIndex); (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) UpdateMany(FilterDefinition filterExpression, UpdateDefinition updateDefinition); Task<(bool ok, string message)> UpdateManyAsync(FilterDefinition 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); Task> RandomData(Expression> filterExpression, int count); } }