A decentralized music tracking and discovery platform built on AT Protocol 馃幍
rocksky.app
spotify
atproto
lastfm
musicbrainz
scrobbling
listenbrainz
1use chrono::{DateTime, Utc};
2use serde::Deserialize;
3
4#[derive(Debug, sqlx::FromRow, Deserialize, Clone)]
5pub struct Artist {
6 pub xata_id: String,
7 pub name: String,
8 pub biography: Option<String>,
9 #[serde(with = "chrono::serde::ts_seconds_option")]
10 pub born: Option<DateTime<Utc>>,
11 pub born_in: Option<String>,
12 #[serde(with = "chrono::serde::ts_seconds_option")]
13 pub died: Option<DateTime<Utc>>,
14 pub picture: Option<String>,
15 pub sha256: String,
16 pub spotify_link: Option<String>,
17 pub tidal_link: Option<String>,
18 pub youtube_link: Option<String>,
19 pub apple_music_link: Option<String>,
20 pub uri: Option<String>,
21 pub genres: Option<Vec<String>>,
22 #[serde(with = "chrono::serde::ts_seconds")]
23 pub xata_createdat: DateTime<Utc>,
24}
25
26#[derive(Debug, sqlx::FromRow, Deserialize, Clone)]
27pub struct ArtistWithoutDate {
28 pub xata_id: String,
29 pub name: String,
30 pub biography: Option<String>,
31 #[serde(with = "chrono::serde::ts_seconds_option")]
32 pub born: Option<DateTime<Utc>>,
33 pub born_in: Option<String>,
34 #[serde(with = "chrono::serde::ts_seconds_option")]
35 pub died: Option<DateTime<Utc>>,
36 pub picture: Option<String>,
37 pub sha256: String,
38 pub spotify_link: Option<String>,
39 pub tidal_link: Option<String>,
40 pub youtube_link: Option<String>,
41 pub apple_music_link: Option<String>,
42 pub uri: Option<String>,
43 pub genres: Option<Vec<String>>,
44}