1212using OpenShock . Common . Redis . PubSub ;
1313using OpenShock . Common . Services . RedisPubSub ;
1414using OpenShock . Common . Utils ;
15+ using Z . EntityFramework . Plus ;
1516
1617namespace OpenShock . Common . Services ;
1718
@@ -28,45 +29,35 @@ public ControlSender(OpenShockContext db, IRedisPubService publisher)
2829
2930 public async Task < OneOf < Success , ShockerNotFoundOrNoAccess , ShockerPaused , ShockerNoPermission > > ControlByUser ( IReadOnlyList < Control > controls , ControlLogSender sender , IHubClients < IUserHub > hubClients )
3031 {
31- var queryOwn = _db . Shockers
32+ var shockers = await _db . Shockers
3233 . AsNoTracking ( )
33- . Where ( x => x . Device . OwnerId == sender . Id )
34- . Select ( x => new ControlShockerObj
34+ . Select ( shocker => new
3535 {
36- ShockerId = x . Id ,
37- ShockerName = x . Name ,
38- ShockerRfId = x . RfId ,
39- DeviceId = x . DeviceId ,
40- ShockerModel = x . Model ,
41- OwnerId = x . Device . OwnerId ,
42- Paused = x . IsPaused ,
43- PermsAndLimits = null
44- } ) ;
45-
46- var queryShared = _db . UserShares
47- . AsNoTracking ( )
48- . Where ( x => x . SharedWithUserId == sender . Id )
36+ shocker ,
37+ shocker . Device . OwnerId ,
38+ Share = shocker . UserShares . FirstOrDefault ( us => us . SharedWithUserId == sender . Id )
39+ } )
40+ . Where ( x => x . OwnerId == sender . Id || x . Share != null )
4941 . Select ( x => new ControlShockerObj
5042 {
51- ShockerId = x . Shocker . Id ,
52- ShockerName = x . Shocker . Name ,
53- ShockerRfId = x . Shocker . RfId ,
54- DeviceId = x . Shocker . DeviceId ,
55- ShockerModel = x . Shocker . Model ,
56- OwnerId = x . Shocker . Device . OwnerId ,
57- Paused = x . Shocker . IsPaused || x . IsPaused ,
58- PermsAndLimits = new SharePermsAndLimits
43+ ShockerId = x . shocker . Id ,
44+ ShockerName = x . shocker . Name ,
45+ ShockerRfId = x . shocker . RfId ,
46+ DeviceId = x . shocker . DeviceId ,
47+ ShockerModel = x . shocker . Model ,
48+ OwnerId = x . OwnerId ,
49+ Paused = x . shocker . IsPaused || ( x . Share != null && x . Share . IsPaused ) ,
50+ PermsAndLimits = x . Share == null ? null : new SharePermsAndLimits
5951 {
60- Sound = x . AllowSound ,
61- Vibrate = x . AllowVibrate ,
62- Shock = x . AllowShock ,
63- Duration = x . MaxDuration ,
64- Intensity = x . MaxIntensity ,
65- Live = x . AllowLiveControl
52+ Sound = x . Share . AllowSound ,
53+ Vibrate = x . Share . AllowVibrate ,
54+ Shock = x . Share . AllowShock ,
55+ Duration = x . Share . MaxDuration ,
56+ Intensity = x . Share . MaxIntensity ,
57+ Live = x . Share . AllowLiveControl
6658 }
67- } ) ;
68-
69- var shockers = await queryOwn . Concat ( queryShared ) . ToArrayAsync ( ) ;
59+ } )
60+ . ToArrayAsync ( ) ;
7061
7162 return await ControlInternal ( controls , sender , hubClients , shockers ) ;
7263 }
0 commit comments