Keresés

Új hozzászólás Aktív témák

  • Keem1

    veterán

    válasz martonx #10158 üzenetére

    Van egy Spotify playlist automatizált motyóm, ami a Spotify API-val dolgozik.
    Bár az elv több része is hasonlóan fog működni, most még a loggolt user (ketten csináljuk) DB-be letárolása megy, de a playlisteké is ugyanezen elv mentén fog.

    EF vagy EF Core?
    EF Core 8

    Sajnos terjedelmi és egyéb okok miatt nem tudom bemásolni, de a logic a következő:
    Van egy metódus: SpotifyLogin(SpotifyUser user)

    public DbSet<SpotifyUser>SpotifyUsers {get;set;}

    [Table("spotifyusers")]
    public class SpotifyUser()
    {
    [Key, Column("id")]
    public int Id { get; set; }
    [Column("tstamp")]
    public DateTime? TimeStamp { get; set; } = DateTime.Now;
    [Column("username")]
    public string? Username { get; set; }
    [Column("displayname")]
    public string? Name { get; set; }
    [Column("email")]
    public string? Email { get; set; }
    [Column("accesstoken")]
    public string? AccessToken { get; set; }
    [Column("followers")]
    public int Followers { get; set; } = 0;
    [Column("image")]
    public string? Image { get; set; }
    [Column("profileurl")]
    public string? ProfileUrl { get; set; }
    [Column("lastlogin")]
    public DateTime? LastLogin { get; set; } = DateTime.Now;
    }

    Ha az API-val sikerült beloggolnia (ennek a mikéntje jelenleg mindegy is), akkor lesz egy objektumunk, kb. ilyen:
    var user = new SpotifyUser()
    {
    //itt az API által átadott adatok
    }

    és ezután kerülünk abba a metódusba, ahonnan idéztem is már: SpotifyLogin(SpotifyUser user)

    Éééés itt pedig ketté ágazik a dolog, de mint mindent, ezt is próbálom minél egyszerűbbre, univerzálisabbra, és ha lehet, a legkevésbé redundánsra csinálni.
    Szóval letároljuk a usert DB-be, van egy user objectünk, amiről még nem tudjuk, hogy új-e vagy régi.
    Ha új, egy új entry lesz a DB-ben, ha régi, akkor aktualizáljuk, de az ID-ja az változatlan marad.

    Innen már ismerős:
    using (var db = new MySqlContext())
    {
    var existing = db.SpotifyUsers.Where(x => x.Username == userdata.Id);
    if (existing != null && existing.Count()>0)
    {
    // Ez a bajos, ha létezik a user
    // Ide valami olyan lenne jó, hogy:
    // db.SpotifyUsers.Update(userdata);
    // De erre csak egy új entry-t hoz létre a DB-ben
    }
    else
    {
    //Ez működik, ha még nincs ilyen user
    db.SpotifyUsers.Add(userdata);
    return (db.SaveChanges()>0? true : false);
    }
    }

    Szóval eddig jutottam, és a playlistek kezelése is kb ugyanígy fog kinézni, ha már létezik, akkor csak updateljük a followereket, a trackek számát, stb. Ha még nincs ilyen a DB-ben, akkor meg újként elmentjük teljes egészében.

    Az update amúgy működne úgy, hogy igazából lekérem a létező usert, és soronként/propertynként "lemásolom" a datát, és úgy egy Update, de nem akarok ennyi redundanciát.

    Ja, és meghagynám annyira univerzálisnak, hogy jelenleg működik MySQL és Sqlite DB-vel is, ami maradna, MySQL a fő cél, de backupnak meghagynám az SQLite-ot is.

    Érthető valamennyire? :)

Új hozzászólás Aktív témák

Hirdetés