-
Notifications
You must be signed in to change notification settings - Fork 44
/
UserService.cs
81 lines (64 loc) · 2.6 KB
/
UserService.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
using System;
using System.Data.Entity;
using System.Data.Entity.Migrations;
using System.Linq;
using System.Threading.Tasks;
using AspNetMvcActiveDirectoryOwin.Core.Data;
using AspNetMvcActiveDirectoryOwin.Core.Domain;
using AspNetMvcActiveDirectoryOwin.Data;
namespace AspNetMvcActiveDirectoryOwin.Services.Users
{
public class UserService : IUserService
{
private readonly IRepository<User> _repository;
public UserService(IRepository<User> repository)
{
_repository = repository;
}
public async Task<IPagedList<User>> GetUsersAsync(UserPagedDataRequest request)
{
var query = _repository.Entities.AsQueryable();
if (!string.IsNullOrWhiteSpace(request.LastName))
query = query.Where(x => x.LastName.StartsWith(request.LastName));
if (!string.IsNullOrWhiteSpace(request.RoleName))
query = query.Where(x => x.Roles.Any(r => r.Name == request.RoleName));
if (request.Active.HasValue)
query = query.Where(x => x.Active == request.Active.Value);
string orderBy = request.SortField.ToString();
if (QueryHelper.PropertyExists<User>(orderBy))
query = request.SortOrder == SortOrder.Ascending ? query.OrderByProperty(orderBy) : query.OrderByPropertyDescending(orderBy);
else
query = query.OrderBy(x => x.LastName);
var result = new PagedList<User>();
await result.CreateAsync(query, request.PageIndex, request.PageSize);
return result;
}
public async Task<User> GetUserByUserNameAsync(string userName)
{
var query = _repository.Entities
.Where(x => x.UserName == userName);
return await query.FirstOrDefaultAsync();
}
public async Task<User> GetUserByIdAsync(int userId)
{
var query = _repository.Entities
.Where(x => x.Id == userId);
return await query.FirstOrDefaultAsync();
}
public async Task<int> AddUserAsync(User user)
{
if (user == null)
throw new ArgumentNullException(nameof(user));
_repository.Entities.Add(user);
await _repository.SaveChangesAsync();
return user.Id;
}
public async Task UpdateUserAsync(User user)
{
if (user == null)
throw new ArgumentNullException(nameof(user));
_repository.Entities.AddOrUpdate(user);
await _repository.SaveChangesAsync();
}
}
}