using ChatApi; using ChatRAG.Models; using ChatRAG.Services.Contracts; using ChatRAG.Settings.ChatRAG.Configuration; using Microsoft.Extensions.Options; using MongoDB.Driver; namespace ChatRAG.Data { public class MongoProjectDataRepository : IProjectDataRepository { private readonly IMongoCollection _textsCollection; public MongoProjectDataRepository( IOptions databaseSettings) { var mongoClient = new MongoClient( databaseSettings.Value.MongoDB.ConnectionString); var mongoDatabase = mongoClient.GetDatabase( databaseSettings.Value.MongoDB.DatabaseName); _textsCollection = mongoDatabase.GetCollection( databaseSettings.Value.MongoDB.ProjectCollectionName); } public async Task> GetAsync() => await _textsCollection.Find(_ => true).ToListAsync(); public async Task GetAsync(string id) => await _textsCollection.Find(x => x.Id == id).FirstOrDefaultAsync(); public async Task CreateAsync(Project newProject) => await _textsCollection.InsertOneAsync(newProject); public async Task UpdateAsync(string id, Project updatedProject) => await _textsCollection.ReplaceOneAsync(x => x.Id == id, updatedProject); public async Task SaveAsync(Project project) { Project projectExist = null; if (project.Id != null) { projectExist = await _textsCollection.Find(x => x.Id == project.Id).FirstOrDefaultAsync(); } if (projectExist == null) { await _textsCollection.InsertOneAsync(project); } else { await _textsCollection.ReplaceOneAsync(x => x.Id == project.Id, project); } } public async Task RemoveAsync(string id) => await _textsCollection.DeleteOneAsync(x => x.Id == id); } }