Get engagements path
This commit is contained in:
		
							parent
							
								
									e946dc456d
								
							
						
					
					
						commit
						efcdaf0cd2
					
				
					 3 changed files with 49 additions and 3 deletions
				
			
		
							
								
								
									
										22
									
								
								server/.sqlx/query-7a112e169de3c28912597e6e9d9984a7fd212436b51011e20f0ba54b209251fc.json
									
										
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								server/.sqlx/query-7a112e169de3c28912597e6e9d9984a7fd212436b51011e20f0ba54b209251fc.json
									
										
									
										generated
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,22 @@
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  "db_name": "PostgreSQL",
 | 
				
			||||||
 | 
					  "query": "SELECT COUNT(*) FROM engagements WHERE post_id = $1",
 | 
				
			||||||
 | 
					  "describe": {
 | 
				
			||||||
 | 
					    "columns": [
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "ordinal": 0,
 | 
				
			||||||
 | 
					        "name": "count",
 | 
				
			||||||
 | 
					        "type_info": "Int8"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    "parameters": {
 | 
				
			||||||
 | 
					      "Left": [
 | 
				
			||||||
 | 
					        "Int8"
 | 
				
			||||||
 | 
					      ]
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "nullable": [
 | 
				
			||||||
 | 
					      null
 | 
				
			||||||
 | 
					    ]
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  "hash": "7a112e169de3c28912597e6e9d9984a7fd212436b51011e20f0ba54b209251fc"
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -19,7 +19,7 @@ use state::CaptchaState;
 | 
				
			||||||
use state::ServerState;
 | 
					use state::ServerState;
 | 
				
			||||||
use util::hex_string;
 | 
					use util::hex_string;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use crate::routes::engage_post;
 | 
					use crate::routes::{engage_post, get_engagements};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#[actix_web::main]
 | 
					#[actix_web::main]
 | 
				
			||||||
async fn main() -> std::io::Result<()> {
 | 
					async fn main() -> std::io::Result<()> {
 | 
				
			||||||
| 
						 | 
					@ -69,6 +69,7 @@ async fn main() -> std::io::Result<()> {
 | 
				
			||||||
                    .service(new_comment)
 | 
					                    .service(new_comment)
 | 
				
			||||||
                    .service(get_comments)
 | 
					                    .service(get_comments)
 | 
				
			||||||
                    .service(engage_post)
 | 
					                    .service(engage_post)
 | 
				
			||||||
 | 
					                    .service(get_engagements)
 | 
				
			||||||
                    .service(post_by_id)
 | 
					                    .service(post_by_id)
 | 
				
			||||||
                    .service(login)
 | 
					                    .service(login)
 | 
				
			||||||
                    .service(register)
 | 
					                    .service(register)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -91,12 +91,35 @@ pub async fn engage_post(
 | 
				
			||||||
        "INSERT INTO engagements (post_id, user_id) VALUES ($1, (SELECT id FROM users WHERE username = $2))",
 | 
					        "INSERT INTO engagements (post_id, user_id) VALUES ($1, (SELECT id FROM users WHERE username = $2))",
 | 
				
			||||||
        post_id,
 | 
					        post_id,
 | 
				
			||||||
        username
 | 
					        username
 | 
				
			||||||
    );
 | 
					    ).execute(&state.pool).await;
 | 
				
			||||||
    q.execute(&state.pool).await.unwrap();
 | 
					
 | 
				
			||||||
 | 
					    match q {
 | 
				
			||||||
 | 
					        Ok(_) => (),
 | 
				
			||||||
 | 
					        Err(e) => {
 | 
				
			||||||
 | 
					            info!("Error engaging post: {}", e);
 | 
				
			||||||
 | 
					            return Ok(HttpResponse::InternalServerError().json("Error"));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return Ok(HttpResponse::Ok().json("Engaged"));
 | 
					    return Ok(HttpResponse::Ok().json("Engaged"));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#[get("/posts/{id}/engage")]
 | 
				
			||||||
 | 
					pub async fn get_engagements(path: Path<i64>, state: Data<ServerState>) -> Result<impl Responder> {
 | 
				
			||||||
 | 
					    let id = path.into_inner();
 | 
				
			||||||
 | 
					    let q = sqlx::query!("SELECT COUNT(*) FROM engagements WHERE post_id = $1", id)
 | 
				
			||||||
 | 
					        .fetch_one(&state.pool)
 | 
				
			||||||
 | 
					        .await;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    match q {
 | 
				
			||||||
 | 
					        Ok(count) => Ok(HttpResponse::Ok().json(count.count)),
 | 
				
			||||||
 | 
					        Err(e) => {
 | 
				
			||||||
 | 
					            info!("Error getting engagements: {}", e);
 | 
				
			||||||
 | 
					            Ok(HttpResponse::InternalServerError().json("Error"))
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#[get("posts/{id}")]
 | 
					#[get("posts/{id}")]
 | 
				
			||||||
pub async fn post_by_id(path: Path<i64>, state: Data<ServerState>) -> Result<impl Responder> {
 | 
					pub async fn post_by_id(path: Path<i64>, state: Data<ServerState>) -> Result<impl Responder> {
 | 
				
			||||||
    let id = path.into_inner();
 | 
					    let id = path.into_inner();
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue