diff --git a/src/Meezi.Infrastructure/Data/DiscoverShowcaseSeeder.cs b/src/Meezi.Infrastructure/Data/DiscoverShowcaseSeeder.cs
index 2a413e9..51a4de1 100644
--- a/src/Meezi.Infrastructure/Data/DiscoverShowcaseSeeder.cs
+++ b/src/Meezi.Infrastructure/Data/DiscoverShowcaseSeeder.cs
@@ -11,6 +11,28 @@ namespace Meezi.Infrastructure.Data;
/// Seeds 30 Persian showcase cafés for public discover (development only).
public static class DiscoverShowcaseSeeder
{
+ // Approximate city centres. Each café is scattered around its city with a
+ // small deterministic offset (derived from its id) so the marketing map
+ // shows a realistic cluster of blinking lights instead of one stacked dot.
+ private static readonly Dictionary CityGeo = new()
+ {
+ ["تهران"] = (35.70, 51.39, 0.13),
+ ["کرج"] = (35.83, 50.99, 0.07),
+ };
+
+ private static (double Lat, double Lng) GeoFor(string id, string city)
+ {
+ var (lat, lng, spread) = CityGeo.TryGetValue(city, out var g) ? g : (35.70, 51.39, 0.13);
+ unchecked
+ {
+ var h = 17;
+ foreach (var ch in id) h = (h * 31) + ch;
+ var ox = (((h & 0xFFFF) / 65535.0) - 0.5) * 2 * spread;
+ var oy = ((((h >> 16) & 0xFFFF) / 65535.0) - 0.5) * 2 * spread;
+ return (Math.Round(lat + oy, 5), Math.Round(lng + ox, 5));
+ }
+ }
+
private static readonly string[] ReviewAuthors = ["سارا", "علی", "مینا", "رضا", "نازنین"];
private static readonly string[] ReviewComments =
[
@@ -27,6 +49,7 @@ public static class DiscoverShowcaseSeeder
foreach (var spec in DiscoverShowcaseCatalog.Cafes)
{
var cafe = await db.Cafes.FirstOrDefaultAsync(c => c.Id == spec.Id);
+ var (geoLat, geoLng) = GeoFor(spec.Id, spec.City);
if (cafe is null)
{
cafe = new Cafe
@@ -37,6 +60,8 @@ public static class DiscoverShowcaseSeeder
Slug = spec.Slug,
City = spec.City,
Address = spec.Address,
+ Latitude = geoLat,
+ Longitude = geoLng,
Description = spec.Description,
PlanTier = spec.PlanTier,
PreferredLanguage = "fa",
@@ -100,6 +125,12 @@ public static class DiscoverShowcaseSeeder
cafe.IsVerified = true;
changed = true;
}
+ if (cafe.Latitude is null || cafe.Longitude is null)
+ {
+ cafe.Latitude = geoLat;
+ cafe.Longitude = geoLng;
+ changed = true;
+ }
if (changed)
await db.SaveChangesAsync();
}