1
1
using System . Data ;
2
- using System . Data . SqlClient ;
3
2
using Dapper ;
4
3
using SimpleInventoryManagementSystem . Domain ;
5
4
using SimpleInventoryManagementSystem . Interfaces ;
@@ -8,54 +7,35 @@ namespace SimpleInventoryManagementSystem.DAO;
8
7
9
8
public class SqlProductDao : IProductDao
10
9
{
11
- private readonly ISqlDataSource _dataSource ;
12
- private readonly ISqlProductMapper _mapper ;
10
+ private readonly IDbConnection _connection ;
13
11
14
- public SqlProductDao ( ISqlDataSource dataSource , ISqlProductMapper mapper )
12
+ public SqlProductDao ( IDbConnection connection )
15
13
{
16
- _dataSource = dataSource ;
17
- _mapper = mapper ;
14
+ _connection = connection ;
18
15
}
19
16
20
17
public async Task < IEnumerable < Product > > GetAllProductsAsync ( )
21
18
{
22
19
const string sql = "SELECT * FROM Products" ;
23
- await using var reader = await _dataSource . ExecuteQueryAsync ( sql , new List < SqlParameter > ( ) ) ;
24
-
25
- var products = new List < Product > ( ) ;
26
- while ( await reader . ReadAsync ( ) )
27
- {
28
- products . Add ( _mapper . MapToDomain ( reader ) ) ;
29
- }
30
-
31
- return products ;
20
+ return await _connection . QueryAsync < Product > ( sql ) ;
32
21
}
33
22
34
23
public async Task < Product ? > GetProductByNameAsync ( string productName )
35
24
{
36
25
const string sql = "SELECT * FROM Products WHERE Name = @Name" ;
37
- var parameters = new List < SqlParameter >
38
- {
39
- new ( "@Name" , productName )
40
- } ;
41
- await using var reader = await _dataSource . ExecuteQueryAsync ( sql , parameters ) ;
42
- return reader . Read ( ) ? _mapper . MapToDomain ( reader ) : null ;
26
+ var results = await _connection . QueryAsync < Product > ( sql , new { Name = productName } ) ;
27
+ return results . FirstOrDefault ( ) ;
43
28
}
44
29
45
30
public async Task DeleteProductByNameAsync ( string productName )
46
31
{
47
32
const string sql = "DELETE FROM Products WHERE Name = @Name" ;
48
- var parameters = new List < SqlParameter >
49
- {
50
- new ( "@Name" , productName )
51
- } ;
52
- await _dataSource . ExecuteNonQueryAsync ( sql , parameters ) ;
33
+ await _connection . ExecuteAsync ( sql , new { Name = productName } ) ;
53
34
}
54
35
55
36
public async Task AddProductAsync ( Product product )
56
37
{
57
38
const string sql = "INSERT INTO Products (Name, Price, Quantity) VALUES (@Name, @Price, @Quantity)" ;
58
- var parameters = _mapper . MapToParameters ( product ) ;
59
- await _dataSource . ExecuteNonQueryAsync ( sql , parameters ) ;
39
+ await _connection . ExecuteAsync ( sql , product ) ;
60
40
}
61
41
}
0 commit comments