PostgreSQL+Rust(Diesel) GeekApk 数据结构
User up
CREATE TABLE users (
id SMALLSERIAL PRIMARY KEY ,
simplename VARCHAR NOT NULL ,
avatar_url VARCHAR ,
name VARCHAR NOT NULL ,
alias VARCHAR ,
github VARCHAR NOT NULL ,
bio VARCHAR NOT NULL DEFAULT ' 这个基友很强,居然没写介绍 QAQ' ,
dev_bio VARCHAR ,
created_at TIMESTAMP NOT NULL DEFAULT now(),
online_at TIMESTAMP NOT NULL DEFAULT now(),
followers_num SMALLINT NOT NULL DEFAULT 0
)
User down
Rust Struct
#[ derive( Queryable ) ]
pub struct User {
pub id : i16 ,
pub simplename : String ,
pub avatar_url : Option < String > ,
pub name : String ,
pub alias : Option < String > ,
pub github : String ,
pub bio : String ,
pub dev_bio : Option < String > ,
pub created_at : SystemTime ,
pub updated_at : SystemTime
// cache
pub followers_num: i16
}
Follow up
CREATE TABLE follow (
user SMALLINT NOT NULL ,
target SMALLINT NOT NULL
)
Follow down
Rust struct
#[ derive( Queryable ) ]
pub struct Follow {
pub user : i16 ,
pub target : i16
}
Security up
CREATE TABLE security (
user SMALLINT PRIMARY KEY ,
hash VARCHAR NOT NULL ,
password VARCHAR
)
Security down
Rust struct
#[ derive( Queryable ) ]
pub struct Security {
pub user : i16 ,
pub hash : String ,
pub password : Option < String >
}
Category up
CREATE TABLE categories (
id SMALLSERIAL PRIMARY KEY ,
name VARCHAR NOT NULL ,
parent SMALLSERIAL NOT NULL
)
Category down
Rust struct
#[ derive( Queryable ) ]
pub struct Category {
pub id : i16 ,
pub name : String ,
pub parent : i16
}
App up
CREATE TABLE apps (
id SMALLSERIAL PRIMARY KEY ,
user SMALLINT NOT NULL ,
category SMALLINT NOT NULL ,
name VARCHAR NOT NULL ,
alias VARCHAR ,
package VARCHAR NOT NULL ,
icon_url VARCHAR ,
description VARCHAR NOT NULL ,
visualizer VARCHAR ,
optlabel VARCHAR ,
special VARCHAR ,
previews VARCHAR ,
permissions VARCHAR ,
size INTEGER NOT NULL DEFAULT 0 ,
star_num SMALLINT NOT NULL DEFAULT 0 ,
comment_num INTEGER NOT NULL DEFAULT 0 ,
created_at TIMESTAMP NOT NULL DEFAULT now(),
updated_at TIMESTAMP NOT NULL DEFAULT now()
)
App down
Rust struct
#[ derive( Queryable ) ]
pub struct App {
pub id : i16 ,
pub user : i16 ,
pub category : i16 ,
pub name : String ,
pub alias : Option < String > ,
pub package : String ,
pub icon_url : Option < String > ,
pub description : String ,
pub visualizer : Option < String > ,
pub optlabel : Option < String > ,
pub special : Option < String > ,
pub previews : Option < String > ,
pub permissions : Option < String > ,
pub size : i32 ,
pub star_num : i16 ,
pub comment_num : i32 ,
pub created_at : SystemTime ,
pub updated_at : SystemTime
}
Update up
CREATE TABLE updates (
app SMALLINT NOT NULL ,
version VARCHAR NOT NULL ,
reversion SMALLINT NOT NULL ,
install_url VARCHAR NOT NULL ,
updates VARCHAR ,
api_min SMALLINT ,
api_target SMALLINT
)
Update down
Rust struct
#[ derive( Queryable ) ]
pub struct Update {
pub app : i16 ,
pub version : String ,
pub reversion : i16 ,
pub install_url : String ,
pub updates : Option < String > ,
pub api_min : Option < i16 > ,
pub api_target : Option < i16 >
}
Star up
CREATE TABLE stars (
user SMALLINT NOT NULL ,
app SMALLINT NOT NULL
)
Star down
Rust struct
#[ derive( Queryable ) ]
pub struct Star {
user : i16 ,
app : i16
}
COMMENT
Comment up
CREATE TABLE comments (
id SERIAL PRIMARY KEY ,
user SMALLINT NOT NULL ,
app SMALLINT NOT NULL ,
reply INTEGER ,
content VARCHAR NOT NULL ,
stars_num SMALLINT NOT NULL DEFAULT 0 ,
replies_num INTEGER NOT NULL DEFAULT 0 ,
created_at TIMESTAMP NOT NULL DEFAULT now(),
updated_at TIMESTAMP
)
Comment down
Rust struct
#[ derive( Queryable ) ]
pub struct Comment {
id : i32 ,
user : i16 ,
app : i16 ,
reply : Option < i32 > ,
content : String ,
stars_num : i16 ,
replies_num : i32 ,
created_at : SystemTime ,
updated_at : Option < SystemTime >
}
COMMENT_STAR
Comment star up
CREATE TABLE comment_stars (
user SMALLINT NOT NULL ,
comment INTEGER NOT NULL
)
Comment star down
Rust struct
#[ derive( Queryable ) ]
pub struct CommentStar {
user : i16 ,
comment : i32
}
Timeline up
CREATE TABLE timeline (
user SMALLINT NOT NULL ,
created_at TIMESTAMP NOT NULL DEFAULT now(),
line_type SMALLINT NOT NULL ,
data INTEGER NOT NULL
)
Timeline down
Rust struct
#[ derive( Queryable ) ]
pub struct Timeline {
user : i16 ,
created_at : SystemTime ,
line_type : i16 ,
data : i32
}
Mailbox up
CREATE TABLE mailbox (
user SMALLINT NOT NULL ,
created_at TIMESTAMP NOT NULL DEFAULT now(),
mail_type SMALLINT NOT NULL ,
data: INTEGER NOT NULL
)
Mailbox down
Rust struct
#[ derive( Queryable ) ]
pub struct Mailbox {
user : i16 ,
created_at : SystemTime ,
mail_type : i16 ,
data : i32
}