fix: rename GistPrivacy to GistVisibility and *privacy to *visibility

master
Aravinth Manivannan 2 years ago
parent 6b60e2a064
commit 303a430113
Signed by: realaravinth
GPG Key ID: AD9F0F08E855ED88

@ -33,7 +33,7 @@ pub enum DBError {
/// email is already taken
#[error("Unknown privacy specifier {}", _0)]
UnknownPrivacySpecifier(String),
UnknownVisibilitySpecifier(String),
/// Gist with specified characteristics not found
#[error("Gist with specified characteristics not found")]

@ -61,13 +61,13 @@ pub struct CreateGist {
pub description: Option<String>,
/// public ID of the gist
pub public_id: String,
/// gist privacy
pub privacy: GistPrivacy,
/// gist visibility
pub visibility: GistVisibility,
}
/// Gist privacy
/// Gist visibility
#[derive(Clone, PartialEq, Debug)]
pub enum GistPrivacy {
pub enum GistVisibility {
/// Everyone can see the gist, will be displayed on /explore and
/// search engines might index it too
Public,
@ -78,33 +78,33 @@ pub enum GistPrivacy {
Private,
}
impl GistPrivacy {
/// Convert [GistPrivacy] to [str]
impl GistVisibility {
/// Convert [GistVisibility] to [str]
pub const fn to_str(&self) -> &'static str {
match self {
GistPrivacy::Private => "private",
GistPrivacy::Unlisted => "unlisted",
GistPrivacy::Public => "public",
GistVisibility::Private => "private",
GistVisibility::Unlisted => "unlisted",
GistVisibility::Public => "public",
}
}
/// Convert [str] to [GistPrivacy]
/// Convert [str] to [GistVisibility]
pub fn from_str(s: &str) -> DBResult<Self> {
const PRIVATE: &str = GistPrivacy::Private.to_str();
const PUBLIC: &str = GistPrivacy::Public.to_str();
const UNLISTED: &str = GistPrivacy::Unlisted.to_str();
const PRIVATE: &str = GistVisibility::Private.to_str();
const PUBLIC: &str = GistVisibility::Public.to_str();
const UNLISTED: &str = GistVisibility::Unlisted.to_str();
let s = s.trim();
match s {
PRIVATE => Ok(Self::Private),
PUBLIC => Ok(Self::Public),
UNLISTED => Ok(Self::Unlisted),
_ => Err(DBError::UnknownPrivacySpecifier(s.to_owned())),
_ => Err(DBError::UnknownVisibilitySpecifier(s.to_owned())),
}
}
}
impl From<GistPrivacy> for String {
fn from(gp: GistPrivacy) -> String {
impl From<GistVisibility> for String {
fn from(gp: GistVisibility) -> String {
gp.to_str().into()
}
}
@ -122,8 +122,8 @@ pub struct Gist {
pub created: i64,
/// gist updated time
pub updated: i64,
/// gist privacy
pub privacy: GistPrivacy,
/// gist visibility
pub visibility: GistVisibility,
}
#[derive(Clone, Debug)]
@ -245,8 +245,8 @@ pub trait GistDatabase: std::marker::Send + std::marker::Sync + CloneGistDatabas
/// Delete comment
async fn delete_comment(&self, owner: &str, id: i64) -> DBResult<()>;
/// check if privacy mode exists
async fn privacy_exists(&self, privacy: &GistPrivacy) -> DBResult<bool>;
/// check if visibility mode exists
async fn visibility_exists(&self, visibility: &GistVisibility) -> DBResult<bool>;
}
#[async_trait]
@ -340,8 +340,8 @@ impl GistDatabase for Box<dyn GistDatabase> {
(**self).delete_comment(owner, id).await
}
async fn privacy_exists(&self, privacy: &GistPrivacy) -> DBResult<bool> {
(**self).privacy_exists(privacy).await
async fn visibility_exists(&self, visibility: &GistVisibility) -> DBResult<bool> {
(**self).visibility_exists(visibility).await
}
}

@ -39,17 +39,17 @@ pub async fn email_register_works<T: GistDatabase>(
assert!(matches!(err, Some(DBError::DuplicateEmail)));
}
/// test if all privacy modes are available on database
pub async fn privacy_works<T: GistDatabase>(db: &T) {
/// test if all visibility modes are available on database
pub async fn visibility_works<T: GistDatabase>(db: &T) {
for p in [
GistPrivacy::Public,
GistPrivacy::Unlisted,
GistPrivacy::Private,
GistVisibility::Public,
GistVisibility::Unlisted,
GistVisibility::Private,
]
.iter()
{
println!("Testing privacy: {}", p.to_str());
assert!(db.privacy_exists(p).await.unwrap());
println!("Testing visibility: {}", p.to_str());
assert!(db.visibility_exists(p).await.unwrap());
}
}
@ -72,7 +72,7 @@ pub async fn gists_work<T: GistDatabase>(
assert_eq!(lhs.description, rhs.description);
assert_eq!(lhs.owner, rhs.owner);
assert_eq!(lhs.public_id, rhs.public_id);
assert_eq!(lhs.privacy, rhs.privacy);
assert_eq!(lhs.visibility, rhs.visibility);
}
let _ = db.delete_account(username).await;
@ -88,7 +88,7 @@ pub async fn gists_work<T: GistDatabase>(
owner: username.into(),
description: Some("foo".to_string()),
public_id: public_id.to_string(),
privacy: GistPrivacy::Public,
visibility: GistVisibility::Public,
};
assert!(!db.gist_exists(&create_gist.public_id).await.unwrap());

@ -1,15 +1,15 @@
CREATE TABLE IF NOT EXISTS gists_privacy (
CREATE TABLE IF NOT EXISTS gists_visibility (
name VARCHAR(15) NOT NULL UNIQUE,
ID SERIAL PRIMARY KEY NOT NULL
);
INSERT INTO gists_privacy (name) VALUES('private') ON CONFLICT (name) DO NOTHING;
INSERT INTO gists_privacy (name) VALUES('unlisted') ON CONFLICT (name) DO NOTHING;
INSERT INTO gists_privacy (name) VALUES('public') ON CONFLICT (name) DO NOTHING;
INSERT INTO gists_visibility (name) VALUES('private') ON CONFLICT (name) DO NOTHING;
INSERT INTO gists_visibility (name) VALUES('unlisted') ON CONFLICT (name) DO NOTHING;
INSERT INTO gists_visibility (name) VALUES('public') ON CONFLICT (name) DO NOTHING;
CREATE TABLE IF NOT EXISTS gists_gists (
owner_id INTEGER NOT NULL references gists_users(ID) ON DELETE CASCADE,
privacy INTEGER NOT NULL references gists_privacy(ID),
visibility INTEGER NOT NULL references gists_visibility(ID),
description TEXT DEFAULT NULL,
created timestamptz NOT NULL,
updated timestamptz NOT NULL,

@ -5,9 +5,9 @@ CREATE OR REPLACE VIEW gists_gists_view AS
gists.updated,
gists.public_id,
gists_users.username as owner,
gists_privacy.name as privacy
gists_visibility.name as visibility
FROM gists_gists gists
INNER JOIN gists_privacy ON gists_privacy.ID = gists.privacy
INNER JOIN gists_visibility ON gists_visibility.ID = gists.visibility
INNER JOIN gists_users ON gists_users.ID = gists.owner_id;

@ -44,40 +44,36 @@
]
}
},
"19c04856cfeaa552b1fbf5fb1dc5172c1329d88f39f771c83d3ca104f23a59b8": {
"query": "INSERT INTO gists_gists \n (owner_id , description, public_id, privacy, created, updated)\n VALUES (\n (SELECT ID FROM gists_users WHERE username = $1),\n $2, $3, (SELECT ID FROM gists_privacy WHERE name = $4), $5, $6\n )",
"1ea7ea0bb1a6f4b84a2b9c6b1741c6bf9f1938f107133bd80e72a82fb44d5c8a": {
"query": "INSERT INTO gists_comments (owner_id, gist_id, comment, created)\n VALUES (\n (SELECT ID FROM gists_users WHERE username = $1),\n (SELECT ID FROM gists_gists WHERE public_id = $2),\n $3,\n $4\n )",
"describe": {
"columns": [],
"parameters": {
"Left": [
"Text",
"Text",
"Varchar",
"Text",
"Timestamptz",
"Timestamptz"
]
},
"nullable": []
}
},
"1ea7ea0bb1a6f4b84a2b9c6b1741c6bf9f1938f107133bd80e72a82fb44d5c8a": {
"query": "INSERT INTO gists_comments (owner_id, gist_id, comment, created)\n VALUES (\n (SELECT ID FROM gists_users WHERE username = $1),\n (SELECT ID FROM gists_gists WHERE public_id = $2),\n $3,\n $4\n )",
"340413dd6062e88bf2db846a05f600d6d0384f8b7038445653c3156b997232a8": {
"query": "DELETE FROM gists_gists \n WHERE \n public_id = $1\n AND\n owner_id = (SELECT ID FROM gists_users WHERE username = $2)\n ",
"describe": {
"columns": [],
"parameters": {
"Left": [
"Text",
"Text",
"Text",
"Timestamptz"
"Text"
]
},
"nullable": []
}
},
"2e627e47d7dce8da4aebfc39f3baf02cbb471d514410cbe82ef442b7de9dfc55": {
"query": "SELECT\n owner,\n privacy,\n created,\n updated,\n public_id,\n description\n FROM\n gists_gists_view\n WHERE owner = $1\n ",
"38409cc4e1e1edf0a5f15160d54a59b741fc668795bcdc11570e3963661c77e0": {
"query": "SELECT\n owner,\n visibility,\n created,\n updated,\n public_id,\n description\n FROM\n gists_gists_view\n WHERE public_id = $1\n ",
"describe": {
"columns": [
{
@ -87,7 +83,7 @@
},
{
"ordinal": 1,
"name": "privacy",
"name": "visibility",
"type_info": "Varchar"
},
{
@ -126,19 +122,6 @@
]
}
},
"340413dd6062e88bf2db846a05f600d6d0384f8b7038445653c3156b997232a8": {
"query": "DELETE FROM gists_gists \n WHERE \n public_id = $1\n AND\n owner_id = (SELECT ID FROM gists_users WHERE username = $2)\n ",
"describe": {
"columns": [],
"parameters": {
"Left": [
"Text",
"Text"
]
},
"nullable": []
}
},
"405772009a7aee0194b6b25c42955c2674c3ff92b812d7f15c4075d243879c60": {
"query": "SELECT password FROM gists_users WHERE username = ($1)",
"describe": {
@ -172,56 +155,6 @@
"nullable": []
}
},
"71e74dfde93b42fb7cc064e439f3067ddd49db646b9837a66938c43474b34233": {
"query": "SELECT\n owner,\n privacy,\n created,\n updated,\n public_id,\n description\n FROM\n gists_gists_view\n WHERE public_id = $1\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "owner",
"type_info": "Varchar"
},
{
"ordinal": 1,
"name": "privacy",
"type_info": "Varchar"
},
{
"ordinal": 2,
"name": "created",
"type_info": "Timestamptz"
},
{
"ordinal": 3,
"name": "updated",
"type_info": "Timestamptz"
},
{
"ordinal": 4,
"name": "public_id",
"type_info": "Varchar"
},
{
"ordinal": 5,
"name": "description",
"type_info": "Text"
}
],
"parameters": {
"Left": [
"Text"
]
},
"nullable": [
true,
true,
true,
true,
true,
true
]
}
},
"7cc18cdd39aa42dcbb75b0b0d06b6df05ac654654b86db71be07344e3f09510d": {
"query": "UPDATE gists_users set username = $1 WHERE username = $2",
"describe": {
@ -261,22 +194,6 @@
]
}
},
"8ba77aab32a3b71ee10bde66676396263fd1bb41cf5d270dcb813c0c0e089bc7": {
"query": "INSERT INTO gists_gists \n (owner_id , public_id, privacy, created, updated)\n VALUES (\n (SELECT ID FROM gists_users WHERE username = $1),\n $2, (SELECT ID FROM gists_privacy WHERE name = $3), $4, $5\n )",
"describe": {
"columns": [],
"parameters": {
"Left": [
"Text",
"Varchar",
"Text",
"Timestamptz",
"Timestamptz"
]
},
"nullable": []
}
},
"8c7af53d14214f2bd23b089d3c9134909c2d1cc13cd42e88778bfb20f497c2dd": {
"query": "SELECT EXISTS (SELECT 1 from gists_users WHERE email = $1)",
"describe": {
@ -394,8 +311,25 @@
"nullable": []
}
},
"bc934d97678a5fef7a55f10657e1cefcdfe51a11b8755aa635cda0be468dc9dd": {
"query": "SELECT EXISTS (SELECT 1 from gists_privacy WHERE name = $1)",
"c2ab0ea9f4f409a089d9bf845a6102d7acae88fab627b77cf906852c6feb4aeb": {
"query": "INSERT INTO gists_gists \n (owner_id , description, public_id, visibility, created, updated)\n VALUES (\n (SELECT ID FROM gists_users WHERE username = $1),\n $2, $3, (SELECT ID FROM gists_visibility WHERE name = $4), $5, $6\n )",
"describe": {
"columns": [],
"parameters": {
"Left": [
"Text",
"Text",
"Varchar",
"Text",
"Timestamptz",
"Timestamptz"
]
},
"nullable": []
}
},
"cc05f1d7f840a39b445abc687e904f7ef0633a637b638c5b72b560d73c6b0067": {
"query": "SELECT EXISTS (SELECT 1 from gists_visibility WHERE name = $1)",
"describe": {
"columns": [
{
@ -427,6 +361,56 @@
"nullable": []
}
},
"d96deddee5298f86c6938eeb12ee6ad130a2d6217629533c0400689065ab7a08": {
"query": "SELECT\n owner,\n visibility,\n created,\n updated,\n public_id,\n description\n FROM\n gists_gists_view\n WHERE owner = $1\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "owner",
"type_info": "Varchar"
},
{
"ordinal": 1,
"name": "visibility",
"type_info": "Varchar"
},
{
"ordinal": 2,
"name": "created",
"type_info": "Timestamptz"
},
{
"ordinal": 3,
"name": "updated",
"type_info": "Timestamptz"
},
{
"ordinal": 4,
"name": "public_id",
"type_info": "Varchar"
},
{
"ordinal": 5,
"name": "description",
"type_info": "Text"
}
],
"parameters": {
"Left": [
"Text"
]
},
"nullable": [
true,
true,
true,
true,
true,
true
]
}
},
"e0a12b823159b7e2a3667bbb4c9dd22dd52b9ffb618f3464a2d61b11ad068821": {
"query": "SELECT EXISTS (SELECT 1 from gists_gists WHERE public_id = $1)",
"describe": {
@ -481,6 +465,22 @@
]
}
},
"fbeb7f634647d0082b9a083590b027ba668e59f2173e0699b78c2261ace2638f": {
"query": "INSERT INTO gists_gists \n (owner_id , public_id, visibility, created, updated)\n VALUES (\n (SELECT ID FROM gists_users WHERE username = $1),\n $2, (SELECT ID FROM gists_visibility WHERE name = $3), $4, $5\n )",
"describe": {
"columns": [],
"parameters": {
"Left": [
"Text",
"Varchar",
"Text",
"Timestamptz",
"Timestamptz"
]
},
"nullable": []
}
},
"fdd95c62a27eab173de335225e9e319b901832962b7a562ec4d1749ff74f8fd4": {
"query": "SELECT EXISTS (SELECT 1 from gists_users WHERE username = $1)",
"describe": {

@ -306,15 +306,15 @@ impl GistDatabase for Database {
if let Some(description) = &gist.description {
sqlx::query!(
"INSERT INTO gists_gists
(owner_id , description, public_id, privacy, created, updated)
(owner_id , description, public_id, visibility, created, updated)
VALUES (
(SELECT ID FROM gists_users WHERE username = $1),
$2, $3, (SELECT ID FROM gists_privacy WHERE name = $4), $5, $6
$2, $3, (SELECT ID FROM gists_visibility WHERE name = $4), $5, $6
)",
&gist.owner,
description,
&gist.public_id,
gist.privacy.to_str(),
gist.visibility.to_str(),
&now,
&now
)
@ -324,14 +324,14 @@ impl GistDatabase for Database {
} else {
sqlx::query!(
"INSERT INTO gists_gists
(owner_id , public_id, privacy, created, updated)
(owner_id , public_id, visibility, created, updated)
VALUES (
(SELECT ID FROM gists_users WHERE username = $1),
$2, (SELECT ID FROM gists_privacy WHERE name = $3), $4, $5
$2, (SELECT ID FROM gists_visibility WHERE name = $3), $4, $5
)",
&gist.owner,
&gist.public_id,
gist.privacy.to_str(),
gist.visibility.to_str(),
&now,
&now
)
@ -347,7 +347,7 @@ impl GistDatabase for Database {
InnerGist,
"SELECT
owner,
privacy,
visibility,
created,
updated,
public_id,
@ -373,7 +373,7 @@ impl GistDatabase for Database {
InnerGist,
"SELECT
owner,
privacy,
visibility,
created,
updated,
public_id,
@ -512,10 +512,10 @@ impl GistDatabase for Database {
Ok(())
}
async fn privacy_exists(&self, privacy: &GistPrivacy) -> DBResult<bool> {
async fn visibility_exists(&self, visibility: &GistVisibility) -> DBResult<bool> {
let res = sqlx::query!(
"SELECT EXISTS (SELECT 1 from gists_privacy WHERE name = $1)",
privacy.to_str()
"SELECT EXISTS (SELECT 1 from gists_visibility WHERE name = $1)",
visibility.to_str()
)
.fetch_one(&self.pool)
.await
@ -535,7 +535,7 @@ struct InnerGist {
public_id: Option<String>,
created: Option<OffsetDateTime>,
updated: Option<OffsetDateTime>,
privacy: Option<String>,
visibility: Option<String>,
}
impl InnerGist {
@ -546,7 +546,7 @@ impl InnerGist {
public_id: self.public_id.unwrap(),
created: self.created.as_ref().unwrap().unix_timestamp(),
updated: self.updated.as_ref().unwrap().unix_timestamp(),
privacy: GistPrivacy::from_str(self.privacy.as_ref().unwrap())?,
visibility: GistVisibility::from_str(self.visibility.as_ref().unwrap())?,
})
}
}

@ -40,14 +40,14 @@ async fn everyting_works() {
}
#[actix_rt::test]
async fn privacy_test() {
async fn visibility_test() {
let url = env::var("POSTGRES_DATABASE_URL").unwrap();
let pool_options = PgPoolOptions::new().max_connections(2);
let connection_options = ConnectionOptions::Fresh(Fresh { pool_options, url });
let db = connection_options.connect().await.unwrap();
db.migrate().await.unwrap();
privacy_works(&db).await;
visibility_works(&db).await;
}
#[actix_rt::test]

@ -1,18 +1,18 @@
CREATE TABLE IF NOT EXISTS gists_privacy (
CREATE TABLE IF NOT EXISTS gists_visibility (
name VARCHAR(15) NOT NULL UNIQUE,
ID INTEGER PRIMARY KEY NOT NULL
);
INSERT OR IGNORE INTO gists_privacy (name) VALUES('private');
INSERT OR IGNORE INTO gists_privacy (name) VALUES('unlisted');
INSERT OR IGNORE INTO gists_privacy (name) VALUES('public');
INSERT OR IGNORE INTO gists_visibility (name) VALUES('private');
INSERT OR IGNORE INTO gists_visibility (name) VALUES('unlisted');
INSERT OR IGNORE INTO gists_visibility (name) VALUES('public');
CREATE TABLE IF NOT EXISTS gists_gists (
owner_id INTEGER NOT NULL references gists_users(ID) ON DELETE CASCADE,
description TEXT DEFAULT NULL,
created INTEGER NOT NULL,
updated INTEGER NOT NULL,
privacy INTEGER NOT NULL references gists_privacy(ID),
visibility INTEGER NOT NULL references gists_visibility(ID),
public_id VARCHAR(32) UNIQUE NOT NULL,
ID INTEGER PRIMARY KEY NOT NULL
);

@ -6,9 +6,9 @@ CREATE VIEW gists_gists_view AS
gists.updated,
gists.public_id,
gists_users.username as owner,
gists_privacy.name as privacy
gists_visibility.name as visibility
FROM gists_gists gists
INNER JOIN gists_privacy ON gists_privacy.ID = gists.privacy
INNER JOIN gists_visibility ON gists_visibility.ID = gists.visibility
INNER JOIN gists_users ON gists_users.ID = gists.owner_id;

@ -10,24 +10,6 @@
"nullable": []
}
},
"1088bc2872170b2ed8511d34ea07062d4bbc420d33724148720f492c8730ce2e": {
"query": "SELECT ID from gists_privacy WHERE name = $1",
"describe": {
"columns": [
{
"name": "ID",
"ordinal": 0,
"type_info": "Int64"
}
],
"parameters": {
"Right": 1
},
"nullable": [
false
]
}
},
"1516ec34202a21239aa8275d5637007d4c2c54ada5ed346dcebfb4b7b3cdf019": {
"query": "\n SELECT\n ID,\n comment,\n owner,\n created,\n gist_public_id\n FROM\n gists_comments_view\n WHERE\n gist_public_id = $1\n ORDER BY created;\n ",
"describe": {
@ -70,28 +52,28 @@
]
}
},
"19c04856cfeaa552b1fbf5fb1dc5172c1329d88f39f771c83d3ca104f23a59b8": {
"query": "INSERT INTO gists_gists \n (owner_id , description, public_id, privacy, created, updated)\n VALUES (\n (SELECT ID FROM gists_users WHERE username = $1),\n $2, $3, (SELECT ID FROM gists_privacy WHERE name = $4), $5, $6\n )",
"1ea7ea0bb1a6f4b84a2b9c6b1741c6bf9f1938f107133bd80e72a82fb44d5c8a": {
"query": "INSERT INTO gists_comments (owner_id, gist_id, comment, created)\n VALUES (\n (SELECT ID FROM gists_users WHERE username = $1),\n (SELECT ID FROM gists_gists WHERE public_id = $2),\n $3,\n $4\n )",
"describe": {
"columns": [],
"parameters": {
"Right": 6
"Right": 4
},
"nullable": []
}
},
"1ea7ea0bb1a6f4b84a2b9c6b1741c6bf9f1938f107133bd80e72a82fb44d5c8a": {
"query": "INSERT INTO gists_comments (owner_id, gist_id, comment, created)\n VALUES (\n (SELECT ID FROM gists_users WHERE username = $1),\n (SELECT ID FROM gists_gists WHERE public_id = $2),\n $3,\n $4\n )",
"340413dd6062e88bf2db846a05f600d6d0384f8b7038445653c3156b997232a8": {
"query": "DELETE FROM gists_gists \n WHERE \n public_id = $1\n AND\n owner_id = (SELECT ID FROM gists_users WHERE username = $2)\n ",
"describe": {
"columns": [],
"parameters": {
"Right": 4
"Right": 2
},
"nullable": []
}
},
"2e627e47d7dce8da4aebfc39f3baf02cbb471d514410cbe82ef442b7de9dfc55": {
"query": "SELECT\n owner,\n privacy,\n created,\n updated,\n public_id,\n description\n FROM\n gists_gists_view\n WHERE owner = $1\n ",
"38409cc4e1e1edf0a5f15160d54a59b741fc668795bcdc11570e3963661c77e0": {
"query": "SELECT\n owner,\n visibility,\n created,\n updated,\n public_id,\n description\n FROM\n gists_gists_view\n WHERE public_id = $1\n ",
"describe": {
"columns": [
{
@ -100,7 +82,7 @@
"type_info": "Text"
},
{
"name": "privacy",
"name": "visibility",
"ordinal": 1,
"type_info": "Text"
},
@ -138,16 +120,6 @@
]
}
},
"340413dd6062e88bf2db846a05f600d6d0384f8b7038445653c3156b997232a8": {
"query": "DELETE FROM gists_gists \n WHERE \n public_id = $1\n AND\n owner_id = (SELECT ID FROM gists_users WHERE username = $2)\n ",
"describe": {
"columns": [],
"parameters": {
"Right": 2
},
"nullable": []
}
},
"39cea9b1c3ff61fdc935e3559151ce3100fe7d7090843cb39dc77ec67d668980": {
"query": "SELECT ID from gists_gists WHERE public_id = $1",
"describe": {
@ -194,54 +166,6 @@
"nullable": []
}
},
"71e74dfde93b42fb7cc064e439f3067ddd49db646b9837a66938c43474b34233": {
"query": "SELECT\n owner,\n privacy,\n created,\n updated,\n public_id,\n description\n FROM\n gists_gists_view\n WHERE public_id = $1\n ",
"describe": {
"columns": [
{
"name": "owner",
"ordinal": 0,
"type_info": "Text"
},
{
"name": "privacy",
"ordinal": 1,
"type_info": "Text"
},
{
"name": "created",
"ordinal": 2,
"type_info": "Int64"
},
{
"name": "updated",
"ordinal": 3,
"type_info": "Int64"
},
{
"name": "public_id",
"ordinal": 4,
"type_info": "Text"
},
{
"name": "description",
"ordinal": 5,
"type_info": "Text"
}
],
"parameters": {
"Right": 1
},
"nullable": [
false,
false,
false,
false,
false,
true
]
}
},
"7cc18cdd39aa42dcbb75b0b0d06b6df05ac654654b86db71be07344e3f09510d": {
"query": "UPDATE gists_users set username = $1 WHERE username = $2",
"describe": {
@ -276,16 +200,6 @@
]
}
},
"8ba77aab32a3b71ee10bde66676396263fd1bb41cf5d270dcb813c0c0e089bc7": {
"query": "INSERT INTO gists_gists \n (owner_id , public_id, privacy, created, updated)\n VALUES (\n (SELECT ID FROM gists_users WHERE username = $1),\n $2, (SELECT ID FROM gists_privacy WHERE name = $3), $4, $5\n )",
"describe": {
"columns": [],
"parameters": {
"Right": 5
},
"nullable": []
}
},
"9aaf3a384bf79f278bf79c99b34fadcc172cfa4e7857111502782e6ad7110b7b": {
"query": "UPDATE gists_users set email = $1\n WHERE username = $2",
"describe": {
@ -376,6 +290,34 @@
"nullable": []
}
},
"c2ab0ea9f4f409a089d9bf845a6102d7acae88fab627b77cf906852c6feb4aeb": {
"query": "INSERT INTO gists_gists \n (owner_id , description, public_id, visibility, created, updated)\n VALUES (\n (SELECT ID FROM gists_users WHERE username = $1),\n $2, $3, (SELECT ID FROM gists_visibility WHERE name = $4), $5, $6\n )",
"describe": {
"columns": [],
"parameters": {
"Right": 6
},
"nullable": []
}
},
"d2926f3eb50920293d620b2c312302981645da0ac54c2c99e8cc822ddb67b544": {
"query": "SELECT ID from gists_visibility WHERE name = $1",
"describe": {
"columns": [
{
"name": "ID",
"ordinal": 0,
"type_info": "Int64"
}
],
"parameters": {
"Right": 1
},
"nullable": [
false
]
}
},
"d4762a0b958e06f8d2837d43e8138a560c9c966cbe12d1f10ec12da09866f8eb": {
"query": "SELECT id from gists_users WHERE username = $1",
"describe": {
@ -404,6 +346,54 @@
"nullable": []
}
},
"d96deddee5298f86c6938eeb12ee6ad130a2d6217629533c0400689065ab7a08": {
"query": "SELECT\n owner,\n visibility,\n created,\n updated,\n public_id,\n description\n FROM\n gists_gists_view\n WHERE owner = $1\n ",
"describe": {
"columns": [
{
"name": "owner",
"ordinal": 0,
"type_info": "Text"
},
{
"name": "visibility",
"ordinal": 1,
"type_info": "Text"
},
{
"name": "created",
"ordinal": 2,
"type_info": "Int64"
},
{
"name": "updated",
"ordinal": 3,
"type_info": "Int64"
},
{
"name": "public_id",
"ordinal": 4,
"type_info": "Text"
},
{
"name": "description",
"ordinal": 5,
"type_info": "Text"
}
],
"parameters": {
"Right": 1
},
"nullable": [
false,
false,
false,
false,
false,
true
]
}
},
"e3604664ce429e2f49c0c4cc2601c5336be3f8690c06b9883b64b53085c9c9a6": {
"query": "INSERT INTO gists_users \n (username , password, secret) VALUES ($1, $2, $3)",
"describe": {
@ -431,5 +421,15 @@
false
]
}
},
"fbeb7f634647d0082b9a083590b027ba668e59f2173e0699b78c2261ace2638f": {
"query": "INSERT INTO gists_gists \n (owner_id , public_id, visibility, created, updated)\n VALUES (\n (SELECT ID FROM gists_users WHERE username = $1),\n $2, (SELECT ID FROM gists_visibility WHERE name = $3), $4, $5\n )",
"describe": {
"columns": [],
"parameters": {
"Right": 5
},
"nullable": []
}
}
}

@ -265,19 +265,19 @@ impl GistDatabase for Database {
/// Create new gists
async fn new_gist(&self, gist: &CreateGist) -> DBResult<()> {
let now = now_unix_time_stamp();
let privacy = gist.privacy.to_str();
let visibility = gist.visibility.to_str();
if let Some(description) = &gist.description {
sqlx::query!(
"INSERT INTO gists_gists
(owner_id , description, public_id, privacy, created, updated)
(owner_id , description, public_id, visibility, created, updated)
VALUES (
(SELECT ID FROM gists_users WHERE username = $1),
$2, $3, (SELECT ID FROM gists_privacy WHERE name = $4), $5, $6
$2, $3, (SELECT ID FROM gists_visibility WHERE name = $4), $5, $6
)",
gist.owner,
description,
gist.public_id,
privacy,
visibility,
now,
now
)
@ -287,14 +287,14 @@ impl GistDatabase for Database {
} else {
sqlx::query!(
"INSERT INTO gists_gists
(owner_id , public_id, privacy, created, updated)
(owner_id , public_id, visibility, created, updated)
VALUES (
(SELECT ID FROM gists_users WHERE username = $1),
$2, (SELECT ID FROM gists_privacy WHERE name = $3), $4, $5
$2, (SELECT ID FROM gists_visibility WHERE name = $3), $4, $5
)",
gist.owner,
gist.public_id,
privacy,
visibility,
now,
now
)
@ -310,7 +310,7 @@ impl GistDatabase for Database {
InnerGist,
"SELECT
owner,
privacy,
visibility,
created,
updated,
public_id,
@ -336,7 +336,7 @@ impl GistDatabase for Database {
InnerGist,
"SELECT
owner,
privacy,
visibility,
created,
updated,
public_id,
@ -475,11 +475,14 @@ impl GistDatabase for Database {
Ok(())
}
async fn privacy_exists(&self, privacy: &GistPrivacy) -> DBResult<bool> {
let privacy = privacy.to_str();
match sqlx::query!("SELECT ID from gists_privacy WHERE name = $1", privacy)
.fetch_one(&self.pool)
.await
async fn visibility_exists(&self, visibility: &GistVisibility) -> DBResult<bool> {
let visibility = visibility.to_str();
match sqlx::query!(
"SELECT ID from gists_visibility WHERE name = $1",
visibility
)
.fetch_one(&self.pool)
.await
{
Ok(_) => Ok(true),
Err(Error::RowNotFound) => Ok(false),
@ -498,7 +501,7 @@ struct InnerGist {
public_id: String,
created: i64,
updated: i64,
privacy: String,
visibility: String,
}
impl InnerGist {
@ -509,7 +512,7 @@ impl InnerGist {
public_id: self.public_id,
created: self.created,
updated: self.updated,
privacy: GistPrivacy::from_str(&self.privacy)?,
visibility: GistVisibility::from_str(&self.visibility)?,
})
}
}

@ -40,14 +40,14 @@ async fn everyting_works() {
}
#[actix_rt::test]
async fn privacy_test() {
async fn visibility_test() {
let url = env::var("SQLITE_DATABASE_URL").expect("Set SQLITE_DATABASE_URL env var");
let pool_options = SqlitePoolOptions::new().max_connections(2);
let connection_options = ConnectionOptions::Fresh(Fresh { pool_options, url });
let db = connection_options.connect().await.unwrap();
db.migrate().await.unwrap();
privacy_works(&db).await;
visibility_works(&db).await;
}
#[actix_rt::test]

@ -16,6 +16,7 @@
*/
//! represents all the ways a trait can fail using this crate
use std::convert::From;
use std::io::Error as FSErrorInner;
use argon2_creds::errors::CredsError;
use db_core::errors::DBError;
@ -24,6 +25,21 @@ use serde::{Deserialize, Serialize};
use url::ParseError;
use validator::ValidationErrors;
#[derive(Debug, Display, Error)]
pub struct FSError(#[display(fmt = "File System Error {}", _0)] pub FSErrorInner);
impl PartialEq for FSError {
fn eq(&self, other: &Self) -> bool {
self.0.kind() == other.0.kind()
}
}
impl From<FSErrorInner> for ServiceError {
fn from(e: FSErrorInner) -> Self {
Self::FSError(FSError(e))
}
}
#[derive(Debug, PartialEq, Display, Error)]
#[cfg(not(tarpaulin_include))]
/// Error data structure grouping various error subtypes
@ -96,6 +112,9 @@ pub enum ServiceError {
/// email is already taken
#[display(fmt = "Email not available")]
EmailTaken,
#[display(fmt = "File System Error {}", _0)]
FSError(FSError),
}
impl From<CredsError> for ServiceError {
@ -140,7 +159,7 @@ impl From<DBError> for ServiceError {
DBError::GistNotFound => ServiceError::GistNotFound,
DBError::CommentNotFound => ServiceError::CommentNotFound,
DBError::GistIDTaken => ServiceError::InternalServerError,
DBError::UnknownPrivacySpecifier(_) => ServiceError::InternalServerError,
DBError::UnknownVisibilitySpecifier(_) => ServiceError::InternalServerError,
}
}
}
@ -197,6 +216,7 @@ impl ResponseError for ServiceError {
ServiceError::UsernameTaken => 400, //BADREQUEST,
ServiceError::EmailTaken => 400, //BADREQUEST,
ServiceError::FSError(_) => 500,
ServiceError::GistNotFound => 404,
ServiceError::CommentNotFound => 404,

Loading…
Cancel
Save