using Chat.Models; using Microsoft.Extensions.Options; using MongoDB.Bson; using MongoDB.Bson.Serialization; using MongoDB.Bson.Serialization.Attributes; using MongoDB.Driver; namespace Chat.DataService { public class ChatService { private readonly IMongoCollection _chatrooms; public ChatService (IOptions settings) { var mongoClient = new MongoClient(settings.Value.ConnectionString); var mongoDb = mongoClient.GetDatabase(settings.Value.DatabaseName); _chatrooms = mongoDb.GetCollection(settings.Value.ChatCollectionName); } public async Task> GetAllAsync () { return await _chatrooms.Find(_ => true).ToListAsync(); } public async Task GetByNameAsync(string name) { return await _chatrooms.Find(x => x.ChatroomName == name).FirstOrDefaultAsync(); } public async Task CreateAsync(Chatroom newChatroom) => await _chatrooms.InsertOneAsync(newChatroom); public async Task StoreMessage(string chatRoomName, Message message) { var filter = Builders.Filter .Eq(chatroom => chatroom.ChatroomName, chatRoomName); var update = Builders.Update .Push(chatroom => chatroom.Messages, message); await _chatrooms.UpdateOneAsync(filter, update, new UpdateOptions { IsUpsert = true }); } } public class ChatRoomDTO { public string? Id { get; set; } [BsonElement("chatroomName")] public string? ChatroomName { get; set; } } }