using System; using System.Collections.Generic; using System.Threading.Tasks; using Dapper; namespace MiniWiki.Data.Users; public class UsersDatabaseRepository(IDbConnectionFactory connectionFactory) : IUsersRepository { public async Task GetByIdAsync(string id) { using var connection = connectionFactory.CreateConnection(); return await connection.QueryFirstOrDefaultAsync("SELECT * FROM users WHERE id = @id", new { id }); } public async Task GetByEmailAsync(string email) { using var connection = connectionFactory.CreateConnection(); return await connection.QueryFirstOrDefaultAsync("SELECT * FROM users WHERE email = @email", new { email }); } public async Task GetMultiple(IEnumerable ids) { const string query = "SELECT * FROM users WHERE id IN @ids"; using var connection = connectionFactory.CreateConnection(); return [.. await connection.QueryAsync(query, new { ids })]; } public async Task GetUserCount() { const string query = "SELECT COUNT(id) FROM users"; using var connection = connectionFactory.CreateConnection(); return await connection.QueryFirstOrDefaultAsync(query); } public async Task CreateAsync(User user) { using var connection = connectionFactory.CreateConnection(); const string insertStatement = """ INSERT INTO users(id, display_name, email, password_hash, is_admin, created_at, updated_at) VALUES(@Id,@DisplayName,@Email,@PasswordHash, @IsAdmin,@CreatedAt,@UpdatedAt) """; await connection.ExecuteAsync(insertStatement, user); return user; } public Task UpdateAsync(User user) => throw new NotImplementedException(); }