This commit is contained in:
2024-12-11 01:13:14 -08:00
parent f28eb6c422
commit 863dccd4fd
10 changed files with 40 additions and 189 deletions

View File

@@ -1,79 +0,0 @@
[
{
"major_group": "Upper Body",
"group_name": "Chest",
"muscles": [
"Pectoralis major",
"Pectoralis minor"
]
},
{
"major_group": "Upper Body",
"group_name": "Back",
"muscles": [
"Latissimus dorsi",
"Trapezius",
"Rhomboids",
"Erector spinae",
"Teres major"
]
},
{
"major_group": "Upper Body",
"group_name": "Shoulders",
"muscles": [
"Deltoids",
"Rotator cuff muscles"
]
},
{
"major_group": "Upper Body",
"group_name": "Arms",
"muscles": [
"Biceps brachii",
"Brachialis",
"Triceps brachii",
"Brachioradialis",
"Forearm flexors/extensors"
]
},
{
"major_group": "Core",
"group_name": "Abdominals",
"muscles": [
"Rectus abdominis",
"Transverse abdominis",
"External obliques",
"Internal obliques"
]
},
{
"major_group": "Core",
"group_name": "Lower Back",
"muscles": [
"Quadratus lumborum",
"Erector spinae"
]
},
{
"major_group": "Lower Body",
"group_name": "Legs",
"muscles": [
"Quadriceps",
"Hamstrings",
"Gluteus maximus",
"Gluteus medius",
"Gluteus minimus",
"Adductors",
"Abductors"
]
},
{
"major_group": "Lower Body",
"group_name": "Calves",
"muscles": [
"Gastrocnemius",
"Soleus"
]
}
]

8
gen.ts
View File

@@ -16,8 +16,8 @@ const data: MuscleGroup[] = [
major_group: "Upper Body", major_group: "Upper Body",
group_name: "Chest", group_name: "Chest",
muscles: [ muscles: [
{ colloquial_name: "Pecs", scientific_name: "Pectoralis major" }, { colloquial_name: "Upper Pecs", scientific_name: "Clavicular Pectoralis Major" },
{ colloquial_name: "Pec Minor", scientific_name: "Pectoralis minor" } { colloquial_name: "Pecs", scientific_name: "Sternal Pectoralis Major" },
] ]
}, },
{ {
@@ -35,7 +35,9 @@ const data: MuscleGroup[] = [
major_group: "Upper Body", major_group: "Upper Body",
group_name: "Shoulders", group_name: "Shoulders",
muscles: [ muscles: [
{ colloquial_name: "Delts", scientific_name: "Deltoideus" }, { colloquial_name: "Front Delts", scientific_name: "Anterior deltoid" },
{ colloquial_name: "Rear Delts", scientific_name: "Posterior deltoid" },
{ colloquial_name: "Side Delts", scientific_name: "Lateral deltoid" },
{ colloquial_name: "Rotator Cuff", scientific_name: "Rotator cuff" } { colloquial_name: "Rotator Cuff", scientific_name: "Rotator cuff" }
] ]
}, },

View File

@@ -1,53 +0,0 @@
{
"Upper Body": {
"Chest": {
"Pectoralis major": "Pecs",
"Pectoralis minor": "Pecs"
},
"Back": {
"Latissimus dorsi": "Lats",
"Trapezius": "Traps",
"Rhomboids": "Upper/mid-back muscles",
"Erector spinae": "Spinal erectors",
"Teres major": "Upper lats"
},
"Shoulders": {
"Deltoids": "Delts",
"Rotator cuff muscles": "Rotator cuff"
},
"Arms": {
"Biceps brachii": "Biceps",
"Brachialis": "Biceps under-muscle",
"Triceps brachii": "Triceps",
"Brachioradialis": "Forearm muscles",
"Forearm flexors/extensors": "Forearm muscles"
}
},
"Core": {
"Abdominals": {
"Rectus abdominis": "Abs",
"Transverse abdominis": "Deep core abs",
"External obliques": "Side abs",
"Internal obliques": "Inner side abs"
},
"Lower Back": {
"Quadratus lumborum": "QL/Lower back muscles",
"Erector spinae": "Spinal erectors"
}
},
"Lower Body": {
"Legs": {
"Quadriceps": "Quads",
"Hamstrings": "Quads",
"Gluteus maximus": "Glutes/Butt muscles",
"Gluteus medius": "Glutes/Butt muscles",
"Gluteus minimus": "Glutes/Butt muscles",
"Adductors": "Adductors",
"Abductors": "Adductors"
},
"Calves": {
"Gastrocnemius": "Calves",
"Soleus": "Calves"
}
}
}

View File

@@ -6,7 +6,7 @@ use utoipa_axum::{router::OpenApiRouter, routes};
use utoipa_swagger_ui::SwaggerUi; use utoipa_swagger_ui::SwaggerUi;
// tags // tags
use v1::{auth::AUTH_TAG, body_parts::BODY_PARTS_TAG, exercises::EXERCISES_TAG}; use v1::{auth::AUTH_TAG, exercises::EXERCISES_TAG, muscles::MUSCLES_TAG};
mod v1; mod v1;
mod structs; mod structs;
@@ -28,7 +28,7 @@ pub(crate) use utoipa::ToSchema;
tags( tags(
(name = AUTH_TAG, description = "Authentication API endpoints"), (name = AUTH_TAG, description = "Authentication API endpoints"),
(name = EXERCISES_TAG, description = "Exercise API endpoints"), (name = EXERCISES_TAG, description = "Exercise API endpoints"),
(name = BODY_PARTS_TAG, description = "Body part API endpoints"), (name = MUSCLES_TAG, description = "Muscle API endpoints"),
// (name = CUSTOMER_TAG, description = "Customer API endpoints"), // (name = CUSTOMER_TAG, description = "Customer API endpoints"),
// (name = ORDER_TAG, description = "Order API endpoints") // (name = ORDER_TAG, description = "Order API endpoints")
), ),

View File

@@ -1,34 +0,0 @@
use extractors::users::UserId;
use sqlx::query;
use crate::*;
#[derive(Serialize, Deserialize, ToSchema)]
pub struct CreateBodyPartBody {
name: String,
}
#[utoipa::path(post, path = "/create", responses((status = OK, body = String)), tag = super::BODY_PARTS_TAG)]
pub async fn create(
State(state): State<AppState>,
UserId(user_id): UserId,
Json(body): Json<CreateBodyPartBody>,
) -> Result<String, AppError> {
let is_admin = query!("SELECT is_admin FROM users WHERE id = $1", user_id)
.fetch_one(&*state.db)
.await?
.is_admin;
if !is_admin {
return Err(AppError::Error(Errors::Unauthorized));
}
let out = query!(
"INSERT INTO body_parts (name) VALUES ($1) RETURNING id",
body.name
)
.fetch_one(&*state.db)
.await?;
Ok(out.id.to_string())
}

View File

@@ -1,13 +0,0 @@
use crate::AppState;
pub(super) use super::*;
pub mod create;
pub const BODY_PARTS_TAG: &str = "body_parts";
pub(super) fn router(state: AppState) -> OpenApiRouter {
OpenApiRouter::new()
.routes(routes!(create::create))
.with_state(state)
}

View File

@@ -4,7 +4,6 @@ pub(super) use utoipa_axum::routes;
use crate::AppState; use crate::AppState;
pub mod auth; pub mod auth;
pub mod body_parts;
pub mod exercises; pub mod exercises;
pub mod muscles; pub mod muscles;
@@ -13,6 +12,5 @@ pub fn router(state: AppState) -> OpenApiRouter {
.with_state(state.clone()) .with_state(state.clone())
.nest("/auth", auth::router(state.clone())) .nest("/auth", auth::router(state.clone()))
.nest("/exercises", exercises::router(state.clone())) .nest("/exercises", exercises::router(state.clone()))
.nest("/body_parts", body_parts::router(state.clone()))
.nest("/muscles", muscles::router(state.clone())) .nest("/muscles", muscles::router(state.clone()))
} }

View File

@@ -6,7 +6,9 @@ use crate::*;
#[derive(Serialize, Deserialize, ToSchema)] #[derive(Serialize, Deserialize, ToSchema)]
pub struct CreateMuscleBody { pub struct CreateMuscleBody {
name: String, name: String,
body_parts: Vec<String>, scientific_name: String,
major_group: String,
minor_group: String,
} }
#[utoipa::path(post, path = "/create", responses((status = OK, body = String)), tag = super::MUSCLES_TAG)] #[utoipa::path(post, path = "/create", responses((status = OK, body = String)), tag = super::MUSCLES_TAG)]
@@ -25,8 +27,11 @@ pub async fn create(
} }
let out = query!( let out = query!(
"INSERT INTO muscles (name) VALUES ($1) RETURNING id", "INSERT INTO muscles (name, scientific_name, major_group, minor_group) VALUES ($1, $2, $3, $4) RETURNING id",
body.name body.name,
body.scientific_name,
body.major_group,
body.minor_group,
) )
.fetch_one(&*state.db) .fetch_one(&*state.db)
.await?; .await?;

23
src/v1/muscles/get_all.rs Normal file
View File

@@ -0,0 +1,23 @@
// use extractors::users::UserId;
use sqlx::query_as;
use crate::*;
#[derive(Serialize, Deserialize, ToSchema)]
pub struct Muscle {
id: String,
name: String,
scientific_name: Option<String>,
major_group: Option<String>,
minor_group: String,
}
#[utoipa::path(get, path = "/all", responses((status = OK, body = Muscle)), tag = super::MUSCLES_TAG)]
pub async fn get_all(State(state): State<AppState>) -> Result<Json<Vec<Muscle>>, AppError> {
let muscles = query_as!(Muscle, "SELECT * FROM muscles")
.fetch_all(&*state.db)
.await?;
Ok(Json(muscles))
}

View File

@@ -3,11 +3,13 @@ use crate::AppState;
pub(super) use super::*; pub(super) use super::*;
pub mod create; pub mod create;
pub mod get_all;
pub const MUSCLES_TAG: &str = "muscles"; pub const MUSCLES_TAG: &str = "muscles";
pub(super) fn router(state: AppState) -> OpenApiRouter { pub(super) fn router(state: AppState) -> OpenApiRouter {
OpenApiRouter::new() OpenApiRouter::new()
.routes(routes!(create::create)) .routes(routes!(create::create))
.routes(routes!(get_all::get_all))
.with_state(state) .with_state(state)
} }