public static async Task SetToPrivateIfUnknown(this OsmDbContext db, long osmTrackId)
        {
            var existing = await db.GetForOsmTrackId(osmTrackId);

            if (existing == null)
            {
                return;
            }
            if (existing.OsmState != TrackOsmStateEnum.Unknown)
            {
                return;
            }

            existing.OsmState = TrackOsmStateEnum.Private;

            db.Tracks.Update(existing);
            await db.SaveChangesAsync();
        }
        public static async Task <Track> GetOrCreatePublicTrack(this OsmDbContext db, User user, long osmTrackId,
                                                                DateTime osmTimeStamp, string name, string[] tags)
        {
            var existing = await db.GetForOsmTrackId(osmTrackId) ?? new Track();

            existing.OsmTrackId   = osmTrackId;
            existing.OsmState     = TrackOsmStateEnum.Public;
            existing.GpxFileName  = name;
            existing.User         = user;
            existing.UserId       = user.Id;
            existing.Tags         = tags;
            existing.OsmTimeStamp = osmTimeStamp;

            db.Tracks.Update(existing);
            await db.SaveChangesAsync();

            return(existing);
        }
        public static async Task <Track> GetOrCreateUnknownTrack(this OsmDbContext db, long osmTrackId)
        {
            var existing = await db.GetForOsmTrackId(osmTrackId);

            if (existing != null)
            {
                return(existing);
            }

            existing = new Track()
            {
                OsmState   = TrackOsmStateEnum.Unknown,
                OsmTrackId = osmTrackId
            };
            await db.Tracks.AddAsync(existing);

            await db.SaveChangesAsync();

            return(existing);
        }