Misc v3 linear tasks (#767)

* v3_reroute 404 error

* hash change

* fixed issue with error conversion

* added new model confirmation tests
+ title name change

* renaming, fields

* owner; test changes

* clippy prepare

* fmt

* merge fixes

* clippy

* working merge

* revs

* merge fixes
This commit is contained in:
Wyatt Verchere
2023-12-01 19:15:00 -08:00
committed by GitHub
parent 2d92b08404
commit a70df067bc
119 changed files with 2897 additions and 1334 deletions

View File

@@ -20,7 +20,7 @@ pub struct Collection {
/// The person that has ownership of this collection.
pub user: UserId,
/// The title or name of the collection.
pub title: String,
pub name: String,
/// A short description of the collection.
pub description: String,
@@ -48,7 +48,7 @@ impl From<database::models::Collection> for Collection {
id: c.id.into(),
user: c.user_id.into(),
created: c.created,
title: c.title,
name: c.name,
description: c.description,
updated: c.updated,
projects: c.projects.into_iter().map(|x| x.into()).collect(),

View File

@@ -21,10 +21,7 @@ pub struct Notification {
pub created: DateTime<Utc>,
pub body: NotificationBody,
// DEPRECATED: use body field instead
#[serde(rename = "type")]
pub type_: Option<String>,
pub title: String,
pub name: String,
pub text: String,
pub link: String,
pub actions: Vec<NotificationAction>,
@@ -63,7 +60,7 @@ pub enum NotificationBody {
},
LegacyMarkdown {
notification_type: Option<String>,
title: String,
name: String,
text: String,
link: String,
actions: Vec<NotificationAction>,
@@ -73,13 +70,12 @@ pub enum NotificationBody {
impl From<DBNotification> for Notification {
fn from(notif: DBNotification) -> Self {
let (type_, title, text, link, actions) = {
let (name, text, link, actions) = {
match &notif.body {
NotificationBody::ProjectUpdate {
project_id,
version_id,
} => (
Some("project_update".to_string()),
"A project you follow has been updated!".to_string(),
format!(
"The project {} has released a new version: {}",
@@ -94,17 +90,16 @@ impl From<DBNotification> for Notification {
team_id,
..
} => (
Some("team_invite".to_string()),
"You have been invited to join a team!".to_string(),
format!("An invite has been sent for you to be {} of a team", role),
format!("/project/{}", project_id),
vec![
NotificationAction {
title: "Accept".to_string(),
name: "Accept".to_string(),
action_route: ("POST".to_string(), format!("team/{team_id}/join")),
},
NotificationAction {
title: "Deny".to_string(),
name: "Deny".to_string(),
action_route: (
"DELETE".to_string(),
format!("team/{team_id}/members/{}", UserId::from(notif.user_id)),
@@ -118,7 +113,6 @@ impl From<DBNotification> for Notification {
team_id,
..
} => (
Some("organization_invite".to_string()),
"You have been invited to join an organization!".to_string(),
format!(
"An invite has been sent for you to be {} of an organization",
@@ -127,11 +121,11 @@ impl From<DBNotification> for Notification {
format!("/organization/{}", organization_id),
vec![
NotificationAction {
title: "Accept".to_string(),
name: "Accept".to_string(),
action_route: ("POST".to_string(), format!("team/{team_id}/join")),
},
NotificationAction {
title: "Deny".to_string(),
name: "Deny".to_string(),
action_route: (
"DELETE".to_string(),
format!(
@@ -147,7 +141,6 @@ impl From<DBNotification> for Notification {
new_status,
project_id,
} => (
Some("status_change".to_string()),
"Project status has changed".to_string(),
format!(
"Status has changed from {} to {}",
@@ -162,7 +155,6 @@ impl From<DBNotification> for Notification {
report_id,
..
} => (
Some("moderator_message".to_string()),
"A moderator has sent you a message!".to_string(),
"Click on the link to read more.".to_string(),
if let Some(project_id) = project_id {
@@ -175,25 +167,20 @@ impl From<DBNotification> for Notification {
vec![],
),
NotificationBody::LegacyMarkdown {
notification_type,
title,
name,
text,
link,
actions,
..
} => (
notification_type.clone(),
title.clone(),
name.clone(),
text.clone(),
link.clone(),
actions.clone().into_iter().map(Into::into).collect(),
),
NotificationBody::Unknown => (
None,
"".to_string(),
"".to_string(),
"#".to_string(),
vec![],
),
NotificationBody::Unknown => {
("".to_string(), "".to_string(), "#".to_string(), vec![])
}
}
};
@@ -204,9 +191,7 @@ impl From<DBNotification> for Notification {
read: notif.read,
created: notif.created,
// DEPRECATED
type_,
title,
name,
text,
link,
actions,
@@ -216,7 +201,7 @@ impl From<DBNotification> for Notification {
#[derive(Serialize, Deserialize, Clone)]
pub struct NotificationAction {
pub title: String,
pub name: String,
/// The route to call when this notification action is called. Formatted HTTP Method, route
pub action_route: (String, String),
}
@@ -224,7 +209,7 @@ pub struct NotificationAction {
impl From<DBNotificationAction> for NotificationAction {
fn from(act: DBNotificationAction) -> Self {
Self {
title: act.title,
name: act.name,
action_route: (act.action_route_method, act.action_route),
}
}

View File

@@ -16,7 +16,7 @@ pub struct Organization {
/// The id of the organization
pub id: OrganizationId,
/// The title (and slug) of the organization
pub title: String,
pub name: String,
/// The associated team of the organization
pub team_id: TeamId,
/// The description of the organization
@@ -38,7 +38,7 @@ impl Organization {
) -> Self {
Self {
id: data.id.into(),
title: data.title,
name: data.name,
team_id: data.team_id.into(),
description: data.description,
members: team_members,

View File

@@ -34,17 +34,15 @@ pub struct Project {
/// The aggregated games of the versions of this project
pub games: Vec<String>,
/// The team of people that has ownership of this project.
pub team: TeamId,
pub team_id: TeamId,
/// The optional organization of people that have ownership of this project.
pub organization: Option<OrganizationId>,
/// The title or name of the project.
pub title: String,
pub name: String,
/// A short description of the project.
pub description: String,
pub summary: String,
/// A long form description of the project.
pub body: String,
/// The link to the long description of the project. Deprecated, always None
pub body_url: Option<String>,
pub description: String,
/// The date at which the project was first published.
pub published: DateTime<Utc>,
@@ -151,12 +149,11 @@ impl From<QueryProject> for Project {
slug: m.slug,
project_types: data.project_types,
games: data.games,
team: m.team_id.into(),
team_id: m.team_id.into(),
organization: m.organization_id.map(|i| i.into()),
title: m.title,
name: m.name,
summary: m.summary,
description: m.description,
body: m.body,
body_url: None,
published: m.published,
updated: m.updated,
approved: m.approved,
@@ -210,7 +207,7 @@ impl From<QueryProject> for Project {
.map(|x| GalleryItem {
url: x.image_url,
featured: x.featured,
title: x.title,
name: x.name,
description: x.description,
created: x.created,
ordering: x.ordering,
@@ -228,7 +225,7 @@ impl From<QueryProject> for Project {
pub struct GalleryItem {
pub url: String,
pub featured: bool,
pub title: Option<String>,
pub name: Option<String>,
pub description: Option<String>,
pub created: DateTime<Utc>,
pub ordering: i64,
@@ -464,8 +461,6 @@ pub struct Version {
pub games: Vec<String>,
/// The changelog for this version of the project.
pub changelog: String,
/// A link to the changelog for this version of the project. Deprecated, always None
pub changelog_url: Option<String>,
/// The date that this version was published.
pub date_published: DateTime<Utc>,
@@ -517,7 +512,6 @@ impl From<QueryVersion> for Version {
project_types: data.project_types,
games: data.games,
changelog: v.changelog,
changelog_url: None,
date_published: v.date_published,
downloads: v.downloads as u32,
version_type: match v.version_type.as_str() {

View File

@@ -135,6 +135,8 @@ pub struct TeamMember {
pub user: User,
/// The role of the user in the team
pub role: String,
/// Is the user the owner of the team?
pub is_owner: bool,
/// A bitset containing the user's permissions in this team.
/// In an organization-controlled project, these are the unique overriding permissions for the user's role for any project in the organization, if they exist.
/// In an organization, these are the default project permissions for any project in the organization.
@@ -178,6 +180,7 @@ impl TeamMember {
team_id: data.team_id.into(),
user,
role: data.role,
is_owner: data.is_owner,
permissions: if override_permissions {
None
} else {