@@ -9,13 +9,13 @@ namespace VIPCore.Database.Repositories;
99
1010public interface IUserRepository
1111{
12- Task < User ? > GetUserAsync ( long accountId , long serverId ) ;
13- Task < IEnumerable < User > > GetUserGroupsAsync ( long accountId , long serverId ) ;
14- Task < IEnumerable < User > > GetExpiredUsersAsync ( long serverId , long currentTime ) ;
12+ Task < User ? > GetUserAsync ( long accountId , long ? serverId ) ;
13+ Task < IEnumerable < User > > GetUserGroupsAsync ( long accountId , long ? serverId ) ;
14+ Task < IEnumerable < User > > GetExpiredUsersAsync ( long ? serverId , long currentTime ) ;
1515 Task AddUserAsync ( User user ) ;
1616 Task UpdateUserAsync ( User user ) ;
17- Task DeleteUserAsync ( long accountId , long serverId ) ;
18- Task DeleteUserGroupAsync ( long accountId , long serverId , string group ) ;
17+ Task DeleteUserAsync ( long accountId , long ? serverId ) ;
18+ Task DeleteUserGroupAsync ( long accountId , long ? serverId , string group ) ;
1919 Task < bool > ServerExistsAsync ( string ip , int port ) ;
2020 Task AddServerAsync ( VipServer server ) ;
2121 Task < long > GetServerIdAsync ( string ip , int port ) ;
@@ -26,7 +26,7 @@ public interface IUserRepository
2626 Task < bool > TryMoveServerIdAsync ( long fromServerId , long toServerId ) ;
2727 Task < bool > TryInsertServerWithIdAsync ( VipServer server ) ;
2828 Task ClearGuidFromOtherServersAsync ( string guid , long keepServerId ) ;
29- Task < IEnumerable < User > > GetAllUsersAsync ( long serverId ) ;
29+ Task < IEnumerable < User > > GetAllUsersAsync ( long ? serverId ) ;
3030}
3131
3232public class UserRepository ( DatabaseConnectionFactory connectionFactory ) : IUserRepository
@@ -41,25 +41,37 @@ private static bool IsDuplicateKeyException(Exception ex)
4141 || msg . Contains ( "UNIQUE constraint failed" , StringComparison . OrdinalIgnoreCase ) ;
4242 }
4343
44- public async Task < User ? > GetUserAsync ( long accountId , long serverId )
44+ public async Task < User ? > GetUserAsync ( long accountId , long ? serverId )
4545 {
4646 using var db = connectionFactory . CreateConnection ( ) ;
47- var users = await db . SelectAsync < User > ( u => u . account_id == accountId && u . sid == serverId ) ;
48- return users . FirstOrDefault ( ) ;
47+ if ( serverId . HasValue )
48+ {
49+ var users = await db . SelectAsync < User > ( u => u . account_id == accountId && u . sid == serverId . Value ) ;
50+ return users . FirstOrDefault ( ) ;
51+ }
52+ return ( await db . SelectAsync < User > ( u => u . account_id == accountId ) ) . FirstOrDefault ( ) ;
4953 }
5054
51- public async Task < IEnumerable < User > > GetUserGroupsAsync ( long accountId , long serverId )
55+ public async Task < IEnumerable < User > > GetUserGroupsAsync ( long accountId , long ? serverId )
5256 {
5357 using var db = connectionFactory . CreateConnection ( ) ;
54- var users = await db . SelectAsync < User > ( u => u . account_id == accountId && u . sid == serverId ) ;
55- return users . ToList ( ) ;
58+ if ( serverId . HasValue )
59+ {
60+ var users = await db . SelectAsync < User > ( u => u . account_id == accountId && u . sid == serverId . Value ) ;
61+ return users . ToList ( ) ;
62+ }
63+ return ( await db . SelectAsync < User > ( u => u . account_id == accountId ) ) . ToList ( ) ;
5664 }
5765
58- public async Task < IEnumerable < User > > GetExpiredUsersAsync ( long serverId , long currentTime )
66+ public async Task < IEnumerable < User > > GetExpiredUsersAsync ( long ? serverId , long currentTime )
5967 {
6068 using var db = connectionFactory . CreateConnection ( ) ;
61- var users = await db . SelectAsync < User > ( u => u . sid == serverId && u . expires < currentTime && u . expires > 0 ) ;
62- return users . ToList ( ) ;
69+ if ( serverId . HasValue )
70+ {
71+ var users = await db . SelectAsync < User > ( u => u . sid == serverId . Value && u . expires < currentTime && u . expires > 0 ) ;
72+ return users . ToList ( ) ;
73+ }
74+ return ( await db . SelectAsync < User > ( u => u . expires < currentTime && u . expires > 0 ) ) . ToList ( ) ;
6375 }
6476
6577 public async Task AddUserAsync ( User user )
@@ -81,19 +93,37 @@ public async Task UpdateUserAsync(User user)
8193 await db . UpdateAsync ( user ) ;
8294 }
8395
84- public async Task DeleteUserAsync ( long accountId , long serverId )
96+ public async Task DeleteUserAsync ( long accountId , long ? serverId )
8597 {
8698 using var db = connectionFactory . CreateConnection ( ) ;
87- var groups = await db . SelectAsync < User > ( u => u . account_id == accountId && u . sid == serverId ) ;
88- foreach ( var user in groups )
89- await db . DeleteAsync ( user ) ;
99+ if ( serverId . HasValue )
100+ {
101+ var groups = await db . SelectAsync < User > ( u => u . account_id == accountId && u . sid == serverId . Value ) ;
102+ foreach ( var user in groups )
103+ await db . DeleteAsync ( user ) ;
104+ }
105+ else
106+ {
107+ var groups = await db . SelectAsync < User > ( u => u . account_id == accountId ) ;
108+ foreach ( var user in groups )
109+ await db . DeleteAsync ( user ) ;
110+ }
90111 }
91112
92- public async Task DeleteUserGroupAsync ( long accountId , long serverId , string group )
113+ public async Task DeleteUserGroupAsync ( long accountId , long ? serverId , string group )
93114 {
94115 using var db = connectionFactory . CreateConnection ( ) ;
95- var user = new User { account_id = accountId , sid = serverId , group = group , name = string . Empty } ;
96- await db . DeleteAsync ( user ) ;
116+ if ( serverId . HasValue )
117+ {
118+ var user = new User { account_id = accountId , sid = serverId . Value , group = group , name = string . Empty } ;
119+ await db . DeleteAsync ( user ) ;
120+ }
121+ else
122+ {
123+ var users = await db . SelectAsync < User > ( u => u . account_id == accountId && u . group == group ) ;
124+ foreach ( var user in users )
125+ await db . DeleteAsync ( user ) ;
126+ }
97127 }
98128
99129 public async Task < bool > ServerExistsAsync ( string ip , int port )
@@ -187,10 +217,14 @@ await db.ExecuteAsync(
187217 new { Guid = guid , KeepId = keepServerId } ) ;
188218 }
189219
190- public async Task < IEnumerable < User > > GetAllUsersAsync ( long serverId )
220+ public async Task < IEnumerable < User > > GetAllUsersAsync ( long ? serverId )
191221 {
192222 using var db = connectionFactory . CreateConnection ( ) ;
193- var users = await db . SelectAsync < User > ( u => u . sid == serverId ) ;
194- return users . ToList ( ) ;
223+ if ( serverId . HasValue )
224+ {
225+ var users = await db . SelectAsync < User > ( u => u . sid == serverId . Value ) ;
226+ return users . ToList ( ) ;
227+ }
228+ return ( await db . GetAllAsync < User > ( ) ) . ToList ( ) ;
195229 }
196230}
0 commit comments