Skip to content

Commit ee8ea26

Browse files
author
Moons
committed
fix(vendors): fix multiple issues
1 parent f51bcec commit ee8ea26

File tree

3 files changed

+50
-24
lines changed

3 files changed

+50
-24
lines changed

Program.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,8 @@ public static void Main()
118118
.AddHostedService<VendorsGunsmith>()
119119
.AddHostedService<VendorsIronBanner>()
120120
.AddHostedService<VendorsTrials>()
121-
.AddHostedService<VendorsWarTable>();
121+
.AddHostedService<VendorsWarTable>()
122+
;
122123

123124
builder.Services
124125
.AddAuthentication(options =>

Tasks/VendorsAdepts.cs

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@ protected override async Task ExecuteAsync(CancellationToken stoppingToken)
4040
var nfAdept = "None";
4141
var trialsAdept = "None";
4242

43+
var currentTime = DateTime.UtcNow;
44+
4345
try
4446
{
4547
var vendorUser = db.Users.Include(u => u.BungieProfiles)
@@ -112,12 +114,14 @@ protected override async Task ExecuteAsync(CancellationToken stoppingToken)
112114
if (existingItem != null)
113115
db.WeaponSales.Remove(existingItem);
114116

117+
await db.SaveChangesAsync(stoppingToken);
118+
115119
var vendorItem = new WeaponSale
116120
{
117121
IsAvailable = true,
118122
ItemId = vendorWeapon,
119123
ItemPerks = "[[0]]",
120-
QueryTime = DateTime.UtcNow,
124+
QueryTime = currentTime,
121125
VendorId = vendor.Value
122126
};
123127

@@ -133,12 +137,12 @@ protected override async Task ExecuteAsync(CancellationToken stoppingToken)
133137
{
134138
case Vendors.FocusedDecoding_502095006:
135139
trialsAdept = validDef
136-
? adeptWeaponDef.DisplayProperties.Name
140+
? $"[{adeptWeaponDef.DisplayProperties.Name}](https://d2foundry.gg/w/{adeptWeaponDef.Hash})"
137141
: "Unknown";
138142
break;
139143
case Vendors.FocusedDecoding_2232145065:
140144
nfAdept = validDef
141-
? adeptWeaponDef.DisplayProperties.Name
145+
? $"[{adeptWeaponDef.DisplayProperties.Name}](https://d2foundry.gg/w/{adeptWeaponDef.Hash})"
142146
: "Unknown";
143147
break;
144148
}
@@ -150,12 +154,14 @@ protected override async Task ExecuteAsync(CancellationToken stoppingToken)
150154
if (existingItem != null)
151155
db.WeaponSales.Remove(existingItem);
152156

157+
await db.SaveChangesAsync(stoppingToken);
158+
153159
var vendorItem = new WeaponSale
154160
{
155161
IsAvailable = true,
156162
ItemId = 0,
157163
ItemPerks = "[[0]]",
158-
QueryTime = DateTime.UtcNow,
164+
QueryTime = currentTime,
159165
VendorId = vendor.Value
160166
};
161167

@@ -175,6 +181,16 @@ protected override async Task ExecuteAsync(CancellationToken stoppingToken)
175181
}
176182
}
177183

184+
var oldWeapons = db.WeaponSales.Where(x => x.QueryTime < currentTime && x.ItemPerks == "[[0]]").ToList();
185+
186+
foreach (var weaponSale in oldWeapons)
187+
{
188+
if(weaponSale.IsAvailable)
189+
weaponSale.IsAvailable = false;
190+
191+
db.WeaponSales.Update(weaponSale);
192+
}
193+
178194
await db.SaveChangesAsync(stoppingToken);
179195

180196
await DiscordTools.SendMessage(DiscordTools.WebhookChannel.Vendors,

Util/VendorTools.cs

Lines changed: 28 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -55,36 +55,45 @@ public static async Task SingleVendorUpdate(
5555
vendorItem.RequiredRank = Convert.ToInt32(failureString);
5656
}
5757

58-
var existingWeapon = db.WeaponSales.FirstOrDefault(x => x.ItemId == vendorItem.ItemId);
58+
var existingWeapons = db.WeaponSales.Where(w => w.ItemId == vendorItem.Id && w.VendorId == vendorId).ToList();
5959

60-
if (existingWeapon is { IsAvailable: false })
61-
continue;
62-
63-
var addWeapon = true;
64-
65-
if (existingWeapon != null)
60+
if (existingWeapons.Count == 0)
6661
{
67-
if (existingWeapon.ItemPerks != vendorItem.ItemPerks)
68-
{
69-
existingWeapon.IsAvailable = false;
70-
}
71-
else
62+
// Case: Weapon isn't in the db, add it
63+
db.WeaponSales.Add(vendorItem);
64+
}
65+
else
66+
{
67+
var addWeapon = true;
68+
69+
foreach (var existingWeapon in existingWeapons)
7270
{
73-
existingWeapon.QueryTime = queryTime;
74-
addWeapon = false;
71+
if (existingWeapon.ItemPerks == vendorItem.ItemPerks)
72+
{
73+
// Case: Weapon is in the db with the same itemPerks, update querytime and isAvailable
74+
existingWeapon.QueryTime = queryTime;
75+
existingWeapon.IsAvailable = true;
76+
77+
db.WeaponSales.Update(existingWeapon);
78+
addWeapon = false;
79+
}
80+
else
81+
{
82+
// Case: Weapon is in the db with different itemPerks, set isAvailable to false for each entry
83+
existingWeapon.IsAvailable = false;
84+
db.WeaponSales.Update(existingWeapon);
85+
}
7586
}
7687

77-
db.WeaponSales.Update(existingWeapon);
88+
if (addWeapon)
89+
db.WeaponSales.Add(vendorItem);
7890
}
79-
80-
if (addWeapon)
81-
db.WeaponSales.Add(vendorItem);
8291
}
8392

8493
await db.SaveChangesAsync(stoppingToken);
8594

8695
foreach (var sale in db.WeaponSales.Where(x => x.VendorId == vendorId))
87-
if (sale.QueryTime < queryTime)
96+
if (sale.QueryTime < queryTime && sale.ItemPerks != "[[0]]")
8897
sale.IsAvailable = false;
8998

9099
await db.SaveChangesAsync(stoppingToken);

0 commit comments

Comments
 (0)